> For the complete documentation index, see [llms.txt](https://help.bioinsight.illumina.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.bioinsight.illumina.com/connected-insights/configure/configuration/c-pipeline-and-qc-configuration/pipeline-and-qc-yaml-reference/sample-custom-pipeline.md).

# Sample Custom Pipeline YAML

```
## Sample custom pipeline + QC configuration for Illumina Connected Insights v5.5.
##
## Download the template from Connected Insights (Configuration > General > Pipeline & QC Configuration
## > + New > "attached template"), edit the values for your own pipeline, then upload it
## to register a new pipeline together with its QC thresholds.
##
## The file has three parts:
##   1. pipeline:   registration metadata for the pipeline.
##   2. file-layout sections (sampleSheet / jointFiles / sampleFiles) describing where
##      each analysis output file is located. jointFiles is required to import variants;
##      sampleSheet and sampleFiles are optional. Stored as-is.
##   3. threshold:  the QC metrics used to build the pipeline's QC thresholds.
##
## Path placeholders such as {sampleId.DNA}, {sampleId.RNA} and {prefix} are resolved
## per case at ingestion time. A trailing ", Optional" marks a file that may be absent.

pipeline:
  # required - human-readable name shown in Connected Insights (use a report-friendly name)
  displayName: Sample Custom Pipeline v1.0.0
  # required - internal pipeline name (alphanumeric, underscore, dash only)
  name: Sample_Custom_Pipeline
  # required - pipeline version
  version: 1.0.0
  # optional - Platform Core pipeline id and urn. Provide BOTH to link the pipeline
  # to Platform Core for cloud import. Omit BOTH when Platform Core linking is not
  # needed. Either way, the pipeline supports Data Uploader and manual local upload.
  # Supplying only one is a validation error.
  icaPipelineId: 00000000-0000-0000-0000-000000000000
  icaUrn: urn:ilmn:ica:pipeline:00000000-0000-0000-0000-000000000000
  # optional - only "WGS" is meaningful here: it selects the DRAGEN-style .csv QC parser.
  # Omit this field for a TSO 500-style MetricsOutput.tsv. Any other value is treated as TSO 500 style.
  type: WGS
  # optional - glob pattern(s) whose presence signals a completed run.
  # NOTE: successMarkerFile / failureMarkerFile are used ONLY by the Connected Insights Data Uploader
  # when it monitors a local folder for auto-upload. They are ignored for Platform Core
  # cloud analysis, which reports completion via the platform's own status events.
  successMarkerFile:
    - "{prefix}/{prefix}.time_metrics.csv, Optional"
    - "{sampleId.DNA}/{sampleId.DNA}.time_metrics.csv, Optional"
    - "{sampleId.RNA}/{sampleId.RNA}.time_metrics.csv, Optional"
  # optional - file name whose presence signals a failed run (Data Uploader only)
  failureMarkerFile: "failure.txt"

## ── File-layout sections ─────────────────────────────────────────────────────────
## These describe where the analysis outputs are located and are stored verbatim.
## jointFiles is required in practice: it declares the variant files (SNV/CNV/SV/fusion),
## and an analysis imported without it brings in no variants and may fail.
## sampleSheet and sampleFiles are optional. Each file slot accepts an ordered list of
## candidate glob patterns; Connected Insights ingests the first pattern that matches.
sampleSheet:
  filePath: SampleSheet.csv
  columnAliases:
    sampleType: Sample_Type
    sampleId: Sample_ID
    pairId: PairID
  dataHeaderRowMarker:
    - "[Sample_Data]"
    - "[Cloud_Sample_Data]"

jointFiles:
  snvFiles:
    - "{sampleId.DNA}/{sampleId.DNA}.hard-filtered.vcf.gz, Optional"
    - "{prefix}/{prefix}.hard-filtered.vcf.gz, Optional"
  cnvFiles:
    - "{sampleId.DNA}/{sampleId.DNA}.cnv.vcf.gz, Optional"
    - "{prefix}/{prefix}.cnv.vcf.gz, Optional"
  svFiles:
    - "{sampleId.DNA}/{sampleId.DNA}.sv.vcf.gz, Optional"
    - "{prefix}/{prefix}.sv.vcf.gz, Optional"
  rnaFusionFiles:
    - "{sampleId.RNA}/{sampleId.RNA}.fusion_candidates.vcf.gz, Optional"
    - "{prefix}/{prefix}.fusion_candidates.vcf.gz, Optional"
  metricsQCFile:
    - "{sampleId.DNA}/{sampleId.DNA}.mapping_metrics.csv, Optional"
    - "{sampleId.DNA}/{sampleId.DNA}.wgs_coverage_metrics.csv, Optional"
    - "{sampleId.DNA}/{sampleId.DNA}.vc_metrics.csv, Optional"
    - "{sampleId.RNA}/{sampleId.RNA}.mapping_metrics.csv, Optional"
    - "{prefix}/{prefix}.mapping_metrics.csv, Optional"
    - "{prefix}/{prefix}.wgs_coverage_metrics.csv, Optional"

sampleFiles:
  tumorPairId:
    visualizationFiles:
      coverageBedFiles:
        - "{sampleId.DNA}/{sampleId.DNA}.target_bed_read_cov_report.bed, Optional"
        - "{prefix}/{prefix}.target_bed_read_cov_report.bed, Optional"
      coverageFiles:
        - "{sampleId.DNA}/{sampleId.DNA}.target.counts.gc-corrected.gz, Optional"
        - "{prefix}/{prefix}.target.counts.gc-corrected.gz, Optional"
    alignmentFiles:
      dnaBamFile:
        - "{sampleId.DNA}/{sampleId.DNA}_tumor.bam, Optional"
        - "{sampleId.DNA}/{sampleId.DNA}_tumor.cram, Optional"
        - "{prefix}/{prefix}_tumor.bam, Optional"
      dnaBaiFile:
        - "{sampleId.DNA}/{sampleId.DNA}_tumor.bam.bai, Optional"
        - "{sampleId.DNA}/{sampleId.DNA}_tumor.cram.crai, Optional"
        - "{prefix}/{prefix}_tumor.bam.bai, Optional"
      rnaBamFile:
        - "{sampleId.RNA}/{sampleId.RNA}.bam, Optional"
        - "{prefix}/{prefix}.bam, Optional"
      rnaBaiFile:
        - "{sampleId.RNA}/{sampleId.RNA}.bam.bai, Optional"
        - "{prefix}/{prefix}.bam.bai, Optional"

## ── Threshold / QC metrics ───────────────────────────────────────────────────────
## At least one metric is required. Each entry describes one QC metric completely:
##   - name:       the display label for the metric.
##   - group:      display section/group shown in Lab QC and Results.
##   - raw:        maps to the source metric. Default when display and source
##                 sections match:
##                   group: "Sample Metrics"
##                   raw: "PERCENT_Q30"
##                 Omit `raw` when display `name` equals the source metric name.
##                 Optional nested form when UI `group` should differ from the
##                 metrics-file section, or to disambiguate duplicate metric names:
##                   raw:
##                     name:  lab/DRAGEN metric name
##                     group: source section in the metrics file
##   - category:   overrides defaultCategory for this metric (RUN_QC | SAMPLE_QC | GENE_QC).
##   - type:       RANGE | BOOLEAN (RANGE covers numeric, percentage and count metrics).
##   - isLowerEnable / isUpperEnable: which bound(s) are evaluated.
##   - lowerValue / upperValue:       the bound value(s), as strings.
##   - displayInOverView:             up-level this metric to the case Results tab and report.
threshold:
  defaultCategory: SAMPLE_QC
  metrics:
    # Display name differs from the lab metric name -> map it with the raw string shorthand.
    - name: "Total Reads (Count)"
      group: "MAPPING/ALIGNING SUMMARY"
      raw: "Total input reads"
      displayInOverView: true
      type: RANGE
      isLowerEnable: true
      isUpperEnable: false
      lowerValue: "1000000"
    - name: "Estimated Sample Contamination"
      group: "MAPPING/ALIGNING SUMMARY"
      raw: "Estimated sample contamination"
      displayInOverView: true
      type: RANGE
      isLowerEnable: false
      isUpperEnable: true
      upperValue: "0.05"
    # Display name and lab name already match, so raw can be omitted entirely.
    - name: "Average alignment coverage over target region"
      group: "COVERAGE SUMMARY"
      displayInOverView: true
      type: RANGE
      isLowerEnable: true
      isUpperEnable: false
      lowerValue: "100"
    # Same metric shown under two display groups; raw.group disambiguates the source
    # group each one pulls from (tumor vs normal).
    - name: "Q30 Bases (Percentage)"
      group: "TUMOR MAPPING/ALIGNING SUMMARY (TUMOR-NORMAL)"
      raw:
        name: "Q30 bases (Percentage)"
        group: "TUMOR MAPPING/ALIGNING SUMMARY"
      type: RANGE
      isLowerEnable: true
      isUpperEnable: false
      lowerValue: "80"
    - name: "Q30 Bases (Percentage)"
      group: "NORMAL MAPPING/ALIGNING SUMMARY (TUMOR-NORMAL)"
      raw:
        name: "Q30 bases (Percentage)"
        group: "NORMAL MAPPING/ALIGNING SUMMARY"
      type: RANGE
      isLowerEnable: true
      isUpperEnable: false
      lowerValue: "80"
    # GENE_QC "Gene Coverage" metric. Its lowerValue sets the reference line on the
    # per-gene coverage plot in Results page.
    - name: "Gene Coverage"
      group: "Coverage Plot"
      category: GENE_QC
      raw: "GENE_COVERAGE"
      type: RANGE
      isLowerEnable: true
      isUpperEnable: false
      lowerValue: "900"
      disableDisplayInOverView: true
```

For field-by-field documentation, refer to [Pipeline and QC Configuration YAML](/connected-insights/configure/configuration/c-pipeline-and-qc-configuration/pipeline-and-qc-yaml-reference.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.bioinsight.illumina.com/connected-insights/configure/configuration/c-pipeline-and-qc-configuration/pipeline-and-qc-yaml-reference/sample-custom-pipeline.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
