{
  "schema": "cheme/maturity-report/v1",
  "kind": "maturity-report",
  "core_version": "0.8.0",
  "checked_at": "2026-10-28T15:32:56Z",
  "level": "balanced",
  "level_index": 2,
  "evaluated_through": "engineering",
  "library_maturity": "screening",
  "levels": [
    {
      "id": "sourced",
      "title": "Sourced process description",
      "library_maturity": "concept",
      "status": "pass",
      "reached": true,
      "requirements": [
        {
          "id": "sourced.flowsheet",
          "title": "process flowsheet loads",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-sourced-flowsheet",
          "file": "process/flowsheet.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "sourced.design-basis",
          "title": "design basis: capacity, feeds and products",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-sourced-design-basis",
          "file": "process/design-basis.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "sourced.boundary",
          "title": "feeds and products declared; feed flows and compositions given with a source",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-sourced-boundary",
          "file": "process/flowsheet.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        }
      ]
    },
    {
      "id": "balanced",
      "title": "Balanced conceptual PFD",
      "library_maturity": "screening",
      "status": "pass",
      "reached": true,
      "requirements": [
        {
          "id": "balanced.process-rules",
          "title": "no error in the process rules (units, ports, reactions, reactors)",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-balanced-process-rules",
          "file": "process/flowsheet.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "balanced.balances-evaluable",
          "title": "every block and step balance evaluable in every case (mass and components or elements)",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-balanced-balances-evaluable",
          "file": "process/flowsheet.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "balanced.balances-closed",
          "title": "every balance closes within the flowsheet's explicit tolerance",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-balanced-balances-closed",
          "file": "process/flowsheet.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "balanced.model-basis",
          "title": "every reactor and separator rests on a sourced model or sourced specified values",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-balanced-model-basis",
          "file": "process/flowsheet.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "balanced.energy-closure",
          "title": "energy balances of the blocks and steps (stream enthalpies against energy streams)",
          "status": "missing",
          "required": false,
          "rule": "cheme.maturity-balanced-energy-closure",
          "file": "process/flowsheet.yaml",
          "line": null,
          "detail": "no balance evaluable: stream enthalpies or duties missing",
          "hint": "cheme process props --fill writes the enthalpies"
        }
      ]
    },
    {
      "id": "predictive",
      "title": "Converged predictive simulation",
      "library_maturity": "screening",
      "status": "fail",
      "reached": false,
      "requirements": [
        {
          "id": "predictive.simulation-spec",
          "title": "process/simulation.yaml translates into a simulator model for every case",
          "status": "fail",
          "required": true,
          "rule": "cheme.maturity-predictive-simulation-spec",
          "file": "process/flowsheet.yaml",
          "line": 150,
          "detail": "refused for case design: P101 (class ProcessStep) maps to no unit operation",
          "hint": "run cheme process simulate --check"
        },
        {
          "id": "predictive.run-record",
          "title": "a run record for every case",
          "status": "missing",
          "required": true,
          "rule": "cheme.maturity-predictive-run-record",
          "file": "process/simulation-run.json",
          "line": null,
          "detail": "no run recorded in process/simulation-run.json",
          "hint": "run cheme process simulate --fill (it records the run)"
        },
        {
          "id": "predictive.current",
          "title": "every run record is current: simulated from the inputs as they are (fingerprints)",
          "status": "missing",
          "required": true,
          "rule": "cheme.maturity-predictive-current",
          "file": "process/simulation-run.json",
          "line": null,
          "detail": "no run recorded in process/simulation-run.json",
          "hint": "run cheme process simulate --fill (it records the run)"
        },
        {
          "id": "predictive.converged",
          "title": "every recorded run converged without errors",
          "status": "missing",
          "required": true,
          "rule": "cheme.maturity-predictive-converged",
          "file": "process/simulation-run.json",
          "line": null,
          "detail": "no run recorded in process/simulation-run.json",
          "hint": "run cheme process simulate --fill (it records the run)"
        },
        {
          "id": "predictive.solver",
          "title": "simulator, simulator version, property package and core version recorded",
          "status": "missing",
          "required": true,
          "rule": "cheme.maturity-predictive-solver",
          "file": "process/simulation-run.json",
          "line": null,
          "detail": "no run recorded in process/simulation-run.json",
          "hint": "run cheme process simulate --fill (it records the run)"
        },
        {
          "id": "predictive.coverage",
          "title": "every step simulated: none excluded and left at specified values",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-predictive-coverage",
          "file": "process/simulation.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "predictive.balances",
          "title": "physical validity: the balances of the simulated flowsheet close within tolerance",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-predictive-balances",
          "file": "process/flowsheet.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "predictive.model-basis",
          "title": "every reactor and separator predicted by a model: specified splits, conversions and stream values cap the level at balanced",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-predictive-model-basis",
          "file": "process/simulation.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "predictive.property-package",
          "title": "the property package is supported and recommended by a recorded method selection (or a recorded substitution)",
          "status": "missing",
          "required": true,
          "rule": "cheme.maturity-predictive-property-package",
          "file": "process/simulation.yaml",
          "line": 7,
          "detail": "no method_selection recorded for property package 'Peng-Robinson (PR)'",
          "hint": "record method_selection.facts (thermodynamic-model-selection) so the package is checked against the recommendation"
        },
        {
          "id": "predictive.property-regime",
          "title": "the property methods are used inside their declared regimes",
          "status": "missing",
          "required": true,
          "rule": "cheme.maturity-predictive-property-regime",
          "file": "process/simulation.yaml",
          "line": null,
          "detail": "no run recorded in process/simulation-run.json",
          "hint": "run cheme process simulate --fill (the regime is checked on its streams)"
        },
        {
          "id": "predictive.stream-properties",
          "title": "every stream with calculated properties lies inside the benchmarked claim of the process's property package",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-predictive-stream-properties",
          "file": "process/flowsheet.yaml",
          "line": null,
          "detail": "no stream has calculated properties",
          "hint": ""
        },
        {
          "id": "predictive.energy-closure",
          "title": "the simulated plant's enthalpy flows close with its heat and work within tolerance",
          "status": "missing",
          "required": true,
          "rule": "cheme.maturity-predictive-energy-closure",
          "file": "process/simulation-run.json",
          "line": null,
          "detail": "no run recorded",
          "hint": "run cheme process simulate --fill (it records the energy audit)"
        },
        {
          "id": "predictive.exchangers",
          "title": "no exchanger temperature cross or approach below its minimum, every utility level can serve its duty",
          "status": "missing",
          "required": true,
          "rule": "cheme.maturity-predictive-exchangers",
          "file": "process/simulation-run.json",
          "line": null,
          "detail": "no run recorded",
          "hint": "run cheme process simulate --fill (it records the energy audit)"
        },
        {
          "id": "predictive.formation-data",
          "title": "the simulated reaction heat agrees with the formation enthalpies declared in process/materials.yaml",
          "status": "missing",
          "required": true,
          "rule": "cheme.maturity-predictive-formation-data",
          "file": "process/simulation-run.json",
          "line": null,
          "detail": "no energy audit recorded",
          "hint": "run cheme process simulate --fill (it records the energy audit)"
        }
      ]
    },
    {
      "id": "engineering",
      "title": "Preliminary/basic engineering package",
      "library_maturity": "basic-engineering",
      "status": "fail",
      "reached": false,
      "requirements": [
        {
          "id": "engineering.equipment-list",
          "title": "an equipment list",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-engineering-equipment-list",
          "file": "equipment/equipment-list.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "engineering.datasheets",
          "title": "a valid, final datasheet for every equipment item",
          "status": "fail",
          "required": true,
          "rule": "cheme.maturity-engineering-datasheets",
          "file": "equipment/datasheets/",
          "line": null,
          "detail": "no datasheet in equipment/datasheets/ for V-101, P-101, E-101, E-102, R-101, E-103, C-101, C-102, C-103, C-104 and 1 more",
          "hint": "cheme datasheets fill, then complete them"
        },
        {
          "id": "engineering.pid",
          "title": "P&IDs without errors",
          "status": "missing",
          "required": true,
          "rule": "cheme.maturity-engineering-pid",
          "file": "pid/",
          "line": null,
          "detail": "",
          "hint": "draft the P&IDs (cheme sheet new)"
        },
        {
          "id": "engineering.process-links",
          "title": "every flowsheet link resolves against the lists and the sheets",
          "status": "pass",
          "required": true,
          "rule": "cheme.maturity-engineering-process-links",
          "file": "process/flowsheet.yaml",
          "line": null,
          "detail": "",
          "hint": ""
        },
        {
          "id": "engineering.consistency",
          "title": "datasheet duties and sizes cross-checked against the current simulation",
          "status": "unsupported",
          "required": false,
          "rule": "cheme.maturity-engineering-consistency",
          "file": "equipment/datasheets/",
          "line": null,
          "detail": "not cross-checked by this command",
          "hint": ""
        }
      ]
    }
  ],
  "cases": [
    {
      "id": "design",
      "description": "Design case: net 2.0 t/h MMA, 4.4 t/h DMA, 1.6 t/h TMA (D-002), converter feed N/C 2.0, outlet 713 K (D-004)",
      "default": true,
      "balanced": true,
      "simulated": false
    }
  ],
  "assumptions": {
    "design_basis": [
      "Converter: adiabatic fixed bed of amorphous silica-alumina, inlet 625 K / 2200 kPa(a), outlet 713 K / 2000 kPa(a); window 350-450 C and 150-350 psig from US 3,387,032 A and US 4,283,254 A (D-004).",
      "Converter outlet at the ideal-gas equilibrium of the three methylations at the outlet temperature, ATcT/CRC/Poling data; a model basis, not kinetics (D-005). Checked against the published equilibrium at 400 C, N/C 2.0 (US 4,485,261 A): TMA under-predicted (0.37 vs 0.43 among the amines on a weight basis, D-005). The source does not state the basis of its equilibrium ratios; weight is ASSUMED from its weight-basis prior-art ratios (on a mole basis the miss would be about 16 points, D-005).",
      "Converter feed N/C ratio 2.0 (mol N / mol methyl carbon), ASSUMED inside the ranges of US 7,435,855 B2 and US 4,485,261 A (D-004).",
      "All ammonia and the TMA recycle return as the ammonia column distillate; MMA beyond the product rate and unconverted methanol are recycled (D-007).",
      "Columns are sharp splits; reflux ratios, pressures, extraction water ratio 1 kg/kg and a minimum boil-up of 0.1 kmol/kmol bottoms are ASSUMED (D-008).",
      "No by-products (dimethyl ether, higher amines, CO/H2 from decomposition, coke), no inert purge and no caustic dosing modelled (D-005, D-008).",
      "Duties are concept estimates (ideal gas + heats of vaporisation, no mixing enthalpy), +/-30 % at best; no heat integration beyond the feed/effluent exchanger (D-006, D-009)."
    ],
    "assumed_values": {
      "process/flowsheet.yaml": 96,
      "process/simulation.yaml": 0,
      "process/reactions.yaml": 0,
      "process/catalysts.yaml": 0
    },
    "models": {
      "R101": [
        "chemical equilibrium at the outlet temperature, ideal gas"
      ],
      "C101": [
        "Fenske-Underwood-Gilliland: key-component recoveries specified, constant relative volatility"
      ],
      "C102": [
        "Fenske-Underwood-Gilliland: key-component recoveries specified, constant relative volatility"
      ],
      "C103": [
        "Fenske-Underwood-Gilliland: key-component recoveries specified, constant relative volatility"
      ],
      "C104": [
        "Fenske-Underwood-Gilliland: key-component recoveries specified, constant relative volatility"
      ],
      "C105": [
        "Fenske-Underwood-Gilliland: key-component recoveries specified, constant relative volatility"
      ]
    }
  },
  "unresolved": [
    {
      "requirement": "predictive.simulation-spec",
      "status": "fail",
      "file": "process/flowsheet.yaml",
      "detail": "refused for case design: P101 (class ProcessStep) maps to no unit operation"
    },
    {
      "requirement": "predictive.run-record",
      "status": "missing",
      "file": "process/simulation-run.json",
      "detail": "no run recorded in process/simulation-run.json"
    },
    {
      "requirement": "predictive.current",
      "status": "missing",
      "file": "process/simulation-run.json",
      "detail": "no run recorded in process/simulation-run.json"
    },
    {
      "requirement": "predictive.converged",
      "status": "missing",
      "file": "process/simulation-run.json",
      "detail": "no run recorded in process/simulation-run.json"
    },
    {
      "requirement": "predictive.solver",
      "status": "missing",
      "file": "process/simulation-run.json",
      "detail": "no run recorded in process/simulation-run.json"
    },
    {
      "requirement": "predictive.property-package",
      "status": "missing",
      "file": "process/simulation.yaml",
      "detail": "no method_selection recorded for property package 'Peng-Robinson (PR)'"
    },
    {
      "requirement": "predictive.property-regime",
      "status": "missing",
      "file": "process/simulation.yaml",
      "detail": "no run recorded in process/simulation-run.json"
    },
    {
      "requirement": "predictive.energy-closure",
      "status": "missing",
      "file": "process/simulation-run.json",
      "detail": "no run recorded"
    },
    {
      "requirement": "predictive.exchangers",
      "status": "missing",
      "file": "process/simulation-run.json",
      "detail": "no run recorded"
    },
    {
      "requirement": "predictive.formation-data",
      "status": "missing",
      "file": "process/simulation-run.json",
      "detail": "no energy audit recorded"
    },
    {
      "requirement": "engineering.datasheets",
      "status": "fail",
      "file": "equipment/datasheets/",
      "detail": "no datasheet in equipment/datasheets/ for V-101, P-101, E-101, E-102, R-101, E-103, C-101, C-102, C-103, C-104 and 1 more"
    },
    {
      "requirement": "engineering.pid",
      "status": "missing",
      "file": "pid/",
      "detail": ""
    }
  ],
  "limitations": [
    {
      "subject": "R101",
      "file": "process/flowsheet.yaml",
      "line": 184,
      "limitation": "equilibrium limit: no kinetics, the approach is not predicted"
    },
    {
      "subject": "R101",
      "file": "process/flowsheet.yaml",
      "line": 184,
      "limitation": "in the simulation, K comes from DWSIM's own formation data"
    },
    {
      "subject": "engineering.consistency",
      "file": "equipment/datasheets/",
      "line": null,
      "limitation": "not cross-checked by this command"
    },
    {
      "subject": "engineering",
      "file": "",
      "line": null,
      "limitation": "mechanical design to a code (wall thickness, nozzle loads) is not checked"
    },
    {
      "subject": "engineering",
      "file": "",
      "line": null,
      "limitation": "materials and corrosion selection is not checked"
    },
    {
      "subject": "engineering",
      "file": "",
      "line": null,
      "limitation": "relief and blowdown sizing is not checked"
    },
    {
      "subject": "engineering",
      "file": "",
      "line": null,
      "limitation": "control and dynamic behaviour is not checked"
    },
    {
      "subject": "simulation-route",
      "file": "process/simulation.yaml",
      "line": null,
      "limitation": "no electrolytes: the worker exposes no electrolyte property package"
    },
    {
      "subject": "simulation-route",
      "file": "process/simulation.yaml",
      "line": null,
      "limitation": "no pseudocomponents: every compound must be in DWSIM's database (by CAS number or the name in simulation.yaml); no assay characterisation"
    },
    {
      "subject": "simulation-route",
      "file": "process/simulation.yaml",
      "line": null,
      "limitation": "no solid phase: simulation.yaml has no solid compounds or solid-phase input, and none is tested"
    },
    {
      "subject": "simulation-route",
      "file": "process/simulation.yaml",
      "line": null,
      "limitation": "binary interaction parameters: DWSIM's own database (not inspected by cheme-as-code) unless simulation.yaml interaction_parameters set them (equation-of-state packages only)"
    }
  ],
  "artifacts": {
    "note": "artifact completeness never establishes calculation maturity",
    "sheets": [
      {
        "id": "BFD",
        "kind": "bfd",
        "file": "process/BFD.xml",
        "exists": true,
        "generated": true
      },
      {
        "id": "PFD",
        "kind": "pfd",
        "file": "process/PFD.xml",
        "exists": true,
        "generated": true
      }
    ],
    "files": {
      "design_basis": [
        "process/design-basis.yaml"
      ],
      "equipment_list": [
        "equipment/equipment-list.yaml"
      ],
      "datasheets": [],
      "line_list": [
        "piping/line-list.yaml"
      ],
      "instrument_list": [
        "control/instrument-list.yaml"
      ],
      "layout": [],
      "estimate": [
        "estimate/rates.yaml"
      ],
      "lca": [
        "lca/dataset.yaml",
        "lca/factors.yaml",
        "lca/inventory.csv",
        "lca/lca.yaml",
        "lca/mappings.yaml"
      ],
      "simulation_record": []
    }
  },
  "review": {
    "note": "set by people only: cheme maturity reads it and never writes it",
    "manifest_status": "unreviewed"
  },
  "manifest": {
    "supported_maturity": "screening",
    "claimed_maturity": "concept",
    "review_status": "unreviewed",
    "claim_exceeds_evidence": false
  },
  "source": {
    "commit": "fdea259a2374f81b4b0bfff9f8620025b1066915",
    "dirty": [],
    "fingerprints": {
      "equipment/equipment-list.yaml": "sha256:4c293dbc4697e7e3459b90d217c81e26477876a9ad1470aeb951efa4fbdb4618",
      "plant.yaml": "sha256:688200e38e424b935a5a099aabc3fbaa5094125a96c85463939845da8f3475fe",
      "process/catalysts.yaml": "sha256:47d20a9a73397e434b7834387a099765d5790b592119e84204b76f9b1bb5c2e6",
      "process/design-basis.yaml": "sha256:3027ad0744b5c8c22d0511b1b436a53e66e7dced9237cde1a512a2068391ced3",
      "process/flowsheet.yaml": "sha256:4312e11cd10ef9beb93f19098dd262b5c7a47bfbf2694263ee7250e26db4b22c",
      "process/materials.yaml": "sha256:a759ffa7733a331f910b8b488c1cd5c3360d68f7732fb8f97668c8c313631367",
      "process/reactions.yaml": "sha256:35282c5633c6a8e312f05538f5c24f7876cee412935994b6544144e727bc6002",
      "process/simulation.yaml": "sha256:8712eec55495d35f5666c5c934e4107c94f6f05c5126ecceebd429938ea45d54"
    }
  }
}
