{
  "title": "OECD TG 442D facts against the DisMech and NAMO schemas",
  "generated": "2026-11-02",
  "repository": "https://github.com/monarch-initiative/dismech",
  "scope": "For each fact stated by OECD Test Guideline 442D about a test method, whether DisMech and NAMO have a slot able to hold it. Facts were read from the General Introduction and from each appendix's Initial Considerations and Principle of the Test sections; the procedural, data-and-reporting and prediction-model sections were out of scope. Slot names were read from each schema at the commit recorded below. Verdicts are a judgement about fit, not a validation result: nothing was written to either schema or loaded against it.",
  "markdown_companion": "oecd-tg442d-schema-coverage-2026-11-02.md",
  "related_artifacts": [
    "nam-schema-elements.md",
    "namo-vocabulary-gaps-2026-10-13.md"
  ],
  "source_document": {
    "guideline": "OECD TG 442D",
    "title": "In Vitro Skin Sensitisation: Assays addressing the Adverse Outcome Pathway Key Event on Keratinocyte activation",
    "adopted": "2026-07-02",
    "doi": "10.1787/9789264229822-en",
    "oecd_section": "Section 4, Health effects",
    "methods_described": [
      "KeratinoSens™",
      "LuSens",
      "EpiSensA",
      "Epi2SensA",
      "α-Sens®"
    ]
  },
  "schema_versions": {
    "dismech": {
      "commit": "aef740d",
      "date": "2026-10-31",
      "schema_file": "src/dismech/schema/dismech.yaml"
    },
    "namo": {
      "commit": "0a743c5",
      "date": "2026-08-01",
      "schema_file": "src/namo/schema/namo.yaml"
    }
  },
  "verdict_values": {
    "FIT": "A slot exists whose range and documented purpose fit this fact.",
    "PARTIAL": "A slot exists but the fit is partial: wrong granularity, free text where structure is wanted, or a slot documented for another use.",
    "ABSENT": "No slot; the fact can only be carried as prose, or not at all."
  },
  "groups": {
    "identity": "What the method is.",
    "biology": "The biological system and the pathway or genes observed.",
    "mechanism_linkage": "How the method connects to the mechanism it measures, and what it misses.",
    "quantitative": "Numbers the guideline states: cut-offs, viability limits, performance.",
    "regulatory_standing": "What makes the method regulatorily usable rather than merely described."
  },
  "rows": [
    {
      "id": "method-name",
      "group": "identity",
      "fact": "Method name",
      "dismech_slot": "name",
      "dismech_verdict": "FIT",
      "namo_slot": "NamedThing.name",
      "namo_verdict": "FIT"
    },
    {
      "id": "cell-line-derivation",
      "group": "biology",
      "fact": "Cell line and its derivation",
      "example": "Immortalised adherent cell line derived from human keratinocytes; PHK 16-0b for α-Sens®",
      "dismech_slot": "cell_types, cell_source",
      "dismech_verdict": "FIT",
      "namo_slot": "CellularSystem.cell_types, CellularSystem.cell_source, CellLineModel.passage_range, CellLineModel.authentication_method",
      "namo_verdict": "FIT"
    },
    {
      "id": "model-category",
      "group": "identity",
      "fact": "Model category: 2D line versus reconstructed human epidermis",
      "dismech_slot": "experimental_model_type",
      "dismech_verdict": "PARTIAL",
      "dismech_note": "ExperimentalModelTypeEnum has no value for reconstructed human epidermis, so EpiSensA and Epi2SensA both land on OTHER.",
      "namo_slot": "class hierarchy (CellLineModel vs ThreeDCellCulture), biological_organization_level, complexity_level",
      "namo_verdict": "FIT"
    },
    {
      "id": "tissue-model-product",
      "group": "biology",
      "fact": "Tissue model product identity",
      "example": "LabCyte EPI-MODEL24 (EpiSensA); EpiDerm™ EPI-200 (Epi2SensA)",
      "dismech_slot": "culture_system, tissue_term",
      "dismech_verdict": "PARTIAL",
      "dismech_note": "culture_system is free text, which the legend grades as a partial fit, and tissue_term binds UBERON, which names a tissue rather than a commercial reconstructed-epidermis product.",
      "namo_slot": "ThreeDCellCulture.three_d_architecture, ThreeDCellCulture.matrix_composition",
      "namo_verdict": "PARTIAL",
      "namo_note": "No slot for a commercial model product identity."
    },
    {
      "id": "sensing-pathway",
      "group": "biology",
      "fact": "Sensing pathway",
      "example": "Keap1 dissociation from Nrf2, activating ARE-dependent genes",
      "dismech_slot": "ExperimentalReadout.biological_processes (GO-bound)",
      "dismech_verdict": "FIT",
      "namo_slot": "Pathway.pathway_database, Pathway.pathway_id",
      "namo_verdict": "FIT"
    },
    {
      "id": "marker-genes",
      "group": "biology",
      "fact": "Marker genes quantified",
      "example": "ATF3, IL-8, GCLM, DNAJB4 by RT-qPCR",
      "dismech_slot": "ExperimentalReadout.biomarker_term",
      "dismech_verdict": "PARTIAL",
      "dismech_note": "BiomarkerTerm admits NCIT gene products and imposes no hierarchy constraint, so a readout can name a marker gene -- but as an NCIT biomarker, not as an HGNC gene the way gene_term does elsewhere in the schema, and with nowhere to record the fold-induction value or its cut-off. TG 442D paragraph 2 describes two of its five methods as based on gene expression quantification (EpiSensA, Epi2SensA); the other three report an ARE-driven luciferase reporter, an engineered construct rather than an endogenous transcript.",
      "namo_slot": "Gene.gene_symbol, Gene.ensembl_id, Gene.entrez_id, Gene.fold_change, Gene.p_value",
      "namo_verdict": "FIT"
    },
    {
      "id": "mechanism-measured",
      "group": "mechanism_linkage",
      "fact": "Which mechanism the method measures",
      "dismech_slot": "modeled_mechanisms[].target",
      "dismech_verdict": "FIT",
      "dismech_note": "Resolves to a named pathophysiology node in the same entry.",
      "namo_slot": "ModelsRelationship.biological_system_modeled",
      "namo_verdict": "PARTIAL",
      "namo_note": "Points at a BiologicalSystem, not at a pathograph node."
    },
    {
      "id": "limitations",
      "group": "mechanism_linkage",
      "fact": "Stated limitations of the method",
      "example": "Limited metabolic capability of the cell line, hence under-calling of pro-haptens",
      "dismech_slot": "ModelMechanismLink.limitations, ModelMechanismLink.divergences",
      "dismech_verdict": "FIT",
      "dismech_note": "divergences types the caveat (BOUNDARY_OMISSION, PROXY_QUANTITY) rather than leaving it as prose.",
      "namo_slot": "StructuredConcordanceResult",
      "namo_verdict": "PARTIAL",
      "namo_note": "Quantifies how well a model matches its reference, but carries no typed caveat."
    },
    {
      "id": "reproducibility",
      "group": "quantitative",
      "fact": "Inter- and intra-laboratory reproducibility",
      "example": "Order of 85% within and between laboratories for KeratinoSens™",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": "Reproducibility",
      "namo_verdict": "FIT"
    },
    {
      "id": "performance-vs-reference",
      "group": "quantitative",
      "fact": "Performance against the animal reference method",
      "example": "KeratinoSens™ accuracy 77% (155/201), sensitivity 78% (71/91), specificity 76% (84/110) against LLNA",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": "ModelPerformance.accuracy, ModelPerformance.sensitivity, ModelPerformance.specificity, ModelPerformance.auc",
      "namo_verdict": "FIT",
      "namo_note": "No slot records which reference method the figures were computed against."
    },
    {
      "id": "numeric-cutoffs",
      "group": "quantitative",
      "fact": "Positive-call cut-offs",
      "example": "EC1.5 for KeratinoSens™; ATF3 15-fold, GCLM 2-fold, DNAJB4 2-fold, IL-8 4-fold for EpiSensA",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": "QualityControlMetric.threshold, FunctionalAssay.reference_value",
      "namo_verdict": "PARTIAL",
      "namo_note": "Range fits; documented purpose names a different use."
    },
    {
      "id": "viability-constraint",
      "group": "quantitative",
      "fact": "Cell-viability constraint on a positive call",
      "example": "Viability ≥ 80% for EpiSensA, ≥ 60% for Epi2SensA; IC30 and IC50 definitions",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": "QualityControlMetric.threshold, FunctionalAssay.reference_value",
      "namo_verdict": "PARTIAL",
      "namo_note": "Range fits; documented purpose names a different use."
    },
    {
      "id": "readout-direction",
      "group": "quantitative",
      "fact": "Direction of the readout",
      "dismech_slot": "ExperimentalReadout.direction",
      "dismech_verdict": "FIT",
      "namo_slot": "FunctionalAssay.assay_result, Gene.fold_change",
      "namo_verdict": "PARTIAL",
      "namo_note": "No direction enum; direction is implicit in a signed value."
    },
    {
      "id": "guideline-identity",
      "group": "regulatory_standing",
      "fact": "Test Guideline number and appendix",
      "example": "TG 442D, Appendix IA",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "dismech_note": "publication could hold the guideline's DOI, but nothing asserts that a method is one of five described by that guideline.",
      "namo_slot": "Reference.id, Reference.title, Reference.year, Reference.url",
      "namo_verdict": "ABSENT",
      "namo_note": "A Test Guideline can be cited as a reference, but there is no class for one."
    },
    {
      "id": "aop-key-event",
      "group": "regulatory_standing",
      "fact": "AOP and key event addressed",
      "example": "AOP 40, key event 2: keratinocyte activation",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": null,
      "namo_verdict": "ABSENT",
      "namo_note": "AOPs are named in the schema's own prose but have no class or slot."
    },
    {
      "id": "reporter-construct",
      "group": "biology",
      "fact": "Reporter construct",
      "example": "Luciferase under the ARE of the human AKR1C2 gene; α-Sens® uses Firefly Luc+ plus a Renilla luciferase driven by a thymidine kinase promoter for viability",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": null,
      "namo_verdict": "ABSENT"
    },
    {
      "id": "validation-route",
      "group": "regulatory_standing",
      "fact": "Validation route",
      "example": "Validated reference method (KeratinoSens™ for the luciferase family, EpiSensA for the RT-qPCR family) versus Performance-Standards-based validation (LuSens, Epi2SensA, α-Sens®)",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": null,
      "namo_verdict": "ABSENT"
    },
    {
      "id": "approving-body",
      "group": "regulatory_standing",
      "fact": "Approving body and its role",
      "example": "EURL ECVAM recommendation with an ESAC opinion; JaCVAM peer review; EpiSensA reviewed by JaCVAM in cooperation with ICATM",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": null,
      "namo_verdict": "ABSENT",
      "namo_note": "OECD, ICCVAM and ESTIV are named in the schema's description prose; no slot or enum carries them."
    },
    {
      "id": "regulatory-use",
      "group": "regulatory_standing",
      "fact": "Permitted regulatory use",
      "example": "Supports discrimination of UN GHS Category 1 from non-sensitisers within an IATA; cannot sub-categorise 1A/1B or predict potency; combined through TG 497",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": "Study.context_of_use",
      "namo_verdict": "PARTIAL",
      "namo_note": "Free text on a Study, not a structured claim about the method."
    },
    {
      "id": "mutual-acceptance-of-data",
      "group": "regulatory_standing",
      "fact": "Mutual Acceptance of Data status",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": null,
      "namo_verdict": "ABSENT"
    },
    {
      "id": "proficiency-substances",
      "group": "regulatory_standing",
      "fact": "Proficiency substances a laboratory must run before routine use",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "namo_slot": null,
      "namo_verdict": "ABSENT"
    },
    {
      "id": "cited-comparators",
      "group": "regulatory_standing",
      "fact": "Methods cited as comparators but not described",
      "example": "GPMT and Buehler (TG 406), LLNA (TG 429), LLNA:DA (TG 442A), LLNA:BrdU-ELISA and BrdU-FCM (TG 442B)",
      "dismech_slot": null,
      "dismech_verdict": "ABSENT",
      "dismech_note": "animal_models requires species and genotype and asserts a model of the disease; a method merely referenced by a guideline is a different claim.",
      "namo_slot": null,
      "namo_verdict": "ABSENT"
    }
  ],
  "summary": {
    "rows_total": 22,
    "dismech": {
      "FIT": 6,
      "PARTIAL": 3,
      "ABSENT": 13
    },
    "namo": {
      "FIT": 7,
      "PARTIAL": 7,
      "ABSENT": 8
    },
    "absent_in_both": [
      "aop-key-event",
      "approving-body",
      "cited-comparators",
      "guideline-identity",
      "mutual-acceptance-of-data",
      "proficiency-substances",
      "reporter-construct",
      "validation-route"
    ],
    "findings": [
      "The schemas are complementary rather than redundant: NAMO holds the performance, reproducibility and gene-expression facts DisMech cannot, and DisMech holds the pathograph linkage and typed divergences NAMO cannot.",
      "Neither schema holds a method's regulatory standing. Eight rows are absent in both schemas, and seven of them belong to that group: guideline identity, AOP key event, validation route, approving body, Mutual Acceptance of Data, proficiency substances and cited comparators. The eighth, the reporter construct, is a biology fact.",
      "Two DisMech gaps are narrow and separately fixable: no reconstructed-human-epidermis value in ExperimentalModelTypeEnum, and no gene descriptor on a readout.",
      "NAMO carries OECD only as a CURIE prefix and in two example values. There is no Test Guideline class, no acceptance or validation-status enum, and no approving-body slot."
    ]
  },
  "caveats": [
    "One Test Guideline, taken as a worked case. TG 442C and 442E are built the same way, but a guideline from another endpoint area may carry facts this inventory does not anticipate.",
    "A PARTIAL verdict in the NAMO column often means a slot's range fits while its documented purpose names a different use, such as QualityControlMetric.threshold standing in for an EC1.5 cut-off. Those are a stretch rather than a fit.",
    "Verdict counts are a census of this table, not of either schema. They depend on how finely the guideline's facts were split into rows.",
    "This records what the schemas can hold. It does not address which repository should hold it, which remains an open question."
  ]
}
