diff --git a/src/seqvars/ingest/header.rs b/src/seqvars/ingest/header.rs
index 28590822..1bc067b0 100644
--- a/src/seqvars/ingest/header.rs
+++ b/src/seqvars/ingest/header.rs
@@ -86,18 +86,30 @@ fn add_contigs_37(builder: vcf::header::Builder) -> Result<vcf::header::Builder,
         ("20", 63025520),
         ("21", 48129895),
         ("22", 51304566),
-        ("X ", 155270560),
-        ("Y ", 59373566),
+        ("X", 155270560),
+        ("Y", 59373566),
         ("MT", 16569),
     ];
 
     for (contig, length) in specs {
         builder = builder.add_contig(
-            contig.parse()?,
+            contig
+                .parse()
+                .map_err(|_| anyhow::anyhow!("invalid contig: {}", contig))?,
             Map::<Contig>::builder()
                 .set_length(*length)
-                .insert("assembly".parse()?, "GRCh37")
-                .insert("species".parse()?, "Homo sapiens")
+                .insert(
+                    "assembly"
+                        .parse()
+                        .map_err(|_| anyhow::anyhow!("invalid key: assembly"))?,
+                    "GRCh37",
+                )
+                .insert(
+                    "species"
+                        .parse()
+                        .map_err(|_| anyhow::anyhow!("invalid key: species"))?,
+                    "Homo sapiens",
+                )
                 .build()?,
         );
     }
@@ -142,11 +154,23 @@ fn add_contigs_38(builder: vcf::header::Builder) -> Result<vcf::header::Builder,
 
     for (contig, length) in specs {
         builder = builder.add_contig(
-            contig.parse()?,
+            contig
+                .parse()
+                .map_err(|_| anyhow::anyhow!("invalid contig: {}", contig))?,
             Map::<Contig>::builder()
                 .set_length(*length)
-                .insert("assembly".parse()?, "GRCh37")
-                .insert("species".parse()?, "Homo sapiens")
+                .insert(
+                    "assembly"
+                        .parse()
+                        .map_err(|_| anyhow::anyhow!("invalid key: assembly"))?,
+                    "GRCh38",
+                )
+                .insert(
+                    "species"
+                        .parse()
+                        .map_err(|_| anyhow::anyhow!("invalid key: species"))?,
+                    "Homo sapiens",
+                )
                 .build()?,
         );
     }
