{
  "about": {
    "title": "ImmPort data submission reference data",
    "description": "Templates, assay upload workflows, rules and error messages for submitting data to ImmPort. Generated from the Data Submission pages of the ImmPort documentation; those pages are the source of truth.",
    "docsBaseUrl": "https://docs.immport.org",
    "downloadBaseUrl": "https://downloads.immport.org",
    "templateSchemaVersion": "3.37",
    "fieldDefinitions": "/data/upload/templates/templates.json",
    "lookupTableValues": "/data/upload/templates/lkTables.json",
    "generator": "programs/genSubmissionAgentData.py"
  },
  "limits": {
    "webUploadMaxMB": 512,
    "acceptedTemplateFormats": [
      ".xlsx",
      ".txt",
      ".json"
    ],
    "rejectedTemplateFormats": [
      ".xls"
    ],
    "studiesPerPackage": 1
  },
  "links": {
    "srw": "https://immport.niaid.nih.gov/private/wizard/home",
    "validator": "https://immport.niaid.nih.gov/validate/data/validateDataMain",
    "upload": "https://immport.niaid.nih.gov/upload/data/uploadDataMain",
    "workspaceRequest": "https://immport.niaid.nih.gov/private/workspace/request",
    "apiKeys": "https://www.immport.org/auth/api/keys",
    "helpdesk": "ImmPort_Helpdesk@immport.org",
    "allTemplatesZip": "/data/upload/templates/ImmPortTemplates.zip",
    "assayWorkflows": "/data/submission/02-templates/assay-workflows/"
  },
  "clinical": [
    {
      "template": "interventions",
      "label": "Interventions or concomitant medications"
    },
    {
      "template": "adverseevents",
      "label": "Adverse events"
    },
    {
      "template": "assessments",
      "label": "Questionnaires, medical history (assessments)"
    },
    {
      "template": "labtests",
      "label": "Clinical lab tests"
    }
  ],
  "templates": [
    {
      "id": "basic_study_design",
      "name": "Basic Study Design",
      "file": "basic_study_design.txt",
      "jsonFile": "basic_study_design.json",
      "templateType": "compound",
      "category": "study",
      "assays": [],
      "purpose": "Registers a study: title, goals, eligibility criteria, arms or cohorts, personnel, planned visits and protocols. Upload this first (or use the Study Registration Wizard).",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/basic_study_design/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/basic_study_design.xlsx",
        "txt": "/data/upload/templates/txt-templates/basic_study_design.txt",
        "json": "/data/upload/templates/json-templates/basic_study_design.json"
      }
    },
    {
      "id": "protocols",
      "name": "Protocols",
      "file": "protocols.txt",
      "jsonFile": "protocols.json",
      "templateType": "single",
      "category": "study",
      "assays": [
        "cytof",
        "elisa",
        "elispot",
        "flow-cytometry",
        "gene-expression",
        "genotyping",
        "hai",
        "hla",
        "image-histology",
        "kir",
        "mbaa",
        "mass-spec-metabolomics",
        "mass-spec-proteomics",
        "neutralizing-antibody",
        "other",
        "qrt-pcr",
        "rna-seq",
        "virus-neutralization"
      ],
      "purpose": "Lists the protocol documents (PDF, Word, Excel, …) that studies, subjects, lab tests and experiments refer to.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/protocols/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/protocols.xlsx",
        "txt": "/data/upload/templates/txt-templates/protocols.txt",
        "json": "/data/upload/templates/json-templates/protocols.json"
      }
    },
    {
      "id": "study_design_edit",
      "name": "Study Design Edit",
      "file": "study_design_edit.txt",
      "jsonFile": "study_design_edit.json",
      "templateType": "compound",
      "category": "study",
      "assays": [],
      "purpose": "Updates a registered study: adds files, publications and links, or links existing subjects to another study's arms.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/study_design_edit/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/study_design_edit.xlsx",
        "txt": "/data/upload/templates/txt-templates/study_design_edit.txt",
        "json": "/data/upload/templates/json-templates/study_design_edit.json"
      }
    },
    {
      "id": "subjecthumans",
      "name": "Subjects – Human",
      "file": "subjectHumans.txt",
      "jsonFile": "subjectHumans.json",
      "templateType": "combined-result",
      "category": "subjects",
      "assays": [],
      "purpose": "Defines human subjects (demographics, immune exposure) and assigns each one to an arm or cohort.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/subjecthumans/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/subjectHumans.xlsx",
        "txt": "/data/upload/templates/txt-templates/subjectHumans.txt",
        "json": "/data/upload/templates/json-templates/subjectHumans.json"
      }
    },
    {
      "id": "subjectanimals",
      "name": "Subjects – Animal",
      "file": "subjectAnimals.txt",
      "jsonFile": "subjectAnimals.json",
      "templateType": "combined-result",
      "category": "subjects",
      "assays": [],
      "purpose": "Defines animal subjects (species, strain, demographics) and assigns each one to an arm or cohort.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/subjectanimals/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/subjectAnimals.xlsx",
        "txt": "/data/upload/templates/txt-templates/subjectAnimals.txt",
        "json": "/data/upload/templates/json-templates/subjectAnimals.json"
      }
    },
    {
      "id": "immuneexposure",
      "name": "Immune Exposure",
      "file": "immuneExposure.txt",
      "jsonFile": "immuneExposure.json",
      "templateType": "single",
      "category": "subjects",
      "assays": [],
      "purpose": "Records how existing subjects were exposed (vaccination, infection, …) and the evidence for it.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/immuneexposure/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/immuneExposure.xlsx",
        "txt": "/data/upload/templates/txt-templates/immuneExposure.txt",
        "json": "/data/upload/templates/json-templates/immuneExposure.json"
      }
    },
    {
      "id": "interventions",
      "name": "Interventions",
      "file": "interventions.txt",
      "jsonFile": "interventions.json",
      "templateType": "single",
      "category": "clinical",
      "assays": [],
      "purpose": "Study interventions, concomitant medications and substance use for each subject.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/interventions/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/interventions.xlsx",
        "txt": "/data/upload/templates/txt-templates/interventions.txt",
        "json": "/data/upload/templates/json-templates/interventions.json"
      }
    },
    {
      "id": "adverseevents",
      "name": "Adverse Events",
      "file": "adverseEvents.txt",
      "jsonFile": "adverseEvents.json",
      "templateType": "single",
      "category": "clinical",
      "assays": [],
      "purpose": "Adverse events recorded for subjects, with severity, outcome and relation to treatment.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/adverseevents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/adverseEvents.xlsx",
        "txt": "/data/upload/templates/txt-templates/adverseEvents.txt",
        "json": "/data/upload/templates/json-templates/adverseEvents.json"
      }
    },
    {
      "id": "assessments",
      "name": "Assessments",
      "file": "assessments.txt",
      "jsonFile": "assessments.json",
      "templateType": "combined-result",
      "category": "clinical",
      "assays": [],
      "purpose": "Non-sample results such as questionnaires and medical history. Panels and components go in one file.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/assessments/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/assessments.xlsx",
        "txt": "/data/upload/templates/txt-templates/assessments.txt",
        "json": "/data/upload/templates/json-templates/assessments.json"
      }
    },
    {
      "id": "assessmentpanel",
      "name": "Assessment Panels",
      "file": "assessmentpanel.txt",
      "jsonFile": "assessmentpanel.json",
      "templateType": "combined",
      "category": "clinical",
      "assays": [],
      "purpose": "Defines assessment panels on their own. Most studies use the combined Assessments template instead.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/assessmentpanel/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/assessmentpanel.xlsx",
        "txt": "/data/upload/templates/txt-templates/assessmentpanel.txt",
        "json": "/data/upload/templates/json-templates/assessmentpanel.json"
      }
    },
    {
      "id": "assessmentcomponent",
      "name": "Assessment Components",
      "file": "assessmentcomponent.txt",
      "jsonFile": "assessmentcomponent.json",
      "templateType": "single",
      "category": "clinical",
      "assays": [],
      "purpose": "Defines assessment components on their own. Most studies use the combined Assessments template instead.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/assessmentcomponent/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/assessmentcomponent.xlsx",
        "txt": "/data/upload/templates/txt-templates/assessmentcomponent.txt",
        "json": "/data/upload/templates/json-templates/assessmentcomponent.json"
      }
    },
    {
      "id": "labtests",
      "name": "Lab Tests",
      "file": "labTests.txt",
      "jsonFile": "labTests.json",
      "templateType": "combined-result",
      "category": "clinical",
      "assays": [],
      "purpose": "Clinical lab test panels, tests and results in one file.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/labtests/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/labTests.xlsx",
        "txt": "/data/upload/templates/txt-templates/labTests.txt",
        "json": "/data/upload/templates/json-templates/labTests.json"
      }
    },
    {
      "id": "labtestpanels",
      "name": "Lab Test Panels",
      "file": "labTestPanels.txt",
      "jsonFile": "labTestPanels.json",
      "templateType": "single",
      "category": "clinical",
      "assays": [],
      "purpose": "Defines lab test panels on their own. Prefer the combined Lab Tests template.",
      "legacy": true,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/labtestpanels/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/labTestPanels.xlsx",
        "txt": "/data/upload/templates/txt-templates/labTestPanels.txt",
        "json": "/data/upload/templates/json-templates/labTestPanels.json"
      }
    },
    {
      "id": "labtest_results",
      "name": "Lab Test Results",
      "file": "labTest_Results.txt",
      "jsonFile": "labTest_Results.json",
      "templateType": "single",
      "category": "clinical",
      "assays": [],
      "purpose": "Reports lab test results on their own. Prefer the combined Lab Tests template.",
      "legacy": true,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/labtest_results/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/labTest_Results.xlsx",
        "txt": "/data/upload/templates/txt-templates/labTest_Results.txt",
        "json": "/data/upload/templates/json-templates/labTest_Results.json"
      }
    },
    {
      "id": "biosamples",
      "name": "Biological Samples",
      "file": "bioSamples.txt",
      "jsonFile": "bioSamples.json",
      "templateType": "single",
      "category": "samples",
      "assays": [],
      "purpose": "Defines samples taken from subjects. Samples can also be defined inside experiment sample templates.",
      "legacy": true,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/biosamples/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/bioSamples.xlsx",
        "txt": "/data/upload/templates/txt-templates/bioSamples.txt",
        "json": "/data/upload/templates/json-templates/bioSamples.json"
      }
    },
    {
      "id": "experiments",
      "name": "Experiments",
      "file": "experiments.txt",
      "jsonFile": "experiments.json",
      "templateType": "single",
      "category": "samples",
      "assays": [],
      "purpose": "Defines experiments and measurement techniques. Experiments can also be defined inside experiment sample templates.",
      "legacy": true,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/experiments/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experiments.xlsx",
        "txt": "/data/upload/templates/txt-templates/experiments.txt",
        "json": "/data/upload/templates/json-templates/experiments.json"
      }
    },
    {
      "id": "treatments",
      "name": "Treatments",
      "file": "treatments.txt",
      "jsonFile": "treatments.json",
      "templateType": "single",
      "category": "samples",
      "assays": [
        "cytof",
        "elisa",
        "elispot",
        "flow-cytometry",
        "gene-expression",
        "genotyping",
        "hai",
        "hla",
        "image-histology",
        "kir",
        "mbaa",
        "mass-spec-metabolomics",
        "mass-spec-proteomics",
        "neutralizing-antibody",
        "other",
        "qrt-pcr",
        "rna-seq",
        "virus-neutralization"
      ],
      "purpose": "In-vitro treatments applied to samples (amount, duration, temperature). Part of every assay workflow.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/treatments/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/treatments.xlsx",
        "txt": "/data/upload/templates/txt-templates/treatments.txt",
        "json": "/data/upload/templates/json-templates/treatments.json"
      }
    },
    {
      "id": "reagent_sets",
      "name": "Reagent Sets",
      "file": "Reagent_Sets.txt",
      "jsonFile": "Reagent_Sets.json",
      "templateType": "single",
      "category": "reagents",
      "assays": [
        "cytof",
        "flow-cytometry"
      ],
      "purpose": "Groups reagents that are always used together, so samples can refer to the set.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/reagent_sets/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/Reagent_Sets.xlsx",
        "txt": "/data/upload/templates/txt-templates/Reagent_Sets.txt",
        "json": "/data/upload/templates/json-templates/Reagent_Sets.json"
      }
    },
    {
      "id": "public_repositories",
      "name": "Public Repositories",
      "file": "publicRepositories.txt",
      "jsonFile": "publicRepositories.json",
      "templateType": "single",
      "category": "results",
      "assays": [
        "gene-expression",
        "genotyping",
        "rna-seq"
      ],
      "purpose": "Links experiment samples to accessions in GEO, SRA or other public repositories.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/public_repositories/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/publicRepositories.xlsx",
        "txt": "/data/upload/templates/txt-templates/publicRepositories.txt",
        "json": "/data/upload/templates/json-templates/publicRepositories.json"
      }
    },
    {
      "id": "array_reagents",
      "name": "Reagents – Array",
      "file": "reagents.Array.txt",
      "jsonFile": "reagents.Array.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "gene-expression",
        "genotyping"
      ],
      "purpose": "Reagents and assay platform used in Array experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/array_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.Array.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.Array.txt",
        "json": "/data/upload/templates/json-templates/reagents.Array.json"
      }
    },
    {
      "id": "cytof_reagents",
      "name": "Reagents – CyTOF",
      "file": "reagents.CyTOF.txt",
      "jsonFile": "reagents.CyTOF.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "cytof"
      ],
      "purpose": "Reagents and assay platform used in CyTOF experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/cytof_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.CyTOF.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.CyTOF.txt",
        "json": "/data/upload/templates/json-templates/reagents.CyTOF.json"
      }
    },
    {
      "id": "elisa_reagents",
      "name": "Reagents – ELISA",
      "file": "reagents.ELISA.txt",
      "jsonFile": "reagents.ELISA.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "elisa"
      ],
      "purpose": "Reagents and assay platform used in ELISA experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/elisa_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.ELISA.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.ELISA.txt",
        "json": "/data/upload/templates/json-templates/reagents.ELISA.json"
      }
    },
    {
      "id": "elispot_reagents",
      "name": "Reagents – ELISPOT",
      "file": "reagents.ELISPOT.txt",
      "jsonFile": "reagents.ELISPOT.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "elispot"
      ],
      "purpose": "Reagents and assay platform used in ELISPOT experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/elispot_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.ELISPOT.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.ELISPOT.txt",
        "json": "/data/upload/templates/json-templates/reagents.ELISPOT.json"
      }
    },
    {
      "id": "flow_cytometry_reagents",
      "name": "Reagents – Flow Cytometry",
      "file": "reagents.Flow_Cytometry.txt",
      "jsonFile": "reagents.Flow_Cytometry.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "flow-cytometry"
      ],
      "purpose": "Reagents and assay platform used in Flow Cytometry experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/flow_cytometry_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.Flow_Cytometry.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.Flow_Cytometry.txt",
        "json": "/data/upload/templates/json-templates/reagents.Flow_Cytometry.json"
      }
    },
    {
      "id": "hai_reagents",
      "name": "Reagents – HAI",
      "file": "reagents.HAI.txt",
      "jsonFile": "reagents.HAI.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "hai"
      ],
      "purpose": "Reagents and assay platform used in HAI experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/hai_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.HAI.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.HAI.txt",
        "json": "/data/upload/templates/json-templates/reagents.HAI.json"
      }
    },
    {
      "id": "hla_typing_reagents",
      "name": "Reagents – HLA Typing",
      "file": "reagents.HLA_Typing.txt",
      "jsonFile": "reagents.HLA_Typing.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "hla"
      ],
      "purpose": "Reagents and assay platform used in HLA Typing experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/hla_typing_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.HLA_Typing.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.HLA_Typing.txt",
        "json": "/data/upload/templates/json-templates/reagents.HLA_Typing.json"
      }
    },
    {
      "id": "kir_typing_reagents",
      "name": "Reagents – KIR Typing",
      "file": "reagents.KIR_Typing.txt",
      "jsonFile": "reagents.KIR_Typing.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "kir"
      ],
      "purpose": "Reagents and assay platform used in KIR Typing experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/kir_typing_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.KIR_Typing.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.KIR_Typing.txt",
        "json": "/data/upload/templates/json-templates/reagents.KIR_Typing.json"
      }
    },
    {
      "id": "mbaa_reagents",
      "name": "Reagents – MBAA",
      "file": "reagents.MBAA.txt",
      "jsonFile": "reagents.MBAA.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "mbaa"
      ],
      "purpose": "Reagents and assay platform used in MBAA experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/mbaa_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.MBAA.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.MBAA.txt",
        "json": "/data/upload/templates/json-templates/reagents.MBAA.json"
      }
    },
    {
      "id": "neutralizing_antibody_titer_reagents",
      "name": "Reagents – Neutralizing Antibody Titer",
      "file": "reagents.Neutralizing_Antibody_Titer.txt",
      "jsonFile": "reagents.Neutralizing_Antibody_Titer.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "neutralizing-antibody"
      ],
      "purpose": "Reagents and assay platform used in Neutralizing Antibody Titer experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/neutralizing_antibody_titer_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.Neutralizing_Antibody_Titer.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.Neutralizing_Antibody_Titer.txt",
        "json": "/data/upload/templates/json-templates/reagents.Neutralizing_Antibody_Titer.json"
      }
    },
    {
      "id": "other_reagents",
      "name": "Reagents – Other",
      "file": "reagents.Other.txt",
      "jsonFile": "reagents.Other.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "other",
        "image-histology",
        "mass-spec-metabolomics"
      ],
      "purpose": "Reagents and assay platform used in image histology, metabolomics and other experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/other_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.Other.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.Other.txt",
        "json": "/data/upload/templates/json-templates/reagents.Other.json"
      }
    },
    {
      "id": "pcr_reagents",
      "name": "Reagents – PCR",
      "file": "reagents.PCR.txt",
      "jsonFile": "reagents.PCR.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "qrt-pcr"
      ],
      "purpose": "Reagents and assay platform used in PCR experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/pcr_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.PCR.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.PCR.txt",
        "json": "/data/upload/templates/json-templates/reagents.PCR.json"
      }
    },
    {
      "id": "sequencing_reagents",
      "name": "Reagents – Sequencing",
      "file": "reagents.Sequencing.txt",
      "jsonFile": "reagents.Sequencing.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "rna-seq"
      ],
      "purpose": "Reagents and assay platform used in Sequencing experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/sequencing_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.Sequencing.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.Sequencing.txt",
        "json": "/data/upload/templates/json-templates/reagents.Sequencing.json"
      }
    },
    {
      "id": "virus_neutralization_reagents",
      "name": "Reagents – Virus Neutralization",
      "file": "reagents.Virus_Neutralization.txt",
      "jsonFile": "reagents.Virus_Neutralization.json",
      "templateType": "multiple",
      "category": "reagents",
      "assays": [
        "virus-neutralization"
      ],
      "purpose": "Reagents and assay platform used in Virus Neutralization experiments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/virus_neutralization_reagents/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/reagents.Virus_Neutralization.xlsx",
        "txt": "/data/upload/templates/txt-templates/reagents.Virus_Neutralization.txt",
        "json": "/data/upload/templates/json-templates/reagents.Virus_Neutralization.json"
      }
    },
    {
      "id": "cytof",
      "name": "Experiment Samples – CyTOF",
      "file": "experimentSamples.CYTOF.txt",
      "jsonFile": "experimentSamples.CYTOF.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "cytof"
      ],
      "purpose": "Experiment samples for CyTOF: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/cytof/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.CYTOF.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.CYTOF.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.CYTOF.json"
      }
    },
    {
      "id": "elisa",
      "name": "Experiment Samples – ELISA",
      "file": "experimentSamples.ELISA.txt",
      "jsonFile": "experimentSamples.ELISA.json",
      "templateType": "combined-result",
      "category": "expsamples",
      "assays": [
        "elisa"
      ],
      "purpose": "Experiment samples for ELISA: links each sample to its biosample, experiment, reagents and treatments. Has optional result columns.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/elisa/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.ELISA.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.ELISA.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.ELISA.json"
      }
    },
    {
      "id": "elispot",
      "name": "Experiment Samples – ELISPOT",
      "file": "experimentSamples.ELISPOT.txt",
      "jsonFile": "experimentSamples.ELISPOT.json",
      "templateType": "combined-result",
      "category": "expsamples",
      "assays": [
        "elispot"
      ],
      "purpose": "Experiment samples for ELISPOT: links each sample to its biosample, experiment, reagents and treatments. Has optional result columns.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/elispot/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.ELISPOT.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.ELISPOT.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.ELISPOT.json"
      }
    },
    {
      "id": "flow_cytometry",
      "name": "Experiment Samples – Flow Cytometry",
      "file": "experimentSamples.Flow_Cytometry.txt",
      "jsonFile": "experimentSamples.Flow_Cytometry.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "flow-cytometry"
      ],
      "purpose": "Experiment samples for Flow Cytometry: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/flow_cytometry/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.Flow_Cytometry.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.Flow_Cytometry.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.Flow_Cytometry.json"
      }
    },
    {
      "id": "gene_expression_array",
      "name": "Experiment Samples – Gene Expression Array",
      "file": "experimentSamples.Gene_Expression_Array.txt",
      "jsonFile": "experimentSamples.Gene_Expression_Array.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "gene-expression"
      ],
      "purpose": "Experiment samples for Gene Expression Array: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/gene_expression_array/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.Gene_Expression_Array.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.Gene_Expression_Array.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.Gene_Expression_Array.json"
      }
    },
    {
      "id": "genotyping_array",
      "name": "Experiment Samples – Genotyping Array",
      "file": "experimentSamples.Genotyping_Array.txt",
      "jsonFile": "experimentSamples.Genotyping_Array.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "genotyping"
      ],
      "purpose": "Experiment samples for Genotyping Array: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/genotyping_array/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.Genotyping_Array.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.Genotyping_Array.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.Genotyping_Array.json"
      }
    },
    {
      "id": "hai",
      "name": "Experiment Samples – HAI",
      "file": "experimentSamples.HAI.txt",
      "jsonFile": "experimentSamples.HAI.json",
      "templateType": "combined-result",
      "category": "expsamples",
      "assays": [
        "hai"
      ],
      "purpose": "Experiment samples for HAI: links each sample to its biosample, experiment, reagents and treatments. Has optional result columns.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/hai/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.HAI.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.HAI.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.HAI.json"
      }
    },
    {
      "id": "hla",
      "name": "Experiment Samples – HLA Typing",
      "file": "experimentSamples.HLA.txt",
      "jsonFile": "experimentSamples.HLA.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "hla"
      ],
      "purpose": "Experiment samples for HLA Typing: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/hla/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.HLA.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.HLA.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.HLA.json"
      }
    },
    {
      "id": "image_histology",
      "name": "Experiment Samples – Image Histology",
      "file": "experimentSamples.Image_Histology.txt",
      "jsonFile": "experimentSamples.Image_Histology.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "image-histology"
      ],
      "purpose": "Experiment samples for Image Histology: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/image_histology/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.Image_Histology.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.Image_Histology.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.Image_Histology.json"
      }
    },
    {
      "id": "kir",
      "name": "Experiment Samples – KIR Typing",
      "file": "experimentSamples.KIR.txt",
      "jsonFile": "experimentSamples.KIR.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "kir"
      ],
      "purpose": "Experiment samples for KIR Typing: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/kir/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.KIR.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.KIR.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.KIR.json"
      }
    },
    {
      "id": "mass_spec_metabolomics",
      "name": "Experiment Samples – Mass Spec – Metabolomics",
      "file": "experimentSamples.Mass_Spectrometry_Metabolomics.txt",
      "jsonFile": "experimentSamples.Mass_Spectrometry_Metabolomics.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "mass-spec-metabolomics"
      ],
      "purpose": "Experiment samples for Mass Spec – Metabolomics: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/mass_spec_metabolomics/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.Mass_Spectrometry_Metabolomics.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.Mass_Spectrometry_Metabolomics.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.Mass_Spectrometry_Metabolomics.json"
      }
    },
    {
      "id": "mass_spec_proteomics",
      "name": "Experiment Samples – Mass Spec – Proteomics",
      "file": "experimentSamples.Mass_Spectrometry_Proteomics.txt",
      "jsonFile": "experimentSamples.Mass_Spectrometry_Proteomics.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "mass-spec-proteomics"
      ],
      "purpose": "Experiment samples for Mass Spec – Proteomics: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/mass_spec_proteomics/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.Mass_Spectrometry_Proteomics.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.Mass_Spectrometry_Proteomics.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.Mass_Spectrometry_Proteomics.json"
      }
    },
    {
      "id": "mbaa",
      "name": "Experiment Samples – MBAA",
      "file": "experimentSamples.MBAA.txt",
      "jsonFile": "experimentSamples.MBAA.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "mbaa"
      ],
      "purpose": "Experiment samples for MBAA: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/mbaa/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.MBAA.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.MBAA.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.MBAA.json"
      }
    },
    {
      "id": "neutralizing_antibody_titer",
      "name": "Experiment Samples – Neutralizing Antibody Titer",
      "file": "experimentSamples.Neutralizing_Antibody_Titer.txt",
      "jsonFile": "experimentSamples.Neutralizing_Antibody_Titer.json",
      "templateType": "combined-result",
      "category": "expsamples",
      "assays": [
        "neutralizing-antibody"
      ],
      "purpose": "Experiment samples for Neutralizing Antibody Titer: links each sample to its biosample, experiment, reagents and treatments. Has optional result columns.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/neutralizing_antibody_titer/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.Neutralizing_Antibody_Titer.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.Neutralizing_Antibody_Titer.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.Neutralizing_Antibody_Titer.json"
      }
    },
    {
      "id": "other",
      "name": "Experiment Samples – Other assay",
      "file": "experimentSamples.Other.txt",
      "jsonFile": "experimentSamples.Other.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "other"
      ],
      "purpose": "Experiment samples for Other assay: links each sample to its biosample, experiment, reagents and treatments.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/other/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.Other.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.Other.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.Other.json"
      }
    },
    {
      "id": "qrt-pcr",
      "name": "Experiment Samples – qRT-PCR",
      "file": "experimentSamples.QRT-PCR.txt",
      "jsonFile": "experimentSamples.QRT-PCR.json",
      "templateType": "combined-result",
      "category": "expsamples",
      "assays": [
        "qrt-pcr"
      ],
      "purpose": "Experiment samples for qRT-PCR: links each sample to its biosample, experiment, reagents and treatments. Has optional result columns.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/qrt-pcr/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.QRT-PCR.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.QRT-PCR.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.QRT-PCR.json"
      }
    },
    {
      "id": "rna_sequencing",
      "name": "Experiment Samples – RNA Sequencing",
      "file": "experimentSamples.RNA_Sequencing.txt",
      "jsonFile": "experimentSamples.RNA_Sequencing.json",
      "templateType": "combined-multiple",
      "category": "expsamples",
      "assays": [
        "rna-seq"
      ],
      "purpose": "Experiment samples for RNA Sequencing: links each sample to its biosample, experiment, reagents and treatments. Has optional result columns.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/rna_sequencing/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.RNA_Sequencing.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.RNA_Sequencing.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.RNA_Sequencing.json"
      }
    },
    {
      "id": "virus_neutralization",
      "name": "Experiment Samples – Virus Neutralization",
      "file": "experimentSamples.Virus_Neutralization.txt",
      "jsonFile": "experimentSamples.Virus_Neutralization.json",
      "templateType": "combined-result",
      "category": "expsamples",
      "assays": [
        "virus-neutralization"
      ],
      "purpose": "Experiment samples for Virus Neutralization: links each sample to its biosample, experiment, reagents and treatments. Has optional result columns.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/virus_neutralization/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/experimentSamples.Virus_Neutralization.xlsx",
        "txt": "/data/upload/templates/txt-templates/experimentSamples.Virus_Neutralization.txt",
        "json": "/data/upload/templates/json-templates/experimentSamples.Virus_Neutralization.json"
      }
    },
    {
      "id": "cytof_derived_data",
      "name": "CyTOF Derived Data",
      "file": "CyTOF_Derived_data.txt",
      "jsonFile": "CyTOF_Derived_data.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "cytof"
      ],
      "purpose": "Cell population statistics derived from CyTOF data.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/cytof_derived_data/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/CyTOF_Derived_data.xlsx",
        "txt": "/data/upload/templates/txt-templates/CyTOF_Derived_data.txt",
        "json": "/data/upload/templates/json-templates/CyTOF_Derived_data.json"
      }
    },
    {
      "id": "fcm_derived_data",
      "name": "Flow Cytometry Derived Data",
      "file": "FCM_Derived_data.txt",
      "jsonFile": "FCM_Derived_data.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "flow-cytometry"
      ],
      "purpose": "Cell population statistics derived from flow cytometry data.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/fcm_derived_data/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/FCM_Derived_data.xlsx",
        "txt": "/data/upload/templates/txt-templates/FCM_Derived_data.txt",
        "json": "/data/upload/templates/json-templates/FCM_Derived_data.json"
      }
    },
    {
      "id": "elisa_results",
      "name": "ELISA Results",
      "file": "ELISA_Results.txt",
      "jsonFile": "ELISA_Results.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "elisa"
      ],
      "purpose": "ELISA results, if you did not put them in the experiment samples file.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/elisa_results/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/ELISA_Results.xlsx",
        "txt": "/data/upload/templates/txt-templates/ELISA_Results.txt",
        "json": "/data/upload/templates/json-templates/ELISA_Results.json"
      }
    },
    {
      "id": "elispot_results",
      "name": "ELISPOT Results",
      "file": "ELISPOT_Results.txt",
      "jsonFile": "ELISPOT_Results.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "elispot"
      ],
      "purpose": "ELISPOT results, if you did not put them in the experiment samples file.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/elispot_results/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/ELISPOT_Results.xlsx",
        "txt": "/data/upload/templates/txt-templates/ELISPOT_Results.txt",
        "json": "/data/upload/templates/json-templates/ELISPOT_Results.json"
      }
    },
    {
      "id": "hai_results",
      "name": "HAI Results",
      "file": "HAI_Results.txt",
      "jsonFile": "HAI_Results.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "hai"
      ],
      "purpose": "HAI titers, if you did not put them in the experiment samples file.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/hai_results/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/HAI_Results.xlsx",
        "txt": "/data/upload/templates/txt-templates/HAI_Results.txt",
        "json": "/data/upload/templates/json-templates/HAI_Results.json"
      }
    },
    {
      "id": "hla_typing",
      "name": "HLA Typing Results",
      "file": "HLA_Typing.txt",
      "jsonFile": "HLA_Typing.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "hla"
      ],
      "purpose": "Structured HLA typing results (alleles per locus).",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/hla_typing/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/HLA_Typing.xlsx",
        "txt": "/data/upload/templates/txt-templates/HLA_Typing.txt",
        "json": "/data/upload/templates/json-templates/HLA_Typing.json"
      }
    },
    {
      "id": "kir_typing",
      "name": "KIR Typing Results",
      "file": "KIR_Typing.txt",
      "jsonFile": "KIR_Typing.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "kir"
      ],
      "purpose": "Structured KIR typing results (genes and haplotypes).",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/kir_typing/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/KIR_Typing.xlsx",
        "txt": "/data/upload/templates/txt-templates/KIR_Typing.txt",
        "json": "/data/upload/templates/json-templates/KIR_Typing.json"
      }
    },
    {
      "id": "mass_spec_metabolomic_results",
      "name": "Metabolomics Results",
      "file": "Mass_Spectrometry_Metabolomic_Results.txt",
      "jsonFile": "Mass_Spectrometry_Metabolomic_Results.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "mass-spec-metabolomics"
      ],
      "purpose": "Structured metabolomics mass spectrometry results.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/mass_spec_metabolomic_results/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/Mass_Spectrometry_Metabolomic_Results.xlsx",
        "txt": "/data/upload/templates/txt-templates/Mass_Spectrometry_Metabolomic_Results.txt",
        "json": "/data/upload/templates/json-templates/Mass_Spectrometry_Metabolomic_Results.json"
      }
    },
    {
      "id": "mass_spec_proteomic_results",
      "name": "Proteomics Results",
      "file": "Mass_Spectrometry_Proteomic_Results.txt",
      "jsonFile": "Mass_Spectrometry_Proteomic_Results.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "mass-spec-proteomics"
      ],
      "purpose": "Structured proteomics mass spectrometry results.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/mass_spec_proteomic_results/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/Mass_Spectrometry_Proteomic_Results.xlsx",
        "txt": "/data/upload/templates/txt-templates/Mass_Spectrometry_Proteomic_Results.txt",
        "json": "/data/upload/templates/json-templates/Mass_Spectrometry_Proteomic_Results.json"
      }
    },
    {
      "id": "mbaa_results",
      "name": "MBAA Results",
      "file": "MBAA_Results.txt",
      "jsonFile": "MBAA_Results.json",
      "templateType": "single",
      "category": "results",
      "assays": [
        "mbaa"
      ],
      "purpose": "Structured MBAA results (MFI and concentrations).",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/mbaa_results/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/MBAA_Results.xlsx",
        "txt": "/data/upload/templates/txt-templates/MBAA_Results.txt",
        "json": "/data/upload/templates/json-templates/MBAA_Results.json"
      }
    },
    {
      "id": "controlsamples",
      "name": "Control Samples",
      "file": "controlSamples.txt",
      "jsonFile": "controlSamples.json",
      "templateType": "combined",
      "category": "results",
      "assays": [
        "mbaa"
      ],
      "purpose": "MBAA control samples and their results.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/controlsamples/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/controlSamples.xlsx",
        "txt": "/data/upload/templates/txt-templates/controlSamples.txt",
        "json": "/data/upload/templates/json-templates/controlSamples.json"
      }
    },
    {
      "id": "standardcurves",
      "name": "Standard Curves",
      "file": "standardCurves.txt",
      "jsonFile": "standardCurves.json",
      "templateType": "combined",
      "category": "results",
      "assays": [
        "mbaa"
      ],
      "purpose": "MBAA standard curves and their results.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/standardcurves/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/standardCurves.xlsx",
        "txt": "/data/upload/templates/txt-templates/standardCurves.txt",
        "json": "/data/upload/templates/json-templates/standardCurves.json"
      }
    },
    {
      "id": "pcr_results",
      "name": "qRT-PCR Results",
      "file": "PCR_Results.txt",
      "jsonFile": "PCR_Results.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "qrt-pcr"
      ],
      "purpose": "qRT-PCR results, if you did not put them in the experiment samples file.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/pcr_results/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/PCR_Results.xlsx",
        "txt": "/data/upload/templates/txt-templates/PCR_Results.txt",
        "json": "/data/upload/templates/json-templates/PCR_Results.json"
      }
    },
    {
      "id": "rna_seq_results",
      "name": "RNA-Seq Results",
      "file": "RNA_SEQ_Results.txt",
      "jsonFile": "RNA_SEQ_Results.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "rna-seq"
      ],
      "purpose": "Transcript-level RNA sequencing results, if you did not put them in the experiment samples file.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/rna_seq_results/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/RNA_SEQ_Results.xlsx",
        "txt": "/data/upload/templates/txt-templates/RNA_SEQ_Results.txt",
        "json": "/data/upload/templates/json-templates/RNA_SEQ_Results.json"
      }
    },
    {
      "id": "virus_neutralization_results",
      "name": "Virus Neutralization Results",
      "file": "Virus_Neutralization_Results.txt",
      "jsonFile": "Virus_Neutralization_Results.json",
      "templateType": "multiple",
      "category": "results",
      "assays": [
        "neutralizing-antibody",
        "virus-neutralization"
      ],
      "purpose": "Neutralizing titers from serum dilution series, if not in the experiment samples file.",
      "legacy": false,
      "docUrl": "/data/submission/02-templates/templatedocumentation/templates/virus_neutralization_results/",
      "downloads": {
        "xlsx": "/data/upload/templates/excel-templates/Virus_Neutralization_Results.xlsx",
        "txt": "/data/upload/templates/txt-templates/Virus_Neutralization_Results.txt",
        "json": "/data/upload/templates/json-templates/Virus_Neutralization_Results.json"
      }
    }
  ],
  "loadingOrder": [
    "protocols.txt",
    "reagents.array.txt",
    "reagents.elisa.txt",
    "reagents.elispot.txt",
    "reagents.mbaa.txt",
    "reagents.flow_cytometry.txt",
    "reagents.hai.txt",
    "reagents.cytof.txt",
    "reagents.neutralizing_antibody_titer.txt",
    "reagents.pcr.txt",
    "reagents.sequencing.txt",
    "reagents.virus_neutralization.txt",
    "reagents.hla_typing.txt",
    "reagents.kir_typing.txt",
    "reagents.other.txt",
    "reagent_sets.txt",
    "treatments.txt",
    "basic_study_design.txt",
    "subjectanimals.txt",
    "subjecthumans.txt",
    "study_design_edit.txt",
    "adverseevents.txt",
    "interventions.txt",
    "assessmentpanel.txt",
    "assessmentcomponent.txt",
    "assessments.txt",
    "biosamples.txt",
    "labtestpanels.txt",
    "labtests.txt",
    "labtest_results.txt",
    "experiments.txt",
    "controlsamples.txt",
    "standardcurves.txt",
    "experimentsamples.flow_cytometry.txt",
    "experimentsamples.cytof.txt",
    "experimentsamples.gene_expression_array.txt",
    "experimentsamples.genotyping_array.txt",
    "experimentsamples.hla.txt",
    "experimentsamples.image_histology.txt",
    "experimentsamples.kir.txt",
    "experimentsamples.mbaa.txt",
    "experimentsamples.rna_sequencing.txt",
    "experimentsamples.other.txt",
    "experimentsamples.mass_spectrometry_metabolomics.txt",
    "experimentsamples.mass_spectrometry_proteomics.txt",
    "experimentsamples.elisa.txt",
    "experimentsamples.elispot.txt",
    "experimentsamples.hai.txt",
    "experimentsamples.virus_neutralization.txt",
    "experimentsamples.neutralizing_antibody_titer.txt",
    "experimentsamples.qrt-pcr.txt",
    "immuneexposure.txt",
    "publicrepositories.txt",
    "elisa_results.txt",
    "elispot_results.txt",
    "hai_results.txt",
    "pcr_results.txt",
    "virus_neutralization_results.txt",
    "hla_typing.txt",
    "kir_typing.txt",
    "rna_seq_results.txt",
    "mass_spectrometry_metabolomic_results.txt",
    "mass_spectrometry_proteomic_results.txt",
    "mbaa_results.txt",
    "fcm_derived_data.txt",
    "cytof_derived_data.txt"
  ],
  "assays": [
    {
      "id": "cytof",
      "name": "CyTOF (mass cytometry)",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "cytof_reagents",
          "label": "reagents.CyTOF.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "reagent_sets",
          "label": "Reagent_Sets.txt",
          "when": "Many reagents are routinely used together as a set"
        },
        {
          "kind": "template",
          "package": true,
          "template": "cytof",
          "label": "experimentSamples.CYTOF.txt"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Raw .fcs files"
        },
        {
          "kind": "template",
          "package": false,
          "template": "cytof_derived_data",
          "label": "CyTOF_Derived_data.txt",
          "when": "The derived data can be put in the ImmPort template"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/CYTOF_FlowDiagram.pdf"
    },
    {
      "id": "elisa",
      "name": "ELISA",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "elisa_reagents",
          "label": "reagents.ELISA.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "elisa",
          "label": "experimentSamples.ELISA.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "elisa_results",
          "label": "ELISA_Results.txt",
          "when": "You left the result columns of experimentSamples.ELISA.txt empty (filling them in is recommended)"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/ELISA_FlowDiagram.pdf"
    },
    {
      "id": "elispot",
      "name": "ELISPOT",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "elispot_reagents",
          "label": "reagents.ELISPOT.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "elispot",
          "label": "experimentSamples.ELISPOT.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "elispot_results",
          "label": "ELISPOT_Results.txt",
          "when": "You left the result columns of experimentSamples.ELISPOT.txt empty (filling them in is recommended)"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/ELISPOT_FlowDiagram.pdf"
    },
    {
      "id": "flow-cytometry",
      "name": "Flow cytometry",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "flow_cytometry_reagents",
          "label": "reagents.Flow_Cytometry.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "reagent_sets",
          "label": "Reagent_Sets.txt",
          "when": "Many reagents are routinely used together as a set"
        },
        {
          "kind": "template",
          "package": true,
          "template": "flow_cytometry",
          "label": "experimentSamples.Flow_Cytometry.txt"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Raw .fcs files"
        },
        {
          "kind": "template",
          "package": false,
          "template": "fcm_derived_data",
          "label": "FCM_Derived_data.txt",
          "when": "The derived data can be put in the ImmPort template"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/FlowCytometry_FlowDiagram.pdf"
    },
    {
      "id": "gene-expression",
      "name": "Gene expression array",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "array_reagents",
          "label": "reagents.Array.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "gene_expression_array",
          "label": "experimentSamples.Gene_Expression_Array.txt"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Your results file(s)"
        },
        {
          "kind": "template",
          "package": false,
          "template": "public_repositories",
          "label": "publicRepositories.txt",
          "when": "The data is also in another public repository, such as GEO"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/GeneExpression_FlowDiagram.pdf",
      "notes": [
        "Shares the array reagents template with genotyping arrays."
      ]
    },
    {
      "id": "genotyping",
      "name": "Genotyping array",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "array_reagents",
          "label": "reagents.Array.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "genotyping_array",
          "label": "experimentSamples.Genotyping_Array.txt"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Your results file(s)"
        },
        {
          "kind": "template",
          "package": false,
          "template": "public_repositories",
          "label": "publicRepositories.txt",
          "when": "The data is also in another public repository, such as dbGaP"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/Genotyping_FlowDiagram.pdf",
      "notes": [
        "ImmPort does not normally accept GWAS-level human genotyping data. Deposit it in dbGaP and link to it."
      ]
    },
    {
      "id": "hai",
      "name": "Hemagglutination inhibition (HAI)",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "hai_reagents",
          "label": "reagents.HAI.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "hai",
          "label": "experimentSamples.HAI.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "hai_results",
          "label": "HAI_Results.txt",
          "when": "You left the result columns of experimentSamples.HAI.txt empty (filling them in is recommended)"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/HAI_FlowDiagram.pdf"
    },
    {
      "id": "hla",
      "name": "HLA typing",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "hla_typing_reagents",
          "label": "reagents.HLA_Typing.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "hla",
          "label": "experimentSamples.HLA.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "hla_typing",
          "label": "HLA_Typing.txt",
          "when": "You set \"ImmPort Template?\" to Yes in experimentSamples.HLA.txt (recommended)"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Your own results file(s)",
          "when": "You set \"ImmPort Template?\" to No in experimentSamples.HLA.txt"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/HLA_FlowDiagram.pdf"
    },
    {
      "id": "image-histology",
      "name": "Image histology",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "other_reagents",
          "label": "reagents.Other.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "image_histology",
          "label": "experimentSamples.Image_Histology.txt"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Your results file(s)"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/ImageHistology_FlowDiagram.pdf"
    },
    {
      "id": "kir",
      "name": "KIR typing",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "kir_typing_reagents",
          "label": "reagents.KIR_Typing.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "kir",
          "label": "experimentSamples.KIR.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "kir_typing",
          "label": "KIR_Typing.txt",
          "when": "You set \"ImmPort Template?\" to Yes in experimentSamples.KIR.txt (recommended)"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Your own results file(s)",
          "when": "You set \"ImmPort Template?\" to No in experimentSamples.KIR.txt"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/KIR_FlowDiagram.pdf"
    },
    {
      "id": "mbaa",
      "name": "Multiplex bead array (MBAA)",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "mbaa_reagents",
          "label": "reagents.MBAA.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "mbaa",
          "label": "experimentSamples.MBAA.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "mbaa_results",
          "label": "MBAA_Results.txt",
          "when": "You set \"ImmPort Template?\" to Yes in experimentSamples.MBAA.txt (recommended)"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Your own results file(s)",
          "when": "You set \"ImmPort Template?\" to No in experimentSamples.MBAA.txt"
        },
        {
          "kind": "template",
          "package": false,
          "template": "standardcurves",
          "label": "standardCurves.txt",
          "when": "The standard curve data can be put in the ImmPort template"
        },
        {
          "kind": "template",
          "package": false,
          "template": "controlsamples",
          "label": "controlSamples.txt",
          "when": "The control sample data can be put in the ImmPort template"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/MBAA_FlowDiagram.pdf",
      "notes": [
        "Standard curves and control samples are independent optional additions: include either, both or neither."
      ]
    },
    {
      "id": "mass-spec-metabolomics",
      "name": "Mass spectrometry: metabolomics",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "other_reagents",
          "label": "reagents.Other.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "mass_spec_metabolomics",
          "label": "experimentSamples.Mass_Spectrometry_Metabolomics.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "mass_spec_metabolomic_results",
          "label": "Mass_Spectrometry_Metabolomic_Results.txt",
          "when": "You set \"ImmPort Template?\" to Yes in experimentSamples.Mass_Spectrometry_Metabolomics.txt (recommended)"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Your own results file(s)",
          "when": "You set \"ImmPort Template?\" to No in experimentSamples.Mass_Spectrometry_Metabolomics.txt"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/MassSpec_FlowDiagram.pdf"
    },
    {
      "id": "mass-spec-proteomics",
      "name": "Mass spectrometry: proteomics",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "mass_spec_proteomics",
          "label": "experimentSamples.Mass_Spectrometry_Proteomics.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "mass_spec_proteomic_results",
          "label": "Mass_Spectrometry_Proteomic_Results.txt",
          "when": "You set \"ImmPort Template?\" to Yes in experimentSamples.Mass_Spectrometry_Proteomics.txt (recommended)"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Your own results file(s)",
          "when": "You set \"ImmPort Template?\" to No in experimentSamples.Mass_Spectrometry_Proteomics.txt"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/Proteomics_FlowDiagram.pdf",
      "notes": [
        "Proteomics has no reagents template, unlike metabolomics."
      ]
    },
    {
      "id": "neutralizing-antibody",
      "name": "Neutralizing antibody titer",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "neutralizing_antibody_titer_reagents",
          "label": "reagents.Neutralizing_Antibody_Titer.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "neutralizing_antibody_titer",
          "label": "experimentSamples.Neutralizing_Antibody_Titer.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "virus_neutralization_results",
          "label": "Virus_Neutralization_Results.txt",
          "when": "You left the result columns of experimentSamples.Neutralizing_Antibody_Titer.txt empty (filling them in is recommended)"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/Neutralization_FlowDiagram.pdf"
    },
    {
      "id": "qrt-pcr",
      "name": "qRT-PCR",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "pcr_reagents",
          "label": "reagents.PCR.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "qrt-pcr",
          "label": "experimentSamples.QRT-PCR.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "pcr_results",
          "label": "PCR_Results.txt",
          "when": "You left the result columns of experimentSamples.QRT-PCR.txt empty (filling them in is recommended)"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/PCR_FlowDiagram.pdf"
    },
    {
      "id": "rna-seq",
      "name": "RNA sequencing",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "sequencing_reagents",
          "label": "reagents.Sequencing.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "rna_sequencing",
          "label": "experimentSamples.RNA_Sequencing.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "rna_seq_results",
          "label": "RNA_SEQ_Results.txt",
          "when": "You set \"ImmPort Template?\" to Yes in experimentSamples.RNA_Sequencing.txt (recommended)"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Your own results file(s)",
          "when": "You set \"ImmPort Template?\" to No in experimentSamples.RNA_Sequencing.txt"
        },
        {
          "kind": "template",
          "package": false,
          "template": "public_repositories",
          "label": "publicRepositories.txt",
          "when": "The data is also in another public repository, such as GEO or SRA"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/RNASeq_FlowDiagram.pdf"
    },
    {
      "id": "virus-neutralization",
      "name": "Virus neutralization",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "virus_neutralization_reagents",
          "label": "reagents.Virus_Neutralization.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "virus_neutralization",
          "label": "experimentSamples.Virus_Neutralization.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "virus_neutralization_results",
          "label": "Virus_Neutralization_Results.txt",
          "when": "You left the result columns of experimentSamples.Virus_Neutralization.txt empty (filling them in is recommended)"
        }
      ]
    },
    {
      "id": "other",
      "name": "Other assay types",
      "steps": [
        {
          "kind": "template",
          "package": true,
          "template": "treatments",
          "label": "treatments.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "other_reagents",
          "label": "reagents.Other.txt"
        },
        {
          "kind": "template",
          "package": true,
          "template": "other",
          "label": "experimentSamples.Other.txt"
        },
        {
          "kind": "file",
          "package": true,
          "label": "Your results file(s)"
        }
      ],
      "flowDiagramPdf": "/documents/DataSubmissionProcess/Other_FlowDiagram.pdf",
      "notes": [
        "Use this when no other workflow matches. If you're not sure, ask the helpdesk before preparing the package."
      ]
    }
  ],
  "rules": [
    {
      "id": "R-01",
      "topic": "package",
      "rule": "One study per package.",
      "details": "The first study accession seen fixes the study for the whole package. Data for a second study fails (E-29)."
    },
    {
      "id": "R-02",
      "topic": "package",
      "rule": "Web uploads are limited to 512 MB per package.",
      "details": "For larger packages use IBM Aspera, or the API's offline or S3 uploads (API)."
    },
    {
      "id": "R-03",
      "topic": "package",
      "rule": "A package is a plain .zip.",
      "details": "No password, no split archives, not a renamed .rar or .7z (E-26)."
    },
    {
      "id": "R-04",
      "topic": "templates",
      "rule": "Use the current template version (3.37) and keep its fixed rows intact.",
      "details": "Don't edit the template name / Schema Version row, the column header row or section headers (E-14, E-22). The only exception is updating the version number of unchanged templates, as described in the version history."
    },
    {
      "id": "R-05",
      "topic": "templates",
      "rule": "Keep every column in the header row, even ones you leave empty.",
      "details": "A removed column fails even if it's optional (E-23)."
    },
    {
      "id": "R-06",
      "topic": "templates",
      "rule": "Each template appears once per package, in one format: .xlsx, tab-delimited .txt or .json.",
      "details": "No legacy .xls (E-19). No two files whose names differ only by case (E-24). Keep the standard template file names, without browser suffixes such as (1)."
    },
    {
      "id": "R-07",
      "topic": "templates",
      "rule": "Required sections and columns must be filled in.",
      "details": "Required fields are bold in the Excel template. Conditionally required fields are not bold; check the trigger on each field page (E-07, E-09)."
    },
    {
      "id": "R-08",
      "topic": "references",
      "rule": "Every reference must resolve: the record must be in the same package or already in the workspace.",
      "details": "Spell IDs exactly the same in both places (E-18). See Upload Order."
    },
    {
      "id": "R-09",
      "topic": "references",
      "rule": "Upload in dependency order across packages.",
      "details": "Study, then subjects, then clinical data and assays. Inside one package ImmPort sorts the templates itself (loading order)."
    },
    {
      "id": "R-10",
      "topic": "package",
      "rule": "For each assay, treatments, reagents and experiment samples go in the same package, together with the results template or results file.",
      "details": "See the dashed groups in Assay Workflows."
    },
    {
      "id": "R-11",
      "topic": "references",
      "rule": "User-defined IDs are unique within the workspace and are never reused.",
      "details": "Including across studies and earlier uploads (E-04, E-05). For human subjects the ID must not be identifying."
    },
    {
      "id": "R-12",
      "topic": "values",
      "rule": "Dates are DD-MMM-YYYY (or DD-MMM-YY), for example 06-Feb-2005.",
      "details": "ISO and numeric dates are rejected. Set Excel date columns to Text (E-20). Subject time points use study days instead of dates (R-19)."
    },
    {
      "id": "R-13",
      "topic": "values",
      "rule": "Controlled vocabulary fields accept only listed values.",
      "details": "Matching ignores case, and the stored value takes the list's spelling (E-16). Preferred vocabulary fields accept free text and map it when they can (E-17)."
    },
    {
      "id": "R-14",
      "topic": "values",
      "rule": "Numbers are bare numbers: no units, no thousands separators, the right kind (integer, positive, …).",
      "details": "(E-03)"
    },
    {
      "id": "R-15",
      "topic": "values",
      "rule": "Paired value and unit fields are filled together or left empty together.",
      "details": "(E-21)"
    },
    {
      "id": "R-16",
      "topic": "values",
      "rule": "Text must fit the column's maximum length.",
      "details": "Shown as Text, max N characters on each field page (E-01)."
    },
    {
      "id": "R-17",
      "topic": "templates",
      "rule": "basic_study_design needs at least one row in planned_visit, inclusion_exclusion and study_2_protocol.",
      "details": "Planned visit and inclusion/exclusion accessions from another study can't be reused; protocol accessions can (E-11 to E-13)."
    },
    {
      "id": "R-18",
      "topic": "references",
      "rule": "subjectHumans and subjectAnimals only create new subjects.",
      "details": "To reuse an existing subject in another study, use study_design_edit → arm_2_subject in the same workspace. A subject belongs to one arm per study (how, E-28)."
    },
    {
      "id": "R-19",
      "topic": "privacy",
      "rule": "De-identify human subject data.",
      "details": "No direct identifiers, no subject calendar dates (use study days from day 0), no location below state level. Enter true ages; the uploader rounds ages over 89 to 90 (details)."
    },
    {
      "id": "R-20",
      "topic": "access",
      "rule": "Uploading needs the Submitter or Administrator role and write access to the study.",
      "details": "Viewers can't upload, through the website or the API (roles)."
    },
    {
      "id": "R-21",
      "topic": "access",
      "rule": "To change loaded data, contact the helpdesk, except for study design details.",
      "details": "Update study design details yourself with study_design_edit."
    },
    {
      "id": "R-22",
      "topic": "package",
      "rule": "Validate before you upload.",
      "details": "The Validator runs a test load without saving anything. Fix the first errors first (how)."
    },
    {
      "id": "R-23",
      "topic": "package",
      "rule": "Every file named in a template is in the package.",
      "details": "Protocol documents, raw data and results files (E-02)."
    },
    {
      "id": "R-24",
      "topic": "values",
      "rule": "Either the ImmPort results template or your own results file, never both.",
      "details": "Controlled by the ImmPort Template? column of HLA, KIR, MBAA, mass spectrometry and RNA-seq experiment samples (E-31)."
    }
  ],
  "errors": [
    {
      "id": "E-01",
      "category": "format",
      "message": "The character count exceeds the database column width",
      "cause": "Text size beyond the limitation of the data field",
      "example": "In assessments template, the assessment_panel_status has Expected Length \"40\", but the input text has Length \"45\"",
      "fix": "Shorten the text. Each field's maximum length is on its field page (Text, max N characters) and in the comment on the column header in the Excel template."
    },
    {
      "id": "E-02",
      "category": "package",
      "message": "File does not exist",
      "cause": "A file named in a template is missing from the package",
      "example": "Missing the file MidMicrobiomeData.xlsx which is specified in your experimentSamples template, but missed in your upload package.",
      "fix": "Make sure all files specified are packed in your upload package. Check file counts in your directory before uploading."
    },
    {
      "id": "E-03",
      "category": "format",
      "message": "Not an integer (also: \"A positive integer is expected\", \"A non-negative integer is expected\", \"Not a real number\", or \"… outside the range for an Oracle number\")",
      "cause": "Text in an expected numeric field, or a number of the wrong kind (negative where positive is required, decimal where an integer is required, or a value too large)",
      "example": "The Numeric Type check \"positive\" in field \"Target Enrollment\" \"100 patients\"",
      "fix": "Pay attention to the “data type” note in the data field Comments (mouse over the data field name in the Excel template). Enter a bare number with no units, no thousands separators, and no text; use the exact numeric kind the field expects (integer vs. real, positive vs. non-negative)."
    },
    {
      "id": "E-04",
      "category": "ids",
      "message": "User defined ID is already in database",
      "cause": "User_defined_ID has been used in the workspace",
      "example": "User Defined ID with value \"100\" in the Table study",
      "fix": "The ID is already used in this workspace, perhaps by an earlier upload or another study. Choose a new ID. Tip: include something unique to the study, such as a PMID or preprint ID, in your IDs."
    },
    {
      "id": "E-05",
      "category": "ids",
      "message": "User defined ID is already in package",
      "cause": "User_defined_ID is not unique in your template",
      "example": "In subjectHumans template, one subjectID has been used in >1 rows",
      "fix": "Check the subjectID in your template and correct the error (e.g. remove duplicated row)."
    },
    {
      "id": "E-06",
      "category": "ids",
      "message": "User defined ID is already in package",
      "cause": "User_defined_ID is not unique in your template",
      "example": "In assessments template, one subjectID has been used in >1 rows. The same error message can also appear in the assessment_component template.",
      "fix": "In the assessments template: if you have multiple assessment panels for a subject, prepare one template per panel to avoid the issue of multiple rows for a subject. However, it is OK to have multiple assessment components for a subject — just expand the 15 component fields (from User Defined ID to Who Is Assessed) row-wise, one after another, so multiple components are in the same subject row. /  / Note for the assessment_component template: this is a different situation. A subject repeating across multiple rows is expected and valid there — each row is a separate component. Do not try to consolidate the rows. This error means a row's own User Defined ID value is not unique, not the Subject ID. Check that every row in the template has a distinct User Defined ID."
    },
    {
      "id": "E-07",
      "category": "required",
      "message": "Missing conditional required value",
      "cause": "Conditional Required Data Field is empty",
      "example": "Required Column for Field \"Race Specify\" If Race=\"Other\"",
      "fix": "If you select \"Other\" in the Race dropdown list, you need to specify the race with free text in the \"Race Specify\" field — you cannot leave it blank. Conditionally required fields are not highlighted in bold font in the template, so they are easily overlooked."
    },
    {
      "id": "E-08",
      "category": "required",
      "message": "Data row is missing results",
      "cause": "Required Data Field is empty",
      "example": "In subjectHumans template, missing value in the required \"Exposure Process Reported\" field",
      "fix": "If the value is not relevant to you, choose \"unknown\" in the dropdown list."
    },
    {
      "id": "E-09",
      "category": "required",
      "message": "Missing required value",
      "cause": "Required Data Field is empty",
      "example": "The Rule check \"Required Column\" for Field \"Title In Study\". The row has ID field(s) \"User Defined ID\" and value \"investigator_1\"",
      "fix": "In the study_personnel section of the basic_study_design template, the field \"Title In Study\" is a required field."
    },
    {
      "id": "E-10",
      "category": "required",
      "message": "Missing required value",
      "cause": "Required Data Field is empty",
      "example": "The Rule check \"Required Column\" for Field \"Site Name\". The row has ID field(s) \"User Defined ID\" and value \"author_1\"",
      "fix": "In the study_personnel section of the basic_study_design template, the field \"Site Name\" is a required field."
    },
    {
      "id": "E-11",
      "category": "required",
      "message": "Required compound template is missing",
      "cause": "Required Data Field is empty",
      "example": "The Compound Template has value \"planned_visit\"",
      "fix": "The \"planned_visit\" section in the basic_study_design template cannot be empty. If your study doesn't have a planned visit, put at least 1 row there, e.g. 24633240_PV1 (for User Defined ID), Sample collection (for Name), 1 (for Order Number), 0 (for Min Start Day). You are not allowed to reuse the planned_visit accession from a previous study."
    },
    {
      "id": "E-12",
      "category": "required",
      "message": "Required compound template is missing",
      "cause": "Required Data Field is empty",
      "example": "The Compound Template has value \"inclusion_exclusion\"",
      "fix": "The \"inclusion_exclusion\" section in the basic_study_design template cannot be empty. Put at least one criterion there. You are not allowed to reuse the \"inclusion_exclusion\" accession from a previous study."
    },
    {
      "id": "E-13",
      "category": "required",
      "message": "Required compound template is missing",
      "cause": "Required Data Field is empty",
      "example": "The Compound Template has value \"study_2_protocol\"",
      "fix": "The \"study_2_protocol\" section in the basic_study_design template cannot be empty. Put at least one protocol there. It is OK to reuse the protocolID accession (e.g. PTL10759) from a previous study."
    },
    {
      "id": "E-14",
      "category": "version",
      "message": "The template with schema version ({0}) is older than the code schema version ({1}). You are using an older version of the template than the code will accept, please use the template with schema version {1}.",
      "cause": "Template is an older version than the Validator expects",
      "example": "You upload subjectHumans.txt saved from a template downloaded some time ago, tagged Schema Version 3.35, but the current template version is 3.37.",
      "fix": "Download the current version of the template from the Template Catalog and re-enter your data, or copy your data into the new template. Do not edit the Schema Version row by hand."
    },
    {
      "id": "E-15",
      "category": "version",
      "message": "The template with schema version ({0}) is newer than the code schema version ({1}). You are using a newer version of the template than the code will accept, please use the template with schema version {1}.",
      "cause": "Template is a newer version than the Validator expects",
      "example": "You upload a template tagged Schema Version 3.38, but the deployed Validator/upload-server code still expects 3.37.",
      "fix": "This means the Validator or upload-server has not yet been updated to match a template change that was already released. Contact ImmPort_Helpdesk@immport.org rather than trying to work around it — do not hand-edit the Schema Version row."
    },
    {
      "id": "E-16",
      "category": "vocabulary",
      "message": "Value reported in template does not match preferred vocabulary. See template documentation for preferred vocabulary terms.",
      "cause": "Value not in the Controlled Vocabulary list for that field",
      "example": "In basic_study_design template, the \"Age Unit\" column contains \"yrs\", but the allowed values (from lookup table lk_time_unit) are Days, Hours, Minutes, Months, Seconds, Weeks, Years.",
      "fix": "Controlled Vocabulary fields only accept an exact value from the dropdown list in the Excel template — free text is rejected outright (unlike Mapped/Preferred Vocabulary fields, below). Open the Excel version of the template and select the value from the dropdown rather than typing it."
    },
    {
      "id": "E-17",
      "category": "vocabulary",
      "message": "The value reported does not match a preferred value to map. See template documentation for preferred vocabulary terms.",
      "cause": "Value not recognized by a Mapped or Preferred Vocabulary field",
      "example": "In arm_or_cohort template, \"Type Reported\" contains a free-text value that isn't found in the lk_arm_type_pref_mapping table, so no \"Type Preferred\" value can be automatically assigned.",
      "fix": "Unlike Controlled Vocabulary fields, your reported value is still accepted and saved — but the automatic \"preferred\" mapping (e.g. Type Preferred) is left blank. If you want the preferred term populated, check the template documentation for the closest matching preferred term and use it instead. /  / Note: this still appears as an entry in the validation report; it flags that no preferred term could be mapped, not that your data is rejected."
    },
    {
      "id": "E-18",
      "category": "ids",
      "message": "ForeignKeysLogic.error.unknown.user.defined.id.foreign.key / ForeignKeysLogic.error.unknown.accession.id.foreign.key",
      "cause": "Reference to another record cannot be resolved (foreign key)",
      "example": "In study_2_protocol template, \"Protocol ID\" references a protocol user-defined ID or accession that isn't defined anywhere in this package or already in the workspace.",
      "fix": "Make sure every ID/accession you reference (Protocol ID, Arm or Cohort ID, Planned Visit ID, Biological Sample ID, etc.) is either defined in the same upload package or already exists in the target workspace, and that it's spelled exactly the same way in both places."
    },
    {
      "id": "E-19",
      "category": "package",
      "message": "The Excel file name has same prefix as a template file name",
      "cause": "Legacy binary .xls spreadsheet (Excel 97–2003) whose name matches a template",
      "example": "Your package contains basic_study_design.xls (old binary format) where a template file is expected.",
      "fix": "Both tab-delimited .txt and modern .xlsx are accepted template formats and are validated/parsed directly; the legacy .xls binary format is not. Re-save the file as .xlsx (in Excel, File → Save As → \"Excel Workbook\") or as tab-delimited .txt (File → Save As → \"Text (Tab delimited)\"), and include that file instead."
    },
    {
      "id": "E-20",
      "category": "format",
      "message": "The date format is either DD-MMM-YY or DD-MMM-YYYY where day (DD) is one or two digits 01..31 appropriate to the month, month (MMM) is a case-insensitive value (Jan, Feb, …, Dec), and year is either two digits (YY, e.g. 05 = 2005) or four digits (YYYY).",
      "cause": "A date field entered in the wrong format",
      "example": "In basic_study_design, \"Actual Start Date\" contains 2005-02-06 or 02/06/2005 instead of 06-Feb-2005.",
      "fix": "Use DD-MMM-YYYY (e.g. 06-Feb-2005); two- and four-digit years are both accepted, but numeric months, slashes, and ISO (YYYY-MM-DD) formatting are not. Excel may silently reformat date cells — set the column format to Text before typing, and confirm the cell shows exactly DD-MMM-YYYY."
    },
    {
      "id": "E-21",
      "category": "format",
      "message": "Value and unit must both be empty or non-empty",
      "cause": "A result value entered without its unit, or a unit without a value",
      "example": "In a results template, \"Result Value Reported\" is 10 but \"Result Unit Reported\" is blank (or vice versa).",
      "fix": "These paired fields must be filled together. Provide both the value and its unit, or leave both empty."
    },
    {
      "id": "E-22",
      "category": "structure",
      "message": "The template does not contain the row whose first cell is the (case-insensitive) template name … and the row also contains the cell \"Schema Version {1}\" | Cannot find header row in template file | Unable to find start of vertical compound template, possible explanations include a missing section header or a typo in a section header",
      "cause": "The template's control row, its \"Column Name\" header row, or a compound section header was edited, deleted, reordered, or misspelled",
      "example": "The top \"… Schema Version 3.37\" row was removed from protocols.txt; or the \"Column Name\" row was renamed; or a section header in basic_study_design was typed as \"study personnel\" instead of \"Study_Personnel\".",
      "fix": "Do not delete, rename, reorder, or retype the fixed rows the template ships with (the template-name / Schema Version row, the \"Please do not delete or edit this column\" row, the \"Column Name\" header row, and each compound section header). If in doubt, start from a fresh copy of the template and paste only your data rows into it."
    },
    {
      "id": "E-23",
      "category": "structure",
      "message": "Missing required column in column header",
      "cause": "A required column was removed from the header row (as opposed to left blank in a data row)",
      "example": "The \"Age Unit\" column was deleted from the subjectHumans header row.",
      "fix": "Keep every column the template ships with in the header row, even columns you leave empty; re-add the missing one from a fresh template copy. This differs from a missing value (E-08 to E-10) — here the whole column is gone."
    },
    {
      "id": "E-24",
      "category": "package",
      "message": "Duplicate file based on case-insensitive spelling | Duplicate template file based on case-insensitive spelling",
      "cause": "Two files in the package whose names differ only by letter case, or the same template supplied in more than one format",
      "example": "The package contains both protocols.txt and protocols.xlsx; or both Reagents.txt and reagents.txt.",
      "fix": "Include each template once, in a single format (.txt, .xlsx, or .json), and remove the extra copy. Make sure no two files anywhere in the package share a name that differs only by case."
    },
    {
      "id": "E-25",
      "category": "version",
      "message": "The workspace data file schema version ({0}) is older than the code schema version ({1}). You need to download a current workspace data file. (also the \"… is newer …\" variant)",
      "cause": "The workspace data file used by the Validator is out of date relative to the Validator code — not a problem with your template",
      "example": "You run the Validator against a workspace data file downloaded months ago (schema 3.35) while the Validator is on 3.37.",
      "fix": "This is about the workspace data file, not your template (compare E-14 and E-15). Download a fresh workspace data file from ImmPort and re-run. If it reports \"newer\", the Validator application itself is behind — contact ImmPort_Helpdesk@immport.org."
    },
    {
      "id": "E-26",
      "category": "package",
      "message": "Unable to unzip package | IO Exception made template file unreadable / An Exception made template file unreadable",
      "cause": "The uploaded archive is not a readable .zip, or a file inside it cannot be read",
      "example": "A password-protected or partially-uploaded zip; a .rar or .7z renamed to .zip; a template saved in a binary format but named \".txt\".",
      "fix": "Repackage as a plain, unencrypted .zip (no password, no split/multi-part archive). Re-download and re-save any template that will not open, and confirm each template file is genuine tab-delimited text, .xlsx, or .json — not a renamed binary."
    },
    {
      "id": "E-27",
      "category": "ids",
      "message": "{0} for {2} is already defined for a {1} in {2}",
      "cause": "The same subject and study pair appears twice in the arm_2_subject section of one package",
      "example": "study_design_edit links Subject_001 to two arms of the same study in one file",
      "fix": "Keep one row per subject per study. Linking a subject to arms in different studies is fine (see Sharing subjects across studies)."
    },
    {
      "id": "E-28",
      "category": "ids",
      "message": "Two or more arms assigned to the subject are in the same study",
      "cause": "A subject is assigned to more than one arm of the same study",
      "example": "Subject_001 is assigned to both ARM_A and ARM_B of study SDY100",
      "fix": "A subject can belong to only one arm in a study. Remove the extra assignment."
    },
    {
      "id": "E-29",
      "category": "package",
      "message": "The study accession associated with an entity is not equal to upload's study accession",
      "cause": "The package contains data for more than one study",
      "example": "One zip contains subjects for two different studies",
      "fix": "Make one package per study (R-01)."
    },
    {
      "id": "E-30",
      "category": "required",
      "message": "Row has incomplete data",
      "cause": "None of a group of columns is filled in, but at least one of them is required",
      "example": "A treatments row with Amount, Duration and Temperature all empty",
      "fix": "Fill in at least one column of the group. The field page notes which columns form the group."
    },
    {
      "id": "E-31",
      "category": "structure",
      "message": "ImmPort result template is not present | No result file provided | ImmPort result template was indicated in template but a custom result file is provided | Upload package providing a non-ImmPort result file, but an ImmPort result file provided",
      "cause": "The ImmPort Template? column in an experiment samples template doesn't match the results you included",
      "example": "experimentSamples.HLA says ImmPort Template? = Yes, but HLA_Typing.txt is missing from the package, or a Result File Name is also filled in",
      "fix": "Yes: include the ImmPort results template and leave Result File Name empty. No: put your file's name in Result File Name and include that file. Never both."
    },
    {
      "id": "E-32",
      "category": "vocabulary",
      "message": "Population maker \"{0}\" is not known, needs to be added to list of analytes (lk_analyte) or non-analyte markers (lk_cell_populaton_marker)",
      "cause": "A cell population definition in flow cytometry or CyTOF data uses a marker ImmPort doesn't know",
      "example": "A gating definition uses a misspelled marker name",
      "fix": "Check the spelling against lk_analyte. If the marker is genuinely new, ask the helpdesk to add it."
    },
    {
      "id": "E-33",
      "category": "structure",
      "message": "Duplicate data row",
      "cause": "Two data rows in a template are identical",
      "example": "The same subject row is pasted twice in subjectHumans",
      "fix": "Remove the duplicate row."
    }
  ]
}
