{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://vaccinedatanavigator.org/schemas/virus_navigator.schema.json",
  "title": "Virus Navigator",
  "description": "Virus-level reference data for the Virus Navigator section: taxonomy and biology (from ICTV/NCBI/ViralZone), human impact estimates (each quoted verbatim from its source), and countermeasures (vaccines, antivirals, antibodies) with per-virus development stage. Normalised: viruses, countermeasures, estimates and sources are separate arrays joined by IDs. Nothing is recomputed; numeric fields are only filled when the source states the number.",
  "type": "object",
  "required": ["_meta", "sources", "viruses", "countermeasures", "estimates"],
  "additionalProperties": false,
  "properties": {
    "_meta": {
      "type": "object",
      "required": ["description", "schemaVersion", "lastUpdated", "updateCadence", "ictvRelease"],
      "additionalProperties": true,
      "properties": {
        "description": { "type": "string" },
        "schemaVersion": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$" },
        "lastUpdated": { "type": "string", "format": "date" },
        "updateCadence": { "type": "string" },
        "ictvRelease": { "type": "string", "description": "ICTV Master Species List / VMR release used for taxonomy, e.g. 'MSL40 / VMR_MSL40.v1'" },
        "pipelineDataVersion": { "type": "string", "description": "lastUpdated of vaccine_pipeline_data.json this file was joined against" },
        "extractDates": {
          "type": "object",
          "description": "Per-source extract dates, e.g. {\"ctgov\": \"2026-10-29\", \"openfda\": \"2026-10-29\"}",
          "additionalProperties": { "type": "string", "format": "date" }
        }
      }
    },

    "sources": {
      "type": "array",
      "items": { "$ref": "#/$defs/source" }
    },
    "viruses": {
      "type": "array",
      "minItems": 1,
      "items": { "$ref": "#/$defs/virus" }
    },
    "countermeasures": {
      "type": "array",
      "items": { "$ref": "#/$defs/countermeasure" }
    },
    "estimates": {
      "type": "array",
      "items": { "$ref": "#/$defs/estimate" }
    }
  },

  "$defs": {
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
    },
    "isoDate": { "type": "string", "format": "date" },

    "whoRegion": {
      "type": "string",
      "enum": ["AFR", "AMR", "SEAR", "EUR", "EMR", "WPR", "global"]
    },

    "coverageStatus": {
      "type": "string",
      "description": "Mirrors the site convention that empty sections say 'not searched'. 'searched_none_found' is a finding; 'not_searched' is an absence of work. Never infer one from the other.",
      "enum": ["searched_found", "searched_none_found", "not_searched"]
    },

    "source": {
      "type": "object",
      "required": ["sourceId", "sourceType", "title", "url", "accessed"],
      "additionalProperties": false,
      "properties": {
        "sourceId": { "$ref": "#/$defs/slug" },
        "sourceType": {
          "type": "string",
          "enum": [
            "ictv", "ncbi_taxonomy", "viralzone",
            "peer_reviewed", "systematic_review", "gbd",
            "who", "cdc", "ecdc", "national_health_agency",
            "regulator_label", "regulator_review", "regulator_approval_list",
            "trial_registry", "treatment_guideline", "company", "other"
          ]
        },
        "title": { "type": "string" },
        "authors": { "type": "string" },
        "year": { "type": "integer" },
        "doi": { "type": "string" },
        "pmid": { "type": "string", "pattern": "^\\d+$" },
        "url": { "type": "string", "format": "uri" },
        "accessed": { "$ref": "#/$defs/isoDate" },
        "cachePath": { "type": "string", "description": "Path to the cached copy used for quote verification, same convention as disease-risk" },
        "license": { "type": "string", "description": "Licence of the underlying data where it constrains reuse (e.g. ChEMBL CC BY-SA 3.0)" }
      }
    },

    "sourceRef": {
      "type": "object",
      "required": ["sourceId"],
      "additionalProperties": false,
      "properties": {
        "sourceId": { "$ref": "#/$defs/slug" },
        "locator": { "type": "string", "description": "Page, table, section or field, e.g. 'Table 2', 'VMR row 1234'" },
        "quote": { "type": "string", "description": "Exact sentence from the cached source. Required for every estimate and every non-registry claim." },
        "quoteVerified": { "type": "boolean", "default": false },
        "verifiedOn": { "$ref": "#/$defs/isoDate" }
      }
    },

    "sourcedTerm": {
      "type": "object",
      "description": "A categorical fact (a transmission route, a reservoir, a vector) with its evidence.",
      "required": ["value", "sourceRefs"],
      "additionalProperties": false,
      "properties": {
        "value": { "type": "string" },
        "detail": { "type": "string" },
        "sourceRefs": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/sourceRef" } }
      }
    },

    "jurisdictionStatus": {
      "type": "object",
      "description": "Same shape as vaccine_pipeline.schema.json so the two can be joined and rendered by shared code.",
      "required": ["jurisdiction", "status"],
      "additionalProperties": false,
      "properties": {
        "jurisdiction": { "type": "string", "description": "US, EU, UK, CA, AU, JP, CN, IN, WHO_PQ (WHO prequalification), WHO_EUL, other ISO code" },
        "status": {
          "type": "string",
          "enum": [
            "approved", "approved_conditional", "emergency_use",
            "under_review", "submitted", "not_submitted",
            "withdrawn", "suspended", "rejected", "unknown"
          ]
        },
        "date": { "type": "string" },
        "dateType": { "type": "string", "enum": ["company_estimate", "regulator_confirmed", "unknown"] },
        "population": { "type": "string", "description": "Approved population if narrower than all ages" },
        "sourceRef": { "$ref": "#/$defs/sourceRef" },
        "notes": { "type": "string" }
      }
    },

    "virus": {
      "type": "object",
      "required": [
        "virusId", "name", "tier", "taxonomy", "baltimoreClass",
        "humanInfection", "sectionCoverage", "lastVerified"
      ],
      "additionalProperties": false,
      "properties": {
        "virusId": { "$ref": "#/$defs/slug", "description": "URL slug, e.g. 'measles-virus' → /virus-navigator/viruses/measles-virus.html" },
        "name": { "type": "string", "description": "Common virus name, e.g. 'Measles virus'" },
        "abbreviations": { "type": "array", "items": { "type": "string" } },
        "synonyms": { "type": "array", "items": { "type": "string" }, "description": "Former names, lay names, disease-derived names; fed to site search" },
        "tier": {
          "type": "string",
          "enum": ["full", "index_only"],
          "description": "full = own page with impact and countermeasure sections; index_only = appears in the browse table and family pages with taxonomy/biology only"
        },

        "taxonomy": {
          "type": "object",
          "description": "Copied from ICTV VMR for the release in _meta.ictvRelease. Do not hand-edit; re-run the fetch script.",
          "required": ["species", "family", "realm", "sourceRef"],
          "additionalProperties": false,
          "properties": {
            "realm": { "type": "string" },
            "kingdom": { "type": "string" },
            "phylum": { "type": "string" },
            "class": { "type": "string" },
            "order": { "type": "string" },
            "family": { "type": "string" },
            "subfamily": { "type": "string" },
            "genus": { "type": "string" },
            "species": { "type": "string", "description": "ICTV binomial species name" },
            "formerSpeciesNames": { "type": "array", "items": { "type": "string" } },
            "ictvTaxonId": { "type": "string" },
            "ncbiTaxId": { "type": "integer" },
            "exemplarAccession": { "type": "string", "description": "GenBank accession of the ICTV exemplar isolate" },
            "sourceRef": { "$ref": "#/$defs/sourceRef" }
          }
        },

        "baltimoreClass": {
          "type": "string",
          "enum": ["I", "II", "III", "IV", "V", "VI", "VII"],
          "description": "I dsDNA; II ssDNA; III dsRNA; IV (+)ssRNA; V (−)ssRNA; VI ssRNA-RT; VII dsDNA-RT"
        },

        "genome": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "segmented": { "type": "boolean" },
            "segmentCount": { "type": "integer", "minimum": 1 },
            "lengthKb": { "type": "string", "description": "As stated by source, e.g. '15.9' or '~30'" },
            "enveloped": { "type": "boolean" },
            "capsidSymmetry": { "type": "string", "enum": ["icosahedral", "helical", "complex", "unknown"] },
            "sourceRef": { "$ref": "#/$defs/sourceRef" }
          }
        },

        "subtypes": {
          "type": "array",
          "description": "Serotypes, genotypes, clades, subtypes that matter for countermeasures (e.g. DENV-1..4, HPV 16/18, influenza A H5N1)",
          "items": {
            "type": "object",
            "required": ["name"],
            "additionalProperties": false,
            "properties": {
              "name": { "type": "string" },
              "kind": { "type": "string", "enum": ["serotype", "genotype", "subtype", "clade", "lineage", "variant", "strain"] },
              "notes": { "type": "string" }
            }
          }
        },

        "humanInfection": {
          "type": "string",
          "description": "The first five values are curated judgements about how the virus reaches people. 'evidence_of_human_infection_unclassified' is the machine-assigned default for auto-generated index_only rows: GenBank holds human-host sequence for the taxon, but no one has yet classified the transmission pattern. Render it as 'Human infection recorded; pattern not classified', never as a blank cell.",
          "enum": [
            "primary_human_pathogen",
            "zoonotic_with_human_transmission",
            "zoonotic_dead_end",
            "rare_or_opportunistic",
            "not_known_to_infect_humans",
            "evidence_of_human_infection_unclassified"
          ]
        },
        "hosts": {
          "type": "array",
          "description": "DERIVED by fetch_ncbi_taxonomy.py from GenBank /host provenance; do not hand-edit. An entry states ONLY that GenBank holds n nucleotide records for this taxon annotated with that host. It is a discovery signal, NOT a host-range claim: HIV-1 carries 3 pig-annotated records out of 1,095,546, from contamination or mislabelled submissions. Render it as what it is ('GenBank records annotated host=pig: 3'), never as 'infects pigs'; entries with needsReview set must be suppressed or footnoted, never stated plainly. A published host range needs a curated, quoted source (WOAH listed diseases, veterinary vaccine labels) in reservoirHosts, not this array. The array still drives the inclusion rule and the human/veterinary split, so it must be rendered wherever a countermeasure is shown: a reader must never be able to read a veterinary-only virus as a human one. An empty or absent array means the hosts have not been screened, not that there are none.",
          "items": {
            "type": "object",
            "required": ["host", "hostCategory", "sequences", "sourceRef"],
            "additionalProperties": false,
            "properties": {
              "host": { "type": "string", "description": "Reader-facing host label, e.g. 'human', 'cattle', 'chicken'" },
              "hostCategory": {
                "type": "string",
                "enum": ["human", "veterinary", "other"],
                "description": "Drives the human/veterinary split in the browse table and the gap matrix"
              },
              "hostStrings": {
                "type": "array",
                "items": { "type": "string" },
                "description": "The GenBank /host spellings counted for this host"
              },
              "sequences": { "type": "integer", "minimum": 1, "description": "Nucleotide records for this taxon with this /host value" },
              "needsReview": { "type": "boolean", "description": "Set when the record count is negligible beside the virus's dominant host, which is the signature of contamination or a mislabelled submission. No mechanical rule separates these from real minor hosts, so the flag marks them for curation and must suppress or footnote the entry in rendering." },
              "reviewNote": { "type": "string" },
              "sourceRef": { "$ref": "#/$defs/sourceRef" }
            }
          }
        },
        "reservoirHosts": { "type": "array", "items": { "$ref": "#/$defs/sourcedTerm" } },
        "vectors": { "type": "array", "items": { "$ref": "#/$defs/sourcedTerm" } },
        "transmissionRoutes": {
          "type": "array",
          "description": "value must be one of the controlled terms listed in the spec (respiratory_droplet, airborne, direct_contact, fomite, fecal_oral, foodborne, waterborne, sexual, bloodborne, vertical, breastfeeding, vector_borne, zoonotic_contact, iatrogenic, transplant)",
          "items": { "$ref": "#/$defs/sourcedTerm" }
        },
        "geography": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "summary": { "type": "string" },
            "endemicRegions": { "type": "array", "items": { "$ref": "#/$defs/whoRegion" } },
            "sourceRef": { "$ref": "#/$defs/sourceRef" }
          }
        },
        "persistence": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "latency": { "type": "boolean" },
            "chronicInfection": { "type": "boolean" },
            "iarcGroup": { "type": "string", "enum": ["1", "2A", "2B", "3", "not_evaluated"] },
            "associatedCancers": { "type": "array", "items": { "type": "string" } },
            "sourceRef": { "$ref": "#/$defs/sourceRef" }
          }
        },
        "priorityListings": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["list", "sourceRef"],
            "additionalProperties": false,
            "properties": {
              "list": { "type": "string", "enum": ["WHO_PPL_2024", "WHO_RND_BLUEPRINT", "CEPI", "NIAID_category", "other"] },
              "category": { "type": "string", "description": "e.g. 'priority pathogen', 'prototype pathogen', 'Category A'" },
              "family": { "type": "string" },
              "sourceRef": { "$ref": "#/$defs/sourceRef" }
            }
          }
        },
        "biosafetyLevel": { "type": "string", "enum": ["BSL-1", "BSL-2", "BSL-3", "BSL-4", "unknown"] },

        "diseases": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["diseaseName"],
            "additionalProperties": false,
            "properties": {
              "diseaseName": { "type": "string" },
              "icd11": { "type": "string" },
              "course": { "type": "string", "enum": ["acute", "chronic", "post_acute", "oncogenic", "congenital"] },
              "diseaseRiskPage": { "type": ["string", "null"], "description": "Existing slug under /disease-risk/, e.g. 'mmr.html'" }
            }
          }
        },

        "relatedPages": {
          "type": "object",
          "description": "Cross-links into existing site sections. Paths relative to site root. null = checked and none exists.",
          "additionalProperties": false,
          "properties": {
            "vaccinePages": { "type": "array", "items": { "type": "string" } },
            "diseaseRiskPage": { "type": ["string", "null"] },
            "pipelineFilter": { "type": ["string", "null"], "description": "targetDisease value to pre-filter vaccine-pipeline.html" },
            "openpvDrugPages": { "type": "array", "items": { "type": "string" } },
            "researchTrackerQuery": { "type": ["string", "null"] }
          }
        },

        "sectionCoverage": {
          "type": "object",
          "required": ["impact", "vaccines", "antivirals", "antibodies"],
          "additionalProperties": false,
          "properties": {
            "impact": { "$ref": "#/$defs/coverageStatus" },
            "vaccines": { "$ref": "#/$defs/coverageStatus" },
            "antivirals": { "$ref": "#/$defs/coverageStatus" },
            "antibodies": { "$ref": "#/$defs/coverageStatus" }
          }
        },

        "countermeasureSummary": {
          "type": "object",
          "description": "DERIVED by build script from countermeasures[].indications. Do not hand-edit. Used for browse-table filters and the gap matrix.",
          "additionalProperties": false,
          "properties": {
            "bestVaccineStage": { "$ref": "#/$defs/stage" },
            "bestAntiviralStage": { "$ref": "#/$defs/stage" },
            "bestAntibodyStage": { "$ref": "#/$defs/stage" },
            "nVaccines": { "type": "integer" },
            "nAntivirals": { "type": "integer" },
            "nAntibodies": { "type": "integer" }
          }
        },

        "lastVerified": { "$ref": "#/$defs/isoDate" },
        "notes": { "type": "string" }
      }
    },

    "stage": {
      "type": "string",
      "description": "Superset of vaccine_pipeline currentStage. Applies per (countermeasure, virus) pair, not per product.",
      "enum": [
        "none",
        "preclinical",
        "phase_1",
        "phase_2",
        "phase_3",
        "regulatory_submission_filed",
        "under_regulatory_review",
        "emergency_use",
        "approved",
        "approved_restricted_or_suspended",
        "guideline_recommended_unapproved",
        "withdrawn",
        "discontinued"
      ]
    },

    "indication": {
      "type": "object",
      "description": "One countermeasure × one virus × one use. A drug approved for HIV and in phase 2 for another virus has two indications.",
      "required": ["virusId", "use", "stage", "hostCategory", "sourceRefs"],
      "additionalProperties": false,
      "properties": {
        "virusId": { "$ref": "#/$defs/slug" },
        "hostCategory": {
          "type": "string",
          "enum": ["human", "veterinary"],
          "description": "Who the product is authorised for. REQUIRED, and required precisely because the harm is asymmetric: a veterinary vaccine rendered as a human option could lead someone to believe protection exists for their child where none does. Every producer must declare it, and no page may render an indication of one category in a section for the other. A product authorised for both animals and people is two indications, not one."
        },
        "subtypes": { "type": "array", "items": { "type": "string" }, "description": "Restrict to listed subtypes/serotypes, matching virus.subtypes[].name" },
        "use": {
          "type": "string",
          "enum": [
            "routine_immunization", "risk_group_immunization", "travel", "occupational",
            "outbreak_response", "pre_exposure_prophylaxis", "post_exposure_prophylaxis",
            "treatment", "treatment_severe_or_hospitalized", "suppressive_chronic"
          ]
        },
        "stage": { "$ref": "#/$defs/stage" },
        "jurisdictionStatus": { "type": "array", "items": { "$ref": "#/$defs/jurisdictionStatus" } },
        "guidelineRecommendations": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["body", "sourceRef"],
            "additionalProperties": false,
            "properties": {
              "body": { "type": "string", "description": "WHO, CDC/ACIP, IDSA, NIH, EASL, NICE, etc." },
              "recommendation": { "type": "string" },
              "sourceRef": { "$ref": "#/$defs/sourceRef" }
            }
          }
        },
        "linkedTrials": { "type": "array", "items": { "type": "string", "pattern": "^NCT\\d{8}$" } },
        "pipelineCandidateId": { "type": ["string", "null"], "description": "candidateId in vaccine_pipeline_data.json; the pipeline file is the source of truth for vaccine stage when set" },
        "population": { "type": "string" },
        "sourceRefs": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/sourceRef" } },
        "lastVerified": { "$ref": "#/$defs/isoDate" }
      }
    },

    "countermeasure": {
      "type": "object",
      "required": ["countermeasureId", "name", "class", "indications", "lastVerified"],
      "additionalProperties": false,
      "properties": {
        "countermeasureId": { "$ref": "#/$defs/slug" },
        "name": { "type": "string", "description": "INN / generic or program name" },
        "brandNames": { "type": "array", "items": { "type": "string" } },
        "developer": { "type": "string" },
        "class": {
          "type": "string",
          "enum": [
            "vaccine",
            "antiviral_small_molecule",
            "monoclonal_antibody",
            "polyclonal_immune_globulin",
            "immunomodulator",
            "other"
          ]
        },

        "vaccine": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "platform": {
              "type": "string",
              "enum": [
                "live_attenuated", "inactivated_whole", "split_or_subunit", "recombinant_protein",
                "virus_like_particle", "viral_vector_replicating", "viral_vector_non_replicating",
                "mrna", "self_amplifying_rna", "dna", "other"
              ]
            },
            "antigen": { "type": "string" },
            "valency": { "type": "string" },
            "adjuvant": { "type": "string" },
            "route": { "type": "string" }
          }
        },

        "antiviral": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "mechanismClass": {
              "type": "string",
              "enum": [
                "nucleoside_nucleotide_analogue", "non_nucleoside_polymerase_inhibitor",
                "reverse_transcriptase_inhibitor", "protease_inhibitor", "integrase_inhibitor",
                "neuraminidase_inhibitor", "cap_dependent_endonuclease_inhibitor",
                "entry_or_fusion_inhibitor", "attachment_inhibitor", "capsid_inhibitor",
                "uncoating_or_m2_inhibitor", "ns5a_inhibitor", "terminase_inhibitor",
                "helicase_primase_inhibitor", "other", "unknown"
              ]
            },
            "molecularTarget": { "type": "string", "description": "e.g. 'RdRp (nsp12)', 'NS3/4A protease', 'PA endonuclease'" },
            "route": { "type": "string" },
            "rxcui": { "type": "string" },
            "unii": { "type": "string" },
            "chemblId": { "type": "string", "pattern": "^CHEMBL\\d+$" },
            "resistance": { "type": "array", "items": { "$ref": "#/$defs/sourcedTerm" } }
          }
        },

        "antibody": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "target": { "type": "string", "description": "Antigen/epitope, e.g. 'RSV F protein site Ø'" },
            "halfLifeExtended": { "type": "boolean" },
            "route": { "type": "string" }
          }
        },

        "indications": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/indication" } },

        "relatedPages": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "vaccinePage": { "type": ["string", "null"] },
            "pipelinePage": { "type": ["string", "null"], "description": "pipeline/*.html if one exists" },
            "openpvDrugPage": { "type": ["string", "null"] }
          }
        },
        "lastVerified": { "$ref": "#/$defs/isoDate" },
        "notes": { "type": "string" }
      },
      "allOf": [
        { "if": { "properties": { "class": { "const": "vaccine" } } }, "then": { "required": ["vaccine"] } },
        { "if": { "properties": { "class": { "const": "antiviral_small_molecule" } } }, "then": { "required": ["antiviral"] } },
        { "if": { "properties": { "class": { "const": "monoclonal_antibody" } } }, "then": { "required": ["antibody"] } }
      ]
    },

    "estimate": {
      "type": "object",
      "description": "One quoted figure. Same philosophy as disease-risk: verbatim, on the source's own scale, never recomputed or pooled.",
      "required": ["estimateId", "virusId", "category", "metric", "valueText", "sourceRef", "lastVerified"],
      "additionalProperties": false,
      "properties": {
        "estimateId": { "type": "string" },
        "virusId": { "$ref": "#/$defs/slug" },
        "diseaseName": { "type": "string" },
        "category": {
          "type": "string",
          "enum": ["burden", "severity", "transmissibility", "post_acute", "efficacy", "effectiveness", "safety"],
          "description": "burden/severity/transmissibility/post_acute describe the virus; efficacy/effectiveness/safety require countermeasureId"
        },
        "metric": {
          "type": "string",
          "enum": [
            "annual_cases", "annual_deaths", "incidence_rate", "prevalence", "seroprevalence",
            "dalys", "case_fatality_ratio", "infection_fatality_ratio", "hospitalization_ratio",
            "icu_ratio", "r0", "re", "incubation_period", "serial_interval", "attack_rate",
            "sequela_risk", "economic_cost",
            "vaccine_efficacy", "vaccine_effectiveness", "treatment_effect", "prophylaxis_efficacy",
            "adverse_event_rate", "other"
          ]
        },
        "valueText": { "type": "string", "description": "The figure exactly as written in the source, including CI and units" },
        "valueNumeric": {
          "type": "object",
          "description": "Optional machine-readable copy. Fill ONLY with numbers that appear in the quote; never derive.",
          "additionalProperties": false,
          "properties": {
            "point": { "type": "number" },
            "low": { "type": "number" },
            "high": { "type": "number" },
            "intervalType": { "type": "string", "enum": ["95CI", "UI", "range", "IQR", "other"] },
            "unit": { "type": "string" }
          }
        },
        "picos": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "population": { "type": "string" },
            "intervention": { "type": "string" },
            "comparator": { "type": "string" },
            "outcome": { "type": "string" },
            "studyDesign": {
              "type": "string",
              "enum": ["rct", "meta_analysis", "systematic_review", "cohort", "case_control", "test_negative", "surveillance", "modelling", "case_series", "outbreak_investigation", "other"]
            }
          }
        },
        "geography": { "type": "string", "description": "ISO country code(s), WHO region, or 'global'" },
        "period": { "type": "string" },
        "countermeasureId": { "$ref": "#/$defs/slug" },
        "dataQualityGrade": { "type": "string", "enum": ["A", "B", "C", "D"] },
        "sourceRef": {
          "allOf": [
            { "$ref": "#/$defs/sourceRef" },
            { "required": ["sourceId", "quote"] }
          ]
        },
        "lastVerified": { "$ref": "#/$defs/isoDate" }
      },
      "allOf": [
        {
          "if": { "properties": { "category": { "enum": ["efficacy", "effectiveness", "safety"] } } },
          "then": { "required": ["countermeasureId", "picos"] }
        }
      ]
    }
  }
}