@@ -310,7 +334,8 @@ pub fn build_output_header(
     let mut builder = match genomebuild {
         GenomeRelease::Grch37 => add_contigs_37(builder),
         GenomeRelease::Grch38 => add_contigs_38(builder),
-    }?;
+    }
+    .map_err(|e| anyhow::anyhow!("problem adding contigs: {}", e))?;
 
     if let Some(pedigree) = pedigree {
         let ped_idv = pedigree
@@ -321,7 +346,7 @@ pub fn build_output_header(
         let input_idv = input_header
             .sample_names()
             .iter()
-            .map(|n| n.clone())
+            .cloned()
             .collect::<HashSet<_>>();
         if !ped_idv.eq(&input_idv) {
             anyhow::bail!(
@@ -436,7 +461,7 @@ mod test {
     fn variant_caller_guess(#[case] path: &str) -> Result<(), anyhow::Error> {
         set_snapshot_suffix!("{}", path.split('/').last().unwrap());
 
-        let vcf_header = noodles_vcf::reader::Builder::default()
+        let vcf_header = noodles_vcf::reader::Builder
             .build_from_path(path)?
             .read_header()?;
 
@@ -454,12 +479,14 @@ mod test {
         set_snapshot_suffix!("{}", path.split('/').last().unwrap());
         let tmpdir = temp_testdir::TempDir::default();
 
-        let input_vcf_header = noodles_vcf::reader::Builder::default()
+        let pedigree = PedigreeByName::from_path(path.replace(".vcf", ".ped")).unwrap();
+
+        let input_vcf_header = noodles_vcf::reader::Builder
             .build_from_path(path)?
             .read_header()?;
         let output_vcf_header = super::build_output_header(
             &input_vcf_header,
-            &None,
+            &Some(pedigree),
             crate::common::GenomeRelease::Grch37,
             "x.y.z",
         )?;
@@ -485,36 +512,10 @@ mod test {
         set_snapshot_suffix!("{}", path.split('/').last().unwrap());
         let tmpdir = temp_testdir::TempDir::default();
 
-        let input_vcf_header = noodles_vcf::reader::Builder::default()
-            .build_from_path(path)?
-            .read_header()?;
-        let output_vcf_header = super::build_output_header(
-            &input_vcf_header,
-            &None,
-            crate::common::GenomeRelease::Grch38,
-            "x.y.z",
-        )?;
-
-        let out_path = tmpdir.join("out.vcf");
-        let out_path_str = out_path.to_str().expect("invalid path");
-        {
-            noodles_vcf::writer::Writer::new(std::fs::File::create(out_path_str)?)
-                .write_header(&output_vcf_header)?;
-        }
-
-        insta::assert_snapshot!(std::fs::read_to_string(out_path_str)?);
-
-        Ok(())
-    }
-
-    #[test]
-    fn build_output_header_ped() -> Result<(), anyhow::Error> {
-        let tmpdir = temp_testdir::TempDir::default();
-
-        let pedigree = PedigreeByName::from_path("tests/seqvars/ingest/example_gatk_hc.3.7-0.ped")?;
+        let pedigree = PedigreeByName::from_path(path.replace(".vcf", ".ped")).unwrap();
 
-        let input_vcf_header = noodles_vcf::reader::Builder::default()
-            .build_from_path("tests/seqvars/ingest/example_gatk_hc.3.7-0.vcf")?
+        let input_vcf_header = noodles_vcf::reader::Builder
+            .build_from_path(path)?
             .read_header()?;
         let output_vcf_header = super::build_output_header(
             &input_vcf_header,
diff --git a/src/seqvars/ingest/mod.rs b/src/seqvars/ingest/mod.rs
index 30868f46..c0b37548 100644
--- a/src/seqvars/ingest/mod.rs
+++ b/src/seqvars/ingest/mod.rs
@@ -50,7 +50,7 @@ pub fn run(args_common: &crate::common::Args, args: &Args) -> Result<(), anyhow:
         let file = std::fs::File::open(&args.path_in)
             .map_err(|e| anyhow::anyhow!("could not open input file {}: {}", &args.path_in, e))
             .map(std::io::BufReader::new)?;
-        vcf::reader::Builder::default()
+        vcf::reader::Builder
             .build_from_reader(file)
             .map_err(|e| anyhow::anyhow!("could not build VCF reader: {}", e))?
     };
@@ -64,7 +64,8 @@ pub fn run(args_common: &crate::common::Args, args: &Args) -> Result<(), anyhow:
         &Some(pedigree),
         args.genomebuild,
         worker_version(),
-    )?;
+    )
+    .map_err(|e| anyhow::anyhow!("problem building output header: {}", e))?;
 
     let mut output_writer = {
         let writer = std::fs::File::create(&args.path_out).map_err(|e| {
@@ -77,7 +78,9 @@ pub fn run(args_common: &crate::common::Args, args: &Args) -> Result<(), anyhow:
         let writer = std::io::BufWriter::new(writer);
         vcf::writer::Writer::new(writer)
     };
-    output_writer.write_header(&output_header)?;
+    output_writer
+        .write_header(&output_header)
+        .map_err(|e| anyhow::anyhow!("problem writing header: {}", e))?;
 
     tracing::info!(
         "All of `seqvars ingest` completed in {:?}",
@@ -105,14 +108,14 @@ mod test {
     #[case("tests/seqvars/ingest/example_dragen.07.021.624.3.10.9.vcf")]
     #[case("tests/seqvars/ingest/example_gatk_hc.3.7-0.vcf")]
     #[case("tests/seqvars/ingest/example_gatk_hc.4.4.0.0.vcf")]
-    fn smoke_test_run(#[case] path: &str) {
-        set_snapshot_suffix!("{:?}", path.split('/').last().unwrap().replace(".", "_"));
+    fn smoke_test_run(#[case] path: &str) -> Result<(), anyhow::Error> {
+        set_snapshot_suffix!("{:?}", path.split('/').last().unwrap().replace('.', "_"));
 
         let tmpdir = temp_testdir::TempDir::default();
 
         let args_common = Default::default();
         let args = super::Args {
-            path_ped: "tests/seqvars/ingest/example_gatk_hc.3.7-0.ped".into(),
+            path_ped: path.replace(".vcf", ".ped"),
             genomebuild: GenomeRelease::Grch37,
             path_in: path.into(),
             path_out: tmpdir
@@ -121,6 +124,6 @@ mod test {
                 .expect("invalid path")
                 .into(),
         };
-        super::run(&args_common, &args).unwrap();
+        super::run(&args_common, &args)
     }
 }
diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_dragen.07.021.624.3.10.4.vcf.snap b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_dragen.07.021.624.3.10.4.vcf.snap
new file mode 100644
index 00000000..64a8c516
--- /dev/null
+++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_dragen.07.021.624.3.10.4.vcf.snap
@@ -0,0 +1,54 @@
+---
+source: src/seqvars/ingest/header.rs
+expression: "std::fs::read_to_string(out_path_str)?"
+---
+##fileformat=VCFv4.4
+##INFO=<ID=gnomad_exomes_an,Number=1,Type=Integer,Description="Number of samples in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_hemi,Number=1,Type=Integer,Description="Number of hemi. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_genomes_an,Number=1,Type=Integer,Description="Number of samples in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_hemi,Number=1,Type=Integer,Description="Number of hemi. alt. carriers in gnomAD genomes">
+##INFO=<ID=helix_an,Number=1,Type=Integer,Description="Number of samples in HelixMtDb">
+##INFO=<ID=helix_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in HelixMtDb">
+##INFO=<ID=helix_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in HelixMtDb">
+##INFO=<ID=ANN,Number=.,Type=String,Description="Functional annotations: 'Allele | Annotation | Annotation_Impact | Gene_Name | Gene_ID | Feature_Type | Feature_ID | Transcript_BioType | Rank | HGVS.c | HGVS.p | cDNA.pos / cDNA.length | CDS.pos / CDS.length | AA.pos / AA.length | Distance | ERRORS / WARNINGS / INFO'">
+##FILTER=<ID=PASS,Description="All filters passed">
+##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Read depth for each allele">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read depth">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Conditional genotype quality">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
+##contig=<ID=1,length=249250621,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=2,length=243199373,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=3,length=198022430,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=4,length=191154276,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=5,length=180915260,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=6,length=171115067,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=7,length=159138663,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=8,length=146364022,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=9,length=141213431,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=10,length=135534747,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=11,length=135006516,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=12,length=133851895,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=13,length=115169878,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=14,length=107349540,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=15,length=102531392,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=16,length=90354753,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=17,length=81195210,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=18,length=78077248,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=19,length=59128983,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=20,length=63025520,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=21,length=48129895,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=22,length=51304566,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=X,length=155270560,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=Y,length=59373566,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=MT,length=16569,assembly="GRCh37",species="Homo sapiens">
+##SAMPLE=<ID=NA12878,Sex="Male",Disease="Affected">
+##PEDIGREE=<ID=NA12878>
+##x-varfish-version=<ID=varfish-server-worker,Version="x.y.z">
+##x-varfish-version=<ID=orig-caller,Name="Dragen",Version="SW: 07.021.624.3.10.4, HW: 07.021.624">
+#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA12878
+
diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_dragen.07.021.624.3.10.9.vcf.snap b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_dragen.07.021.624.3.10.9.vcf.snap
new file mode 100644
index 00000000..504e97b8
--- /dev/null
+++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_dragen.07.021.624.3.10.9.vcf.snap
@@ -0,0 +1,54 @@
+---
+source: src/seqvars/ingest/header.rs
+expression: "std::fs::read_to_string(out_path_str)?"
+---
+##fileformat=VCFv4.4
+##INFO=<ID=gnomad_exomes_an,Number=1,Type=Integer,Description="Number of samples in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_hemi,Number=1,Type=Integer,Description="Number of hemi. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_genomes_an,Number=1,Type=Integer,Description="Number of samples in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_hemi,Number=1,Type=Integer,Description="Number of hemi. alt. carriers in gnomAD genomes">
+##INFO=<ID=helix_an,Number=1,Type=Integer,Description="Number of samples in HelixMtDb">
+##INFO=<ID=helix_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in HelixMtDb">
+##INFO=<ID=helix_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in HelixMtDb">
+##INFO=<ID=ANN,Number=.,Type=String,Description="Functional annotations: 'Allele | Annotation | Annotation_Impact | Gene_Name | Gene_ID | Feature_Type | Feature_ID | Transcript_BioType | Rank | HGVS.c | HGVS.p | cDNA.pos / cDNA.length | CDS.pos / CDS.length | AA.pos / AA.length | Distance | ERRORS / WARNINGS / INFO'">
+##FILTER=<ID=PASS,Description="All filters passed">
+##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Read depth for each allele">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read depth">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Conditional genotype quality">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
+##contig=<ID=1,length=249250621,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=2,length=243199373,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=3,length=198022430,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=4,length=191154276,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=5,length=180915260,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=6,length=171115067,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=7,length=159138663,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=8,length=146364022,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=9,length=141213431,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=10,length=135534747,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=11,length=135006516,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=12,length=133851895,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=13,length=115169878,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=14,length=107349540,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=15,length=102531392,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=16,length=90354753,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=17,length=81195210,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=18,length=78077248,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=19,length=59128983,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=20,length=63025520,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=21,length=48129895,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=22,length=51304566,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=X,length=155270560,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=Y,length=59373566,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=MT,length=16569,assembly="GRCh37",species="Homo sapiens">
+##SAMPLE=<ID=CASE,Sex="Male",Disease="Affected">
+##PEDIGREE=<ID=CASE>
+##x-varfish-version=<ID=varfish-server-worker,Version="x.y.z">
+##x-varfish-version=<ID=orig-caller,Name="Dragen",Version="SW: 07.021.624.3.10.9, HW: 07.021.624">
+#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	CASE
+
diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_gatk_hc.3.7-0.vcf.snap b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_gatk_hc.3.7-0.vcf.snap
new file mode 100644
index 00000000..606973d1
--- /dev/null
+++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_gatk_hc.3.7-0.vcf.snap
@@ -0,0 +1,58 @@
+---
+source: src/seqvars/ingest/header.rs
+expression: "std::fs::read_to_string(out_path_str)?"
+---
+##fileformat=VCFv4.4
+##INFO=<ID=gnomad_exomes_an,Number=1,Type=Integer,Description="Number of samples in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_hemi,Number=1,Type=Integer,Description="Number of hemi. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_genomes_an,Number=1,Type=Integer,Description="Number of samples in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_hemi,Number=1,Type=Integer,Description="Number of hemi. alt. carriers in gnomAD genomes">
+##INFO=<ID=helix_an,Number=1,Type=Integer,Description="Number of samples in HelixMtDb">
+##INFO=<ID=helix_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in HelixMtDb">
+##INFO=<ID=helix_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in HelixMtDb">
+##INFO=<ID=ANN,Number=.,Type=String,Description="Functional annotations: 'Allele | Annotation | Annotation_Impact | Gene_Name | Gene_ID | Feature_Type | Feature_ID | Transcript_BioType | Rank | HGVS.c | HGVS.p | cDNA.pos / cDNA.length | CDS.pos / CDS.length | AA.pos / AA.length | Distance | ERRORS / WARNINGS / INFO'">
+##FILTER=<ID=PASS,Description="All filters passed">
+##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Read depth for each allele">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read depth">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Conditional genotype quality">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
+##contig=<ID=1,length=249250621,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=2,length=243199373,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=3,length=198022430,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=4,length=191154276,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=5,length=180915260,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=6,length=171115067,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=7,length=159138663,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=8,length=146364022,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=9,length=141213431,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=10,length=135534747,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=11,length=135006516,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=12,length=133851895,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=13,length=115169878,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=14,length=107349540,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=15,length=102531392,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=16,length=90354753,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=17,length=81195210,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=18,length=78077248,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=19,length=59128983,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=20,length=63025520,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=21,length=48129895,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=22,length=51304566,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=X,length=155270560,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=Y,length=59373566,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=MT,length=16569,assembly="GRCh37",species="Homo sapiens">
+##SAMPLE=<ID=Case_1_father-N1-DNA1-WGS1,Sex="Male",Disease="Unaffected">
+##SAMPLE=<ID=Case_1_index-N1-DNA1-WGS1,Sex="Female",Disease="Affected">
+##SAMPLE=<ID=Case_1_mother-N1-DNA1-WGS1,Sex="Male",Disease="Unaffected">
+##PEDIGREE=<ID=Case_1_father-N1-DNA1-WGS1>
+##PEDIGREE=<ID=Case_1_index-N1-DNA1-WGS1,Father="Case_1_father-N1-DNA1-WGS1",Mother="Case_1_mother-N1-DNA1-WGS1">
+##PEDIGREE=<ID=Case_1_mother-N1-DNA1-WGS1>
+##x-varfish-version=<ID=varfish-server-worker,Version="x.y.z">
+##x-varfish-version=<ID=orig-caller,Name="GatkHaplotypeCaller",Version="3.7-0-gcfedb67">
+#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	Case_1_father-N1-DNA1-WGS1	Case_1_index-N1-DNA1-WGS1	Case_1_mother-N1-DNA1-WGS1
+
diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_gatk_hc.4.4.0.0.vcf.snap b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_gatk_hc.4.4.0.0.vcf.snap
new file mode 100644
index 00000000..e75108df
--- /dev/null
+++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_37@example_gatk_hc.4.4.0.0.vcf.snap
@@ -0,0 +1,54 @@
+---
+source: src/seqvars/ingest/header.rs
+expression: "std::fs::read_to_string(out_path_str)?"
+---
+##fileformat=VCFv4.4
+##INFO=<ID=gnomad_exomes_an,Number=1,Type=Integer,Description="Number of samples in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_exomes_hemi,Number=1,Type=Integer,Description="Number of hemi. alt. carriers in gnomAD exomes">
+##INFO=<ID=gnomad_genomes_an,Number=1,Type=Integer,Description="Number of samples in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in gnomAD genomes">
+##INFO=<ID=gnomad_genomes_hemi,Number=1,Type=Integer,Description="Number of hemi. alt. carriers in gnomAD genomes">
+##INFO=<ID=helix_an,Number=1,Type=Integer,Description="Number of samples in HelixMtDb">
+##INFO=<ID=helix_hom,Number=1,Type=Integer,Description="Number of hom. alt. carriers in HelixMtDb">
+##INFO=<ID=helix_het,Number=1,Type=Integer,Description="Number of het. alt. carriers in HelixMtDb">
+##INFO=<ID=ANN,Number=.,Type=String,Description="Functional annotations: 'Allele | Annotation | Annotation_Impact | Gene_Name | Gene_ID | Feature_Type | Feature_ID | Transcript_BioType | Rank | HGVS.c | HGVS.p | cDNA.pos / cDNA.length | CDS.pos / CDS.length | AA.pos / AA.length | Distance | ERRORS / WARNINGS / INFO'">
+##FILTER=<ID=PASS,Description="All filters passed">
+##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Read depth for each allele">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read depth">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Conditional genotype quality">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
+##contig=<ID=1,length=249250621,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=2,length=243199373,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=3,length=198022430,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=4,length=191154276,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=5,length=180915260,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=6,length=171115067,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=7,length=159138663,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=8,length=146364022,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=9,length=141213431,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=10,length=135534747,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=11,length=135006516,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=12,length=133851895,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=13,length=115169878,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=14,length=107349540,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=15,length=102531392,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=16,length=90354753,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=17,length=81195210,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=18,length=78077248,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=19,length=59128983,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=20,length=63025520,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=21,length=48129895,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=22,length=51304566,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=X,length=155270560,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=Y,length=59373566,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=MT,length=16569,assembly="GRCh37",species="Homo sapiens">
+##SAMPLE=<ID=CASE,Sex="Male",Disease="Affected">
+##PEDIGREE=<ID=CASE>
+##x-varfish-version=<ID=varfish-server-worker,Version="x.y.z">
+##x-varfish-version=<ID=orig-caller,Name="GatkHaplotypeCaller",Version="4.4.0.0">
+#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	CASE
+
diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_dragen.07.021.624.3.10.4.vcf.snap b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_dragen.07.021.624.3.10.4.vcf.snap
index 501f62ed..04ab2618 100644
--- a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_dragen.07.021.624.3.10.4.vcf.snap
+++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_dragen.07.021.624.3.10.4.vcf.snap
@@ -21,31 +21,33 @@ expression: "std::fs::read_to_string(out_path_str)?"
 ##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Conditional genotype quality">
 ##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
 ##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
-##contig=<ID=chr1,length=248956422,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr2,length=242193529,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr3,length=198295559,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr4,length=190214555,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr5,length=181538259,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr6,length=170805979,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr7,length=159345973,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr8,length=145138636,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr9,length=138394717,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr10,length=133797422,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr11,length=135086622,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr12,length=133275309,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr13,length=114364328,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr14,length=107043718,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr15,length=101991189,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr16,length=90338345,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr17,length=83257441,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr18,length=80373285,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr19,length=58617616,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr20,length=64444167,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr21,length=46709983,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr22,length=50818468,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrX,length=156040895,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrY,length=57227415,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrM,length=16569,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=chr1,length=248956422,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr2,length=242193529,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr3,length=198295559,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr4,length=190214555,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr5,length=181538259,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr6,length=170805979,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr7,length=159345973,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr8,length=145138636,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr9,length=138394717,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr10,length=133797422,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr11,length=135086622,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr12,length=133275309,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr13,length=114364328,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr14,length=107043718,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr15,length=101991189,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr16,length=90338345,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr17,length=83257441,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr18,length=80373285,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr19,length=58617616,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr20,length=64444167,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr21,length=46709983,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr22,length=50818468,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrX,length=156040895,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrY,length=57227415,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrM,length=16569,assembly="GRCh38",species="Homo sapiens">
+##SAMPLE=<ID=NA12878,Sex="Male",Disease="Affected">
+##PEDIGREE=<ID=NA12878>
 ##x-varfish-version=<ID=varfish-server-worker,Version="x.y.z">
 ##x-varfish-version=<ID=orig-caller,Name="Dragen",Version="SW: 07.021.624.3.10.4, HW: 07.021.624">
 #CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA12878
diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_dragen.07.021.624.3.10.9.vcf.snap b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_dragen.07.021.624.3.10.9.vcf.snap
index 217a78b5..ffb1a8fa 100644
--- a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_dragen.07.021.624.3.10.9.vcf.snap
+++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_dragen.07.021.624.3.10.9.vcf.snap
@@ -21,31 +21,33 @@ expression: "std::fs::read_to_string(out_path_str)?"
 ##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Conditional genotype quality">
 ##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
 ##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
-##contig=<ID=chr1,length=248956422,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr2,length=242193529,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr3,length=198295559,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr4,length=190214555,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr5,length=181538259,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr6,length=170805979,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr7,length=159345973,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr8,length=145138636,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr9,length=138394717,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr10,length=133797422,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr11,length=135086622,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr12,length=133275309,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr13,length=114364328,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr14,length=107043718,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr15,length=101991189,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr16,length=90338345,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr17,length=83257441,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr18,length=80373285,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr19,length=58617616,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr20,length=64444167,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr21,length=46709983,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr22,length=50818468,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrX,length=156040895,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrY,length=57227415,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrM,length=16569,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=chr1,length=248956422,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr2,length=242193529,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr3,length=198295559,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr4,length=190214555,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr5,length=181538259,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr6,length=170805979,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr7,length=159345973,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr8,length=145138636,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr9,length=138394717,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr10,length=133797422,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr11,length=135086622,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr12,length=133275309,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr13,length=114364328,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr14,length=107043718,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr15,length=101991189,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr16,length=90338345,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr17,length=83257441,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr18,length=80373285,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr19,length=58617616,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr20,length=64444167,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr21,length=46709983,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr22,length=50818468,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrX,length=156040895,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrY,length=57227415,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrM,length=16569,assembly="GRCh38",species="Homo sapiens">
+##SAMPLE=<ID=CASE,Sex="Male",Disease="Affected">
+##PEDIGREE=<ID=CASE>
 ##x-varfish-version=<ID=varfish-server-worker,Version="x.y.z">
 ##x-varfish-version=<ID=orig-caller,Name="Dragen",Version="SW: 07.021.624.3.10.9, HW: 07.021.624">
 #CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	CASE
diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_gatk_hc.3.7-0.vcf.snap b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_gatk_hc.3.7-0.vcf.snap
index 8c6ecc4f..98f14248 100644
--- a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_gatk_hc.3.7-0.vcf.snap
+++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_gatk_hc.3.7-0.vcf.snap
@@ -21,31 +21,37 @@ expression: "std::fs::read_to_string(out_path_str)?"
 ##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Conditional genotype quality">
 ##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
 ##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
-##contig=<ID=chr1,length=248956422,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr2,length=242193529,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr3,length=198295559,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr4,length=190214555,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr5,length=181538259,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr6,length=170805979,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr7,length=159345973,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr8,length=145138636,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr9,length=138394717,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr10,length=133797422,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr11,length=135086622,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr12,length=133275309,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr13,length=114364328,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr14,length=107043718,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr15,length=101991189,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr16,length=90338345,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr17,length=83257441,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr18,length=80373285,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr19,length=58617616,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr20,length=64444167,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr21,length=46709983,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr22,length=50818468,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrX,length=156040895,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrY,length=57227415,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrM,length=16569,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=chr1,length=248956422,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr2,length=242193529,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr3,length=198295559,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr4,length=190214555,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr5,length=181538259,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr6,length=170805979,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr7,length=159345973,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr8,length=145138636,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr9,length=138394717,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr10,length=133797422,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr11,length=135086622,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr12,length=133275309,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr13,length=114364328,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr14,length=107043718,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr15,length=101991189,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr16,length=90338345,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr17,length=83257441,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr18,length=80373285,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr19,length=58617616,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr20,length=64444167,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr21,length=46709983,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr22,length=50818468,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrX,length=156040895,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrY,length=57227415,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrM,length=16569,assembly="GRCh38",species="Homo sapiens">
+##SAMPLE=<ID=Case_1_father-N1-DNA1-WGS1,Sex="Male",Disease="Unaffected">
+##SAMPLE=<ID=Case_1_index-N1-DNA1-WGS1,Sex="Female",Disease="Affected">
+##SAMPLE=<ID=Case_1_mother-N1-DNA1-WGS1,Sex="Male",Disease="Unaffected">
+##PEDIGREE=<ID=Case_1_father-N1-DNA1-WGS1>
+##PEDIGREE=<ID=Case_1_index-N1-DNA1-WGS1,Father="Case_1_father-N1-DNA1-WGS1",Mother="Case_1_mother-N1-DNA1-WGS1">
+##PEDIGREE=<ID=Case_1_mother-N1-DNA1-WGS1>
 ##x-varfish-version=<ID=varfish-server-worker,Version="x.y.z">
 ##x-varfish-version=<ID=orig-caller,Name="GatkHaplotypeCaller",Version="3.7-0-gcfedb67">
 #CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	Case_1_father-N1-DNA1-WGS1	Case_1_index-N1-DNA1-WGS1	Case_1_mother-N1-DNA1-WGS1
diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_gatk_hc.4.4.0.0.vcf.snap b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_gatk_hc.4.4.0.0.vcf.snap
index b3876668..76a3c2f3 100644
--- a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_gatk_hc.4.4.0.0.vcf.snap
+++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@example_gatk_hc.4.4.0.0.vcf.snap
@@ -21,31 +21,33 @@ expression: "std::fs::read_to_string(out_path_str)?"
 ##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Conditional genotype quality">
 ##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
 ##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
-##contig=<ID=chr1,length=248956422,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr2,length=242193529,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr3,length=198295559,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr4,length=190214555,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr5,length=181538259,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr6,length=170805979,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr7,length=159345973,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr8,length=145138636,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr9,length=138394717,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr10,length=133797422,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr11,length=135086622,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr12,length=133275309,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr13,length=114364328,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr14,length=107043718,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr15,length=101991189,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr16,length=90338345,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr17,length=83257441,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr18,length=80373285,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr19,length=58617616,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr20,length=64444167,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr21,length=46709983,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chr22,length=50818468,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrX,length=156040895,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrY,length=57227415,assembly="GRCh37",species="Homo sapiens">
-##contig=<ID=chrM,length=16569,assembly="GRCh37",species="Homo sapiens">
+##contig=<ID=chr1,length=248956422,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr2,length=242193529,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr3,length=198295559,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr4,length=190214555,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr5,length=181538259,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr6,length=170805979,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr7,length=159345973,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr8,length=145138636,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr9,length=138394717,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr10,length=133797422,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr11,length=135086622,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr12,length=133275309,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr13,length=114364328,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr14,length=107043718,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr15,length=101991189,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr16,length=90338345,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr17,length=83257441,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr18,length=80373285,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr19,length=58617616,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr20,length=64444167,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr21,length=46709983,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chr22,length=50818468,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrX,length=156040895,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrY,length=57227415,assembly="GRCh38",species="Homo sapiens">
+##contig=<ID=chrM,length=16569,assembly="GRCh38",species="Homo sapiens">
+##SAMPLE=<ID=CASE,Sex="Male",Disease="Affected">
+##PEDIGREE=<ID=CASE>
 ##x-varfish-version=<ID=varfish-server-worker,Version="x.y.z">
 ##x-varfish-version=<ID=orig-caller,Name="GatkHaplotypeCaller",Version="4.4.0.0">
 #CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	CASE
diff --git a/tests/seqvars/ingest/example_dragen.07.021.624.3.10.4.ped b/tests/seqvars/ingest/example_dragen.07.021.624.3.10.4.ped
new file mode 100644
index 00000000..38609565
--- /dev/null
+++ b/tests/seqvars/ingest/example_dragen.07.021.624.3.10.4.ped
@@ -0,0 +1 @@
+FAM	NA12878	0	0	1	2
diff --git a/tests/seqvars/ingest/example_dragen.07.021.624.3.10.9.ped b/tests/seqvars/ingest/example_dragen.07.021.624.3.10.9.ped
new file mode 100644
index 00000000..aff8cffb
--- /dev/null
+++ b/tests/seqvars/ingest/example_dragen.07.021.624.3.10.9.ped
@@ -0,0 +1 @@
+FAM	CASE	0	0	1	2
diff --git a/tests/seqvars/ingest/example_gatk_hc.4.4.0.0.ped b/tests/seqvars/ingest/example_gatk_hc.4.4.0.0.ped
new file mode 100644
index 00000000..aff8cffb
--- /dev/null
+++ b/tests/seqvars/ingest/example_gatk_hc.4.4.0.0.ped
@@ -0,0 +1 @@
+FAM	CASE	0	0	1	2