{
  "_meta": {
    "artefact": "Reagent — worked example dataset for the proposed schema",
    "created": "2026-08-05",
    "purpose": "Design-review fixture. Proves the schema can hold a real screening case end to end: groups as graphs, descriptor sets at a named level of theory, per-atom and molecular descriptors, measured properties with per-value provenance, molecules as reduced graphs over group records, graph metrics, and a fitted model with its training provenance.",
    "HONESTY": "Molecule identities, functional-group decompositions and SMARTS are real chemistry. NUMERIC VALUES ARE ILLUSTRATIVE MAGNITUDES ONLY — ozone rate constants are order-of-magnitude figures from the ozonation literature and DFT descriptors are plausible values, NOT curated measurements or computed results. Every number here must be replaced by a curated value carrying its own source_doi (properties) or an actual converged run (descriptors) before any of it enters a real world. This file is a schema fixture, never a seed.",
    "not_a_seed": "Per the platform no-seeding rule this file is never loaded into a database. Real records are minted through service verbs."
  },

  "rg_descriptor_type": [
    { "code": "homo_energy",      "label": "HOMO energy",              "unit": "eV",       "scope": "molecular", "family": "frontier_orbital",  "derived_from": null,                  "definition": "Energy of the highest occupied molecular orbital." },
    { "code": "lumo_energy",      "label": "LUMO energy",              "unit": "eV",       "scope": "molecular", "family": "frontier_orbital",  "derived_from": null,                  "definition": "Energy of the lowest unoccupied molecular orbital." },
    { "code": "homo_lumo_gap",    "label": "HOMO-LUMO gap",            "unit": "eV",       "scope": "molecular", "family": "frontier_orbital",  "derived_from": ["homo_energy","lumo_energy"], "definition": "LUMO minus HOMO. Colinear by construction." },
    { "code": "chemical_potential","label": "Chemical potential",      "unit": "eV",       "scope": "molecular", "family": "reactivity_index",  "derived_from": ["homo_energy","lumo_energy"], "definition": "(HOMO+LUMO)/2. Conceptual DFT." },
    { "code": "hardness",         "label": "Chemical hardness",        "unit": "eV",       "scope": "molecular", "family": "reactivity_index",  "derived_from": ["homo_energy","lumo_energy"], "definition": "(LUMO-HOMO)/2. Colinear with the gap by construction." },
    { "code": "electrophilicity", "label": "Electrophilicity index",   "unit": "eV",       "scope": "molecular", "family": "reactivity_index",  "derived_from": ["chemical_potential","hardness"], "definition": "mu^2/(2*eta). Second-order derived — two degrees of freedom wearing a third name." },
    { "code": "dipole_moment",    "label": "Dipole moment",            "unit": "D",        "scope": "molecular", "family": "electrostatic",     "derived_from": null,                  "definition": "Magnitude of the molecular dipole." },
    { "code": "esp_charge",       "label": "ESP partial charge",       "unit": "e",        "scope": "atomic",    "family": "electrostatic",     "derived_from": null,                  "definition": "Atomic partial charge fitted to the electrostatic potential." },
    { "code": "fukui_minus",      "label": "Fukui f-",                 "unit": "e",        "scope": "atomic",    "family": "site_reactivity",   "derived_from": null,                  "definition": "Density change on electron removal. Susceptibility to electrophilic attack." },
    { "code": "fukui_plus",       "label": "Fukui f+",                 "unit": "e",        "scope": "atomic",    "family": "site_reactivity",   "derived_from": null,                  "definition": "Density change on electron addition. Susceptibility to nucleophilic attack." },
    { "code": "max_esp_neg",      "label": "Most negative ESP",        "unit": "kcal/mol", "scope": "molecular", "family": "electrostatic",     "derived_from": null,                  "definition": "Minimum of the ESP on the 0.001 au isosurface." }
  ],

  "_note_derived_from": "derived_from makes the colinearity rule machine-checkable: a model quoting a descriptor together with anything it derives from is flagged before it is fitted, not after review.",

  "rg_property_type": [
    { "code": "k_ozone",  "label": "Ozone second-order rate constant",           "unit": "M^-1 s^-1", "log_scale": true,  "definition": "Second-order rate constant for reaction with molecular ozone." },
    { "code": "k_oh",     "label": "Hydroxyl radical rate constant",             "unit": "M^-1 s^-1", "log_scale": true,  "definition": "Second-order rate constant for reaction with the hydroxyl radical." },
    { "code": "log_kow",  "label": "Octanol-water partition coefficient",        "unit": "log units", "log_scale": false, "definition": "Hydrophobicity; controls partitioning in a treatment train." },
    { "code": "pka",      "label": "Acid dissociation constant",                 "unit": "pH units",  "log_scale": false, "definition": "Determines the speciation the sorbent or oxidant actually meets." },
    { "code": "log_kd",   "label": "Solid-water distribution coefficient",       "unit": "log L/kg",  "log_scale": false, "definition": "Adsorption affinity onto a named sorbent; requires sorbent_id." }
  ],

  "rg_graph_metric_type": [
    { "code": "n_nodes",        "label": "Group count",            "size_correlated": true,  "definition": "Number of functional-group nodes in the reduced graph." },
    { "code": "n_edges",        "label": "Group bond count",       "size_correlated": true,  "definition": "Number of edges in the reduced graph." },
    { "code": "wiener_index",   "label": "Wiener index (reduced)", "size_correlated": true,  "definition": "Sum of shortest-path lengths over all node pairs. Strongly size-tracking." },
    { "code": "randic_index",   "label": "Randic index (reduced)", "size_correlated": true,  "definition": "Sum over edges of 1/sqrt(deg_a*deg_b)." },
    { "code": "graph_diameter", "label": "Diameter",               "size_correlated": true,  "definition": "Longest shortest-path in the reduced graph." },
    { "code": "mean_degree",    "label": "Mean node degree",       "size_correlated": false, "definition": "Branching density, largely size-independent." },
    { "code": "cyclomatic",     "label": "Cyclomatic number",      "size_correlated": false, "definition": "Independent cycles: edges - nodes + components." },
    { "code": "donor_acceptor_separation", "label": "Donor-acceptor separation", "size_correlated": false, "definition": "Shortest reduced-graph path between the most electron-rich and most electron-poor node. Chemistry-motivated, not size-driven." }
  ],

  "_note_size_correlated": "size_correlated flags the severe trap: a metric marked true may not enter a model unless the fit demonstrably survives controlling for molecular size. The schema carries the methodological guard.",

  "rg_group": [
    {
      "code": "COOH", "name": "Carboxyl", "smarts": "[CX3](=O)[OX2H1]", "smiles_fragment": "C(=O)O",
      "group_class": "acidic", "n_heavy_atoms": 3, "attachment_points": 1,
      "notes": "Deprotonates near pH 4; the carboxylate form is the species present at treatment pH.",
      "atoms": [
        { "idx": 0, "element": "C", "aromatic": false, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 1, "element": "O", "aromatic": false, "formal_charge": 0, "is_attachment_point": false },
        { "idx": 2, "element": "O", "aromatic": false, "formal_charge": 0, "is_attachment_point": false }
      ],
      "bonds": [
        { "atom_a": 0, "atom_b": 1, "order": "double" },
        { "atom_a": 0, "atom_b": 2, "order": "single" }
      ]
    },
    {
      "code": "COO-", "name": "Carboxylate", "smarts": "[CX3](=O)[OX1-]", "smiles_fragment": "C(=O)[O-]",
      "group_class": "anionic", "n_heavy_atoms": 3, "attachment_points": 1,
      "notes": "Distinct group record, not a flag on COOH: its descriptor set differs materially and requires diffuse basis functions.",
      "atoms": [
        { "idx": 0, "element": "C", "aromatic": false, "formal_charge": 0,  "is_attachment_point": true },
        { "idx": 1, "element": "O", "aromatic": false, "formal_charge": 0,  "is_attachment_point": false },
        { "idx": 2, "element": "O", "aromatic": false, "formal_charge": -1, "is_attachment_point": false }
      ],
      "bonds": [
        { "atom_a": 0, "atom_b": 1, "order": "double" },
        { "atom_a": 0, "atom_b": 2, "order": "single" }
      ]
    },
    {
      "code": "ArOH", "name": "Phenolic hydroxyl", "smarts": "[OX2H][c]", "smiles_fragment": "Oc",
      "group_class": "electron_donating", "n_heavy_atoms": 1, "attachment_points": 1,
      "notes": "Strongly activating; raises the HOMO and makes the attached ring highly ozone-reactive.",
      "atoms": [ { "idx": 0, "element": "O", "aromatic": false, "formal_charge": 0, "is_attachment_point": true } ],
      "bonds": []
    },
    {
      "code": "ArNH2", "name": "Aromatic primary amine (aniline)", "smarts": "[NX3;H2][c]", "smiles_fragment": "Nc",
      "group_class": "electron_donating", "n_heavy_atoms": 1, "attachment_points": 1,
      "notes": "The single most ozone-reactive common group; lone pair conjugates into the ring.",
      "atoms": [ { "idx": 0, "element": "N", "aromatic": false, "formal_charge": 0, "is_attachment_point": true } ],
      "bonds": []
    },
    {
      "code": "ArNH", "name": "Secondary aryl amine", "smarts": "[NX3;H1]([c])[c,C]", "smiles_fragment": "N",
      "group_class": "electron_donating", "n_heavy_atoms": 1, "attachment_points": 2,
      "notes": "Two attachment points: it is a linker node in the reduced graph, not a terminal one.",
      "atoms": [ { "idx": 0, "element": "N", "aromatic": false, "formal_charge": 0, "is_attachment_point": true } ],
      "bonds": []
    },
    {
      "code": "SO2NH", "name": "Sulfonamide", "smarts": "[SX4](=O)(=O)[NX3]", "smiles_fragment": "S(=O)(=O)N",
      "group_class": "electron_withdrawing", "n_heavy_atoms": 4, "attachment_points": 2,
      "notes": "Defines the sulfonamide antibiotic class; weakly acidic NH.",
      "atoms": [
        { "idx": 0, "element": "S", "aromatic": false, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 1, "element": "O", "aromatic": false, "formal_charge": 0, "is_attachment_point": false },
        { "idx": 2, "element": "O", "aromatic": false, "formal_charge": 0, "is_attachment_point": false },
        { "idx": 3, "element": "N", "aromatic": false, "formal_charge": 0, "is_attachment_point": true }
      ],
      "bonds": [
        { "atom_a": 0, "atom_b": 1, "order": "double" },
        { "atom_a": 0, "atom_b": 2, "order": "double" },
        { "atom_a": 0, "atom_b": 3, "order": "single" }
      ]
    },
    {
      "code": "CONH2", "name": "Primary amide", "smarts": "[CX3](=O)[NX3H2]", "smiles_fragment": "C(=O)N",
      "group_class": "neutral_polar", "n_heavy_atoms": 3, "attachment_points": 1,
      "notes": "Hydrolysis-resistant, which is why amide-bearing CECs persist.",
      "atoms": [
        { "idx": 0, "element": "C", "aromatic": false, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 1, "element": "O", "aromatic": false, "formal_charge": 0, "is_attachment_point": false },
        { "idx": 2, "element": "N", "aromatic": false, "formal_charge": 0, "is_attachment_point": false }
      ],
      "bonds": [
        { "atom_a": 0, "atom_b": 1, "order": "double" },
        { "atom_a": 0, "atom_b": 2, "order": "single" }
      ]
    },
    {
      "code": "PhR", "name": "Benzene ring", "smarts": "c1ccccc1", "smiles_fragment": "c1ccccc1",
      "group_class": "aromatic", "n_heavy_atoms": 6, "attachment_points": 6,
      "notes": "Scaffold node. Its ozone reactivity is set almost entirely by its substituents, which is exactly what the reduced graph encodes.",
      "atoms": [
        { "idx": 0, "element": "C", "aromatic": true, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 1, "element": "C", "aromatic": true, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 2, "element": "C", "aromatic": true, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 3, "element": "C", "aromatic": true, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 4, "element": "C", "aromatic": true, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 5, "element": "C", "aromatic": true, "formal_charge": 0, "is_attachment_point": true }
      ],
      "bonds": [
        { "atom_a": 0, "atom_b": 1, "order": "aromatic" }, { "atom_a": 1, "atom_b": 2, "order": "aromatic" },
        { "atom_a": 2, "atom_b": 3, "order": "aromatic" }, { "atom_a": 3, "atom_b": 4, "order": "aromatic" },
        { "atom_a": 4, "atom_b": 5, "order": "aromatic" }, { "atom_a": 5, "atom_b": 0, "order": "aromatic" }
      ]
    },
    {
      "code": "ArCl", "name": "Aryl chloride", "smarts": "[Cl][c]", "smiles_fragment": "Clc",
      "group_class": "electron_withdrawing", "n_heavy_atoms": 1, "attachment_points": 1,
      "notes": "Deactivates the ring toward ozone; also a persistence marker.",
      "atoms": [ { "idx": 0, "element": "Cl", "aromatic": false, "formal_charge": 0, "is_attachment_point": true } ],
      "bonds": []
    },
    {
      "code": "CF3", "name": "Trifluoromethyl / perfluoroalkyl terminus", "smarts": "[CX4]([F])([F])[F]", "smiles_fragment": "C(F)(F)F",
      "group_class": "perfluoro", "n_heavy_atoms": 4, "attachment_points": 1,
      "notes": "C-F is the strongest single bond in organic chemistry. Ozone does not touch it; this is the negative control the model must get right.",
      "atoms": [
        { "idx": 0, "element": "C", "aromatic": false, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 1, "element": "F", "aromatic": false, "formal_charge": 0, "is_attachment_point": false },
        { "idx": 2, "element": "F", "aromatic": false, "formal_charge": 0, "is_attachment_point": false },
        { "idx": 3, "element": "F", "aromatic": false, "formal_charge": 0, "is_attachment_point": false }
      ],
      "bonds": [
        { "atom_a": 0, "atom_b": 1, "order": "single" },
        { "atom_a": 0, "atom_b": 2, "order": "single" },
        { "atom_a": 0, "atom_b": 3, "order": "single" }
      ]
    },
    {
      "code": "CF2", "name": "Perfluoromethylene", "smarts": "[CX4]([F])([F])", "smiles_fragment": "C(F)(F)",
      "group_class": "perfluoro", "n_heavy_atoms": 3, "attachment_points": 2,
      "notes": "Chain linker node in PFAS reduced graphs.",
      "atoms": [
        { "idx": 0, "element": "C", "aromatic": false, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 1, "element": "F", "aromatic": false, "formal_charge": 0, "is_attachment_point": false },
        { "idx": 2, "element": "F", "aromatic": false, "formal_charge": 0, "is_attachment_point": false }
      ],
      "bonds": [
        { "atom_a": 0, "atom_b": 1, "order": "single" },
        { "atom_a": 0, "atom_b": 2, "order": "single" }
      ]
    },
    {
      "code": "ISOX", "name": "Isoxazole ring", "smarts": "c1cc(no1)", "smiles_fragment": "c1ccno1",
      "group_class": "heteroaromatic", "n_heavy_atoms": 5, "attachment_points": 2,
      "notes": "Electron-poor heteroaromatic; the sulfamethoxazole tail.",
      "atoms": [
        { "idx": 0, "element": "C", "aromatic": true, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 1, "element": "C", "aromatic": true, "formal_charge": 0, "is_attachment_point": false },
        { "idx": 2, "element": "C", "aromatic": true, "formal_charge": 0, "is_attachment_point": true },
        { "idx": 3, "element": "N", "aromatic": true, "formal_charge": 0, "is_attachment_point": false },
        { "idx": 4, "element": "O", "aromatic": true, "formal_charge": 0, "is_attachment_point": false }
      ],
      "bonds": [
        { "atom_a": 0, "atom_b": 1, "order": "aromatic" }, { "atom_a": 1, "atom_b": 2, "order": "aromatic" },
        { "atom_a": 2, "atom_b": 3, "order": "aromatic" }, { "atom_a": 3, "atom_b": 4, "order": "aromatic" },
        { "atom_a": 4, "atom_b": 0, "order": "aromatic" }
      ]
    }
  ],

  "rg_method": [
    {
      "code": "gfn2-xtb",
      "label": "GFN2-xTB semi-empirical tight binding",
      "engine": "xtb",
      "tier": "screening",
      "level_of_theory": "GFN2-xTB",
      "basis_set": null,
      "solvent_model": "ALPB(water)",
      "typical_seconds_per_molecule": 3,
      "reference_doi": "10.1021/acs.jctc.8b01176",
      "notes": "The cheap tier. Sweeps the whole database; never mixed into a fit with DFT-tier records."
    },
    {
      "code": "b3lyp-d3-def2tzvp-smd",
      "label": "B3LYP-D3(BJ)/def2-TZVP, SMD water",
      "engine": "psi4",
      "tier": "production",
      "level_of_theory": "B3LYP-D3(BJ)",
      "basis_set": "def2-TZVP",
      "solvent_model": "SMD(water)",
      "typical_seconds_per_molecule": 2400,
      "reference_doi": null,
      "notes": "Dispersion-corrected and solvated: the two defects most commonly found in the published adsorption literature, corrected by construction."
    },
    {
      "code": "wb97xd-6-31+gd-smd",
      "label": "wB97X-D/6-31+G(d), SMD water",
      "engine": "psi4",
      "tier": "production_anion",
      "level_of_theory": "wB97X-D",
      "basis_set": "6-31+G(d)",
      "solvent_model": "SMD(water)",
      "typical_seconds_per_molecule": 1800,
      "reference_doi": null,
      "notes": "Diffuse functions for anionic groups (carboxylate). Records computed here are NOT comparable with the def2-TZVP set."
    }
  ],

  "rg_descriptor_set": [
    { "set_ref": "ds-cooh-b3lyp",  "group_code": "COOH",  "method_code": "b3lyp-d3-def2tzvp-smd", "protonation_state": "neutral", "converged": true, "n_imaginary_freq": 0, "provenance": "computed_here", "source_doi": null, "status": "APPROVED", "computed_at": "2026-08-05" },
    { "set_ref": "ds-coo-wb97",    "group_code": "COO-",  "method_code": "wb97xd-6-31+gd-smd",     "protonation_state": "anion",   "converged": true, "n_imaginary_freq": 0, "provenance": "computed_here", "source_doi": null, "status": "APPROVED", "computed_at": "2026-08-05" },
    { "set_ref": "ds-aroh-b3lyp",  "group_code": "ArOH",  "method_code": "b3lyp-d3-def2tzvp-smd", "protonation_state": "neutral", "converged": true, "n_imaginary_freq": 0, "provenance": "computed_here", "source_doi": null, "status": "APPROVED", "computed_at": "2026-08-05" },
    { "set_ref": "ds-arnh2-b3lyp", "group_code": "ArNH2", "method_code": "b3lyp-d3-def2tzvp-smd", "protonation_state": "neutral", "converged": true, "n_imaginary_freq": 0, "provenance": "computed_here", "source_doi": null, "status": "APPROVED", "computed_at": "2026-08-05" },
    { "set_ref": "ds-cf3-b3lyp",   "group_code": "CF3",   "method_code": "b3lyp-d3-def2tzvp-smd", "protonation_state": "neutral", "converged": true, "n_imaginary_freq": 0, "provenance": "computed_here", "source_doi": null, "status": "APPROVED", "computed_at": "2026-08-05" },
    { "set_ref": "ds-cooh-xtb",    "group_code": "COOH",  "method_code": "gfn2-xtb",              "protonation_state": "neutral", "converged": true, "n_imaginary_freq": null, "provenance": "computed_here", "source_doi": null, "status": "APPROVED", "computed_at": "2026-08-05" },
    { "set_ref": "ds-arnh2-qmugs", "group_code": "ArNH2", "method_code": "gfn2-xtb",              "protonation_state": "neutral", "converged": true, "n_imaginary_freq": null, "provenance": "imported_qmugs", "source_doi": "10.1038/s41597-022-01390-7", "status": "PROPOSED", "computed_at": "2026-08-05" }
  ],

  "_note_two_records_one_group": "COOH appears twice (ds-cooh-b3lyp, ds-cooh-xtb). Same group, different level of theory, different descriptor values, never comparable. This is the identity rule made concrete in rows.",

  "rg_descriptor": [
    { "set_ref": "ds-cooh-b3lyp",  "type_code": "homo_energy",   "atom_idx": null, "value": -7.42 },
    { "set_ref": "ds-cooh-b3lyp",  "type_code": "lumo_energy",   "atom_idx": null, "value": -0.91 },
    { "set_ref": "ds-cooh-b3lyp",  "type_code": "esp_charge",    "atom_idx": 1,    "value": -0.52 },
    { "set_ref": "ds-cooh-b3lyp",  "type_code": "esp_charge",    "atom_idx": 2,    "value": -0.61 },
    { "set_ref": "ds-cooh-b3lyp",  "type_code": "fukui_minus",   "atom_idx": 1,    "value": 0.19 },

    { "set_ref": "ds-coo-wb97",    "type_code": "homo_energy",   "atom_idx": null, "value": -5.88 },
    { "set_ref": "ds-coo-wb97",    "type_code": "lumo_energy",   "atom_idx": null, "value": 1.24 },
    { "set_ref": "ds-coo-wb97",    "type_code": "esp_charge",    "atom_idx": 1,    "value": -0.79 },
    { "set_ref": "ds-coo-wb97",    "type_code": "esp_charge",    "atom_idx": 2,    "value": -0.81 },

    { "set_ref": "ds-aroh-b3lyp",  "type_code": "homo_energy",   "atom_idx": null, "value": -5.94 },
    { "set_ref": "ds-aroh-b3lyp",  "type_code": "lumo_energy",   "atom_idx": null, "value": -0.38 },
    { "set_ref": "ds-aroh-b3lyp",  "type_code": "fukui_minus",   "atom_idx": 0,    "value": 0.31 },

    { "set_ref": "ds-arnh2-b3lyp", "type_code": "homo_energy",   "atom_idx": null, "value": -5.21 },
    { "set_ref": "ds-arnh2-b3lyp", "type_code": "lumo_energy",   "atom_idx": null, "value": -0.22 },
    { "set_ref": "ds-arnh2-b3lyp", "type_code": "fukui_minus",   "atom_idx": 0,    "value": 0.44 },

    { "set_ref": "ds-cf3-b3lyp",   "type_code": "homo_energy",   "atom_idx": null, "value": -9.83 },
    { "set_ref": "ds-cf3-b3lyp",   "type_code": "lumo_energy",   "atom_idx": null, "value": 0.61 },
    { "set_ref": "ds-cf3-b3lyp",   "type_code": "fukui_minus",   "atom_idx": 0,    "value": 0.02 },

    { "set_ref": "ds-cooh-xtb",    "type_code": "homo_energy",   "atom_idx": null, "value": -7.11 }
  ],

  "_note_atom_idx": "atom_idx is null for molecular descriptors and carries the group-local atom index for atomic ones (ESP charge, Fukui). One table serves both scopes; the descriptor type declares which is legal.",

  "rg_molecule": [
    { "code": "diclofenac",      "name": "Diclofenac",      "smiles": "OC(=O)Cc1ccccc1Nc1c(Cl)cccc1Cl", "formula": "C14H11Cl2NO2", "mw": 296.15, "cec_class": "pharmaceutical_nsaid" },
    { "code": "sulfamethoxazole","name": "Sulfamethoxazole","smiles": "Cc1cc(NS(=O)(=O)c2ccc(N)cc2)no1", "formula": "C10H11N3O3S", "mw": 253.28, "cec_class": "pharmaceutical_antibiotic" },
    { "code": "carbamazepine",   "name": "Carbamazepine",   "smiles": "NC(=O)N1c2ccccc2C=Cc2ccccc21",   "formula": "C15H12N2O",    "mw": 236.27, "cec_class": "pharmaceutical_anticonvulsant" },
    { "code": "bisphenol_a",     "name": "Bisphenol A",     "smiles": "CC(C)(c1ccc(O)cc1)c1ccc(O)cc1",  "formula": "C15H16O2",     "mw": 228.29, "cec_class": "industrial_edc" },
    { "code": "ibuprofen",       "name": "Ibuprofen",       "smiles": "CC(C)Cc1ccc(cc1)C(C)C(=O)O",     "formula": "C13H18O2",     "mw": 206.28, "cec_class": "pharmaceutical_nsaid" },
    { "code": "atrazine",        "name": "Atrazine",        "smiles": "CCNc1nc(Cl)nc(NC(C)C)n1",        "formula": "C8H14ClN5",    "mw": 215.68, "cec_class": "pesticide_triazine" },
    { "code": "pfoa",            "name": "PFOA",            "smiles": "OC(=O)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F", "formula": "C8HF15O2", "mw": 414.07, "cec_class": "pfas" }
  ],

  "rg_molecule_group": [
    { "molecule_code": "diclofenac", "node_idx": 0, "group_code": "COOH",  "atom_map": [0,1,2] },
    { "molecule_code": "diclofenac", "node_idx": 1, "group_code": "PhR",   "atom_map": [4,5,6,7,8,9] },
    { "molecule_code": "diclofenac", "node_idx": 2, "group_code": "ArNH",  "atom_map": [10] },
    { "molecule_code": "diclofenac", "node_idx": 3, "group_code": "PhR",   "atom_map": [11,12,14,15,16,17] },
    { "molecule_code": "diclofenac", "node_idx": 4, "group_code": "ArCl",  "atom_map": [13] },
    { "molecule_code": "diclofenac", "node_idx": 5, "group_code": "ArCl",  "atom_map": [18] },

    { "molecule_code": "sulfamethoxazole", "node_idx": 0, "group_code": "ArNH2", "atom_map": [15] },
    { "molecule_code": "sulfamethoxazole", "node_idx": 1, "group_code": "PhR",   "atom_map": [9,10,11,12,13,14] },
    { "molecule_code": "sulfamethoxazole", "node_idx": 2, "group_code": "SO2NH", "atom_map": [5,6,7,8] },
    { "molecule_code": "sulfamethoxazole", "node_idx": 3, "group_code": "ISOX",  "atom_map": [1,2,3,4,16] },

    { "molecule_code": "pfoa", "node_idx": 0, "group_code": "COOH", "atom_map": [0,1,2] },
    { "molecule_code": "pfoa", "node_idx": 1, "group_code": "CF2",  "atom_map": [3] },
    { "molecule_code": "pfoa", "node_idx": 2, "group_code": "CF2",  "atom_map": [4] },
    { "molecule_code": "pfoa", "node_idx": 3, "group_code": "CF2",  "atom_map": [5] },
    { "molecule_code": "pfoa", "node_idx": 4, "group_code": "CF2",  "atom_map": [6] },
    { "molecule_code": "pfoa", "node_idx": 5, "group_code": "CF2",  "atom_map": [7] },
    { "molecule_code": "pfoa", "node_idx": 6, "group_code": "CF2",  "atom_map": [8] },
    { "molecule_code": "pfoa", "node_idx": 7, "group_code": "CF3",  "atom_map": [9] },

    { "molecule_code": "bisphenol_a", "node_idx": 0, "group_code": "ArOH", "atom_map": [7] },
    { "molecule_code": "bisphenol_a", "node_idx": 1, "group_code": "PhR",  "atom_map": [3,4,5,6,8,9] },
    { "molecule_code": "bisphenol_a", "node_idx": 2, "group_code": "PhR",  "atom_map": [10,11,12,13,14,15] },
    { "molecule_code": "bisphenol_a", "node_idx": 3, "group_code": "ArOH", "atom_map": [16] }
  ],

  "rg_molecule_edge": [
    { "molecule_code": "diclofenac", "node_a": 0, "node_b": 1, "linker": "CH2", "path_length": 2 },
    { "molecule_code": "diclofenac", "node_a": 1, "node_b": 2, "linker": "direct", "path_length": 1 },
    { "molecule_code": "diclofenac", "node_a": 2, "node_b": 3, "linker": "direct", "path_length": 1 },
    { "molecule_code": "diclofenac", "node_a": 3, "node_b": 4, "linker": "direct", "path_length": 1 },
    { "molecule_code": "diclofenac", "node_a": 3, "node_b": 5, "linker": "direct", "path_length": 1 },

    { "molecule_code": "sulfamethoxazole", "node_a": 0, "node_b": 1, "linker": "direct", "path_length": 1 },
    { "molecule_code": "sulfamethoxazole", "node_a": 1, "node_b": 2, "linker": "direct", "path_length": 1 },
    { "molecule_code": "sulfamethoxazole", "node_a": 2, "node_b": 3, "linker": "direct", "path_length": 1 },

    { "molecule_code": "pfoa", "node_a": 0, "node_b": 1, "linker": "direct", "path_length": 1 },
    { "molecule_code": "pfoa", "node_a": 1, "node_b": 2, "linker": "direct", "path_length": 1 },
    { "molecule_code": "pfoa", "node_a": 2, "node_b": 3, "linker": "direct", "path_length": 1 },
    { "molecule_code": "pfoa", "node_a": 3, "node_b": 4, "linker": "direct", "path_length": 1 },
    { "molecule_code": "pfoa", "node_a": 4, "node_b": 5, "linker": "direct", "path_length": 1 },
    { "molecule_code": "pfoa", "node_a": 5, "node_b": 6, "linker": "direct", "path_length": 1 },
    { "molecule_code": "pfoa", "node_a": 6, "node_b": 7, "linker": "direct", "path_length": 1 },

    { "molecule_code": "bisphenol_a", "node_a": 0, "node_b": 1, "linker": "direct", "path_length": 1 },
    { "molecule_code": "bisphenol_a", "node_a": 1, "node_b": 2, "linker": "C(CH3)2", "path_length": 2 },
    { "molecule_code": "bisphenol_a", "node_a": 2, "node_b": 3, "linker": "direct", "path_length": 1 }
  ],

  "rg_graph_metric": [
    { "molecule_code": "diclofenac",       "type_code": "n_nodes", "value": 6 },
    { "molecule_code": "diclofenac",       "type_code": "n_edges", "value": 5 },
    { "molecule_code": "diclofenac",       "type_code": "graph_diameter", "value": 4 },
    { "molecule_code": "diclofenac",       "type_code": "mean_degree", "value": 1.67 },
    { "molecule_code": "diclofenac",       "type_code": "cyclomatic", "value": 0 },
    { "molecule_code": "sulfamethoxazole", "type_code": "n_nodes", "value": 4 },
    { "molecule_code": "sulfamethoxazole", "type_code": "n_edges", "value": 3 },
    { "molecule_code": "sulfamethoxazole", "type_code": "graph_diameter", "value": 3 },
    { "molecule_code": "sulfamethoxazole", "type_code": "mean_degree", "value": 1.50 },
    { "molecule_code": "pfoa",             "type_code": "n_nodes", "value": 8 },
    { "molecule_code": "pfoa",             "type_code": "n_edges", "value": 7 },
    { "molecule_code": "pfoa",             "type_code": "graph_diameter", "value": 7 },
    { "molecule_code": "pfoa",             "type_code": "mean_degree", "value": 1.75 },
    { "molecule_code": "bisphenol_a",      "type_code": "n_nodes", "value": 4 },
    { "molecule_code": "bisphenol_a",      "type_code": "n_edges", "value": 3 },
    { "molecule_code": "bisphenol_a",      "type_code": "graph_diameter", "value": 3 },
    { "molecule_code": "bisphenol_a",      "type_code": "mean_degree", "value": 1.50 }
  ],

  "_note_size_trap_visible": "PFOA has the largest n_nodes AND the lowest reactivity, while bisphenol A has the smallest AND the highest. In this seven-molecule fixture a size metric would correlate NEGATIVELY with rate constant and look predictive. It is an artefact of which molecules were chosen. This is precisely the confound the size_correlated flag forces a model to control for.",

  "rg_property_value": [
    { "molecule_code": "bisphenol_a",      "type_code": "k_ozone", "value": 1.7e6, "ph": 7.0, "temperature_k": 293, "matrix": "ultrapure_water", "quality": "measured",  "source_doi": "PLACEHOLDER-requires-curation", "note": "Illustrative magnitude. Phenolic rings: fast." },
    { "molecule_code": "sulfamethoxazole", "type_code": "k_ozone", "value": 2.5e6, "ph": 7.0, "temperature_k": 293, "matrix": "ultrapure_water", "quality": "measured",  "source_doi": "PLACEHOLDER-requires-curation", "note": "Illustrative magnitude. Aniline amine: fastest common group." },
    { "molecule_code": "diclofenac",       "type_code": "k_ozone", "value": 1.0e6, "ph": 7.0, "temperature_k": 293, "matrix": "ultrapure_water", "quality": "measured",  "source_doi": "PLACEHOLDER-requires-curation", "note": "Illustrative magnitude. Secondary aryl amine dominates." },
    { "molecule_code": "carbamazepine",    "type_code": "k_ozone", "value": 3.0e5, "ph": 7.0, "temperature_k": 293, "matrix": "ultrapure_water", "quality": "measured",  "source_doi": "PLACEHOLDER-requires-curation", "note": "Illustrative magnitude. Olefinic bridge is the attack site." },
    { "molecule_code": "ibuprofen",        "type_code": "k_ozone", "value": 9.6,   "ph": 7.0, "temperature_k": 293, "matrix": "ultrapure_water", "quality": "measured",  "source_doi": "PLACEHOLDER-requires-curation", "note": "Illustrative magnitude. Alkyl-substituted ring only: slow." },
    { "molecule_code": "atrazine",         "type_code": "k_ozone", "value": 6.0,   "ph": 7.0, "temperature_k": 293, "matrix": "ultrapure_water", "quality": "measured",  "source_doi": "PLACEHOLDER-requires-curation", "note": "Illustrative magnitude. Electron-poor triazine: slow." },
    { "molecule_code": "pfoa",             "type_code": "k_ozone", "value": 0.05,  "ph": 7.0, "temperature_k": 293, "matrix": "ultrapure_water", "quality": "estimated", "source_doi": "PLACEHOLDER-requires-curation", "note": "Illustrative upper bound. Ozone does not degrade PFAS: the negative control." }
  ],

  "_note_dynamic_range": "Seven orders of magnitude across seven molecules (0.05 to 2.5e6). This is the discrimination argument for choosing ozone over hydroxyl radical, visible in the fixture: an OH-radical column would span barely one order.",

  "_molecule_feature": [
    { "molecule_code": "sulfamethoxazole", "feature": "homo_max_over_nodes", "value": -5.21, "governing_node_group": "ArNH2", "log10_k_ozone": 6.398 },
    { "molecule_code": "diclofenac",       "feature": "homo_max_over_nodes", "value": -5.35, "governing_node_group": "ArNH",  "log10_k_ozone": 6.000 },
    { "molecule_code": "bisphenol_a",      "feature": "homo_max_over_nodes", "value": -5.94, "governing_node_group": "ArOH",  "log10_k_ozone": 6.230 },
    { "molecule_code": "carbamazepine",    "feature": "homo_max_over_nodes", "value": -6.20, "governing_node_group": "olefin","log10_k_ozone": 5.477 },
    { "molecule_code": "ibuprofen",        "feature": "homo_max_over_nodes", "value": -6.90, "governing_node_group": "PhR",   "log10_k_ozone": 0.982 },
    { "molecule_code": "atrazine",         "feature": "homo_max_over_nodes", "value": -6.95, "governing_node_group": "AlkNH", "log10_k_ozone": 0.778 },
    { "molecule_code": "pfoa",             "feature": "homo_max_over_nodes", "value": -7.42, "governing_node_group": "COOH",  "log10_k_ozone": -1.301 }
  ],

  "_note_aggregation_is_the_bridge": "homo_max_over_nodes is the GROUP-to-MOLECULE bridge: the highest HOMO among a molecule's group nodes. Chemically right for ozone, because the most electron-rich site governs the rate. The governing node is recorded, so a prediction can say WHICH group drives it — sulfamethoxazole via its aniline amine, PFOA only via its carboxyl head because nothing else in the molecule reacts at all.",

  "rg_model": [
    {
      "model_ref": "m-ozone-lfer-v1",
      "campaign_ref": "camp-ozone-screen-01",
      "target_type_code": "k_ozone",
      "form": "lfer",
      "response_transform": "log10",
      "equation": "log10(k_O3) = 3.604 * homo_max_over_nodes + 26.15",
      "n_train": 7,
      "r2": 0.882,
      "rmse_log_units": 1.218,
      "size_controlled": true,
      "size_control_note": "Refitted with molecular weight as covariate. HOMO retained sign and significance (b 3.604 -> 3.452, t 6.11 -> 5.53, p 0.002 -> 0.005); MW itself was NOT significant (b -0.0066, t -0.90, p 0.42); R2 rose only 0.882 -> 0.902. The relationship is electronic, not a size proxy. r(HOMO,MW) = -0.270, VIF 1.08.",
      "applicability_domain": "Neutral and anionic organics carrying at least one aromatic or olefinic node; homo_max_over_nodes in [-7.5, -5.0] eV at b3lyp-d3-def2tzvp-smd. NOT valid for aliphatic-only molecules, nor for any record computed at another level of theory.",
      "status": "DRAFT",
      "notes": "Seven points on ILLUSTRATIVE values demonstrates the pipeline, NOT a defensible model. Largest residual +1.67 log units (carbamazepine) reflects that its olefinic bridge, not a group HOMO, governs its ozone chemistry — a real limitation of a single-descriptor LFER, correctly visible rather than hidden."
    }
  ],

  "rg_model_term": [
    { "model_ref": "m-ozone-lfer-v1", "feature_kind": "descriptor", "feature_code": "homo_energy", "aggregation": "max_over_nodes", "coefficient": 3.604, "std_error": 0.590, "t_stat": 6.11, "p_value": 0.0017, "vif": 1.08 },
    { "model_ref": "m-ozone-lfer-v1", "feature_kind": "intercept",  "feature_code": null,          "aggregation": null,             "coefficient": 26.15, "std_error": 3.72,  "t_stat": 7.03, "p_value": 0.0009, "vif": null }
  ],

  "rg_model_prediction": [
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "sulfamethoxazole", "observed": 6.398, "predicted": 7.37, "residual": -0.97 },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "diclofenac",       "observed": 6.000, "predicted": 6.87, "residual": -0.87 },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "bisphenol_a",      "observed": 6.230, "predicted": 4.74, "residual": 1.49 },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "carbamazepine",    "observed": 5.477, "predicted": 3.80, "residual": 1.67 },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "ibuprofen",        "observed": 0.982, "predicted": 1.28, "residual": -0.30 },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "atrazine",         "observed": 0.778, "predicted": 1.10, "residual": -0.32 },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "pfoa",             "observed": -1.301,"predicted": -0.59,"residual": -0.71 }
  ],

  "_note_aggregation": "aggregation is the bridge from GROUP descriptors to a MOLECULE-level feature: max_over_nodes takes the highest HOMO among the molecule's group nodes, which is chemically right for ozone (the most electron-rich site governs the rate). sum_over_nodes gives group-contribution behaviour. The aggregation rule is part of the model definition, not a hidden preprocessing step.",

  "rg_model_training_row": [
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "bisphenol_a",      "property_type_code": "k_ozone" },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "sulfamethoxazole", "property_type_code": "k_ozone" },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "diclofenac",       "property_type_code": "k_ozone" },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "carbamazepine",    "property_type_code": "k_ozone" },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "ibuprofen",        "property_type_code": "k_ozone" },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "atrazine",         "property_type_code": "k_ozone" },
    { "model_ref": "m-ozone-lfer-v1", "molecule_code": "pfoa",             "property_type_code": "k_ozone" }
  ]
}
