Schema reference¶
Generated
This page is generated from the code when the documentation is built (docs/hooks/reference.py). Do not edit it; change the code instead.
The schemas of the YAML files of a plant repository, as cheme schema lists them; cheme schema <kind> prints the JSON Schema shown under each kind (for editors), and cheme validate checks the files against them.
| kind | file | what it holds |
|---|---|---|
plant |
plant.yaml |
The root file of a plant repository. |
design_basis |
process/design-basis.yaml |
Capacity, feeds, products, utilities and site. Values are free-form mappings; a feed or a product may name the flowsheet feed or product it is (terminal). |
equipment |
equipment/equipment-list.yaml |
Every tagged equipment item of the plant. |
lines |
piping/line-list.yaml |
Every piping line of the plant. |
instruments |
control/instrument-list.yaml |
Every instrument function of the plant. |
piping_items |
piping/special-items.yaml |
Tagged piping components: relief devices, silencers, other special items. |
interlocks |
control/cause-effect.yaml |
The cause-and-effect list of the plant. |
loops |
control/loops.yaml |
The control loop register: regulatory loops. |
sequences |
control/sequences.yaml |
Operating sequences: startup, shutdown, abnormal modes. |
checks |
checks/checks.yaml |
Every gate of the plant. |
rates |
estimate/rates.yaml |
estimate/rates.yaml: the project's unit rates and estimate factors. |
cost_basis |
estimate/cost-basis.yaml |
estimate/cost-basis.yaml (kind cost_basis): what the equipment estimate from the package's published correlations needs from the project. |
tea |
estimate/tea.yaml |
estimate/tea.yaml: the premises of the techno-economic analysis. |
electrical |
electrical/electrical-list.yaml |
electrical/electrical-list.yaml: substations, transformers, electrical rooms, the motor list (derived from the driven equipment, given or overridden here), other feeders, junction boxes and the cabling of single instruments. |
crane_chart |
layout/crane-chart.yaml |
layout/crane-chart.yaml (kind crane_chart): the load charts of the cranes the project plans to lift its heavy items with. |
lca |
lca/lca.yaml |
lca/lca.yaml: goal and scope of the plant's LCA and the map of its flows. |
lca_factors |
lca/factors.yaml |
lca/factors.yaml: the project's characterised factors (no licensed database). |
site_plan |
layout/site-plan.yaml |
The site plan: boundary, plot areas, roads and pipe racks. |
building |
layout/building.yaml |
Buildings and structures with their levels and column grids. |
placement |
layout/equipment-placement.yaml |
Where each equipment item of the equipment list stands, in 3D. |
structures |
layout/structures.yaml |
Steel structures: open frames with decks, platforms, stairs, ladders and casings; pipe_supports: posts and T-posts under single pipes. |
zones |
layout/zones.yaml |
Keep-clear, laydown, maintenance and escape zones, hazardous areas and oxygen-enriched or oxygen-deficient zones. |
routing |
piping/routing.yaml |
How the router runs pipes: tier rules, spacing, headroom, and intent per line. |
pipe_specs |
piping/pipe-specs.yaml |
Pipe classes and insulation thicknesses for the 3D pipe routes. |
trays |
electrical/tray-rules.yaml |
electrical/tray-rules.yaml: how the cable trays are sized and run. |
hvac |
layout/hvac.yaml |
layout/hvac.yaml: the air handling units, the ventilated rooms and the duct rules. |
datasheet |
equipment/datasheets/<TAG>.yaml |
One equipment item's datasheet. tag must be in the equipment list. |
review |
reviews/*.md (front matter) |
Front matter of a review record: YAML between two --- lines at the top of the file. |
status |
checks/status.json |
Stage sign-offs by stage id; checks repeats the gates of the latest sign-off. |
process-materials |
process/materials.yaml |
Components, templates and the property method of the process. |
process-flowsheet |
process/flowsheet.yaml |
Feeds, products, blocks, steps and streams: the source of the BFD and PFD. |
process-simulation |
process/simulation.yaml |
process/simulation.yaml. |
process-reactions |
process/reactions.yaml |
The reactions of the process. |
process-catalysts |
process/catalysts.yaml |
The catalysts of the process. |
process-assays |
process/assays.yaml |
process/assays.yaml. |
process-cells |
process/cells.yaml |
The electrochemical cells of the process. |
process-duties |
process/duties.yaml |
The dynamic duties of the process's electrochemical cells. |
process-adsorption |
process/adsorption.yaml |
process/adsorption.yaml. |
reaction-evidence |
process/reaction-evidence.yaml |
The reaction evidence of the process. |
process-extraction |
process/extraction.yaml |
Liquid-liquid extractors (process/extraction.yaml): equilibrium stages on NRTL. |
furnaces |
process/furnaces.yaml |
process/furnaces.yaml. |
kinetic-data |
experiments/kinetics/*.yaml |
Rates of one reaction, or conversions measured in reactors (integral). |
electrochemical-measurements |
experiments/electrochemistry/*.yaml |
A measured series of one electrochemical cell. |
layout_model |
layout/plant-model.yaml (generated) |
The 3D plant model that cheme layout build derives (layout/plant-model.yaml). |
lci_dataset |
lca/dataset.yaml (generated), lca/datasets/*.yaml |
An unallocated life cycle inventory dataset (kind: lci_dataset): a reusable process. |
lci_estimate |
lca/estimate.yaml |
An LCI estimate (kind: lci_estimate, lca/estimate.yaml): what cheme assess lci-estimate builds a Tier 0 or Tier 1 dataset from. |
lca_mapping_profile |
lca/mapping-profiles/*.yaml |
A provider profile (kind: lca_mapping_profile): how one background provider (an ecoinvent release and system model, an open database) names the activities for the flows a study takes, matched by the flowsheet's own terms (a key, a utility kind), so a study changes provider by selecting another profile. Names only: never a factor or a result of the provider, so it may be committed when the provider's terms allow its names. |
adapter-result |
process/simulation-run.json cases; --json |
One run of an adapter for one case. |
risk-matrix |
safety/risk-matrix.yaml |
A risk matrix: explicit bands, grades and cells, each cell a band per category. |
hazop-study |
safety/hazop/<id>/study.yaml |
A HAZOP study: scope, analysed inputs, nodes, deviations, scenarios, safeguards, actions. |
narrative |
process/narrative.md (front matter) |
Process narrative: the sections the text describes. |
control_philosophy |
control/philosophy.md (front matter) |
Control philosophy: objectives and failures the text describes. |
process-run |
runs/<run-id>/run.yaml |
Record of one design session: who ran it, on which commits, at what cost, with what. |
plant¶
File: plant.yaml. Model: chemeascode.foundation.schemas.plant.PlantConfig.
The root file of a plant repository.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/plant/v1; optional (a file without it reads as cheme/plant/v1). | |
name |
string | yes | ||
requires |
string or null | null |
The oldest cheme-as-code this repository needs, e.g. cheme-as-code>=0.7. Every command of an older cheme-as-code stops with an upgrade hint before any schema error. | |
description |
string | "" |
||
units |
string | "SI" |
Unit system of the YAML lists. | |
stage |
string | "concept" |
Id of the current stage. | |
stages |
list of Stage | |||
project |
Project or null | null |
Project data for the title blocks (cheme sheet new). |
|
sheets |
list of Sheet | P&ID sheets. Empty means every pid/*.xml. | ||
issues |
Issues or null | null |
Where the plant's issues are tracked (cheme issues, the issues gate kind, GET /api/issues); omitted: the plant tracks none. |
JSON Schema: cheme schema plant
{
"$defs": {
"Generator": {
"additionalProperties": false,
"description": "The script a generated sheet is built by. A sheet with a generator is not edited by hand:\nchange the script and run ``cheme regen``.",
"properties": {
"script": {
"description": "Generator script from the repository root, e.g. scripts/draft_P-04.py. `cheme regen` copies the frame to a scratch file, runs `cheme run SCRIPT FILE` (the script edits FILE in place) and formats the result.",
"title": "Script",
"type": "string"
},
"frame": {
"description": "What the script starts from: a file in the repository (e.g. pid/frames/P-04.xml) or a git revision whose copy of the sheet file is the frame (e.g. 9aa9b38, the commit with the empty sheet). Quote a revision of digits only ('8203912'): unquoted, YAML reads it as a number.",
"title": "Frame",
"type": "string"
}
},
"required": [
"script",
"frame"
],
"title": "Generator",
"type": "object"
},
"Issues": {
"additionalProperties": false,
"description": "Where the plant's issues are tracked: a GitHub repository and the label of this plant.\n\nThe labels follow the engineering vocabulary of docs/framework/issues.md (type:, gate:,\ndiscipline:, source:, status:, waiting:).",
"properties": {
"repository": {
"description": "owner/name of the GitHub repository, e.g. ChemE-as-Code/process-library.",
"pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$",
"title": "Repository",
"type": "string"
},
"label": {
"description": "The label of this plant's issues, e.g. process:asu-1.",
"minLength": 1,
"title": "Label",
"type": "string"
},
"web": {
"default": "https://github.com",
"description": "Base URL of the issue pages, for links only. The issues are always read from api.github.com: a plant file cannot send the reader's token elsewhere.",
"pattern": "^https://",
"title": "Web",
"type": "string"
},
"forms": {
"additionalProperties": {
"type": "string"
},
"description": "Issue form file per type (action, hold, tq, change), for new-issue links, e.g. {action: 1-action-item.yml}; without it, new issues open the template chooser.",
"title": "Forms",
"type": "object"
}
},
"required": [
"repository",
"label"
],
"title": "Issues",
"type": "object"
},
"Project": {
"additionalProperties": false,
"description": "The project the plant is engineered in: what ``cheme sheet new`` writes into the\ntitle block of each sheet (MetaData and the title-block texts).",
"properties": {
"number": {
"default": "",
"description": "Project number, e.g. 24-017.",
"title": "Number",
"type": "string"
},
"name": {
"default": "",
"description": "Project name (default: the plant name).",
"title": "Name",
"type": "string"
},
"client": {
"default": "",
"description": "Client (EnterpriseName in the title block).",
"title": "Client",
"type": "string"
},
"site": {
"default": "",
"description": "Site (SiteName in the title block).",
"title": "Site",
"type": "string"
},
"revision": {
"default": "A",
"description": "Revision new sheets start at.",
"title": "Revision",
"type": "string"
}
},
"title": "Project",
"type": "object"
},
"Sheet": {
"additionalProperties": false,
"description": "One P&ID sheet, a DEXPI 2.0.1 XML file.\n\nA ``planned`` sheet is part of the sheet split but not drawn yet: without its file it is\nreported as info (``cheme.sheet-planned``), and the listed items assigned to it\n(``sheet:``) are not reported missing from the P&IDs. Once the file exists it is validated\nlike any other sheet. ``cheme sheet new`` writes the file and marks the sheet drafted.",
"properties": {
"id": {
"description": "Sheet number as printed, e.g. P-01.",
"title": "Id",
"type": "string"
},
"file": {
"default": "",
"description": "Path from the repository root, e.g. pid/P-01.xml (default pid/<id>.xml).",
"title": "File",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"kind": {
"default": "pid",
"description": "pid: a P&ID; bfd/pfd: a block or process flow diagram generated from process/*.yaml by `cheme process build` (file default process/<id>.xml).",
"enum": [
"pid",
"bfd",
"pfd"
],
"title": "Kind",
"type": "string"
},
"generator": {
"anyOf": [
{
"$ref": "#/$defs/Generator"
},
{
"const": "flowsheet",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Set for a generated sheet (rebuilt by `cheme regen`, no hand edits); leave out for a hand-maintained sheet. bfd/pfd sheets: flowsheet (the default).",
"title": "Generator"
},
"status": {
"default": "drafted",
"description": "planned: declared, not drawn yet (no file needed); drafted: the file exists.",
"enum": [
"planned",
"drafted"
],
"title": "Status",
"type": "string"
}
},
"required": [
"id"
],
"title": "Sheet",
"type": "object"
},
"Stage": {
"additionalProperties": false,
"description": "An engineering stage. Checks name the stage they gate.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"id",
"title"
],
"title": "Stage",
"type": "object"
}
},
"additionalProperties": false,
"description": "The root file of a plant repository.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/plant/v1; optional (a file without it reads as cheme/plant/v1).",
"title": "Schema"
},
"name": {
"title": "Name",
"type": "string"
},
"requires": {
"anyOf": [
{
"pattern": "^cheme-as-code\\s*>=\\s*\\d+(\\.\\d+){0,2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The oldest cheme-as-code this repository needs, e.g. cheme-as-code>=0.7. Every command of an older cheme-as-code stops with an upgrade hint before any schema error.",
"title": "Requires"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"units": {
"default": "SI",
"description": "Unit system of the YAML lists.",
"title": "Units",
"type": "string"
},
"stage": {
"default": "concept",
"description": "Id of the current stage.",
"title": "Stage",
"type": "string"
},
"stages": {
"items": {
"$ref": "#/$defs/Stage"
},
"title": "Stages",
"type": "array"
},
"project": {
"anyOf": [
{
"$ref": "#/$defs/Project"
},
{
"type": "null"
}
],
"default": null,
"description": "Project data for the title blocks (`cheme sheet new`)."
},
"sheets": {
"description": "P&ID sheets. Empty means every pid/*.xml.",
"items": {
"$ref": "#/$defs/Sheet"
},
"title": "Sheets",
"type": "array"
},
"issues": {
"anyOf": [
{
"$ref": "#/$defs/Issues"
},
{
"type": "null"
}
],
"default": null,
"description": "Where the plant's issues are tracked (cheme issues, the issues gate kind, GET /api/issues); omitted: the plant tracks none."
}
},
"required": [
"name"
],
"title": "PlantConfig",
"type": "object"
}
design_basis¶
File: process/design-basis.yaml. Model: chemeascode.domains.requirements.schemas.DesignBasis.
Capacity, feeds, products, utilities and site. Values are free-form mappings; a feed or a product may name the flowsheet feed or product it is (terminal).
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/design_basis/v1; optional (a file without it reads as cheme/design_basis/v1). | |
capacity |
object | |||
feeds |
list of object | Free-form; terminal: the id of the flowsheet feed it is (process/flowsheet.yaml feeds[].id; cheme.contract-ref). | ||
products |
list of object | Free-form; terminal: the id of the flowsheet product it is (process/flowsheet.yaml products[].id; cheme.contract-ref). | ||
utilities |
list of object | |||
site |
object | |||
assumptions |
list of string | |||
residence_times |
list of ResidenceTime | Required liquid residence times by tag, checked against the datasheets. |
JSON Schema: cheme schema design_basis
{
"$defs": {
"ResidenceTime": {
"additionalProperties": false,
"description": "A required liquid residence time of one item (``cheme datasheets fill`` checks it).",
"properties": {
"tag": {
"description": "Equipment-list tag.",
"title": "Tag",
"type": "string"
},
"minutes": {
"description": "Required residence time of the liquid outflow.",
"exclusiveMinimum": 0,
"title": "Minutes",
"type": "number"
},
"volume_fraction": {
"default": 1.0,
"description": "Share of the vessel volume that counts as hold-up (e.g. up to the normal liquid level); 1: the whole volume, an upper bound.",
"exclusiveMinimum": 0,
"maximum": 1,
"title": "Volume Fraction",
"type": "number"
},
"source": {
"default": "",
"description": "Where the requirement comes from.",
"title": "Source",
"type": "string"
}
},
"required": [
"tag",
"minutes"
],
"title": "ResidenceTime",
"type": "object"
}
},
"additionalProperties": false,
"description": "Capacity, feeds, products, utilities and site. Values are free-form mappings; a feed or\na product may name the flowsheet feed or product it is (``terminal``).",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/design_basis/v1; optional (a file without it reads as cheme/design_basis/v1).",
"title": "Schema"
},
"capacity": {
"additionalProperties": true,
"title": "Capacity",
"type": "object"
},
"feeds": {
"description": "Free-form; terminal: the id of the flowsheet feed it is (process/flowsheet.yaml feeds[].id; cheme.contract-ref).",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Feeds",
"type": "array"
},
"products": {
"description": "Free-form; terminal: the id of the flowsheet product it is (process/flowsheet.yaml products[].id; cheme.contract-ref).",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Products",
"type": "array"
},
"utilities": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Utilities",
"type": "array"
},
"site": {
"additionalProperties": true,
"title": "Site",
"type": "object"
},
"assumptions": {
"items": {
"type": "string"
},
"title": "Assumptions",
"type": "array"
},
"residence_times": {
"description": "Required liquid residence times by tag, checked against the datasheets.",
"items": {
"$ref": "#/$defs/ResidenceTime"
},
"title": "Residence Times",
"type": "array"
}
},
"title": "DesignBasis",
"type": "object"
}
equipment¶
File: equipment/equipment-list.yaml. Model: chemeascode.domains.equipment.schemas.equipment.EquipmentList.
Every tagged equipment item of the plant.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/equipment/v1; optional (a file without it reads as cheme/equipment/v1). | |
equipment |
list of EquipmentItem |
JSON Schema: cheme schema equipment
{
"$defs": {
"Dimensions": {
"additionalProperties": false,
"description": "Overall size of an item, in metres: the one source of its 3D shape.\n\nA round item gives ``diameter`` (outside of the shell) and ``height`` (vertical: from the\nbottom of its support to the top of its head) or ``length`` (horizontal, along its axis, over\nboth heads or channels). A box-like item (pump, skid, plate exchanger, package) gives\n``length`` (along its own x), ``width`` (or ``depth``, along its own y) and ``height``.",
"properties": {
"diameter": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Outside shell diameter, m.",
"title": "Diameter"
},
"height": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Overall height, m.",
"title": "Height"
},
"length": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Overall length along the axis, m.",
"title": "Length"
},
"width": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Extent across (own y), m.",
"title": "Width"
},
"depth": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Same as width; give one of them.",
"title": "Depth"
},
"head": {
"anyOf": [
{
"enum": [
"ellipsoidal_2_1",
"hemispherical",
"torispherical",
"flat",
"cone",
"cone_roof",
"dome_roof"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Head or roof type.",
"title": "Head"
},
"support": {
"anyOf": [
{
"enum": [
"skirt",
"legs",
"saddles",
"base_plate",
"none"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Skirt, legs, saddles, ...",
"title": "Support"
},
"weight": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Empty weight, t (optional).",
"title": "Weight"
},
"lift_weight": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The heaviest single maintenance lift of the item (a motor, rotor or bundle), t (optional): the lifting study lifts this instead of the weight.",
"title": "Lift Weight"
},
"orientation": {
"anyOf": [
{
"enum": [
"horizontal",
"vertical"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A machine's shaft: horizontal (default) or vertical.",
"title": "Orientation"
},
"variant": {
"anyOf": [
{
"enum": [
"end_suction",
"vertical_inline",
"cryogenic",
"integrally_geared",
"blower",
"compander",
"expander",
"machine"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The machine's 3D shape: end_suction, vertical_inline or cryogenic (pumps), integrally_geared, blower or machine (compressors), compander, expander or machine (turbines); default by the DEXPI class.",
"title": "Variant"
},
"source": {
"default": "",
"description": "Where the sizes come from, when a tool calculated them (cheme process stack: ...); the datasheets carry it with each main dimension.",
"title": "Source",
"type": "string"
},
"assumed": {
"default": false,
"description": "The sizes rest on an assumption (marked ASSUMED).",
"title": "Assumed",
"type": "boolean"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the inputs a tool calculated the sizes from.",
"title": "Fingerprint"
}
},
"title": "Dimensions",
"type": "object"
},
"EquipmentItem": {
"additionalProperties": false,
"description": "One tagged equipment item. ``tag`` must match the TagName on its P&ID.",
"properties": {
"tag": {
"title": "Tag",
"type": "string"
},
"type": {
"description": "DEXPI class, e.g. CentrifugalPump, Tank, PlateHeatExchanger.",
"title": "Type",
"type": "string"
},
"service": {
"default": "",
"title": "Service",
"type": "string"
},
"sheet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Sheet id the item is drawn on.",
"title": "Sheet"
},
"design_pressure_barg": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Design Pressure Barg"
},
"design_temperature_degc": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Design Temperature Degc"
},
"material": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Material"
},
"dimensions": {
"anyOf": [
{
"$ref": "#/$defs/Dimensions"
},
{
"type": "null"
}
],
"default": null,
"description": "Overall size, m: shape and extent of the item in the 3D layout."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"tag",
"type"
],
"title": "EquipmentItem",
"type": "object"
}
},
"additionalProperties": false,
"description": "Every tagged equipment item of the plant.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/equipment/v1; optional (a file without it reads as cheme/equipment/v1).",
"title": "Schema"
},
"equipment": {
"items": {
"$ref": "#/$defs/EquipmentItem"
},
"title": "Equipment",
"type": "array"
}
},
"title": "EquipmentList",
"type": "object"
}
lines¶
File: piping/line-list.yaml. Model: chemeascode.domains.piping.schemas.lines.LineList.
Every piping line of the plant.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/lines/v1; optional (a file without it reads as cheme/lines/v1). | |
lines |
list of Line |
JSON Schema: cheme schema lines
{
"$defs": {
"Line": {
"additionalProperties": false,
"description": "One piping line. ``number`` must match a line number on a P&ID.\n\n``nominal_diameter`` is the line's DN; a line whose segments differ (after a reducer, a\nbranch) lists them under ``segments``, each with its own DN.",
"properties": {
"number": {
"title": "Number",
"type": "string"
},
"from": {
"description": "Equipment or nozzle tag the line starts at.",
"title": "From",
"type": "string"
},
"to": {
"title": "To",
"type": "string"
},
"nominal_diameter": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. DN80.",
"title": "Nominal Diameter"
},
"pressure_class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. PN16.",
"title": "Pressure Class"
},
"fluid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Fluid"
},
"insulation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Insulation"
},
"sheet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sheet"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"segments": {
"description": "Segments with their own DN, by SegmentNumber.",
"items": {
"$ref": "#/$defs/LineSegment"
},
"title": "Segments",
"type": "array"
},
"from_area": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Layout area the start is in, when it is no placed item (e.g. a vent area).",
"title": "From Area"
},
"to_area": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Layout area the end is in, when it is no placed item.",
"title": "To Area"
}
},
"required": [
"number",
"from",
"to"
],
"title": "Line",
"type": "object"
},
"LineSegment": {
"additionalProperties": false,
"description": "One segment of a line, by the SegmentNumber its PipingNetworkSegment carries (e.g. S2).",
"properties": {
"number": {
"description": "SegmentNumber on the P&ID, e.g. S2.",
"title": "Number",
"type": "string"
},
"nominal_diameter": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. DN50.",
"title": "Nominal Diameter"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"number"
],
"title": "LineSegment",
"type": "object"
}
},
"additionalProperties": false,
"description": "Every piping line of the plant.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/lines/v1; optional (a file without it reads as cheme/lines/v1).",
"title": "Schema"
},
"lines": {
"items": {
"$ref": "#/$defs/Line"
},
"title": "Lines",
"type": "array"
}
},
"title": "LineList",
"type": "object"
}
instruments¶
File: control/instrument-list.yaml. Model: chemeascode.domains.piping.schemas.lines.InstrumentList.
Every instrument function of the plant.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/instruments/v1; optional (a file without it reads as cheme/instruments/v1). | |
instruments |
list of Instrument |
JSON Schema: cheme schema instruments
{
"$defs": {
"Instrument": {
"additionalProperties": false,
"description": "One instrument function. ``tag`` as printed, e.g. PICSA-4712.02.",
"properties": {
"tag": {
"title": "Tag",
"type": "string"
},
"service": {
"default": "",
"title": "Service",
"type": "string"
},
"sheet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sheet"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"tag"
],
"title": "Instrument",
"type": "object"
}
},
"additionalProperties": false,
"description": "Every instrument function of the plant.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/instruments/v1; optional (a file without it reads as cheme/instruments/v1).",
"title": "Schema"
},
"instruments": {
"items": {
"$ref": "#/$defs/Instrument"
},
"title": "Instruments",
"type": "array"
}
},
"title": "InstrumentList",
"type": "object"
}
piping_items¶
File: piping/special-items.yaml. Model: chemeascode.domains.piping.schemas.piping_items.PipingItemList.
Tagged piping components: relief devices, silencers, other special items.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/piping_items/v1; optional (a file without it reads as cheme/piping_items/v1). | |
piping_items |
list of PipingItem |
JSON Schema: cheme schema piping_items
{
"$defs": {
"PipingItem": {
"additionalProperties": false,
"description": "One tagged piping component. ``tag`` as the P&ID prints it (PipingComponentNumber, else\nPositionNumber, else PipingComponentName; a segment-local C1 is no tag), e.g. PSV-4122 or\nS-4101.",
"properties": {
"tag": {
"title": "Tag",
"type": "string"
},
"type": {
"description": "DEXPI class, e.g. SpringLoadedGlobeSafetyValve, Silencer.",
"title": "Type",
"type": "string"
},
"line": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Line number it sits on.",
"title": "Line"
},
"sheet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Sheet id it is drawn on.",
"title": "Sheet"
},
"set_pressure_barg": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Relief devices.",
"title": "Set Pressure Barg"
},
"relief_case": {
"default": "",
"description": "Governing relief case, for relief devices.",
"title": "Relief Case",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"tag",
"type"
],
"title": "PipingItem",
"type": "object"
}
},
"additionalProperties": false,
"description": "Tagged piping components: relief devices, silencers, other special items.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/piping_items/v1; optional (a file without it reads as cheme/piping_items/v1).",
"title": "Schema"
},
"piping_items": {
"items": {
"$ref": "#/$defs/PipingItem"
},
"title": "Piping Items",
"type": "array"
}
},
"title": "PipingItemList",
"type": "object"
}
interlocks¶
File: control/cause-effect.yaml. Model: chemeascode.domains.control.schemas.InterlockList.
The cause-and-effect list of the plant.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/interlocks/v1; optional (a file without it reads as cheme/interlocks/v1). | |
interlocks |
list of Interlock |
JSON Schema: cheme schema interlocks
{
"$defs": {
"Amount": {
"additionalProperties": false,
"description": "A value with its unit, e.g. a delay of 5 s or a dead band of 2 %.",
"properties": {
"value": {
"minimum": 0,
"title": "Value",
"type": "number"
},
"unit": {
"description": "e.g. s, min, %, K, bar.",
"minLength": 1,
"title": "Unit",
"type": "string"
}
},
"required": [
"value",
"unit"
],
"title": "Amount",
"type": "object"
},
"Cause": {
"additionalProperties": false,
"description": "What starts the interlock: an instrument and the condition, e.g. LIA-4108 at LALL.",
"properties": {
"tag": {
"description": "Printed instrument tag (or another tag), e.g. LIA-4108.",
"title": "Tag",
"type": "string"
},
"condition": {
"default": "",
"description": "e.g. LALL, HH, TSHH, 'loss of seal gas'.",
"title": "Condition",
"type": "string"
}
},
"required": [
"tag"
],
"title": "Cause",
"type": "object"
},
"Condition": {
"additionalProperties": false,
"description": "A condition: one item in a state, or ``all``/``any``/``vote`` of conditions. Logic the\nformat does not model is written as ``text`` (reported, never interpreted); a condition\nnot known yet is ``unresolved``. Exactly one of item, ``all``, ``any``, ``vote``,\n``text`` and ``unresolved``; an item is one of ``tag``, ``loop``, ``interlock``,\n``sequence`` or ``step`` (a step of the same sequence) with its ``state``.",
"properties": {
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "An instrument or equipment tag, e.g. LT-101.",
"title": "Tag"
},
"loop": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A loop id of control/loops.yaml.",
"title": "Loop"
},
"interlock": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "An interlock id of control/cause-effect.yaml.",
"title": "Interlock"
},
"sequence": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A sequence id of control/sequences.yaml.",
"title": "Sequence"
},
"step": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A step of the same sequence.",
"title": "Step"
},
"state": {
"default": "",
"description": "The state of the item, e.g. LAH, running, closed, 'in auto', '> 40 %', healthy, reset, complete.",
"title": "State",
"type": "string"
},
"all": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/Condition"
},
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "All"
},
"any": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/Condition"
},
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Any"
},
"vote": {
"anyOf": [
{
"$ref": "#/$defs/Vote"
},
{
"type": "null"
}
],
"default": null
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Logic the format does not model, in words (not checked).",
"title": "Text"
},
"unresolved": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Not known yet: what is missing (a draft finding).",
"title": "Unresolved"
},
"delay": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "The condition must hold this long (on-delay)."
},
"deadband": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Hysteresis: how far it must come back before it clears."
}
},
"title": "Condition",
"type": "object"
},
"Effect": {
"additionalProperties": false,
"description": "What the interlock does to one item.",
"properties": {
"tag": {
"description": "Equipment, valve or instrument tag, e.g. XV-4137.",
"title": "Tag",
"type": "string"
},
"action": {
"enum": [
"trip",
"stop",
"start",
"close",
"open",
"depressurize",
"alarm"
],
"title": "Action",
"type": "string"
}
},
"required": [
"tag",
"action"
],
"title": "Effect",
"type": "object"
},
"Interlock": {
"additionalProperties": false,
"description": "One interlock (a candidate safety instrumented function).",
"properties": {
"id": {
"description": "Interlock id, e.g. I-07; sheets refer to it ('see C&E I-07').",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"cause": {
"$ref": "#/$defs/Cause"
},
"effects": {
"items": {
"$ref": "#/$defs/Effect"
},
"minItems": 1,
"title": "Effects",
"type": "array"
},
"sheet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sheet"
},
"sil": {
"anyOf": [
{
"enum": [
0,
1,
2,
3,
4,
"a"
]
},
{
"type": "null"
}
],
"default": null,
"description": "SIL from screening, if done (IEC 61511): 1 to 4; 0 or 'a' for a function screened without a SIL requirement. 'SIL 2' is read as 2, an empty string as none.",
"title": "Sil"
},
"logic": {
"anyOf": [
{
"$ref": "#/$defs/Condition"
},
{
"type": "null"
}
],
"default": null,
"description": "The trip condition when it is more than the cause alone: all/any/vote of conditions (2oo3), with delays; the cause stays the row of the matrix."
},
"delay": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Trip delay (on-delay of the cause)."
},
"latching": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "True: the trip stays until reset; omitted: not stated yet.",
"title": "Latching"
},
"reset": {
"anyOf": [
{
"enum": [
"manual",
"automatic"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How the trip is reset once the cause has cleared.",
"title": "Reset"
},
"bypass": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether and how the trip may be bypassed or inhibited (e.g. a startup override with a timer and a permit); not a log of bypasses.",
"title": "Bypass"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"cause",
"effects"
],
"title": "Interlock",
"type": "object"
},
"Vote": {
"additionalProperties": false,
"description": "``k`` out of the conditions ``of`` (2oo3: ``{k: 2, of: [a, b, c]}``).",
"properties": {
"k": {
"minimum": 1,
"title": "K",
"type": "integer"
},
"of": {
"items": {
"$ref": "#/$defs/Condition"
},
"minItems": 2,
"title": "Of",
"type": "array"
}
},
"required": [
"k",
"of"
],
"title": "Vote",
"type": "object"
}
},
"additionalProperties": false,
"description": "The cause-and-effect list of the plant.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/interlocks/v1; optional (a file without it reads as cheme/interlocks/v1).",
"title": "Schema"
},
"interlocks": {
"items": {
"$ref": "#/$defs/Interlock"
},
"title": "Interlocks",
"type": "array"
}
},
"title": "InterlockList",
"type": "object"
}
loops¶
File: control/loops.yaml. Model: chemeascode.domains.control.schemas.LoopList.
The control loop register: regulatory loops.
Each with its measurements, final elements, targets, modes and links.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/loops/v1; optional (a file without it reads as cheme/loops/v1). | |
loops |
list of Loop | |||
basis |
list of Basis | Engineering inputs the register rests on, each at the revision used; a changed one is cheme.control-stale. | ||
notes |
string | "" |
JSON Schema: cheme schema loops
{
"$defs": {
"Alarm": {
"additionalProperties": false,
"description": "A process alarm of the loop and what the operator does on it. A trip belongs in the\ncause and effect list, not here.",
"properties": {
"tag": {
"description": "Instrument tag, e.g. LT-101 or LAH-101.",
"title": "Tag",
"type": "string"
},
"condition": {
"description": "e.g. LAH, PAL, 'deviation'.",
"minLength": 1,
"title": "Condition",
"type": "string"
},
"limit": {
"anyOf": [
{
"$ref": "#/$defs/Target"
},
{
"type": "null"
}
],
"default": null
},
"priority": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Priority"
},
"response": {
"default": "",
"description": "What the operator does.",
"title": "Response",
"type": "string"
}
},
"required": [
"tag",
"condition"
],
"title": "Alarm",
"type": "object"
},
"Amount": {
"additionalProperties": false,
"description": "A value with its unit, e.g. a delay of 5 s or a dead band of 2 %.",
"properties": {
"value": {
"minimum": 0,
"title": "Value",
"type": "number"
},
"unit": {
"description": "e.g. s, min, %, K, bar.",
"minLength": 1,
"title": "Unit",
"type": "string"
}
},
"required": [
"value",
"unit"
],
"title": "Amount",
"type": "object"
},
"Basis": {
"additionalProperties": false,
"description": "One source an artifact rests on, at the revision it was looked at.",
"properties": {
"path": {
"description": "File or directory from the repository root (process/).",
"minLength": 1,
"title": "Path",
"type": "string"
},
"revision": {
"description": "A commit sha, or sha256:<hex> of the file's content, when it was used.",
"title": "Revision",
"type": "string"
},
"relation": {
"default": "depends-on",
"description": "derived-from, represents, analyses or depends-on.",
"enum": [
"derived-from",
"represents",
"analyses",
"depends-on"
],
"title": "Relation",
"type": "string"
}
},
"required": [
"path",
"revision"
],
"title": "Basis",
"type": "object"
},
"Condition": {
"additionalProperties": false,
"description": "A condition: one item in a state, or ``all``/``any``/``vote`` of conditions. Logic the\nformat does not model is written as ``text`` (reported, never interpreted); a condition\nnot known yet is ``unresolved``. Exactly one of item, ``all``, ``any``, ``vote``,\n``text`` and ``unresolved``; an item is one of ``tag``, ``loop``, ``interlock``,\n``sequence`` or ``step`` (a step of the same sequence) with its ``state``.",
"properties": {
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "An instrument or equipment tag, e.g. LT-101.",
"title": "Tag"
},
"loop": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A loop id of control/loops.yaml.",
"title": "Loop"
},
"interlock": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "An interlock id of control/cause-effect.yaml.",
"title": "Interlock"
},
"sequence": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A sequence id of control/sequences.yaml.",
"title": "Sequence"
},
"step": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A step of the same sequence.",
"title": "Step"
},
"state": {
"default": "",
"description": "The state of the item, e.g. LAH, running, closed, 'in auto', '> 40 %', healthy, reset, complete.",
"title": "State",
"type": "string"
},
"all": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/Condition"
},
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "All"
},
"any": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/Condition"
},
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Any"
},
"vote": {
"anyOf": [
{
"$ref": "#/$defs/Vote"
},
{
"type": "null"
}
],
"default": null
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Logic the format does not model, in words (not checked).",
"title": "Text"
},
"unresolved": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Not known yet: what is missing (a draft finding).",
"title": "Unresolved"
},
"delay": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "The condition must hold this long (on-delay)."
},
"deadband": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Hysteresis: how far it must come back before it clears."
}
},
"title": "Condition",
"type": "object"
},
"FinalElement": {
"additionalProperties": false,
"description": "What the controller output moves: a valve, a drive, a heater.",
"properties": {
"tag": {
"description": "Valve, drive or heater tag, e.g. FV-101, P-101A.",
"title": "Tag",
"type": "string"
},
"kind": {
"anyOf": [
{
"enum": [
"valve",
"drive",
"heater",
"damper",
"other"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Kind"
},
"actuator": {
"anyOf": [
{
"enum": [
"pneumatic",
"electric",
"hydraulic",
"other"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Actuator"
},
"fail": {
"anyOf": [
{
"enum": [
"open",
"closed",
"last",
"stop",
"off"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Position on loss of signal, power or air; omitted: not known yet.",
"title": "Fail"
},
"range": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Split range: the controller output, %, it acts on.",
"title": "Range"
},
"travel": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Its travel, %, over the range (default [0, 100]; [100, 0]: it closes as the output rises).",
"title": "Travel"
}
},
"required": [
"tag"
],
"title": "FinalElement",
"type": "object"
},
"Loop": {
"additionalProperties": false,
"description": "One regulatory control loop. It is not a safeguard: protective functions are the\ninterlocks of the cause and effect list, which ``interlocks`` refers to.",
"properties": {
"id": {
"description": "Stable loop id, usually the loop tag (FIC-101).",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"purpose": {
"default": "",
"title": "Purpose",
"type": "string"
},
"section": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Process section id of process/narrative.md.",
"title": "Section"
},
"cases": {
"description": "Operating cases it is designed for.",
"items": {
"type": "string"
},
"title": "Cases",
"type": "array"
},
"variable": {
"anyOf": [
{
"enum": [
"flow",
"level",
"temperature",
"pressure",
"composition",
"speed",
"ratio",
"other"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What it controls.",
"title": "Variable"
},
"measurement": {
"items": {
"$ref": "#/$defs/Measurement"
},
"title": "Measurement",
"type": "array"
},
"controller": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Controller tag where the P&ID shows one (FIC-101).",
"title": "Controller"
},
"action": {
"anyOf": [
{
"enum": [
"direct",
"reverse"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Controller action; omitted: not known yet.",
"title": "Action"
},
"final_elements": {
"items": {
"$ref": "#/$defs/FinalElement"
},
"title": "Final Elements",
"type": "array"
},
"targets": {
"items": {
"$ref": "#/$defs/Target"
},
"title": "Targets",
"type": "array"
},
"modes": {
"description": "The modes it has (manual, auto, cascade).",
"items": {
"enum": [
"manual",
"auto",
"cascade"
],
"type": "string"
},
"title": "Modes",
"type": "array"
},
"normal_mode": {
"anyOf": [
{
"enum": [
"manual",
"auto",
"cascade"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Normal Mode"
},
"transitions": {
"items": {
"$ref": "#/$defs/ModeTransition"
},
"title": "Transitions",
"type": "array"
},
"links": {
"items": {
"$ref": "#/$defs/LoopLink"
},
"title": "Links",
"type": "array"
},
"alarms": {
"items": {
"$ref": "#/$defs/Alarm"
},
"title": "Alarms",
"type": "array"
},
"interlocks": {
"description": "Related interlocks of control/cause-effect.yaml.",
"items": {
"type": "string"
},
"title": "Interlocks",
"type": "array"
},
"rationale": {
"default": "",
"description": "Why this loop, this pairing, these modes.",
"title": "Rationale",
"type": "string"
},
"operator": {
"default": "",
"description": "Judgement the operator has to make.",
"title": "Operator",
"type": "string"
},
"unresolved": {
"description": "What is still open (a draft finding each).",
"items": {
"type": "string"
},
"title": "Unresolved",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id"
],
"title": "Loop",
"type": "object"
},
"LoopLink": {
"additionalProperties": false,
"description": "How another loop or a measurement acts on this loop. ``cascade``: the output of\n``loop`` (the master) is this loop's setpoint. ``ratio``: the setpoint is ``ratio`` times\nthe flow of ``loop`` or ``tag``. ``feedforward``: the measured disturbance ``tag`` (or\n``loop``'s measurement) adds to the output. ``override``: this loop and ``loop`` drive the\nsame final element through a ``select`` (low or high) selector.",
"properties": {
"type": {
"enum": [
"cascade",
"ratio",
"feedforward",
"override"
],
"title": "Type",
"type": "string"
},
"loop": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Loop"
},
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tag"
},
"select": {
"anyOf": [
{
"enum": [
"low",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Override only.",
"title": "Select"
},
"ratio": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Ratio only.",
"title": "Ratio"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"type"
],
"title": "LoopLink",
"type": "object"
},
"Measurement": {
"additionalProperties": false,
"description": "A measurement of the controlled variable.",
"properties": {
"tag": {
"description": "Instrument tag, e.g. FT-101.",
"title": "Tag",
"type": "string"
},
"role": {
"default": "",
"description": "e.g. primary, compensation, redundant.",
"title": "Role",
"type": "string"
}
},
"required": [
"tag"
],
"title": "Measurement",
"type": "object"
},
"ModeTransition": {
"additionalProperties": false,
"description": "A change of controller mode and when it is made.",
"properties": {
"from": {
"enum": [
"manual",
"auto",
"cascade"
],
"title": "From",
"type": "string"
},
"to": {
"enum": [
"manual",
"auto",
"cascade"
],
"title": "To",
"type": "string"
},
"by": {
"anyOf": [
{
"enum": [
"operator",
"automatic"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "By"
},
"condition": {
"anyOf": [
{
"$ref": "#/$defs/Condition"
},
{
"type": "null"
}
],
"default": null
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"from",
"to"
],
"title": "ModeTransition",
"type": "object"
},
"Target": {
"additionalProperties": false,
"description": "A setpoint or a limit of a loop, a sequence or an alarm, with its unit and provenance.\n``value`` omitted: not known yet (say why in ``unresolved``). ``stream`` and ``property``\nname the operating-case value it is: ``cheme validate`` compares the two.",
"properties": {
"kind": {
"default": "setpoint",
"enum": [
"setpoint",
"low",
"high"
],
"title": "Kind",
"type": "string"
},
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Value"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Required with a value (%, kg/h, \u00b0C).",
"title": "Unit"
},
"provenance": {
"anyOf": [
{
"enum": [
"given",
"assumed",
"calculated"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Required with a value.",
"title": "Provenance"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Origin"
},
"modes": {
"description": "Operating modes it applies in (normal, startup, turndown, ...); empty: all.",
"items": {
"type": "string"
},
"title": "Modes",
"type": "array"
},
"cases": {
"description": "Operating cases (process/flowsheet.yaml cases[].id) it applies to.",
"items": {
"type": "string"
},
"title": "Cases",
"type": "array"
},
"stream": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The flowsheet stream whose case value it is.",
"title": "Stream"
},
"property": {
"anyOf": [
{
"enum": [
"flow",
"temperature",
"pressure"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Which value of the stream (with stream).",
"title": "Property"
},
"unresolved": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Why the value is not known yet.",
"title": "Unresolved"
}
},
"title": "Target",
"type": "object"
},
"Vote": {
"additionalProperties": false,
"description": "``k`` out of the conditions ``of`` (2oo3: ``{k: 2, of: [a, b, c]}``).",
"properties": {
"k": {
"minimum": 1,
"title": "K",
"type": "integer"
},
"of": {
"items": {
"$ref": "#/$defs/Condition"
},
"minItems": 2,
"title": "Of",
"type": "array"
}
},
"required": [
"k",
"of"
],
"title": "Vote",
"type": "object"
}
},
"additionalProperties": false,
"description": "The control loop register: regulatory loops.\n\nEach with its measurements, final elements, targets, modes and links.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/loops/v1; optional (a file without it reads as cheme/loops/v1).",
"title": "Schema"
},
"loops": {
"items": {
"$ref": "#/$defs/Loop"
},
"title": "Loops",
"type": "array"
},
"basis": {
"description": "Engineering inputs the register rests on, each at the revision used; a changed one is cheme.control-stale.",
"items": {
"$ref": "#/$defs/Basis"
},
"title": "Basis",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "LoopList",
"type": "object"
}
sequences¶
File: control/sequences.yaml. Model: chemeascode.domains.control.schemas.SequenceList.
Operating sequences: startup, shutdown, abnormal modes.
Each with its permissives, steps, abort and reset behaviour.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/sequences/v1; optional (a file without it reads as cheme/sequences/v1). | |
sequences |
list of Sequence | |||
basis |
list of Basis | As in control/loops.yaml. | ||
notes |
string | "" |
JSON Schema: cheme schema sequences
{
"$defs": {
"Abort": {
"additionalProperties": false,
"description": "What happens when the sequence is aborted: on ``condition``, on a trip of one of the\nsequence's interlocks, or by the operator.",
"properties": {
"condition": {
"anyOf": [
{
"$ref": "#/$defs/Condition"
},
{
"type": "null"
}
],
"default": null
},
"actions": {
"items": {
"$ref": "#/$defs/SequenceAction"
},
"title": "Actions",
"type": "array"
},
"then": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A sequence to run next.",
"title": "Then"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "Abort",
"type": "object"
},
"Amount": {
"additionalProperties": false,
"description": "A value with its unit, e.g. a delay of 5 s or a dead band of 2 %.",
"properties": {
"value": {
"minimum": 0,
"title": "Value",
"type": "number"
},
"unit": {
"description": "e.g. s, min, %, K, bar.",
"minLength": 1,
"title": "Unit",
"type": "string"
}
},
"required": [
"value",
"unit"
],
"title": "Amount",
"type": "object"
},
"Basis": {
"additionalProperties": false,
"description": "One source an artifact rests on, at the revision it was looked at.",
"properties": {
"path": {
"description": "File or directory from the repository root (process/).",
"minLength": 1,
"title": "Path",
"type": "string"
},
"revision": {
"description": "A commit sha, or sha256:<hex> of the file's content, when it was used.",
"title": "Revision",
"type": "string"
},
"relation": {
"default": "depends-on",
"description": "derived-from, represents, analyses or depends-on.",
"enum": [
"derived-from",
"represents",
"analyses",
"depends-on"
],
"title": "Relation",
"type": "string"
}
},
"required": [
"path",
"revision"
],
"title": "Basis",
"type": "object"
},
"Condition": {
"additionalProperties": false,
"description": "A condition: one item in a state, or ``all``/``any``/``vote`` of conditions. Logic the\nformat does not model is written as ``text`` (reported, never interpreted); a condition\nnot known yet is ``unresolved``. Exactly one of item, ``all``, ``any``, ``vote``,\n``text`` and ``unresolved``; an item is one of ``tag``, ``loop``, ``interlock``,\n``sequence`` or ``step`` (a step of the same sequence) with its ``state``.",
"properties": {
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "An instrument or equipment tag, e.g. LT-101.",
"title": "Tag"
},
"loop": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A loop id of control/loops.yaml.",
"title": "Loop"
},
"interlock": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "An interlock id of control/cause-effect.yaml.",
"title": "Interlock"
},
"sequence": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A sequence id of control/sequences.yaml.",
"title": "Sequence"
},
"step": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A step of the same sequence.",
"title": "Step"
},
"state": {
"default": "",
"description": "The state of the item, e.g. LAH, running, closed, 'in auto', '> 40 %', healthy, reset, complete.",
"title": "State",
"type": "string"
},
"all": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/Condition"
},
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "All"
},
"any": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/Condition"
},
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Any"
},
"vote": {
"anyOf": [
{
"$ref": "#/$defs/Vote"
},
{
"type": "null"
}
],
"default": null
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Logic the format does not model, in words (not checked).",
"title": "Text"
},
"unresolved": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Not known yet: what is missing (a draft finding).",
"title": "Unresolved"
},
"delay": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "The condition must hold this long (on-delay)."
},
"deadband": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Hysteresis: how far it must come back before it clears."
}
},
"title": "Condition",
"type": "object"
},
"Reset": {
"additionalProperties": false,
"description": "Reset and restart after an abort or a trip.",
"properties": {
"latching": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "True: the abort stays until reset; omitted: not stated.",
"title": "Latching"
},
"manual": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "True: the operator resets it.",
"title": "Manual"
},
"condition": {
"anyOf": [
{
"$ref": "#/$defs/Condition"
},
{
"type": "null"
}
],
"default": null,
"description": "What must hold to reset."
},
"restart": {
"anyOf": [
{
"$ref": "#/$defs/Condition"
},
{
"type": "null"
}
],
"default": null,
"description": "What must hold to restart."
}
},
"title": "Reset",
"type": "object"
},
"Sequence": {
"additionalProperties": false,
"description": "A startup, shutdown or abnormal-mode sequence. Start ``permissives`` are separate from\ntrips: the trips are the C&E interlocks named in ``interlocks``, not repeated here.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"mode": {
"enum": [
"startup",
"shutdown",
"abnormal",
"normal",
"other"
],
"title": "Mode",
"type": "string"
},
"section": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Section of the narrative.",
"title": "Section"
},
"cases": {
"items": {
"type": "string"
},
"title": "Cases",
"type": "array"
},
"equipment": {
"description": "Tags it operates.",
"items": {
"type": "string"
},
"title": "Equipment",
"type": "array"
},
"permissives": {
"description": "What must hold before it may start.",
"items": {
"$ref": "#/$defs/Condition"
},
"title": "Permissives",
"type": "array"
},
"interlocks": {
"description": "C&E interlocks that protect it (by id).",
"items": {
"type": "string"
},
"title": "Interlocks",
"type": "array"
},
"steps": {
"items": {
"$ref": "#/$defs/Step"
},
"title": "Steps",
"type": "array"
},
"abort": {
"anyOf": [
{
"$ref": "#/$defs/Abort"
},
{
"type": "null"
}
],
"default": null
},
"reset": {
"anyOf": [
{
"$ref": "#/$defs/Reset"
},
{
"type": "null"
}
],
"default": null
},
"unresolved": {
"items": {
"type": "string"
},
"title": "Unresolved",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"mode"
],
"title": "Sequence",
"type": "object"
},
"SequenceAction": {
"additionalProperties": false,
"description": "One action of a step: a tag started, stopped, opened or closed; a loop put in a mode\nor given a setpoint; another sequence run; or ``text`` (not modelled).",
"properties": {
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tag"
},
"loop": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Loop"
},
"sequence": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sequence"
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Text"
},
"action": {
"anyOf": [
{
"enum": [
"start",
"stop",
"open",
"close",
"manual",
"auto",
"cascade",
"setpoint",
"run"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Action"
},
"setpoint": {
"anyOf": [
{
"$ref": "#/$defs/Target"
},
{
"type": "null"
}
],
"default": null,
"description": "action: setpoint."
},
"by": {
"anyOf": [
{
"enum": [
"operator",
"automatic"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "By"
}
},
"title": "SequenceAction",
"type": "object"
},
"Step": {
"additionalProperties": false,
"description": "One step of a sequence: entered when ``entry`` holds (and the step before is\ncomplete), its actions made, done when ``complete`` holds.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"entry": {
"anyOf": [
{
"$ref": "#/$defs/Condition"
},
{
"type": "null"
}
],
"default": null
},
"actions": {
"items": {
"$ref": "#/$defs/SequenceAction"
},
"title": "Actions",
"type": "array"
},
"complete": {
"anyOf": [
{
"$ref": "#/$defs/Condition"
},
{
"type": "null"
}
],
"default": null
},
"timeout": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null
},
"on_timeout": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A step id, or abort, when the step times out.",
"title": "On Timeout"
},
"next": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The next step (default: the one below; end: the last).",
"title": "Next"
},
"operator": {
"default": "",
"description": "Instructions and judgement for the operator.",
"title": "Operator",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id"
],
"title": "Step",
"type": "object"
},
"Target": {
"additionalProperties": false,
"description": "A setpoint or a limit of a loop, a sequence or an alarm, with its unit and provenance.\n``value`` omitted: not known yet (say why in ``unresolved``). ``stream`` and ``property``\nname the operating-case value it is: ``cheme validate`` compares the two.",
"properties": {
"kind": {
"default": "setpoint",
"enum": [
"setpoint",
"low",
"high"
],
"title": "Kind",
"type": "string"
},
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Value"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Required with a value (%, kg/h, \u00b0C).",
"title": "Unit"
},
"provenance": {
"anyOf": [
{
"enum": [
"given",
"assumed",
"calculated"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Required with a value.",
"title": "Provenance"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Origin"
},
"modes": {
"description": "Operating modes it applies in (normal, startup, turndown, ...); empty: all.",
"items": {
"type": "string"
},
"title": "Modes",
"type": "array"
},
"cases": {
"description": "Operating cases (process/flowsheet.yaml cases[].id) it applies to.",
"items": {
"type": "string"
},
"title": "Cases",
"type": "array"
},
"stream": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The flowsheet stream whose case value it is.",
"title": "Stream"
},
"property": {
"anyOf": [
{
"enum": [
"flow",
"temperature",
"pressure"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Which value of the stream (with stream).",
"title": "Property"
},
"unresolved": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Why the value is not known yet.",
"title": "Unresolved"
}
},
"title": "Target",
"type": "object"
},
"Vote": {
"additionalProperties": false,
"description": "``k`` out of the conditions ``of`` (2oo3: ``{k: 2, of: [a, b, c]}``).",
"properties": {
"k": {
"minimum": 1,
"title": "K",
"type": "integer"
},
"of": {
"items": {
"$ref": "#/$defs/Condition"
},
"minItems": 2,
"title": "Of",
"type": "array"
}
},
"required": [
"k",
"of"
],
"title": "Vote",
"type": "object"
}
},
"additionalProperties": false,
"description": "Operating sequences: startup, shutdown, abnormal modes.\n\nEach with its permissives, steps, abort and reset behaviour.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/sequences/v1; optional (a file without it reads as cheme/sequences/v1).",
"title": "Schema"
},
"sequences": {
"items": {
"$ref": "#/$defs/Sequence"
},
"title": "Sequences",
"type": "array"
},
"basis": {
"description": "As in control/loops.yaml.",
"items": {
"$ref": "#/$defs/Basis"
},
"title": "Basis",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "SequenceList",
"type": "object"
}
checks¶
File: checks/checks.yaml. Model: chemeascode.foundation.schemas.checks.CheckList.
Every gate of the plant.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/checks/v1; optional (a file without it reads as cheme/checks/v1). | |
checks |
list of Check | |||
accept |
list of Accept | Warnings and infos accepted everywhere: cheme validate reports them as info with the reason, and no gate fails on them. Errors are never accepted. |
JSON Schema: cheme schema checks
{
"$defs": {
"Accept": {
"additionalProperties": false,
"description": "A validate finding accepted on purpose (e.g. a crossing that cannot be avoided).",
"properties": {
"id": {
"description": "The finding's id as `cheme validate --json` prints it, e.g. pid/P-03.xml#line-crossing:Line_A_S1_P1+Line_B_S1_P1; * and ? match any text.",
"title": "Id",
"type": "string"
},
"reason": {
"description": "Why it is accepted, and by whom.",
"minLength": 3,
"title": "Reason",
"type": "string"
}
},
"required": [
"id",
"reason"
],
"title": "Accept",
"type": "object"
},
"Check": {
"additionalProperties": false,
"description": "One gate. Exactly one of its kinds is evaluated.\n\n``validate``: no finding of the selected ``rules`` (default: all) at ``fail_on`` or above\n(default: error) that is not accepted, and a built sheet of each ``generated`` kind (bfd,\npfd). ``files``: every glob matches a file. ``command``: a\nshell command, run at the repository root, exits with 0. ``on-sheet``: the tags (and\nclasses) are drawn on the sheet(s), found by their printed tags in the loaded model, not by\ntext. ``review``: a review record with front\nmatter covers the current drawings and was written by an allowed kind of reviewer.\n``datasheets``: every equipment-list item has a valid ``equipment/datasheets/<TAG>.yaml``.\n``process-links``: every link of the process flowsheet (blocks, steps, streams, feeds,\nproducts) resolves against the equipment, line and instrument lists and the sheets; at\n``level: warning`` unresolved links are reported and the gate passes, at ``error`` it fails.\n``layout-model``: the 3D layout and its generated model meet each of ``require`` (site,\nareas, roads, racks, placed, separations, model-current, nozzles, mounted, routed, clashes,\nzones, drawings, cables, trays, hvac, lifting, lifting-current; see\n``chemeascode.domains.spatial.gates``). ``mto``: the material take-off and the estimates meet\neach of ``require`` (mto-current, rates, estimate-current, equipment-current,\nequipment-covered; see ``chemeascode.domains.assessment.gates``). ``lca`` and ``tea``: the\nLCA and the techno-economic analysis meet each of ``require`` (see\n``chemeascode.domains.assessment.lca.gates`` and ``.tea.gates``). ``datasheets``: a datasheet\nstill marked ``draft: true`` does not count; with ``require`` (dimensions, weights, nozzles,\ndrawing-current; see ``chemeascode.domains.equipment.datasheets.datasheet_gate``) each valid\ndatasheet must also meet those. ``hazop``: every HAZOP study (or those ``files`` names)\nmeets each of ``require`` (see ``chemeascode.project.hazop``). ``maturity``: the calculation\nmaturity level ``cheme maturity`` computes reaches the one level in ``require`` (sourced,\nbalanced, predictive, engineering), and with ``max_claim`` the process.yaml design maturity\nclaim does not exceed the evidence (see ``chemeascode.project.maturity.maturity_gate``).\n``issues``: no issue of the plant (``plant.yaml`` ``issues:``) with a ``gate:`` at or before\nthis stage is open (of ``types``, default all; see ``chemeascode.project.issues``); n/a\nwithout ``issues:``.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"stage": {
"description": "Stage id from plant.yaml this check gates.",
"title": "Stage",
"type": "string"
},
"kind": {
"enum": [
"validate",
"files",
"command",
"on-sheet",
"review",
"datasheets",
"process-links",
"layout-model",
"mto",
"lca",
"tea",
"hazop",
"maturity",
"issues"
],
"title": "Kind",
"type": "string"
},
"level": {
"default": "error",
"description": "kind=process-links: warning reports unresolved links and passes; error fails (typically warning at concept, error at basic).",
"enum": [
"warning",
"error"
],
"title": "Level",
"type": "string"
},
"files": {
"description": "Globs, for kind=files (kind=review: the records to consider).",
"items": {
"type": "string"
},
"title": "Files",
"type": "array"
},
"command": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Shell command, for kind=command.",
"title": "Command"
},
"applies": {
"default": true,
"description": "False marks the check not applicable.",
"title": "Applies",
"type": "boolean"
},
"fail_on": {
"default": "error",
"description": "kind=validate: the lowest finding level that fails the gate.",
"enum": [
"error",
"warning",
"info"
],
"title": "Fail On",
"type": "string"
},
"rules": {
"description": "kind=validate: only these rule ids count (* and ? match); empty: all. One that matches cheme.generated-sheet-drift also matches cheme.generator-failed.",
"items": {
"type": "string"
},
"title": "Rules",
"type": "array"
},
"accept": {
"description": "kind=validate: findings this gate accepts, each with a reason.",
"items": {
"$ref": "#/$defs/Accept"
},
"title": "Accept",
"type": "array"
},
"generated": {
"description": "kind=validate: generated sheet kinds the gate also requires: plant.yaml declares a sheet of each kind and its file has been built (`cheme process build`).",
"items": {
"enum": [
"bfd",
"pfd"
],
"type": "string"
},
"title": "Generated",
"type": "array"
},
"sheet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "kind=on-sheet: sheet id (P-03) or file; omitted: any sheet.",
"title": "Sheet"
},
"sheets": {
"description": "kind=on-sheet: several sheets, each must hold them.",
"items": {
"type": "string"
},
"title": "Sheets",
"type": "array"
},
"tags": {
"description": "kind=on-sheet: printed tags that must be drawn (equipment, instrument, piping component or line number).",
"items": {
"type": "string"
},
"title": "Tags",
"type": "array"
},
"classes": {
"description": "kind=on-sheet: DEXPI classes of which at least min_count must be drawn (a class also matches its subclasses and classes ending with its name).",
"items": {
"type": "string"
},
"title": "Classes",
"type": "array"
},
"min_count": {
"default": 1,
"description": "kind=on-sheet: per class.",
"minimum": 1,
"title": "Min Count",
"type": "integer"
},
"connected": {
"default": false,
"description": "kind=on-sheet: the items must be connected (a nozzle piped, an instrument with a measuring/signal line, a valve on a segment).",
"title": "Connected",
"type": "boolean"
},
"require": {
"description": "kind=layout-model: what the layout must meet (rules and accept: the model findings `clashes` fails on, default cheme.layout-clash-* and -headroom; topic: the review record `drawings` reads, default layout; cables: a cable to every motor and instrument, routed in trays; trays: tray fill and separation; hvac: ducts for the clad buildings within their velocity limits; lifting: a crane, a clear lane, a laydown and, with crane charts, the capacity for every heavy item; lifting-current: layout/lifting-study.csv, and .md when written, current). kind=mto: mto-current, rates, estimate-current, equipment-current (estimate/equipment-cost.csv current), equipment-covered (every listed item costed by a correlation or the project's own cost). kind=lca: mapped, factors, no-gaps (no exchange without a burden: lca/gaps.csv empty), factors-published (every exchange's factor status PUBLISHED, EPD, a background database's or none: no example, ASSUMED, PROXY, ESTIMATE or gap), publishable (every source public, or restricted with a reviewed decision), lci-documented (lca/dataset.yaml gives the publication minimum of its documentation), cutoff-criteria (the dataset's cut flows meet the 1 % rules and the never-cut list, no credit in a cut-off model, every replaced consumable disposed), lci-emissions-complete (every combustion unit, fuel feed, flare, storage tank and untreated wastewater outlet has an emission estimate or a declared exclusion), lci-mass-balance, lci-element-balance and lci-carbon-origin (the dataset closes in mass, in each element and in carbon by origin within 1 % for a simulated, 5 % for a sourced screening dataset), lca-current. kind=tea: prices (every flow priced or listed free), no-example, class-stage (the estimate class the stage expects), decision (stated and met), tea-current. kind=datasheets (optional): dimensions (the main dimensions of each item's family), weights (empty, operating, and test for a pressure-containing item), nozzle-schedule (every nozzle with a DN and a location), drawing-current (each outline drawing equipment/datasheets/<TAG>.svg what cheme datasheets drawing writes). kind=hazop (files: the study files it covers, default all): assessed (nothing unresolved), reviewed (a current human review record), inputs-current, actions-closed (every action closed or rejected), no-example (neither study nor matrix example data). kind=maturity: one level the computed calculation maturity must reach: sourced, balanced, predictive or engineering (engineering runs the whole-repository validation).",
"items": {
"enum": [
"site",
"areas",
"roads",
"racks",
"placed",
"separations",
"model-current",
"nozzles",
"mounted",
"routed",
"clashes",
"zones",
"drawings",
"cables",
"trays",
"hvac",
"lifting",
"lifting-current",
"mto-current",
"rates",
"estimate-current",
"equipment-current",
"equipment-covered",
"mapped",
"factors",
"no-gaps",
"factors-published",
"publishable",
"lci-documented",
"cutoff-criteria",
"lci-emissions-complete",
"lci-mass-balance",
"lci-element-balance",
"lci-carbon-origin",
"lca-current",
"prices",
"no-example",
"class-stage",
"decision",
"tea-current",
"dimensions",
"weights",
"nozzle-schedule",
"drawing-current",
"assessed",
"reviewed",
"inputs-current",
"actions-closed",
"sourced",
"balanced",
"predictive",
"engineering"
],
"type": "string"
},
"title": "Require",
"type": "array"
},
"max_claim": {
"default": false,
"description": "kind=maturity: also fail when process.yaml claims a design maturity above what the checked evidence supports (cheme.maturity-claim-exceeds).",
"title": "Max Claim",
"type": "boolean"
},
"min_dn": {
"default": 25.0,
"description": "kind=layout-model, routed: lines below this DN need no route.",
"minimum": 0,
"title": "Min Dn",
"type": "number"
},
"exclude_lines": {
"description": "kind=layout-model, routed: line number patterns (CW-*, or a prefix) that need no route at this stage (utilities at basic engineering).",
"items": {
"type": "string"
},
"title": "Exclude Lines",
"type": "array"
},
"exclude_fluids": {
"description": "kind=layout-model, routed: line-list fluids that need no route yet.",
"items": {
"type": "string"
},
"title": "Exclude Fluids",
"type": "array"
},
"sections": {
"default": 2,
"description": "kind=layout-model, drawings: sections the layout review must cite.",
"minimum": 0,
"title": "Sections",
"type": "integer"
},
"types": {
"description": "kind=issues: the issue types that block (action, hold, tq, change); empty: all. The gate fails while an issue of the plant (plant.yaml issues:) labelled gate:<this stage or an earlier one> is open; without a GitHub token it fails as not evaluated.",
"items": {
"enum": [
"action",
"hold",
"tq",
"change"
],
"type": "string"
},
"title": "Types",
"type": "array"
},
"topic": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "kind=review: the records' front matter topic.",
"title": "Topic"
},
"require_kind": {
"description": "kind=review: reviewer kinds that pass (default human and agent: a self review does not).",
"items": {
"enum": [
"human",
"agent",
"self"
],
"type": "string"
},
"title": "Require Kind",
"type": "array"
},
"current": {
"default": true,
"description": "kind=review: fail when a file in the record's scope changed after its reviewed_commit (a change of nothing but full sha256 or commit digests, such as a regenerated output's source fingerprint, does not count).",
"title": "Current",
"type": "boolean"
}
},
"required": [
"id",
"title",
"stage",
"kind"
],
"title": "Check",
"type": "object"
}
},
"additionalProperties": false,
"description": "Every gate of the plant.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/checks/v1; optional (a file without it reads as cheme/checks/v1).",
"title": "Schema"
},
"checks": {
"items": {
"$ref": "#/$defs/Check"
},
"title": "Checks",
"type": "array"
},
"accept": {
"description": "Warnings and infos accepted everywhere: `cheme validate` reports them as info with the reason, and no gate fails on them. Errors are never accepted.",
"items": {
"$ref": "#/$defs/Accept"
},
"title": "Accept",
"type": "array"
}
},
"title": "CheckList",
"type": "object"
}
rates¶
File: estimate/rates.yaml. Model: chemeascode.domains.assessment.schemas.RateFile.
estimate/rates.yaml: the project's unit rates and estimate factors.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/rates/v1; optional (a file without it reads as cheme/rates/v1). | |
currency |
string | yes | ISO 4217 code (XXX: no currency, an example). | |
cost_year |
integer | yes | The year the estimate is priced in. | |
example |
boolean | false |
True marks example numbers that price nothing: the estimate warns, and a gate requiring rates fails, until the project replaces them. | |
basis |
string or null | null |
What the estimate is for, its class. | |
rates |
list of Rate | |||
factors |
list of Factor |
JSON Schema: cheme schema rates
{
"$defs": {
"Factor": {
"additionalProperties": false,
"description": "One factor of the factor method.\n\n``direct``: ``factor`` x the material cost of the categories in ``applies_to`` (all when\nempty),\ne.g. erection of piping. ``indirect``: ``factor`` x the direct cost (materials plus the\ndirect factors), e.g. engineering. ``contingency``: ``factor`` x direct plus indirect cost.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"kind": {
"enum": [
"direct",
"indirect",
"contingency"
],
"title": "Kind",
"type": "string"
},
"factor": {
"minimum": 0,
"title": "Factor",
"type": "number"
},
"applies_to": {
"description": "kind=direct: the categories whose material cost it multiplies (all when empty).",
"items": {
"enum": [
"pipe",
"elbow",
"tee",
"reducer",
"flange",
"gasket",
"valve",
"inline",
"steel",
"grating",
"insulation",
"concrete"
],
"type": "string"
},
"title": "Applies To",
"type": "array"
},
"status": {
"default": "ASSUMED",
"enum": [
"ASSUMED",
"QUOTED"
],
"title": "Status",
"type": "string"
},
"source": {
"minLength": 3,
"title": "Source",
"type": "string"
},
"year": {
"maximum": 2200,
"minimum": 1900,
"title": "Year",
"type": "integer"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
}
},
"required": [
"id",
"kind",
"factor",
"source",
"year"
],
"title": "Factor",
"type": "object"
},
"Rate": {
"additionalProperties": false,
"description": "One unit rate: the price of one unit of the take-off rows it matches.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"category": {
"enum": [
"pipe",
"elbow",
"tee",
"reducer",
"flange",
"gasket",
"valve",
"inline",
"steel",
"grating",
"insulation",
"concrete"
],
"title": "Category",
"type": "string"
},
"unit": {
"description": "Must be the category's take-off unit (m, ea, t, m2, m3).",
"title": "Unit",
"type": "string"
},
"rate": {
"description": "Price per unit, in the file's currency.",
"minimum": 0,
"title": "Rate",
"type": "number"
},
"where": {
"$ref": "#/$defs/RateWhere"
},
"status": {
"description": "ASSUMED, or QUOTED when a quotation backs it.",
"enum": [
"ASSUMED",
"QUOTED"
],
"title": "Status",
"type": "string"
},
"source": {
"description": "Where the number comes from.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"year": {
"description": "The year of the price.",
"maximum": 2200,
"minimum": 1900,
"title": "Year",
"type": "integer"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
}
},
"required": [
"id",
"category",
"unit",
"rate",
"status",
"source",
"year"
],
"title": "Rate",
"type": "object"
},
"RateWhere": {
"additionalProperties": false,
"description": "Which take-off rows of the rate's category it prices; every given filter must match.",
"properties": {
"item": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the row's item (pipe, elbow 90, tee, reducing tee, the valve's DEXPI class such as BallValve, the steel section such as HEB300, plinth, ...).",
"title": "Item"
},
"dn_min": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Smallest DN priced.",
"title": "Dn Min"
},
"dn_max": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Largest DN priced.",
"title": "Dn Max"
},
"class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the pipe class code (e.g. PN16, A1*).",
"title": "Class"
},
"spec": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the row's spec (insulation of a pipe, material of a member).",
"title": "Spec"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the row's group (rack, structure, stair, ladder, platform, equipment, area, ...).",
"title": "Group"
}
},
"title": "RateWhere",
"type": "object"
}
},
"additionalProperties": false,
"description": "``estimate/rates.yaml``: the project's unit rates and estimate factors.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/rates/v1; optional (a file without it reads as cheme/rates/v1).",
"title": "Schema"
},
"currency": {
"description": "ISO 4217 code (XXX: no currency, an example).",
"maxLength": 3,
"minLength": 3,
"title": "Currency",
"type": "string"
},
"cost_year": {
"description": "The year the estimate is priced in.",
"maximum": 2200,
"minimum": 1900,
"title": "Cost Year",
"type": "integer"
},
"example": {
"default": false,
"description": "True marks example numbers that price nothing: the estimate warns, and a gate requiring rates fails, until the project replaces them.",
"title": "Example",
"type": "boolean"
},
"basis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What the estimate is for, its class.",
"title": "Basis"
},
"rates": {
"items": {
"$ref": "#/$defs/Rate"
},
"title": "Rates",
"type": "array"
},
"factors": {
"items": {
"$ref": "#/$defs/Factor"
},
"title": "Factors",
"type": "array"
}
},
"required": [
"currency",
"cost_year"
],
"title": "RateFile",
"type": "object"
}
cost_basis¶
File: estimate/cost-basis.yaml. Model: chemeascode.domains.assessment.schemas.CostBasis.
estimate/cost-basis.yaml (kind cost_basis): what the equipment estimate from the package's published correlations needs from the project.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/cost_basis/v1; optional (a file without it reads as cheme/cost_basis/v1). | |
cost_index |
CostIndex or null | null |
The CEPCI to escalate to; without it costs stay at the correlations' base year (a finding). | |
estimate_class |
1 | 2 | 3 | 4 | 5 |
5 |
AACE 18R-97 class the estimate claims (default 5: equipment-factored, concept screening). | |
items |
list of EquipmentCostItem | |||
notes |
string | "" |
JSON Schema: cheme schema cost_basis
{
"$defs": {
"CostIndex": {
"additionalProperties": false,
"description": "The cost index the project escalates the correlations' base year to: its value, the\nyear (or month) it stands for, and where it is published.",
"properties": {
"value": {
"description": "e.g. the CEPCI of the estimate's cost year.",
"exclusiveMinimum": 0,
"title": "Value",
"type": "number"
},
"year": {
"maximum": 2200,
"minimum": 1900,
"title": "Year",
"type": "integer"
},
"month": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. annual, or 2026-06.",
"title": "Month"
},
"source": {
"description": "Where the value is published.",
"minLength": 3,
"title": "Source",
"type": "string"
}
},
"required": [
"value",
"year",
"source"
],
"title": "CostIndex",
"type": "object"
},
"EquipmentCostItem": {
"additionalProperties": false,
"description": "What the project states for one equipment item: a correlation or its size where the\nlists cannot give them, factors the package data lacks, or a cost of its own.",
"properties": {
"tag": {
"minLength": 1,
"title": "Tag",
"type": "string"
},
"correlation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A correlation id of the package data (cheme assess equipment --json lists them); default: chosen from the DEXPI class.",
"title": "Correlation"
},
"size": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The correlation's attribute A.",
"title": "Size"
},
"size_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Where the size comes from.",
"title": "Size Source"
},
"fm": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Material factor Fm.",
"title": "Fm"
},
"fp": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Pressure factor Fp.",
"title": "Fp"
},
"fbm": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Bare module factor FBM.",
"title": "Fbm"
},
"factor_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Where fm, fp or fbm come from (a book, table, page).",
"title": "Factor Source"
},
"cost": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The item's bare module cost from the project's own source (a quotation), in currency and year below; replaces the correlation.",
"title": "Cost"
},
"currency": {
"anyOf": [
{
"maxLength": 3,
"minLength": 3,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Currency"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Year"
},
"status": {
"anyOf": [
{
"enum": [
"ASSUMED",
"QUOTED"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The cost's source.",
"title": "Source"
},
"exclude": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Leave the item out of the estimate, for this reason (a package unit costed by its vendor, an internal of another item).",
"title": "Exclude"
}
},
"required": [
"tag"
],
"title": "EquipmentCostItem",
"type": "object"
}
},
"additionalProperties": false,
"description": "``estimate/cost-basis.yaml`` (kind ``cost_basis``): what the equipment estimate from\nthe package's published correlations needs from the project.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/cost_basis/v1; optional (a file without it reads as cheme/cost_basis/v1).",
"title": "Schema"
},
"cost_index": {
"anyOf": [
{
"$ref": "#/$defs/CostIndex"
},
{
"type": "null"
}
],
"default": null,
"description": "The CEPCI to escalate to; without it costs stay at the correlations' base year (a finding)."
},
"estimate_class": {
"default": 5,
"description": "AACE 18R-97 class the estimate claims (default 5: equipment-factored, concept screening).",
"enum": [
1,
2,
3,
4,
5
],
"title": "Estimate Class",
"type": "integer"
},
"items": {
"items": {
"$ref": "#/$defs/EquipmentCostItem"
},
"title": "Items",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "CostBasis",
"type": "object"
}
tea¶
File: estimate/tea.yaml. Model: chemeascode.domains.assessment.tea.schemas.TeaFile.
estimate/tea.yaml: the premises of the techno-economic analysis.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/tea/v1. | |
kind |
tea |
yes | ||
example |
boolean | false |
True marks example numbers that evaluate nothing: the report warns, and a gate requiring no-example fails, until the project replaces them. | |
currency |
string | yes | ISO 4217 code (XXX: no currency, an example). | |
cost_year |
integer | yes | The year every cost is in (real). | |
decision |
Decision or null | null |
||
basis |
Basis | yes | ||
case |
string or null | null |
Flowsheet case; default its default. | |
cases |
list of CaseShare or null | null |
Several cases, each with its share of the operating hours. | |
capex |
Capex | yes | ||
operation |
Operation or null | null |
Default: operation of lca/lca.yaml (a finding says so). | |
prices |
list of Price | |||
free |
list of Free | Feeds and products that carry no price, with why. | ||
variable_opex |
list of VariableItem | |||
emissions |
Emissions or null | null |
||
fixed_opex |
FixedOpex | |||
events |
list of Event | |||
finance |
Finance | yes | ||
class_by_stage |
map of 1 | 2 | 3 | 4 | 5 |
The AACE class each stage of plant.yaml is expected to reach. | ||
uncertainty |
TeaUncertainty or null | null |
||
sensitivity |
Sensitivity or null | null |
||
scenarios |
list of Scenario |
JSON Schema: cheme schema tea
{
"$defs": {
"Allocation": {
"additionalProperties": false,
"description": "Free allowances: ``benchmark`` t CO2-eq per `unit` of the product ``per``, ``fraction``\nof it free (a profile phases it out).",
"properties": {
"profile": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Multipliers by operating year, e.g. [1, 1.2, 1.5].",
"title": "Profile"
},
"escalation": {
"anyOf": [
{
"exclusiveMinimum": -1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Real change per year, e.g. 0.02 for +2 %/a.",
"title": "Escalation"
},
"benchmark": {
"$ref": "#/$defs/Value"
},
"per": {
"pattern": "^product:[A-Za-z0-9_.\\-]+$",
"title": "Per",
"type": "string"
},
"unit": {
"default": "t",
"enum": [
"kg",
"t",
"lb",
"st",
"kWh",
"MWh",
"MJ",
"GJ",
"MMBtu",
"therm",
"Nm3",
"m3",
"L",
"gal",
"bbl",
"kmol",
"ea"
],
"title": "Unit",
"type": "string"
},
"conversion": {
"anyOf": [
{
"$ref": "#/$defs/Positive"
},
{
"type": "null"
}
],
"default": null,
"description": "Units of `unit` per kg or kWh of the product, when needed."
},
"fraction": {
"$ref": "#/$defs/Share"
}
},
"required": [
"benchmark",
"per",
"fraction"
],
"title": "Allocation",
"type": "object"
},
"Basis": {
"additionalProperties": false,
"description": "What is evaluated: the premises two analyses must share to be compared.",
"properties": {
"product": {
"description": "Main product id of process/flowsheet.yaml (its LCOP).",
"title": "Product",
"type": "string"
},
"unit": {
"anyOf": [
{
"enum": [
"kg",
"t",
"lb",
"st",
"kWh",
"MWh",
"MJ",
"GJ",
"MMBtu",
"therm",
"Nm3",
"m3",
"L",
"gal",
"bbl",
"kmol",
"ea"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The unit the LCOP and cash cost are per (default: the main product's price unit, else t for a material, MWh for an energy product).",
"title": "Unit"
},
"conversion": {
"anyOf": [
{
"$ref": "#/$defs/Positive"
},
{
"type": "null"
}
],
"default": null,
"description": "Units of `unit` per kg or kWh of the product, when needed."
},
"specification": {
"description": "Purity, pressure, temperature, state.",
"minLength": 3,
"title": "Specification",
"type": "string"
},
"boundary": {
"description": "Battery limits: what is in and out.",
"minLength": 3,
"title": "Boundary",
"type": "string"
},
"scale": {
"default": "",
"description": "Capacity, e.g. 500 t/d O2.",
"title": "Scale",
"type": "string"
},
"location": {
"description": "Site or region the prices are for.",
"minLength": 2,
"title": "Location",
"type": "string"
}
},
"required": [
"product",
"specification",
"boundary",
"location"
],
"title": "Basis",
"type": "object"
},
"Batch": {
"additionalProperties": false,
"description": "Batch operation: the flowsheet's rates are those of one batch over ``basis_hours``.",
"properties": {
"cycle_time": {
"$ref": "#/$defs/Positive",
"description": "Hours per batch, cleaning and turnaround included."
},
"basis_hours": {
"description": "Hours over which the flowsheet's rates make one batch.",
"exclusiveMinimum": 0,
"title": "Basis Hours",
"type": "number"
},
"trains": {
"default": 1,
"minimum": 1,
"title": "Trains",
"type": "integer"
},
"batches_per_year": {
"anyOf": [
{
"$ref": "#/$defs/Positive"
},
{
"type": "null"
}
],
"default": null,
"description": "Else hours_per_year x trains / cycle_time."
},
"success_rate": {
"anyOf": [
{
"$ref": "#/$defs/Share"
},
{
"type": "null"
}
],
"default": null,
"description": "Share of batches sold (products only)."
},
"source": {
"minLength": 3,
"title": "Source",
"type": "string"
}
},
"required": [
"cycle_time",
"basis_hours",
"source"
],
"title": "Batch",
"type": "object"
},
"Capex": {
"additionalProperties": false,
"description": "The capital cost: ISBL, then OSBL (x ISBL), owner's cost (x ISBL + OSBL) and contingency\n(x ISBL + OSBL + owner's cost); their sum is the fixed capital.",
"properties": {
"isbl": {
"$ref": "#/$defs/Isbl"
},
"osbl": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "Offsites, utilities: x ISBL."
},
"owners_cost": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "Land, project team, start-up, first fills: x (ISBL + OSBL)."
},
"contingency": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "x (ISBL + OSBL + owner's cost)."
}
},
"required": [
"isbl"
],
"title": "Capex",
"type": "object"
},
"CaseShare": {
"additionalProperties": false,
"description": "A case of the flowsheet with its share of the operating hours (and prices of its own).",
"properties": {
"case": {
"title": "Case",
"type": "string"
},
"share": {
"$ref": "#/$defs/Fraction"
},
"prices": {
"additionalProperties": {
"type": "number"
},
"description": "Key -> price in that case, in the baseline unit.",
"title": "Prices",
"type": "object"
},
"source": {
"minLength": 3,
"title": "Source",
"type": "string"
}
},
"required": [
"case",
"share",
"source"
],
"title": "CaseShare",
"type": "object"
},
"Decision": {
"additionalProperties": false,
"description": "The decision the analysis supports: the question, the metric it is taken on and the\nthreshold the metric must meet (npv and irr at least, lcop and cash_cost at most).",
"properties": {
"question": {
"description": "e.g. Proceed to FEED with the ASU?",
"minLength": 10,
"title": "Question",
"type": "string"
},
"metric": {
"enum": [
"npv",
"irr",
"lcop",
"cash_cost"
],
"title": "Metric",
"type": "string"
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "npv: in currency (default 0); irr: a fraction (default the discount rate); lcop and cash_cost: per the main product's unit (basis.unit, else its price's unit, else t or MWh) (required).",
"title": "Threshold"
},
"confidence": {
"anyOf": [
{
"exclusiveMaximum": 1,
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "With uncertainty: the probability of meeting the threshold the decision needs (e.g. 0.9).",
"title": "Confidence"
},
"alternatives": {
"description": "What else is on the table.",
"items": {
"type": "string"
},
"title": "Alternatives",
"type": "array"
}
},
"required": [
"question",
"metric"
],
"title": "Decision",
"type": "object"
},
"EmissionSource": {
"additionalProperties": false,
"description": "An emission the plant pays for: the CO2-equivalent of a flow (or of a component of it),\nless what is captured.",
"properties": {
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"key": {
"description": "The flow, e.g. product:FLUE or feed:FUEL.",
"pattern": "^(feed|product):[A-Za-z0-9_.\\-]+$",
"title": "Key",
"type": "string"
},
"component": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. CO2 in the flue gas.",
"title": "Component"
},
"factor": {
"$ref": "#/$defs/Value",
"description": "t CO2-eq per `unit` of the flow (or component)."
},
"unit": {
"default": "t",
"description": "What the factor is per (t, MWh, ...).",
"enum": [
"kg",
"t",
"lb",
"st",
"kWh",
"MWh",
"MJ",
"GJ",
"MMBtu",
"therm",
"Nm3",
"m3",
"L",
"gal",
"bbl",
"kmol",
"ea"
],
"title": "Unit",
"type": "string"
},
"conversion": {
"anyOf": [
{
"$ref": "#/$defs/Positive"
},
{
"type": "null"
}
],
"default": null,
"description": "Units of `unit` per kg or kWh, when its kind differs."
},
"captured": {
"anyOf": [
{
"$ref": "#/$defs/Share"
},
{
"type": "null"
}
],
"default": null,
"description": "Fraction captured, 0 to 1."
}
},
"required": [
"id",
"key",
"factor"
],
"title": "EmissionSource",
"type": "object"
},
"Emissions": {
"additionalProperties": false,
"description": "The price of emissions (``price``, per t CO2-eq, with its path) and their sources.",
"properties": {
"price": {
"$ref": "#/$defs/Value"
},
"profile": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Profile"
},
"escalation": {
"anyOf": [
{
"exclusiveMinimum": -1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Escalation"
},
"sources": {
"items": {
"$ref": "#/$defs/EmissionSource"
},
"minItems": 1,
"title": "Sources",
"type": "array"
},
"allocation": {
"anyOf": [
{
"$ref": "#/$defs/Allocation"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"price",
"sources"
],
"title": "Emissions",
"type": "object"
},
"Event": {
"additionalProperties": false,
"description": "A cost that recurs (catalyst, membrane or stack replacement, turnaround) or happens once\n(a grant: negative), as an amount or a fraction of the ISBL.",
"properties": {
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"kind": {
"default": "replacement",
"enum": [
"replacement",
"turnaround",
"sustaining",
"one_off"
],
"title": "Kind",
"type": "string"
},
"cost": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency (negative: a grant)."
},
"fraction_of_isbl": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null
},
"every_years": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Every Years"
},
"every_hours": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Operating hours between occurrences (e.g. a stack life).",
"title": "Every Hours"
},
"first_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Operating year of the first occurrence (1: the first; 0, -1: the last construction years). Default: every_years, else 1. With every_hours, the next ones follow every every_hours of running after it; without first_year, the running hours count from start-up.",
"title": "First Year"
},
"downtime_days": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Days the plant stands still at each occurrence.",
"title": "Downtime Days"
},
"treatment": {
"default": "expense",
"description": "capital: depreciated until the next occurrence.",
"enum": [
"expense",
"capital"
],
"title": "Treatment",
"type": "string"
},
"skip_last": {
"default": true,
"description": "A recurring event does not occur in the last operating year (a replacement nobody would make); a one-off is never skipped.",
"title": "Skip Last",
"type": "boolean"
},
"source": {
"minLength": 3,
"title": "Source",
"type": "string"
}
},
"required": [
"id",
"source"
],
"title": "Event",
"type": "object"
},
"Finance": {
"additionalProperties": false,
"description": "The financial premises of the discounted cash flow (real terms, the file's cost year).",
"properties": {
"discount_rate": {
"$ref": "#/$defs/Fraction",
"description": "Real discount rate, e.g. 0.08."
},
"tax_rate": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "Income tax on the operating result (none: pre-tax)."
},
"losses": {
"default": "credit",
"description": "A year's tax loss: credited against the owner's other income, or carried forward to later profits.",
"enum": [
"credit",
"carry_forward"
],
"title": "Losses",
"type": "string"
},
"depreciation_years": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Straight line, from start-up (default: the life).",
"title": "Depreciation Years"
},
"depreciation": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Fractions of the fixed capital per operating year (a tax schedule such as MACRS); what is left is written off in the last year.",
"title": "Depreciation"
},
"construction": {
"description": "Fraction of the fixed capital spent in each construction year (sums to 1).",
"items": {
"type": "number"
},
"title": "Construction",
"type": "array"
},
"working_capital": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "x fixed capital, spent at start-up, recovered at the end."
},
"working_capital_days": {
"anyOf": [
{
"$ref": "#/$defs/WorkingCapitalDays"
},
{
"type": "null"
}
],
"default": null
},
"salvage": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "x fixed capital, at the end (taxed above the book value)."
}
},
"required": [
"discount_rate"
],
"title": "Finance",
"type": "object"
},
"FixedOpex": {
"additionalProperties": false,
"description": "Operating costs that do not scale with the throughput, per year.",
"properties": {
"maintenance": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "x fixed capital."
},
"labour": {
"anyOf": [
{
"$ref": "#/$defs/Labour"
},
{
"type": "null"
}
],
"default": null
},
"insurance_tax": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "Insurance and local taxes: x fixed capital."
},
"overheads": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "x (labour + maintenance)."
},
"items": {
"items": {
"$ref": "#/$defs/OpexItem"
},
"title": "Items",
"type": "array"
}
},
"title": "FixedOpex",
"type": "object"
},
"Fraction": {
"additionalProperties": false,
"description": "A factor on another cost (OSBL on ISBL, maintenance on the fixed capital, ...).",
"properties": {
"value": {
"minimum": 0,
"title": "Value",
"type": "number"
},
"status": {
"default": "ASSUMED",
"description": "ASSUMED, or QUOTED.",
"enum": [
"ASSUMED",
"QUOTED"
],
"title": "Status",
"type": "string"
},
"source": {
"description": "Where the number comes from.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Its year.",
"title": "Year"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative distribution (default: uncertainty.defaults)."
},
"swing": {
"anyOf": [
{
"$ref": "#/$defs/Swing"
},
{
"type": "null"
}
],
"default": null,
"description": "Tornado multipliers (default: P10 and P90, or sensitivity)."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"value",
"source"
],
"title": "Fraction",
"type": "object"
},
"Free": {
"additionalProperties": false,
"description": "A feed or product of the flowsheet without a price, and why (a vent, rejected heat).",
"properties": {
"key": {
"pattern": "^(feed|product):[A-Za-z0-9_.\\-]+$",
"title": "Key",
"type": "string"
},
"reason": {
"minLength": 3,
"title": "Reason",
"type": "string"
}
},
"required": [
"key",
"reason"
],
"title": "Free",
"type": "object"
},
"Isbl": {
"additionalProperties": false,
"description": "The inside-battery-limits cost: where it comes from and what completes it.\n\n``equipment``: the bare module cost of ``cheme assess equipment`` (with the project's own\ncosts), ``mto``: the direct and indirect cost of ``cheme assess estimate``, ``given``:\n``value`` (scaled by ``scaling`` to the plant's capacity). Never both estimates: the bare\nmodule cost already holds installation and indirects.",
"properties": {
"source": {
"enum": [
"equipment",
"mto",
"given"
],
"title": "Source",
"type": "string"
},
"value": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "source given: the ISBL cost."
},
"scaling": {
"anyOf": [
{
"$ref": "#/$defs/Scaling"
},
{
"type": "null"
}
],
"default": null,
"description": "source given: from the value's reference capacity."
},
"exchange_rate": {
"anyOf": [
{
"$ref": "#/$defs/Positive"
},
{
"type": "null"
}
],
"default": null,
"description": "Units of the file's currency per unit of the estimate's (equipment: USD) or of the given value's (its currency differs), when they differ."
},
"escalation": {
"anyOf": [
{
"$ref": "#/$defs/Positive"
},
{
"type": "null"
}
],
"default": null,
"description": "Multiplier from the estimate's (or the given value's) year to cost_year, e.g. a CEPCI ratio."
},
"location_factor": {
"anyOf": [
{
"$ref": "#/$defs/Positive"
},
{
"type": "null"
}
],
"default": null,
"description": "From the estimate's location to the plant's, e.g. 1.1."
},
"purchased_installation": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "source equipment: factor on the purchased cost of the items costed without a bare module factor (installed = factor x purchased); without it they count as 0."
},
"uncovered_allowance": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "Fraction of the costed ISBL added for what the estimate leaves uncosted: the items no correlation covers (source equipment), the take-off rows without a rate (source mto)."
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the ISBL."
},
"swing": {
"anyOf": [
{
"$ref": "#/$defs/Swing"
},
{
"type": "null"
}
],
"default": null
},
"estimate_class": {
"anyOf": [
{
"enum": [
1,
2,
3,
4,
5
],
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "AACE 18R-97 class the capital cost claims (default: the equipment estimate's class in estimate/cost-basis.yaml, else 5).",
"title": "Estimate Class"
}
},
"required": [
"source"
],
"title": "Isbl",
"type": "object"
},
"Labour": {
"additionalProperties": false,
"description": "Operating staff: headcount times the cost per person and year, plus supervision.",
"properties": {
"operators": {
"$ref": "#/$defs/Fraction",
"description": "Headcount over all shifts (positions x crews)."
},
"cost_per_operator": {
"$ref": "#/$defs/Fraction",
"description": "Cost per person and year."
},
"supervision": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "x the operators' cost."
}
},
"required": [
"operators",
"cost_per_operator"
],
"title": "Labour",
"type": "object"
},
"Operation": {
"additionalProperties": false,
"description": "How the plant runs over its life.",
"properties": {
"hours_per_year": {
"exclusiveMinimum": 0,
"maximum": 8784,
"title": "Hours Per Year",
"type": "number"
},
"life_years": {
"description": "Operating years in the cash flow.",
"exclusiveMinimum": 0,
"maximum": 100,
"title": "Life Years",
"type": "integer"
},
"ramp_up": {
"description": "Capacity fraction of the first operating years (e.g. [0.6, 0.9]).",
"items": {
"type": "number"
},
"title": "Ramp Up",
"type": "array"
},
"utilisation": {
"anyOf": [
{
"$ref": "#/$defs/Fraction"
},
{
"type": "null"
}
],
"default": null,
"description": "Load after the ramp-up (default 1), e.g. 0.85."
},
"batch": {
"anyOf": [
{
"$ref": "#/$defs/Batch"
},
{
"type": "null"
}
],
"default": null
},
"source": {
"minLength": 3,
"title": "Source",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the hours."
},
"swing": {
"anyOf": [
{
"$ref": "#/$defs/Swing"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"hours_per_year",
"life_years",
"source"
],
"title": "Operation",
"type": "object"
},
"OpexItem": {
"additionalProperties": false,
"description": "A fixed operating cost of its own, per year (licence fee, laboratory, a role).",
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"status": {
"default": "ASSUMED",
"description": "ASSUMED, or QUOTED.",
"enum": [
"ASSUMED",
"QUOTED"
],
"title": "Status",
"type": "string"
},
"source": {
"description": "Where the number comes from.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Its year.",
"title": "Year"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative distribution (default: uncertainty.defaults)."
},
"swing": {
"anyOf": [
{
"$ref": "#/$defs/Swing"
},
{
"type": "null"
}
],
"default": null,
"description": "Tornado multipliers (default: P10 and P90, or sensitivity)."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"profile": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Multipliers by operating year, e.g. [1, 1.2, 1.5].",
"title": "Profile"
},
"escalation": {
"anyOf": [
{
"exclusiveMinimum": -1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Real change per year, e.g. 0.02 for +2 %/a.",
"title": "Escalation"
},
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
}
},
"required": [
"value",
"source",
"id"
],
"title": "OpexItem",
"type": "object"
},
"Positive": {
"additionalProperties": false,
"description": "A value that must be above 0 (a cycle time, a count, a conversion factor).",
"properties": {
"value": {
"exclusiveMinimum": 0,
"title": "Value",
"type": "number"
},
"status": {
"default": "ASSUMED",
"description": "ASSUMED, or QUOTED.",
"enum": [
"ASSUMED",
"QUOTED"
],
"title": "Status",
"type": "string"
},
"source": {
"description": "Where the number comes from.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Its year.",
"title": "Year"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative distribution (default: uncertainty.defaults)."
},
"swing": {
"anyOf": [
{
"$ref": "#/$defs/Swing"
},
{
"type": "null"
}
],
"default": null,
"description": "Tornado multipliers (default: P10 and P90, or sensitivity)."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"value",
"source"
],
"title": "Positive",
"type": "object"
},
"Price": {
"additionalProperties": false,
"description": "The price of a feed or product of the flowsheet (or of one ``component`` of it), per\n``unit``, in the file's currency and ``cost_year``. A product with a disposal cost has a\nnegative price.",
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"status": {
"default": "ASSUMED",
"description": "ASSUMED, or QUOTED.",
"enum": [
"ASSUMED",
"QUOTED"
],
"title": "Status",
"type": "string"
},
"source": {
"description": "Where the number comes from.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Its year.",
"title": "Year"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative distribution (default: uncertainty.defaults)."
},
"swing": {
"anyOf": [
{
"$ref": "#/$defs/Swing"
},
{
"type": "null"
}
],
"default": null,
"description": "Tornado multipliers (default: P10 and P90, or sensitivity)."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"profile": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Multipliers by operating year, e.g. [1, 1.2, 1.5].",
"title": "Profile"
},
"escalation": {
"anyOf": [
{
"exclusiveMinimum": -1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Real change per year, e.g. 0.02 for +2 %/a.",
"title": "Escalation"
},
"key": {
"description": "feed:<id> or product:<id> of the flowsheet.",
"pattern": "^(feed|product):[A-Za-z0-9_.\\-]+$",
"title": "Key",
"type": "string"
},
"unit": {
"description": "The price is per it.",
"enum": [
"kg",
"t",
"lb",
"st",
"kWh",
"MWh",
"MJ",
"GJ",
"MMBtu",
"therm",
"Nm3",
"m3",
"L",
"gal",
"bbl",
"kmol",
"ea"
],
"title": "Unit",
"type": "string"
},
"component": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Price only this component of the flow (its mass, e.g. H2 in an off-gas).",
"title": "Component"
},
"conversion": {
"anyOf": [
{
"$ref": "#/$defs/Positive"
},
{
"type": "null"
}
],
"default": null,
"description": "Units of `unit` per kg (material flow) or kWh (energy flow) of what is priced: e.g. 0.0455 MMBtu/kg (LHV) for natural gas priced per MMBtu, 1.25 Nm3/kg."
},
"category": {
"anyOf": [
{
"enum": [
"feed",
"utility",
"chemical",
"catalyst",
"disposal",
"emission",
"incentive",
"byproduct",
"other"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "In the cost of production (default from the flow).",
"title": "Category"
}
},
"required": [
"value",
"source",
"key",
"unit"
],
"title": "Price",
"type": "object"
},
"Scaling": {
"additionalProperties": false,
"description": "The capacity rule: ISBL = value x (capacity / reference) ** exponent, the capacity being\nthe main product made per year at full load, in ``unit`` per year.",
"properties": {
"reference": {
"$ref": "#/$defs/Positive",
"description": "The capacity the ISBL value is for, per year."
},
"unit": {
"description": "Unit of the capacity per year, e.g. t (t/a) or MWh.",
"enum": [
"kg",
"t",
"lb",
"st",
"kWh",
"MWh",
"MJ",
"GJ",
"MMBtu",
"therm",
"Nm3",
"m3",
"L",
"gal",
"bbl",
"kmol",
"ea"
],
"title": "Unit",
"type": "string"
},
"exponent": {
"$ref": "#/$defs/Value",
"description": "e.g. 0.6 (the six-tenths rule)."
}
},
"required": [
"reference",
"unit",
"exponent"
],
"title": "Scaling",
"type": "object"
},
"Scenario": {
"additionalProperties": false,
"description": "Another set of premises: prices replaced, values scaled.",
"properties": {
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"prices": {
"additionalProperties": {
"type": "number"
},
"description": "Line -> price, in the baseline price's unit.",
"title": "Prices",
"type": "object"
},
"scale": {
"additionalProperties": {
"type": "number"
},
"description": "Input id -> multiplier, e.g. {capex:isbl: 1.3}.",
"title": "Scale",
"type": "object"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"id"
],
"title": "Scenario",
"type": "object"
},
"Sensitivity": {
"additionalProperties": false,
"description": "The tornado: each input at its low and high value, one at a time.",
"properties": {
"swing": {
"anyOf": [
{
"$ref": "#/$defs/Swing"
},
{
"type": "null"
}
],
"default": null,
"description": "For the inputs with neither a swing nor an uncertainty."
},
"top": {
"default": 10,
"description": "How many inputs to show.",
"minimum": 1,
"title": "Top",
"type": "integer"
}
},
"title": "Sensitivity",
"type": "object"
},
"Share": {
"additionalProperties": false,
"description": "A fraction of a whole: 0 to 1 (captured, free, successful).",
"properties": {
"value": {
"maximum": 1,
"minimum": 0,
"title": "Value",
"type": "number"
},
"status": {
"default": "ASSUMED",
"description": "ASSUMED, or QUOTED.",
"enum": [
"ASSUMED",
"QUOTED"
],
"title": "Status",
"type": "string"
},
"source": {
"description": "Where the number comes from.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Its year.",
"title": "Year"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative distribution (default: uncertainty.defaults)."
},
"swing": {
"anyOf": [
{
"$ref": "#/$defs/Swing"
},
{
"type": "null"
}
],
"default": null,
"description": "Tornado multipliers (default: P10 and P90, or sensitivity)."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"value",
"source"
],
"title": "Share",
"type": "object"
},
"Swing": {
"additionalProperties": false,
"description": "Low and high multipliers of a value for the tornado (one at a time), e.g. 0.8 and 1.2.",
"properties": {
"low": {
"minimum": 0,
"title": "Low",
"type": "number"
},
"high": {
"minimum": 0,
"title": "High",
"type": "number"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"low",
"high"
],
"title": "Swing",
"type": "object"
},
"TeaUncertainty": {
"additionalProperties": false,
"description": "Monte Carlo of the analysis: how often, from which seed (results are reproducible), and\nthe uncertainty of every value that gives none of its own.",
"properties": {
"iterations": {
"default": 2000,
"maximum": 100000,
"minimum": 10,
"title": "Iterations",
"type": "integer"
},
"seed": {
"default": 1,
"title": "Seed",
"type": "integer"
},
"defaults": {
"additionalProperties": {
"$ref": "#/$defs/Uncertainty"
},
"description": "Of the values without their own, by status.",
"propertyNames": {
"enum": [
"ASSUMED",
"QUOTED"
]
},
"title": "Defaults",
"type": "object"
},
"rates": {
"additionalProperties": {
"$ref": "#/$defs/Uncertainty"
},
"description": "rate_mode independent: of each flowsheet rate, by its provenance.",
"propertyNames": {
"enum": [
"given",
"calculated",
"assumed"
]
},
"title": "Rates",
"type": "object"
},
"rate_mode": {
"default": "independent",
"description": "throughput: every rate moves together (operation:throughput), so the mass balance holds in every sample.",
"enum": [
"independent",
"throughput"
],
"title": "Rate Mode",
"type": "string"
},
"throughput": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "rate_mode throughput: of the throughput."
}
},
"title": "TeaUncertainty",
"type": "object"
},
"Uncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a value, relative to it (see :mod:`.uncertainty`).\n\n``lognormal`` with ``gsd2`` (95 % within value / gsd2 .. value x gsd2) or ``pedigree``\nscores (five, 1 to 5: reliability, completeness, temporal, geographical, technological)\non a ``basic`` gsd2; ``normal`` with ``cv``; ``triangular`` or ``uniform`` with ``low`` and\n``high`` multipliers (e.g. 0.8 and 1.2).",
"properties": {
"distribution": {
"default": "lognormal",
"enum": [
"lognormal",
"normal",
"triangular",
"uniform"
],
"title": "Distribution",
"type": "string"
},
"gsd2": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Gsd2"
},
"pedigree": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Pedigree"
},
"basic": {
"default": 1.05,
"description": "Basic gsd2 under the pedigree.",
"minimum": 1,
"title": "Basic",
"type": "number"
},
"cv": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cv"
},
"low": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Low"
},
"high": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "High"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "Uncertainty",
"type": "object"
},
"Value": {
"additionalProperties": false,
"description": "One premise: a number with its status, source and year, how uncertain it is (Monte\nCarlo) and how far the tornado swings it.",
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"status": {
"default": "ASSUMED",
"description": "ASSUMED, or QUOTED.",
"enum": [
"ASSUMED",
"QUOTED"
],
"title": "Status",
"type": "string"
},
"source": {
"description": "Where the number comes from.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Its year.",
"title": "Year"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative distribution (default: uncertainty.defaults)."
},
"swing": {
"anyOf": [
{
"$ref": "#/$defs/Swing"
},
{
"type": "null"
}
],
"default": null,
"description": "Tornado multipliers (default: P10 and P90, or sensitivity)."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"value",
"source"
],
"title": "Value",
"type": "object"
},
"VariableItem": {
"additionalProperties": false,
"description": "A variable cost (or credit, negative) the flowsheet does not carry: a chemical, a\ncatalyst consumed, a utility, a disposal, a fee, an incentive. ``value`` is the price per\n``unit``; ``amount`` the quantity of ``unit`` per kg or kWh of the flow ``per`` (or of one\n``component`` of it), per operating hour (``per: hour``) or per batch (``per: batch``).",
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"status": {
"default": "ASSUMED",
"description": "ASSUMED, or QUOTED.",
"enum": [
"ASSUMED",
"QUOTED"
],
"title": "Status",
"type": "string"
},
"source": {
"description": "Where the number comes from.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Its year.",
"title": "Year"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative distribution (default: uncertainty.defaults)."
},
"swing": {
"anyOf": [
{
"$ref": "#/$defs/Swing"
},
{
"type": "null"
}
],
"default": null,
"description": "Tornado multipliers (default: P10 and P90, or sensitivity)."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"profile": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Multipliers by operating year, e.g. [1, 1.2, 1.5].",
"title": "Profile"
},
"escalation": {
"anyOf": [
{
"exclusiveMinimum": -1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Real change per year, e.g. 0.02 for +2 %/a.",
"title": "Escalation"
},
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"per": {
"description": "feed:<id>, product:<id>, hour or batch.",
"pattern": "^((feed|product):[A-Za-z0-9_.\\-]+|hour|batch)$",
"title": "Per",
"type": "string"
},
"component": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Per kg of this component of per.",
"title": "Component"
},
"amount": {
"$ref": "#/$defs/Value",
"description": "Quantity of unit per kg/kWh of per, per hour or per batch."
},
"unit": {
"description": "What the price is per, e.g. kg NaOH, m3, ea.",
"minLength": 1,
"title": "Unit",
"type": "string"
},
"category": {
"default": "chemical",
"enum": [
"feed",
"utility",
"chemical",
"catalyst",
"disposal",
"emission",
"incentive",
"byproduct",
"other"
],
"title": "Category",
"type": "string"
}
},
"required": [
"value",
"source",
"id",
"per",
"amount",
"unit"
],
"title": "VariableItem",
"type": "object"
},
"WorkingCapitalDays": {
"additionalProperties": false,
"description": "Working capital in days of the first full year's flows.",
"properties": {
"feed_inventory": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Days of variable cost."
},
"product_inventory": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Days of variable and fixed cost."
},
"receivables": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Days of revenue."
},
"payables": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Days of variable cost, less."
},
"source": {
"minLength": 3,
"title": "Source",
"type": "string"
}
},
"required": [
"source"
],
"title": "WorkingCapitalDays",
"type": "object"
}
},
"additionalProperties": false,
"description": "``estimate/tea.yaml``: the premises of the techno-economic analysis.",
"properties": {
"schema": {
"description": "Always cheme/tea/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "tea",
"title": "Kind",
"type": "string"
},
"example": {
"default": false,
"description": "True marks example numbers that evaluate nothing: the report warns, and a gate requiring no-example fails, until the project replaces them.",
"title": "Example",
"type": "boolean"
},
"currency": {
"description": "ISO 4217 code (XXX: no currency, an example).",
"maxLength": 3,
"minLength": 3,
"title": "Currency",
"type": "string"
},
"cost_year": {
"description": "The year every cost is in (real).",
"maximum": 2200,
"minimum": 1900,
"title": "Cost Year",
"type": "integer"
},
"decision": {
"anyOf": [
{
"$ref": "#/$defs/Decision"
},
{
"type": "null"
}
],
"default": null
},
"basis": {
"$ref": "#/$defs/Basis"
},
"case": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Flowsheet case; default its default.",
"title": "Case"
},
"cases": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/CaseShare"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Several cases, each with its share of the operating hours.",
"title": "Cases"
},
"capex": {
"$ref": "#/$defs/Capex"
},
"operation": {
"anyOf": [
{
"$ref": "#/$defs/Operation"
},
{
"type": "null"
}
],
"default": null,
"description": "Default: operation of lca/lca.yaml (a finding says so)."
},
"prices": {
"items": {
"$ref": "#/$defs/Price"
},
"title": "Prices",
"type": "array"
},
"free": {
"description": "Feeds and products that carry no price, with why.",
"items": {
"$ref": "#/$defs/Free"
},
"title": "Free",
"type": "array"
},
"variable_opex": {
"items": {
"$ref": "#/$defs/VariableItem"
},
"title": "Variable Opex",
"type": "array"
},
"emissions": {
"anyOf": [
{
"$ref": "#/$defs/Emissions"
},
{
"type": "null"
}
],
"default": null
},
"fixed_opex": {
"$ref": "#/$defs/FixedOpex"
},
"events": {
"items": {
"$ref": "#/$defs/Event"
},
"title": "Events",
"type": "array"
},
"finance": {
"$ref": "#/$defs/Finance"
},
"class_by_stage": {
"additionalProperties": {
"enum": [
1,
2,
3,
4,
5
],
"type": "integer"
},
"description": "The AACE class each stage of plant.yaml is expected to reach.",
"title": "Class By Stage",
"type": "object"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/TeaUncertainty"
},
{
"type": "null"
}
],
"default": null
},
"sensitivity": {
"anyOf": [
{
"$ref": "#/$defs/Sensitivity"
},
{
"type": "null"
}
],
"default": null
},
"scenarios": {
"items": {
"$ref": "#/$defs/Scenario"
},
"title": "Scenarios",
"type": "array"
}
},
"required": [
"schema",
"kind",
"currency",
"cost_year",
"basis",
"capex",
"finance"
],
"title": "TeaFile",
"type": "object"
}
electrical¶
File: electrical/electrical-list.yaml. Model: chemeascode.domains.control.schemas.ElectricalList.
electrical/electrical-list.yaml: substations, transformers, electrical rooms, the motor list (derived from the driven equipment, given or overridden here), other feeders, junction boxes and the cabling of single instruments.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/electrical/v1; optional (a file without it reads as cheme/electrical/v1). | |
substations |
list of Substation | |||
transformers |
list of Transformer | |||
rooms |
list of Room | |||
defaults |
ElectricalDefaults | |||
motors |
list of Motor | |||
feeders |
list of Feeder | |||
junction_boxes |
list of JunctionBox | |||
instruments |
list of InstrumentCable | |||
notes |
string | "" |
JSON Schema: cheme schema electrical
{
"$defs": {
"CableEntry": {
"additionalProperties": false,
"description": "Where a motor's cable leaves its tray for the terminal box: beside the driven item, so\nthe tray does not run over the machine (a crane lane over it stays clear). The tray ends\nthere; the cable drops from there to the terminal box as cable, not tray.\n\nEither ``side`` (of the item's footprint in plan, the axis-aligned box of the placed item\nin site axes) with ``offset_m`` along it and ``clearance_m`` out from it, or ``point``\n[x, y] in site m. ``elevation_m``: the height of the tray's end (default: 0.6 m above the\nterminal box, as without an entry).",
"properties": {
"side": {
"anyOf": [
{
"enum": [
"north",
"south",
"east",
"west"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Side of the driven item.",
"title": "Side"
},
"offset_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Along the side from its middle, m: toward +x on north and south, toward +y on east and west (default 0); at most half the side's length.",
"title": "Offset M"
},
"clearance_m": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "From the side out to the tray's centreline, m (default: the layout criteria's lane_margin_m plus half the tray's width plus the tray rules' spacing_m, so a crane lane running along that side or ending at it stays clear).",
"title": "Clearance M"
},
"point": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "The tray's end [x, y], site m, outside the item's footprint.",
"title": "Point"
},
"elevation_m": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The tray's end above grade, m.",
"title": "Elevation M"
}
},
"title": "CableEntry",
"type": "object"
},
"ElectricalDefaults": {
"additionalProperties": false,
"description": "Which room feeds what, and the voltages, when an entry does not say (ASSUMED).",
"properties": {
"lv_room": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Room of LV motors (an mcc).",
"title": "Lv Room"
},
"mv_room": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Room of MV motors (switchgear).",
"title": "Mv Room"
},
"control_room": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Where instrument cables go.",
"title": "Control Room"
},
"lv_voltage_v": {
"default": 400.0,
"exclusiveMinimum": 0,
"title": "Lv Voltage V",
"type": "number"
},
"mv_voltage_v": {
"default": 6600.0,
"exclusiveMinimum": 0,
"title": "Mv Voltage V",
"type": "number"
},
"mv_above_kw": {
"default": 200.0,
"description": "Motors above this rating are fed at MV, kW.",
"exclusiveMinimum": 0,
"title": "Mv Above Kw",
"type": "number"
},
"jb_capacity": {
"default": 24,
"description": "Instrument cables per JB.",
"exclusiveMinimum": 0,
"title": "Jb Capacity",
"type": "integer"
},
"spare_pairs": {
"default": 0.2,
"description": "Spare pairs of a multipair cable, fraction.",
"minimum": 0,
"title": "Spare Pairs",
"type": "number"
}
},
"title": "ElectricalDefaults",
"type": "object"
},
"Feeder": {
"additionalProperties": false,
"description": "Another consumer that needs a power cable: an electric heater, a package, a socket\noutlet. It is at a placed ``item`` (its tag) or at ``point``.",
"properties": {
"tag": {
"title": "Tag",
"type": "string"
},
"item": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The placed tag it is at.",
"title": "Item"
},
"point": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Point"
},
"power_kw": {
"exclusiveMinimum": 0,
"title": "Power Kw",
"type": "number"
},
"voltage_v": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Voltage V"
},
"power_factor": {
"anyOf": [
{
"exclusiveMinimum": 0,
"maximum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the load, for its cable current P / (sqrt(3) U pf); omitted: 1.0 (a resistive heater), marked ASSUMED in the cable's basis; give it for a package with motors. No motor efficiency applies. The current is three-phase: a single-phase load (a 230 V socket outlet) draws more for its power and is undersized.",
"title": "Power Factor"
},
"room": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Room"
},
"assumed": {
"default": false,
"title": "Assumed",
"type": "boolean"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"tag",
"power_kw"
],
"title": "Feeder",
"type": "object"
},
"InstrumentCable": {
"additionalProperties": false,
"description": "Cabling of one instrument or actuated valve: its junction box, where it stands when the\nP&ID does not place it, or why it needs no cable (``skip``: wireless, local gauge).",
"properties": {
"tag": {
"title": "Tag",
"type": "string"
},
"jb": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Its junction box tag.",
"title": "Jb"
},
"point": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Point"
},
"skip": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Skip"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"tag"
],
"title": "InstrumentCable",
"type": "object"
},
"JunctionBox": {
"additionalProperties": false,
"description": "A field junction box: the instrument cables of the instruments it takes end there, and\none multipair cable runs from it to the control room. Placed at ``point``, or proposed in\n``area`` near its instruments.",
"properties": {
"tag": {
"title": "Tag",
"type": "string"
},
"point": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Point"
},
"area": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Site plan area it stands in.",
"title": "Area"
},
"instruments": {
"description": "Instrument tags or patterns (TT-1*) it takes.",
"items": {
"type": "string"
},
"title": "Instruments",
"type": "array"
},
"capacity": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Instrument cables at most.",
"title": "Capacity"
},
"room": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The room its multipair cable goes to.",
"title": "Room"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"tag"
],
"title": "JunctionBox",
"type": "object"
},
"Motor": {
"additionalProperties": false,
"description": "A motor of the motor list. A motor driving an equipment-list item is derived from that\nitem (``driven``); an entry here gives or overrides its power, voltage and room, or says\nwhy it has no cable of the plant's own (``skip``: a vendor package, a steam turbine), and\nwhere its cable leaves the tray (``cable_entry``).",
"properties": {
"driven": {
"description": "The equipment-list tag it drives.",
"title": "Driven",
"type": "string"
},
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Motor tag (default M-<driven>).",
"title": "Tag"
},
"power_kw": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Rated output, kW.",
"title": "Power Kw"
},
"voltage_v": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Voltage V"
},
"room": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The room id it is fed from.",
"title": "Room"
},
"assumed": {
"default": false,
"description": "True: the power is an assumption.",
"title": "Assumed",
"type": "boolean"
},
"source": {
"default": "",
"description": "Where the power comes from.",
"title": "Source",
"type": "string"
},
"skip": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "No cable of its own, for this reason.",
"title": "Skip"
},
"cable_entry": {
"anyOf": [
{
"$ref": "#/$defs/CableEntry"
},
{
"type": "null"
}
],
"default": null,
"description": "Where its cable leaves the tray beside the item (default: the tray runs to above the terminal box and drops onto it)."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"driven"
],
"title": "Motor",
"type": "object"
},
"Room": {
"additionalProperties": false,
"description": "An electrical room, a part of a building of the layout: the cables of its kind start\nthere. ``point``: where they leave it (default: the middle of the building's side that\nfaces the nearest rack, 0.5 m outside, at the cable entry height).",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"kind": {
"enum": [
"mcc",
"switchgear",
"control",
"rack_room"
],
"title": "Kind",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"building": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Building in layout/building.yaml.",
"title": "Building"
},
"substation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Substation id it belongs to.",
"title": "Substation"
},
"voltage_v": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Bus voltage, V.",
"title": "Voltage V"
},
"point": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Cable exit [x, y, z], site m.",
"title": "Point"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"kind"
],
"title": "Room",
"type": "object"
},
"Substation": {
"additionalProperties": false,
"description": "A substation: where the plant's supply is transformed, in a building of the layout.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"building": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Its building in layout/building.yaml.",
"title": "Building"
},
"incoming_kv": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Supply voltage, kV.",
"title": "Incoming Kv"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id"
],
"title": "Substation",
"type": "object"
},
"Transformer": {
"additionalProperties": false,
"description": "A power transformer of a substation.",
"properties": {
"tag": {
"title": "Tag",
"type": "string"
},
"substation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Substation id it stands in.",
"title": "Substation"
},
"rating_kva": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Rating Kva"
},
"primary_kv": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Primary Kv"
},
"secondary_v": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Secondary V"
},
"feeds": {
"description": "Room ids it supplies.",
"items": {
"type": "string"
},
"title": "Feeds",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"tag"
],
"title": "Transformer",
"type": "object"
}
},
"additionalProperties": false,
"description": "``electrical/electrical-list.yaml``: substations, transformers, electrical rooms, the\nmotor list (derived from the driven equipment, given or overridden here), other feeders,\njunction boxes and the cabling of single instruments.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/electrical/v1; optional (a file without it reads as cheme/electrical/v1).",
"title": "Schema"
},
"substations": {
"items": {
"$ref": "#/$defs/Substation"
},
"title": "Substations",
"type": "array"
},
"transformers": {
"items": {
"$ref": "#/$defs/Transformer"
},
"title": "Transformers",
"type": "array"
},
"rooms": {
"items": {
"$ref": "#/$defs/Room"
},
"title": "Rooms",
"type": "array"
},
"defaults": {
"$ref": "#/$defs/ElectricalDefaults"
},
"motors": {
"items": {
"$ref": "#/$defs/Motor"
},
"title": "Motors",
"type": "array"
},
"feeders": {
"items": {
"$ref": "#/$defs/Feeder"
},
"title": "Feeders",
"type": "array"
},
"junction_boxes": {
"items": {
"$ref": "#/$defs/JunctionBox"
},
"title": "Junction Boxes",
"type": "array"
},
"instruments": {
"items": {
"$ref": "#/$defs/InstrumentCable"
},
"title": "Instruments",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "ElectricalList",
"type": "object"
}
crane_chart¶
File: layout/crane-chart.yaml. Model: chemeascode.domains.spatial.schemas.CraneCharts.
layout/crane-chart.yaml (kind crane_chart): the load charts of the cranes the project plans to lift its heavy items with.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/crane_chart/v1; optional (a file without it reads as cheme/crane_chart/v1). | |
cranes |
list of CraneChart | |||
notes |
string | "" |
JSON Schema: cheme schema crane_chart
{
"$defs": {
"ChartRow": {
"additionalProperties": false,
"description": "One line of a crane's load chart: the capacity at a working radius.",
"properties": {
"radius_m": {
"description": "Working radius, m.",
"title": "Radius M",
"type": "number"
},
"capacity_t": {
"description": "Rated capacity at that radius, t.",
"title": "Capacity T",
"type": "number"
}
},
"required": [
"radius_m",
"capacity_t"
],
"title": "ChartRow",
"type": "object"
},
"CraneChart": {
"additionalProperties": false,
"description": "The load chart of one crane in one configuration (boom, counterweight, outriggers), as\nits supplier gives it. The lifting study takes the capacity at the smallest tabulated\nradius at or beyond the lift's radius (no interpolation).",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"source": {
"description": "The chart's source: supplier, document, page.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"status": {
"description": "QUOTED: from the crane supplier for this job; ASSUMED: a typical chart.",
"enum": [
"QUOTED",
"ASSUMED"
],
"title": "Status",
"type": "string"
},
"configuration": {
"default": "",
"description": "Boom length, counterweight, outriggers.",
"title": "Configuration",
"type": "string"
},
"pads": {
"description": "The crane_pad zones it stands on (empty: every pad).",
"items": {
"minLength": 1,
"type": "string"
},
"title": "Pads",
"type": "array"
},
"max_hook_height_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Highest hook height in this configuration, m.",
"title": "Max Hook Height M"
},
"chart": {
"items": {
"$ref": "#/$defs/ChartRow"
},
"minItems": 1,
"title": "Chart",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"source",
"status",
"chart"
],
"title": "CraneChart",
"type": "object"
}
},
"additionalProperties": false,
"description": "``layout/crane-chart.yaml`` (kind ``crane_chart``): the load charts of the cranes the\nproject plans to lift its heavy items with.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/crane_chart/v1; optional (a file without it reads as cheme/crane_chart/v1).",
"title": "Schema"
},
"cranes": {
"items": {
"$ref": "#/$defs/CraneChart"
},
"title": "Cranes",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "CraneCharts",
"type": "object"
}
lca¶
File: lca/lca.yaml. Model: chemeascode.domains.assessment.lca.schemas.LcaFile.
lca/lca.yaml: goal and scope of the plant's LCA and the map of its flows.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/lca/v1. | |
kind |
lca |
yes | ||
goal |
string | "" |
Why the LCA is made and for whom (ISO 14044). | |
functional_unit |
FunctionalUnit | yes | ||
location |
string | "" |
Where the plant is (e.g. GB, DE, US-TX): factors of another geography are flagged and make the result screening. | |
year |
integer or null | null |
The study's reference year: factors more than 10 years from it are flagged. | |
technology |
string | "" |
The technology the plant represents (lca/dataset.yaml). | |
rights |
string | "" |
The terms of the plant's own (foreground) data in lca/dataset.yaml, e.g. CC-BY-4.0; independent of the background's terms. | |
boundary |
gate-to-gate | cradle-to-gate |
"cradle-to-gate" |
gate-to-gate: the plant's own emissions only (map every feed free). | |
case |
string or null | null |
Flowsheet case; default its default. | |
allocation |
Allocation | |||
categories |
list of string | backend factors: impact category ids of lca/factors.yaml to report (all when empty). | ||
flows |
list of FlowMap | |||
operation |
Operation or null | null |
Operating hours and life: required with construction. | |
construction |
list of Construction | |||
consumables |
list of Consumable | |||
maintenance |
Maintenance or null | null |
||
transport |
list of Transport | |||
end_of_life |
list of EndOfLife | |||
system_model |
cutoff | apos | substitution | consequential or null |
null |
The study's system model: what recyclable and by-product outputs carry and whether avoided production is credited. Unset: cutoff (the Atlas default), and the dataset records none unless dataset.system_model gives it. | |
cutoff |
list of CutoffEntry | Flows left out by the cut-off criteria, with their amounts: recorded in the dataset's cutoff: list and checked (1 % of the input mass each and in sum, never-cut list). | ||
emission_estimates |
list of EmissionEstimate | Emissions the flowsheet does not carry: combustion, equipment leaks, storage tanks, flares, effluent and non-routine operation, each with its method, scope, parameters and sourced factors; written as emission:<substance> exchanges of provenance estimated. | ||
emission_exclusions |
list of EmissionExclusion | Sources of emissions declared negligible or out of scope, with the reason (they satisfy cheme.lci-emissions-incomplete and are recorded as cut-off flows). | ||
backend |
factors | brightway |
"factors" |
||
brightway |
Brightway or null | null |
||
uncertainty |
StudyUncertainty or null | null |
Monte Carlo: iterations, seed, defaults by provenance. | |
scenarios |
list of Scenario | |||
publication |
PublicationDecision or null | null |
A reviewed decision to publish results drawing on restricted sources. | |
carbon_accounting |
CarbonAccounting or null | null |
A product carbon footprint (ISO 14067, TfS, PACT): biogenic method, CCU rule, CCS, carbon contents. | |
dataset |
DatasetDocumentation or null | null |
The documentation of lca/dataset.yaml cheme cannot derive (uuid, version, geography, time, technology level, boundary, classification, modelling, review, parameters): copied into the dataset beside what cheme assess lca fills in. |
JSON Schema: cheme schema lca
{
"$defs": {
"Activity": {
"additionalProperties": false,
"description": "A process of a Brightway database (e.g. an ecoinvent market activity), found by name and,\nwhere the name alone is ambiguous, its reference product and location.",
"properties": {
"database": {
"description": "e.g. ecoinvent-3.10-cutoff",
"minLength": 1,
"title": "Database",
"type": "string"
},
"name": {
"description": "e.g. market for electricity, medium voltage",
"minLength": 1,
"title": "Name",
"type": "string"
},
"reference_product": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reference Product"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. DE, RER, GLO",
"title": "Location"
}
},
"required": [
"database",
"name"
],
"title": "Activity",
"type": "object"
},
"Allocation": {
"additionalProperties": false,
"description": "How the burdens of a multi-product process are shared between its products.\n\nThe inventory itself stays unallocated (an LCI dataset); allocation is a choice of the study:\n\n- ``mass``, ``economic`` (mass x price), ``energy`` (mass x energy content), ``exergy``\n (each product's exergy flow), ``shares`` (given fractions): the burdens in proportion;\n- ``substitution`` (system expansion): the functional unit's product carries everything, and\n every other co-product is credited with the production it avoids (``substitution``: its\n background, e.g. the market for liquid nitrogen);\n- ``none``: the functional unit's product carries everything (a single-product process, or\n a deliberately conservative view).\n\nEvery method whose data is complete is also computed for comparison (``compare``). Products\nof the flowsheet not listed in ``coproducts`` are not products: map them (``emission``,\n``free``, or a background for their treatment).",
"properties": {
"method": {
"default": "mass",
"enum": [
"mass",
"economic",
"energy",
"exergy",
"shares",
"substitution",
"none"
],
"title": "Method",
"type": "string"
},
"coproducts": {
"description": "Product ids that share the burdens; the functional unit's product is always one of them (added when missing).",
"items": {
"type": "string"
},
"title": "Coproducts",
"type": "array"
},
"prices": {
"additionalProperties": {
"type": "number"
},
"description": "method=economic: price per kg of each co-product and of the functional unit's product, any one currency (or properties.<product>.price).",
"title": "Prices",
"type": "object"
},
"properties": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/ProductProperties"
},
"description": "Per product: price, energy or exergy per kg (overrides what the flowsheet gives).",
"title": "Properties"
},
"shares": {
"additionalProperties": {
"type": "number"
},
"description": "method=shares: each co-product's fraction (sum 1).",
"title": "Shares",
"type": "object"
},
"substitution": {
"additionalProperties": {
"$ref": "#/$defs/Background"
},
"description": "method=substitution: the avoided production of each co-product other than the functional unit's.",
"title": "Substitution",
"type": "object"
},
"compare": {
"anyOf": [
{
"items": {
"enum": [
"mass",
"economic",
"energy",
"exergy",
"shares",
"substitution",
"none"
],
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Methods to compare with (default: every method whose data is complete).",
"title": "Compare"
},
"source": {
"default": "",
"description": "Why this method, e.g. DESIGN.md D-040.",
"title": "Source",
"type": "string"
},
"deviation": {
"default": "",
"description": "Why the method departs from the library's multi-functionality hierarchy (e.g. a sector PCR), when it does.",
"title": "Deviation",
"type": "string"
}
},
"title": "Allocation",
"type": "object"
},
"Background": {
"additionalProperties": false,
"description": "Where a flow's burdens come from. ``factor`` serves the factors backend, ``activity`` or\n``biosphere`` the Brightway backend; a mapping may give both kinds, so either backend can\nrun. ``dataset`` (another LCI dataset) serves both and excludes the others. ``free`` and\n``emission`` exclude the rest.",
"properties": {
"factor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id of a factor in lca/factors.yaml.",
"title": "Factor"
},
"activity": {
"anyOf": [
{
"$ref": "#/$defs/Activity"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"biosphere": {
"anyOf": [
{
"$ref": "#/$defs/BiosphereFlow"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"dataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetRef"
},
{
"type": "null"
}
],
"default": null,
"description": "An LCI dataset of this or another study (the Atlas)."
},
"elementary": {
"anyOf": [
{
"$ref": "#/$defs/Elementary"
},
{
"type": "null"
}
],
"default": null,
"description": "emission:<component> only: characterised by its CAS number (a category's elementary method, or brightway.biosphere)."
},
"source": {
"description": "Why this mapping.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"proxy": {
"default": "",
"description": "The background stands in for a related flow (another material, geography or technology): why, and where that holds. The results mark it PROXY.",
"title": "Proxy",
"type": "string"
},
"missing": {
"default": "",
"description": "No background is available (yet): why. The exchange stays in the inventory with its quantity and is a gap in every category, never 0.",
"title": "Missing",
"type": "string"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
}
},
"required": [
"source"
],
"title": "Background",
"type": "object"
},
"BiosphereFlow": {
"additionalProperties": false,
"description": "An elementary flow of a Brightway biosphere database, characterised directly by the\nmethod (an emission of the plant itself).",
"properties": {
"database": {
"description": "e.g. ecoinvent-3.10-biosphere",
"minLength": 1,
"title": "Database",
"type": "string"
},
"name": {
"description": "e.g. Carbon dioxide, fossil",
"minLength": 1,
"title": "Name",
"type": "string"
},
"categories": {
"description": "Compartments, e.g. [air] or [air, urban air close to ground].",
"items": {
"type": "string"
},
"title": "Categories",
"type": "array"
}
},
"required": [
"database",
"name"
],
"title": "BiosphereFlow",
"type": "object"
},
"Brightway": {
"additionalProperties": false,
"description": "``backend: brightway``: the Brightway project the activities and methods are in.\n\nThe project lives outside the plant repository (``BRIGHTWAY2_DIR``); licensed databases are\nimported there by each user, never copied into the repository.",
"properties": {
"project": {
"minLength": 1,
"title": "Project",
"type": "string"
},
"categories": {
"items": {
"$ref": "#/$defs/BrightwayCategory"
},
"minItems": 1,
"title": "Categories",
"type": "array"
},
"mapping_profiles": {
"description": "Provider profiles (kind lca_mapping_profile, paths from the repository root), first match first: they map the feeds and products that flows: leaves unmapped; an entry of flows: (also missing:) always wins.",
"items": {
"type": "string"
},
"title": "Mapping Profiles",
"type": "array"
},
"biosphere": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The biosphere database elementary emissions are found in by CAS number (e.g. ecoinvent-3.10-biosphere).",
"title": "Biosphere"
},
"expect": {
"additionalProperties": {
"$ref": "#/$defs/DatabaseIdentity"
},
"description": "Database name -> the provider, version and system model it must have; without it, the database is matched by name only (a warning).",
"title": "Expect",
"type": "object"
},
"publication": {
"default": "restricted",
"description": "Of results the project's databases contribute to: restricted (default: private unless the study's reviewed publication policy allows them), local, or public; per database in expect. A database without expect (matched by name only) is never public.",
"enum": [
"public",
"restricted",
"local"
],
"title": "Publication",
"type": "string"
}
},
"required": [
"project",
"categories"
],
"title": "Brightway",
"type": "object"
},
"BrightwayCategory": {
"additionalProperties": false,
"description": "One impact category of the Brightway backend: a method of the project.",
"properties": {
"id": {
"description": "e.g. climate-change",
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"method": {
"description": "The method's name tuple, e.g. [IPCC 2021, climate change, GWP 100a, incl. H and bio CO2].",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Method",
"type": "array"
}
},
"required": [
"id",
"method"
],
"title": "BrightwayCategory",
"type": "object"
},
"CarbonAccounting": {
"additionalProperties": false,
"description": "``carbon_accounting:`` of ``lca.yaml``: the study's carbon accounting for a product\ncarbon footprint (ISO 14067, TfS PCF Guideline v3, WBCSD PACT). Present: every material\nexchange gets its carbon content, the CO2/CO/CH4 emissions are split into fossil and\nbiogenic by the carbon traced through the inputs, and results.md and results.csv report the\nPCF breakdown. Absent: the study is not a PCF and nothing changes.",
"properties": {
"biogenic": {
"default": "minus-one-plus-one",
"description": "minus-one-plus-one (TfS v3) or zero-zero; both report the PCF excluding and including biogenic removals and the product's carbon content.",
"enum": [
"minus-one-plus-one",
"zero-zero"
],
"title": "Biogenic",
"type": "string"
},
"ccu_rule": {
"default": "cut-off",
"description": "Captured CO2 feedstock: cut-off (it carries its capture burden; carbon from a biogenic point source or the air stays non-fossil and is a removal only through the product's biogenic carbon content) or upstream (the capture's benefit is claimed by the emitter or capturer: its carbon counts as fossil here, whatever its source).",
"enum": [
"cut-off",
"upstream"
],
"title": "Ccu Rule",
"type": "string"
},
"ccs": {
"default": "technosphere",
"description": "CO2 to geological storage: technosphere (an output to transport and storage, not an emission; stored biogenic CO2 is a removal) or emitted (counted as emitted with its origin, e.g. while permanence is not shown).",
"enum": [
"technosphere",
"emitted"
],
"title": "Ccs",
"type": "string"
},
"content": {
"additionalProperties": {
"$ref": "#/$defs/CarbonContent"
},
"description": "By exchange key (feed:<id>, product:<id>): the carbon content where the flowsheet's composition does not give it, and the biogenic fraction of each feed (unset: fossil).",
"title": "Content",
"type": "object"
},
"trace_emissions": {
"default": true,
"description": "Split CO2, CO and CH4 emissions into fossil and biogenic by the traced carbon of the inputs; false keeps the mapped origin and reports a mismatch.",
"title": "Trace Emissions",
"type": "boolean"
},
"pact": {
"anyOf": [
{
"$ref": "#/$defs/PactIdentity"
},
{
"type": "null"
}
],
"default": null,
"description": "The data owner and product of a PACT export (--pact)."
},
"ipcc": {
"anyOf": [
{
"$ref": "#/$defs/IpccBasis"
},
{
"type": "null"
}
],
"default": null,
"description": "The IPCC report and GWP horizon of the climate category's factors; a PACT export needs it unless the category names a packaged method (elementary: ipcc2021-gwp100)."
},
"source": {
"default": "",
"description": "Why these choices, e.g. DESIGN.md D-050.",
"title": "Source",
"type": "string"
}
},
"title": "CarbonAccounting",
"type": "object"
},
"CarbonContent": {
"additionalProperties": false,
"description": "The carbon an exchange carries, per kg of it: ``total`` (kg C/kg) and the\n``biogenic_fraction`` of that carbon (non-fossil: biogenic or atmospheric). Unset: derived\n(the composition's formulas, the traced carbon of the inputs; :mod:`.carbon`).",
"properties": {
"total": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg of carbon per kg, e.g. 0.3748 for methanol.",
"title": "Total"
},
"biogenic_fraction": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Share of the carbon that is biogenic (or atmospheric, from direct air capture); the rest is fossil. An input without it counts as fossil.",
"title": "Biogenic Fraction"
},
"source": {
"default": "",
"description": "Where the numbers come from.",
"title": "Source",
"type": "string"
}
},
"title": "CarbonContent",
"type": "object"
},
"Classification": {
"additionalProperties": false,
"description": "ISIC Rev.4 (the activity) and CPC Ver. 2.1 (the reference product), as ecoinvent and the\nUN statistics classify them.",
"properties": {
"isic": {
"default": "",
"description": "e.g. 2011.",
"pattern": "^(\\d{2,4})?$",
"title": "Isic",
"type": "string"
},
"cpc": {
"default": "",
"description": "A CPC 2.1 code.",
"pattern": "^(\\d{1,5})?$",
"title": "Cpc",
"type": "string"
}
},
"title": "Classification",
"type": "object"
},
"Construction": {
"additionalProperties": false,
"description": "One material of the construction phase.\n\n``takeoff: mto`` counts the rows of ``estimate/mto.csv`` of ``category`` that ``where``\nmatches (the take-off's unit: pipe m, steel t, concrete m3, grating and insulation m2,\nfittings and valves ea; t is counted as kg). ``takeoff: equipment`` counts the empty weight\n(``dimensions.weight``, t, counted as kg) of the equipment-list items ``equipment``\nmatches. A row or item is counted by the first entry that matches it, so put specific\nentries before general ones.",
"properties": {
"factor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id of a factor in lca/factors.yaml.",
"title": "Factor"
},
"activity": {
"anyOf": [
{
"$ref": "#/$defs/Activity"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"biosphere": {
"anyOf": [
{
"$ref": "#/$defs/BiosphereFlow"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"dataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetRef"
},
{
"type": "null"
}
],
"default": null,
"description": "An LCI dataset of this or another study (the Atlas)."
},
"elementary": {
"anyOf": [
{
"$ref": "#/$defs/Elementary"
},
{
"type": "null"
}
],
"default": null,
"description": "emission:<component> only: characterised by its CAS number (a category's elementary method, or brightway.biosphere)."
},
"source": {
"description": "Why this mapping.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"proxy": {
"default": "",
"description": "The background stands in for a related flow (another material, geography or technology): why, and where that holds. The results mark it PROXY.",
"title": "Proxy",
"type": "string"
},
"missing": {
"default": "",
"description": "No background is available (yet): why. The exchange stays in the inventory with its quantity and is a gap in every category, never 0.",
"title": "Missing",
"type": "string"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"cutoff": {
"default": "",
"description": "Left out by the study's cut-off criteria (ISO 14044 4.2.3.3): why. The rows or items it matches count nothing and are no gap; the results list it as a limitation. Excludes a background.",
"title": "Cutoff",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the counted amount."
},
"takeoff": {
"enum": [
"mto",
"equipment"
],
"title": "Takeoff",
"type": "string"
},
"category": {
"anyOf": [
{
"enum": [
"pipe",
"elbow",
"tee",
"reducer",
"flange",
"gasket",
"valve",
"inline",
"steel",
"grating",
"insulation",
"concrete"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "takeoff mto.",
"title": "Category"
},
"where": {
"$ref": "#/$defs/RateWhere",
"description": "takeoff mto."
},
"equipment": {
"$ref": "#/$defs/EquipmentWhere",
"description": "takeoff equipment."
},
"disposal": {
"anyOf": [
{
"$ref": "#/$defs/Disposal"
},
{
"type": "null"
}
],
"default": null,
"description": "What becomes of the material at the plant's end of life (and of its maintenance replacements): disposal:construction.<id> and disposal:maintenance.<id> outputs, in kg."
}
},
"required": [
"source",
"id",
"takeoff"
],
"title": "Construction",
"type": "object"
},
"Consumable": {
"additionalProperties": false,
"description": "A supply of the operation not in the flowsheet: an adsorbent or catalyst replaced every\nfew years, a lubricant, a chemical bought per year. Counted per hour of operation from\n``per_year``, or from ``per_replacement`` every ``every_years``, plus an ``initial_charge``\nspread over the plant's life (a catalyst's first fill).\n\n``disposal:`` says what leaves the plant of it (spent adsorbent to landfill, waste oil to\nincineration, spent catalyst to metal recovery): the matching output exchange, so that what\ngoes in also comes out. A catalyst names its ``metals`` (mass\nfractions).",
"properties": {
"factor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id of a factor in lca/factors.yaml.",
"title": "Factor"
},
"activity": {
"anyOf": [
{
"$ref": "#/$defs/Activity"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"biosphere": {
"anyOf": [
{
"$ref": "#/$defs/BiosphereFlow"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"dataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetRef"
},
{
"type": "null"
}
],
"default": null,
"description": "An LCI dataset of this or another study (the Atlas)."
},
"elementary": {
"anyOf": [
{
"$ref": "#/$defs/Elementary"
},
{
"type": "null"
}
],
"default": null,
"description": "emission:<component> only: characterised by its CAS number (a category's elementary method, or brightway.biosphere)."
},
"source": {
"description": "Why this mapping.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"proxy": {
"default": "",
"description": "The background stands in for a related flow (another material, geography or technology): why, and where that holds. The results mark it PROXY.",
"title": "Proxy",
"type": "string"
},
"missing": {
"default": "",
"description": "No background is available (yet): why. The exchange stays in the inventory with its quantity and is a gap in every category, never 0.",
"title": "Missing",
"type": "string"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the amount."
},
"unit": {
"description": "An LCI unit (foundation.units.LCI_UNITS), not tkm.",
"title": "Unit",
"type": "string"
},
"per_year": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Per Year"
},
"per_replacement": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Per Replacement"
},
"every_years": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Every Years"
},
"initial_charge": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The first fill, spread over operation.life_years.",
"title": "Initial Charge"
},
"catalyst": {
"default": false,
"description": "A catalyst (never cut with its metals).",
"title": "Catalyst",
"type": "boolean"
},
"metals": {
"additionalProperties": {
"type": "number"
},
"description": "Element symbol -> mass fraction, e.g. {Pt: 0.003} or {Ni: 0.2}: what a spent catalyst carries to metal recovery, and what the cut-off rule never cuts.",
"title": "Metals",
"type": "object"
},
"disposal": {
"anyOf": [
{
"$ref": "#/$defs/Disposal"
},
{
"type": "null"
}
],
"default": null,
"description": "What leaves the plant of it, and to which treatment."
}
},
"required": [
"source",
"id",
"unit"
],
"title": "Consumable",
"type": "object"
},
"CutoffEntry": {
"additionalProperties": false,
"description": "A flow the study leaves out by its cut-off criteria, recorded with its amount so that the\ncriteria can be checked. ISO 14044 4.2.3.3 names the types of criteria\n(mass, energy, environmental significance) but no number; the Atlas choice (process-library\ndocs/system-model.md) is a flow below 1 % of the process's input mass, all cut flows\ntogether below 1 %, and never a precious or critical metal or a flow with a high\ncharacterisation factor (:mod:`.cutoff`).",
"properties": {
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"direction": {
"default": "input",
"enum": [
"input",
"output"
],
"title": "Direction",
"type": "string"
},
"unit": {
"default": "kg",
"description": "An LCI unit; the criteria check masses.",
"title": "Unit",
"type": "string"
},
"per_year": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Its amount per year of operation; unset: not known.",
"title": "Per Year"
},
"reason": {
"description": "Why it is left out.",
"minLength": 3,
"title": "Reason",
"type": "string"
},
"cas": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Its CAS number, if one substance.",
"title": "Cas"
},
"catalyst": {
"default": false,
"title": "Catalyst",
"type": "boolean"
},
"contains": {
"description": "Element symbols it contains (Pt, Ni, Hg, ...).",
"items": {
"type": "string"
},
"title": "Contains",
"type": "array"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"id",
"reason"
],
"title": "CutoffEntry",
"type": "object"
},
"DatabaseIdentity": {
"additionalProperties": false,
"description": "What a Brightway database must be, checked against its metadata (``bd.databases[name]``:\n``provider``, ``version``, ``system_model``): a local name alone does not identify a\ndatabase. Only the given fields are checked.",
"properties": {
"provider": {
"default": "",
"description": "e.g. ecoinvent, USLCI.",
"title": "Provider",
"type": "string"
},
"version": {
"default": "",
"description": "e.g. 3.10.",
"title": "Version",
"type": "string"
},
"system_model": {
"default": "",
"description": "e.g. cutoff, apos, consequential.",
"title": "System Model",
"type": "string"
},
"publication": {
"anyOf": [
{
"enum": [
"public",
"restricted",
"local"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Of results this database contributes to (default: brightway.publication); public only for a database whose terms permit it, e.g. an open one.",
"title": "Publication"
}
},
"title": "DatabaseIdentity",
"type": "object"
},
"DatasetDocumentation": {
"additionalProperties": false,
"description": "What a professional LCI database documents of each dataset beyond its exchanges, mapped to\nILCD (EF 3.1) and EcoSpold2 in docs/framework/lca.md. Every field is optional in the schema;\nthe gate ``lci-documented`` requires the publication minimum.",
"properties": {
"uuid": {
"anyOf": [
{
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Stable across versions.",
"title": "Uuid"
},
"version": {
"anyOf": [
{
"pattern": "^\\d+\\.\\d+\\.\\d+$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "major.minor.patch.",
"title": "Version"
},
"parent": {
"anyOf": [
{
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The uuid of the dataset this one is a (regional) variant of.",
"title": "Parent"
},
"methodology_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The version of the library methodology the dataset was built under.",
"title": "Methodology Version"
},
"superseded_by": {
"anyOf": [
{
"$ref": "#/$defs/SupersededBy"
},
{
"type": "null"
}
],
"default": null
},
"geography": {
"anyOf": [
{
"$ref": "#/$defs/DatasetGeography"
},
{
"type": "null"
}
],
"default": null
},
"time": {
"anyOf": [
{
"$ref": "#/$defs/DatasetTime"
},
{
"type": "null"
}
],
"default": null
},
"valid_until": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Last year of use (ILCD dataValidUntil).",
"title": "Valid Until"
},
"system_model": {
"anyOf": [
{
"enum": [
"cutoff",
"apos",
"substitution",
"consequential"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "System Model"
},
"technology_level": {
"anyOf": [
{
"enum": [
"undefined",
"new",
"modern",
"current",
"old",
"outdated"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Technology Level"
},
"system_boundary": {
"anyOf": [
{
"$ref": "#/$defs/SystemBoundary"
},
{
"type": "null"
}
],
"default": null
},
"production_volume": {
"anyOf": [
{
"$ref": "#/$defs/ProductionVolume"
},
{
"type": "null"
}
],
"default": null
},
"classification": {
"anyOf": [
{
"$ref": "#/$defs/Classification"
},
{
"type": "null"
}
],
"default": null
},
"modelling": {
"anyOf": [
{
"$ref": "#/$defs/Modelling"
},
{
"type": "null"
}
],
"default": null
},
"review": {
"description": "Review records; [] or 'unreviewed' when none was made (unreviewed is stated with type: none).",
"items": {
"$ref": "#/$defs/Review"
},
"title": "Review",
"type": "array"
},
"parameters": {
"items": {
"$ref": "#/$defs/Parameter"
},
"title": "Parameters",
"type": "array"
},
"data_generator": {
"default": "",
"description": "Who modelled the data (person or organisation).",
"title": "Data Generator",
"type": "string"
},
"entry_by": {
"default": "",
"description": "Who entered the dataset.",
"title": "Entry By",
"type": "string"
}
},
"title": "DatasetDocumentation",
"type": "object"
},
"DatasetGeography": {
"additionalProperties": false,
"description": "What the dataset's geography code (``location``) stands for. The facility's place and\nwhere the dataset may be applied are kept apart from the code it represents.",
"properties": {
"description": {
"default": "",
"description": "Representativeness: how the data represent the location (ILCD geography/locationOfOperationSupplyOrProduction/descriptionOfRestrictions).",
"title": "Description",
"type": "string"
},
"site": {
"default": "",
"description": "The facility's assumed place, e.g. coastal industrial site.",
"title": "Site",
"type": "string"
},
"applicable": {
"description": "Geography codes the dataset may be applied to beyond its own.",
"items": {
"type": "string"
},
"title": "Applicable",
"type": "array"
}
},
"title": "DatasetGeography",
"type": "object"
},
"DatasetRef": {
"additionalProperties": false,
"description": "An LCI dataset (``kind: lci_dataset``) as the background of a flow: one unit of its\n*product*, allocated by *allocation* (default: the dataset's own default, else mass). The\ndataset's own exchanges are characterised with the study's backend, recursively.",
"properties": {
"path": {
"description": "The dataset file, from the repository root.",
"minLength": 1,
"title": "Path",
"type": "string"
},
"product": {
"description": "Its product, e.g. H2 or product:H2.",
"minLength": 1,
"title": "Product",
"type": "string"
},
"allocation": {
"anyOf": [
{
"enum": [
"mass",
"economic",
"energy",
"exergy",
"shares",
"substitution",
"none"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Default: the dataset's allocation.method, else mass.",
"title": "Allocation"
}
},
"required": [
"path",
"product"
],
"title": "DatasetRef",
"type": "object"
},
"DatasetTime": {
"additionalProperties": false,
"description": "The time the data represent; ``year`` of the dataset is the data's reference year and\n``valid_until`` the last year it may be used.",
"properties": {
"start": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "First valid year.",
"title": "Start"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
}
},
"title": "DatasetTime",
"type": "object"
},
"Disposal": {
"additionalProperties": false,
"description": "What leaves the plant of a consumable or a construction material at the end of its use,\nso that what goes in also comes out: a ``fraction`` of its mass to a\ntreatment ``route``. The engine writes the output exchange ``disposal:<what>.<id>``.\n\nA ``waste`` gives its treatment background (or ``missing:``); incineration with energy\nrecovery is a ``waste``. A ``recyclable`` (material recycling or re-use, with a positive\nmarket value or an accepted scrap grade) may give one (the recycling process, counted only\nunder a crediting system model) or none: under cut-off it leaves burden-free.\n``cutoff: <why>`` leaves the disposal out by the study's cut-off\ncriteria: recorded in the dataset's ``cutoff:`` list and checked against them.",
"properties": {
"factor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id of a factor in lca/factors.yaml.",
"title": "Factor"
},
"activity": {
"anyOf": [
{
"$ref": "#/$defs/Activity"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"biosphere": {
"anyOf": [
{
"$ref": "#/$defs/BiosphereFlow"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"dataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetRef"
},
{
"type": "null"
}
],
"default": null,
"description": "An LCI dataset of this or another study (the Atlas)."
},
"elementary": {
"anyOf": [
{
"$ref": "#/$defs/Elementary"
},
{
"type": "null"
}
],
"default": null,
"description": "emission:<component> only: characterised by its CAS number (a category's elementary method, or brightway.biosphere)."
},
"source": {
"description": "Why this mapping.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"proxy": {
"default": "",
"description": "The background stands in for a related flow (another material, geography or technology): why, and where that holds. The results mark it PROXY.",
"title": "Proxy",
"type": "string"
},
"missing": {
"default": "",
"description": "No background is available (yet): why. The exchange stays in the inventory with its quantity and is a gap in every category, never 0.",
"title": "Missing",
"type": "string"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"kind": {
"default": "waste",
"enum": [
"waste",
"recyclable"
],
"title": "Kind",
"type": "string"
},
"route": {
"description": "e.g. landfill, incineration, re-refining, metal recovery.",
"minLength": 3,
"title": "Route",
"type": "string"
},
"fraction": {
"default": 1.0,
"description": "Of the mass disposed. The remainder is assumed retained or used up (info cheme.lca-disposal-fraction when below 1).",
"maximum": 1,
"minimum": 0,
"title": "Fraction",
"type": "number"
},
"credit": {
"anyOf": [
{
"$ref": "#/$defs/Background"
},
{
"type": "null"
}
],
"default": null,
"description": "The product it displaces, per kg (crediting system models only)."
},
"ratio": {
"default": 1.0,
"description": "kg displaced per kg recycled.",
"exclusiveMinimum": 0,
"title": "Ratio",
"type": "number"
},
"hazardous": {
"default": false,
"description": "A hazardous waste.",
"title": "Hazardous",
"type": "boolean"
},
"cutoff": {
"default": "",
"description": "Left out by the study's cut-off criteria: why. Excludes a background.",
"title": "Cutoff",
"type": "string"
}
},
"required": [
"source",
"route"
],
"title": "Disposal",
"type": "object"
},
"Elementary": {
"additionalProperties": false,
"description": "An elementary flow characterised directly by its component's CAS number\n(process/materials.yaml): an emission, or a resource (``compartment: resource``). With backend\nfactors through the packaged method a category names (``elementary:`` of a category in\nlca/factors.yaml, e.g. ipcc2021-gwp100), with backend brightway as the biosphere flow of\nthat CAS number in ``brightway.biosphere``. Its identity in the reference lists comes from\nthe packaged crosswalk (``data/elementary-flows.yaml``), by CAS, compartment and origin, or\nby ``flow`` (the crosswalk id, e.g. water-river).",
"properties": {
"compartment": {
"default": "air",
"enum": [
"air",
"water",
"soil",
"resource"
],
"title": "Compartment",
"type": "string"
},
"subcompartment": {
"default": "unspecified",
"description": "air: unspecified, urban-close-to-ground, non-urban-high-stack, lower-stratosphere; water: unspecified, fresh-surface, ground, sea; soil: unspecified, agricultural, industrial; resource: unspecified, in-air, in-water, in-ground, land.",
"title": "Subcompartment",
"type": "string"
},
"origin": {
"default": "fossil",
"enum": [
"fossil",
"biogenic",
"land-use-change"
],
"title": "Origin",
"type": "string"
},
"flow": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The crosswalk id when CAS and compartment do not decide (a water source: water-river, water-lake, water-sea, water-well, water-cooling).",
"title": "Flow"
}
},
"title": "Elementary",
"type": "object"
},
"EmissionActivity": {
"additionalProperties": false,
"description": "An activity per hour of operation given directly (a fuel rate from the duty, a flow not\nin the flowsheet).",
"properties": {
"value": {
"minimum": 0,
"title": "Value",
"type": "number"
},
"unit": {
"description": "An LCI unit: kg, t, kWh, MJ, GJ, m3, L, Nm3.",
"title": "Unit",
"type": "string"
},
"source": {
"minLength": 3,
"title": "Source",
"type": "string"
}
},
"required": [
"value",
"unit",
"source"
],
"title": "EmissionActivity",
"type": "object"
},
"EmissionEstimate": {
"additionalProperties": false,
"description": "One emission estimate of ``lca/lca.yaml``: what the flowsheet does\nnot carry.\n\nThe scope is what it covers: ``equipment`` (tag globs: the fired heater, the tanks, the\npumps and compressors of a leak estimate) and ``stream`` (a flowsheet stream) or\n``exchange`` (a feed or product of the dataset, e.g. feed:FUEL, product:WW). The activity is\n``activity`` when given, else the exchange's or the stream's flow; the speciation (leaks,\ntanks, flare slip) the stream's (or exchange's) composition over ``components``. Every\nfactor is the study's, with its source; the engine writes ``emission:<substance>``\nexchanges of provenance ``estimated`` with the method in ``source``.",
"properties": {
"id": {
"pattern": "^[A-Za-z0-9_\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"method": {
"enum": [
"combustion",
"equipment-leaks",
"storage-tank",
"flare",
"effluent",
"non-routine"
],
"title": "Method",
"type": "string"
},
"equipment": {
"description": "Tag globs of the equipment it covers, e.g. [H-101].",
"items": {
"type": "string"
},
"title": "Equipment",
"type": "array"
},
"stream": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A flowsheet stream id.",
"title": "Stream"
},
"exchange": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A feed or product of the dataset, e.g. feed:FUEL.",
"title": "Exchange"
},
"activity": {
"anyOf": [
{
"$ref": "#/$defs/EmissionActivity"
},
{
"type": "null"
}
],
"default": null,
"description": "The activity per hour of operation, instead of the flow."
},
"components": {
"description": "Speciation: the stream's components the total is shared among, by mass (e.g. the organics only); default every component. flare: the combustibles that slip unburned, each by its own share of the gas (required: the inerts pass through).",
"items": {
"type": "string"
},
"title": "Components",
"type": "array"
},
"factors": {
"additionalProperties": {
"$ref": "#/$defs/EmissionFactor"
},
"description": "combustion, flare: substance -> factor per activity; effluent: substance -> concentration; equipment-leaks: component type -> factor per component.",
"title": "Factors",
"type": "object"
},
"lhv": {
"anyOf": [
{
"$ref": "#/$defs/EmissionParameter"
},
{
"type": "null"
}
],
"default": null,
"description": "Heating value on the basis of the factors (net, LHV, unless the factor's source is per gross, HHV), MJ/kg (also GJ/t, kJ/kg, kWh/kg): converts a fuel's mass to energy."
},
"density": {
"anyOf": [
{
"$ref": "#/$defs/EmissionParameter"
},
{
"type": "null"
}
],
"default": null,
"description": "kg/m3 (also g/L, kg/L, t/m3): converts a mass flow to a volume (effluent)."
},
"efficiency": {
"anyOf": [
{
"$ref": "#/$defs/EmissionParameter"
},
{
"type": "null"
}
],
"default": null,
"description": "flare: the combustion efficiency, a fraction (unburned slip)."
},
"loss": {
"anyOf": [
{
"$ref": "#/$defs/EmissionParameter"
},
{
"type": "null"
}
],
"default": null,
"description": "storage-tank: the lost fraction of the throughput."
},
"rate": {
"anyOf": [
{
"$ref": "#/$defs/EmissionFactor"
},
{
"type": "null"
}
],
"default": null,
"description": "storage-tank: the total loss calculated elsewhere, kg/h or kg/a (e.g. working and breathing losses after AP-42 ch. 7.1)."
},
"removal": {
"additionalProperties": {
"$ref": "#/$defs/EmissionParameter"
},
"description": "effluent: substance -> fraction removed by the treatment after the concentration's point of measurement.",
"title": "Removal",
"type": "object"
},
"treatment": {
"default": "",
"description": "effluent: the declared treatment.",
"title": "Treatment",
"type": "string"
},
"service": {
"anyOf": [
{
"enum": [
"gas",
"light-liquid",
"heavy-liquid"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "equipment-leaks.",
"title": "Service"
},
"count_from": {
"description": "equipment-leaks: where the component counts come from: valves and flanges of estimate/mto.csv (the P&ID take-off), pump and compressor seals of the equipment list.",
"items": {
"enum": [
"mto",
"equipment"
],
"type": "string"
},
"title": "Count From",
"type": "array"
},
"where": {
"anyOf": [
{
"$ref": "#/$defs/RateWhere"
},
{
"type": "null"
}
],
"default": null,
"description": "equipment-leaks: which take-off rows it counts (globs)."
},
"counts": {
"additionalProperties": {
"type": "integer"
},
"description": "equipment-leaks: component type -> count, replacing the automatic count.",
"propertyNames": {
"enum": [
"valve",
"relief-valve",
"flange",
"connector",
"pump-seal",
"compressor-seal",
"agitator-seal",
"open-ended-line",
"sampling-connection",
"other"
]
},
"title": "Counts",
"type": "object"
},
"ldar": {
"additionalProperties": {
"$ref": "#/$defs/EmissionParameter"
},
"description": "equipment-leaks: component type -> the fraction an LDAR programme removes.",
"propertyNames": {
"enum": [
"valve",
"relief-valve",
"flange",
"connector",
"pump-seal",
"compressor-seal",
"agitator-seal",
"open-ended-line",
"sampling-connection",
"other"
]
},
"title": "Ldar",
"type": "object"
},
"hours_per_year": {
"anyOf": [
{
"$ref": "#/$defs/EmissionParameter"
},
{
"type": "null"
}
],
"default": null,
"description": "equipment-leaks: hours a year under pressure; default the operating hours."
},
"of": {
"description": "non-routine: the estimate ids or emission:<component> keys it is a share of.",
"items": {
"type": "string"
},
"title": "Of",
"type": "array"
},
"fraction": {
"anyOf": [
{
"$ref": "#/$defs/EmissionParameter"
},
{
"type": "null"
}
],
"default": null,
"description": "non-routine: the share of what it is of."
},
"cas": {
"additionalProperties": {
"type": "string"
},
"description": "Substance -> CAS number, for substances not in process/materials.yaml.",
"title": "Cas",
"type": "object"
},
"elementary": {
"anyOf": [
{
"$ref": "#/$defs/Elementary"
},
{
"type": "null"
}
],
"default": null,
"description": "The receiving compartment of its emissions when no flows: entry maps them (they are then characterised by CAS)."
},
"add": {
"default": false,
"description": "A substance the flowsheet emits too is added to it (info); default it is left out (warning): a simulated component is never overwritten without a finding.",
"title": "Add",
"type": "boolean"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of its emissions, where a factor gives none."
},
"source": {
"description": "The method and its applicability.",
"minLength": 3,
"title": "Source",
"type": "string"
}
},
"required": [
"id",
"method",
"source"
],
"title": "EmissionEstimate",
"type": "object"
},
"EmissionExclusion": {
"additionalProperties": false,
"description": "A source of emissions the study declares negligible or out of scope, with its reason\n(e.g. leaks of inert gases, cryogenic tanks without vapour losses of a pollutant): it\nsatisfies the completeness warning and is recorded among the dataset's cut-off flows.",
"properties": {
"id": {
"pattern": "^[A-Za-z0-9_\\-]+$",
"title": "Id",
"type": "string"
},
"method": {
"enum": [
"combustion",
"equipment-leaks",
"storage-tank",
"flare",
"effluent",
"non-routine"
],
"title": "Method",
"type": "string"
},
"equipment": {
"description": "Tag globs; empty with no exchange: every source.",
"items": {
"type": "string"
},
"title": "Equipment",
"type": "array"
},
"exchange": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A product, e.g. product:WW.",
"title": "Exchange"
},
"reason": {
"description": "Why it is negligible or out of scope.",
"minLength": 10,
"title": "Reason",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"id",
"method",
"reason"
],
"title": "EmissionExclusion",
"type": "object"
},
"EmissionFactor": {
"additionalProperties": false,
"description": "An emission factor (or concentration) the study supplies: ``value`` in ``unit`` with its\n``source`` (a guidebook table, AP-42 section, permit, BREF BAT-AEL, measurement). ``set``\nand ``id`` instead name an entry of a packaged factor set (``data/emission-factors/``);\na set that holds no verified values refuses to run (no factor is ever made up).",
"properties": {
"value": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Value"
},
"unit": {
"default": "",
"description": "<mass>/<basis>: kg, g or mg per kg, t, kWh, MJ, GJ, m3, L, Nm3 (combustion, flare, effluent), per h (a leak factor per component), or kg/h, kg/a (a storage loss rate).",
"title": "Unit",
"type": "string"
},
"source": {
"default": "",
"description": "The table, section or document it is from.",
"title": "Source",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A packaged factor set's id.",
"title": "Set"
},
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The entry of that set.",
"title": "Id"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null
}
},
"title": "EmissionFactor",
"type": "object"
},
"EmissionParameter": {
"additionalProperties": false,
"description": "A number an estimate needs (a heating value, a density, a fraction), with its source.",
"properties": {
"value": {
"minimum": 0,
"title": "Value",
"type": "number"
},
"unit": {
"default": "",
"title": "Unit",
"type": "string"
},
"source": {
"minLength": 3,
"title": "Source",
"type": "string"
}
},
"required": [
"value",
"source"
],
"title": "EmissionParameter",
"type": "object"
},
"EndOfLife": {
"additionalProperties": false,
"description": "What happens to materials at their end of life: a ``fraction`` of the mass of the exchanges\n``applies_to`` matches (construction, maintenance, consumables such as a spent adsorbent)\nleaves as a material output ``end-of-life:<id>``, per kg.\n\n``kind`` classifies it: ``waste`` (its background is the treatment, counted under every system\nmodel; incineration with energy recovery is a waste) or ``recyclable`` (scrap for material\nrecycling or re-use: under cut-off and APOS it leaves burden-free; under substitution and\nconsequential the recycling background counts). ``credit`` gives a negative ``avoided:``\ninput under a crediting system model only. Without ``kind`` the entry is read as before\n(the output linked to its background), with a finding: a credit hidden in a background with\na negative impact is not allowed in a cut-off study.",
"properties": {
"factor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id of a factor in lca/factors.yaml.",
"title": "Factor"
},
"activity": {
"anyOf": [
{
"$ref": "#/$defs/Activity"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"biosphere": {
"anyOf": [
{
"$ref": "#/$defs/BiosphereFlow"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"dataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetRef"
},
{
"type": "null"
}
],
"default": null,
"description": "An LCI dataset of this or another study (the Atlas)."
},
"elementary": {
"anyOf": [
{
"$ref": "#/$defs/Elementary"
},
{
"type": "null"
}
],
"default": null,
"description": "emission:<component> only: characterised by its CAS number (a category's elementary method, or brightway.biosphere)."
},
"source": {
"description": "Why this mapping.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"proxy": {
"default": "",
"description": "The background stands in for a related flow (another material, geography or technology): why, and where that holds. The results mark it PROXY.",
"title": "Proxy",
"type": "string"
},
"missing": {
"default": "",
"description": "No background is available (yet): why. The exchange stays in the inventory with its quantity and is a gap in every category, never 0.",
"title": "Missing",
"type": "string"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the amount."
},
"applies_to": {
"description": "Globs on exchange keys.",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Applies To",
"type": "array"
},
"fraction": {
"default": 1.0,
"maximum": 1,
"minimum": 0,
"title": "Fraction",
"type": "number"
},
"kind": {
"anyOf": [
{
"enum": [
"waste",
"recyclable"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "waste or recyclable; unset: an entry from before this field existed.",
"title": "Kind"
},
"route": {
"default": "",
"description": "e.g. steel scrap to an electric arc furnace.",
"title": "Route",
"type": "string"
},
"credit": {
"anyOf": [
{
"$ref": "#/$defs/Background"
},
{
"type": "null"
}
],
"default": null,
"description": "The product it displaces, per kg (crediting system models only)."
},
"ratio": {
"default": 1.0,
"description": "kg displaced per kg recycled.",
"exclusiveMinimum": 0,
"title": "Ratio",
"type": "number"
},
"hazardous": {
"default": false,
"description": "A hazardous waste.",
"title": "Hazardous",
"type": "boolean"
}
},
"required": [
"source",
"id",
"applies_to"
],
"title": "EndOfLife",
"type": "object"
},
"EquipmentWhere": {
"additionalProperties": false,
"description": "Which equipment-list items an entry counts; every given glob must match.",
"properties": {
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the tag, e.g. K-*.",
"title": "Tag"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the DEXPI class, e.g. *Vessel.",
"title": "Type"
},
"material": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the free-text material, e.g. '*SS*' or 'CS*'.",
"title": "Material"
}
},
"title": "EquipmentWhere",
"type": "object"
},
"FlowMap": {
"additionalProperties": false,
"description": "The background of one foreground flow of the operation.\n\n``key`` names the flow: ``feed:<id>`` or ``product:<id>`` (a terminal of the flowsheet;\nmaterial ones counted in kg, energy ones in kWh), or ``emission:<component>`` (that\ncomponent in every product mapped ``emission: true``, in kg). Give ``free``, ``emission``,\nor a background (``factor``, ``activity`` or ``biosphere``).",
"properties": {
"factor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id of a factor in lca/factors.yaml.",
"title": "Factor"
},
"activity": {
"anyOf": [
{
"$ref": "#/$defs/Activity"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"biosphere": {
"anyOf": [
{
"$ref": "#/$defs/BiosphereFlow"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"dataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetRef"
},
{
"type": "null"
}
],
"default": null,
"description": "An LCI dataset of this or another study (the Atlas)."
},
"elementary": {
"anyOf": [
{
"$ref": "#/$defs/Elementary"
},
{
"type": "null"
}
],
"default": null,
"description": "emission:<component> only: characterised by its CAS number (a category's elementary method, or brightway.biosphere)."
},
"source": {
"description": "Why this mapping.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"proxy": {
"default": "",
"description": "The background stands in for a related flow (another material, geography or technology): why, and where that holds. The results mark it PROXY.",
"title": "Proxy",
"type": "string"
},
"missing": {
"default": "",
"description": "No background is available (yet): why. The exchange stays in the inventory with its quantity and is a gap in every category, never 0.",
"title": "Missing",
"type": "string"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"key": {
"pattern": "^(feed|product|emission|resource):[A-Za-z0-9_.\\-]+$",
"title": "Key",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the flow's amount."
},
"free": {
"default": false,
"description": "No burden: a resource taken from nature without impact (ambient air), or an output outside the system boundary.",
"title": "Free",
"type": "boolean"
},
"emission": {
"default": false,
"description": "product:<id> only: released to the environment; each of its components is an emission:<component> flow.",
"title": "Emission",
"type": "boolean"
},
"resource": {
"default": false,
"description": "feed:<id> only: taken from nature (ambient air, river water); each of its components is a resource:<component> flow (an elementary resource, or free).",
"title": "Resource",
"type": "boolean"
},
"treatment": {
"anyOf": [
{
"$ref": "#/$defs/Treatment"
},
{
"type": "null"
}
],
"default": null,
"description": "product:<id> only, not a co-product or an emission: a waste, recyclable or by-product output and its route. Its background is the treatment; a recyclable or by-product may be free (burden-free under cut-off)."
},
"co2_source": {
"anyOf": [
{
"enum": [
"fossil-point-source",
"biogenic-point-source",
"direct-air-capture"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "feed:<id> only: a captured CO2 feedstock (CCU) and where it was captured; its background is the capture, purification and compression.",
"title": "Co2 Source"
},
"storage": {
"anyOf": [
{
"$ref": "#/$defs/GeologicalStorage"
},
{
"type": "null"
}
],
"default": null,
"description": "product:<id> only: CO2 to transport and geological storage (CCS); its background is the transport and storage."
}
},
"required": [
"source",
"key"
],
"title": "FlowMap",
"type": "object"
},
"FunctionalUnit": {
"additionalProperties": false,
"description": "What the results are per: an amount of one product of the flowsheet.\n\nA material product (counted in kg) may be per kg or t, per Nm3 or Sm3 (through its molar\nmass from the flowsheet's composition), per MJ, kWh or GJ (through its energy content,\n``allocation.properties.<product>.energy``, e.g. the LHV) or per item (``kg_per_unit``). An\nenergy product (electricity from CHP, exported steam, counted in kWh) is per kWh, MWh, MJ\nor GJ.",
"properties": {
"product": {
"description": "Product id in process/flowsheet.yaml, e.g. GOXP.",
"title": "Product",
"type": "string"
},
"amount": {
"default": 1.0,
"exclusiveMinimum": 0,
"title": "Amount",
"type": "number"
},
"unit": {
"default": "t",
"description": "kg, t, g, Nm3, Sm3, kWh, MWh, MJ, GJ or ea (an item).",
"title": "Unit",
"type": "string"
},
"kg_per_unit": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The product's mass per unit of the functional unit where it cannot be derived (an item), or to override the derived one, with source.",
"title": "Kg Per Unit"
},
"source": {
"default": "",
"description": "Of kg_per_unit.",
"title": "Source",
"type": "string"
}
},
"required": [
"product"
],
"title": "FunctionalUnit",
"type": "object"
},
"GeologicalStorage": {
"additionalProperties": false,
"description": "CCS: CO2 sent to transport and geological storage (a technosphere output), with what\nmakes the storage permanent.",
"properties": {
"permanence": {
"description": "Why the storage is permanent, e.g. saline aquifer under the EU CCS Directive 2009/31/EC, monitored, with the leakage it assumes.",
"minLength": 3,
"title": "Permanence",
"type": "string"
},
"reservoir": {
"default": "",
"description": "e.g. depleted gas field, saline aquifer.",
"title": "Reservoir",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"permanence"
],
"title": "GeologicalStorage",
"type": "object"
},
"IpccBasis": {
"additionalProperties": false,
"description": "The IPCC assessment report and time horizon of the GWP factors behind the climate\ncategory of a PCF (never guessed from a title). PACT states the report\n(``ipccCharacterizationFactorsSources``); cheme exports a 100-year GWP only.",
"properties": {
"report": {
"description": "IPCC assessment report of the GWPs.",
"enum": [
"AR5",
"AR6"
],
"title": "Report",
"type": "string"
},
"gwp_horizon": {
"description": "Time horizon of the GWPs in years.",
"enum": [
20,
100
],
"title": "Gwp Horizon",
"type": "integer"
}
},
"required": [
"report",
"gwp_horizon"
],
"title": "IpccBasis",
"type": "object"
},
"Maintenance": {
"additionalProperties": false,
"description": "Spare parts and repairs: a fraction of the construction materials each year, with their\nbackgrounds (``maintenance:<construction id>`` exchanges).",
"properties": {
"fraction_per_year": {
"description": "e.g. 0.01 (1 %/a).",
"maximum": 1,
"minimum": 0,
"title": "Fraction Per Year",
"type": "number"
},
"applies_to": {
"description": "Globs on construction ids (default all).",
"items": {
"type": "string"
},
"title": "Applies To",
"type": "array"
},
"source": {
"minLength": 3,
"title": "Source",
"type": "string"
}
},
"required": [
"fraction_per_year",
"source"
],
"title": "Maintenance",
"type": "object"
},
"Modelling": {
"additionalProperties": false,
"description": "The LCI method of the dataset (ILCD modellingAndValidation/LCIMethodAndAllocation).",
"properties": {
"principle": {
"anyOf": [
{
"enum": [
"attributional",
"consequential"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Principle"
},
"multifunctionality": {
"default": "",
"description": "How multi-output is handled (filled from allocation).",
"title": "Multifunctionality",
"type": "string"
},
"sampling": {
"default": "",
"description": "Sampling and representativeness of the data.",
"title": "Sampling",
"type": "string"
}
},
"title": "Modelling",
"type": "object"
},
"Operation": {
"additionalProperties": false,
"description": "How long the plant runs: spreads the construction over its output.",
"properties": {
"hours_per_year": {
"description": "Operating hours per year.",
"exclusiveMinimum": 0,
"maximum": 8784,
"title": "Hours Per Year",
"type": "number"
},
"life_years": {
"description": "Service life the construction is spread over.",
"exclusiveMinimum": 0,
"title": "Life Years",
"type": "number"
},
"source": {
"default": "",
"description": "e.g. design basis, DESIGN.md D-0xx.",
"title": "Source",
"type": "string"
}
},
"required": [
"hours_per_year",
"life_years"
],
"title": "Operation",
"type": "object"
},
"PactIdentity": {
"additionalProperties": false,
"description": "What a WBCSD PACT (Pathfinder) product footprint names that the study does not: the\ndata owner and the product, as URNs. The PACT specification (v2.3) accepts any URN and\nrecommends ``urn:pact:<domain-of-issuer>:<identifier-type>:<id>`` (e.g.\n``urn:pact:company:customcode:buyer-assigned:1234``, ``urn:pact:cas.org:substance-number:\n67-56-1``); a ``urn:pact:`` value must have those three parts.",
"properties": {
"company_name": {
"minLength": 1,
"title": "Company Name",
"type": "string"
},
"company_ids": {
"description": "URNs of the data owner.",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Company Ids",
"type": "array"
},
"product_ids": {
"description": "URNs of the product.",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Product Ids",
"type": "array"
},
"product_name": {
"description": "The product's name at the company.",
"minLength": 1,
"title": "Product Name",
"type": "string"
},
"product_description": {
"default": "",
"title": "Product Description",
"type": "string"
},
"cpc": {
"default": "",
"description": "UN CPC 2.1 code; default the dataset's classification.cpc.",
"pattern": "^(\\d{1,5})?$",
"title": "Cpc",
"type": "string"
},
"exempted_emissions_percent": {
"anyOf": [
{
"maximum": 5,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Share of the footprint left out of the study (PACT: at most 5 %): construction, plant end of life, transport of supplies and flows cut off by the criteria. Required when the study leaves any of them out; cheme cannot know the size.",
"title": "Exempted Emissions Percent"
},
"exempted_emissions_description": {
"default": "",
"description": "What the exempted share is and how it was estimated (mark ASSUMED).",
"title": "Exempted Emissions Description",
"type": "string"
}
},
"required": [
"company_name",
"company_ids",
"product_ids",
"product_name"
],
"title": "PactIdentity",
"type": "object"
},
"Parameter": {
"additionalProperties": false,
"description": "A named parameter exchanges' ``formula`` may use (EcoSpold2 mathematical relations).",
"properties": {
"name": {
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
"title": "Name",
"type": "string"
},
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"default": "",
"title": "Unit",
"type": "string"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"name",
"value"
],
"title": "Parameter",
"type": "object"
},
"ProductProperties": {
"additionalProperties": false,
"description": "What allocation weighs a product by, per unit of it (per kg for a material product).",
"properties": {
"price": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Price per unit, any currency.",
"title": "Price"
},
"energy": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Energy content per unit, kJ (e.g. lower heating value).",
"title": "Energy"
},
"exergy": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Exergy per unit, kJ (chemical + physical, dead state 298.15 K, 101.325 kPa); plant products take it from the flowsheet (cheme process props --fill).",
"title": "Exergy"
},
"source": {
"default": "",
"description": "Where the numbers come from.",
"title": "Source",
"type": "string"
}
},
"title": "ProductProperties",
"type": "object"
},
"ProductionVolume": {
"additionalProperties": false,
"description": "The annual output of the represented technology in its geography (market weighting).",
"properties": {
"amount": {
"exclusiveMinimum": 0,
"title": "Amount",
"type": "number"
},
"unit": {
"description": "Per year, e.g. kg/a.",
"minLength": 1,
"title": "Unit",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"amount",
"unit"
],
"title": "ProductionVolume",
"type": "object"
},
"PublicationDecision": {
"additionalProperties": false,
"description": "A reviewed decision to publish results that draw on ``restricted`` sources (their terms\npermit it for this artifact). Without one, such results stay private; ``local`` sources are\nnever published. A report existing, or a public foreground, is no such decision.",
"properties": {
"allow_restricted": {
"default": false,
"title": "Allow Restricted",
"type": "boolean"
},
"review": {
"description": "The review record that checked the sources' terms.",
"minLength": 3,
"title": "Review",
"type": "string"
},
"approved_by": {
"description": "Who decided (a person, not an agent).",
"minLength": 2,
"title": "Approved By",
"type": "string"
},
"source": {
"default": "",
"description": "The terms that permit it.",
"title": "Source",
"type": "string"
}
},
"required": [
"review",
"approved_by"
],
"title": "PublicationDecision",
"type": "object"
},
"RateWhere": {
"additionalProperties": false,
"description": "Which take-off rows of the rate's category it prices; every given filter must match.",
"properties": {
"item": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the row's item (pipe, elbow 90, tee, reducing tee, the valve's DEXPI class such as BallValve, the steel section such as HEB300, plinth, ...).",
"title": "Item"
},
"dn_min": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Smallest DN priced.",
"title": "Dn Min"
},
"dn_max": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Largest DN priced.",
"title": "Dn Max"
},
"class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the pipe class code (e.g. PN16, A1*).",
"title": "Class"
},
"spec": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the row's spec (insulation of a pipe, material of a member).",
"title": "Spec"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Glob on the row's group (rack, structure, stair, ladder, platform, equipment, area, ...).",
"title": "Group"
}
},
"title": "RateWhere",
"type": "object"
},
"Review": {
"additionalProperties": false,
"description": "One review of the dataset; ``type: none`` states that it is unreviewed.",
"properties": {
"type": {
"enum": [
"none",
"internal",
"independent-external",
"panel"
],
"title": "Type",
"type": "string"
},
"reviewer": {
"default": "",
"title": "Reviewer",
"type": "string"
},
"scope": {
"default": "",
"description": "What was reviewed, e.g. inventory, method.",
"title": "Scope",
"type": "string"
},
"date": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Date"
},
"report": {
"default": "",
"description": "The review record, e.g. reviews/<file>.md.",
"title": "Report",
"type": "string"
}
},
"required": [
"type"
],
"title": "Review",
"type": "object"
},
"Scenario": {
"additionalProperties": false,
"description": "A background other than the baseline: a prospective one (e.g. premise databases for 2050)\nor a sensitivity (a renewable electricity factor).\n\n``factors`` replaces factor ids (factors backend), ``databases`` Brightway database names\n(the activities keep their names, as premise keeps them).",
"properties": {
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"factors": {
"additionalProperties": {
"type": "string"
},
"description": "Factor id -> factor id.",
"title": "Factors",
"type": "object"
},
"databases": {
"additionalProperties": {
"type": "string"
},
"description": "Database name -> database name.",
"title": "Databases",
"type": "object"
},
"source": {
"default": "",
"description": "e.g. premise, REMIND SSP2-PkBudg1150, 2050.",
"title": "Source",
"type": "string"
},
"location": {
"default": "",
"description": "The geography this background represents (e.g. NL, DE): its contributions are checked against it instead of the study's location. Background applicability, not a plant location.",
"title": "Location",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "The background's reference year.",
"title": "Year"
},
"electricity": {
"anyOf": [
{
"enum": [
"grid-average",
"residual-mix",
"contractual",
"on-site"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How the electricity is procured in this scenario: grid-average, residual-mix, contractual (a renewable contract: needs source) or on-site.",
"title": "Electricity"
},
"case": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A separately computed flowsheet case this scenario uses: the foreground changes with it (e.g. a hot-climate case). Unset: the study's case, foreground unchanged.",
"title": "Case"
},
"missing": {
"additionalProperties": {
"type": "string"
},
"description": "Flow key -> why no background of this scenario's geography is available: the exchange keeps its quantity and is a gap, never 0.",
"title": "Missing",
"type": "object"
},
"proxy": {
"additionalProperties": {
"type": "string"
},
"description": "Flow key -> why its background in this scenario stands in for another geography or technology: the results mark it PROXY.",
"title": "Proxy",
"type": "object"
}
},
"required": [
"id"
],
"title": "Scenario",
"type": "object"
},
"StudyUncertainty": {
"additionalProperties": false,
"description": "Monte Carlo of the study: how often, from which seed (results are reproducible), and the\nuncertainty of every value that gives none of its own, by its origin or provenance.",
"properties": {
"iterations": {
"default": 1000,
"maximum": 100000,
"minimum": 10,
"title": "Iterations",
"type": "integer"
},
"seed": {
"default": 1,
"title": "Seed",
"type": "integer"
},
"defaults": {
"additionalProperties": {
"$ref": "#/$defs/Uncertainty"
},
"description": "By provenance (given, calculated, estimated, assumed), e.g. {assumed: {gsd2: 1.5}, calculated: {gsd2: 1.1}}, or by origin (measured: {gsd2: 1.02}), which wins over the provenance for the values that give it.",
"title": "Defaults",
"type": "object"
},
"factors": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of every factor without its own (backend factors)."
}
},
"title": "StudyUncertainty",
"type": "object"
},
"SupersededBy": {
"additionalProperties": false,
"description": "The dataset (and its version) that replaces this one.",
"properties": {
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"version": {
"pattern": "^\\d+\\.\\d+\\.\\d+$",
"title": "Version",
"type": "string"
}
},
"required": [
"id",
"version"
],
"title": "SupersededBy",
"type": "object"
},
"SystemBoundary": {
"additionalProperties": false,
"description": "The system boundary as data (ISO 14044 4.2.3.3): the steps included and excluded, the\ncut-off criteria, and whether infrastructure, catalysts and non-routine operation count.",
"properties": {
"included": {
"description": "Process steps included.",
"items": {
"type": "string"
},
"title": "Included",
"type": "array"
},
"excluded": {
"description": "Steps left out, and why.",
"items": {
"type": "string"
},
"title": "Excluded",
"type": "array"
},
"cutoff": {
"default": "",
"description": "The cut-off criteria applied.",
"title": "Cutoff",
"type": "string"
},
"infrastructure": {
"anyOf": [
{
"enum": [
"included",
"excluded"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Infrastructure"
},
"catalysts": {
"anyOf": [
{
"enum": [
"included",
"excluded"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Catalysts"
},
"non_routine": {
"anyOf": [
{
"enum": [
"included",
"excluded"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Start-up, shut-down, upsets.",
"title": "Non Routine"
}
},
"title": "SystemBoundary",
"type": "object"
},
"Transport": {
"additionalProperties": false,
"description": "Transport of material inputs, in t*km: the mass of every input exchange whose key matches\n``applies_to`` (e.g. ``construction:*``, ``feed:CATALYST``) over ``distance_km`` (products\nand emissions are not transported here). The\nbackground is per t*km (factor unit tkm; Brightway: ton kilometer).",
"properties": {
"factor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id of a factor in lca/factors.yaml.",
"title": "Factor"
},
"activity": {
"anyOf": [
{
"$ref": "#/$defs/Activity"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"biosphere": {
"anyOf": [
{
"$ref": "#/$defs/BiosphereFlow"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"dataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetRef"
},
{
"type": "null"
}
],
"default": null,
"description": "An LCI dataset of this or another study (the Atlas)."
},
"elementary": {
"anyOf": [
{
"$ref": "#/$defs/Elementary"
},
{
"type": "null"
}
],
"default": null,
"description": "emission:<component> only: characterised by its CAS number (a category's elementary method, or brightway.biosphere)."
},
"source": {
"description": "Why this mapping.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"proxy": {
"default": "",
"description": "The background stands in for a related flow (another material, geography or technology): why, and where that holds. The results mark it PROXY.",
"title": "Proxy",
"type": "string"
},
"missing": {
"default": "",
"description": "No background is available (yet): why. The exchange stays in the inventory with its quantity and is a gap in every category, never 0.",
"title": "Missing",
"type": "string"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the amount."
},
"applies_to": {
"description": "Globs on exchange keys.",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Applies To",
"type": "array"
},
"distance_km": {
"exclusiveMinimum": 0,
"title": "Distance Km",
"type": "number"
}
},
"required": [
"source",
"id",
"applies_to",
"distance_km"
],
"title": "Transport",
"type": "object"
},
"Treatment": {
"additionalProperties": false,
"description": "What becomes of an output that is neither a product nor an emission:\nits kind, the treatment route, and for a recyclable or a by-product the production it displaces.\n\nThe output's own background (``factor``, ``activity``, ``dataset``: e.g. landfill of spent\nzeolite, incineration of waste mineral oil, or an Atlas utility dataset) is the treatment.\nA ``waste`` counts it under every system model. A ``recyclable`` or ``byproduct`` counts it\nonly under a crediting system model (substitution, consequential); under cut-off and APOS it\nleaves burden-free (the recycler carries the treatment), except a ``hazardous`` recyclable,\nwhich counts its background under every system model. ``credit`` is applied only under a\ncrediting system model, for every kind: it is how a substitution variant credits the heat or\nelectricity an incineration (a ``waste``) displaces.\n\n``recyclable`` is for material recycling and re-use only, with a positive market value or an\naccepted scrap grade. Energy recovery is a ``waste`` linked to its incineration: in the\ncut-off model the burden of the incineration stays with the waste producer. The composition\nof the waste (Doka 2003) does not change the treatment's burden here (known limitation).",
"properties": {
"kind": {
"enum": [
"waste",
"recyclable",
"byproduct"
],
"title": "Kind",
"type": "string"
},
"route": {
"description": "The treatment route, e.g. landfill, incineration of waste mineral oil, re-refining, metal recovery, regeneration, wastewater treatment.",
"minLength": 3,
"title": "Route",
"type": "string"
},
"credit": {
"anyOf": [
{
"$ref": "#/$defs/Background"
},
{
"type": "null"
}
],
"default": null,
"description": "The background of the product it displaces, per its unit (e.g. primary steel for steel scrap, or grid electricity for the energy of an incineration); written as a negative avoided:<key> input only under a crediting system model (substitution, consequential), never in cut-off or apos."
},
"ratio": {
"default": 1.0,
"description": "Units displaced per unit of the output (quality and losses of recycling).",
"exclusiveMinimum": 0,
"title": "Ratio",
"type": "number"
},
"hazardous": {
"default": false,
"description": "A hazardous waste: a recyclable that is hazardous needs the recycler's treatment linked (a finding otherwise), as it rarely leaves burden-free; that background counts under every system model, cut-off included.",
"title": "Hazardous",
"type": "boolean"
}
},
"required": [
"kind",
"route"
],
"title": "Treatment",
"type": "object"
},
"Uncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a value, relative to it (see :mod:`.uncertainty`).\n\n``lognormal`` with ``gsd2`` (95 % within value / gsd2 .. value x gsd2) or ``pedigree``\nscores (five, 1 to 5: reliability, completeness, temporal, geographical, technological)\non a ``basic`` gsd2; ``normal`` with ``cv``; ``triangular`` or ``uniform`` with ``low`` and\n``high`` multipliers (e.g. 0.8 and 1.2).",
"properties": {
"distribution": {
"default": "lognormal",
"enum": [
"lognormal",
"normal",
"triangular",
"uniform"
],
"title": "Distribution",
"type": "string"
},
"gsd2": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Gsd2"
},
"pedigree": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Pedigree"
},
"basic": {
"default": 1.05,
"description": "Basic gsd2 under the pedigree.",
"minimum": 1,
"title": "Basic",
"type": "number"
},
"cv": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cv"
},
"low": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Low"
},
"high": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "High"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "Uncertainty",
"type": "object"
}
},
"additionalProperties": false,
"description": "``lca/lca.yaml``: goal and scope of the plant's LCA and the map of its flows.",
"properties": {
"schema": {
"description": "Always cheme/lca/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "lca",
"title": "Kind",
"type": "string"
},
"goal": {
"default": "",
"description": "Why the LCA is made and for whom (ISO 14044).",
"title": "Goal",
"type": "string"
},
"functional_unit": {
"$ref": "#/$defs/FunctionalUnit"
},
"location": {
"default": "",
"description": "Where the plant is (e.g. GB, DE, US-TX): factors of another geography are flagged and make the result screening.",
"title": "Location",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "The study's reference year: factors more than 10 years from it are flagged.",
"title": "Year"
},
"technology": {
"default": "",
"description": "The technology the plant represents (lca/dataset.yaml).",
"title": "Technology",
"type": "string"
},
"rights": {
"default": "",
"description": "The terms of the plant's own (foreground) data in lca/dataset.yaml, e.g. CC-BY-4.0; independent of the background's terms.",
"title": "Rights",
"type": "string"
},
"boundary": {
"default": "cradle-to-gate",
"description": "gate-to-gate: the plant's own emissions only (map every feed free).",
"enum": [
"gate-to-gate",
"cradle-to-gate"
],
"title": "Boundary",
"type": "string"
},
"case": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Flowsheet case; default its default.",
"title": "Case"
},
"allocation": {
"$ref": "#/$defs/Allocation"
},
"categories": {
"description": "backend factors: impact category ids of lca/factors.yaml to report (all when empty).",
"items": {
"type": "string"
},
"title": "Categories",
"type": "array"
},
"flows": {
"items": {
"$ref": "#/$defs/FlowMap"
},
"title": "Flows",
"type": "array"
},
"operation": {
"anyOf": [
{
"$ref": "#/$defs/Operation"
},
{
"type": "null"
}
],
"default": null,
"description": "Operating hours and life: required with construction."
},
"construction": {
"items": {
"$ref": "#/$defs/Construction"
},
"title": "Construction",
"type": "array"
},
"consumables": {
"items": {
"$ref": "#/$defs/Consumable"
},
"title": "Consumables",
"type": "array"
},
"maintenance": {
"anyOf": [
{
"$ref": "#/$defs/Maintenance"
},
{
"type": "null"
}
],
"default": null
},
"transport": {
"items": {
"$ref": "#/$defs/Transport"
},
"title": "Transport",
"type": "array"
},
"end_of_life": {
"items": {
"$ref": "#/$defs/EndOfLife"
},
"title": "End Of Life",
"type": "array"
},
"system_model": {
"anyOf": [
{
"enum": [
"cutoff",
"apos",
"substitution",
"consequential"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The study's system model: what recyclable and by-product outputs carry and whether avoided production is credited. Unset: cutoff (the Atlas default), and the dataset records none unless dataset.system_model gives it.",
"title": "System Model"
},
"cutoff": {
"description": "Flows left out by the cut-off criteria, with their amounts: recorded in the dataset's cutoff: list and checked (1 % of the input mass each and in sum, never-cut list).",
"items": {
"$ref": "#/$defs/CutoffEntry"
},
"title": "Cutoff",
"type": "array"
},
"emission_estimates": {
"description": "Emissions the flowsheet does not carry: combustion, equipment leaks, storage tanks, flares, effluent and non-routine operation, each with its method, scope, parameters and sourced factors; written as emission:<substance> exchanges of provenance estimated.",
"items": {
"$ref": "#/$defs/EmissionEstimate"
},
"title": "Emission Estimates",
"type": "array"
},
"emission_exclusions": {
"description": "Sources of emissions declared negligible or out of scope, with the reason (they satisfy cheme.lci-emissions-incomplete and are recorded as cut-off flows).",
"items": {
"$ref": "#/$defs/EmissionExclusion"
},
"title": "Emission Exclusions",
"type": "array"
},
"backend": {
"default": "factors",
"enum": [
"factors",
"brightway"
],
"title": "Backend",
"type": "string"
},
"brightway": {
"anyOf": [
{
"$ref": "#/$defs/Brightway"
},
{
"type": "null"
}
],
"default": null
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/StudyUncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Monte Carlo: iterations, seed, defaults by provenance."
},
"scenarios": {
"items": {
"$ref": "#/$defs/Scenario"
},
"title": "Scenarios",
"type": "array"
},
"publication": {
"anyOf": [
{
"$ref": "#/$defs/PublicationDecision"
},
{
"type": "null"
}
],
"default": null,
"description": "A reviewed decision to publish results drawing on restricted sources."
},
"carbon_accounting": {
"anyOf": [
{
"$ref": "#/$defs/CarbonAccounting"
},
{
"type": "null"
}
],
"default": null,
"description": "A product carbon footprint (ISO 14067, TfS, PACT): biogenic method, CCU rule, CCS, carbon contents."
},
"dataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetDocumentation"
},
{
"type": "null"
}
],
"default": null,
"description": "The documentation of lca/dataset.yaml cheme cannot derive (uuid, version, geography, time, technology level, boundary, classification, modelling, review, parameters): copied into the dataset beside what cheme assess lca fills in."
}
},
"required": [
"schema",
"kind",
"functional_unit"
],
"title": "LcaFile",
"type": "object"
}
lca_factors¶
File: lca/factors.yaml. Model: chemeascode.domains.assessment.lca.schemas.FactorFile.
lca/factors.yaml: the project's characterised factors (no licensed database).
include adds packaged open profiles (docs/framework/lca.md lists them; e.g. desnz-ghg-2026): their sources, categories and factors, the factors' ids prefixed with the profile's (desnz-ghg-2026:electricity-gb).
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/lca/v1. | |
kind |
lca_factors |
yes | ||
example |
boolean | false |
True marks example numbers: the results warn, and a gate requiring factors fails, until the project replaces them. | |
include |
list of string | Packaged open profiles to add, e.g. desnz-ghg-2026. | ||
publication |
public | restricted | local |
"restricted" |
Of results drawing on a factor without a registry entry (source_id): restricted unless the project states its own numbers may be published (public). | |
sources |
list of Source | The source registry. | ||
categories |
list of Category | |||
factors |
list of Factor |
JSON Schema: cheme schema lca_factors
{
"$defs": {
"Category": {
"additionalProperties": false,
"description": "One impact category: what the factors' values are in.",
"properties": {
"id": {
"description": "e.g. climate-change",
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"unit": {
"description": "e.g. kg CO2-eq",
"minLength": 1,
"title": "Unit",
"type": "string"
},
"method": {
"default": "",
"description": "e.g. IPCC 2021 GWP100, EF 3.1",
"title": "Method",
"type": "string"
},
"elementary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The packaged method category that characterises the plant's direct emissions in this category (e.g. ipcc2021-gwp100, see docs/framework/lca.md), or none when direct emissions do not contribute to it; unset, a direct emission is a gap here.",
"title": "Elementary"
}
},
"required": [
"id",
"unit"
],
"title": "Category",
"type": "object"
},
"Factor": {
"additionalProperties": false,
"description": "Characterised impacts of one unit of a flow, cradle to the flow.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"unit": {
"description": "Per unit: an LCI unit, e.g. kg, t, kWh, MJ, m3, Nm3, tkm.",
"title": "Unit",
"type": "string"
},
"values": {
"additionalProperties": {
"type": "number"
},
"description": "Category id -> impact per unit.",
"minProperties": 1,
"title": "Values",
"type": "object"
},
"status": {
"enum": [
"ASSUMED",
"PUBLISHED",
"EPD",
"PROXY",
"ESTIMATE"
],
"title": "Status",
"type": "string"
},
"source": {
"description": "Dataset, publication or EPD.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"source_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Its entry in the source registry (sources:).",
"title": "Source Id"
},
"year": {
"description": "The reference year of the data.",
"maximum": 2200,
"minimum": 1900,
"title": "Year",
"type": "integer"
},
"data_year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "The year the data describe, where it differs from or refines `year` (e.g. a factor set dated by its publication); unset: not declared. `year` keeps its meaning.",
"title": "Data Year"
},
"publication_year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "The year the source published or versioned the data; unset: not declared.",
"title": "Publication Year"
},
"location": {
"default": "",
"description": "The geography it represents, e.g. GB.",
"title": "Location",
"type": "string"
},
"licence": {
"default": "",
"description": "Terms the number is used under (e.g. CC BY 4.0, ecoinvent EULA); the registry entry's when it has a source_id.",
"title": "Licence",
"type": "string"
},
"basis": {
"default": "",
"description": "PROXY and ESTIMATE: what the number is and how it was derived.",
"title": "Basis",
"type": "string"
},
"validity": {
"default": "",
"description": "PROXY and ESTIMATE: where it holds (and where it does not).",
"title": "Validity",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"scope": {
"anyOf": [
{
"$ref": "#/$defs/FactorScope"
},
{
"type": "null"
}
],
"default": null,
"description": "What the factor measures (overrides its source's scope field by field); unset: not declared."
}
},
"required": [
"id",
"unit",
"values",
"status",
"source",
"year"
],
"title": "Factor",
"type": "object"
},
"FactorScope": {
"additionalProperties": false,
"description": "What a factor measures, as data: the structured scope the method-mix\ncheck and the scenario comparability verdict read instead of parsing free text. Every field is\noptional; an unset field is *not declared* (never assumed), so two factors that leave a\ndimension unset cannot be called like-for-like on it. A factor's own ``scope`` overrides its\nsource's field by field.",
"properties": {
"basis": {
"anyOf": [
{
"enum": [
"direct",
"direct+upstream",
"life-cycle"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"delivery": {
"anyOf": [
{
"enum": [
"generation",
"consumer"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Delivery"
},
"gases": {
"anyOf": [
{
"enum": [
"co2",
"co2e"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Gases"
},
"gwp": {
"anyOf": [
{
"enum": [
"AR4",
"AR5",
"AR6",
"AR4/AR5",
"mixed"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Only meaningful for CO2e; leave unset when not stated.",
"title": "Gwp"
},
"mix": {
"anyOf": [
{
"enum": [
"grid-average",
"residual-mix"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mix"
},
"accounting": {
"anyOf": [
{
"enum": [
"generation",
"consumption"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Accounting"
},
"note": {
"default": "",
"description": "Why a field is set or unset, in a sentence.",
"title": "Note",
"type": "string"
}
},
"title": "FactorScope",
"type": "object"
},
"Source": {
"additionalProperties": false,
"description": "One entry of the source registry: a dataset or publication factors come from, the exact\nversion, and the terms its numbers and the results derived from them are used under.\n\nThe registry records the terms; it does not interpret a licence or grant rights. Free access\nalone does not establish that results may be published or the numbers redistributed.",
"properties": {
"id": {
"pattern": "^[a-z0-9][a-z0-9_.\\-]*$",
"title": "Id",
"type": "string"
},
"title": {
"minLength": 3,
"title": "Title",
"type": "string"
},
"provider": {
"description": "e.g. UK DESNZ, US EPA, JRC.",
"minLength": 2,
"title": "Provider",
"type": "string"
},
"version": {
"description": "The exact version, e.g. 2026 v1.2.",
"minLength": 1,
"title": "Version",
"type": "string"
},
"url": {
"default": "",
"title": "Url",
"type": "string"
},
"licence": {
"description": "Licence or terms reference, e.g. OGL-3.0, CC-BY-4.0, CC0-1.0, ecoinvent EULA.",
"minLength": 2,
"title": "Licence",
"type": "string"
},
"attribution": {
"default": "",
"description": "The text the licence asks for.",
"title": "Attribution",
"type": "string"
},
"publication": {
"description": "What may be done with results it contributes to (public, restricted, local).",
"enum": [
"public",
"restricted",
"local"
],
"title": "Publication",
"type": "string"
},
"redistribution": {
"default": false,
"description": "True when its numbers may be bundled in a repository or release.",
"title": "Redistribution",
"type": "boolean"
},
"geography": {
"default": "",
"description": "e.g. GB, EU27, US, GLO.",
"title": "Geography",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Reference year.",
"title": "Year"
},
"method": {
"default": "",
"description": "Its characterisation basis, e.g. IPCC AR5 GWP100: contributions to one category resting on different bases are flagged (method mix).",
"title": "Method",
"type": "string"
},
"checksum": {
"default": "",
"description": "e.g. sha256:<hex> of the file read.",
"title": "Checksum",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"scope": {
"anyOf": [
{
"$ref": "#/$defs/FactorScope"
},
{
"type": "null"
}
],
"default": null,
"description": "What its factors measure (basis, delivery point, gases, GWP, mix, accounting): the default of its factors' scope."
}
},
"required": [
"id",
"title",
"provider",
"version",
"licence",
"publication"
],
"title": "Source",
"type": "object"
},
"Uncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a value, relative to it (see :mod:`.uncertainty`).\n\n``lognormal`` with ``gsd2`` (95 % within value / gsd2 .. value x gsd2) or ``pedigree``\nscores (five, 1 to 5: reliability, completeness, temporal, geographical, technological)\non a ``basic`` gsd2; ``normal`` with ``cv``; ``triangular`` or ``uniform`` with ``low`` and\n``high`` multipliers (e.g. 0.8 and 1.2).",
"properties": {
"distribution": {
"default": "lognormal",
"enum": [
"lognormal",
"normal",
"triangular",
"uniform"
],
"title": "Distribution",
"type": "string"
},
"gsd2": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Gsd2"
},
"pedigree": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Pedigree"
},
"basic": {
"default": 1.05,
"description": "Basic gsd2 under the pedigree.",
"minimum": 1,
"title": "Basic",
"type": "number"
},
"cv": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cv"
},
"low": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Low"
},
"high": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "High"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "Uncertainty",
"type": "object"
}
},
"additionalProperties": false,
"description": "``lca/factors.yaml``: the project's characterised factors (no licensed database).\n\n``include`` adds packaged open profiles (docs/framework/lca.md lists them; e.g.\n``desnz-ghg-2026``): their sources, categories and factors, the factors' ids prefixed with\nthe profile's (``desnz-ghg-2026:electricity-gb``).",
"properties": {
"schema": {
"description": "Always cheme/lca/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "lca_factors",
"title": "Kind",
"type": "string"
},
"example": {
"default": false,
"description": "True marks example numbers: the results warn, and a gate requiring factors fails, until the project replaces them.",
"title": "Example",
"type": "boolean"
},
"include": {
"description": "Packaged open profiles to add, e.g. desnz-ghg-2026.",
"items": {
"type": "string"
},
"title": "Include",
"type": "array"
},
"publication": {
"default": "restricted",
"description": "Of results drawing on a factor without a registry entry (source_id): restricted unless the project states its own numbers may be published (public).",
"enum": [
"public",
"restricted",
"local"
],
"title": "Publication",
"type": "string"
},
"sources": {
"description": "The source registry.",
"items": {
"$ref": "#/$defs/Source"
},
"title": "Sources",
"type": "array"
},
"categories": {
"items": {
"$ref": "#/$defs/Category"
},
"title": "Categories",
"type": "array"
},
"factors": {
"items": {
"$ref": "#/$defs/Factor"
},
"title": "Factors",
"type": "array"
}
},
"required": [
"schema",
"kind"
],
"title": "FactorFile",
"type": "object"
}
site_plan¶
File: layout/site-plan.yaml. Model: chemeascode.domains.spatial.schemas.SitePlan.
The site plan: boundary, plot areas, roads and pipe racks.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/site_plan/v1; optional (a file without it reads as cheme/site_plan/v1). | |
site |
Site | yes | ||
areas |
list of Area | |||
roads |
list of Road | |||
racks |
list of Rack | |||
max_unsupported_length |
number | 30.0 |
Lines whose ends are further apart (or in different areas) need a rack, m. | |
rack_reach |
number or null | null |
How far a line's end may be from a rack centreline to be carried by it, m: the one value the pipe router and cheme validate's line-route check use (default: max_unsupported_length, since the run from the end to the rack is unsupported). | |
separations |
list of Separation | Minimum distances: spacing criteria, keep-clear radii. | ||
criteria |
LayoutCriteria or null | null |
Project values of the layout criteria (operability, escape, lifting); default: the package table (ASSUMED). | |
notes |
string | "" |
JSON Schema: cheme schema site_plan
{
"$defs": {
"Area": {
"additionalProperties": false,
"description": "A plot area of the site. A ``bund`` (a containment around tanks, inside a storage\narea) has walls of ``wall_height`` (default 1 m, ASSUMED) along its box.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"box": {
"description": "[x0, y0, x1, y1], m.",
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Box",
"type": "array"
},
"kind": {
"default": "process",
"enum": [
"process",
"utilities",
"storage",
"road",
"reserved",
"building",
"bund"
],
"title": "Kind",
"type": "string"
},
"wall_height": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "A bund's wall height above grade, m (default 1, ASSUMED).",
"title": "Wall Height"
}
},
"required": [
"id",
"box"
],
"title": "Area",
"type": "object"
},
"LayoutCriteria": {
"additionalProperties": false,
"description": "The project's values of the layout criteria the rules on the 3D model use; each one left\nout takes the package default (``domains/spatial/data/layout-criteria.yaml``, ASSUMED).",
"properties": {
"operator_max_height_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Highest valve handwheel or lever above the floor, m.",
"title": "Operator Max Height M"
},
"operator_reach_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "How far out from a floor's edge an operator may be, m.",
"title": "Operator Reach M"
},
"instrument_max_height_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Highest transmitter head above the floor, m.",
"title": "Instrument Max Height M"
},
"stair_travel_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Farthest point of a floor from its nearest stair, m.",
"title": "Stair Travel M"
},
"dead_end_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Longest dead-end walk on a floor or platform (to its only way down, or to where two of its ways lie 45 degrees or more apart), m.",
"title": "Dead End M"
},
"escape_remote_fraction": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Two ways down a floor count as two when they arrive at least this fraction of the floor's diagonal apart in plan.",
"title": "Escape Remote Fraction"
},
"heavy_lift_t": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Items this heavy or heavier need a crane lift, t.",
"title": "Heavy Lift T"
},
"crane_reach_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Working radius of a mobile crane on a crane pad, m.",
"title": "Crane Reach M"
},
"lane_margin_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Clearance either side of a load in its crane lane, m.",
"title": "Lane Margin M"
},
"lift_clearance_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Clearance of a load over what it passes, m.",
"title": "Lift Clearance M"
},
"vent_plan_clearance_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "A walking surface this close in plan above a vent outlet is in its discharge, m.",
"title": "Vent Plan Clearance M"
},
"vent_overhead_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "How far above a vent outlet a walking surface is in its discharge, m.",
"title": "Vent Overhead M"
},
"vent_side_clearance_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "A walking surface this close in plan beside a vent outlet (the outlet between its floor and the walkway headroom above it) is in its discharge, m.",
"title": "Vent Side Clearance M"
},
"support_pipe_clearance_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "A proposed support post keeps this clearance from the pipes it does not carry, m.",
"title": "Support Pipe Clearance M"
},
"support_stub_max_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The tallest support stub on steel (a proposal stands on steel only this close below; a declared stub taller than this is a finding), m.",
"title": "Support Stub Max M"
},
"casing_reach_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "An item inside a casing is worked through a declared hatch this close, m.",
"title": "Casing Reach M"
},
"access_headroom_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Clear height over structure floors, platforms, stair treads and landings, m.",
"title": "Access Headroom M"
},
"ladder_clearance_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Least clearance of a pipe from a ladder's rails (none through its cage), m.",
"title": "Ladder Clearance M"
},
"walkway_clear_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Least clear walkway width beside a riser through an item's ring platform, m.",
"title": "Walkway Clear M"
},
"standing_space_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Side of the free square an operator stands in at a valve or hatch, m.",
"title": "Standing Space M"
},
"chainwheel_max_height_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Highest handwheel above the floor a declared chain wheel may serve, m.",
"title": "Chainwheel Max Height M"
},
"extension_max_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Longest extension spindle or remote operator, m.",
"title": "Extension Max M"
},
"impulse_max_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Longest impulse line run of a remote-mounted transmitter, m.",
"title": "Impulse Max M"
},
"capillary_max_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Longest capillary of a remote-mounted transmitter, m.",
"title": "Capillary Max M"
},
"valve_platform_group_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Valves out of reach this close in plan share one proposed platform, m.",
"title": "Valve Platform Group M"
},
"valve_platform_operating_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "A proposed valve platform's floor below the highest handwheel it serves, m.",
"title": "Valve Platform Operating M"
},
"valve_platform_depth_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Width of a proposed valve platform out from the pipes, m.",
"title": "Valve Platform Depth M"
},
"lift_dynamic_factor": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Dynamic allowance on the weight of a crane lift (>= 1).",
"title": "Lift Dynamic Factor"
},
"lift_rigging_fraction": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Rigging and hook block weight as a fraction of the load.",
"title": "Lift Rigging Fraction"
},
"lift_rigging_height_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Height of the rigging between hook and load top, m.",
"title": "Lift Rigging Height M"
},
"lift_chart_utilisation": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Highest fraction of the crane chart capacity a lift uses.",
"title": "Lift Chart Utilisation"
},
"spacing_table": {
"default": true,
"description": "Check the package equipment and building spacing tables.",
"title": "Spacing Table",
"type": "boolean"
}
},
"title": "LayoutCriteria",
"type": "object"
},
"Rack": {
"additionalProperties": false,
"description": "A pipe rack along a polyline, with a tier at each level. ``ladders`` declares its\naccess ladders (``[]``: none); without it, layout build proposes one at each free end.\n``intermediate_supports`` adds steel between the bents (:class:`RackIntermediate`).",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"points": {
"description": "Centreline [[x, y], ...], m.",
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Points",
"type": "array"
},
"width": {
"description": "Width across the rack, m.",
"title": "Width",
"type": "number"
},
"levels": {
"description": "Tier elevations, m.",
"items": {
"type": "number"
},
"title": "Levels",
"type": "array"
},
"ladders": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/RackLadder"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Access ladders; absent: proposed by layout build.",
"title": "Ladders"
},
"intermediate_supports": {
"anyOf": [
{
"$ref": "#/$defs/RackIntermediate"
},
{
"type": "null"
}
],
"default": null,
"description": "Steel between the bents; absent: none."
},
"bent_spacing_m": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Bents of this rack about this far apart (evenly along it), m; absent: the routing rules' rack_bent_spacing_m. Choose it so no bent stands in a road the rack crosses.",
"title": "Bent Spacing M"
}
},
"required": [
"id",
"points",
"width"
],
"title": "Rack",
"type": "object"
},
"RackIntermediate": {
"additionalProperties": false,
"description": "Intermediate steel of a rack between its bents, on the tiers given (default every\ntier): a stringer along each edge of the tier and a beam across every ``spacing_m``, top\nof steel at the tier. The pipes rest on those beams as on the bents' (shorter spans for the\nsmall lines). Absent: none (the rack has its bents only).",
"properties": {
"spacing_m": {
"default": 3.0,
"description": "Beams across at most this far apart, bents included, m.",
"title": "Spacing M",
"type": "number"
},
"levels": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Tiers with it; default all.",
"title": "Levels"
},
"section": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. HEB200; default by span.",
"title": "Section"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "RackIntermediate",
"type": "object"
},
"RackLadder": {
"additionalProperties": false,
"description": "A caged access ladder at an end of a rack, from grade to its top tier.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"end": {
"description": "The rack end it stands at.",
"enum": [
"start",
"end"
],
"title": "End",
"type": "string"
}
},
"required": [
"id",
"end"
],
"title": "RackLadder",
"type": "object"
},
"Road": {
"additionalProperties": false,
"description": "A road along a polyline.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"points": {
"description": "Centreline [[x, y], ...], m.",
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Points",
"type": "array"
},
"width": {
"description": "Carriageway width, m.",
"title": "Width",
"type": "number"
}
},
"required": [
"id",
"points",
"width"
],
"title": "Road",
"type": "object"
},
"Separation": {
"additionalProperties": false,
"description": "A minimum horizontal distance between two things of the plot plan.",
"properties": {
"from": {
"description": "A placed tag, or an area, building, road or rack id, or site-boundary.",
"minLength": 1,
"title": "From",
"type": "string"
},
"to": {
"minLength": 1,
"title": "To",
"type": "string"
},
"min_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum distance, m.",
"title": "Min M"
},
"min_factor_of_height": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum distance as a multiple of the height (toppling).",
"title": "Min Factor Of Height"
},
"height_of": {
"default": "max",
"description": "Whose height min_factor_of_height multiplies.",
"enum": [
"max",
"from",
"to"
],
"title": "Height Of",
"type": "string"
},
"measure": {
"default": "footprint",
"description": "Between footprints (default) or centres.",
"enum": [
"footprint",
"centre"
],
"title": "Measure",
"type": "string"
},
"reason": {
"default": "",
"title": "Reason",
"type": "string"
},
"basis": {
"default": "",
"description": "Where the criterion comes from, e.g. D-026.",
"title": "Basis",
"type": "string"
}
},
"required": [
"from",
"to"
],
"title": "Separation",
"type": "object"
},
"Site": {
"additionalProperties": false,
"description": "The site boundary: a rectangle from (0, 0) to (width, depth).",
"properties": {
"name": {
"default": "",
"title": "Name",
"type": "string"
},
"width": {
"description": "Extent east (x), m.",
"title": "Width",
"type": "number"
},
"depth": {
"description": "Extent north (y), m.",
"title": "Depth",
"type": "number"
}
},
"required": [
"width",
"depth"
],
"title": "Site",
"type": "object"
}
},
"additionalProperties": false,
"description": "The site plan: boundary, plot areas, roads and pipe racks.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/site_plan/v1; optional (a file without it reads as cheme/site_plan/v1).",
"title": "Schema"
},
"site": {
"$ref": "#/$defs/Site"
},
"areas": {
"items": {
"$ref": "#/$defs/Area"
},
"title": "Areas",
"type": "array"
},
"roads": {
"items": {
"$ref": "#/$defs/Road"
},
"title": "Roads",
"type": "array"
},
"racks": {
"items": {
"$ref": "#/$defs/Rack"
},
"title": "Racks",
"type": "array"
},
"max_unsupported_length": {
"default": 30.0,
"description": "Lines whose ends are further apart (or in different areas) need a rack, m.",
"title": "Max Unsupported Length",
"type": "number"
},
"rack_reach": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "How far a line's end may be from a rack centreline to be carried by it, m: the one value the pipe router and cheme validate's line-route check use (default: max_unsupported_length, since the run from the end to the rack is unsupported).",
"title": "Rack Reach"
},
"separations": {
"description": "Minimum distances: spacing criteria, keep-clear radii.",
"items": {
"$ref": "#/$defs/Separation"
},
"title": "Separations",
"type": "array"
},
"criteria": {
"anyOf": [
{
"$ref": "#/$defs/LayoutCriteria"
},
{
"type": "null"
}
],
"default": null,
"description": "Project values of the layout criteria (operability, escape, lifting); default: the package table (ASSUMED)."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"site"
],
"title": "SitePlan",
"type": "object"
}
building¶
File: layout/building.yaml. Model: chemeascode.domains.spatial.schemas.BuildingList.
Buildings and structures with their levels and column grids.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/building/v1; optional (a file without it reads as cheme/building/v1). | |
buildings |
list of Building | |||
notes |
string | "" |
JSON Schema: cheme schema building
{
"$defs": {
"Building": {
"additionalProperties": false,
"description": "A building or structure: a rectangle from its origin, rotated about that origin. A clad\nbuilding gets a roof; ``crane`` declares an overhead crane.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"origin": {
"description": "South-west corner before rotation [x, y], m.",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Origin",
"type": "array"
},
"width": {
"description": "Extent along the building's x, m.",
"title": "Width",
"type": "number"
},
"depth": {
"description": "Extent along the building's y, m.",
"title": "Depth",
"type": "number"
},
"rotation_deg": {
"default": 0,
"enum": [
0,
90,
180,
270
],
"title": "Rotation Deg",
"type": "integer"
},
"levels": {
"items": {
"$ref": "#/$defs/Level"
},
"title": "Levels",
"type": "array"
},
"frame": {
"anyOf": [
{
"$ref": "#/$defs/Frame"
},
{
"type": "null"
}
],
"default": null
},
"walls": {
"anyOf": [
{
"enum": [
"all",
"none"
],
"type": "string"
},
{
"items": {
"enum": [
"north",
"south",
"east",
"west"
],
"type": "string"
},
"type": "array"
}
],
"default": "none",
"description": "Clad sides: all, none or a list of sides (own frame).",
"title": "Walls"
},
"wall_material": {
"default": "cladding",
"description": "Rendering hint of the walls.",
"title": "Wall Material",
"type": "string"
},
"openings": {
"items": {
"$ref": "#/$defs/Opening"
},
"title": "Openings",
"type": "array"
},
"crane": {
"anyOf": [
{
"$ref": "#/$defs/Crane"
},
{
"type": "null"
}
],
"default": null,
"description": "An overhead travelling crane."
},
"use": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What the building is for, the key of the building spacing table (domains/spatial/data/building-spacing.yaml): control, substation, office, process, compressor, workshop, warehouse, ...",
"title": "Use"
}
},
"required": [
"id",
"origin",
"width",
"depth"
],
"title": "Building",
"type": "object"
},
"Crane": {
"additionalProperties": false,
"description": "An overhead travelling crane: its runway along the building's longer side, the bridge\nacross it.",
"properties": {
"capacity_t": {
"description": "Safe working load, t.",
"title": "Capacity T",
"type": "number"
},
"rail_elevation": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Top of rail, m above grade (default 1.5 m below the roof).",
"title": "Rail Elevation"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"capacity_t"
],
"title": "Crane",
"type": "object"
},
"Frame": {
"additionalProperties": false,
"description": "The column grid, as offsets from the building origin along its own x and y.",
"properties": {
"grid_x": {
"items": {
"type": "number"
},
"title": "Grid X",
"type": "array"
},
"grid_y": {
"items": {
"type": "number"
},
"title": "Grid Y",
"type": "array"
}
},
"title": "Frame",
"type": "object"
},
"Level": {
"additionalProperties": false,
"description": "A floor, platform or roof of a building.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"elevation": {
"description": "Top of floor, m above grade.",
"title": "Elevation",
"type": "number"
},
"height": {
"default": 0.0,
"description": "Clear height to the next level, m.",
"title": "Height",
"type": "number"
},
"kind": {
"default": "floor",
"enum": [
"floor",
"platform",
"roof"
],
"title": "Kind",
"type": "string"
}
},
"required": [
"id",
"elevation"
],
"title": "Level",
"type": "object"
},
"Opening": {
"additionalProperties": false,
"description": "A door, roller door, louvre or window in a wall: ``offset`` along the side (from its\nleft end seen from outside), ``width``, ``height`` and ``sill`` above the floor. In a\ncasing, a ``hatch`` is an access opening an item inside is worked through.",
"properties": {
"id": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Id"
},
"side": {
"enum": [
"north",
"south",
"east",
"west"
],
"title": "Side",
"type": "string"
},
"offset": {
"description": "From the left end of the side seen from outside, m.",
"title": "Offset",
"type": "number"
},
"width": {
"title": "Width",
"type": "number"
},
"height": {
"title": "Height",
"type": "number"
},
"sill": {
"default": 0.0,
"description": "Bottom above the building's floor, m.",
"title": "Sill",
"type": "number"
},
"kind": {
"default": "door",
"enum": [
"door",
"roller_door",
"louvre",
"window",
"opening",
"hatch"
],
"title": "Kind",
"type": "string"
}
},
"required": [
"side",
"offset",
"width",
"height"
],
"title": "Opening",
"type": "object"
}
},
"additionalProperties": false,
"description": "Buildings and structures with their levels and column grids.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/building/v1; optional (a file without it reads as cheme/building/v1).",
"title": "Schema"
},
"buildings": {
"items": {
"$ref": "#/$defs/Building"
},
"title": "Buildings",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "BuildingList",
"type": "object"
}
placement¶
File: layout/equipment-placement.yaml. Model: chemeascode.domains.spatial.schemas.PlacementList.
Where each equipment item of the equipment list stands, in 3D.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/placement/v1; optional (a file without it reads as cheme/placement/v1). | |
equipment |
list of Placement | |||
notes |
string | "" |
JSON Schema: cheme schema placement
{
"$defs": {
"Access": {
"additionalProperties": false,
"description": "Declared access to an item: platforms and the side its ladder goes up. Declared access\nreplaces the proposals; ``platforms: []`` declares that the item has no platforms of its\nown (reached from a structure, a building level or a mobile platform: say how in\n``notes``).",
"properties": {
"platforms": {
"items": {
"$ref": "#/$defs/AccessPlatform"
},
"title": "Platforms",
"type": "array"
},
"ladder_side": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Angle of the ladders, degrees ccw from the item's own x; with several platforms it applies to every ladder (leave it out to let the build put each upper ladder beside the end of its platform's arc).",
"title": "Ladder Side"
},
"notes": {
"default": "",
"description": "How the item is reached, why these platforms.",
"title": "Notes",
"type": "string"
}
},
"title": "Access",
"type": "object"
},
"AccessPlatform": {
"additionalProperties": false,
"description": "An access platform around a vertical item: its floor ``elevation`` above the item's\nbottom, the arc it covers (``arc_deg: [from, to]``, degrees ccw from the item's own x;\nnone: all round) and its ``width`` out from the shell.",
"properties": {
"elevation": {
"description": "Floor above the item's bottom, m.",
"title": "Elevation",
"type": "number"
},
"arc_deg": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "[from, to], ccw.",
"title": "Arc Deg"
},
"width": {
"default": 1.0,
"description": "Out from the shell, m (ASSUMED default 1).",
"title": "Width",
"type": "number"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"elevation"
],
"title": "AccessPlatform",
"type": "object"
},
"Mount": {
"additionalProperties": false,
"description": "What an item stands on: a level of a building (``layout/building.yaml``) or of a\nsteel structure (``layout/structures.yaml``).",
"properties": {
"building": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id in layout/building.yaml.",
"title": "Building"
},
"structure": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id in layout/structures.yaml.",
"title": "Structure"
},
"level": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Level id of that building or structure.",
"title": "Level"
}
},
"title": "Mount",
"type": "object"
},
"NozzlePlacement": {
"additionalProperties": false,
"description": "Where one nozzle of the item sits, overriding the position derived from the P&ID.\n\nEither ``angle_deg`` with ``elevation`` (vertical items: degrees ccw from the item's own x,\nheight above the item's bottom) or ``along`` (horizontal items: distance from the front end\nalong the axis, with ``angle_deg`` about the axis, 0 = top, 90 = own +y), or a ``face`` of\nthe item with an ``offset`` ``[u, v]`` from the face's centre (top and bottom: u along the\nitem's x, v along its y; a side: u along the face, v up). Faces are in the item's own frame:\nnorth = +y, east = +x, front = the -x end, back = the +x end.",
"properties": {
"id": {
"description": "The nozzle's SubTagName on the P&ID (N1), or its DEXPI id.",
"minLength": 1,
"title": "Id",
"type": "string"
},
"angle_deg": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Angle Deg"
},
"elevation": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Above the item's bottom, m.",
"title": "Elevation"
},
"along": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "From the front end, m.",
"title": "Along"
},
"face": {
"anyOf": [
{
"enum": [
"top",
"bottom",
"north",
"south",
"east",
"west",
"front",
"back"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Face"
},
"offset": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "[u, v] on the face, m.",
"title": "Offset"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id"
],
"title": "NozzlePlacement",
"type": "object"
},
"Placement": {
"additionalProperties": false,
"description": "Where one equipment item stands. Its shape and size come from the equipment list\n(``type`` and ``dimensions``); ``shape`` overrides the shape, ``size`` is only for an item\nwithout ``dimensions`` (and for an item of ``piping/special-items.yaml``).",
"properties": {
"tag": {
"description": "Tag in equipment/equipment-list.yaml.",
"minLength": 1,
"title": "Tag",
"type": "string"
},
"position": {
"description": "[x, y, z]: centre of the footprint, z = bottom elevation, m.",
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Position",
"type": "array"
},
"rotation_deg": {
"default": 0.0,
"description": "About the vertical axis, ccw; turns the item's own x (the axis of a horizontal item, a pump's shaft) away from east.",
"title": "Rotation Deg",
"type": "number"
},
"mount": {
"anyOf": [
{
"$ref": "#/$defs/Mount"
},
{
"type": "null"
}
],
"default": null,
"description": "{building, level} or {structure, level}."
},
"plinth": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Height of a concrete plinth (foundation block) under an item that stands on grade, m: the item's bottom is on its top (position z = plinth). The model draws the plinth 0.1 m wider than the footprint and a tank's stair from grade.",
"title": "Plinth"
},
"nozzles": {
"description": "Nozzle positions that override the P&ID-derived ones.",
"items": {
"$ref": "#/$defs/NozzlePlacement"
},
"title": "Nozzles",
"type": "array"
},
"shape": {
"anyOf": [
{
"enum": [
"box",
"vertical_cylinder",
"horizontal_cylinder",
"sphere"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Overrides the shape the equipment list's dimensions give.",
"title": "Shape"
},
"access": {
"anyOf": [
{
"$ref": "#/$defs/Access"
},
{
"type": "null"
}
],
"default": null,
"description": "Declared platforms and ladder; without it, layout build proposes them."
},
"size": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"$ref": "#/$defs/PlacementSize"
},
{
"type": "null"
}
],
"default": null,
"description": "Only for an item without dimensions in the equipment list: [dx, dy, dz] (a box), {diameter, height} (vertical cylinder), {diameter, length} (horizontal cylinder, axis along x before rotation), {diameter} (sphere).",
"title": "Size"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"tag",
"position"
],
"title": "Placement",
"type": "object"
},
"PlacementSize": {
"additionalProperties": false,
"description": "Size of a round shape: a diameter, and a height (vertical) or length (horizontal).",
"properties": {
"diameter": {
"title": "Diameter",
"type": "number"
},
"height": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Height"
},
"length": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Length"
}
},
"required": [
"diameter"
],
"title": "PlacementSize",
"type": "object"
}
},
"additionalProperties": false,
"description": "Where each equipment item of the equipment list stands, in 3D.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/placement/v1; optional (a file without it reads as cheme/placement/v1).",
"title": "Schema"
},
"equipment": {
"items": {
"$ref": "#/$defs/Placement"
},
"title": "Equipment",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "PlacementList",
"type": "object"
}
structures¶
File: layout/structures.yaml. Model: chemeascode.domains.spatial.schemas.StructureList.
Steel structures: open frames with decks, platforms, stairs, ladders and casings; pipe_supports: posts and T-posts under single pipes.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/structures/v1; optional (a file without it reads as cheme/structures/v1). | |
structures |
list of Structure | |||
pipe_supports |
list of PipeSupport | |||
notes |
string | "" |
JSON Schema: cheme schema structures
{
"$defs": {
"Enclosure": {
"additionalProperties": false,
"description": "Walls around the frame (a cold box casing, a fire wall).",
"properties": {
"walls": {
"anyOf": [
{
"const": "all",
"type": "string"
},
{
"items": {
"enum": [
"north",
"south",
"east",
"west"
],
"type": "string"
},
"type": "array"
}
],
"default": "all",
"title": "Walls"
},
"height": {
"description": "Top of the walls above grade, m.",
"title": "Height",
"type": "number"
},
"material": {
"default": "casing",
"description": "Rendering hint: casing, fire_wall, ...",
"title": "Material",
"type": "string"
},
"thickness": {
"default": 0.2,
"description": "m (ASSUMED default).",
"title": "Thickness",
"type": "number"
},
"openings": {
"description": "Declared openings and pipe penetrations in the walls (offset along the side from its left end seen from outside, sill above grade); the walls are cut around them.",
"items": {
"$ref": "#/$defs/Opening"
},
"title": "Openings",
"type": "array"
}
},
"required": [
"height"
],
"title": "Enclosure",
"type": "object"
},
"Ladder": {
"additionalProperties": false,
"description": "A vertical ladder at ``at`` [x, y] (frame coordinates), from one level to another;\na cage is drawn above 3 m.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"from": {
"description": "Level id, or grade.",
"minLength": 1,
"title": "From",
"type": "string"
},
"to": {
"minLength": 1,
"title": "To",
"type": "string"
},
"at": {
"description": "[x, y] in the frame's own coordinates, m.",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "At",
"type": "array"
},
"facing": {
"default": "south",
"description": "The side a climber faces away from.",
"enum": [
"north",
"south",
"east",
"west"
],
"title": "Facing",
"type": "string"
}
},
"required": [
"id",
"from",
"to",
"at"
],
"title": "Ladder",
"type": "object"
},
"Opening": {
"additionalProperties": false,
"description": "A door, roller door, louvre or window in a wall: ``offset`` along the side (from its\nleft end seen from outside), ``width``, ``height`` and ``sill`` above the floor. In a\ncasing, a ``hatch`` is an access opening an item inside is worked through.",
"properties": {
"id": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Id"
},
"side": {
"enum": [
"north",
"south",
"east",
"west"
],
"title": "Side",
"type": "string"
},
"offset": {
"description": "From the left end of the side seen from outside, m.",
"title": "Offset",
"type": "number"
},
"width": {
"title": "Width",
"type": "number"
},
"height": {
"title": "Height",
"type": "number"
},
"sill": {
"default": 0.0,
"description": "Bottom above the building's floor, m.",
"title": "Sill",
"type": "number"
},
"kind": {
"default": "door",
"enum": [
"door",
"roller_door",
"louvre",
"window",
"opening",
"hatch"
],
"title": "Kind",
"type": "string"
}
},
"required": [
"side",
"offset",
"width",
"height"
],
"title": "Opening",
"type": "object"
},
"PipeSupport": {
"additionalProperties": false,
"description": "Support steel under a pipe, declared where no frame or rack carries it: a ``t_post``\n(a column with a crossbar ``width`` long on top), a ``post`` (a column with a cap) or a\n``stub`` (a short post standing on the steel below). ``at`` is the plan position, ``top``\nthe top of steel; the foot stands on grade (``from: grade``) or on the steel below\n(``from: steel``: ``base``, else the highest horizontal member under it). The crossbar\n(cap) runs at ``rotation_deg`` (ccw from east): across the pipe.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"kind": {
"default": "t_post",
"enum": [
"t_post",
"post",
"stub"
],
"title": "Kind",
"type": "string"
},
"at": {
"description": "[x, y] in the site frame, m.",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "At",
"type": "array"
},
"top": {
"description": "Top of steel, m above grade.",
"title": "Top",
"type": "number"
},
"from": {
"default": "grade",
"enum": [
"grade",
"steel"
],
"title": "From",
"type": "string"
},
"base": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Foot elevation from steel, m.",
"title": "Base"
},
"width": {
"default": 1.0,
"description": "A t_post's crossbar, m (ASSUMED default).",
"title": "Width",
"type": "number"
},
"rotation_deg": {
"default": 0.0,
"title": "Rotation Deg",
"type": "number"
},
"section": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. HEB200 (ASSUMED default).",
"title": "Section"
},
"serves": {
"description": "Pipe ids or lines it carries.",
"items": {
"type": "string"
},
"title": "Serves",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"at",
"top"
],
"title": "PipeSupport",
"type": "object"
},
"Stair": {
"additionalProperties": false,
"description": "A stair outside one side of the frame, from one level (or ``grade``) to another.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"from": {
"description": "Level id, or grade.",
"minLength": 1,
"title": "From",
"type": "string"
},
"to": {
"minLength": 1,
"title": "To",
"type": "string"
},
"side": {
"enum": [
"north",
"south",
"east",
"west"
],
"title": "Side",
"type": "string"
},
"offset": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Where along the side it starts (from the left seen from outside), m; default: at the left end.",
"title": "Offset"
},
"width": {
"default": 0.9,
"description": "Clear width, m (ASSUMED default).",
"title": "Width",
"type": "number"
},
"out": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "How far out from the side its inner edge stands, m; default: outside the enclosure wall on that side, else at the side (a stair outside a platform along the side stands out by the platform's width).",
"title": "Out"
}
},
"required": [
"id",
"from",
"to",
"side"
],
"title": "Stair",
"type": "object"
},
"Structure": {
"additionalProperties": false,
"description": "An open steel frame: bays ``spans_x`` by ``spans_y`` from ``origin`` (its south-west\ncorner before rotation), columns at every grid point up to the top level.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"origin": {
"description": "South-west corner before rotation [x, y], m.",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Origin",
"type": "array"
},
"rotation_deg": {
"default": 0,
"enum": [
0,
90,
180,
270
],
"title": "Rotation Deg",
"type": "integer"
},
"spans_x": {
"description": "Bay widths along the frame's x, m.",
"items": {
"type": "number"
},
"title": "Spans X",
"type": "array"
},
"spans_y": {
"description": "Bay widths along the frame's y, m.",
"items": {
"type": "number"
},
"title": "Spans Y",
"type": "array"
},
"levels": {
"items": {
"$ref": "#/$defs/StructureLevel"
},
"title": "Levels",
"type": "array"
},
"bracing": {
"anyOf": [
{
"enum": [
"none",
"x",
"k"
],
"type": "string"
},
{
"additionalProperties": {
"enum": [
"none",
"x",
"k"
],
"type": "string"
},
"propertyNames": {
"enum": [
"north",
"south",
"east",
"west"
]
},
"type": "object"
}
],
"default": "none",
"description": "One kind for every side, or per side.",
"title": "Bracing"
},
"stairs": {
"items": {
"$ref": "#/$defs/Stair"
},
"title": "Stairs",
"type": "array"
},
"ladders": {
"items": {
"$ref": "#/$defs/Ladder"
},
"title": "Ladders",
"type": "array"
},
"enclosure": {
"anyOf": [
{
"$ref": "#/$defs/Enclosure"
},
{
"type": "null"
}
],
"default": null
},
"serves": {
"description": "The valves (in-line item ids or tags) a valve access platform is for: one way down is enough for it while no point is farther than dead_end_m from it.",
"items": {
"type": "string"
},
"title": "Serves",
"type": "array"
},
"column_section": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. HEB300; default by span.",
"title": "Column Section"
},
"beam_section": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. HEB240; default by span.",
"title": "Beam Section"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"origin",
"spans_x",
"spans_y"
],
"title": "Structure",
"type": "object"
},
"StructureLevel": {
"additionalProperties": false,
"description": "A level of a steel frame: a full ``deck`` or a ``platform`` (optionally only over\n``extent`` [x0, y0, x1, y1] in the frame's own coordinates).",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"elevation": {
"description": "Top of grating, m above grade.",
"title": "Elevation",
"type": "number"
},
"kind": {
"default": "deck",
"enum": [
"deck",
"platform"
],
"title": "Kind",
"type": "string"
},
"extent": {
"anyOf": [
{
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "[x0, y0, x1, y1] in the frame's own coordinates, m; it may reach up to 3 m outside the frame (a cantilevered platform, e.g. outside a casing).",
"title": "Extent"
},
"use": {
"anyOf": [
{
"enum": [
"regular",
"occasional"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How often people work there (default: a deck regular, a platform occasional); a level in regular use is reached by a stair.",
"title": "Use"
}
},
"required": [
"id",
"elevation"
],
"title": "StructureLevel",
"type": "object"
}
},
"additionalProperties": false,
"description": "Steel structures: open frames with decks, platforms, stairs, ladders and casings;\n``pipe_supports``: posts and T-posts under single pipes.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/structures/v1; optional (a file without it reads as cheme/structures/v1).",
"title": "Schema"
},
"structures": {
"items": {
"$ref": "#/$defs/Structure"
},
"title": "Structures",
"type": "array"
},
"pipe_supports": {
"items": {
"$ref": "#/$defs/PipeSupport"
},
"title": "Pipe Supports",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "StructureList",
"type": "object"
}
zones¶
File: layout/zones.yaml. Model: chemeascode.domains.spatial.schemas.ZoneList.
Keep-clear, laydown, maintenance and escape zones, hazardous areas and oxygen-enriched or oxygen-deficient zones.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/zones/v1; optional (a file without it reads as cheme/zones/v1). | |
zones |
list of Zone | |||
notes |
string | "" |
JSON Schema: cheme schema zones
{
"$defs": {
"Zone": {
"additionalProperties": false,
"description": "A zone: an explicit volume (``box``, ``cylinder``, ``sphere``) or the volumes the\nradius table gives around its ``sources``.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"kind": {
"enum": [
"keep_clear",
"laydown",
"maintenance",
"crane_pad",
"escape",
"hazardous",
"oxygen_enriched",
"oxygen_deficient"
],
"title": "Kind",
"type": "string"
},
"zone": {
"anyOf": [
{
"enum": [
0,
1,
2,
20,
21,
22
],
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Hazardous area zone (IEC 60079-10-1/-2 numbering).",
"title": "Zone"
},
"shape": {
"anyOf": [
{
"enum": [
"box",
"cylinder",
"sphere"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Shape"
},
"box": {
"anyOf": [
{
"maxItems": 6,
"minItems": 6,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "[x0, y0, z0, x1, y1, z1], m.",
"title": "Box"
},
"centre": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Cylinder: centre of its base; sphere: its centre.",
"title": "Centre"
},
"radius": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Radius"
},
"height": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Cylinder height, m.",
"title": "Height"
},
"sources": {
"items": {
"$ref": "#/$defs/ZoneSource"
},
"title": "Sources",
"type": "array"
},
"reach_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "A crane pad: the working radius of the crane standing on it, m (default: the layout criteria's crane_reach_m).",
"title": "Reach M"
},
"basis": {
"default": "",
"title": "Basis",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"kind"
],
"title": "Zone",
"type": "object"
},
"ZoneSource": {
"additionalProperties": false,
"description": "A release point a zone is derived from: a placed tag, a nozzle (``TAG/N1``) or a line\nnumber (its open ends), with its release grade and substance.",
"properties": {
"item": {
"description": "A placed tag, TAG/NOZZLE, or a line number.",
"minLength": 1,
"title": "Item",
"type": "string"
},
"release_grade": {
"default": "secondary",
"enum": [
"continuous",
"primary",
"secondary"
],
"title": "Release Grade",
"type": "string"
},
"substance": {
"description": "e.g. oxygen, nitrogen, hydrogen, methane.",
"title": "Substance",
"type": "string"
},
"source_kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Kind of release point in the radius table (vent, psv_outlet, pump_seal, compressor_seal, flange, valve, drain); default: from the item.",
"title": "Source Kind"
},
"substance_class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Class in the radius table (oxygen, inert, flammable_gas, flammable_liquid); default: from the substance name.",
"title": "Substance Class"
}
},
"required": [
"item",
"substance"
],
"title": "ZoneSource",
"type": "object"
}
},
"additionalProperties": false,
"description": "Keep-clear, laydown, maintenance and escape zones, hazardous areas and oxygen-enriched\nor oxygen-deficient zones.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/zones/v1; optional (a file without it reads as cheme/zones/v1).",
"title": "Schema"
},
"zones": {
"items": {
"$ref": "#/$defs/Zone"
},
"title": "Zones",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "ZoneList",
"type": "object"
}
routing¶
File: piping/routing.yaml. Model: chemeascode.domains.spatial.schemas.Routing.
How the router runs pipes: tier rules, spacing, headroom, and intent per line.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/routing/v1; optional (a file without it reads as cheme/routing/v1). | |
rules |
RoutingRules | |||
lines |
list of LineRouting | |||
operators |
list of Operator | Chain wheels, extension spindles, remote operators and remote-mounted transmitters for the valves and instruments out of reach. | ||
notes |
string | "" |
JSON Schema: cheme schema routing
{
"$defs": {
"BatteryLimit": {
"additionalProperties": false,
"description": "Where the lines leaving the plot end (a ``BL``, ``CW``, ``CWR`` ... end of the line\nlist): a fixed ``point``, or an end of a ``rack``. Matched by line number pattern\n(``CW-*``; a pattern without ``*`` or ``?`` is a prefix) or by fluid.",
"properties": {
"id": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Id"
},
"lines": {
"description": "Line number patterns.",
"items": {
"type": "string"
},
"title": "Lines",
"type": "array"
},
"fluids": {
"description": "Fluid names, any case.",
"items": {
"type": "string"
},
"title": "Fluids",
"type": "array"
},
"point": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "The battery limit point, m.",
"title": "Point"
},
"rack": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "End the line at an end of this rack.",
"title": "Rack"
},
"rack_end": {
"default": "nearest",
"description": "Which end of the rack: its first point, its last, or the one nearest the line's other end.",
"enum": [
"start",
"end",
"nearest"
],
"title": "Rack End",
"type": "string"
}
},
"title": "BatteryLimit",
"type": "object"
},
"Buried": {
"additionalProperties": false,
"description": "A line (or segment) laid in the ground. Its runs whose top lies below grade are buried:\nthe road and escape-route headroom, the clash rules against steel, items, envelopes and\nzones above grade, and the span rules leave them out; the cover over them is checked\ninstead (``cheme.layout-buried-cover``). Its runs above grade (the risers at the users)\nare pipes like any other.",
"properties": {
"cover_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Least soil cover over the pipe's top the design needs, m (grade to the outside of the pipe and its insulation); under a road at least the rules' road_cover_m. Default: road_cover_m under roads, unchecked elsewhere.",
"title": "Cover M"
},
"basis": {
"default": "",
"description": "Why, e.g. a DESIGN.md decision.",
"title": "Basis",
"type": "string"
}
},
"title": "Buried",
"type": "object"
},
"LineRouting": {
"additionalProperties": false,
"description": "Routing intent for a line, or one segment of it (its DEXPI id or segment number, or\n``<sheet stem>/<DEXPI id>`` where the same segment id appears on more than one sheet).",
"properties": {
"line": {
"minLength": 1,
"title": "Line",
"type": "string"
},
"segment": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "DEXPI segment id or number (S2); `<sheet stem>/<DEXPI id>` (the pipe id, e.g. P-03/Line_A_S1) for one sheet's segment when the line has the same segment id on several sheets.",
"title": "Segment"
},
"rack": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rack"
},
"tier": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Tier elevation on the rack, m.",
"title": "Tier"
},
"via": {
"description": "Points to pass, in order.",
"items": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Via",
"type": "array"
},
"elevation": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Run at this elevation, m.",
"title": "Elevation"
},
"route": {
"anyOf": [
{
"items": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "A pinned polyline (from `cheme layout pin`).",
"title": "Route"
},
"skip": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Do not route it, for this reason.",
"title": "Skip"
},
"gravity": {
"default": false,
"title": "Gravity",
"type": "boolean"
},
"buried": {
"anyOf": [
{
"$ref": "#/$defs/Buried"
},
{
"type": "null"
}
],
"default": null,
"description": "Laid in the ground (`true` or `{cover_m: 1.2, basis: ...}`): its runs below grade are buried (see Buried). `false` is no declaration: a segment entry with it still takes its line entry's `buried`."
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"line"
],
"title": "LineRouting",
"type": "object"
},
"Operator": {
"additionalProperties": false,
"description": "How a valve or a transmitter out of reach is operated: a ``chainwheel`` (a handwheel\nvalve in infrequent use), an ``extension_spindle`` or ``remote_operator`` (to a pedestal at\na floor), or a transmitter's ``remote_mount`` (on ``impulse`` lines or a ``capillary`` to a\nstand at a floor). The rules on the model check it against the layout criteria.",
"properties": {
"item": {
"description": "The valve's or instrument's tag, an in-line item id (<sheet>/<DEXPI id>), or TAG/NOZZLE for a transmitter on an equipment tapping.",
"minLength": 1,
"title": "Item",
"type": "string"
},
"kind": {
"enum": [
"chainwheel",
"extension_spindle",
"remote_operator",
"remote_mount"
],
"title": "Kind",
"type": "string"
},
"use": {
"default": "regular",
"description": "How often it is operated; a chain wheel needs infrequent.",
"enum": [
"infrequent",
"regular"
],
"title": "Use",
"type": "string"
},
"via": {
"anyOf": [
{
"enum": [
"impulse",
"capillary"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "remote_mount: impulse lines (default) or a capillary seal.",
"title": "Via"
},
"length_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The spindle's, operator's or line's length, m (default: to the nearest floor).",
"title": "Length M"
},
"basis": {
"default": "",
"description": "Why, e.g. a DESIGN.md decision.",
"title": "Basis",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"item",
"kind"
],
"title": "Operator",
"type": "object"
},
"RoutingRules": {
"additionalProperties": false,
"properties": {
"tiers": {
"items": {
"$ref": "#/$defs/Tier"
},
"title": "Tiers",
"type": "array"
},
"local_max_m": {
"default": 15.0,
"description": "Ends further apart than this (in plan) go over the rack, m (ASSUMED).",
"title": "Local Max M",
"type": "number"
},
"local_elevation_m": {
"default": 3.5,
"description": "Elevation of local runs in an area (the pipe-way above grade), m (ASSUMED; typically 3.0 .. 4.5).",
"title": "Local Elevation M",
"type": "number"
},
"grade_max_m": {
"default": 3.0,
"description": "Ends closer than this (in plan) stay at their own elevation, m.",
"title": "Grade Max M",
"type": "number"
},
"rack_reach_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Deprecated: set rack_reach in layout/site-plan.yaml, which wins over this. How far an end may be from a rack centreline to be carried by it, m; one value for the router and cheme validate's line-route check (see rack_reach()).",
"title": "Rack Reach M"
},
"rack_detour_factor": {
"default": 2.5,
"description": "A line that only goes to the rack for its length stays local when the rack route is longer than this many times the plan distance.",
"title": "Rack Detour Factor",
"type": "number"
},
"battery_limits": {
"description": "Battery limit points per line pattern or fluid (default: the nearest rack end, then the site edge).",
"items": {
"$ref": "#/$defs/BatteryLimit"
},
"title": "Battery Limits",
"type": "array"
},
"spacing_m": {
"default": 0.1,
"description": "Clear gap between pipes, m (ASSUMED).",
"title": "Spacing M",
"type": "number"
},
"headroom_road_m": {
"default": 6.0,
"description": "Under pipes over roads, m.",
"title": "Headroom Road M",
"type": "number"
},
"headroom_walkway_m": {
"default": 2.2,
"description": "Over escape routes, m.",
"title": "Headroom Walkway M",
"type": "number"
},
"road_cover_m": {
"default": 1.2,
"description": "Least soil cover over the top of a buried pipe under a road, m (ASSUMED; the site's or road authority's rule replaces it).",
"title": "Road Cover M",
"type": "number"
},
"grid_m": {
"default": 0.5,
"description": "Router grid, m (0.25 .. 1).",
"title": "Grid M",
"type": "number"
},
"rack_bent_spacing_m": {
"default": 6.0,
"description": "Rack bents, m (ASSUMED).",
"title": "Rack Bent Spacing M",
"type": "number"
},
"gravity_fluids": {
"description": "Fluids that drain by gravity (fall checked).",
"items": {
"type": "string"
},
"title": "Gravity Fluids",
"type": "array"
},
"vent_rise_m": {
"default": 1.0,
"description": "Rise of an open vent or relief end above its stub, m.",
"title": "Vent Rise M",
"type": "number"
},
"vents": {
"description": "Riser heights of open vent and relief ends per line pattern or fluid (the first rule that matches).",
"items": {
"$ref": "#/$defs/VentRule"
},
"title": "Vents",
"type": "array"
}
},
"title": "RoutingRules",
"type": "object"
},
"Tier": {
"additionalProperties": false,
"description": "Which lines run on which rack tier: by fluid (the line list's ``fluid``) or by line\nnumber prefix; ``rack`` limits it to one rack.",
"properties": {
"rack": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rack"
},
"elevation": {
"description": "Tier elevation (top of steel), m.",
"title": "Elevation",
"type": "number"
},
"fluids": {
"description": "Fluid names, any case.",
"items": {
"type": "string"
},
"title": "Fluids",
"type": "array"
},
"lines": {
"description": "Line number prefixes.",
"items": {
"type": "string"
},
"title": "Lines",
"type": "array"
}
},
"required": [
"elevation"
],
"title": "Tier",
"type": "object"
},
"VentRule": {
"additionalProperties": false,
"description": "How high the open end of a vent or relief line rises, for the lines it matches (line\nnumber pattern, as ``battery_limits``, or fluid): at least ``rise_m`` above its stub, and\nwith a ``radius_m`` (default: the largest radius of the zones ``layout/zones.yaml`` derives\nfrom the line) so high that a sphere of that radius around the outlet stays clear of every\nwalking level (grade, structure floors, building floors and roofs) up to the walkway\nheadroom above it; at most ``max_rise_m``.",
"properties": {
"lines": {
"description": "Line number patterns.",
"items": {
"type": "string"
},
"title": "Lines",
"type": "array"
},
"fluids": {
"description": "Fluid names, any case.",
"items": {
"type": "string"
},
"title": "Fluids",
"type": "array"
},
"rise_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Least rise above the stub, m (default: vent_rise_m).",
"title": "Rise M"
},
"radius_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Keep a sphere of this radius around the outlet off the walking levels, m (default: the line's zone radius; none: only rise_m).",
"title": "Radius M"
},
"max_rise_m": {
"default": 20.0,
"description": "Highest rise above the stub, m.",
"title": "Max Rise M",
"type": "number"
}
},
"title": "VentRule",
"type": "object"
}
},
"additionalProperties": false,
"description": "How the router runs pipes: tier rules, spacing, headroom, and intent per line.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/routing/v1; optional (a file without it reads as cheme/routing/v1).",
"title": "Schema"
},
"rules": {
"$ref": "#/$defs/RoutingRules"
},
"lines": {
"items": {
"$ref": "#/$defs/LineRouting"
},
"title": "Lines",
"type": "array"
},
"operators": {
"description": "Chain wheels, extension spindles, remote operators and remote-mounted transmitters for the valves and instruments out of reach.",
"items": {
"$ref": "#/$defs/Operator"
},
"title": "Operators",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "Routing",
"type": "object"
}
pipe_specs¶
File: piping/pipe-specs.yaml. Model: chemeascode.domains.piping.schemas.pipe_specs.PipeSpecs.
Pipe classes and insulation thicknesses for the 3D pipe routes.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/pipe_specs/v1; optional (a file without it reads as cheme/pipe_specs/v1). | |
classes |
list of PipeClass | |||
insulation |
list of Insulation | |||
notes |
string | "" |
JSON Schema: cheme schema pipe_specs
{
"$defs": {
"Insulation": {
"additionalProperties": false,
"description": "An insulation type, as the line list's ``insulation`` names it, and its thickness:\n``thickness_mm`` for every DN, or ``rules`` by DN (the first that applies).",
"properties": {
"type": {
"description": "As the line list's insulation names it, any case.",
"title": "Type",
"type": "string"
},
"thickness_mm": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Thickness Mm"
},
"rules": {
"items": {
"$ref": "#/$defs/ThicknessRule"
},
"title": "Rules",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"type"
],
"title": "Insulation",
"type": "object"
},
"PipeClass": {
"additionalProperties": false,
"description": "A pipe class: the line list's ``pressure_class`` (or a class code) and what it means.",
"properties": {
"code": {
"description": "As the line list's pressure_class gives it, e.g. PN16.",
"title": "Code",
"type": "string"
},
"material": {
"default": "",
"title": "Material",
"type": "string"
},
"rating": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rating"
},
"colour": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Rendering colour, e.g. #4a7fb5.",
"title": "Colour"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"code"
],
"title": "PipeClass",
"type": "object"
},
"ThicknessRule": {
"additionalProperties": false,
"description": "Insulation thickness for lines up to (and including) ``dn_max``.",
"properties": {
"dn_max": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Up to this DN; none: any DN.",
"title": "Dn Max"
},
"thickness_mm": {
"title": "Thickness Mm",
"type": "number"
}
},
"required": [
"thickness_mm"
],
"title": "ThicknessRule",
"type": "object"
}
},
"additionalProperties": false,
"description": "Pipe classes and insulation thicknesses for the 3D pipe routes.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/pipe_specs/v1; optional (a file without it reads as cheme/pipe_specs/v1).",
"title": "Schema"
},
"classes": {
"items": {
"$ref": "#/$defs/PipeClass"
},
"title": "Classes",
"type": "array"
},
"insulation": {
"items": {
"$ref": "#/$defs/Insulation"
},
"title": "Insulation",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "PipeSpecs",
"type": "object"
}
trays¶
File: electrical/tray-rules.yaml. Model: chemeascode.domains.spatial.schemas.TrayRules.
electrical/tray-rules.yaml: how the cable trays are sized and run.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/trays/v1; optional (a file without it reads as cheme/trays/v1). | |
rules |
TrayRuleSet | |||
notes |
string | "" |
JSON Schema: cheme schema trays
{
"$defs": {
"PowerTrays": {
"additionalProperties": false,
"description": "The power trays of a rack: side by side on its tray tier, centred on the power lane,\n``widths_mm[-1] + spacing_m`` apart (centre to centre). The build gives each cable on the\nrack one of them: a tray of its voltage class, else an ``any`` tray (else another, finding\nlayout-tray-voltage), the one that keeps it under ``fill_max_power``, then the emptiest.",
"properties": {
"rack": {
"minLength": 1,
"title": "Rack",
"type": "string"
},
"trays": {
"anyOf": [
{
"type": "integer"
},
{
"items": {
"enum": [
"any",
"lv",
"hv"
],
"type": "string"
},
"type": "array"
}
],
"description": "How many power trays (each takes any cable), or one voltage class per tray: hv (above lv_max_v), lv (up to it) or any, e.g. [hv, hv, lv].",
"title": "Trays"
}
},
"required": [
"rack",
"trays"
],
"title": "PowerTrays",
"type": "object"
},
"TrayRuleSet": {
"additionalProperties": false,
"description": "How the cable trays are sized and run (every default ASSUMED: check it against the\nproject's electrical standard).",
"properties": {
"widths_mm": {
"description": "Standard tray widths, mm, smallest first.",
"items": {
"type": "number"
},
"title": "Widths Mm",
"type": "array"
},
"depth_mm": {
"default": 100.0,
"description": "Usable depth (side rail height), mm.",
"title": "Depth Mm",
"type": "number"
},
"fill_max_power": {
"default": 0.3,
"description": "Fill of a power tray's cross-section at most (cables apart).",
"title": "Fill Max Power",
"type": "number"
},
"fill_max_instrument": {
"default": 0.4,
"description": "Fill of an instrument tray's cross-section at most.",
"title": "Fill Max Instrument",
"type": "number"
},
"separation_m": {
"default": 0.3,
"description": "Clear distance between a power and an instrument tray at least, m (e.g. EN 50174-2 without a metal divider).",
"title": "Separation M",
"type": "number"
},
"spacing_m": {
"default": 0.15,
"description": "Clear gap to pipes, steel, items and other trays, m.",
"title": "Spacing M",
"type": "number"
},
"tier_gap_m": {
"default": 1.5,
"description": "A rack without a tiers rule carries its trays this far above its top tier, on steel of their own, m.",
"title": "Tier Gap M",
"type": "number"
},
"tiers": {
"items": {
"$ref": "#/$defs/TrayTier"
},
"title": "Tiers",
"type": "array"
},
"power_trays": {
"description": "Racks with more than one power tray (e.g. HV and LV apart); a rack not listed has one.",
"items": {
"$ref": "#/$defs/PowerTrays"
},
"title": "Power Trays",
"type": "array"
},
"lv_max_v": {
"default": 1000.0,
"description": "A power cable up to this rated voltage is lv, above it hv (power_trays), V (the low-voltage limit of IEC 60038).",
"title": "Lv Max V",
"type": "number"
},
"lane_fraction": {
"default": 0.25,
"description": "Power trays run this fraction of the rack width to one side of its centreline, instrument trays to the other.",
"title": "Lane Fraction",
"type": "number"
},
"entry_elevation_m": {
"default": 3.0,
"description": "Where cables leave a room without a point, m above grade.",
"title": "Entry Elevation M",
"type": "number"
},
"branch_elevation_m": {
"default": 3.0,
"description": "A branch runs at least this high (above the walkway headroom) to above its load and drops onto it there, m.",
"title": "Branch Elevation M",
"type": "number"
},
"rack_reach_m": {
"default": 50.0,
"description": "A load farther than this from every rack is fed directly, m.",
"title": "Rack Reach M",
"type": "number"
},
"jb_elevation_m": {
"default": 1.2,
"description": "A proposed junction box's centre above grade, m.",
"title": "Jb Elevation M",
"type": "number"
},
"jb_reach_m": {
"default": 30.0,
"description": "An instrument takes a declared junction box within this, m.",
"title": "Jb Reach M",
"type": "number"
},
"termination_m": {
"default": 1.5,
"description": "Cable added at each end for its gland and termination, m.",
"title": "Termination M",
"type": "number"
},
"slack": {
"default": 0.05,
"description": "Cable added for sag and bends, fraction.",
"title": "Slack",
"type": "number"
},
"grid_m": {
"default": 0.5,
"description": "Router grid of the tray legs, m.",
"title": "Grid M",
"type": "number"
},
"avoid_zones": {
"description": "Zone kinds (layout/zones.yaml) a tray may not run in: a tray inside one is finding layout-tray-zone (cable sheath and glands for the zone, or another lane).",
"items": {
"type": "string"
},
"title": "Avoid Zones",
"type": "array"
},
"support_span_m": {
"default": 6.0,
"description": "Longest tray run between supports (heavy-duty cable ladder on rack bents, ASSUMED): a longer level run with no steel is finding layout-tray-span, m.",
"title": "Support Span M",
"type": "number"
},
"support_reach_m": {
"default": 1.0,
"description": "Steel this close to a tray (a hanger, a bracket off a column or wall) supports it, m.",
"title": "Support Reach M",
"type": "number"
}
},
"title": "TrayRuleSet",
"type": "object"
},
"TrayTier": {
"additionalProperties": false,
"description": "The tray tier of a rack: where its power and instrument trays run along it.",
"properties": {
"rack": {
"minLength": 1,
"title": "Rack",
"type": "string"
},
"elevation": {
"description": "Bottom of the trays (top of their steel), m.",
"title": "Elevation",
"type": "number"
}
},
"required": [
"rack",
"elevation"
],
"title": "TrayTier",
"type": "object"
}
},
"additionalProperties": false,
"description": "``electrical/tray-rules.yaml``: how the cable trays are sized and run.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/trays/v1; optional (a file without it reads as cheme/trays/v1).",
"title": "Schema"
},
"rules": {
"$ref": "#/$defs/TrayRuleSet"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "TrayRules",
"type": "object"
}
hvac¶
File: layout/hvac.yaml. Model: chemeascode.domains.spatial.schemas.Hvac.
layout/hvac.yaml: the air handling units, the ventilated rooms and the duct rules.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/hvac/v1; optional (a file without it reads as cheme/hvac/v1). | |
rules |
HvacRuleSet | |||
units |
list of HvacUnit | |||
rooms |
list of HvacRoom | |||
notes |
string | "" |
JSON Schema: cheme schema hvac
{
"$defs": {
"HvacRoom": {
"additionalProperties": false,
"description": "A ventilated room of a building: the whole building (or the plan ``extent``) on one\nlevel, its air changes per hour (or its supply ``flow_m3h``), the unit that serves it and,\noptionally, its supply and extract terminals in plan (else generated in rows).",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"building": {
"description": "Id in layout/building.yaml.",
"minLength": 1,
"title": "Building",
"type": "string"
},
"level": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Level of the room (default: the building's lowest floor).",
"title": "Level"
},
"extent": {
"anyOf": [
{
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "[x0, y0, x1, y1] in plan, site m (default: the building).",
"title": "Extent"
},
"height": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Room height, m (default: the level's clear height).",
"title": "Height"
},
"air_changes_per_h": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Supply air changes per hour (of the room's volume).",
"title": "Air Changes Per H"
},
"flow_m3h": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Supply air, m3/h (instead of air_changes_per_h).",
"title": "Flow M3H"
},
"extract_fraction": {
"default": 1.0,
"description": "Extract air over supply air (below 1: the room is kept above ambient pressure; 0: no extract ducts, the air leaves by louvres and doors).",
"title": "Extract Fraction",
"type": "number"
},
"unit": {
"description": "Id of the air handling unit (units:) that serves it.",
"minLength": 1,
"title": "Unit",
"type": "string"
},
"supply": {
"description": "Supply terminals [[x, y], ...] in duct order.",
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Supply",
"type": "array"
},
"extract": {
"description": "Extract terminals [[x, y], ...] in duct order.",
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Extract",
"type": "array"
},
"duct_elevation_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Centreline of the room's supply ducts, m above grade (default: under the ceiling, see rules); the extract ducts run below them by both mains' envelopes and the spacing.",
"title": "Duct Elevation M"
},
"basis": {
"default": "",
"description": "Why these air changes (heat load, gas, code).",
"title": "Basis",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"building",
"unit"
],
"title": "HvacRoom",
"type": "object"
},
"HvacRuleSet": {
"additionalProperties": false,
"description": "How the ducts are sized and run. Velocity limits, standard sides, the aspect ratio and\nthe terminal size default to the package table ``data/duct-sizing.yaml`` (ASSUMED); every\nother default is ASSUMED too.",
"properties": {
"velocities": {
"additionalProperties": {
"$ref": "#/$defs/VelocityLimit"
},
"description": "Overrides of the package velocity limits.",
"propertyNames": {
"enum": [
"main",
"header",
"intake",
"exhaust",
"louvre"
]
},
"title": "Velocities",
"type": "object"
},
"sides_mm": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Standard duct sides, mm, smallest first.",
"title": "Sides Mm"
},
"max_aspect": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Width over height at most.",
"title": "Max Aspect"
},
"max_height_mm": {
"default": 1000.0,
"description": "Tallest duct (the depth of the ceiling space), mm.",
"title": "Max Height Mm",
"type": "number"
},
"terminal_max_m3h": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Air one terminal takes at most, m3/h.",
"title": "Terminal Max M3H"
},
"terminal_pitch_m": {
"default": 4.0,
"description": "Generated terminals stand at least this far apart in a row, m.",
"title": "Terminal Pitch M",
"type": "number"
},
"louvre_free_area": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Free area of a louvre over its face, fraction.",
"title": "Louvre Free Area"
},
"ceiling_gap_m": {
"default": 0.3,
"description": "Clear gap from the top of the supply ducts to the ceiling (the roof, or the underside of a crane runway), m.",
"title": "Ceiling Gap M",
"type": "number"
},
"spacing_m": {
"default": 0.15,
"description": "Clear gap to items, steel, pipes, trays and other ducts, m.",
"title": "Spacing M",
"type": "number"
},
"grid_m": {
"default": 0.5,
"description": "Router grid of the ducts, m.",
"title": "Grid M",
"type": "number"
}
},
"title": "HvacRuleSet",
"type": "object"
},
"HvacUnit": {
"additionalProperties": false,
"description": "An air handling unit standing on a floor of a building: a box ``size`` [length, width,\nheight] centred on ``position``, its length along x at ``rotation_deg`` 0, with four ports on\nits top (outdoor air, exhaust, return and supply air, in that order along its length).",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"building": {
"description": "Id in layout/building.yaml.",
"minLength": 1,
"title": "Building",
"type": "string"
},
"level": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Level it stands on (default: the building's lowest floor).",
"title": "Level"
},
"position": {
"description": "Centre of the unit in plan [x, y], site m.",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Position",
"type": "array"
},
"rotation_deg": {
"default": 0,
"enum": [
0,
90,
180,
270
],
"title": "Rotation Deg",
"type": "integer"
},
"size": {
"default": [
4.0,
2.0,
2.2
],
"description": "[length, width, height], m (ASSUMED default).",
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Size",
"type": "array"
},
"capacity_m3h": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Supply air the unit delivers at most, m3/h (vendor data).",
"title": "Capacity M3H"
},
"intake": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Opening id of its building that outdoor air comes in by.",
"title": "Intake"
},
"exhaust": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Opening id of its building that the extract air leaves by.",
"title": "Exhaust"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"building",
"position"
],
"title": "HvacUnit",
"type": "object"
},
"VelocityLimit": {
"additionalProperties": false,
"description": "A plant's own air velocity limit for one kind of duct (or the louvres).",
"properties": {
"max_m_s": {
"title": "Max M S",
"type": "number"
},
"basis": {
"default": "",
"title": "Basis",
"type": "string"
}
},
"required": [
"max_m_s"
],
"title": "VelocityLimit",
"type": "object"
}
},
"additionalProperties": false,
"description": "``layout/hvac.yaml``: the air handling units, the ventilated rooms and the duct rules.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/hvac/v1; optional (a file without it reads as cheme/hvac/v1).",
"title": "Schema"
},
"rules": {
"$ref": "#/$defs/HvacRuleSet"
},
"units": {
"items": {
"$ref": "#/$defs/HvacUnit"
},
"title": "Units",
"type": "array"
},
"rooms": {
"items": {
"$ref": "#/$defs/HvacRoom"
},
"title": "Rooms",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "Hvac",
"type": "object"
}
datasheet¶
File: equipment/datasheets/<TAG>.yaml. Model: chemeascode.domains.equipment.schemas.datasheet.Datasheet.
One equipment item's datasheet. tag must be in the equipment list.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/datasheet/v1; optional (a file without it reads as cheme/datasheet/v1). | |
tag |
string | yes | Equipment-list tag; the file is named <tag>.yaml. | |
type |
string or null | null |
DEXPI class, as in the equipment list. | |
service |
string | "" |
||
operating |
Operating | Operating conditions: pressure_barg, temperature_degc, flow_kg_h, ...; and the flowsheet case and streams they are for. | ||
design |
map of number or string or Quantity | Design conditions; pressure_barg and temperature_degc must match the equipment list's design_pressure_barg / design_temperature_degc. | ||
materials |
map of number or string or Quantity or Material | Material per part: casing, impeller, shell, ...; a value, or a mapping with value, material_class and standard. | ||
dimensions |
DatasheetDimensions or null | null |
Main dimensions (the outline drawing is drawn from them). | |
weights |
Weights or null | null |
||
nozzles |
list of DatasheetNozzle | The item's nozzles (from the P&ID). | ||
sizing_basis |
list of SizingItem | |||
type_specific |
object | Fields of the equipment type (pump: NPSHr, ...). | ||
draft |
boolean | false |
A generated draft (cheme datasheets draft): every value says where it comes from, TBD values are not known yet; the datasheets gate does not count it. | |
notes |
string | "" |
JSON Schema: cheme schema datasheet
{
"$defs": {
"Baseplate": {
"additionalProperties": false,
"description": "The baseplate (skid) of a machine.",
"properties": {
"length": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "m, along the shaft.",
"title": "Length"
},
"width": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "m, across.",
"title": "Width"
}
},
"title": "Baseplate",
"type": "object"
},
"ColumnSection": {
"additionalProperties": false,
"description": "One section of a column: trays or packing, from the bottom tangent line up.",
"properties": {
"id": {
"description": "Section name, e.g. stripping, rectifying, bed 1.",
"title": "Id",
"type": "string"
},
"internals": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "sieve trays, valve trays, structured packing Mellapak 250Y, ...",
"title": "Internals"
},
"bottom": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Bottom of the section above the bottom tangent line, m.",
"title": "Bottom"
},
"height": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Section height, m.",
"title": "Height"
},
"count": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of trays (or beds).",
"title": "Count"
},
"spacing": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Tray spacing, m.",
"title": "Spacing"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id"
],
"title": "ColumnSection",
"type": "object"
},
"DatasheetDimensions": {
"additionalProperties": false,
"description": "The main dimensions of the item, each a value with its unit (m unless stated) and\nsource. Give those of the item's family: vessels, columns and tanks (diameters, tangent\nlength, head, support, column sections), shell-and-tube exchangers (the shell's inside\ndiameter, tube bundle, passes), plate exchangers (plates), machines (baseplate, shaft\nheight). ``overall_*`` are the overall sizes the equipment list's ``dimensions`` give.",
"properties": {
"orientation": {
"anyOf": [
{
"enum": [
"vertical",
"horizontal"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the axis of a round item (vessel, column, exchanger).",
"title": "Orientation"
},
"inside_diameter": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Shell ID, m.",
"title": "Inside Diameter"
},
"outside_diameter": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Shell OD, m.",
"title": "Outside Diameter"
},
"tangent_length": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Tangent to tangent (T-T), m: the cylindrical shell.",
"title": "Tangent Length"
},
"head": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Head (or roof) type: ellipsoidal_2_1, hemispherical, torispherical, flat, cone, cone_roof, dome_roof.",
"title": "Head"
},
"support": {
"anyOf": [
{
"$ref": "#/$defs/Support"
},
{
"type": "null"
}
],
"default": null
},
"sections": {
"description": "A column's sections (trays, packed beds).",
"items": {
"$ref": "#/$defs/ColumnSection"
},
"title": "Sections",
"type": "array"
},
"shell_passes": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Shell-and-tube: shell passes.",
"title": "Shell Passes"
},
"tubes": {
"anyOf": [
{
"$ref": "#/$defs/Tubes"
},
{
"type": "null"
}
],
"default": null
},
"plates": {
"anyOf": [
{
"$ref": "#/$defs/Plates"
},
{
"type": "null"
}
],
"default": null
},
"baseplate": {
"anyOf": [
{
"$ref": "#/$defs/Baseplate"
},
{
"type": "null"
}
],
"default": null
},
"shaft_height": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "A machine's shaft centre line above the baseplate's underside, m.",
"title": "Shaft Height"
},
"axis_deg": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Plan direction of a horizontal item's (or machine's) own axis, deg from site east counter-clockwise (the placement's angle): turns the nozzles' orientation_deg into the item's frame on the outline drawing.",
"title": "Axis Deg"
},
"housed_in": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Tag of the item that houses this one (a condenser in a column sump), when it has no main dimensions of its own: the outline drawing says so.",
"title": "Housed In"
},
"overall_height": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Overall height, m.",
"title": "Overall Height"
},
"overall_length": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Overall length, m.",
"title": "Overall Length"
},
"overall_width": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Overall width, m.",
"title": "Overall Width"
}
},
"title": "DatasheetDimensions",
"type": "object"
},
"DatasheetNozzle": {
"additionalProperties": false,
"description": "One nozzle of the item, as its P&ID draws it.",
"properties": {
"name": {
"description": "SubTagName on the P&ID (N1), else its DEXPI id.",
"title": "Name",
"type": "string"
},
"dn": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Nominal diameter (DN).",
"title": "Dn"
},
"lines": {
"description": "Line numbers ending at it.",
"items": {
"type": "string"
},
"title": "Lines",
"type": "array"
},
"service": {
"default": "",
"title": "Service",
"type": "string"
},
"rating": {
"default": "",
"title": "Rating",
"type": "string"
},
"source": {
"default": "",
"description": "Where it comes from, e.g. pid/P-01.xml.",
"title": "Source",
"type": "string"
},
"orientation_deg": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Plan direction, deg from site east (x) counter-clockwise, as the placement's angle_deg: of the nozzle axis for a side nozzle; of its offset from the item's centre for a top or bottom nozzle off the centre.",
"title": "Orientation Deg"
},
"offset_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "A top or bottom nozzle's plan distance from the item's centre, m (a roof nozzle, a nozzle along a horizontal shell).",
"title": "Offset M"
},
"face": {
"default": "",
"description": "top, bottom or side (the shell).",
"title": "Face",
"type": "string"
},
"elevation_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Nozzle centre above the item's base (its placement elevation), m.",
"title": "Elevation M"
},
"location_source": {
"default": "",
"description": "Where orientation, face and elevation come from, e.g. layout/equipment-placement.yaml (DESIGN.md D-039).",
"title": "Location Source",
"type": "string"
},
"mark": {
"default": "",
"description": "The mark on the outline drawing and the nozzle schedule when it differs from name (M1 for a manway, N1A); default the name.",
"title": "Mark",
"type": "string"
},
"facing": {
"default": "",
"description": "Flange facing: RF, FF, RTJ, ... ",
"title": "Facing",
"type": "string"
},
"standard": {
"default": "",
"description": "Flange standard, e.g. ASME B16.5, EN 1092-1.",
"title": "Standard",
"type": "string"
},
"projection_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Flange face from the item's axis (a side nozzle of a vertical item) or from the shell or head surface it leaves (any other nozzle), m.",
"title": "Projection M"
},
"axial_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "A nozzle of a horizontal item or a machine: its position along the item's own axis from the item's centre, m, positive towards the rear head (the outline drawing places it there).",
"title": "Axial M"
},
"assumed": {
"default": false,
"description": "True: the schedule entry is an assumption.",
"title": "Assumed",
"type": "boolean"
}
},
"required": [
"name"
],
"title": "DatasheetNozzle",
"type": "object"
},
"Material": {
"additionalProperties": false,
"description": "The material of one part (``materials.shell``, ``materials.tubes``) with its class, so it\ncan be matched elsewhere. A plain value (``shell: SA-516-70``) is still accepted.",
"properties": {
"value": {
"description": "The designation: SA-516-70, 1.4404, Aluminium 5083, TBD.",
"title": "Value",
"type": "string"
},
"material_class": {
"anyOf": [
{
"enum": [
"carbon_steel",
"low_temperature_carbon_steel",
"low_alloy_steel",
"stainless_steel",
"duplex_stainless_steel",
"nickel_alloy",
"aluminium",
"copper_alloy",
"titanium",
"cast_iron",
"plastic",
"fibre_reinforced_plastic",
"lined_steel",
"concrete",
"other"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The class it belongs to (carbon_steel, stainless_steel, ...).",
"title": "Material Class"
},
"standard": {
"default": "",
"description": "Material standard, e.g. ASME II A, EN 10028.",
"title": "Standard",
"type": "string"
},
"assumed": {
"default": false,
"description": "True: an assumption, not data.",
"title": "Assumed",
"type": "boolean"
},
"source": {
"default": "",
"description": "Where it comes from.",
"title": "Source",
"type": "string"
},
"reason": {
"default": "",
"description": "As for a value: with supplier/not_applicable.",
"title": "Reason",
"type": "string"
}
},
"required": [
"value"
],
"title": "Material",
"type": "object"
},
"Operating": {
"additionalProperties": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
}
]
},
"description": "The operating conditions, each a value (``pressure_barg``, ``temperature_degc``,\n``flow_kg_h``, ...), and the flowsheet case and streams they are for. ``cheme validate``\nresolves ``case`` and ``streams`` against ``process/flowsheet.yaml``\n(``cheme.contract-ref``).",
"properties": {
"case": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The flowsheet case (cases[].id) the conditions are for; cheme datasheets fill writes the case it filled from.",
"title": "Case"
},
"streams": {
"description": "The flowsheet stream ids the conditions come from; cheme datasheets fill writes the streams at the item's linked nodes.",
"items": {
"type": "string"
},
"title": "Streams",
"type": "array"
}
},
"title": "Operating",
"type": "object"
},
"Plates": {
"additionalProperties": false,
"description": "The plate pack of a plate exchanger.",
"properties": {
"height": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Plate height, m.",
"title": "Height"
},
"width": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Plate width, m.",
"title": "Width"
},
"count": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of plates.",
"title": "Count"
}
},
"title": "Plates",
"type": "object"
},
"Quantity": {
"additionalProperties": false,
"description": "A value with its unit, marked when it is assumed rather than known. A field without a\nvalue yet holds ``TBD`` (with the reason in ``source``), ``supplier`` (waiting for the\nsupplier's data, the source or reason saying what is awaited) or ``not_applicable`` (with a\n``reason``); a sheet whose only open fields are ``supplier`` and ``not_applicable`` can be\nfinal (no ``draft``).",
"properties": {
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
],
"title": "Value"
},
"unit": {
"default": "",
"title": "Unit",
"type": "string"
},
"assumed": {
"default": false,
"description": "True: an assumption, not data.",
"title": "Assumed",
"type": "boolean"
},
"source": {
"default": "",
"description": "Where it comes from, e.g. DESIGN.md D-012.",
"title": "Source",
"type": "string"
},
"reason": {
"default": "",
"description": "With value supplier: what is awaited from the supplier; with value not_applicable (required): why the field does not apply to this item.",
"title": "Reason",
"type": "string"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Values cheme datasheets fill calculated: the fingerprint of their inputs (the streams at the item's linked nodes, and what inputs names); a mismatch is cheme.datasheet-stale.",
"title": "Fingerprint"
},
"inputs": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Values cheme datasheets fill calculated: the inputs besides the streams that the fingerprint covers, as catalyst:<id> (process/catalysts.yaml), pipe:<id> and nozzle:<TAG>/<N> (layout/plant-model.yaml), residence_time:<TAG> (process/design-basis.yaml), condenser:<step> (process/simulation.yaml), datasheet:<section>.<key> (this sheet), param:<name> (a declared parameter: type_specific, else the --param recorded in sizing_basis) and table:<table>/<row> (a row of a table cheme-as-code ships).",
"title": "Inputs"
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What kind of figure it is (as on a process quantity), e.g. vendor; cheme datasheets fill writes correlation on the values it calculates from the streams, cheme datasheets draft carries the stream value's over.",
"title": "Origin"
}
},
"required": [
"value"
],
"title": "Quantity",
"type": "object"
},
"SizingItem": {
"additionalProperties": false,
"description": "One line of the sizing basis.",
"properties": {
"parameter": {
"title": "Parameter",
"type": "string"
},
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
}
],
"title": "Value"
},
"reference": {
"default": "",
"description": "Design basis or DESIGN.md decision it rests on.",
"title": "Reference",
"type": "string"
}
},
"required": [
"parameter",
"value"
],
"title": "SizingItem",
"type": "object"
},
"Support": {
"additionalProperties": false,
"description": "How the item stands: type and height, and what it stands on when not on grade.",
"properties": {
"type": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "skirt, legs, saddles, lugs, base_plate or none.",
"title": "Type"
},
"height": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "m: from the base to the bottom tangent line (skirt, legs, lugs), or to the underside of the shell (saddles).",
"title": "Height"
},
"count": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Legs, saddles or lugs.",
"title": "Count"
},
"stands_on": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Tag of the item this one stands on, when not on grade (an LP column stacked on the HP column): the outline drawing labels its base with it.",
"title": "Stands On"
},
"elevation": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "m: the base above grade (the placement's z), when not on grade.",
"title": "Elevation"
}
},
"title": "Support",
"type": "object"
},
"Tubes": {
"additionalProperties": false,
"description": "The tube bundle of a shell-and-tube exchanger.",
"properties": {
"count": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"title": "Count"
},
"outside_diameter": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Tube OD (m or mm).",
"title": "Outside Diameter"
},
"length": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Tube length, m.",
"title": "Length"
},
"passes": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Tube passes.",
"title": "Passes"
},
"pitch": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Tube pitch (m or mm).",
"title": "Pitch"
}
},
"title": "Tubes",
"type": "object"
},
"Weights": {
"additionalProperties": false,
"description": "Weights of the item, t.",
"properties": {
"empty": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Empty (erection) weight, t.",
"title": "Empty"
},
"operating": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Operating weight, t.",
"title": "Operating"
},
"test": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Full of water (hydrotest), t.",
"title": "Test"
}
},
"title": "Weights",
"type": "object"
}
},
"additionalProperties": false,
"description": "One equipment item's datasheet. ``tag`` must be in the equipment list.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/datasheet/v1; optional (a file without it reads as cheme/datasheet/v1).",
"title": "Schema"
},
"tag": {
"description": "Equipment-list tag; the file is named <tag>.yaml.",
"title": "Tag",
"type": "string"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "DEXPI class, as in the equipment list.",
"title": "Type"
},
"service": {
"default": "",
"title": "Service",
"type": "string"
},
"operating": {
"$ref": "#/$defs/Operating",
"description": "Operating conditions: pressure_barg, temperature_degc, flow_kg_h, ...; and the flowsheet case and streams they are for."
},
"design": {
"additionalProperties": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
}
]
},
"description": "Design conditions; pressure_barg and temperature_degc must match the equipment list's design_pressure_barg / design_temperature_degc.",
"title": "Design",
"type": "object"
},
"materials": {
"additionalProperties": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"$ref": "#/$defs/Quantity"
},
{
"$ref": "#/$defs/Material"
}
]
},
"description": "Material per part: casing, impeller, shell, ...; a value, or a mapping with value, material_class and standard.",
"title": "Materials",
"type": "object"
},
"dimensions": {
"anyOf": [
{
"$ref": "#/$defs/DatasheetDimensions"
},
{
"type": "null"
}
],
"default": null,
"description": "Main dimensions (the outline drawing is drawn from them)."
},
"weights": {
"anyOf": [
{
"$ref": "#/$defs/Weights"
},
{
"type": "null"
}
],
"default": null
},
"nozzles": {
"description": "The item's nozzles (from the P&ID).",
"items": {
"$ref": "#/$defs/DatasheetNozzle"
},
"title": "Nozzles",
"type": "array"
},
"sizing_basis": {
"items": {
"$ref": "#/$defs/SizingItem"
},
"title": "Sizing Basis",
"type": "array"
},
"type_specific": {
"additionalProperties": true,
"description": "Fields of the equipment type (pump: NPSHr, ...).",
"title": "Type Specific",
"type": "object"
},
"draft": {
"default": false,
"description": "A generated draft (cheme datasheets draft): every value says where it comes from, TBD values are not known yet; the datasheets gate does not count it.",
"title": "Draft",
"type": "boolean"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"tag"
],
"title": "Datasheet",
"type": "object"
}
review¶
File: reviews/*.md (front matter). Model: chemeascode.foundation.schemas.reviews.ReviewRecord.
Front matter of a review record: YAML between two --- lines at the top of the file.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/review/v1; optional (a file without it reads as cheme/review/v1). | |
topic |
string | yes | What was reviewed, e.g. design, o2-safety, hazop. | |
reviewed_commit |
string | yes | The commit whose files were reviewed (a sha). | |
scope |
list of string | yes | Files or directories reviewed, from the repository root (pid/P-03.xml). | |
reviewer |
string | yes | Name of the person or agent. | |
reviewer_kind |
human | agent | self |
yes | human, agent (independent of the author) or self (the author's own review). | |
date |
string or null | null |
||
branch |
string or null | null |
Branch the reviewed work is on. | |
merge |
string or null | null |
Merge commit to the default branch, or 'pending'. | |
approved_by |
string or null | null |
A human who approved the record (needed for a self review). | |
notes |
string | "" |
||
basis |
list of Basis | Other sources the review rests on, outside its scope, each with the revision used; cheme impact flags the record when one has changed since. |
JSON Schema: cheme schema review
{
"$defs": {
"Basis": {
"additionalProperties": false,
"description": "One source an artifact rests on, at the revision it was looked at.",
"properties": {
"path": {
"description": "File or directory from the repository root (process/).",
"minLength": 1,
"title": "Path",
"type": "string"
},
"revision": {
"description": "A commit sha, or sha256:<hex> of the file's content, when it was used.",
"title": "Revision",
"type": "string"
},
"relation": {
"default": "depends-on",
"description": "derived-from, represents, analyses or depends-on.",
"enum": [
"derived-from",
"represents",
"analyses",
"depends-on"
],
"title": "Relation",
"type": "string"
}
},
"required": [
"path",
"revision"
],
"title": "Basis",
"type": "object"
}
},
"additionalProperties": false,
"description": "Front matter of a review record: YAML between two --- lines at the top of the file.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/review/v1; optional (a file without it reads as cheme/review/v1).",
"title": "Schema"
},
"topic": {
"description": "What was reviewed, e.g. design, o2-safety, hazop.",
"title": "Topic",
"type": "string"
},
"reviewed_commit": {
"description": "The commit whose files were reviewed (a sha).",
"title": "Reviewed Commit",
"type": "string"
},
"scope": {
"description": "Files or directories reviewed, from the repository root (pid/P-03.xml).",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Scope",
"type": "array"
},
"reviewer": {
"description": "Name of the person or agent.",
"minLength": 1,
"title": "Reviewer",
"type": "string"
},
"reviewer_kind": {
"description": "human, agent (independent of the author) or self (the author's own review).",
"enum": [
"human",
"agent",
"self"
],
"title": "Reviewer Kind",
"type": "string"
},
"date": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Date"
},
"branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Branch the reviewed work is on.",
"title": "Branch"
},
"merge": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Merge commit to the default branch, or 'pending'.",
"title": "Merge"
},
"approved_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A human who approved the record (needed for a self review).",
"title": "Approved By"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"basis": {
"description": "Other sources the review rests on, outside its scope, each with the revision used; cheme impact flags the record when one has changed since.",
"items": {
"$ref": "#/$defs/Basis"
},
"title": "Basis",
"type": "array"
}
},
"required": [
"topic",
"reviewed_commit",
"scope",
"reviewer",
"reviewer_kind"
],
"title": "ReviewRecord",
"type": "object"
}
status¶
File: checks/status.json. Model: chemeascode.foundation.schemas.status.StatusFile.
Stage sign-offs by stage id; checks repeats the gates of the latest sign-off.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/status/v1; optional (a file without it reads as cheme/status/v1). | |
stages |
map of SignOff | |||
checks |
list of CheckResult |
JSON Schema: cheme schema status
{
"$defs": {
"CheckResult": {
"additionalProperties": true,
"description": "One gate as it was evaluated.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"stage": {
"default": "",
"title": "Stage",
"type": "string"
},
"status": {
"description": "pass, fail or n/a.",
"title": "Status",
"type": "string"
},
"detail": {
"default": "",
"title": "Detail",
"type": "string"
},
"evidence": {
"additionalProperties": true,
"description": "What the gate rests on; a review gate: path, reviewed_commit, reviewer, reviewer_kind.",
"title": "Evidence",
"type": "object"
}
},
"required": [
"id",
"status"
],
"title": "CheckResult",
"type": "object"
},
"SignOff": {
"additionalProperties": true,
"description": "The sign-off of one stage.",
"properties": {
"stage": {
"title": "Stage",
"type": "string"
},
"commit": {
"description": "The commit whose (clean) tree the gates were run on.",
"title": "Commit",
"type": "string"
},
"date": {
"description": "When, ISO 8601 UTC.",
"title": "Date",
"type": "string"
},
"signed_by": {
"title": "Signed By",
"type": "string"
},
"branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Branch the sign-off was made on.",
"title": "Branch"
},
"default_branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Default Branch"
},
"review": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Review record the sign-off rests on.",
"title": "Review"
},
"review_commit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Its reviewed_commit.",
"title": "Review Commit"
},
"reviewer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reviewer"
},
"reviewer_kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reviewer Kind"
},
"stages": {
"description": "The stages whose gates were evaluated (up to stage).",
"items": {
"type": "string"
},
"title": "Stages",
"type": "array"
},
"checks": {
"items": {
"$ref": "#/$defs/CheckResult"
},
"title": "Checks",
"type": "array"
}
},
"required": [
"stage",
"commit",
"date",
"signed_by"
],
"title": "SignOff",
"type": "object"
}
},
"additionalProperties": true,
"description": "Stage sign-offs by stage id; ``checks`` repeats the gates of the latest sign-off.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/status/v1; optional (a file without it reads as cheme/status/v1).",
"title": "Schema"
},
"stages": {
"additionalProperties": {
"$ref": "#/$defs/SignOff"
},
"title": "Stages",
"type": "object"
},
"checks": {
"items": {
"$ref": "#/$defs/CheckResult"
},
"title": "Checks",
"type": "array"
}
},
"title": "StatusFile",
"type": "object"
}
process-materials¶
File: process/materials.yaml. Model: chemeascode.domains.process.schema.Materials.
Components, templates and the property method of the process.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/process/v1. | |
kind |
materials |
yes | ||
components |
list of Component | |||
templates |
list of Template | |||
property_method |
PropertyMethod or null | null |
JSON Schema: cheme schema process-materials
{
"$defs": {
"ApplicationRange": {
"additionalProperties": false,
"properties": {
"temperature": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "K, min and max",
"title": "Temperature"
},
"pressure": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "kPa(a), min and max",
"title": "Pressure"
},
"vle_pressure": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "kPa(a): where liquid and two-phase results are claimed (vapour: pressure).",
"title": "Vle Pressure"
},
"phases": {
"items": {
"type": "string"
},
"title": "Phases",
"type": "array"
},
"components": {
"description": "CAS numbers.",
"items": {
"type": "string"
},
"title": "Components",
"type": "array"
},
"component_regions": {
"anyOf": [
{
"additionalProperties": {
"items": {
"$ref": "#/$defs/Region"
},
"type": "array"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "CAS number -> the boxes the component is benchmarked in; a state is claimed only inside a box of every component present. None: temperature and pressure above apply to every component.",
"title": "Component Regions"
},
"pairs": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Benchmarked binary pairs, 'CAS&CAS' (sorted); a mixture is claimed only when every pair of its components is listed. None: any mixture of the components.",
"title": "Pairs"
},
"pair_limits": {
"anyOf": [
{
"additionalProperties": {
"additionalProperties": {
"exclusiveMinimum": 0.0,
"maximum": 1.0,
"type": "number"
},
"type": "object"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Pair ('CAS&CAS') -> CAS number -> the largest mole fraction of that component in a mixture holding both at which the pair is claimed. None: no limits.",
"title": "Pair Limits"
}
},
"title": "ApplicationRange",
"type": "object"
},
"Benchmark": {
"additionalProperties": false,
"description": "The evidence behind a property package's claim.",
"properties": {
"test": {
"description": "The test file that benchmarks the claim.",
"title": "Test",
"type": "string"
},
"reference": {
"description": "What the values are compared against.",
"title": "Reference",
"type": "string"
},
"tolerances": {
"additionalProperties": {
"type": "number"
},
"description": "What the test asserts inside the claimed range.",
"title": "Tolerances",
"type": "object"
}
},
"required": [
"test",
"reference"
],
"title": "Benchmark",
"type": "object"
},
"Component": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"name": {
"title": "Name",
"type": "string"
},
"formula": {
"default": "",
"title": "Formula",
"type": "string"
},
"cas": {
"default": "",
"title": "Cas",
"type": "string"
},
"chebi": {
"default": "",
"title": "Chebi",
"type": "string"
},
"inchikey": {
"anyOf": [
{
"pattern": "^[A-Z]{14}-[A-Z]{10}-[A-Z]$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Standard InChIKey: the component's key across databases.",
"title": "Inchikey"
},
"smiles": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "SMILES; with the RDKit extra, checked against inchikey and formula.",
"title": "Smiles"
},
"molar_mass": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg/kmol",
"title": "Molar Mass"
},
"normal_boiling_point": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "K at 101.325 kPa",
"title": "Normal Boiling Point"
},
"liquid_heat_capacity": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kJ/(kmol K) of the liquid near the reaction temperature: adiabatic liquid tanks and batches (with the reactions' heat_of_reaction).",
"title": "Liquid Heat Capacity"
},
"liquid_molar_volume": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "m3/kmol near the reaction temperature: the concentrations of a liquid-phase reaction (ideal mixing).",
"title": "Liquid Molar Volume"
},
"critical": {
"anyOf": [
{
"$ref": "#/$defs/Critical"
},
{
"type": "null"
}
],
"default": null,
"description": "Critical constants: Peng-Robinson fugacities in equilibria (fugacity: peng_robinson); cheme chemistry thermo prints them."
},
"ideal_gas": {
"anyOf": [
{
"$ref": "#/$defs/IdealGas"
},
{
"type": "null"
}
],
"default": null,
"description": "Formation data and ideal-gas heat capacity: heats of reaction, equilibrium constants and reactor duties (cheme chemistry thermo prints it)."
},
"phase": {
"anyOf": [
{
"const": "solid",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "solid: the component is a solid (a crystal, a hydrate with its water of crystallization in the formula, e.g. MgSO4(H2O)7), a separate component from the same substance dissolved. A stream's dry solid is the sum of its solid components, the rest is liquid (mother liquor or moisture): see chemeascode.domains.process.solids.",
"title": "Phase"
}
},
"required": [
"id",
"name"
],
"title": "Component",
"type": "object"
},
"Critical": {
"additionalProperties": false,
"description": "Critical constants of a component.",
"properties": {
"Tc": {
"description": "K",
"exclusiveMinimum": 0,
"title": "Tc",
"type": "number"
},
"Pc": {
"description": "kPa",
"exclusiveMinimum": 0,
"title": "Pc",
"type": "number"
},
"omega": {
"description": "acentric factor",
"title": "Omega",
"type": "number"
},
"provenance": {
"default": "given",
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"Tc",
"Pc",
"omega"
],
"title": "Critical",
"type": "object"
},
"IdealGas": {
"additionalProperties": false,
"description": "Standard formation data and ideal-gas heat capacity of one component.",
"properties": {
"dHf_298": {
"description": "kJ/kmol, ideal gas at 298.15 K and 1 bar",
"title": "Dhf 298",
"type": "number"
},
"S_298": {
"description": "kJ/(kmol K), ideal gas at 298.15 K and 1 bar",
"title": "S 298",
"type": "number"
},
"cp_R": {
"description": "Cp/R = a0 + a1 T + ... + a4 T^4 (T in K)",
"items": {
"type": "number"
},
"maxItems": 5,
"minItems": 1,
"title": "Cp R",
"type": "array"
},
"temperature_range": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "K, where cp_R is valid (none: every temperature)",
"title": "Temperature Range"
},
"provenance": {
"default": "given",
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"dHf_298",
"S_298",
"cp_R"
],
"title": "IdealGas",
"type": "object"
},
"PropertyMethod": {
"additionalProperties": false,
"description": "How properties are calculated: written by ``cheme process props --fill``\n(``status: configured``) with the package versions; a placeholder until then.",
"properties": {
"adapter": {
"default": "thermo",
"title": "Adapter",
"type": "string"
},
"status": {
"default": "placeholder",
"enum": [
"placeholder",
"configured"
],
"title": "Status",
"type": "string"
},
"package": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The property package (cheme process props --coverage lists them); chosen from the streams' components when not given.",
"title": "Package"
},
"phase_models": {
"additionalProperties": {
"type": "string"
},
"title": "Phase Models",
"type": "object"
},
"eos": {
"default": "",
"title": "Eos",
"type": "string"
},
"binary_interaction": {
"default": "",
"title": "Binary Interaction",
"type": "string"
},
"application_range": {
"anyOf": [
{
"$ref": "#/$defs/ApplicationRange"
},
{
"type": "null"
}
],
"default": null
},
"versions": {
"additionalProperties": {
"type": "string"
},
"title": "Versions",
"type": "object"
},
"benchmark": {
"anyOf": [
{
"$ref": "#/$defs/Benchmark"
},
{
"type": "null"
}
],
"default": null
}
},
"title": "PropertyMethod",
"type": "object"
},
"Region": {
"additionalProperties": false,
"description": "A temperature-pressure box a component is claimed in.",
"properties": {
"temperature": {
"description": "K, min and max",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Temperature",
"type": "array"
},
"pressure": {
"description": "kPa(a), min and max",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Pressure",
"type": "array"
},
"max_mole_fraction": {
"anyOf": [
{
"exclusiveMinimum": 0.0,
"maximum": 1.0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The box holds only while the component's mole fraction is at most this (a box benchmarked in mixtures only). None: at any mole fraction.",
"title": "Max Mole Fraction"
}
},
"required": [
"temperature",
"pressure"
],
"title": "Region",
"type": "object"
},
"Template": {
"additionalProperties": false,
"description": "An ordered component list a stream names.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"components": {
"items": {
"type": "string"
},
"minItems": 1,
"title": "Components",
"type": "array"
}
},
"required": [
"id",
"components"
],
"title": "Template",
"type": "object"
}
},
"additionalProperties": false,
"description": "Components, templates and the property method of the process.",
"properties": {
"schema": {
"description": "Always cheme/process/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "materials",
"title": "Kind",
"type": "string"
},
"components": {
"items": {
"$ref": "#/$defs/Component"
},
"title": "Components",
"type": "array"
},
"templates": {
"items": {
"$ref": "#/$defs/Template"
},
"title": "Templates",
"type": "array"
},
"property_method": {
"anyOf": [
{
"$ref": "#/$defs/PropertyMethod"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"schema",
"kind"
],
"title": "Materials",
"type": "object"
}
process-flowsheet¶
File: process/flowsheet.yaml. Model: chemeascode.domains.process.schema.Flowsheet.
Feeds, products, blocks, steps and streams: the source of the BFD and PFD.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/process/v1. | |
kind |
flowsheet |
yes | ||
title |
string | "" |
||
units |
Units | |||
cases |
list of Case | |||
tolerance |
Tolerance | |||
feeds |
list of Terminal | |||
products |
list of Terminal | |||
blocks |
list of Block | |||
steps |
list of Step | |||
streams |
list of StreamDef | |||
bfd |
BfdView or null | null |
How the BFD draws the streams. | |
layout |
Layout |
JSON Schema: cheme schema process-flowsheet
{
"$defs": {
"Batch": {
"additionalProperties": false,
"description": "A batch (``reactor: batch``; the model: :mod:`.stirred_tank`): the inlet is the charge\n(its flow the charge per hour), the outlet its composition when the batch ends, after\n``time`` or at the ``target`` conversion; isothermal or adiabatic. A liquid batch keeps its\ncomposition's volume (ideal mixing), a gas batch its volume (the pressure changes).",
"properties": {
"time": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "s of reaction",
"title": "Time"
},
"target": {
"anyOf": [
{
"$ref": "#/$defs/BatchTarget"
},
{
"type": "null"
}
],
"default": null
},
"heat": {
"default": "isothermal",
"enum": [
"isothermal",
"adiabatic"
],
"title": "Heat",
"type": "string"
},
"catalyst_loading": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg of catalyst per m3: rate laws per kg of catalyst.",
"title": "Catalyst Loading"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"provenance"
],
"title": "Batch",
"type": "object"
},
"BatchTarget": {
"additionalProperties": false,
"properties": {
"key": {
"description": "The component whose conversion ends the batch.",
"title": "Key",
"type": "string"
},
"conversion": {
"exclusiveMaximum": 1,
"exclusiveMinimum": 0,
"title": "Conversion",
"type": "number"
}
},
"required": [
"key",
"conversion"
],
"title": "BatchTarget",
"type": "object"
},
"Bed": {
"additionalProperties": false,
"description": "A packed catalyst bed (``reactor: pfr``; the model: :mod:`.fixed_bed`). Its size is the\ncatalyst mass, else the bed volume, else ``tubes`` tubes of ``diameter`` and ``length``;\nthe catalyst (``catalyst:``) gives the bulk density, particle and voidage.",
"properties": {
"catalyst_mass": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg",
"title": "Catalyst Mass"
},
"volume": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "m3 of bed",
"title": "Volume"
},
"diameter": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "m, of a tube (or the vessel): pressure drop, cooling",
"title": "Diameter"
},
"length": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "m",
"title": "Length"
},
"tubes": {
"default": 1,
"minimum": 1,
"title": "Tubes",
"type": "integer"
},
"heat": {
"default": "adiabatic",
"enum": [
"adiabatic",
"isothermal",
"cooled"
],
"title": "Heat",
"type": "string"
},
"coolant_temperature": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "K, cooled beds",
"title": "Coolant Temperature"
},
"heat_transfer_coefficient": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "W/(m2 K), overall, bed to coolant (cooled beds)",
"title": "Heat Transfer Coefficient"
},
"viscosity": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Pa s, of the gas (Ergun pressure drop)",
"title": "Viscosity"
},
"diffusivity": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "m2/s: the key reactants' diffusivity in the gas (effectiveness factor, Weisz-Prater, Mears)",
"title": "Diffusivity"
},
"time_on_stream": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "h: the catalyst's age the bed is solved at (its deactivation law); the end of run sizes the bed. None: fresh.",
"title": "Time On Stream"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"provenance"
],
"title": "Bed",
"type": "object"
},
"BfdView": {
"additionalProperties": false,
"description": "How the BFD draws the boundary streams.",
"properties": {
"aggregate": {
"anyOf": [
{
"type": "boolean"
},
{
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "string"
},
{
"type": "string"
}
],
"type": "array"
},
"type": "array"
}
],
"default": false,
"description": "Draw parallel boundary streams between the same two BFD nodes as one connection: true for every pair, or a list of [NODE, NODE] pairs. Streams of different kinds (material, energy, information) or directions stay separate; balances use the streams, not the connections.",
"title": "Aggregate"
}
},
"title": "BfdView",
"type": "object"
},
"Block": {
"additionalProperties": false,
"properties": {
"crystallizer": {
"anyOf": [
{
"$ref": "#/$defs/Crystallizer"
},
{
"type": "null"
}
],
"default": null,
"description": "A crystallizer (with its filter and recycle)."
},
"solid_separation": {
"anyOf": [
{
"$ref": "#/$defs/SolidSeparation"
},
{
"type": "null"
}
],
"default": null,
"description": "A filter or centrifuge on its own."
},
"reactions": {
"description": "Reaction ids of process/reactions.yaml that take place here: the balance is reactive (elements and extents instead of components).",
"items": {
"type": "string"
},
"title": "Reactions",
"type": "array"
},
"conversion": {
"additionalProperties": {
"type": "number"
},
"description": "Reaction id -> conversion of its key component here, instead of the reaction's own conversion (cheme process propagate).",
"title": "Conversion",
"type": "object"
},
"reactor": {
"anyOf": [
{
"enum": [
"conversion",
"equilibrium",
"gibbs",
"pfr",
"cstr",
"batch"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How cheme process propagate solves the outlet: conversion (of each reaction's key component), equilibrium (of the reactions, ideal gas, at the outlet's temperature and pressure), gibbs (every reaction among the stream's components) or pfr (a fixed bed: the reactions' rate laws along its bed), cstr (stirred tanks: the rate laws at the outlet) or batch (the rate laws over the batch time); none: conversion when every reaction has one.",
"title": "Reactor"
},
"bed": {
"anyOf": [
{
"$ref": "#/$defs/Bed"
},
{
"type": "null"
}
],
"default": null,
"description": "reactor: pfr: the catalyst bed."
},
"tank": {
"anyOf": [
{
"$ref": "#/$defs/Tank"
},
{
"type": "null"
}
],
"default": null,
"description": "reactor: cstr: the tank(s)."
},
"hazard": {
"anyOf": [
{
"$ref": "#/$defs/ReactionHazard"
},
{
"type": "null"
}
],
"default": null,
"description": "TD24 and MTT for the thermal screening of the reactor."
},
"selectivity": {
"anyOf": [
{
"$ref": "#/$defs/Selectivity"
},
{
"type": "null"
}
],
"default": null,
"description": "A conversion reactor by the key's conversion and the selectivities to its products (instead of a conversion per reaction)."
},
"batch": {
"anyOf": [
{
"$ref": "#/$defs/Batch"
},
{
"type": "null"
}
],
"default": null,
"description": "reactor: batch: the batch."
},
"catalyst": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The catalyst its bed holds: an id of process/catalysts.yaml.",
"title": "Catalyst"
},
"fugacity": {
"default": "ideal",
"description": "Equilibrium and Gibbs reactors: the gas as ideal, or with Peng-Robinson fugacity coefficients (the components' critical constants) for high pressures.",
"enum": [
"ideal",
"peng_robinson"
],
"title": "Fugacity",
"type": "string"
},
"approach": {
"default": 0.0,
"description": "Equilibrium and Gibbs reactors: K is taken at the outlet temperature plus this approach, K (positive: less conversion of an exothermic reaction).",
"title": "Approach",
"type": "number"
},
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"ports": {
"items": {
"$ref": "#/$defs/Port"
},
"title": "Ports",
"type": "array"
},
"links": {
"items": {
"$ref": "#/$defs/Link"
},
"title": "Links",
"type": "array"
},
"class": {
"default": "ProcessStep",
"description": "DEXPI step class.",
"title": "Class",
"type": "string"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The class's method where DEXPI has one (e.g. Compressing).",
"title": "Method"
},
"parent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The block this block is drawn inside on the PFD (the BFD shows top-level blocks); its ports delegate the parent's ports where streams cross the parent boundary.",
"title": "Parent"
},
"balance_scope": {
"default": "steady_state_nonreactive",
"enum": [
"steady_state_nonreactive",
"reactive",
"dynamic"
],
"title": "Balance Scope",
"type": "string"
},
"tolerance": {
"anyOf": [
{
"$ref": "#/$defs/Tolerance"
},
{
"type": "null"
}
],
"default": null
},
"split": {
"additionalProperties": {
"type": "number"
},
"description": "A splitter block without steps: outlet port -> fraction of the inlet flow.",
"title": "Split",
"type": "object"
}
},
"required": [
"id"
],
"title": "Block",
"type": "object"
},
"CakeLiquid": {
"additionalProperties": false,
"description": "The liquid (mother liquor) held in a filter or centrifuge cake.",
"properties": {
"value": {
"minimum": 0,
"title": "Value",
"type": "number"
},
"basis": {
"description": "mass_fraction: liquid over the wet cake's mass (below 1); per_kg_solid: kg of liquid per kg of dry solid.",
"enum": [
"mass_fraction",
"per_kg_solid"
],
"title": "Basis",
"type": "string"
}
},
"required": [
"value",
"basis"
],
"title": "CakeLiquid",
"type": "object"
},
"Case": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"default": {
"type": "boolean",
"default": false,
"title": "Default"
},
"capacity": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The declared capacity of this case, e.g. 500 t/d GOX.",
"title": "Capacity"
},
"provenance": {
"anyOf": [
{
"enum": [
"given",
"calculated",
"assumed",
"extrapolated"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How the case's operating point is known (given, calculated, assumed, extrapolated).",
"title": "Provenance"
},
"applicability": {
"anyOf": [
{
"$ref": "#/$defs/CaseApplicability"
},
{
"type": "null"
}
],
"default": null
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What the case's operating point rests on.",
"title": "Source"
}
},
"required": [
"id"
],
"title": "Case",
"type": "object"
},
"CaseApplicability": {
"additionalProperties": false,
"description": "Where a case's flows and duties hold: an envelope with its source, not a scaling law.",
"properties": {
"range": {
"description": "e.g. 350-550 t/d GOX, 70-105 % load.",
"minLength": 1,
"title": "Range",
"type": "string"
},
"source": {
"description": "What supports the envelope.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"limitations": {
"default": "",
"title": "Limitations",
"type": "string"
}
},
"required": [
"range",
"source"
],
"title": "CaseApplicability",
"type": "object"
},
"CompositionValue": {
"additionalProperties": false,
"properties": {
"basis": {
"enum": [
"mole_fraction",
"mass_fraction"
],
"title": "Basis",
"type": "string"
},
"values": {
"additionalProperties": {
"type": "number"
},
"minProperties": 1,
"title": "Values",
"type": "object"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Calculated compositions: the inputs they were derived from (cheme process propagate); a mismatch is cheme.process-calculated-stale.",
"title": "Fingerprint"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of every fraction, relative to it (as on a quantity)."
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What kind of figure it is (as on a quantity).",
"title": "Origin"
}
},
"required": [
"basis",
"values",
"provenance"
],
"title": "CompositionValue",
"type": "object"
},
"Crystallizer": {
"additionalProperties": false,
"description": "A cooling or evaporative crystallizer for one solute in one solvent (the model:\n:mod:`.crystallization`; no population balance, no kinetics): the crystals are the solid\ncomponent ``crystal`` (``phase: solid``; a hydrate's formula is the solute's plus n\nsolvent). ``basis: solubility`` predicts the yield from the solubility at ``temperature``\n(the mother liquor leaves saturated); ``basis: yield`` imposes it. With ``separation`` a\nfilter or centrifuge follows (outlets ``cake`` and ``mother_liquor``), else one ``slurry``\noutlet; ``recycle`` returns part of the filtrate to the feed.",
"properties": {
"solute": {
"description": "The dissolved component that crystallizes.",
"title": "Solute",
"type": "string"
},
"solvent": {
"title": "Solvent",
"type": "string"
},
"crystal": {
"description": "The solid component formed (phase: solid).",
"title": "Crystal",
"type": "string"
},
"basis": {
"enum": [
"solubility",
"yield"
],
"title": "Basis",
"type": "string"
},
"temperature": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "K, the crystallizer's (the mother liquor's)",
"title": "Temperature"
},
"solubility": {
"anyOf": [
{
"$ref": "#/$defs/Solubility"
},
{
"type": "null"
}
],
"default": null
},
"yield": {
"anyOf": [
{
"$ref": "#/$defs/ImposedYield"
},
{
"type": "null"
}
],
"default": null
},
"evaporation": {
"anyOf": [
{
"$ref": "#/$defs/Evaporation"
},
{
"type": "null"
}
],
"default": null
},
"separation": {
"anyOf": [
{
"$ref": "#/$defs/SolidSeparation"
},
{
"type": "null"
}
],
"default": null
},
"recycle": {
"anyOf": [
{
"$ref": "#/$defs/MotherLiquorRecycle"
},
{
"type": "null"
}
],
"default": null
},
"energy": {
"anyOf": [
{
"$ref": "#/$defs/CrystallizerEnergy"
},
{
"type": "null"
}
],
"default": null
},
"outlets": {
"additionalProperties": {
"type": "string"
},
"description": "Role -> the step's outlet port.",
"propertyNames": {
"enum": [
"slurry",
"cake",
"mother_liquor",
"vapour"
]
},
"title": "Outlets",
"type": "object"
}
},
"required": [
"solute",
"solvent",
"crystal",
"basis",
"outlets"
],
"title": "Crystallizer",
"type": "object"
},
"CrystallizerEnergy": {
"additionalProperties": false,
"description": "Data of the crystallizer's lumped energy balance, from the feed's temperature to the\ncrystallizer's (every outlet leaves at it).",
"properties": {
"heat_capacity": {
"description": "kJ/(kg K) of the feed solution, constant",
"exclusiveMinimum": 0,
"title": "Heat Capacity",
"type": "number"
},
"heat_of_crystallization": {
"description": "kJ per kg of crystal formed, at the crystallizer's temperature: the enthalpy change, negative when crystallization releases heat.",
"title": "Heat Of Crystallization",
"type": "number"
},
"latent_heat": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kJ per kg of solvent evaporated (with evaporation)",
"title": "Latent Heat"
},
"feed_temperature": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "K; default: the inlet stream's temperature",
"title": "Feed Temperature"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"heat_capacity",
"heat_of_crystallization",
"provenance"
],
"title": "CrystallizerEnergy",
"type": "object"
},
"EnthalpyReference": {
"additionalProperties": false,
"properties": {
"state": {
"description": "e.g. ideal_gas or elements",
"title": "State",
"type": "string"
},
"temperature": {
"description": "K",
"exclusiveMinimum": 0,
"title": "Temperature",
"type": "number"
},
"pressure": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kPa(a)",
"title": "Pressure"
}
},
"required": [
"state",
"temperature"
],
"title": "EnthalpyReference",
"type": "object"
},
"Evaporation": {
"additionalProperties": false,
"description": "Solvent removed as vapour before or in the crystallizer, one of: ``flow`` (kg/h),\n``feed_fraction`` (of the crystallizer feed's total mass), ``solvent_fraction`` (of the\nfeed's solvent) or ``concentration`` (the solute's mass fraction in the liquid after\nevaporation, crystals not yet formed).",
"properties": {
"flow": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg/h of solvent",
"title": "Flow"
},
"feed_fraction": {
"anyOf": [
{
"exclusiveMaximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Feed Fraction"
},
"solvent_fraction": {
"anyOf": [
{
"exclusiveMaximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Solvent Fraction"
},
"concentration": {
"anyOf": [
{
"exclusiveMaximum": 1,
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Concentration"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"provenance"
],
"title": "Evaporation",
"type": "object"
},
"ImposedYield": {
"additionalProperties": false,
"description": "The fraction of the anhydrous solute entering the crystallizer that crystallizes,\nspecified (an empirical or vendor yield), not predicted.",
"properties": {
"value": {
"exclusiveMaximum": 1,
"minimum": 0,
"title": "Value",
"type": "number"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"value",
"provenance"
],
"title": "ImposedYield",
"type": "object"
},
"Layout": {
"additionalProperties": false,
"properties": {
"bfd": {
"additionalProperties": {
"$ref": "#/$defs/ViewItem"
},
"title": "Bfd",
"type": "object"
},
"pfd": {
"additionalProperties": {
"$ref": "#/$defs/ViewItem"
},
"title": "Pfd",
"type": "object"
}
},
"title": "Layout",
"type": "object"
},
"Link": {
"additionalProperties": false,
"description": "What a process object is in the plant: equipment, a line, an instrument or a sheet.",
"properties": {
"target": {
"enum": [
"equipment",
"line",
"instrument",
"sheet"
],
"title": "Target",
"type": "string"
},
"ref": {
"title": "Ref",
"type": "string"
},
"sheet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sheet"
},
"role": {
"default": "",
"title": "Role",
"type": "string"
}
},
"required": [
"target",
"ref"
],
"title": "Link",
"type": "object"
},
"MotherLiquorRecycle": {
"additionalProperties": false,
"description": "The fraction of the filtrate returned to the crystallizer's feed (before evaporation);\nthe rest leaves as the purge.",
"properties": {
"fraction": {
"maximum": 1,
"minimum": 0,
"title": "Fraction",
"type": "number"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"fraction",
"provenance"
],
"title": "MotherLiquorRecycle",
"type": "object"
},
"NormalConditions": {
"additionalProperties": false,
"properties": {
"temperature": {
"description": "K",
"exclusiveMinimum": 0,
"title": "Temperature",
"type": "number"
},
"pressure": {
"description": "kPa(a)",
"exclusiveMinimum": 0,
"title": "Pressure",
"type": "number"
},
"basis": {
"const": "ideal_gas",
"default": "ideal_gas",
"title": "Basis",
"type": "string"
}
},
"required": [
"temperature",
"pressure"
],
"title": "NormalConditions",
"type": "object"
},
"PhaseValue": {
"additionalProperties": false,
"properties": {
"value": {
"enum": [
"vapor",
"liquid",
"two-phase"
],
"title": "Value",
"type": "string"
},
"vapor_fraction": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Vapor Fraction"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Fingerprint"
}
},
"required": [
"value",
"provenance"
],
"title": "PhaseValue",
"type": "object"
},
"Port": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"direction": {
"enum": [
"in",
"out"
],
"title": "Direction",
"type": "string"
},
"kind": {
"default": "material",
"enum": [
"material",
"energy",
"information"
],
"title": "Kind",
"type": "string"
},
"delegates": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Steps and nested blocks: the port of the step's block (the nested block's parent) this port stands for, when a stream crosses that boundary here.",
"title": "Delegates"
}
},
"required": [
"id",
"direction"
],
"title": "Port",
"type": "object"
},
"Quantity": {
"additionalProperties": false,
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unit"
},
"basis": {
"anyOf": [
{
"enum": [
"mass",
"mole",
"normal_volume"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Calculated values: the inputs (T, P, composition, method) they were calculated from; a mismatch is cheme.process-calculated-stale.",
"title": "Fingerprint"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative to the value, e.g. {gsd2: 1.2} or {distribution: triangular, low: 0.9, high: 1.1}; cheme assess lca samples a feed's or product's flow with it instead of the default for its provenance. No calculated value's fingerprint includes it."
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What kind of figure it is, refining the provenance: given measured, vendor or literature; assumed design-rule, estimate or literature; calculated simulated (cheme process simulate) or correlation (cheme process props). Another pairing is cheme.provenance-origin. No calculated value's fingerprint includes it.",
"title": "Origin"
}
},
"required": [
"value",
"provenance"
],
"title": "Quantity",
"type": "object"
},
"ReactionHazard": {
"additionalProperties": false,
"description": "What the thermal screening of a reactor (``cheme process reactor-hazards``) needs beyond\nthe reactions: the decomposition and the technical limit, from calorimetry and the design.",
"properties": {
"td24": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "K: the temperature at which the decomposition's adiabatic time to maximum rate is 24 h (DSC, ARC; never estimated here).",
"title": "Td24"
},
"mtt": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "K: the maximum technical temperature (the boiling point at the reactor's pressure, a relief set temperature); default: the lowest normal boiling point of the liquid's components at about atmospheric pressure.",
"title": "Mtt"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"provenance"
],
"title": "ReactionHazard",
"type": "object"
},
"Selectivity": {
"additionalProperties": false,
"description": "A conversion reactor given as reported: the per-pass ``conversion`` of the ``key``\ncomponent and the molar selectivity to each product, ``F_p formed / F_key converted``. The\nextents of the reactions follow (series and parallel side reactions in one step).",
"properties": {
"key": {
"description": "The component converted (a reactant of the reactions).",
"title": "Key",
"type": "string"
},
"conversion": {
"description": "Per pass, of the key's inlet flow.",
"exclusiveMinimum": 0,
"maximum": 1,
"title": "Conversion",
"type": "number"
},
"products": {
"additionalProperties": {
"type": "number"
},
"description": "Product id -> kmol formed per kmol of the key converted.",
"minProperties": 1,
"title": "Products",
"type": "object"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/SelectivityUncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the conversion and the selectivities, e.g. {conversion: {gsd2: 1.1}, products: {B: {distribution: triangular, low: 0.9, high: 1.1}}}: sampled by cheme process reactor-uncertainty."
}
},
"required": [
"key",
"conversion",
"products",
"provenance"
],
"title": "Selectivity",
"type": "object"
},
"SelectivityUncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a ``selectivity:``'s figures, each relative to its value: sampled by\ncheme process reactor-uncertainty, never part of an outlet's fingerprint.",
"properties": {
"conversion": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the key's conversion."
},
"products": {
"additionalProperties": {
"$ref": "#/$defs/Uncertainty"
},
"description": "Product id -> the uncertainty of its selectivity.",
"title": "Products",
"type": "object"
}
},
"title": "SelectivityUncertainty",
"type": "object"
},
"SolidSeparation": {
"additionalProperties": false,
"description": "A filter or centrifuge: the fraction of the solid that reaches the cake and the liquid\nthe cake holds, specified (no filtration or centrifuge model); the liquid divides with the\nsame composition between cake and filtrate. ``outlets`` maps ``cake`` and ``filtrate`` to\nthe step's outlet ports (inside a ``crystallizer:``, the crystallizer's own outlets).",
"properties": {
"solid_recovery": {
"description": "Fraction of the solid to the cake.",
"exclusiveMinimum": 0,
"maximum": 1,
"title": "Solid Recovery",
"type": "number"
},
"cake_liquid": {
"$ref": "#/$defs/CakeLiquid"
},
"outlets": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"enum": [
"cake",
"filtrate"
]
},
"title": "Outlets",
"type": "object"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"solid_recovery",
"cake_liquid",
"provenance"
],
"title": "SolidSeparation",
"type": "object"
},
"Solubility": {
"additionalProperties": false,
"description": "The solubility of a crystallizer's solute in its solvent: ``points`` (temperature in K,\nvalue), interpolated linearly at the crystallizer's temperature and never extrapolated, or\none ``value`` that holds at the crystallizer's conditions as stated by its source (the\nsaturated mother liquor; no temperature dependence claimed).",
"properties": {
"unit": {
"description": "kg of anhydrous solute per kg of solvent (g/100 g divided by 100), or the solute's mass fraction in the saturated solution.",
"enum": [
"kg/kg_solvent",
"mass_fraction"
],
"title": "Unit",
"type": "string"
},
"points": {
"description": "(K, value) pairs, increasing in temperature.",
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Points",
"type": "array"
},
"value": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Value"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"unit",
"provenance"
],
"title": "Solubility",
"type": "object"
},
"State": {
"additionalProperties": false,
"properties": {
"pressure": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"temperature": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"flow": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"composition": {
"anyOf": [
{
"$ref": "#/$defs/CompositionValue"
},
{
"type": "null"
}
],
"default": null
},
"phase": {
"anyOf": [
{
"$ref": "#/$defs/PhaseValue"
},
{
"type": "null"
}
],
"default": null
},
"duty": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Energy streams."
},
"calculated": {
"additionalProperties": {
"$ref": "#/$defs/Quantity"
},
"title": "Calculated",
"type": "object"
}
},
"title": "State",
"type": "object"
},
"Step": {
"additionalProperties": false,
"properties": {
"crystallizer": {
"anyOf": [
{
"$ref": "#/$defs/Crystallizer"
},
{
"type": "null"
}
],
"default": null,
"description": "A crystallizer (with its filter and recycle)."
},
"solid_separation": {
"anyOf": [
{
"$ref": "#/$defs/SolidSeparation"
},
{
"type": "null"
}
],
"default": null,
"description": "A filter or centrifuge on its own."
},
"reactions": {
"description": "Reaction ids of process/reactions.yaml that take place here: the balance is reactive (elements and extents instead of components).",
"items": {
"type": "string"
},
"title": "Reactions",
"type": "array"
},
"conversion": {
"additionalProperties": {
"type": "number"
},
"description": "Reaction id -> conversion of its key component here, instead of the reaction's own conversion (cheme process propagate).",
"title": "Conversion",
"type": "object"
},
"reactor": {
"anyOf": [
{
"enum": [
"conversion",
"equilibrium",
"gibbs",
"pfr",
"cstr",
"batch"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How cheme process propagate solves the outlet: conversion (of each reaction's key component), equilibrium (of the reactions, ideal gas, at the outlet's temperature and pressure), gibbs (every reaction among the stream's components) or pfr (a fixed bed: the reactions' rate laws along its bed), cstr (stirred tanks: the rate laws at the outlet) or batch (the rate laws over the batch time); none: conversion when every reaction has one.",
"title": "Reactor"
},
"bed": {
"anyOf": [
{
"$ref": "#/$defs/Bed"
},
{
"type": "null"
}
],
"default": null,
"description": "reactor: pfr: the catalyst bed."
},
"tank": {
"anyOf": [
{
"$ref": "#/$defs/Tank"
},
{
"type": "null"
}
],
"default": null,
"description": "reactor: cstr: the tank(s)."
},
"hazard": {
"anyOf": [
{
"$ref": "#/$defs/ReactionHazard"
},
{
"type": "null"
}
],
"default": null,
"description": "TD24 and MTT for the thermal screening of the reactor."
},
"selectivity": {
"anyOf": [
{
"$ref": "#/$defs/Selectivity"
},
{
"type": "null"
}
],
"default": null,
"description": "A conversion reactor by the key's conversion and the selectivities to its products (instead of a conversion per reaction)."
},
"batch": {
"anyOf": [
{
"$ref": "#/$defs/Batch"
},
{
"type": "null"
}
],
"default": null,
"description": "reactor: batch: the batch."
},
"catalyst": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The catalyst its bed holds: an id of process/catalysts.yaml.",
"title": "Catalyst"
},
"fugacity": {
"default": "ideal",
"description": "Equilibrium and Gibbs reactors: the gas as ideal, or with Peng-Robinson fugacity coefficients (the components' critical constants) for high pressures.",
"enum": [
"ideal",
"peng_robinson"
],
"title": "Fugacity",
"type": "string"
},
"approach": {
"default": 0.0,
"description": "Equilibrium and Gibbs reactors: K is taken at the outlet temperature plus this approach, K (positive: less conversion of an exothermic reaction).",
"title": "Approach",
"type": "number"
},
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"ports": {
"items": {
"$ref": "#/$defs/Port"
},
"title": "Ports",
"type": "array"
},
"links": {
"items": {
"$ref": "#/$defs/Link"
},
"title": "Links",
"type": "array"
},
"block": {
"title": "Block",
"type": "string"
},
"class": {
"default": "ProcessStep",
"description": "DEXPI step class.",
"title": "Class",
"type": "string"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The class's method where DEXPI has one (e.g. Cooling).",
"title": "Method"
},
"split": {
"additionalProperties": {
"type": "number"
},
"description": "Splitters (SplittingMaterial): outlet port -> fraction of the inlet flow, for cheme process propagate.",
"title": "Split",
"type": "object"
},
"symbol": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "PFD drawing only: the ISO 10628-2 symbol to draw the step with (a symbol name as `cheme fragment shape` takes it, e.g. TANK_CONE_ROOF_SHAPE, MIXER_SHAPE), `junction` (a mixing or splitting tee) or `box`; default: its class's symbol.",
"title": "Symbol"
}
},
"required": [
"id",
"block"
],
"title": "Step",
"type": "object"
},
"StreamDef": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"kind": {
"default": "material",
"enum": [
"material",
"energy",
"information"
],
"title": "Kind",
"type": "string"
},
"from": {
"description": "NODE.port",
"title": "From",
"type": "string"
},
"to": {
"description": "NODE.port",
"title": "To",
"type": "string"
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Template"
},
"state": {
"additionalProperties": {
"$ref": "#/$defs/State"
},
"description": "By case id.",
"title": "State",
"type": "object"
},
"links": {
"items": {
"$ref": "#/$defs/Link"
},
"title": "Links",
"type": "array"
}
},
"required": [
"id",
"from",
"to"
],
"title": "StreamDef",
"type": "object"
},
"Tank": {
"additionalProperties": false,
"description": "A continuous stirred tank (``reactor: cstr``; the model: :mod:`.stirred_tank`): its\nvolume, or the space time V / Q0 on the inlet's volumetric flow, of each of ``count`` equal\ntanks in series; isothermal (at the outlet's temperature, else the inlet's) or adiabatic.",
"properties": {
"volume": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "m3 of liquid or gas, per tank",
"title": "Volume"
},
"residence_time": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "s, V / Q0 per tank (instead of volume)",
"title": "Residence Time"
},
"count": {
"default": 1,
"description": "Equal tanks in series.",
"minimum": 1,
"title": "Count",
"type": "integer"
},
"heat": {
"default": "isothermal",
"enum": [
"isothermal",
"adiabatic"
],
"title": "Heat",
"type": "string"
},
"catalyst_loading": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg of catalyst per m3 of reactor: for rate laws per kg of catalyst.",
"title": "Catalyst Loading"
},
"time_on_stream": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "h: the age of the step's catalyst (catalyst:, its deactivation law) the tank is solved at. None: fresh.",
"title": "Time On Stream"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"provenance"
],
"title": "Tank",
"type": "object"
},
"Terminal": {
"additionalProperties": false,
"description": "An external feed (DEXPI Source) or product (DEXPI Sink).",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"ports": {
"items": {
"$ref": "#/$defs/Port"
},
"title": "Ports",
"type": "array"
},
"links": {
"items": {
"$ref": "#/$defs/Link"
},
"title": "Links",
"type": "array"
},
"category": {
"anyOf": [
{
"enum": [
"raw_material",
"product",
"by_product",
"utility",
"wastewater",
"off_gas",
"solid_waste",
"emission"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What crosses the boundary here; not given: unclassified (a gap the boundary-completeness check reports).",
"title": "Category"
},
"utility": {
"anyOf": [
{
"$ref": "#/$defs/UtilityLevel"
},
{
"type": "null"
}
],
"default": null,
"description": "category utility: the utility and its temperature levels."
}
},
"required": [
"id"
],
"title": "Terminal",
"type": "object"
},
"Tolerance": {
"additionalProperties": false,
"description": "``|in - out| <= abs + rel * max(in, out)``, in kg/h.",
"properties": {
"abs": {
"default": 1.0,
"minimum": 0,
"title": "Abs",
"type": "number"
},
"rel": {
"default": 0.005,
"minimum": 0,
"title": "Rel",
"type": "number"
}
},
"title": "Tolerance",
"type": "object"
},
"Uncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a value, relative to it (see :mod:`.uncertainty`).\n\n``lognormal`` with ``gsd2`` (95 % within value / gsd2 .. value x gsd2) or ``pedigree``\nscores (five, 1 to 5: reliability, completeness, temporal, geographical, technological)\non a ``basic`` gsd2; ``normal`` with ``cv``; ``triangular`` or ``uniform`` with ``low`` and\n``high`` multipliers (e.g. 0.8 and 1.2).",
"properties": {
"distribution": {
"default": "lognormal",
"enum": [
"lognormal",
"normal",
"triangular",
"uniform"
],
"title": "Distribution",
"type": "string"
},
"gsd2": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Gsd2"
},
"pedigree": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Pedigree"
},
"basic": {
"default": 1.05,
"description": "Basic gsd2 under the pedigree.",
"minimum": 1,
"title": "Basic",
"type": "number"
},
"cv": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cv"
},
"low": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Low"
},
"high": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "High"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "Uncertainty",
"type": "object"
},
"Units": {
"additionalProperties": false,
"description": "The units a property without its own ``unit`` is in.",
"properties": {
"pressure": {
"default": "kPa(a)",
"title": "Pressure",
"type": "string"
},
"temperature": {
"default": "K",
"title": "Temperature",
"type": "string"
},
"flow": {
"default": "kg/h",
"title": "Flow",
"type": "string"
},
"duty": {
"default": "kW",
"title": "Duty",
"type": "string"
},
"enthalpy": {
"default": "kJ/kmol",
"title": "Enthalpy",
"type": "string"
},
"normal_conditions": {
"anyOf": [
{
"$ref": "#/$defs/NormalConditions"
},
{
"type": "null"
}
],
"default": null,
"description": "Required when any flow is in Nm3/h."
},
"enthalpy_reference": {
"anyOf": [
{
"$ref": "#/$defs/EnthalpyReference"
},
{
"type": "null"
}
],
"default": null,
"description": "Required once any enthalpy is given."
}
},
"title": "Units",
"type": "object"
},
"UtilityLevel": {
"additionalProperties": false,
"description": "What a utility terminal supplies: its kind and, for heat, its temperature levels, which\n``cheme process simulate`` checks against the temperatures of the duty it serves, and, for\nsteam, its pressure. ``cheme assess lca`` gives the energy exchange's carrier the level,\nthe supply temperature and the steam pressure (core#313).",
"properties": {
"kind": {
"enum": [
"steam",
"hot_oil",
"fired_heat",
"cooling_water",
"air_cooling",
"refrigerant",
"electricity",
"fuel",
"other"
],
"title": "Kind",
"type": "string"
},
"level": {
"default": "",
"description": "The utility level's name in the design basis, e.g. LP, MP or HP steam, a hot-oil circuit or a refrigeration level.",
"title": "Level",
"type": "string"
},
"pressure": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Steam: its supply pressure (flowsheet units; a gauge pressure is read against 101.325 kPa). It does not set the temperature: give supply_temperature (saturated steam: the saturation temperature at this pressure)."
},
"supply_temperature": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Where the utility enters the exchanger (flowsheet units)."
},
"return_temperature": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Where it leaves; not given: the same as the supply (condensing steam, a boiling refrigerant)."
},
"min_approach": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Least temperature difference to the process side, K."
}
},
"required": [
"kind"
],
"title": "UtilityLevel",
"type": "object"
},
"ViewItem": {
"additionalProperties": false,
"description": "A persisted layout override of one object in one view.\n\nBlocks, feeds and products: ``x``/``y`` (top left, sheet mm), optional ``width``/``height``.\nPFD steps: ``x``/``y`` relative to their block's top left. Streams: ``waypoints``.",
"properties": {
"x": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "X"
},
"y": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Y"
},
"width": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Width"
},
"height": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Height"
},
"waypoints": {
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Waypoints",
"type": "array"
},
"label": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Label offset, mm.",
"title": "Label"
},
"pinned": {
"default": true,
"title": "Pinned",
"type": "boolean"
}
},
"title": "ViewItem",
"type": "object"
}
},
"additionalProperties": false,
"description": "Feeds, products, blocks, steps and streams: the source of the BFD and PFD.",
"properties": {
"schema": {
"description": "Always cheme/process/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "flowsheet",
"title": "Kind",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"units": {
"$ref": "#/$defs/Units"
},
"cases": {
"items": {
"$ref": "#/$defs/Case"
},
"title": "Cases",
"type": "array"
},
"tolerance": {
"$ref": "#/$defs/Tolerance"
},
"feeds": {
"items": {
"$ref": "#/$defs/Terminal"
},
"title": "Feeds",
"type": "array"
},
"products": {
"items": {
"$ref": "#/$defs/Terminal"
},
"title": "Products",
"type": "array"
},
"blocks": {
"items": {
"$ref": "#/$defs/Block"
},
"title": "Blocks",
"type": "array"
},
"steps": {
"items": {
"$ref": "#/$defs/Step"
},
"title": "Steps",
"type": "array"
},
"streams": {
"items": {
"$ref": "#/$defs/StreamDef"
},
"title": "Streams",
"type": "array"
},
"bfd": {
"anyOf": [
{
"$ref": "#/$defs/BfdView"
},
{
"type": "null"
}
],
"default": null,
"description": "How the BFD draws the streams."
},
"layout": {
"$ref": "#/$defs/Layout"
}
},
"required": [
"schema",
"kind"
],
"title": "Flowsheet",
"type": "object"
}
process-simulation¶
File: process/simulation.yaml. Model: chemeascode.domains.process.simulation.schema.Simulation.
process/simulation.yaml.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/simulation/v1. | |
kind |
simulation |
yes | ||
simulator |
dwsim | idaes |
"dwsim" |
The simulator that solves the flowsheet (ADR 0039): dwsim (the default) or idaes, an optional backend run in the Python CHEME_IDAES_PYTHON names (heater, cooler, valve, pump, compressor, expander, mixer, splitter, flash, conversion reactor and recycles; property packages 'IDAES ideal VLE' and 'IDAES Peng-Robinson'). | |
property_package |
string | "Peng-Robinson (PR)" |
The simulator's property package name: with dwsim one of the packages the DWSIM route runs (methods.yml), with idaes one of the IDAES backend's (simulation/backends.py); others are cheme.process-sim-property-package. | |
method_selection |
MethodSelection or null | null |
The recorded model selection: a property_package it does not recommend is flagged unless a substitution reason is recorded. | |
components |
map of string | Component id -> the simulator's compound name, where the CAS number does not find it. | ||
interaction_parameters |
list of InteractionParameter | Equation-of-state packages (Peng-Robinson, PR78, SRK): kij that replace the simulator's for these pairs. | ||
tolerance |
SimTolerance | |||
tear_streams |
list of string | Where recycle loops are torn and solved iteratively (one stream per loop); chosen by cheme-as-code when not given. | ||
exclude |
list of string | Steps and blocks left out: streams from them into the simulated part are feeds (they need their values), streams into them are products. | ||
guesses |
map of State | Tear stream id -> its first guess (temperature, pressure, flow, composition); a guess, never a stream value. | ||
min_approach |
Quantity or null | null |
The least temperature difference (K) every simulated exchanger is checked against (a spec's min_approach overrides it); not given: only temperature crosses are reported. A check of the result, not passed to the simulator. | |
specs |
map of UnitSpec | Step id -> specs. |
JSON Schema: cheme schema process-simulation
{
"$defs": {
"CompositionValue": {
"additionalProperties": false,
"properties": {
"basis": {
"enum": [
"mole_fraction",
"mass_fraction"
],
"title": "Basis",
"type": "string"
},
"values": {
"additionalProperties": {
"type": "number"
},
"minProperties": 1,
"title": "Values",
"type": "object"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Calculated compositions: the inputs they were derived from (cheme process propagate); a mismatch is cheme.process-calculated-stale.",
"title": "Fingerprint"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of every fraction, relative to it (as on a quantity)."
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What kind of figure it is (as on a quantity).",
"title": "Origin"
}
},
"required": [
"basis",
"values",
"provenance"
],
"title": "CompositionValue",
"type": "object"
},
"HeatIntegration": {
"additionalProperties": false,
"description": "A reboiler heated by another column's condenser (a condenser-reboiler).",
"properties": {
"condenser_of": {
"description": "The step id of the column whose condenser heats it.",
"title": "Condenser Of",
"type": "string"
},
"min_approach": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Least temperature difference across it (default 1 K)."
}
},
"required": [
"condenser_of"
],
"title": "HeatIntegration",
"type": "object"
},
"InteractionParameter": {
"additionalProperties": false,
"description": "A binary interaction parameter (kij) of the property package's equation of state, where\nthe simulator's own value is not the one to use (fitted to other data, missing).",
"properties": {
"components": {
"description": "The two component ids.",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "string"
},
{
"type": "string"
}
],
"title": "Components",
"type": "array"
},
"kij": {
"$ref": "#/$defs/Quantity",
"description": "Dimensionless, the same in both orders."
}
},
"required": [
"components",
"kij"
],
"title": "InteractionParameter",
"type": "object"
},
"KineticCoupling": {
"additionalProperties": false,
"description": "How the outer loop around the DWSIM solve converges a kinetic reactor\n(``kinetic_pfr``): the bed solved at the inlet DWSIM gives must reproduce the outlet DWSIM\nhas (each component's molar flow and the pressure, relative to the outlet's total molar\nflow and pressure; the temperature in K).",
"properties": {
"tolerance": {
"default": 0.0001,
"description": "Relative, component flows and pressure.",
"exclusiveMaximum": 0.1,
"exclusiveMinimum": 0,
"title": "Tolerance",
"type": "number"
},
"temperature_tolerance": {
"default": 0.05,
"description": "K",
"exclusiveMinimum": 0,
"title": "Temperature Tolerance",
"type": "number"
},
"max_iterations": {
"default": 30,
"description": "DWSIM solves at most (each one a full solve).",
"maximum": 200,
"minimum": 1,
"title": "Max Iterations",
"type": "integer"
}
},
"title": "KineticCoupling",
"type": "object"
},
"MethodSelection": {
"additionalProperties": false,
"description": "The recorded thermodynamic model selection the property package rests on: the facts of\n``select_thermo_model`` (thermodynamic-model-selection), re-evaluated on every translation,\nand the reason an engineer accepted a package the selection did not recommend.",
"properties": {
"facts": {
"additionalProperties": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "string"
}
]
},
"description": "Inputs of select_thermo_model (pressure_value, pressure_unit, is_polar, is_electrolyte, has_pseudocomponents, interaction_parameters_available, liquid_liquid_expected, vapor_association_expected, polymerization_degree).",
"title": "Facts",
"type": "object"
},
"substitution": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Why property_package is used although the selection did not recommend it (e.g. the nearest executable substitute of methods.yml, accepted by <who>); without it such a package is cheme.process-sim-method-not-recommended.",
"title": "Substitution"
}
},
"title": "MethodSelection",
"type": "object"
},
"PhaseValue": {
"additionalProperties": false,
"properties": {
"value": {
"enum": [
"vapor",
"liquid",
"two-phase"
],
"title": "Value",
"type": "string"
},
"vapor_fraction": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Vapor Fraction"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Fingerprint"
}
},
"required": [
"value",
"provenance"
],
"title": "PhaseValue",
"type": "object"
},
"ProductSpec": {
"additionalProperties": false,
"description": "What fixes one end of a rigorous column: exactly one of these.",
"properties": {
"reflux_ratio": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Condenser only, L/D.",
"title": "Reflux Ratio"
},
"flow": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "The product's flow (mass or molar unit)."
},
"mole_fraction": {
"additionalProperties": {
"type": "number"
},
"description": "One component id -> its mole fraction in the product.",
"title": "Mole Fraction",
"type": "object"
},
"duty": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"temperature": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
}
},
"title": "ProductSpec",
"type": "object"
},
"Quantity": {
"additionalProperties": false,
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unit"
},
"basis": {
"anyOf": [
{
"enum": [
"mass",
"mole",
"normal_volume"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Calculated values: the inputs (T, P, composition, method) they were calculated from; a mismatch is cheme.process-calculated-stale.",
"title": "Fingerprint"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative to the value, e.g. {gsd2: 1.2} or {distribution: triangular, low: 0.9, high: 1.1}; cheme assess lca samples a feed's or product's flow with it instead of the default for its provenance. No calculated value's fingerprint includes it."
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What kind of figure it is, refining the provenance: given measured, vendor or literature; assumed design-rule, estimate or literature; calculated simulated (cheme process simulate) or correlation (cheme process props). Another pairing is cheme.provenance-origin. No calculated value's fingerprint includes it.",
"title": "Origin"
}
},
"required": [
"value",
"provenance"
],
"title": "Quantity",
"type": "object"
},
"SideDraw": {
"additionalProperties": false,
"description": "A product drawn from a stage of a rigorous column.",
"properties": {
"stage": {
"description": "Numbered from the top (1: the condenser, if any).",
"minimum": 1,
"title": "Stage",
"type": "integer"
},
"phase": {
"enum": [
"liquid",
"vapor"
],
"title": "Phase",
"type": "string"
},
"flow": {
"$ref": "#/$defs/Quantity",
"description": "Mass or molar flow."
}
},
"required": [
"stage",
"phase",
"flow"
],
"title": "SideDraw",
"type": "object"
},
"SimTolerance": {
"additionalProperties": false,
"description": "How far a simulated value may differ from a given or assumed one before\n``cheme.process-sim-deviation``. Flows use the flowsheet ``tolerance``.",
"properties": {
"temperature": {
"default": 1.0,
"description": "K",
"minimum": 0,
"title": "Temperature",
"type": "number"
},
"pressure_rel": {
"default": 0.01,
"minimum": 0,
"title": "Pressure Rel",
"type": "number"
},
"composition": {
"default": 0.001,
"description": "Mole fraction, absolute.",
"minimum": 0,
"title": "Composition",
"type": "number"
}
},
"title": "SimTolerance",
"type": "object"
},
"State": {
"additionalProperties": false,
"properties": {
"pressure": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"temperature": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"flow": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"composition": {
"anyOf": [
{
"$ref": "#/$defs/CompositionValue"
},
{
"type": "null"
}
],
"default": null
},
"phase": {
"anyOf": [
{
"$ref": "#/$defs/PhaseValue"
},
{
"type": "null"
}
],
"default": null
},
"duty": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Energy streams."
},
"calculated": {
"additionalProperties": {
"$ref": "#/$defs/Quantity"
},
"title": "Calculated",
"type": "object"
}
},
"title": "State",
"type": "object"
},
"Uncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a value, relative to it (see :mod:`.uncertainty`).\n\n``lognormal`` with ``gsd2`` (95 % within value / gsd2 .. value x gsd2) or ``pedigree``\nscores (five, 1 to 5: reliability, completeness, temporal, geographical, technological)\non a ``basic`` gsd2; ``normal`` with ``cv``; ``triangular`` or ``uniform`` with ``low`` and\n``high`` multipliers (e.g. 0.8 and 1.2).",
"properties": {
"distribution": {
"default": "lognormal",
"enum": [
"lognormal",
"normal",
"triangular",
"uniform"
],
"title": "Distribution",
"type": "string"
},
"gsd2": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Gsd2"
},
"pedigree": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Pedigree"
},
"basic": {
"default": 1.05,
"description": "Basic gsd2 under the pedigree.",
"minimum": 1,
"title": "Basic",
"type": "number"
},
"cv": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cv"
},
"low": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Low"
},
"high": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "High"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "Uncertainty",
"type": "object"
},
"UnitSpec": {
"additionalProperties": false,
"description": "The specifications of one step. Which ones a unit needs:\n\n- compressor, pump, expander: ``efficiency`` (adiabatic, 0 to 1) and ``outlet_pressure``\n or ``pressure_increase`` (expander: ``pressure_drop``); a compressor with intercoolers\n also ``outlet_temperature`` (after each cooler), ``stages`` (default 1: aftercooler\n only) and ``pressure_drop`` (per cooler); its power goes to the energy stream into it,\n the cooling duty to the one out of it; with a second outlet for condensate, each cooler's\n condensed liquid is separated and leaves there;\n- heater, cooler: ``outlet_temperature`` or ``duty``; ``pressure_drop`` (0 when not given);\n a second outlet takes the condensate (``outlets: {port: condensate}`` or a port id such\n as ``condensate``, ``drain``, ``water``): the cooled stream is flashed, its liquid leaves\n there (a cooler with a moisture separator, a direct contact cooler's condensed water);\n- valve: ``outlet_pressure`` or ``pressure_drop``;\n- mixer: nothing (the outlet takes the lowest inlet pressure);\n- splitter: ``split`` here or on the step (outlet port -> fraction of the inlet flow);\n- flash: nothing (adiabatic, at the inlet conditions; put a valve before it to flash at a\n lower pressure), or ``temperature`` and/or ``pressure`` (the duty follows); which outlet\n is vapour and which liquid by ``outlets`` or by the port ids;\n- heat_exchanger (two streams in, two out; DWSIM finds the hot side):\n ``hot_outlet_temperature``, ``cold_outlet_temperature`` or ``duty``; ``hot_pressure_drop``\n and ``cold_pressure_drop`` (0 when not given); which outlet belongs to which inlet by\n ``pairs`` or by the port ids;\n- shortcut_column (Fenske-Underwood-Gilliland): ``light_key`` and ``heavy_key`` (component\n ids), ``light_key_in_bottoms`` and ``heavy_key_in_distillate`` (mole fractions),\n ``reflux_ratio``, ``condenser_pressure``, ``reboiler_pressure``, ``condenser``; which\n outlet is distillate and which bottoms by ``outlets`` or by the port ids;\n- distillation_column (rigorous; a Distilling step with ``stages``): ``stages`` (condenser\n and reboiler included, numbered from the condenser), ``feed_stage`` (or ``feed_stages``\n by inlet port), ``condenser_pressure``, ``reboiler_pressure``, ``condenser_spec`` and\n ``reboiler_spec``; ``condenser``: ``total``, ``partial`` (a vapour product of\n ``vapor_flow`` beside the liquid distillate) or ``none`` (the top stage takes the liquid\n feed, nothing is condensed); ``reboiler: false`` for a column without one (a vapour feed\n at the bottom); ``side_draws`` by outlet port; ``heat_integration`` when the reboiler is\n heated by another column's condenser (checked: the duties balance and the temperature\n difference is positive);\n- component_separator (a Separating step with one stream in and two out, e.g. an adsorber,\n membrane or filter): ``recoveries`` (component -> fraction of its inlet flow into\n ``recovery_outlet``, default the first outlet port; unlisted components go to the other);\n both outlets leave at the inlet temperature and pressure. The recoveries are\n *specified*, not predicted (``basis: specified``, the default for this unit): give\n ``basis_source`` (where the recoveries come from: vendor data, a published module, a\n DESIGN.md decision) and ``operating_basis`` (the conditions they hold for); without a\n source the split is ``cheme.process-sim-specified-unsourced`` (warning). A converged\n simulation closes the balances around the stated split; it does not show the split is\n attainable;\n- multi_stream_exchanger (a heat exchanging step with three or more streams in, as many\n out): ``outlet_temperatures`` by inlet port for every stream but at most one, whose\n outlet then closes the energy balance; ``pressure_drops`` by inlet port (0 when not\n given); outlets paired with inlets by ``pairs`` or by the port ids;\n- conversion_reactor, equilibrium_reactor, gibbs_reactor (a step with ``reactions:`` or\n ``reactor:`` in the flowsheet, which give the unit, the reactions, the conversions and\n the approach): ``mode`` (``isothermal``, the default without ``outlet_temperature``;\n ``adiabatic``; ``outlet_temperature``, the default with it) and ``pressure_drop`` (0 when\n not given); an equilibrium takes ln K from the reaction's ``equilibrium_constant``, else\n from DWSIM's own Gibbs energies of formation; one outlet (vapour) or two (vapour, liquid\n by ``outlets`` or by the port ids);\n- kinetic_pfr (a step with ``reactor: pfr``, its ``bed:`` and ``catalyst:``): no native\n DWSIM unit. cheme-as-code solves the bed (:mod:`chemeascode.domains.process.fixed_bed`:\n 1D pseudo-homogeneous plug flow, ideal gas, the reactions' rate laws) at the inlet DWSIM\n gives it; DWSIM sees the bed as a conversion reactor with the bed's conversions, outlet\n temperature and pressure drop, and an outer loop repeats the DWSIM solve until the bed\n at the solved inlet gives the outlet DWSIM has (``coupling``: tolerance and iterations);\n no ``mode``, ``outlet_temperature`` or ``pressure_drop`` (the bed sets them); one outlet.\n\n``min_approach`` (heat_exchanger, multi_stream_exchanger) is not a specification but the\nleast approach the solved exchanger's temperatures are checked against.",
"properties": {
"unit": {
"anyOf": [
{
"enum": [
"compressor",
"expander",
"pump",
"heater",
"cooler",
"valve",
"mixer",
"splitter",
"flash",
"heat_exchanger",
"shortcut_column",
"distillation_column",
"component_separator",
"multi_stream_exchanger",
"conversion_reactor",
"equilibrium_reactor",
"gibbs_reactor",
"kinetic_pfr"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The unit operation, where the step's DEXPI class does not say (e.g. an expander drawn as ProcessStep).",
"title": "Unit"
},
"outlet_pressure": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"pressure_increase": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"pressure_drop": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"outlet_temperature": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"duty": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Heat added (negative: removed)."
},
"efficiency": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Adiabatic, 0 to 1."
},
"drive_efficiency": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Compressor, pump, expander: motor and gear (or generator), 0 to 1; the energy stream then carries the electric power, the summary also the shaft power."
},
"split": {
"additionalProperties": {
"type": "number"
},
"title": "Split",
"type": "object"
},
"temperature": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Flash temperature."
},
"pressure": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Flash pressure (absolute)."
},
"outlets": {
"additionalProperties": {
"enum": [
"vapor",
"liquid",
"distillate",
"bottoms",
"gas",
"condensate"
],
"type": "string"
},
"description": "Flash, column, and a cooler or compressor with a condensate outlet: outlet port -> what it carries.",
"title": "Outlets",
"type": "object"
},
"pairs": {
"additionalProperties": {
"type": "string"
},
"description": "Heat exchanger: inlet port -> its outlet port.",
"title": "Pairs",
"type": "object"
},
"hot_outlet_temperature": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"cold_outlet_temperature": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"hot_pressure_drop": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"cold_pressure_drop": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"light_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Light Key"
},
"heavy_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Heavy Key"
},
"light_key_in_bottoms": {
"anyOf": [
{
"exclusiveMaximum": 1,
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Light Key In Bottoms"
},
"heavy_key_in_distillate": {
"anyOf": [
{
"exclusiveMaximum": 1,
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Heavy Key In Distillate"
},
"reflux_ratio": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Actual, L/D.",
"title": "Reflux Ratio"
},
"condenser_pressure": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"reboiler_pressure": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"condenser": {
"default": "total",
"enum": [
"total",
"partial",
"none"
],
"title": "Condenser",
"type": "string"
},
"reboiler": {
"default": true,
"description": "Rigorous column: whether it has one.",
"title": "Reboiler",
"type": "boolean"
},
"vapor_flow": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Partial condenser: the vapour product's flow."
},
"side_draws": {
"additionalProperties": {
"$ref": "#/$defs/SideDraw"
},
"description": "By outlet port.",
"title": "Side Draws",
"type": "object"
},
"heat_integration": {
"anyOf": [
{
"$ref": "#/$defs/HeatIntegration"
},
{
"type": "null"
}
],
"default": null
},
"stages": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Rigorous column (3 or more); intercooled compressor.",
"title": "Stages"
},
"feed_stage": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Feed Stage"
},
"feed_stages": {
"additionalProperties": {
"type": "integer"
},
"description": "Inlet port -> stage.",
"title": "Feed Stages",
"type": "object"
},
"condenser_spec": {
"anyOf": [
{
"$ref": "#/$defs/ProductSpec"
},
{
"type": "null"
}
],
"default": null
},
"reboiler_spec": {
"anyOf": [
{
"$ref": "#/$defs/ProductSpec"
},
{
"type": "null"
}
],
"default": null
},
"recoveries": {
"additionalProperties": {
"type": "number"
},
"title": "Recoveries",
"type": "object"
},
"recovery_outlet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Recovery Outlet"
},
"outlet_temperatures": {
"additionalProperties": {
"$ref": "#/$defs/Quantity"
},
"title": "Outlet Temperatures",
"type": "object"
},
"pressure_drops": {
"additionalProperties": {
"$ref": "#/$defs/Quantity"
},
"title": "Pressure Drops",
"type": "object"
},
"mode": {
"anyOf": [
{
"enum": [
"isothermal",
"adiabatic",
"outlet_temperature"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Reactors: how the outlet temperature is found.",
"title": "Mode"
},
"coupling": {
"anyOf": [
{
"$ref": "#/$defs/KineticCoupling"
},
{
"type": "null"
}
],
"default": null,
"description": "kinetic_pfr: the outer loop's tolerance and iterations (defaults when not given)."
},
"basis": {
"anyOf": [
{
"enum": [
"predictive",
"shortcut",
"specified"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How the unit's outlet follows from its inlets; defaults to the unit kind's (component_separator: specified). A component separator cannot be predictive.",
"title": "Basis"
},
"basis_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Specified units (component_separator): where the recoveries come from (vendor data, a cited module or paper, DESIGN.md D-012).",
"title": "Basis Source"
},
"operating_basis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Specified units: the conditions the recoveries hold for (feed, pressure, temperature, cycle), e.g. 'PSA at 6 bar(a), 25 degC, vendor quote Q-17'.",
"title": "Operating Basis"
},
"min_approach": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "heat_exchanger, multi_stream_exchanger: the least temperature difference between the hot and cold sides (K) the solved exchanger is checked against; overrides the simulation's min_approach. Not passed to the simulator."
}
},
"title": "UnitSpec",
"type": "object"
}
},
"additionalProperties": false,
"description": "``process/simulation.yaml``.",
"properties": {
"schema": {
"description": "Always cheme/simulation/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "simulation",
"title": "Kind",
"type": "string"
},
"simulator": {
"default": "dwsim",
"description": "The simulator that solves the flowsheet (ADR 0039): dwsim (the default) or idaes, an optional backend run in the Python CHEME_IDAES_PYTHON names (heater, cooler, valve, pump, compressor, expander, mixer, splitter, flash, conversion reactor and recycles; property packages 'IDAES ideal VLE' and 'IDAES Peng-Robinson').",
"enum": [
"dwsim",
"idaes"
],
"title": "Simulator",
"type": "string"
},
"property_package": {
"default": "Peng-Robinson (PR)",
"description": "The simulator's property package name: with dwsim one of the packages the DWSIM route runs (methods.yml), with idaes one of the IDAES backend's (simulation/backends.py); others are cheme.process-sim-property-package.",
"title": "Property Package",
"type": "string"
},
"method_selection": {
"anyOf": [
{
"$ref": "#/$defs/MethodSelection"
},
{
"type": "null"
}
],
"default": null,
"description": "The recorded model selection: a property_package it does not recommend is flagged unless a substitution reason is recorded."
},
"components": {
"additionalProperties": {
"type": "string"
},
"description": "Component id -> the simulator's compound name, where the CAS number does not find it.",
"title": "Components",
"type": "object"
},
"interaction_parameters": {
"description": "Equation-of-state packages (Peng-Robinson, PR78, SRK): kij that replace the simulator's for these pairs.",
"items": {
"$ref": "#/$defs/InteractionParameter"
},
"title": "Interaction Parameters",
"type": "array"
},
"tolerance": {
"$ref": "#/$defs/SimTolerance"
},
"tear_streams": {
"description": "Where recycle loops are torn and solved iteratively (one stream per loop); chosen by cheme-as-code when not given.",
"items": {
"type": "string"
},
"title": "Tear Streams",
"type": "array"
},
"exclude": {
"description": "Steps and blocks left out: streams from them into the simulated part are feeds (they need their values), streams into them are products.",
"items": {
"type": "string"
},
"title": "Exclude",
"type": "array"
},
"guesses": {
"additionalProperties": {
"$ref": "#/$defs/State"
},
"description": "Tear stream id -> its first guess (temperature, pressure, flow, composition); a guess, never a stream value.",
"title": "Guesses",
"type": "object"
},
"min_approach": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "The least temperature difference (K) every simulated exchanger is checked against (a spec's min_approach overrides it); not given: only temperature crosses are reported. A check of the result, not passed to the simulator."
},
"specs": {
"additionalProperties": {
"$ref": "#/$defs/UnitSpec"
},
"description": "Step id -> specs.",
"title": "Specs",
"type": "object"
}
},
"required": [
"schema",
"kind"
],
"title": "Simulation",
"type": "object"
}
process-reactions¶
File: process/reactions.yaml. Model: chemeascode.domains.chemistry.reactions.Reactions.
The reactions of the process.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/reactions/v1. | |
kind |
reactions |
yes | ||
activity_model |
unifac | ideal |
"unifac" |
Activity coefficients of liquid-phase reactions on an activity basis: UNIFAC from the components' CAS numbers (extra props), or 1 (ideal). | |
reactions |
list of Reaction |
JSON Schema: cheme schema process-reactions
{
"$defs": {
"Adsorption": {
"additionalProperties": false,
"description": "One term of an LHHW denominator: ``K = A exp(-dH / (R T))`` times its species'\ndriving forces to their exponents (no species: a constant term).",
"properties": {
"A": {
"exclusiveMinimum": 0,
"title": "A",
"type": "number"
},
"dH": {
"default": 0.0,
"description": "kJ/kmol; negative: adsorption is exothermic",
"title": "Dh",
"type": "number"
},
"exponents": {
"additionalProperties": {
"type": "number"
},
"description": "component id -> b",
"title": "Exponents",
"type": "object"
}
},
"required": [
"A"
],
"title": "Adsorption",
"type": "object"
},
"Arrhenius": {
"additionalProperties": false,
"description": "``k = A (T/T_ref)^n exp(-Ea / (R T))``, in the rate law's units.",
"properties": {
"A": {
"description": "At T_ref, in the units of the rate law.",
"exclusiveMinimum": 0,
"title": "A",
"type": "number"
},
"Ea": {
"default": 0.0,
"description": "kJ/kmol (numerically J/mol)",
"title": "Ea",
"type": "number"
},
"n": {
"default": 0.0,
"title": "N",
"type": "number"
},
"T_ref": {
"default": 1.0,
"description": "K",
"exclusiveMinimum": 0,
"title": "T Ref",
"type": "number"
}
},
"required": [
"A"
],
"title": "Arrhenius",
"type": "object"
},
"Conversion": {
"additionalProperties": false,
"description": "The fraction of the key component's inlet flow a reactor converts by this reaction.",
"properties": {
"key": {
"description": "A reactant (negative coefficient) of the reaction.",
"title": "Key",
"type": "string"
},
"value": {
"exclusiveMinimum": 0,
"maximum": 1,
"title": "Value",
"type": "number"
},
"provenance": {
"enum": [
"given",
"assumed"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative to the value: sampled by cheme process reactor-uncertainty."
}
},
"required": [
"key",
"value",
"provenance"
],
"title": "Conversion",
"type": "object"
},
"EquilibriumConstant": {
"additionalProperties": false,
"description": "``ln K = a + b / T + c ln T + d T`` (T in K) for the reaction as written, on ``basis``:\npartial pressures in bar (a gas), or a liquid's mole fractions, activities or\nconcentrations in kmol/m3 (domains/chemistry/liquid.py); instead of the components'\nideal-gas data.",
"properties": {
"basis": {
"default": "partial_pressure",
"description": "What K is written on: partial_pressure (bar, a gas); mole_fraction, activity or concentration (kmol/m3) for a liquid-phase reaction.",
"enum": [
"partial_pressure",
"mole_fraction",
"activity",
"concentration"
],
"title": "Basis",
"type": "string"
},
"a": {
"default": 0.0,
"title": "A",
"type": "number"
},
"b": {
"default": 0.0,
"title": "B",
"type": "number"
},
"c": {
"default": 0.0,
"title": "C",
"type": "number"
},
"d": {
"default": 0.0,
"title": "D",
"type": "number"
},
"temperature_range": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "K",
"title": "Temperature Range"
},
"provenance": {
"enum": [
"given",
"assumed"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of K, relative (a multiplier on K): cheme process reactor-uncertainty."
}
},
"required": [
"provenance"
],
"title": "EquilibriumConstant",
"type": "object"
},
"HeatOfReaction": {
"additionalProperties": false,
"description": "Per kmol of extent of the reaction as written: negative when exothermic.",
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"const": "kJ/kmol",
"default": "kJ/kmol",
"title": "Unit",
"type": "string"
},
"temperature": {
"default": 298.15,
"description": "K",
"exclusiveMinimum": 0,
"title": "Temperature",
"type": "number"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative to the value: sampled by cheme process reactor-uncertainty."
}
},
"required": [
"value",
"provenance"
],
"title": "HeatOfReaction",
"type": "object"
},
"Mechanism": {
"additionalProperties": false,
"description": "The elementary steps of one overall reaction on one kind of site.",
"properties": {
"site_density": {
"description": "mol/m2 of surface sites (Gamma)",
"exclusiveMinimum": 0,
"title": "Site Density",
"type": "number"
},
"adsorbates": {
"description": "Ids ending in *, e.g. CO*.",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Adsorbates",
"type": "array"
},
"steps": {
"items": {
"$ref": "#/$defs/Step"
},
"minItems": 1,
"title": "Steps",
"type": "array"
},
"catalyst": {
"default": "",
"description": "The catalyst it describes (an id of process/catalysts.yaml).",
"title": "Catalyst",
"type": "string"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"site_density",
"adsorbates",
"steps",
"provenance"
],
"title": "Mechanism",
"type": "object"
},
"RateLaw": {
"additionalProperties": false,
"description": "The rate of one reaction (see the module docstring).",
"properties": {
"form": {
"enum": [
"power_law",
"lhhw"
],
"title": "Form",
"type": "string"
},
"basis": {
"description": "catalyst_mass: kmol/(kg_cat s); volume: kmol/(m3 s)",
"enum": [
"catalyst_mass",
"volume"
],
"title": "Basis",
"type": "string"
},
"driving": {
"description": "partial_pressure: bar (gas); concentration: kmol/m3; mole_fraction, activity: a liquid's x or gamma x (domains/chemistry/liquid.py)",
"enum": [
"partial_pressure",
"concentration",
"mole_fraction",
"activity"
],
"title": "Driving",
"type": "string"
},
"k": {
"$ref": "#/$defs/Arrhenius"
},
"orders": {
"additionalProperties": {
"type": "number"
},
"description": "component id -> its exponent in the forward term",
"title": "Orders",
"type": "object"
},
"reverse": {
"default": "none",
"description": "equilibrium: times (1 - Q/K), so the rate is zero at equilibrium",
"enum": [
"none",
"equilibrium"
],
"title": "Reverse",
"type": "string"
},
"adsorption": {
"description": "LHHW denominator",
"items": {
"$ref": "#/$defs/Adsorption"
},
"title": "Adsorption",
"type": "array"
},
"power": {
"default": 1.0,
"description": "LHHW: the denominator's exponent m",
"exclusiveMinimum": 0,
"title": "Power",
"type": "number"
},
"catalyst": {
"default": "",
"description": "The catalyst it holds for (an id of process/catalysts.yaml).",
"title": "Catalyst",
"type": "string"
},
"temperature_range": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "K",
"title": "Temperature Range"
},
"scale": {
"default": "effective",
"description": "effective: the particles' rate as used (the default); intrinsic: the catalyst's own rate, which a fixed bed multiplies by its effectiveness factor.",
"enum": [
"effective",
"intrinsic"
],
"title": "Scale",
"type": "string"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/RateUncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of A and Ea, relative: cheme process reactor-uncertainty."
}
},
"required": [
"form",
"basis",
"driving",
"k",
"provenance"
],
"title": "RateLaw",
"type": "object"
},
"RateUncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a rate law's Arrhenius parameters, each relative to its value (a\nfit's intervals: A lognormal, Ea normal).",
"properties": {
"A": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null
},
"Ea": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null
}
},
"title": "RateUncertainty",
"type": "object"
},
"Reaction": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"equation": {
"default": "",
"description": "As text, for readers (not parsed).",
"title": "Equation",
"type": "string"
},
"stoichiometry": {
"additionalProperties": {
"type": "number"
},
"description": "Component id -> coefficient: negative reactants, positive products.",
"minProperties": 2,
"title": "Stoichiometry",
"type": "object"
},
"phase": {
"anyOf": [
{
"enum": [
"vapor",
"liquid",
"mixed"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Phase"
},
"reversible": {
"default": false,
"title": "Reversible",
"type": "boolean"
},
"conversion": {
"anyOf": [
{
"$ref": "#/$defs/Conversion"
},
{
"type": "null"
}
],
"default": null
},
"heat_of_reaction": {
"anyOf": [
{
"$ref": "#/$defs/HeatOfReaction"
},
{
"type": "null"
}
],
"default": null
},
"equilibrium_constant": {
"anyOf": [
{
"$ref": "#/$defs/EquilibriumConstant"
},
{
"type": "null"
}
],
"default": null
},
"rate": {
"anyOf": [
{
"$ref": "#/$defs/RateLaw"
},
{
"type": "null"
}
],
"default": null,
"description": "Kinetics: power law or LHHW (domains/chemistry/rates.py)."
},
"mechanism": {
"anyOf": [
{
"$ref": "#/$defs/Mechanism"
},
{
"type": "null"
}
],
"default": null,
"description": "Its elementary surface steps (domains/chemistry/microkinetics.py)."
},
"catalyst": {
"default": "",
"description": "The catalyst: an id of process/catalysts.yaml (a catalyst's name or free text is accepted; with that file, validate hints at the id or warns).",
"title": "Catalyst",
"type": "string"
},
"sources": {
"description": "DOIs or references.",
"items": {
"type": "string"
},
"title": "Sources",
"type": "array"
}
},
"required": [
"id",
"stoichiometry"
],
"title": "Reaction",
"type": "object"
},
"Step": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"equation": {
"default": "",
"description": "As text, for readers.",
"title": "Equation",
"type": "string"
},
"stoichiometry": {
"additionalProperties": {
"type": "number"
},
"description": "Gas component ids, adsorbates (X*) and the free site (*): negative consumed, positive formed.",
"minProperties": 2,
"title": "Stoichiometry",
"type": "object"
},
"forward": {
"anyOf": [
{
"$ref": "#/$defs/StepRate"
},
{
"type": "null"
}
],
"default": null
},
"sticking": {
"anyOf": [
{
"$ref": "#/$defs/Sticking"
},
{
"type": "null"
}
],
"default": null,
"description": "Adsorption steps: instead of forward."
},
"reverse": {
"anyOf": [
{
"$ref": "#/$defs/StepRate"
},
{
"type": "null"
}
],
"default": null,
"description": "None: the step is irreversible."
},
"energies": {
"anyOf": [
{
"$ref": "#/$defs/StepEnergies"
},
{
"type": "null"
}
],
"default": null,
"description": "Instead of forward and reverse: electronic energies (transition state theory); with sticking, they give the desorption."
}
},
"required": [
"id",
"stoichiometry"
],
"title": "Step",
"type": "object"
},
"StepEnergies": {
"additionalProperties": false,
"description": "A step from electronic energies (DFT, e.g. from Catalysis-Hub or a paper): transition\nstate theory, ``k = (k_B T / h) exp(-Ea / (R T))`` both ways, the forward barrier as given\nand the reverse ``barrier - reaction_energy``. An adsorption keeps its sticking coefficient\nand takes its desorption from these energies.",
"properties": {
"reaction_energy": {
"description": "eV, products minus reactants",
"title": "Reaction Energy",
"type": "number"
},
"barrier": {
"description": "eV, forward (0: none)",
"minimum": 0,
"title": "Barrier",
"type": "number"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"description": "The DOI or database entry.",
"title": "Source",
"type": "string"
}
},
"required": [
"reaction_energy",
"barrier",
"provenance"
],
"title": "StepEnergies",
"type": "object"
},
"StepRate": {
"additionalProperties": false,
"description": "``k = A (T/T_ref)^n exp(-Ea / (R T))`` per site and second (pressures in bar).",
"properties": {
"A": {
"exclusiveMinimum": 0,
"title": "A",
"type": "number"
},
"Ea": {
"default": 0.0,
"description": "kJ/kmol (numerically J/mol)",
"title": "Ea",
"type": "number"
},
"n": {
"default": 0.0,
"title": "N",
"type": "number"
},
"T_ref": {
"default": 1.0,
"description": "K",
"exclusiveMinimum": 0,
"title": "T Ref",
"type": "number"
}
},
"required": [
"A"
],
"title": "StepRate",
"type": "object"
},
"Sticking": {
"additionalProperties": false,
"description": "An adsorption's sticking coefficient ``s = s0 exp(-Ea / (R T))``.",
"properties": {
"s0": {
"exclusiveMinimum": 0,
"maximum": 1,
"title": "S0",
"type": "number"
},
"Ea": {
"default": 0.0,
"description": "kJ/kmol (numerically J/mol)",
"title": "Ea",
"type": "number"
}
},
"required": [
"s0"
],
"title": "Sticking",
"type": "object"
},
"Uncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a value, relative to it (see :mod:`.uncertainty`).\n\n``lognormal`` with ``gsd2`` (95 % within value / gsd2 .. value x gsd2) or ``pedigree``\nscores (five, 1 to 5: reliability, completeness, temporal, geographical, technological)\non a ``basic`` gsd2; ``normal`` with ``cv``; ``triangular`` or ``uniform`` with ``low`` and\n``high`` multipliers (e.g. 0.8 and 1.2).",
"properties": {
"distribution": {
"default": "lognormal",
"enum": [
"lognormal",
"normal",
"triangular",
"uniform"
],
"title": "Distribution",
"type": "string"
},
"gsd2": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Gsd2"
},
"pedigree": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Pedigree"
},
"basic": {
"default": 1.05,
"description": "Basic gsd2 under the pedigree.",
"minimum": 1,
"title": "Basic",
"type": "number"
},
"cv": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cv"
},
"low": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Low"
},
"high": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "High"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "Uncertainty",
"type": "object"
}
},
"additionalProperties": false,
"description": "The reactions of the process.",
"properties": {
"schema": {
"description": "Always cheme/reactions/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "reactions",
"title": "Kind",
"type": "string"
},
"activity_model": {
"default": "unifac",
"description": "Activity coefficients of liquid-phase reactions on an activity basis: UNIFAC from the components' CAS numbers (extra props), or 1 (ideal).",
"enum": [
"unifac",
"ideal"
],
"title": "Activity Model",
"type": "string"
},
"reactions": {
"items": {
"$ref": "#/$defs/Reaction"
},
"title": "Reactions",
"type": "array"
}
},
"required": [
"schema",
"kind"
],
"title": "Reactions",
"type": "object"
}
process-catalysts¶
File: process/catalysts.yaml. Model: chemeascode.domains.chemistry.catalysts.Catalysts.
The catalysts of the process.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/catalysts/v1. | |
kind |
catalysts |
yes | ||
catalysts |
list of Catalyst |
JSON Schema: cheme schema process-catalysts
{
"$defs": {
"Catalyst": {
"additionalProperties": false,
"description": "One catalyst: identity, physical data, window, poisons, deactivation, price.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"name": {
"default": "",
"title": "Name",
"type": "string"
},
"active_phase": {
"description": "e.g. Fe (magnetite), Cu/ZnO, Ni, Ag, V2O5",
"title": "Active Phase",
"type": "string"
},
"promoters": {
"items": {
"type": "string"
},
"title": "Promoters",
"type": "array"
},
"support": {
"default": "",
"title": "Support",
"type": "string"
},
"physical": {
"anyOf": [
{
"$ref": "#/$defs/Physical"
},
{
"type": "null"
}
],
"default": null
},
"window": {
"anyOf": [
{
"$ref": "#/$defs/Window"
},
{
"type": "null"
}
],
"default": null
},
"space_velocity": {
"anyOf": [
{
"$ref": "#/$defs/SpaceVelocity"
},
{
"type": "null"
}
],
"default": null
},
"poisons": {
"description": "Component ids where declared (checked in feeds).",
"items": {
"type": "string"
},
"title": "Poisons",
"type": "array"
},
"deactivation": {
"anyOf": [
{
"$ref": "#/$defs/Deactivation"
},
{
"type": "null"
}
],
"default": null
},
"price": {
"anyOf": [
{
"$ref": "#/$defs/Price"
},
{
"type": "null"
}
],
"default": null
},
"sources": {
"description": "DOIs or references.",
"items": {
"type": "string"
},
"title": "Sources",
"type": "array"
}
},
"required": [
"id",
"active_phase"
],
"title": "Catalyst",
"type": "object"
},
"Deactivation": {
"additionalProperties": false,
"description": "How the catalyst deactivates. With ``law``, its activity (rate over the fresh rate) after\n``t`` hours on stream at the plant's conditions: ``first_order`` ``a = exp(-kd t)``;\n``power`` ``da/dt = -kd a^order``, ``a = (1 + (order - 1) kd t)^(1 / (1 - order))``.",
"properties": {
"lifetime": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "years of service",
"title": "Lifetime"
},
"mechanisms": {
"description": "e.g. sintering, coking, poisoning, attrition",
"items": {
"type": "string"
},
"title": "Mechanisms",
"type": "array"
},
"regeneration": {
"default": "",
"description": "How, if at all (e.g. coke burn-off).",
"title": "Regeneration",
"type": "string"
},
"law": {
"anyOf": [
{
"enum": [
"first_order",
"power"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Law"
},
"kd": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "1/h at the plant's conditions",
"title": "Kd"
},
"order": {
"default": 2.0,
"description": "power law: the order (above 1)",
"exclusiveMinimum": 1,
"title": "Order",
"type": "number"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"provenance"
],
"title": "Deactivation",
"type": "object"
},
"Physical": {
"additionalProperties": false,
"description": "Particle and bed data, SI units.",
"properties": {
"form": {
"anyOf": [
{
"enum": [
"sphere",
"pellet",
"extrudate",
"ring",
"multi-hole",
"granule",
"monolith",
"powder",
"gauze"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Form"
},
"particle_diameter": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "m, the equivalent sphere's diameter",
"title": "Particle Diameter"
},
"sphericity": {
"anyOf": [
{
"exclusiveMinimum": 0,
"maximum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Sphericity"
},
"particle_density": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg/m3",
"title": "Particle Density"
},
"bulk_density": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg/m3 of packed bed",
"title": "Bulk Density"
},
"bed_voidage": {
"anyOf": [
{
"exclusiveMaximum": 1,
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Bed Voidage"
},
"surface_area": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "m2/g, BET",
"title": "Surface Area"
},
"porosity": {
"anyOf": [
{
"exclusiveMaximum": 1,
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "of the particle",
"title": "Porosity"
},
"tortuosity": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "of the particle's pores",
"title": "Tortuosity"
},
"effective_diffusivity": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "m2/s in the particle (instead of porosity, tortuosity and the bed's diffusivity)",
"title": "Effective Diffusivity"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"provenance"
],
"title": "Physical",
"type": "object"
},
"Price": {
"additionalProperties": false,
"properties": {
"value": {
"exclusiveMinimum": 0,
"title": "Value",
"type": "number"
},
"unit": {
"enum": [
"USD/kg",
"EUR/kg",
"USD/m3",
"EUR/m3"
],
"title": "Unit",
"type": "string"
},
"year": {
"description": "The price's year (for escalation).",
"maximum": 2100,
"minimum": 1950,
"title": "Year",
"type": "integer"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"value",
"unit",
"year",
"provenance"
],
"title": "Price",
"type": "object"
},
"SpaceVelocity": {
"additionalProperties": false,
"description": "The space velocity range the catalyst is used in, 1/h.",
"properties": {
"basis": {
"description": "GHSV: Nm3/h of gas per m3 of bed; WHSV: kg/h of feed per kg of catalyst; LHSV: m3/h of liquid per m3 of bed",
"enum": [
"GHSV",
"WHSV",
"LHSV"
],
"title": "Basis",
"type": "string"
},
"range": {
"description": "1/h, min and max",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Range",
"type": "array"
},
"gas": {
"default": "wet",
"description": "GHSV: the gas the Nm3/h count, wet (with its water vapour) or dry (water left out)",
"enum": [
"wet",
"dry"
],
"title": "Gas",
"type": "string"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"basis",
"range",
"provenance"
],
"title": "SpaceVelocity",
"type": "object"
},
"Window": {
"additionalProperties": false,
"description": "Where the catalyst may be used.",
"properties": {
"temperature": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "K, min and max",
"title": "Temperature"
},
"pressure": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "kPa(a), min, max",
"title": "Pressure"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"provenance"
],
"title": "Window",
"type": "object"
}
},
"additionalProperties": false,
"description": "The catalysts of the process.",
"properties": {
"schema": {
"description": "Always cheme/catalysts/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "catalysts",
"title": "Kind",
"type": "string"
},
"catalysts": {
"items": {
"$ref": "#/$defs/Catalyst"
},
"title": "Catalysts",
"type": "array"
}
},
"required": [
"schema",
"kind"
],
"title": "Catalysts",
"type": "object"
}
process-assays¶
File: process/assays.yaml. Model: chemeascode.domains.process.thermodynamics.assay.Assays.
process/assays.yaml.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/assay/v1. | |
kind |
assays |
yes | ||
assays |
list of Assay |
JSON Schema: cheme schema process-assays
{
"$defs": {
"Assay": {
"additionalProperties": false,
"description": "One sourced assay of a petroleum fraction.",
"properties": {
"id": {
"minLength": 1,
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"source": {
"description": "Where the data come from: a document, report or DOI",
"minLength": 1,
"title": "Source",
"type": "string"
},
"temperature_unit": {
"description": "Of the curve or the cuts",
"enum": [
"K",
"\u00b0C",
"\u00b0F"
],
"title": "Temperature Unit",
"type": "string"
},
"distillation": {
"anyOf": [
{
"$ref": "#/$defs/Distillation"
},
{
"type": "null"
}
],
"default": null
},
"cuts": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/Cut"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Cuts"
},
"specific_gravity": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "60/60 \u00b0F",
"title": "Specific Gravity"
},
"api_gravity": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Gravity"
},
"density_15C": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg/m3 at 15 \u00b0C",
"title": "Density 15C"
},
"watson_k": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Instead of the density: the K the cuts share",
"title": "Watson K"
},
"molar_mass": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Measured, g/mol: checked against the characterisation",
"title": "Molar Mass"
},
"pseudocomponents": {
"anyOf": [
{
"maximum": 50,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Cuts of a curve; 8",
"title": "Pseudocomponents"
}
},
"required": [
"id",
"source",
"temperature_unit"
],
"title": "Assay",
"type": "object"
},
"Cut": {
"additionalProperties": false,
"description": "One cut of a fraction, as an assay reports it.",
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Shown name, e.g. 'C7 cut'",
"title": "Name"
},
"liquid_volume_percent": {
"exclusiveMinimum": 0,
"maximum": 100,
"title": "Liquid Volume Percent",
"type": "number"
},
"boiling_point": {
"description": "Normal boiling point, in temperature_unit",
"title": "Boiling Point",
"type": "number"
},
"specific_gravity": {
"description": "60/60 \u00b0F",
"exclusiveMinimum": 0,
"title": "Specific Gravity",
"type": "number"
}
},
"required": [
"liquid_volume_percent",
"boiling_point",
"specific_gravity"
],
"title": "Cut",
"type": "object"
},
"Distillation": {
"additionalProperties": false,
"description": "A distillation curve: liquid volume percent distilled against temperature.",
"properties": {
"method": {
"description": "TBP (true boiling point) or ASTM D86 (converted to TBP by API 3A1.1)",
"enum": [
"TBP",
"D86"
],
"title": "Method",
"type": "string"
},
"points": {
"description": "[liquid volume percent distilled, temperature] pairs, from 0 (initial boiling point) to 100 (final boiling point); D86: exactly 0, 10, 30, 50, 70, 90, 100",
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Points",
"type": "array"
}
},
"required": [
"method",
"points"
],
"title": "Distillation",
"type": "object"
}
},
"additionalProperties": false,
"description": "``process/assays.yaml``.",
"properties": {
"schema": {
"description": "Always cheme/assay/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "assays",
"title": "Kind",
"type": "string"
},
"assays": {
"items": {
"$ref": "#/$defs/Assay"
},
"title": "Assays",
"type": "array"
}
},
"required": [
"schema",
"kind"
],
"title": "Assays",
"type": "object"
}
process-cells¶
File: process/cells.yaml. Model: chemeascode.domains.process.electrochemical_cell.Cells.
The electrochemical cells of the process.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/electrochemical-cells/v1. | |
kind |
electrochemical_cells |
yes | ||
cells |
list of Cell | |||
stacks |
list of Stack | Stacks sized from a cell for a product duty, and the skid equipment inputs from a duty (cheme process stack); not part of the Faraday balance. |
JSON Schema: cheme schema process-cells
{
"$defs": {
"BleedTank": {
"additionalProperties": false,
"description": "The bleed tank: what is bled over the campaign, or over the emptying interval.",
"properties": {
"tag": {
"description": "Its tag in the equipment list (a vertical cylinder).",
"title": "Tag",
"type": "string"
},
"margin": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "The freeboard or margin over the working volume, as a fraction (0.2) or %."
},
"aspect_ratio": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Height over diameter of the cylinder (ASSUMED)."
},
"empty_interval": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "h (d): the tank is emptied this often; it holds the most bled in any such interval of the campaign (default: the whole campaign)."
}
},
"required": [
"tag"
],
"title": "BleedTank",
"type": "object"
},
"Cell": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"performance": {
"default": "specified",
"description": "specified: voltage and efficiencies are given; measured: they are looked up in a measured series (measurements:) at the cell's current density, never extrapolated; predictive (a polarisation model) is not supported and refused.",
"enum": [
"specified",
"predictive",
"measured"
],
"title": "Performance",
"type": "string"
},
"reaction": {
"description": "The overall reaction: an id of process/reactions.yaml.",
"title": "Reaction",
"type": "string"
},
"electrons": {
"description": "Electrons per extent of the overall reaction.",
"exclusiveMinimum": 0,
"title": "Electrons",
"type": "number"
},
"electrodes": {
"anyOf": [
{
"$ref": "#/$defs/Electrodes"
},
{
"type": "null"
}
],
"default": null
},
"dissociation": {
"additionalProperties": {
"additionalProperties": {
"type": "number"
},
"type": "object"
},
"description": "Component id -> its ions in the electrolyte (NaCl: {Na+: 1, Cl-: 1}), to check the half-reactions against the overall reaction.",
"title": "Dissociation",
"type": "object"
},
"cells": {
"default": 1,
"description": "Cells in series carrying the current.",
"minimum": 1,
"title": "Cells",
"type": "integer"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Through each cell (A, kA)."
},
"active_area": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Of one cell (m2, cm2): the current density."
},
"faradaic_efficiency": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Fraction of the current forming the overall reaction."
},
"voltage": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Per cell, at the terminals (V)."
},
"reversible_voltage": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Per cell (V), from dG / (n F): the voltage efficiency."
},
"side_reactions": {
"items": {
"$ref": "#/$defs/SideReaction"
},
"title": "Side Reactions",
"type": "array"
},
"crossover": {
"additionalProperties": {
"type": "number"
},
"description": "Product -> fraction of it formed that leaves with the other electrode's outlet.",
"title": "Crossover",
"type": "object"
},
"purge": {
"additionalProperties": {
"type": "number"
},
"description": "Product -> fraction of it formed that is purged.",
"title": "Purge",
"type": "object"
},
"thermal": {
"anyOf": [
{
"$ref": "#/$defs/ThermalBoundary"
},
{
"type": "null"
}
],
"default": null
},
"operating_range": {
"anyOf": [
{
"$ref": "#/$defs/OperatingRange"
},
{
"type": "null"
}
],
"default": null
},
"electrolyte": {
"default": "",
"description": "The electrolyte (free text); its properties are not modelled.",
"title": "Electrolyte",
"type": "string"
},
"flowsheet": {
"anyOf": [
{
"$ref": "#/$defs/FlowsheetLink"
},
{
"type": "null"
}
],
"default": null
},
"measurements": {
"anyOf": [
{
"$ref": "#/$defs/MeasurementLink"
},
{
"type": "null"
}
],
"default": null
},
"membrane": {
"anyOf": [
{
"$ref": "#/$defs/CellMembrane"
},
{
"type": "null"
}
],
"default": null
},
"sources": {
"items": {
"type": "string"
},
"title": "Sources",
"type": "array"
}
},
"required": [
"id",
"reaction",
"electrons"
],
"title": "Cell",
"type": "object"
},
"CellMembrane": {
"additionalProperties": false,
"description": "The membrane between the electrodes and the ions it carries: what is not water\ndissociation (bipolar membrane) is carried by co-ions.",
"properties": {
"kind": {
"enum": [
"bipolar",
"cation_exchange",
"anion_exchange",
"diaphragm",
"none"
],
"title": "Kind",
"type": "string"
},
"bias": {
"anyOf": [
{
"enum": [
"forward",
"reverse"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Bias"
},
"water_dissociation_efficiency": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Share of the current carried by water dissociation, 0..1 (a measured cell takes it from the measurement)."
},
"co_ion_crossover": {
"additionalProperties": {
"type": "number"
},
"description": "Ion (K+, HCO3-, CO3-2) -> its share of the current not carried by water dissociation; the shares add up to 1.",
"title": "Co Ion Crossover",
"type": "object"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"kind"
],
"title": "CellMembrane",
"type": "object"
},
"DosingPump": {
"additionalProperties": false,
"properties": {
"tag": {
"title": "Tag",
"type": "string"
},
"margin": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Over the duty's largest dosing rate, as a fraction or %."
}
},
"required": [
"tag"
],
"title": "DosingPump",
"type": "object"
},
"DosingTank": {
"additionalProperties": false,
"description": "The dosing tank: what is dosed over the campaign, or over the refill interval.",
"properties": {
"tag": {
"description": "Its tag in the equipment list (a vertical cylinder).",
"title": "Tag",
"type": "string"
},
"margin": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "The freeboard or margin over the working volume, as a fraction (0.2) or %."
},
"aspect_ratio": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Height over diameter of the cylinder (ASSUMED)."
},
"refill_interval": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "h (d): the tank is refilled this often; it holds the most dosed in any such interval of the campaign (default: the whole campaign)."
}
},
"required": [
"tag"
],
"title": "DosingTank",
"type": "object"
},
"Electrodes": {
"additionalProperties": false,
"properties": {
"anode": {
"$ref": "#/$defs/HalfReaction",
"description": "The oxidation: releases electrons (e- > 0)."
},
"cathode": {
"$ref": "#/$defs/HalfReaction",
"description": "The reduction: takes electrons (e- < 0)."
}
},
"required": [
"anode",
"cathode"
],
"title": "Electrodes",
"type": "object"
},
"FlowsheetLink": {
"additionalProperties": false,
"description": "The flowsheet block or step this cell is, and its energy streams.",
"properties": {
"step": {
"description": "A step id, or a block without steps, of the flowsheet.",
"title": "Step",
"type": "string"
},
"case": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Default: the flowsheet's default case.",
"title": "Case"
},
"electricity": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The energy stream into the step carrying P.",
"title": "Electricity"
},
"heat": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The energy stream carrying Q (out of the step when Q > 0).",
"title": "Heat"
}
},
"required": [
"step"
],
"title": "FlowsheetLink",
"type": "object"
},
"HalfReaction": {
"additionalProperties": false,
"description": "One electrode's reaction: species are component ids, ions (``OH-``, ``Na+``, ``SO4-2``)\nor ``e-``; negative for reactants, positive for products.",
"properties": {
"equation": {
"default": "",
"description": "As text, for readers (not parsed).",
"title": "Equation",
"type": "string"
},
"species": {
"additionalProperties": {
"type": "number"
},
"minProperties": 2,
"title": "Species",
"type": "object"
}
},
"required": [
"species"
],
"title": "HalfReaction",
"type": "object"
},
"MeasurementLink": {
"additionalProperties": false,
"description": "The measured series a cell's voltage and efficiencies are looked up in.",
"properties": {
"file": {
"description": "experiments/electrochemistry/<id>.yaml, from the root.",
"title": "File",
"type": "string"
},
"product": {
"description": "The measurement's product the overall reaction forms.",
"title": "Product",
"type": "string"
},
"side_products": {
"description": "Products whose Faradaic efficiency becomes the current fraction of the side reaction their measurement entry names (reaction:).",
"items": {
"type": "string"
},
"title": "Side Products",
"type": "array"
}
},
"required": [
"file",
"product"
],
"title": "MeasurementLink",
"type": "object"
},
"OperatingRange": {
"additionalProperties": false,
"description": "Where the specified voltage and efficiencies hold (from the source of the data).",
"properties": {
"temperature": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "K, min and max",
"title": "Temperature"
},
"current_density": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "A/m2, min and max (needs active_area)",
"title": "Current Density"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "OperatingRange",
"type": "object"
},
"Quantity": {
"additionalProperties": false,
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unit"
},
"basis": {
"anyOf": [
{
"enum": [
"mass",
"mole",
"normal_volume"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Calculated values: the inputs (T, P, composition, method) they were calculated from; a mismatch is cheme.process-calculated-stale.",
"title": "Fingerprint"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative to the value, e.g. {gsd2: 1.2} or {distribution: triangular, low: 0.9, high: 1.1}; cheme assess lca samples a feed's or product's flow with it instead of the default for its provenance. No calculated value's fingerprint includes it."
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What kind of figure it is, refining the provenance: given measured, vendor or literature; assumed design-rule, estimate or literature; calculated simulated (cheme process simulate) or correlation (cheme process props). Another pairing is cheme.provenance-origin. No calculated value's fingerprint includes it.",
"title": "Origin"
}
},
"required": [
"value",
"provenance"
],
"title": "Quantity",
"type": "object"
},
"RecirculationPump": {
"additionalProperties": false,
"description": "The anolyte recirculation pump: its flow from the flow per cell and the cells.",
"properties": {
"tag": {
"title": "Tag",
"type": "string"
},
"flow_per_area": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Anolyte flow per active area: mL/(min cm2), L/(h m2)."
},
"flow_per_cell": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Anolyte flow per cell: mL/min, L/min, L/h, m3/h."
},
"density": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the anolyte: kg/m3, kg/L."
},
"viscosity": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the anolyte: mPa s."
},
"reservoir_pressure": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "kPa(a), bar(a): over the reservoir (the suction)."
},
"stack_pressure_drop": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "kPa, bar: across a stack (inlet to return)."
}
},
"required": [
"tag"
],
"title": "RecirculationPump",
"type": "object"
},
"SideReaction": {
"additionalProperties": false,
"description": "A reaction of ``process/reactions.yaml`` that takes part of the current (a Faradaic\nloss that forms something, e.g. oxygen at a chlorine anode).",
"properties": {
"reaction": {
"title": "Reaction",
"type": "string"
},
"electrons": {
"description": "Electrons per extent of the reaction.",
"exclusiveMinimum": 0,
"title": "Electrons",
"type": "number"
},
"current_fraction": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the current, 0..1 (or %); a measured cell takes it from the measurement's side product that names this reaction."
}
},
"required": [
"reaction",
"electrons"
],
"title": "SideReaction",
"type": "object"
},
"SkidEquipment": {
"additionalProperties": false,
"description": "The skid equipment whose inputs follow from a duty of ``process/duties.yaml``, run at\nthe sized arrangement.",
"properties": {
"duty": {
"description": "A duty id of process/duties.yaml: the campaign is its horizon.",
"title": "Duty",
"type": "string"
},
"reservoir": {
"anyOf": [
{
"$ref": "#/$defs/SkidTank"
},
{
"type": "null"
}
],
"default": null
},
"recirculation_pump": {
"anyOf": [
{
"$ref": "#/$defs/RecirculationPump"
},
{
"type": "null"
}
],
"default": null
},
"dosing_pump": {
"anyOf": [
{
"$ref": "#/$defs/DosingPump"
},
{
"type": "null"
}
],
"default": null
},
"dosing_tank": {
"anyOf": [
{
"$ref": "#/$defs/DosingTank"
},
{
"type": "null"
}
],
"default": null
},
"bleed_tank": {
"anyOf": [
{
"$ref": "#/$defs/BleedTank"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"duty"
],
"title": "SkidEquipment",
"type": "object"
},
"SkidTank": {
"additionalProperties": false,
"description": "A tank whose working volume follows from the duty (reservoir, dosing or bleed tank).",
"properties": {
"tag": {
"description": "Its tag in the equipment list (a vertical cylinder).",
"title": "Tag",
"type": "string"
},
"margin": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "The freeboard or margin over the working volume, as a fraction (0.2) or %."
},
"aspect_ratio": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Height over diameter of the cylinder (ASSUMED)."
}
},
"required": [
"tag"
],
"title": "SkidTank",
"type": "object"
},
"Stack": {
"additionalProperties": false,
"description": "Stacks of one cell of this file sized for a product duty (``cheme process stack``).",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"cell": {
"description": "A cell id of this file: area, current, FE and voltage.",
"title": "Cell",
"type": "string"
},
"tags": {
"description": "Equipment-list tags of the stacks, one per stack: each gets the envelope.",
"items": {
"type": "string"
},
"title": "Tags",
"type": "array"
},
"product": {
"$ref": "#/$defs/StackProduct"
},
"electrical": {
"$ref": "#/$defs/StackElectrical"
},
"envelope": {
"anyOf": [
{
"$ref": "#/$defs/StackEnvelope"
},
{
"type": "null"
}
],
"default": null
},
"access": {
"anyOf": [
{
"$ref": "#/$defs/StackAccess"
},
{
"type": "null"
}
],
"default": null
},
"replacement": {
"anyOf": [
{
"$ref": "#/$defs/StackReplacement"
},
{
"type": "null"
}
],
"default": null
},
"equipment": {
"anyOf": [
{
"$ref": "#/$defs/SkidEquipment"
},
{
"type": "null"
}
],
"default": null
},
"sources": {
"items": {
"type": "string"
},
"title": "Sources",
"type": "array"
}
},
"required": [
"id",
"cell",
"product",
"electrical"
],
"title": "Stack",
"type": "object"
},
"StackAccess": {
"additionalProperties": false,
"description": "Clearances around each stack for maintenance and stack replacement (ASSUMED until\nthe layout review).",
"properties": {
"end": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "m at each end of the stack axis."
},
"side": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "m along each side."
}
},
"title": "StackAccess",
"type": "object"
},
"StackElectrical": {
"additionalProperties": false,
"description": "The electrical limits the arrangement is chosen within: cells in series in a stack,\nstacks in parallel on the DC bus.",
"properties": {
"max_stack_voltage": {
"$ref": "#/$defs/Quantity",
"description": "V: the DC bus voltage (or the stack's insulation limit); cells per stack = floor(U_max / U_cell)."
},
"max_stack_current": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "A or kA: the current one stack may carry (its cells')."
},
"rectifier_efficiency": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "AC to DC, 0..1: the AC power (optional)."
},
"rectifier_max_current": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "A or kA per rectifier: the number of rectifiers (optional)."
}
},
"required": [
"max_stack_voltage"
],
"title": "StackElectrical",
"type": "object"
},
"StackEnvelope": {
"additionalProperties": false,
"description": "The stack's outline per cell, ASSUMED (with its source) until the vendor's: missing\nvalues leave the stack's dimensions TBD.",
"properties": {
"cell_pitch": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "mm (or m) per cell along the stack axis (bipolar plate, frames, gaskets, membrane)."
},
"end_plates": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "mm (or m): both end plate assemblies (current collectors, insulation, compression) together, along the axis."
},
"frame_margin": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "mm (or m): the frame and manifolds beyond the (square) active area on each side."
}
},
"title": "StackEnvelope",
"type": "object"
},
"StackProduct": {
"additionalProperties": false,
"description": "The product duty of the stacks at the skid boundary.",
"properties": {
"component": {
"description": "The main product: a product of the cell's reaction.",
"title": "Component",
"type": "string"
},
"rate": {
"$ref": "#/$defs/Quantity",
"description": "kg/h, kg/d, t/d, g/h, mol/s or kmol/h."
},
"recovery": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "The share of the product formed that is delivered at the skid boundary (gas conditioning, purification), 0 < r <= 1 (or %), default 1: the stacks are sized for rate / recovery formed."
},
"purity": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Declared, reported only."
},
"pressure": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "Declared, reported only."
}
},
"required": [
"component",
"rate"
],
"title": "StackProduct",
"type": "object"
},
"StackReplacement": {
"additionalProperties": false,
"description": "The membrane and electrode life (ASSUMED until the vendor's warranty).",
"properties": {
"interval": {
"$ref": "#/$defs/Quantity",
"description": "h of operation between cell replacements."
},
"operating_hours": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null,
"description": "h of operation per year: replacements per year."
}
},
"required": [
"interval"
],
"title": "StackReplacement",
"type": "object"
},
"ThermalBoundary": {
"additionalProperties": false,
"properties": {
"kind": {
"default": "isothermal",
"description": "isothermal: the heat duty Q = P - sum(extent dH) is removed (or supplied) at the cell temperature; adiabatic: not supported in v1.",
"enum": [
"isothermal",
"adiabatic"
],
"title": "Kind",
"type": "string"
},
"temperature": {
"$ref": "#/$defs/Quantity",
"description": "The cell's operating temperature (K or \u00b0C)."
}
},
"required": [
"temperature"
],
"title": "ThermalBoundary",
"type": "object"
},
"Uncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a value, relative to it (see :mod:`.uncertainty`).\n\n``lognormal`` with ``gsd2`` (95 % within value / gsd2 .. value x gsd2) or ``pedigree``\nscores (five, 1 to 5: reliability, completeness, temporal, geographical, technological)\non a ``basic`` gsd2; ``normal`` with ``cv``; ``triangular`` or ``uniform`` with ``low`` and\n``high`` multipliers (e.g. 0.8 and 1.2).",
"properties": {
"distribution": {
"default": "lognormal",
"enum": [
"lognormal",
"normal",
"triangular",
"uniform"
],
"title": "Distribution",
"type": "string"
},
"gsd2": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Gsd2"
},
"pedigree": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Pedigree"
},
"basic": {
"default": 1.05,
"description": "Basic gsd2 under the pedigree.",
"minimum": 1,
"title": "Basic",
"type": "number"
},
"cv": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cv"
},
"low": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Low"
},
"high": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "High"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "Uncertainty",
"type": "object"
}
},
"additionalProperties": false,
"description": "The electrochemical cells of the process.",
"properties": {
"schema": {
"description": "Always cheme/electrochemical-cells/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "electrochemical_cells",
"title": "Kind",
"type": "string"
},
"cells": {
"items": {
"$ref": "#/$defs/Cell"
},
"title": "Cells",
"type": "array"
},
"stacks": {
"description": "Stacks sized from a cell for a product duty, and the skid equipment inputs from a duty (cheme process stack); not part of the Faraday balance.",
"items": {
"$ref": "#/$defs/Stack"
},
"title": "Stacks",
"type": "array"
}
},
"required": [
"schema",
"kind"
],
"title": "Cells",
"type": "object"
}
process-duties¶
File: process/duties.yaml. Model: chemeascode.domains.process.electrolysis_duty.Duties.
The dynamic duties of the process's electrochemical cells.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/electrolysis-duties/v1. | |
kind |
electrolysis_duties |
yes | ||
duties |
list of Duty |
JSON Schema: cheme schema process-duties
{
"$defs": {
"Composition": {
"additionalProperties": false,
"description": "The initial anolyte, mol/L of each salt (M, mmol/L, mol/m3).",
"properties": {
"hydroxide": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "The cation hydroxide (KOH)."
},
"carbonate": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "The cation carbonate (K2CO3)."
},
"bicarbonate": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "The bicarbonate (KHCO3)."
},
"co2": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Dissolved CO2."
}
},
"title": "Composition",
"type": "object"
},
"ConstantCurrent": {
"additionalProperties": false,
"properties": {
"kind": {
"const": "constant_current",
"title": "Kind",
"type": "string"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Per cell: A, mA, kA."
},
"current_density": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "A/m2, mA/cm2, kA/m2."
}
},
"required": [
"kind"
],
"title": "ConstantCurrent",
"type": "object"
},
"ContinuousDosing": {
"additionalProperties": false,
"properties": {
"kind": {
"const": "continuous",
"title": "Kind",
"type": "string"
},
"concentration": {
"$ref": "#/$defs/Value",
"description": "Of the hydroxide in the solution: mol/L."
},
"rate": {
"$ref": "#/$defs/Value",
"description": "Of the solution: L/h, L/min, mL/min, L/s."
},
"density": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the solution: kg/L, kg/m3."
}
},
"required": [
"kind",
"concentration",
"rate"
],
"title": "ContinuousDosing",
"type": "object"
},
"Degassing": {
"additionalProperties": false,
"description": "CO2 degassing above saturation: ``k_L a V ([CO2] - H p_CO2)``.",
"properties": {
"kla": {
"$ref": "#/$defs/Value",
"description": "Volumetric mass transfer coefficient: 1/s, 1/min, 1/h."
},
"co2_partial_pressure": {
"$ref": "#/$defs/Value",
"description": "Over the reservoir: atm, bar, kPa, Pa."
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"kla",
"co2_partial_pressure"
],
"title": "Degassing",
"type": "object"
},
"Duty": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"cell": {
"description": "A cell id of process/cells.yaml.",
"title": "Cell",
"type": "string"
},
"stack": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A stack id of process/cells.yaml (stacks:): the duty runs at the arrangement that stack is sized at (cheme process duty, --compare), as the duty a stack's equipment names does; cells_in_series or stacks stated otherwise is an error.",
"title": "Stack"
},
"cells_in_series": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Default: the cell's.",
"title": "Cells In Series"
},
"stacks": {
"default": 1,
"description": "Stacks in parallel feeding the reservoir.",
"minimum": 1,
"title": "Stacks",
"type": "integer"
},
"product": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Default: the measured product; a specified cell names it.",
"title": "Product"
},
"schedule": {
"discriminator": {
"mapping": {
"constant_current": "#/$defs/ConstantCurrent",
"on_off": "#/$defs/OnOff",
"piecewise": "#/$defs/Piecewise",
"power": "#/$defs/PowerSchedule"
},
"propertyName": "kind"
},
"oneOf": [
{
"$ref": "#/$defs/ConstantCurrent"
},
{
"$ref": "#/$defs/Piecewise"
},
{
"$ref": "#/$defs/PowerSchedule"
},
{
"$ref": "#/$defs/OnOff"
}
],
"title": "Schedule"
},
"reservoir": {
"$ref": "#/$defs/Reservoir"
},
"dosing": {
"discriminator": {
"mapping": {
"continuous": "#/$defs/ContinuousDosing",
"none": "#/$defs/NoDosing",
"on_threshold": "#/$defs/ThresholdDosing"
},
"propertyName": "kind"
},
"oneOf": [
{
"$ref": "#/$defs/NoDosing"
},
{
"$ref": "#/$defs/ThresholdDosing"
},
{
"$ref": "#/$defs/ContinuousDosing"
}
],
"title": "Dosing"
},
"bleed": {
"anyOf": [
{
"$ref": "#/$defs/Flow"
},
{
"type": "null"
}
],
"default": null
},
"makeup_water": {
"anyOf": [
{
"$ref": "#/$defs/Flow"
},
{
"type": "null"
}
],
"default": null
},
"threshold": {
"$ref": "#/$defs/Threshold"
},
"horizon": {
"$ref": "#/$defs/Value",
"description": "The longest time integrated: s, min, h, d."
},
"minimum_inventory": {
"anyOf": [
{
"$ref": "#/$defs/MinimumInventory"
},
{
"type": "null"
}
],
"default": null
},
"tolerance": {
"anyOf": [
{
"exclusiveMinimum": 0,
"maximum": 0.001,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative, default 1e-08.",
"title": "Tolerance"
},
"operating_map": {
"anyOf": [
{
"$ref": "#/$defs/OperatingMap"
},
{
"type": "null"
}
],
"default": null
},
"sources": {
"items": {
"type": "string"
},
"title": "Sources",
"type": "array"
}
},
"required": [
"id",
"cell",
"schedule",
"reservoir",
"threshold",
"horizon"
],
"title": "Duty",
"type": "object"
},
"Flow": {
"additionalProperties": false,
"properties": {
"rate": {
"$ref": "#/$defs/Value",
"description": "L/h, L/min, mL/min, L/s."
}
},
"required": [
"rate"
],
"title": "Flow",
"type": "object"
},
"MinimumInventory": {
"additionalProperties": false,
"properties": {
"volume": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "L, mL, m3."
},
"cation": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "mol, mmol, kmol."
}
},
"title": "MinimumInventory",
"type": "object"
},
"NoDosing": {
"additionalProperties": false,
"properties": {
"kind": {
"const": "none",
"title": "Kind",
"type": "string"
}
},
"required": [
"kind"
],
"title": "NoDosing",
"type": "object"
},
"OnOff": {
"additionalProperties": false,
"description": "On for ``duty_fraction`` of every ``period`` at the current given, off (no current)\nfor the rest.",
"properties": {
"kind": {
"const": "on_off",
"title": "Kind",
"type": "string"
},
"period": {
"$ref": "#/$defs/Value",
"description": "s, min, h, d."
},
"duty_fraction": {
"exclusiveMinimum": 0,
"maximum": 1,
"title": "Duty Fraction",
"type": "number"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Per cell when on: A, mA, kA."
},
"current_density": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "When on: A/m2, mA/cm2."
},
"start": {
"default": "on",
"enum": [
"on",
"off"
],
"title": "Start",
"type": "string"
}
},
"required": [
"kind",
"period",
"duty_fraction"
],
"title": "OnOff",
"type": "object"
},
"OperatingMap": {
"additionalProperties": false,
"description": "Axes of the operating map (time to the threshold over WDE and reservoir volume).",
"properties": {
"wde": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Default 0.5-0.995.",
"title": "Wde"
},
"volume": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "In volume_unit; default 0.1 to 10 times the reservoir.",
"title": "Volume"
},
"volume_unit": {
"default": "L",
"enum": [
"L",
"mL",
"m3"
],
"title": "Volume Unit",
"type": "string"
},
"resolution": {
"default": [
16,
10
],
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "integer"
},
{
"type": "integer"
}
],
"title": "Resolution",
"type": "array"
}
},
"title": "OperatingMap",
"type": "object"
},
"Piecewise": {
"additionalProperties": false,
"description": "Current per cell (or current density) at the given times, held to the next point\n(``step``) or linear between them; the last value holds to the horizon.",
"properties": {
"kind": {
"const": "piecewise",
"title": "Kind",
"type": "string"
},
"points": {
"description": "[[t, I], ...]",
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"minItems": 1,
"title": "Points",
"type": "array"
},
"time_unit": {
"default": "h",
"enum": [
"s",
"min",
"h",
"d"
],
"title": "Time Unit",
"type": "string"
},
"unit": {
"default": "A",
"description": "A, mA, kA, or A/m2, mA/cm2, kA/m2.",
"title": "Unit",
"type": "string"
},
"interpolation": {
"default": "step",
"enum": [
"step",
"linear"
],
"title": "Interpolation",
"type": "string"
}
},
"required": [
"kind",
"points"
],
"title": "Piecewise",
"type": "object"
},
"PowerSchedule": {
"additionalProperties": false,
"description": "The DC power of all the duty's cells at the given times (``P = N U(j) j A``), held or\nlinear between them.",
"properties": {
"kind": {
"const": "power",
"title": "Kind",
"type": "string"
},
"points": {
"description": "[[t, P], ...]",
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"minItems": 1,
"title": "Points",
"type": "array"
},
"time_unit": {
"default": "h",
"enum": [
"s",
"min",
"h",
"d"
],
"title": "Time Unit",
"type": "string"
},
"unit": {
"default": "W",
"description": "W, kW, MW.",
"title": "Unit",
"type": "string"
},
"interpolation": {
"default": "step",
"enum": [
"step",
"linear"
],
"title": "Interpolation",
"type": "string"
}
},
"required": [
"kind",
"points"
],
"title": "PowerSchedule",
"type": "object"
},
"Reservoir": {
"additionalProperties": false,
"properties": {
"volume": {
"$ref": "#/$defs/Value",
"description": "L, mL, m3."
},
"composition": {
"$ref": "#/$defs/Composition"
},
"cation": {
"default": "K+",
"description": "The cation of the hydroxide.",
"title": "Cation",
"type": "string"
},
"model": {
"description": "The anolyte model id, e.g. well-mixed-carbonate.",
"title": "Model",
"type": "string"
},
"temperature": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Default: the cell's."
},
"degassing": {
"anyOf": [
{
"$ref": "#/$defs/Degassing"
},
{
"type": "null"
}
],
"default": null
},
"size": {
"anyOf": [
{
"const": "to_horizon",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "to_horizon: report the volume that reaches the horizon (plus time_margin) at the stated pH threshold, V = V0 Q(H) / Q(t_threshold), exact for a duty without dosing, bleed, make-up or degassing at one operating point (cheme process stack --write writes it into volume); refused otherwise (cheme.duty-size).",
"title": "Size"
},
"time_margin": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "With size: to_horizon, how long beyond the horizon the reservoir lasts: a fraction of the horizon (0.1, or unit %) or a time (h, d)."
}
},
"required": [
"volume",
"composition",
"model"
],
"title": "Reservoir",
"type": "object"
},
"Threshold": {
"additionalProperties": false,
"description": "The stated pH threshold: a design criterion (time to a specified pH threshold).",
"properties": {
"ph": {
"title": "Ph",
"type": "number"
},
"source": {
"default": "",
"description": "Why this threshold (the design criterion).",
"title": "Source",
"type": "string"
}
},
"required": [
"ph"
],
"title": "Threshold",
"type": "object"
},
"ThresholdDosing": {
"additionalProperties": false,
"description": "Dose a hydroxide solution at ``rate`` from when the pH falls to ``trigger_ph`` until it\nrises to ``stop_ph``.",
"properties": {
"kind": {
"const": "on_threshold",
"title": "Kind",
"type": "string"
},
"trigger_ph": {
"title": "Trigger Ph",
"type": "number"
},
"stop_ph": {
"title": "Stop Ph",
"type": "number"
},
"concentration": {
"$ref": "#/$defs/Value",
"description": "Of the hydroxide in the solution: mol/L."
},
"rate": {
"$ref": "#/$defs/Value",
"description": "Of the solution: L/h, L/min, mL/min, L/s."
},
"density": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the solution: kg/L, kg/m3."
}
},
"required": [
"kind",
"trigger_ph",
"stop_ph",
"concentration",
"rate"
],
"title": "ThresholdDosing",
"type": "object"
},
"Value": {
"additionalProperties": false,
"description": "A number with its unit and, where it is not the file's, its source.",
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unit"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"value"
],
"title": "Value",
"type": "object"
}
},
"additionalProperties": false,
"description": "The dynamic duties of the process's electrochemical cells.",
"properties": {
"schema": {
"description": "Always cheme/electrolysis-duties/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "electrolysis_duties",
"title": "Kind",
"type": "string"
},
"duties": {
"items": {
"$ref": "#/$defs/Duty"
},
"title": "Duties",
"type": "array"
}
},
"required": [
"schema",
"kind"
],
"title": "Duties",
"type": "object"
}
process-adsorption¶
File: process/adsorption.yaml. Model: chemeascode.domains.process.separations.schema.Adsorption.
process/adsorption.yaml.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/adsorption/v1. | |
kind |
adsorption |
yes | ||
units |
list of AdsorptionUnit |
JSON Schema: cheme schema process-adsorption
{
"$defs": {
"AdsorptionUnit": {
"additionalProperties": false,
"properties": {
"id": {
"description": "The adsorbing step or block of process/flowsheet.yaml.",
"title": "Id",
"type": "string"
},
"technique": {
"enum": [
"tsa",
"psa"
],
"title": "Technique",
"type": "string"
},
"performance": {
"enum": [
"calculated",
"external"
],
"title": "Performance",
"type": "string"
},
"feed_stream": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Default: the node's one material inlet.",
"title": "Feed Stream"
},
"product_outlet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Port of the purified product; default: the first outlet.",
"title": "Product Outlet"
},
"specification": {
"additionalProperties": {
"$ref": "#/$defs/Value"
},
"description": "Highest mole fraction of each impurity in the product: ppm, ppb, % or -.",
"title": "Specification",
"type": "object"
},
"layers": {
"items": {
"$ref": "#/$defs/Layer"
},
"title": "Layers",
"type": "array"
},
"cycle": {
"anyOf": [
{
"$ref": "#/$defs/Cycle"
},
{
"type": "null"
}
],
"default": null
},
"external": {
"anyOf": [
{
"$ref": "#/$defs/External"
},
{
"type": "null"
}
],
"default": null
},
"split_tolerance": {
"default": 0.01,
"description": "Largest absolute difference between a recovery in process/simulation.yaml and the one this basis gives, for the split to count as following from it.",
"minimum": 0,
"title": "Split Tolerance",
"type": "number"
}
},
"required": [
"id",
"technique",
"performance"
],
"title": "AdsorptionUnit",
"type": "object"
},
"Cycle": {
"additionalProperties": false,
"properties": {
"beds": {
"default": 2,
"minimum": 2,
"title": "Beds",
"type": "integer"
},
"diameter": {
"$ref": "#/$defs/Value",
"description": "Bed inside diameter: m or mm."
},
"adsorption_time": {
"$ref": "#/$defs/Value",
"description": "s, min or h."
},
"heating_time": {
"$ref": "#/$defs/Value",
"description": "Hot purge: s, min or h."
},
"cooling_time": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null
},
"switch_time": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Depressurisation and repressurisation together."
},
"regeneration_temperature": {
"$ref": "#/$defs/Value",
"description": "Hot purge at the bed inlet: K or \u00b0C."
},
"regeneration_pressure": {
"$ref": "#/$defs/Value",
"description": "kPa(a), bar(a) or MPa(a)."
},
"purge": {
"$ref": "#/$defs/Purge"
},
"vessel_heat_capacity": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Heat capacity of the vessel wall heated with the bed, per bed: kJ/K."
}
},
"required": [
"diameter",
"adsorption_time",
"heating_time",
"regeneration_temperature",
"regeneration_pressure",
"purge"
],
"title": "Cycle",
"type": "object"
},
"External": {
"additionalProperties": false,
"description": "The results of a performance model core does not run.",
"properties": {
"model": {
"description": "The model or vendor tool, e.g. a published PSA cycle model.",
"title": "Model",
"type": "string"
},
"version": {
"default": "",
"title": "Version",
"type": "string"
},
"source": {
"title": "Source",
"type": "string"
},
"recoveries": {
"additionalProperties": {
"type": "number"
},
"description": "Fraction of each component's feed flow into the product outlet; components not listed are reported as not covered.",
"title": "Recoveries",
"type": "object"
},
"utilities": {
"items": {
"$ref": "#/$defs/Utility"
},
"title": "Utilities",
"type": "array"
},
"operating_range": {
"$ref": "#/$defs/OperatingRange"
}
},
"required": [
"model",
"source",
"recoveries",
"operating_range"
],
"title": "External",
"type": "object"
},
"Isotherm": {
"additionalProperties": false,
"properties": {
"component": {
"title": "Component",
"type": "string"
},
"model": {
"enum": [
"langmuir",
"dual-site-langmuir",
"multi-site-langmuir",
"sips",
"toth"
],
"title": "Model",
"type": "string"
},
"parameters": {
"additionalProperties": {
"type": "number"
},
"description": "See ISOTHERM_PARAMETERS; multi-site-langmuir: a0_j, c0_j, b0_j, E_j (K).",
"title": "Parameters",
"type": "object"
},
"pressure_unit": {
"default": "kPa",
"description": "The unit of the partial pressure in b0 * p.",
"enum": [
"Pa",
"kPa",
"bar"
],
"title": "Pressure Unit",
"type": "string"
},
"heat_of_adsorption": {
"$ref": "#/$defs/Value",
"description": "Isosteric heat, a positive magnitude: kJ/mol or J/mol."
},
"valid": {
"$ref": "#/$defs/Validity"
},
"source": {
"description": "Where the parameters and their range are published.",
"title": "Source",
"type": "string"
}
},
"required": [
"component",
"model",
"parameters",
"heat_of_adsorption",
"valid",
"source"
],
"title": "Isotherm",
"type": "object"
},
"Layer": {
"additionalProperties": false,
"description": "One adsorbent layer of the bed, from the feed end.",
"properties": {
"adsorbent": {
"title": "Adsorbent",
"type": "string"
},
"length": {
"$ref": "#/$defs/Value",
"description": "m or mm."
},
"bulk_density": {
"$ref": "#/$defs/Value",
"description": "kg/m3 of packed bed."
},
"heat_capacity": {
"$ref": "#/$defs/Value",
"description": "Of the adsorbent: kJ/(kg K) or J/(kg K)."
},
"void_fraction": {
"$ref": "#/$defs/Value",
"description": "Gas volume (between and inside the particles) per bed volume: - or %."
},
"isotherms": {
"items": {
"$ref": "#/$defs/Isotherm"
},
"title": "Isotherms",
"type": "array"
},
"removes": {
"description": "The components this layer holds until breakthrough (its key components).",
"items": {
"type": "string"
},
"title": "Removes",
"type": "array"
},
"mass_transfer_zone": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Measured length of the mass transfer zone of the key component (m or mm): the length of unused bed is taken as half of it. Without it the bed is used to its stoichiometric capacity (an optimistic bound, reported as a limitation)."
},
"mixture": {
"default": "extended",
"description": "extended: competitive extended Langmuir or Sips over the components of the layer with an isotherm of that model; independent: single-component isotherms.",
"enum": [
"extended",
"independent"
],
"title": "Mixture",
"type": "string"
},
"life": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Adsorbent life before replacement: a, h or d."
}
},
"required": [
"adsorbent",
"length",
"bulk_density",
"heat_capacity",
"void_fraction"
],
"title": "Layer",
"type": "object"
},
"OperatingRange": {
"additionalProperties": false,
"properties": {
"temperature": {
"description": "Feed temperature, K.",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Temperature",
"type": "array"
},
"pressure": {
"description": "Feed pressure, kPa(a).",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Pressure",
"type": "array"
},
"mole_fractions": {
"additionalProperties": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"description": "Feed mole fraction of each component, lowest, highest.",
"title": "Mole Fractions",
"type": "object"
}
},
"required": [
"temperature",
"pressure"
],
"title": "OperatingRange",
"type": "object"
},
"Purge": {
"additionalProperties": false,
"properties": {
"flow": {
"$ref": "#/$defs/Value",
"description": "During heating: kmol/h or mol/s."
},
"composition": {
"additionalProperties": {
"type": "number"
},
"description": "Mole fractions; others are zero.",
"title": "Composition",
"type": "object"
},
"supply_temperature": {
"$ref": "#/$defs/Value",
"description": "Before the regeneration heater: K or \u00b0C."
},
"heat_capacity": {
"$ref": "#/$defs/Value",
"description": "Molar, of the purge gas: kJ/(kmol K) or J/(mol K)."
}
},
"required": [
"flow",
"composition",
"supply_temperature",
"heat_capacity"
],
"title": "Purge",
"type": "object"
},
"Utility": {
"additionalProperties": false,
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"title": "Unit",
"type": "string"
},
"basis": {
"default": "",
"description": "What it is per, e.g. 'per t of feed'.",
"title": "Basis",
"type": "string"
}
},
"required": [
"name",
"value",
"unit"
],
"title": "Utility",
"type": "object"
},
"Validity": {
"additionalProperties": false,
"description": "Where the isotherm was measured and fitted: core evaluates it nowhere else.",
"properties": {
"temperature": {
"description": "K, lowest and highest.",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Temperature",
"type": "array"
},
"partial_pressure": {
"description": "kPa, the lowest and highest partial pressure of the component measured.",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Partial Pressure",
"type": "array"
}
},
"required": [
"temperature",
"partial_pressure"
],
"title": "Validity",
"type": "object"
},
"Value": {
"additionalProperties": false,
"description": "One input with its unit and where it comes from.",
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"title": "Unit",
"type": "string"
},
"provenance": {
"default": "given",
"enum": [
"given",
"assumed"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"value",
"unit"
],
"title": "Value",
"type": "object"
}
},
"additionalProperties": false,
"description": "``process/adsorption.yaml``.",
"properties": {
"schema": {
"description": "Always cheme/adsorption/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "adsorption",
"title": "Kind",
"type": "string"
},
"units": {
"items": {
"$ref": "#/$defs/AdsorptionUnit"
},
"title": "Units",
"type": "array"
}
},
"required": [
"schema",
"kind"
],
"title": "Adsorption",
"type": "object"
}
reaction-evidence¶
File: process/reaction-evidence.yaml. Model: chemeascode.domains.chemistry.evidence.ReactionEvidence.
The reaction evidence of the process.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/reaction-evidence/v1. | |
kind |
reaction-evidence |
yes | ||
product |
string | yes | The product (component id). | |
question |
string | "" |
Route, phase, scale and operating range the search is for. | |
searches |
list of Search | |||
sources |
list of Source | |||
routes |
list of Route | |||
observations |
list of Observation | |||
conflicts |
list of EvidenceConflict | |||
model_basis |
ModelBasis or null | null |
JSON Schema: cheme schema reaction-evidence
{
"$defs": {
"Conditions": {
"additionalProperties": false,
"properties": {
"temperature": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null
},
"pressure": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null
},
"phase": {
"anyOf": [
{
"enum": [
"gas",
"liquid",
"mixed",
"supercritical"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Phase"
},
"solvent": {
"default": "",
"title": "Solvent",
"type": "string"
},
"catalyst": {
"default": "",
"description": "An id of process/catalysts.yaml.",
"title": "Catalyst",
"type": "string"
},
"catalyst_formulation": {
"default": "",
"description": "As the source describes it.",
"title": "Catalyst Formulation",
"type": "string"
},
"catalyst_loading": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null
},
"feed": {
"additionalProperties": {
"$ref": "#/$defs/Value"
},
"description": "Component id -> amount, ratio or fraction.",
"title": "Feed",
"type": "object"
},
"residence_time": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null
},
"contact_time": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null
},
"space_velocity": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "Conditions",
"type": "object"
},
"Conversion": {
"additionalProperties": false,
"properties": {
"component": {
"description": "The reactant converted (component id).",
"title": "Component",
"type": "string"
},
"value": {
"$ref": "#/$defs/Value"
},
"basis": {
"anyOf": [
{
"enum": [
"per-pass",
"overall",
"equilibrium"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"measurement": {
"default": "",
"description": "How it was measured (GC, titration).",
"title": "Measurement",
"type": "string"
}
},
"required": [
"component",
"value"
],
"title": "Conversion",
"type": "object"
},
"EvidenceConflict": {
"additionalProperties": false,
"description": "Observations that disagree, kept side by side.",
"properties": {
"about": {
"title": "About",
"type": "string"
},
"observations": {
"items": {
"type": "string"
},
"minItems": 2,
"title": "Observations",
"type": "array"
},
"note": {
"default": "",
"title": "Note",
"type": "string"
},
"resolution": {
"default": "",
"description": "How the model basis treats it, if at all.",
"title": "Resolution",
"type": "string"
}
},
"required": [
"about",
"observations"
],
"title": "EvidenceConflict",
"type": "object"
},
"KineticsEvidence": {
"additionalProperties": false,
"description": "A rate law as the source reports it, before it becomes a ``rate:`` of reactions.yaml.",
"properties": {
"equation": {
"description": "As written in the source.",
"title": "Equation",
"type": "string"
},
"rate_basis": {
"default": "",
"description": "Per kg of catalyst, per m3 of liquid, ...",
"title": "Rate Basis",
"type": "string"
},
"parameters": {
"additionalProperties": {
"$ref": "#/$defs/Value"
},
"title": "Parameters",
"type": "object"
},
"temperature_range": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null
},
"pressure_range": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null
},
"fitting": {
"default": "",
"description": "Data, reactor and method of the fit.",
"title": "Fitting",
"type": "string"
}
},
"required": [
"equation"
],
"title": "KineticsEvidence",
"type": "object"
},
"ModelBasis": {
"additionalProperties": false,
"description": "What the engineering model takes from the evidence, and what it assumes beyond it.",
"properties": {
"route": {
"title": "Route",
"type": "string"
},
"reactions": {
"description": "Ids of process/reactions.yaml.",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Reactions",
"type": "array"
},
"catalyst": {
"default": "",
"description": "An id of process/catalysts.yaml.",
"title": "Catalyst",
"type": "string"
},
"evidence": {
"description": "Observation ids.",
"items": {
"type": "string"
},
"title": "Evidence",
"type": "array"
},
"assumptions": {
"description": "Each assumption beyond the evidence, and its check.",
"items": {
"type": "string"
},
"title": "Assumptions",
"type": "array"
},
"validation": {
"default": "",
"description": "How the assumptions will be tested.",
"title": "Validation",
"type": "string"
},
"decision": {
"default": "",
"description": "The DESIGN.md entry, e.g. D-004.",
"title": "Decision",
"type": "string"
},
"decided_by": {
"default": "",
"title": "Decided By",
"type": "string"
},
"date": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Date"
}
},
"required": [
"route",
"reactions"
],
"title": "ModelBasis",
"type": "object"
},
"Observation": {
"additionalProperties": false,
"description": "One experiment or operating example of one source, with its context.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"source": {
"title": "Source",
"type": "string"
},
"route": {
"title": "Route",
"type": "string"
},
"location": {
"default": "",
"description": "Page, table, figure, paragraph or patent example.",
"title": "Location",
"type": "string"
},
"kind": {
"enum": [
"experiment",
"operating-example",
"review-summary",
"kinetics",
"equilibrium"
],
"title": "Kind",
"type": "string"
},
"scale": {
"anyOf": [
{
"enum": [
"lab",
"pilot",
"industrial",
"patent-example",
"computational"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Scale"
},
"equation": {
"default": "",
"title": "Equation",
"type": "string"
},
"conditions": {
"anyOf": [
{
"$ref": "#/$defs/Conditions"
},
{
"type": "null"
}
],
"default": null
},
"conversion": {
"items": {
"$ref": "#/$defs/Conversion"
},
"title": "Conversion",
"type": "array"
},
"selectivity": {
"items": {
"$ref": "#/$defs/Selectivity"
},
"title": "Selectivity",
"type": "array"
},
"yield": {
"items": {
"$ref": "#/$defs/Yield"
},
"title": "Yield",
"type": "array"
},
"outlet": {
"additionalProperties": {
"$ref": "#/$defs/Value"
},
"description": "Component -> outlet or product composition as reported (wt %, mol %).",
"title": "Outlet",
"type": "object"
},
"byproducts": {
"items": {
"type": "string"
},
"title": "Byproducts",
"type": "array"
},
"separation": {
"default": "",
"description": "Separation and recycle context reported.",
"title": "Separation",
"type": "string"
},
"kinetics": {
"anyOf": [
{
"$ref": "#/$defs/KineticsEvidence"
},
{
"type": "null"
}
],
"default": null
},
"missing": {
"description": "What the source does not report (left unfilled).",
"items": {
"type": "string"
},
"title": "Missing",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"source",
"route",
"kind"
],
"title": "Observation",
"type": "object"
},
"Route": {
"additionalProperties": false,
"description": "A candidate route to the product.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"equations": {
"description": "Overall, for readers.",
"items": {
"type": "string"
},
"title": "Equations",
"type": "array"
},
"reactants": {
"description": "Component ids.",
"items": {
"type": "string"
},
"title": "Reactants",
"type": "array"
},
"products": {
"description": "Component ids.",
"items": {
"type": "string"
},
"title": "Products",
"type": "array"
},
"reactions": {
"description": "Ids of process/reactions.yaml, once written.",
"items": {
"type": "string"
},
"title": "Reactions",
"type": "array"
},
"catalysts": {
"description": "Ids of catalysts.yaml.",
"items": {
"type": "string"
},
"title": "Catalysts",
"type": "array"
},
"status": {
"default": "candidate",
"enum": [
"candidate",
"selected",
"rejected"
],
"title": "Status",
"type": "string"
},
"rationale": {
"default": "",
"title": "Rationale",
"type": "string"
},
"gaps": {
"description": "What the evidence leaves open.",
"items": {
"type": "string"
},
"title": "Gaps",
"type": "array"
}
},
"required": [
"id"
],
"title": "Route",
"type": "object"
},
"Search": {
"additionalProperties": false,
"description": "One query run with an agent's search tool.",
"properties": {
"query": {
"title": "Query",
"type": "string"
},
"tool": {
"description": "The tool or service used (web search, patent search, ...).",
"title": "Tool",
"type": "string"
},
"date": {
"format": "date",
"title": "Date",
"type": "string"
},
"status": {
"default": "done",
"description": "unavailable: the tool or the service could not be used.",
"enum": [
"done",
"no-results",
"unavailable"
],
"title": "Status",
"type": "string"
},
"found": {
"description": "Source ids it led to.",
"items": {
"type": "string"
},
"title": "Found",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"query",
"tool",
"date"
],
"title": "Search",
"type": "object"
},
"Selectivity": {
"additionalProperties": false,
"properties": {
"product": {
"title": "Product",
"type": "string"
},
"value": {
"$ref": "#/$defs/Value"
},
"relative_to": {
"default": "",
"description": "The converted reactant (denominator).",
"title": "Relative To",
"type": "string"
},
"basis": {
"anyOf": [
{
"enum": [
"molar",
"carbon",
"mass"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"measurement": {
"default": "",
"title": "Measurement",
"type": "string"
}
},
"required": [
"product",
"value"
],
"title": "Selectivity",
"type": "object"
},
"Source": {
"additionalProperties": false,
"description": "A paper, patent, review, handbook, database entry, report, thesis or web page.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"kind": {
"enum": [
"paper",
"patent",
"review",
"handbook",
"database",
"report",
"thesis",
"web"
],
"title": "Kind",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"authors": {
"default": "",
"title": "Authors",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2100,
"minimum": 1800,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Year"
},
"doi": {
"default": "",
"description": "10.xxxx/..., without doi: or https://doi.org/",
"title": "Doi",
"type": "string"
},
"patent": {
"default": "",
"description": "Publication number with kind code: US7652167B2",
"title": "Patent",
"type": "string"
},
"url": {
"default": "",
"title": "Url",
"type": "string"
},
"accessed": {
"description": "When it was read (ISO date).",
"format": "date",
"title": "Accessed",
"type": "string"
},
"access": {
"description": "What was read: full-text, abstract, snippet (a search result only) or unavailable (paywalled, not found).",
"enum": [
"full-text",
"abstract",
"snippet",
"unavailable"
],
"title": "Access",
"type": "string"
},
"reuse": {
"default": "",
"description": "Licence or reuse conditions (CC BY 4.0; copyrighted: facts and citation only). The file stores citations and extracted facts, not the document.",
"title": "Reuse",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"kind",
"accessed",
"access"
],
"title": "Source",
"type": "object"
},
"Value": {
"additionalProperties": false,
"description": "One number from a source, or a range: ``value`` or ``range`` (min, max), in ``unit``.\n\n``reported``: the source states it at ``location``; ``derived``: computed from reported\nvalues (``derived_from`` says how); ``assumed``: not in the source (``note`` says why).",
"properties": {
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Value"
},
"range": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Range"
},
"unit": {
"description": "As reported; '1' for a dimensionless number or fraction.",
"title": "Unit",
"type": "string"
},
"status": {
"default": "reported",
"enum": [
"reported",
"derived",
"assumed"
],
"title": "Status",
"type": "string"
},
"derived_from": {
"default": "",
"title": "Derived From",
"type": "string"
},
"uncertainty": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Plus or minus, in unit, where the source gives one.",
"title": "Uncertainty"
},
"note": {
"default": "",
"title": "Note",
"type": "string"
}
},
"required": [
"unit"
],
"title": "Value",
"type": "object"
},
"Yield": {
"additionalProperties": false,
"properties": {
"product": {
"title": "Product",
"type": "string"
},
"value": {
"$ref": "#/$defs/Value"
},
"type": {
"anyOf": [
{
"enum": [
"isolated",
"analytical"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Type"
},
"relative_to": {
"default": "",
"description": "The reactant fed (denominator).",
"title": "Relative To",
"type": "string"
},
"basis": {
"anyOf": [
{
"enum": [
"molar",
"carbon",
"mass"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"measurement": {
"default": "",
"title": "Measurement",
"type": "string"
}
},
"required": [
"product",
"value"
],
"title": "Yield",
"type": "object"
}
},
"additionalProperties": false,
"description": "The reaction evidence of the process.",
"properties": {
"schema": {
"description": "Always cheme/reaction-evidence/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "reaction-evidence",
"title": "Kind",
"type": "string"
},
"product": {
"description": "The product (component id).",
"title": "Product",
"type": "string"
},
"question": {
"default": "",
"description": "Route, phase, scale and operating range the search is for.",
"title": "Question",
"type": "string"
},
"searches": {
"items": {
"$ref": "#/$defs/Search"
},
"title": "Searches",
"type": "array"
},
"sources": {
"items": {
"$ref": "#/$defs/Source"
},
"title": "Sources",
"type": "array"
},
"routes": {
"items": {
"$ref": "#/$defs/Route"
},
"title": "Routes",
"type": "array"
},
"observations": {
"items": {
"$ref": "#/$defs/Observation"
},
"title": "Observations",
"type": "array"
},
"conflicts": {
"items": {
"$ref": "#/$defs/EvidenceConflict"
},
"title": "Conflicts",
"type": "array"
},
"model_basis": {
"anyOf": [
{
"$ref": "#/$defs/ModelBasis"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"schema",
"kind",
"product"
],
"title": "ReactionEvidence",
"type": "object"
}
process-extraction¶
File: process/extraction.yaml. Model: chemeascode.domains.process.separations.extraction.ExtractionFile.
Liquid-liquid extractors (process/extraction.yaml): equilibrium stages on NRTL.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
cheme/extraction/v1 |
yes | ||
units |
list of ExtractionUnit | yes |
JSON Schema: cheme schema process-extraction
{
"$defs": {
"CompositionValue": {
"additionalProperties": false,
"properties": {
"basis": {
"enum": [
"mole_fraction",
"mass_fraction"
],
"title": "Basis",
"type": "string"
},
"values": {
"additionalProperties": {
"type": "number"
},
"minProperties": 1,
"title": "Values",
"type": "object"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Calculated compositions: the inputs they were derived from (cheme process propagate); a mismatch is cheme.process-calculated-stale.",
"title": "Fingerprint"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Of every fraction, relative to it (as on a quantity)."
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What kind of figure it is (as on a quantity).",
"title": "Origin"
}
},
"required": [
"basis",
"values",
"provenance"
],
"title": "CompositionValue",
"type": "object"
},
"ExtractionUnit": {
"additionalProperties": false,
"description": "One extractor: feed and solvent feed through countercurrent equilibrium stages.",
"properties": {
"id": {
"pattern": "^[A-Za-z][A-Za-z0-9_\\-]*$",
"title": "Id",
"type": "string"
},
"represents": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The flowsheet step or block this unit evaluates (informative)",
"title": "Represents"
},
"system": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A bundled LLE system's id",
"title": "System"
},
"model": {
"anyOf": [
{
"$ref": "#/$defs/LLESystem"
},
{
"type": "null"
}
],
"default": null,
"description": "An LLE system with its source"
},
"stages": {
"maximum": 30,
"minimum": 1,
"title": "Stages",
"type": "integer"
},
"temperature": {
"$ref": "#/$defs/Quantity"
},
"pressure": {
"anyOf": [
{
"$ref": "#/$defs/Quantity"
},
{
"type": "null"
}
],
"default": null
},
"carrier": {
"description": "The feed's main component, the raffinate's (e.g. water)",
"title": "Carrier",
"type": "string"
},
"solute": {
"title": "Solute",
"type": "string"
},
"solvent": {
"title": "Solvent",
"type": "string"
},
"feed": {
"$ref": "#/$defs/Feed"
},
"solvent_feed": {
"$ref": "#/$defs/Feed"
}
},
"required": [
"id",
"stages",
"temperature",
"carrier",
"solute",
"solvent",
"feed",
"solvent_feed"
],
"title": "ExtractionUnit",
"type": "object"
},
"Feed": {
"additionalProperties": false,
"description": "An inlet: its flow and composition over the LLE system's components.",
"properties": {
"flow": {
"$ref": "#/$defs/Quantity",
"description": "kmol/h, kmol/s, kg/h, kg/s or t/h"
},
"composition": {
"$ref": "#/$defs/CompositionValue"
}
},
"required": [
"flow",
"composition"
],
"title": "Feed",
"type": "object"
},
"LLEComponent": {
"additionalProperties": false,
"description": "A component of an LLE system.",
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"cas": {
"title": "Cas",
"type": "string"
},
"molar_mass": {
"description": "kg/kmol",
"exclusiveMinimum": 0,
"title": "Molar Mass",
"type": "number"
}
},
"required": [
"name",
"cas",
"molar_mass"
],
"title": "LLEComponent",
"type": "object"
},
"LLESystem": {
"additionalProperties": false,
"description": "A set of components with sourced NRTL parameters for their liquid-liquid equilibrium.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"model": {
"const": "NRTL",
"default": "NRTL",
"title": "Model",
"type": "string"
},
"components": {
"items": {
"$ref": "#/$defs/LLEComponent"
},
"minItems": 2,
"title": "Components",
"type": "array"
},
"nrtl": {
"$ref": "#/$defs/NrtlParameters"
},
"temperature_K": {
"description": "Range the parameters were fitted on",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Temperature K",
"type": "array"
},
"source": {
"$ref": "#/$defs/Reference"
},
"qualification": {
"anyOf": [
{
"$ref": "#/$defs/Qualification"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"id",
"components",
"nrtl",
"temperature_K",
"source"
],
"title": "LLESystem",
"type": "object"
},
"NrtlPair": {
"additionalProperties": false,
"description": "``tau_ij = a_ij + b_ij / T + e_ij ln(T/K) + f_ij T`` (``b`` in K, J/mol or cal/mol, the\nlatter two divided by R; ``f`` in 1/K), ``G_ij = exp(-alpha tau_ij)``, alpha symmetric.",
"properties": {
"i": {
"title": "I",
"type": "string"
},
"j": {
"title": "J",
"type": "string"
},
"a_ij": {
"default": 0.0,
"title": "A Ij",
"type": "number"
},
"a_ji": {
"default": 0.0,
"title": "A Ji",
"type": "number"
},
"b_ij": {
"title": "B Ij",
"type": "number"
},
"b_ji": {
"title": "B Ji",
"type": "number"
},
"e_ij": {
"default": 0.0,
"title": "E Ij",
"type": "number"
},
"e_ji": {
"default": 0.0,
"title": "E Ji",
"type": "number"
},
"f_ij": {
"default": 0.0,
"title": "F Ij",
"type": "number"
},
"f_ji": {
"default": 0.0,
"title": "F Ji",
"type": "number"
},
"alpha": {
"exclusiveMinimum": 0,
"maximum": 1,
"title": "Alpha",
"type": "number"
}
},
"required": [
"i",
"j",
"b_ij",
"b_ji",
"alpha"
],
"title": "NrtlPair",
"type": "object"
},
"NrtlParameters": {
"additionalProperties": false,
"description": "The NRTL pairs of an LLE system.",
"properties": {
"unit": {
"description": "Unit of b_ij and b_ji",
"enum": [
"K",
"J/mol",
"cal/mol"
],
"title": "Unit",
"type": "string"
},
"pairs": {
"items": {
"$ref": "#/$defs/NrtlPair"
},
"minItems": 1,
"title": "Pairs",
"type": "array"
}
},
"required": [
"unit",
"pairs"
],
"title": "NrtlParameters",
"type": "object"
},
"Qualification": {
"additionalProperties": false,
"description": "What a core test benchmarks the system against, and the range it holds over.",
"properties": {
"test": {
"title": "Test",
"type": "string"
},
"reference": {
"$ref": "#/$defs/Reference"
},
"carrier": {
"title": "Carrier",
"type": "string"
},
"solute": {
"title": "Solute",
"type": "string"
},
"solvent": {
"title": "Solvent",
"type": "string"
},
"temperature_K": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Temperature K",
"type": "array"
},
"basis": {
"enum": [
"mass_fraction",
"mole_fraction"
],
"title": "Basis",
"type": "string"
},
"solute_min": {
"additionalProperties": {
"type": "number"
},
"propertyNames": {
"enum": [
"raffinate",
"extract"
]
},
"title": "Solute Min",
"type": "object"
},
"solute_max": {
"additionalProperties": {
"type": "number"
},
"propertyNames": {
"enum": [
"raffinate",
"extract"
]
},
"title": "Solute Max",
"type": "object"
},
"tolerances": {
"additionalProperties": {
"type": "number"
},
"title": "Tolerances",
"type": "object"
},
"observed": {
"additionalProperties": {
"type": "number"
},
"title": "Observed",
"type": "object"
},
"notes": {
"items": {
"type": "string"
},
"title": "Notes",
"type": "array"
}
},
"required": [
"test",
"reference",
"carrier",
"solute",
"solvent",
"temperature_K",
"basis",
"solute_max",
"tolerances"
],
"title": "Qualification",
"type": "object"
},
"Quantity": {
"additionalProperties": false,
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unit"
},
"basis": {
"anyOf": [
{
"enum": [
"mass",
"mole",
"normal_volume"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Calculated values: the inputs (T, P, composition, method) they were calculated from; a mismatch is cheme.process-calculated-stale.",
"title": "Fingerprint"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null,
"description": "Relative to the value, e.g. {gsd2: 1.2} or {distribution: triangular, low: 0.9, high: 1.1}; cheme assess lca samples a feed's or product's flow with it instead of the default for its provenance. No calculated value's fingerprint includes it."
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What kind of figure it is, refining the provenance: given measured, vendor or literature; assumed design-rule, estimate or literature; calculated simulated (cheme process simulate) or correlation (cheme process props). Another pairing is cheme.provenance-origin. No calculated value's fingerprint includes it.",
"title": "Origin"
}
},
"required": [
"value",
"provenance"
],
"title": "Quantity",
"type": "object"
},
"Reference": {
"additionalProperties": false,
"description": "A literature source: its citation, DOI or URL, and where in it the values are.",
"properties": {
"citation": {
"title": "Citation",
"type": "string"
},
"doi": {
"default": "",
"title": "Doi",
"type": "string"
},
"url": {
"default": "",
"title": "Url",
"type": "string"
},
"location": {
"default": "",
"description": "Table, page or section of the values",
"title": "Location",
"type": "string"
},
"access": {
"default": "full-text",
"enum": [
"full-text",
"abstract",
"secondary"
],
"title": "Access",
"type": "string"
}
},
"required": [
"citation"
],
"title": "Reference",
"type": "object"
},
"Uncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a value, relative to it (see :mod:`.uncertainty`).\n\n``lognormal`` with ``gsd2`` (95 % within value / gsd2 .. value x gsd2) or ``pedigree``\nscores (five, 1 to 5: reliability, completeness, temporal, geographical, technological)\non a ``basic`` gsd2; ``normal`` with ``cv``; ``triangular`` or ``uniform`` with ``low`` and\n``high`` multipliers (e.g. 0.8 and 1.2).",
"properties": {
"distribution": {
"default": "lognormal",
"enum": [
"lognormal",
"normal",
"triangular",
"uniform"
],
"title": "Distribution",
"type": "string"
},
"gsd2": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Gsd2"
},
"pedigree": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Pedigree"
},
"basic": {
"default": 1.05,
"description": "Basic gsd2 under the pedigree.",
"minimum": 1,
"title": "Basic",
"type": "number"
},
"cv": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cv"
},
"low": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Low"
},
"high": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "High"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "Uncertainty",
"type": "object"
}
},
"additionalProperties": false,
"description": "Liquid-liquid extractors (process/extraction.yaml): equilibrium stages on NRTL.",
"properties": {
"schema": {
"const": "cheme/extraction/v1",
"title": "Schema",
"type": "string"
},
"units": {
"items": {
"$ref": "#/$defs/ExtractionUnit"
},
"minItems": 1,
"title": "Units",
"type": "array"
}
},
"required": [
"schema",
"units"
],
"title": "ExtractionFile",
"type": "object"
}
furnaces¶
File: process/furnaces.yaml. Model: chemeascode.domains.process.furnace.FurnacesFile.
process/furnaces.yaml.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/furnaces/v1. | |
furnaces |
list of Furnace |
JSON Schema: cheme schema furnaces
{
"$defs": {
"Air": {
"additionalProperties": false,
"description": "Combustion air: its excess (``excess``, lambda, actual over stoichiometric O2) or its\nmass flow.",
"properties": {
"excess": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null
},
"mass_flow": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null
},
"temperature": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Default 298.15 K."
}
},
"title": "Air",
"type": "object"
},
"Amount": {
"additionalProperties": false,
"description": "A number with its unit, provenance and source.",
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"title": "Unit",
"type": "string"
},
"provenance": {
"default": "given",
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"value",
"unit"
],
"title": "Amount",
"type": "object"
},
"Composition": {
"additionalProperties": false,
"description": "Fractions by component, with their provenance and source.",
"properties": {
"fractions": {
"additionalProperties": {
"type": "number"
},
"title": "Fractions",
"type": "object"
},
"provenance": {
"default": "given",
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"fractions"
],
"title": "Composition",
"type": "object"
},
"Electric": {
"additionalProperties": false,
"properties": {
"power": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Measured electric power: the closure is checked; absent: solved."
}
},
"title": "Electric",
"type": "object"
},
"Fuel": {
"additionalProperties": false,
"description": "A gaseous fuel by mole fractions (``gas``) or a solid or liquid fuel by its ultimate\nanalysis, as fired (``ultimate``: mass fractions of C, H, O, N, S, ash, moisture).",
"properties": {
"gas": {
"anyOf": [
{
"$ref": "#/$defs/Composition"
},
{
"type": "null"
}
],
"default": null
},
"ultimate": {
"anyOf": [
{
"$ref": "#/$defs/Composition"
},
{
"type": "null"
}
],
"default": null
},
"lhv": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Lower heating value at 298.15 K, kJ/kg or MJ/kg: required for an ultimate analysis; for a gas calculated from the data and compared when given."
},
"mass_flow": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Measured fuel flow: the closure is checked; absent: solved."
},
"temperature": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Default 298.15 K."
}
},
"title": "Fuel",
"type": "object"
},
"Furnace": {
"additionalProperties": false,
"description": "One furnace: a box around solids, gas and heat source.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"name": {
"default": "",
"title": "Name",
"type": "string"
},
"block": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The flowsheet block it represents.",
"title": "Block"
},
"kiln_type": {
"anyOf": [
{
"enum": [
"long-rotary",
"preheater-rotary",
"parallel-flow-regenerative",
"annular-shaft",
"mixed-feed-shaft",
"other"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The kiln type of the lime BREF: its typical heat use.",
"title": "Kiln Type"
},
"reaction": {
"description": "calcination-caco3 (the only one supported).",
"title": "Reaction",
"type": "string"
},
"method": {
"default": "energy-balance",
"enum": [
"energy-balance",
"specific-energy"
],
"title": "Method",
"type": "string"
},
"feed": {
"$ref": "#/$defs/SolidFeed"
},
"conversion": {
"$ref": "#/$defs/Amount",
"description": "Degree of calcination of the CaCO3, '1' or '%'."
},
"product_temperature": {
"$ref": "#/$defs/Amount"
},
"off_gas_temperature": {
"$ref": "#/$defs/Amount"
},
"pressure": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Default 101.325 kPa(a)."
},
"calcining_temperature": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Checks that calcination can proceed there (equilibrium)."
},
"fuel": {
"anyOf": [
{
"$ref": "#/$defs/Fuel"
},
{
"type": "null"
}
],
"default": null
},
"air": {
"anyOf": [
{
"$ref": "#/$defs/Air"
},
{
"type": "null"
}
],
"default": null
},
"electric": {
"anyOf": [
{
"$ref": "#/$defs/Electric"
},
{
"type": "null"
}
],
"default": null
},
"losses": {
"anyOf": [
{
"$ref": "#/$defs/Losses"
},
{
"type": "null"
}
],
"default": null
},
"specific_energy": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "method specific-energy: GJ/t of product, with its source."
},
"tolerance": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null,
"description": "Closure tolerance: kW, MW or % of the heat input (default 1 %)."
}
},
"required": [
"id",
"reaction",
"feed",
"conversion",
"product_temperature",
"off_gas_temperature"
],
"title": "Furnace",
"type": "object"
},
"Losses": {
"additionalProperties": false,
"description": "Heat lost through the walls and openings: ``heat`` (kW, MW) or ``fraction`` of the heat\ninput.",
"properties": {
"heat": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null
},
"fraction": {
"anyOf": [
{
"$ref": "#/$defs/Amount"
},
{
"type": "null"
}
],
"default": null
}
},
"title": "Losses",
"type": "object"
},
"SolidFeed": {
"additionalProperties": false,
"properties": {
"mass_flow": {
"$ref": "#/$defs/Amount",
"description": "kg/h, kg/s, t/h or t/d"
},
"temperature": {
"$ref": "#/$defs/Amount",
"description": "K or \u00b0C"
},
"composition": {
"$ref": "#/$defs/Composition",
"description": "Mass fractions of CaCO3, MgO, SiO2, Al2O3, Fe2O3 and H2O (moisture)."
}
},
"required": [
"mass_flow",
"temperature",
"composition"
],
"title": "SolidFeed",
"type": "object"
}
},
"additionalProperties": false,
"description": "``process/furnaces.yaml``.",
"properties": {
"schema": {
"description": "Always cheme/furnaces/v1.",
"title": "Schema",
"type": "string"
},
"furnaces": {
"items": {
"$ref": "#/$defs/Furnace"
},
"title": "Furnaces",
"type": "array"
}
},
"required": [
"schema"
],
"title": "FurnacesFile",
"type": "object"
}
kinetic-data¶
File: experiments/kinetics/*.yaml. Model: chemeascode.domains.experiments.kinetic_fit.KineticData.
Rates of one reaction, or conversions measured in reactors (integral).
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/kinetic-data/v1. | |
kind |
kinetic-data |
yes | ||
reaction |
string | yes | The reaction id of process/reactions.yaml. | |
catalyst |
string | "" |
||
basis |
catalyst_mass | volume |
yes | ||
points |
list of Point | Measured rates. | ||
key |
string | "" |
The component the integral conversions are of. | |
integral |
list of IntegralPoint | Measured conversions (instead of rates). | ||
catalyst_loading |
number or null | null |
kg/m3 in the reactor: integral data per kg of catalyst | |
provenance |
given | assumed | calculated |
yes | ||
source |
string | "" |
JSON Schema: cheme schema kinetic-data
{
"$defs": {
"IntegralPoint": {
"additionalProperties": false,
"description": "A conversion measured in an isothermal reactor of constant density: a plug-flow or batch\nreactor after a (space) ``time``, or a stirred tank of that space time.",
"properties": {
"reactor": {
"enum": [
"pfr",
"batch",
"cstr"
],
"title": "Reactor",
"type": "string"
},
"temperature": {
"description": "K",
"exclusiveMinimum": 0,
"title": "Temperature",
"type": "number"
},
"time": {
"description": "s: the batch time, or the space time V / Q0",
"exclusiveMinimum": 0,
"title": "Time",
"type": "number"
},
"concentrations": {
"additionalProperties": {
"type": "number"
},
"description": "kmol/m3 of the feed or charge, by component id",
"minProperties": 1,
"title": "Concentrations",
"type": "object"
},
"conversion": {
"description": "of the data set's key component",
"exclusiveMaximum": 1,
"exclusiveMinimum": 0,
"title": "Conversion",
"type": "number"
}
},
"required": [
"reactor",
"temperature",
"time",
"concentrations",
"conversion"
],
"title": "IntegralPoint",
"type": "object"
},
"Point": {
"additionalProperties": false,
"properties": {
"temperature": {
"description": "K",
"exclusiveMinimum": 0,
"title": "Temperature",
"type": "number"
},
"partial_pressures": {
"additionalProperties": {
"type": "number"
},
"description": "bar, by component id",
"minProperties": 1,
"title": "Partial Pressures",
"type": "object"
},
"rate": {
"description": "kmol/(kg s) or kmol/(m3 s), by the data set's basis",
"exclusiveMinimum": 0,
"title": "Rate",
"type": "number"
}
},
"required": [
"temperature",
"partial_pressures",
"rate"
],
"title": "Point",
"type": "object"
}
},
"additionalProperties": false,
"description": "Rates of one reaction, or conversions measured in reactors (``integral``).",
"properties": {
"schema": {
"description": "Always cheme/kinetic-data/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "kinetic-data",
"title": "Kind",
"type": "string"
},
"reaction": {
"description": "The reaction id of process/reactions.yaml.",
"title": "Reaction",
"type": "string"
},
"catalyst": {
"default": "",
"title": "Catalyst",
"type": "string"
},
"basis": {
"enum": [
"catalyst_mass",
"volume"
],
"title": "Basis",
"type": "string"
},
"points": {
"description": "Measured rates.",
"items": {
"$ref": "#/$defs/Point"
},
"title": "Points",
"type": "array"
},
"key": {
"default": "",
"description": "The component the integral conversions are of.",
"title": "Key",
"type": "string"
},
"integral": {
"description": "Measured conversions (instead of rates).",
"items": {
"$ref": "#/$defs/IntegralPoint"
},
"title": "Integral",
"type": "array"
},
"catalyst_loading": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg/m3 in the reactor: integral data per kg of catalyst",
"title": "Catalyst Loading"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"schema",
"kind",
"reaction",
"basis",
"provenance"
],
"title": "KineticData",
"type": "object"
}
electrochemical-measurements¶
File: experiments/electrochemistry/*.yaml. Model: chemeascode.domains.experiments.electrochemistry.ElectrochemicalMeasurements.
A measured series of one electrochemical cell.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/electrochemical-measurements/v1. | |
kind |
electrochemical_measurements |
yes | ||
id |
string | yes | ||
title |
string | "" |
||
provenance |
given | assumed | calculated |
yes | ||
origin |
measured | vendor | literature | design-rule | estimate | simulated | correlation or null |
null |
||
source |
string | "" |
Citation and DOI of the data. | |
licence |
string | "" |
||
cell |
CellSetup | yes | ||
voltage_basis |
cell | cell_ir_corrected | electrode_vs_reference |
yes | cell: at the terminals; cell_ir_corrected: the ohmic loss removed; electrode_vs_reference: one electrode against a reference electrode. | |
products |
list of Product | |||
gas |
Gas or null | null |
||
titration |
TitrationMethod or null | null |
||
points |
list of MeasurementPoint | yes | ||
validity |
Validity or null | null |
JSON Schema: cheme schema electrochemical-measurements
{
"$defs": {
"CellSetup": {
"additionalProperties": false,
"description": "The bench cell all points of the file were measured in.",
"properties": {
"active_area": {
"$ref": "#/$defs/Value",
"description": "Geometric electrode area (cm2, m2)."
},
"temperature": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "K or \u00b0C."
},
"electrolyte": {
"anyOf": [
{
"$ref": "#/$defs/Electrolyte"
},
{
"type": "null"
}
],
"default": null
},
"membrane": {
"anyOf": [
{
"$ref": "#/$defs/Membrane"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"active_area"
],
"title": "CellSetup",
"type": "object"
},
"Electrolyte": {
"additionalProperties": false,
"properties": {
"name": {
"description": "As text, e.g. '1 M KOH'.",
"title": "Name",
"type": "string"
},
"concentration": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "mol/L (M), mmol/L, mol/m3."
}
},
"required": [
"name"
],
"title": "Electrolyte",
"type": "object"
},
"FlowCorrection": {
"additionalProperties": false,
"description": "A factor on the meter's reading (a mass-flow meter calibrated on another gas).",
"properties": {
"factor": {
"exclusiveMinimum": 0,
"title": "Factor",
"type": "number"
},
"source": {
"description": "Where the factor comes from.",
"minLength": 1,
"title": "Source",
"type": "string"
}
},
"required": [
"factor",
"source"
],
"title": "FlowCorrection",
"type": "object"
},
"Gas": {
"additionalProperties": false,
"properties": {
"flow_unit": {
"enum": [
"sccm",
"slpm",
"mol/s"
],
"title": "Flow Unit",
"type": "string"
},
"standard_conditions": {
"anyOf": [
{
"$ref": "#/$defs/StandardConditions"
},
{
"type": "null"
}
],
"default": null,
"description": "Required for sccm and slpm: the meter's reference state (never assumed)."
},
"flow_position": {
"default": "outlet",
"enum": [
"outlet",
"inlet"
],
"title": "Flow Position",
"type": "string"
},
"flow_correction": {
"anyOf": [
{
"$ref": "#/$defs/FlowCorrection"
},
{
"type": "null"
}
],
"default": null
},
"inlet": {
"anyOf": [
{
"$ref": "#/$defs/GasInlet"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"flow_unit"
],
"title": "Gas",
"type": "object"
},
"GasInlet": {
"additionalProperties": false,
"description": "The reactant fed, for the carbon balance.",
"properties": {
"component": {
"description": "The reactant (CO2); its outlet fraction may be measured.",
"title": "Component",
"type": "string"
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Default: the component id.",
"title": "Formula"
},
"flow": {
"description": "In gas.flow_unit.",
"exclusiveMinimum": 0,
"title": "Flow",
"type": "number"
}
},
"required": [
"component",
"flow"
],
"title": "GasInlet",
"type": "object"
},
"MeasurementPoint": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "A, mA."
},
"current_density": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "A/m2, mA/cm2, A/cm2."
},
"duration": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "s, min, h; needed for the WDE."
},
"replicates": {
"items": {
"$ref": "#/$defs/Replicate"
},
"minItems": 1,
"title": "Replicates",
"type": "array"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"id",
"replicates"
],
"title": "MeasurementPoint",
"type": "object"
},
"Membrane": {
"additionalProperties": false,
"properties": {
"kind": {
"enum": [
"bipolar",
"cation_exchange",
"anion_exchange",
"diaphragm",
"none"
],
"title": "Kind",
"type": "string"
},
"bias": {
"anyOf": [
{
"enum": [
"forward",
"reverse"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Of a bipolar membrane: reverse bias dissociates water.",
"title": "Bias"
},
"name": {
"default": "",
"title": "Name",
"type": "string"
}
},
"required": [
"kind"
],
"title": "Membrane",
"type": "object"
},
"Product": {
"additionalProperties": false,
"properties": {
"id": {
"description": "As in the fractions and Faradaic efficiencies (CO, H2, ...).",
"title": "Id",
"type": "string"
},
"electrons": {
"description": "Electrons per molecule of the product formed.",
"exclusiveMinimum": 0,
"title": "Electrons",
"type": "number"
},
"electrode": {
"enum": [
"cathode",
"anode"
],
"title": "Electrode",
"type": "string"
},
"reaction": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The reaction of process/reactions.yaml that forms it.",
"title": "Reaction"
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "For the carbon balance (default: the id, when it reads).",
"title": "Formula"
},
"thermoneutral_voltage": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "V: dH / (n F) of its reaction, for the heat at the boundary."
}
},
"required": [
"id",
"electrons",
"electrode"
],
"title": "Product",
"type": "object"
},
"Replicate": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"voltage": {
"anyOf": [
{
"$ref": "#/$defs/Voltage"
},
{
"type": "null"
}
],
"default": null
},
"outlet_flow": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "In gas.flow_unit.",
"title": "Outlet Flow"
},
"fractions": {
"additionalProperties": {
"$ref": "#/$defs/Value"
},
"description": "Mole fraction of each product (or the reactant) in the gas: ppm, mol%, -.",
"title": "Fractions",
"type": "object"
},
"faradaic_efficiency": {
"additionalProperties": {
"$ref": "#/$defs/Value"
},
"description": "Given directly per product: fraction or %.",
"title": "Faradaic Efficiency",
"type": "object"
},
"titration": {
"anyOf": [
{
"$ref": "#/$defs/TitrationVolumes"
},
{
"type": "null"
}
],
"default": null
},
"water_dissociation_efficiency": {
"anyOf": [
{
"$ref": "#/$defs/Value"
},
{
"type": "null"
}
],
"default": null,
"description": "Given directly (fraction or %), instead of a titration."
},
"source": {
"default": "",
"description": "Locator: the file in the dataset.",
"title": "Source",
"type": "string"
}
},
"required": [
"id"
],
"title": "Replicate",
"type": "object"
},
"StandardConditions": {
"additionalProperties": false,
"properties": {
"temperature": {
"$ref": "#/$defs/Value",
"description": "K or \u00b0C, e.g. 273.15 K."
},
"pressure": {
"$ref": "#/$defs/Value",
"description": "Pa, kPa, bar or atm (absolute), e.g. 101.325 kPa."
}
},
"required": [
"temperature",
"pressure"
],
"title": "StandardConditions",
"type": "object"
},
"TitrationMethod": {
"additionalProperties": false,
"properties": {
"method": {
"const": "warder-double-endpoint",
"title": "Method",
"type": "string"
},
"titrant_concentration": {
"$ref": "#/$defs/Value",
"description": "mol/L of the acid titrant (HCl)."
},
"anolyte_volume": {
"$ref": "#/$defs/Value",
"description": "mL or L of anolyte in the reservoir."
},
"aliquot_volume": {
"$ref": "#/$defs/Value",
"description": "mL or L titrated."
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"method",
"titrant_concentration",
"anolyte_volume",
"aliquot_volume"
],
"title": "TitrationMethod",
"type": "object"
},
"TitrationVolumes": {
"additionalProperties": false,
"description": "Titrant volumes: V0 to the second end point of the fresh anolyte, V1 and V2 to the\nfirst and second end point after the run.",
"properties": {
"V0": {
"minimum": 0,
"title": "V0",
"type": "number"
},
"V1": {
"minimum": 0,
"title": "V1",
"type": "number"
},
"V2": {
"minimum": 0,
"title": "V2",
"type": "number"
},
"unit": {
"default": "mL",
"enum": [
"mL",
"L"
],
"title": "Unit",
"type": "string"
}
},
"required": [
"V0",
"V1",
"V2"
],
"title": "TitrationVolumes",
"type": "object"
},
"Validity": {
"additionalProperties": false,
"description": "Where the measured performance holds; a field left out is derived from the points.",
"properties": {
"current_density": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "A/m2",
"title": "Current Density"
},
"temperature": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "K",
"title": "Temperature"
},
"electrolyte": {
"default": "",
"title": "Electrolyte",
"type": "string"
},
"duration": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "s, the longest run",
"title": "Duration"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "Validity",
"type": "object"
},
"Value": {
"additionalProperties": false,
"description": "A stated or measured number with its unit (and, where it is not the file's, a source).",
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unit"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"value"
],
"title": "Value",
"type": "object"
},
"Voltage": {
"additionalProperties": false,
"description": "A voltage given directly (``value``) or the mean of a series of ``[t s, U]`` samples\nover the ``window`` (s; default: every sample).",
"properties": {
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Value"
},
"series": {
"anyOf": [
{
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Series"
},
"window": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Window"
},
"unit": {
"default": "V",
"title": "Unit",
"type": "string"
}
},
"title": "Voltage",
"type": "object"
}
},
"additionalProperties": false,
"description": "A measured series of one electrochemical cell.",
"properties": {
"schema": {
"description": "Always cheme/electrochemical-measurements/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "electrochemical_measurements",
"title": "Kind",
"type": "string"
},
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"provenance": {
"enum": [
"given",
"assumed",
"calculated"
],
"title": "Provenance",
"type": "string"
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Origin"
},
"source": {
"default": "",
"description": "Citation and DOI of the data.",
"title": "Source",
"type": "string"
},
"licence": {
"default": "",
"title": "Licence",
"type": "string"
},
"cell": {
"$ref": "#/$defs/CellSetup"
},
"voltage_basis": {
"description": "cell: at the terminals; cell_ir_corrected: the ohmic loss removed; electrode_vs_reference: one electrode against a reference electrode.",
"enum": [
"cell",
"cell_ir_corrected",
"electrode_vs_reference"
],
"title": "Voltage Basis",
"type": "string"
},
"products": {
"items": {
"$ref": "#/$defs/Product"
},
"title": "Products",
"type": "array"
},
"gas": {
"anyOf": [
{
"$ref": "#/$defs/Gas"
},
{
"type": "null"
}
],
"default": null
},
"titration": {
"anyOf": [
{
"$ref": "#/$defs/TitrationMethod"
},
{
"type": "null"
}
],
"default": null
},
"points": {
"items": {
"$ref": "#/$defs/MeasurementPoint"
},
"minItems": 1,
"title": "Points",
"type": "array"
},
"validity": {
"anyOf": [
{
"$ref": "#/$defs/Validity"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"schema",
"kind",
"id",
"provenance",
"cell",
"voltage_basis",
"points"
],
"title": "ElectrochemicalMeasurements",
"type": "object"
}
layout_model¶
File: layout/plant-model.yaml (generated). Model: chemeascode.domains.spatial.schemas.LayoutModelFile.
The 3D plant model that cheme layout build derives (layout/plant-model.yaml).
| field | type | required | default | description |
|---|---|---|---|---|
schema |
cheme/layout_model/v1 |
yes | ||
kind |
layout_model |
yes | ||
provenance |
ModelProvenance | yes | ||
units |
m |
"m" |
||
site |
ModelSite or null | null |
||
areas |
list of ModelArea | |||
roads |
list of ModelRoad | |||
racks |
list of ModelRack | |||
buildings |
list of ModelBuilding | |||
equipment |
list of ModelEquipment | |||
pipes |
list of ModelPipe | Pipe routes. | ||
structures |
list of ModelStructure | Steel. | ||
support_steel |
list of ModelSupportSteel | Posts and T-posts under pipes (declared, proposed). | ||
zones |
list of ModelZone | Zones. | ||
platforms |
list of ModelPlatform | |||
inline |
list of ModelInline | In-line items. | ||
step_overs |
list of ModelStepOver | Step-overs proposed over low pipes. | ||
supports |
list of ModelSupport | Pipe shoes and guides on the steel. | ||
penetrations |
list of ModelPenetration | Pipes through walls outside the declared openings. | ||
unrouted |
list of ModelUnrouted | |||
routing |
object | Router summary: counts, methods, rack fill. | ||
tray_tiers |
list of ModelTrayTier or null | null |
Rack tray tiers on steel of their own (with an electrical list). | |
trays |
list of ModelTray or null | null |
Cable trays (with an electrical list). | |
junction_boxes |
list of ModelJunctionBox or null | null |
||
cables |
list of ModelCable or null | null |
The cable schedule. | |
cabling |
object or null | null |
Cabling summary: counts, the tray rules used, cables missing. | |
hvac_units |
list of ModelHvacUnit or null | null |
Air handling units (with layout/hvac.yaml). | |
hvac_rooms |
list of ModelHvacRoom or null | null |
Ventilated rooms with their terminals (with layout/hvac.yaml). | |
ducts |
list of ModelDuct or null | null |
HVAC ducts (with layout/hvac.yaml). | |
hvac |
object or null | null |
HVAC summary: counts, air flows, the limits used, missing. |
JSON Schema: cheme schema layout_model
{
"$defs": {
"Buried": {
"additionalProperties": false,
"description": "A line (or segment) laid in the ground. Its runs whose top lies below grade are buried:\nthe road and escape-route headroom, the clash rules against steel, items, envelopes and\nzones above grade, and the span rules leave them out; the cover over them is checked\ninstead (``cheme.layout-buried-cover``). Its runs above grade (the risers at the users)\nare pipes like any other.",
"properties": {
"cover_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Least soil cover over the pipe's top the design needs, m (grade to the outside of the pipe and its insulation); under a road at least the rules' road_cover_m. Default: road_cover_m under roads, unchecked elsewhere.",
"title": "Cover M"
},
"basis": {
"default": "",
"description": "Why, e.g. a DESIGN.md decision.",
"title": "Basis",
"type": "string"
}
},
"title": "Buried",
"type": "object"
},
"Frame": {
"additionalProperties": false,
"description": "The column grid, as offsets from the building origin along its own x and y.",
"properties": {
"grid_x": {
"items": {
"type": "number"
},
"title": "Grid X",
"type": "array"
},
"grid_y": {
"items": {
"type": "number"
},
"title": "Grid Y",
"type": "array"
}
},
"title": "Frame",
"type": "object"
},
"ModelArea": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"box": {
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Box",
"type": "array"
},
"kind": {
"title": "Kind",
"type": "string"
},
"wall_height": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "A bund's walls, m.",
"title": "Wall Height"
},
"parts": {
"description": "A bund's walls.",
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"box",
"kind"
],
"title": "ModelArea",
"type": "object"
},
"ModelBuilding": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"origin": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Origin",
"type": "array"
},
"width": {
"title": "Width",
"type": "number"
},
"depth": {
"title": "Depth",
"type": "number"
},
"rotation_deg": {
"title": "Rotation Deg",
"type": "number"
},
"footprint": {
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Footprint",
"type": "array"
},
"heights": {
"description": "Bottom and top elevation, m.",
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Heights",
"type": "array"
},
"levels": {
"items": {
"$ref": "#/$defs/ModelLevel"
},
"title": "Levels",
"type": "array"
},
"frame": {
"anyOf": [
{
"$ref": "#/$defs/Frame"
},
{
"type": "null"
}
],
"default": null
},
"walls": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
],
"default": "none",
"title": "Walls"
},
"wall_material": {
"default": "cladding",
"title": "Wall Material",
"type": "string"
},
"openings": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Openings",
"type": "array"
},
"crane": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Crane"
},
"use": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The building spacing table key.",
"title": "Use"
},
"parts": {
"description": "Wall panels, roof, doors, louvres, crane.",
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"origin",
"width",
"depth",
"rotation_deg",
"footprint",
"heights"
],
"title": "ModelBuilding",
"type": "object"
},
"ModelCable": {
"additionalProperties": false,
"description": "A cable of the schedule: from, to, type, the trays it runs in and its length.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"tag": {
"title": "Tag",
"type": "string"
},
"system": {
"enum": [
"power",
"instrument"
],
"title": "System",
"type": "string"
},
"kind": {
"enum": [
"motor",
"feeder",
"field",
"multipair"
],
"title": "Kind",
"type": "string"
},
"from": {
"title": "From",
"type": "string"
},
"to": {
"title": "To",
"type": "string"
},
"from_point": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "From Point",
"type": "array"
},
"to_point": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "To Point",
"type": "array"
},
"size": {
"title": "Size",
"type": "string"
},
"od_mm": {
"title": "Od Mm",
"type": "number"
},
"count": {
"default": 1,
"title": "Count",
"type": "integer"
},
"voltage_v": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Voltage V"
},
"power_kw": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Power Kw"
},
"current_a": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Current A"
},
"pairs": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Pairs"
},
"trays": {
"items": {
"type": "string"
},
"title": "Trays",
"type": "array"
},
"route_length": {
"description": "Along its trays and drops, m.",
"title": "Route Length",
"type": "number"
},
"length": {
"description": "With terminations and slack, m.",
"title": "Length",
"type": "number"
},
"basis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Where size and power come from.",
"title": "Basis"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
}
},
"required": [
"id",
"source",
"tag",
"system",
"kind",
"from",
"to",
"from_point",
"to_point",
"size",
"od_mm",
"route_length",
"length"
],
"title": "ModelCable",
"type": "object"
},
"ModelDuct": {
"additionalProperties": false,
"description": "A rectangular duct run of constant air flow: its centreline, width (across, horizontal)\nand height, the air it carries and its velocity against the limit of its kind.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"system": {
"enum": [
"supply",
"extract",
"outdoor",
"exhaust"
],
"title": "System",
"type": "string"
},
"kind": {
"enum": [
"main",
"header",
"intake",
"exhaust"
],
"title": "Kind",
"type": "string"
},
"unit": {
"title": "Unit",
"type": "string"
},
"room": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The room of its row (mains, headers).",
"title": "Room"
},
"serves": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "The rooms whose air it carries.",
"title": "Serves"
},
"points": {
"items": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Points",
"type": "array"
},
"width": {
"description": "m.",
"title": "Width",
"type": "number"
},
"height": {
"description": "m.",
"title": "Height",
"type": "number"
},
"flow_m3h": {
"title": "Flow M3H",
"type": "number"
},
"velocity_m_s": {
"title": "Velocity M S",
"type": "number"
},
"velocity_max_m_s": {
"title": "Velocity Max M S",
"type": "number"
},
"length": {
"title": "Length",
"type": "number"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How it was routed (astar, ...).",
"title": "Method"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"system",
"kind",
"unit",
"points",
"width",
"height",
"flow_m3h",
"velocity_m_s",
"velocity_max_m_s",
"length"
],
"title": "ModelDuct",
"type": "object"
},
"ModelEnvelope": {
"additionalProperties": false,
"description": "A maintenance or access space to keep free: a box (centre, size in the item's frame,\nrotation_deg about z).",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"kind": {
"enum": [
"bundle_pull",
"motor_removal",
"access"
],
"title": "Kind",
"type": "string"
},
"centre": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Centre",
"type": "array"
},
"size": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Size",
"type": "array"
},
"rotation_deg": {
"title": "Rotation Deg",
"type": "number"
}
},
"required": [
"id",
"source",
"kind",
"centre",
"size",
"rotation_deg"
],
"title": "ModelEnvelope",
"type": "object"
},
"ModelEquipment": {
"additionalProperties": false,
"description": "A placed item with its parts, nozzles and envelopes.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"tag": {
"title": "Tag",
"type": "string"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "DEXPI class from the equipment list.",
"title": "Type"
},
"family": {
"title": "Family",
"type": "string"
},
"shape": {
"enum": [
"box",
"vertical_cylinder",
"horizontal_cylinder",
"sphere"
],
"title": "Shape",
"type": "string"
},
"size_from": {
"enum": [
"list",
"placement",
"default"
],
"title": "Size From",
"type": "string"
},
"dimensions": {
"additionalProperties": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"description": "The sizes used, m.",
"title": "Dimensions",
"type": "object"
},
"position": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Position",
"type": "array"
},
"rotation_deg": {
"title": "Rotation Deg",
"type": "number"
},
"mount": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Mount"
},
"plinth": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Height of the concrete plinth it stands on, m (declared).",
"title": "Plinth"
},
"bbox": {
"description": "[x0, y0, z0, x1, y1, z1] after rotation.",
"maxItems": 6,
"minItems": 6,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Bbox",
"type": "array"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
},
"nozzles": {
"items": {
"$ref": "#/$defs/ModelNozzle"
},
"title": "Nozzles",
"type": "array"
},
"envelopes": {
"items": {
"$ref": "#/$defs/ModelEnvelope"
},
"title": "Envelopes",
"type": "array"
}
},
"required": [
"id",
"source",
"tag",
"family",
"shape",
"size_from",
"dimensions",
"position",
"rotation_deg",
"bbox"
],
"title": "ModelEquipment",
"type": "object"
},
"ModelHvacRoom": {
"additionalProperties": false,
"description": "A ventilated room: its volume, the air changes asked for, the air that is supplied and\nextracted, and its terminals.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"building": {
"title": "Building",
"type": "string"
},
"level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Level"
},
"unit": {
"title": "Unit",
"type": "string"
},
"extent": {
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Extent",
"type": "array"
},
"floor": {
"description": "Floor elevation, m.",
"title": "Floor",
"type": "number"
},
"height": {
"description": "Room height, m.",
"title": "Height",
"type": "number"
},
"volume_m3": {
"title": "Volume M3",
"type": "number"
},
"air_changes_per_h": {
"title": "Air Changes Per H",
"type": "number"
},
"supply_m3h": {
"title": "Supply M3H",
"type": "number"
},
"extract_m3h": {
"title": "Extract M3H",
"type": "number"
},
"basis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"terminals": {
"items": {
"$ref": "#/$defs/ModelTerminal"
},
"title": "Terminals",
"type": "array"
}
},
"required": [
"id",
"source",
"building",
"unit",
"extent",
"floor",
"height",
"volume_m3",
"air_changes_per_h",
"supply_m3h",
"extract_m3h"
],
"title": "ModelHvacRoom",
"type": "object"
},
"ModelHvacUnit": {
"additionalProperties": false,
"description": "An air handling unit: its casing, where it stands, the air it moves and its ports.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"building": {
"title": "Building",
"type": "string"
},
"level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Level"
},
"position": {
"description": "Centre of the unit's base, m.",
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Position",
"type": "array"
},
"size": {
"description": "[length, width, height], m.",
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Size",
"type": "array"
},
"rotation_deg": {
"title": "Rotation Deg",
"type": "number"
},
"capacity_m3h": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Capacity M3H"
},
"supply_m3h": {
"description": "Supply air of the rooms it serves, m3/h.",
"title": "Supply M3H",
"type": "number"
},
"extract_m3h": {
"description": "Extract air of the rooms it serves, m3/h.",
"title": "Extract M3H",
"type": "number"
},
"intake": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The opening outdoor air comes in by.",
"title": "Intake"
},
"exhaust": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The opening extract air leaves by.",
"title": "Exhaust"
},
"ports": {
"additionalProperties": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"description": "outdoor, exhaust, return, supply: top of each port.",
"title": "Ports",
"type": "object"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"building",
"position",
"size",
"rotation_deg",
"supply_m3h",
"extract_m3h"
],
"title": "ModelHvacUnit",
"type": "object"
},
"ModelInline": {
"additionalProperties": false,
"description": "A piping component placed along a pipe.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"kind": {
"title": "Kind",
"type": "string"
},
"dexpi_class": {
"title": "Dexpi Class",
"type": "string"
},
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tag"
},
"point": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Point",
"type": "array"
},
"direction": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Direction",
"type": "array"
},
"line": {
"title": "Line",
"type": "string"
},
"segment": {
"title": "Segment",
"type": "string"
},
"pipe": {
"title": "Pipe",
"type": "string"
},
"operator": {
"anyOf": [
{
"$ref": "#/$defs/ModelOperator"
},
{
"type": "null"
}
],
"default": null
},
"parts": {
"description": "Body, flanges and operator (detail).",
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"kind",
"dexpi_class",
"point",
"direction",
"line",
"segment",
"pipe"
],
"title": "ModelInline",
"type": "object"
},
"ModelJunctionBox": {
"additionalProperties": false,
"description": "A field junction box: the instruments whose cables end there.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"tag": {
"title": "Tag",
"type": "string"
},
"point": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Point",
"type": "array"
},
"area": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Area"
},
"instruments": {
"items": {
"type": "string"
},
"title": "Instruments",
"type": "array"
},
"room": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Room"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"tag",
"point"
],
"title": "ModelJunctionBox",
"type": "object"
},
"ModelLadder": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"base": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Base",
"type": "array"
},
"top": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Top",
"type": "array"
},
"cage": {
"title": "Cage",
"type": "boolean"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
},
"from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "From"
},
"to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "To"
},
"at": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Frame coordinates (a structure's).",
"title": "At"
},
"facing": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Facing"
},
"end": {
"anyOf": [
{
"enum": [
"start",
"end"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A rack ladder's end.",
"title": "End"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Why a ladder was proposed.",
"title": "Reason"
}
},
"required": [
"id",
"source",
"base",
"top",
"cage"
],
"title": "ModelLadder",
"type": "object"
},
"ModelLevel": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"elevation": {
"title": "Elevation",
"type": "number"
},
"height": {
"title": "Height",
"type": "number"
},
"clear_height": {
"title": "Clear Height",
"type": "number"
},
"kind": {
"title": "Kind",
"type": "string"
}
},
"required": [
"id",
"elevation",
"height",
"clear_height",
"kind"
],
"title": "ModelLevel",
"type": "object"
},
"ModelNozzle": {
"additionalProperties": false,
"description": "A nozzle: its point on the surface, outward unit direction and DN.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"name": {
"description": "SubTagName on the P&ID (N1), else its DEXPI id.",
"title": "Name",
"type": "string"
},
"dn": {
"anyOf": [
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Nominal diameter, from DEXPI.",
"title": "Dn"
},
"point": {
"description": "Where the pipe connects: the face of the flange.",
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Point",
"type": "array"
},
"direction": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Direction",
"type": "array"
},
"base": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Where the nozzle's neck leaves the shell (absent: at point).",
"title": "Base"
},
"basis": {
"description": "pid: from the side the P&ID draws it on; default: no drawn position; override: from the placement's nozzles.",
"enum": [
"pid",
"default",
"override"
],
"title": "Basis",
"type": "string"
},
"side": {
"anyOf": [
{
"enum": [
"top",
"bottom",
"left",
"right"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Side of the symbol the P&ID draws it on.",
"title": "Side"
},
"operator": {
"anyOf": [
{
"$ref": "#/$defs/ModelOperator"
},
{
"type": "null"
}
],
"default": null,
"description": "A declared remote mount of the transmitter at it."
}
},
"required": [
"id",
"source",
"name",
"point",
"direction",
"basis"
],
"title": "ModelNozzle",
"type": "object"
},
"ModelOpening": {
"additionalProperties": false,
"properties": {
"side": {
"title": "Side",
"type": "string"
},
"offset": {
"title": "Offset",
"type": "number"
},
"width": {
"title": "Width",
"type": "number"
},
"height": {
"title": "Height",
"type": "number"
},
"sill": {
"title": "Sill",
"type": "number"
},
"kind": {
"default": "opening",
"title": "Kind",
"type": "string"
}
},
"required": [
"side",
"offset",
"width",
"height",
"sill"
],
"title": "ModelOpening",
"type": "object"
},
"ModelOperator": {
"additionalProperties": false,
"description": "A declared operator of a valve or transmitter (``piping/routing.yaml`` operators).",
"properties": {
"kind": {
"title": "Kind",
"type": "string"
},
"use": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Use"
},
"via": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Via"
},
"length_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Length M"
},
"basis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
}
},
"required": [
"kind"
],
"title": "ModelOperator",
"type": "object"
},
"ModelPart": {
"additionalProperties": false,
"description": "A primitive: ``cylinder`` (start, end, radius), ``cone`` (start, end, radius at the\nstart, radius_end), ``cap`` (half an ellipsoid: centre of its base, outward axis, radius,\ndepth), ``box`` (centre, size in the item's frame, rotation_deg about z), ``sphere``\n(centre, radius), ``member`` (a steel section from start to end: profile [b, h], section\nname; the web is vertical for a horizontal member), ``annulus`` (a ring or ring sector:\ncentre of its top face, inner radius, outer radius_end, thickness depth, arc_deg [from, to]\nccw from east; no arc_deg: all round), ``torus`` (centre, axis normal to its plane,\nradius to the tube's centre line, tube; a sector from the unit ref over arc_deg ccw about\nthe axis), ``frustum`` (an upright rectangular one: centre of the bottom face, size [dx,\ndy, height] of the bottom, size_end [dx, dy] of the top, rotation_deg about z). ``lod``:\nabsent at every level of detail, 1 the envelope only (drawn from afar; the solid of the\nclash checks and the router), 2 detail only (drawn close up). Site frame, m.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"kind": {
"enum": [
"cylinder",
"cone",
"cap",
"box",
"sphere",
"member",
"annulus",
"torus",
"frustum"
],
"title": "Kind",
"type": "string"
},
"material": {
"description": "shell, steel, casing, motor, plates, fan, ...",
"title": "Material",
"type": "string"
},
"start": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Start"
},
"end": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "End"
},
"radius": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Radius"
},
"radius_end": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Radius End"
},
"centre": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Centre"
},
"axis": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Axis"
},
"depth": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Depth"
},
"size": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Size"
},
"rotation_deg": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Rotation Deg"
},
"profile": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "[b, h] of a member, m.",
"title": "Profile"
},
"section": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. HEB300 (ASSUMED defaults).",
"title": "Section"
},
"arc_deg": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Arc Deg"
},
"tube": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Tube radius of a torus, m.",
"title": "Tube"
},
"ref": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Where a torus sector starts (unit).",
"title": "Ref"
},
"size_end": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "[dx, dy] of a frustum's top face, m.",
"title": "Size End"
},
"lod": {
"anyOf": [
{
"enum": [
1,
2
],
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "1: envelope only; 2: detail only; absent: both.",
"title": "Lod"
}
},
"required": [
"id",
"source",
"kind",
"material"
],
"title": "ModelPart",
"type": "object"
},
"ModelPenetration": {
"additionalProperties": false,
"description": "Where a pipe passes a building or enclosure wall (or a building's roof) outside its\ndeclared openings, with the opening that would take it (a proposal to declare).",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"owner": {
"description": "The building or structure whose wall it is.",
"title": "Owner",
"type": "string"
},
"wall": {
"description": "The wall panel's (or roof slab's) part id.",
"title": "Wall",
"type": "string"
},
"pipe": {
"title": "Pipe",
"type": "string"
},
"point": {
"description": "Where the pipe's axis meets the wall (mid-plane).",
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Point",
"type": "array"
},
"material": {
"description": "The wall's material (cladding, casing, fire_wall, ...).",
"title": "Material",
"type": "string"
},
"end_inside": {
"description": "The pipe has an end inside the owner (else: passes).",
"title": "End Inside",
"type": "boolean"
},
"length": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "How far the pipe's axis runs in the wall's plane, m.",
"title": "Length"
},
"opening": {
"$ref": "#/$defs/ModelOpening",
"description": "The proposed opening in the owner's frame (on ``side: roof`` in its plan frame: offset and width along its x, sill and height along its y; cannot be pinned)."
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
}
},
"required": [
"id",
"source",
"owner",
"wall",
"pipe",
"point",
"material",
"end_inside",
"opening"
],
"title": "ModelPenetration",
"type": "object"
},
"ModelPipe": {
"additionalProperties": false,
"description": "A routed DEXPI segment: polyline of the pipe's axis, sizes, how it was routed.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"line": {
"title": "Line",
"type": "string"
},
"segment": {
"description": "DEXPI segment id.",
"title": "Segment",
"type": "string"
},
"segment_number": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Segment Number"
},
"dn": {
"title": "Dn",
"type": "number"
},
"od": {
"description": "Outside diameter, m.",
"title": "Od",
"type": "number"
},
"insulation_mm": {
"title": "Insulation Mm",
"type": "number"
},
"class": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Class"
},
"fluid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Fluid"
},
"points": {
"items": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Points",
"type": "array"
},
"length": {
"title": "Length",
"type": "number"
},
"method": {
"description": "astar, astar_coarse, astar_fine, rack, via, open, direct, pinned, ...",
"title": "Method",
"type": "string"
},
"racks": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Racks"
},
"tier": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Tier"
},
"open_ends": {
"anyOf": [
{
"items": {
"enum": [
"start",
"end"
],
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Open Ends"
},
"ends": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ModelPipeEnd"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "What the start and the end connect to (absent in older models).",
"title": "Ends"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Why the router took this way (rack, local, ...).",
"title": "Reason"
},
"jacket": {
"anyOf": [
{
"enum": [
"cold",
"hot",
"personnel"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The cladding of an insulated pipe (a rendering hint).",
"title": "Jacket"
},
"buried": {
"anyOf": [
{
"$ref": "#/$defs/Buried"
},
{
"type": "null"
}
],
"default": null,
"description": "Declared buried in piping/routing.yaml: its runs whose top is below grade are in the ground (absent: above grade)."
}
},
"required": [
"id",
"source",
"line",
"segment",
"dn",
"od",
"insulation_mm",
"points",
"length",
"method"
],
"title": "ModelPipe",
"type": "object"
},
"ModelPipeEnd": {
"additionalProperties": false,
"description": "What a pipe's end connects to, for the connectivity rule.",
"properties": {
"kind": {
"description": "nozzle (ref: its id), junction (a tee, a connector pair or a component two segments share; ref: its key), open (a vent or relief outlet), item (a placed component; ref: its tag), battery_limit, line (on another line; ref: its number).",
"enum": [
"nozzle",
"junction",
"open",
"item",
"battery_limit",
"line"
],
"title": "Kind",
"type": "string"
},
"ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ref"
}
},
"required": [
"kind"
],
"title": "ModelPipeEnd",
"type": "object"
},
"ModelPlatform": {
"additionalProperties": false,
"description": "An access platform around a vertical item, with its ladder.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"tag": {
"title": "Tag",
"type": "string"
},
"kind": {
"enum": [
"circular",
"rectangular"
],
"title": "Kind",
"type": "string"
},
"elevation": {
"description": "Floor, m above grade.",
"title": "Elevation",
"type": "number"
},
"item_elevation": {
"description": "Floor above the item's bottom, m.",
"title": "Item Elevation",
"type": "number"
},
"width": {
"title": "Width",
"type": "number"
},
"arc_deg": {
"anyOf": [
{
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Arc Deg"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"serves": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Nozzles and valves it serves.",
"title": "Serves"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
},
"ladder": {
"$ref": "#/$defs/ModelLadder"
}
},
"required": [
"id",
"source",
"tag",
"kind",
"elevation",
"item_elevation",
"width",
"ladder"
],
"title": "ModelPlatform",
"type": "object"
},
"ModelProvenance": {
"additionalProperties": false,
"description": "What the model was built from and by.",
"properties": {
"generator": {
"title": "Generator",
"type": "string"
},
"generator_version": {
"title": "Generator Version",
"type": "string"
},
"generator_sha256": {
"description": "SHA-256 of the generating modules.",
"title": "Generator Sha256",
"type": "string"
},
"sources": {
"additionalProperties": {
"type": "string"
},
"description": "sha256:<hex> of each input file, by path.",
"title": "Sources",
"type": "object"
},
"output_sha256": {
"description": "SHA-256 of the model's content (canonical JSON).",
"title": "Output Sha256",
"type": "string"
}
},
"required": [
"generator",
"generator_version",
"generator_sha256",
"sources",
"output_sha256"
],
"title": "ModelProvenance",
"type": "object"
},
"ModelRack": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"points": {
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Points",
"type": "array"
},
"width": {
"title": "Width",
"type": "number"
},
"levels": {
"items": {
"type": "number"
},
"title": "Levels",
"type": "array"
},
"parts": {
"description": "Bents: columns, beams.",
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
},
"ladders": {
"description": "Access ladders (declared or proposed).",
"items": {
"$ref": "#/$defs/ModelLadder"
},
"title": "Ladders",
"type": "array"
},
"intermediate_supports": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "The declared steel between the bents (in parts).",
"title": "Intermediate Supports"
},
"bent_spacing_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The rack's own bent spacing as declared (absent: the rule's).",
"title": "Bent Spacing M"
}
},
"required": [
"id",
"source",
"points",
"width"
],
"title": "ModelRack",
"type": "object"
},
"ModelRefs": {
"additionalProperties": false,
"description": "What a model object refers to: a tag, DEXPI id, sheet, input file, lines, segments.",
"properties": {
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tag"
},
"dexpi": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "DEXPI id on the sheet.",
"title": "Dexpi"
},
"sheet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Sheet file, e.g. pid/P-01.xml.",
"title": "Sheet"
},
"file": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Input file that declares it.",
"title": "File"
},
"lines": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Line numbers.",
"title": "Lines"
},
"segments": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "DEXPI segment ids.",
"title": "Segments"
}
},
"title": "ModelRefs",
"type": "object"
},
"ModelRoad": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"points": {
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Points",
"type": "array"
},
"width": {
"title": "Width",
"type": "number"
}
},
"required": [
"id",
"source",
"points",
"width"
],
"title": "ModelRoad",
"type": "object"
},
"ModelSite": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"name": {
"default": "",
"title": "Name",
"type": "string"
},
"width": {
"title": "Width",
"type": "number"
},
"depth": {
"title": "Depth",
"type": "number"
}
},
"required": [
"id",
"source",
"width",
"depth"
],
"title": "ModelSite",
"type": "object"
},
"ModelStair": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"from": {
"title": "From",
"type": "string"
},
"to": {
"title": "To",
"type": "string"
},
"side": {
"title": "Side",
"type": "string"
},
"offset": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"width": {
"title": "Width",
"type": "number"
},
"flights": {
"title": "Flights",
"type": "integer"
},
"out": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Its inner edge out from the side, m (0 at the side).",
"title": "Out"
},
"box": {
"maxItems": 6,
"minItems": 6,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Box",
"type": "array"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Why a stair was proposed.",
"title": "Reason"
}
},
"required": [
"id",
"source",
"from",
"to",
"side",
"width",
"flights",
"box"
],
"title": "ModelStair",
"type": "object"
},
"ModelStepOver": {
"additionalProperties": false,
"description": "A step-over proposed where a low pipe crosses a walkway: flights and a deck over it.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"pipe": {
"description": "The pipe it crosses.",
"title": "Pipe",
"type": "string"
},
"walkway": {
"description": "The escape zone or structure level it is on.",
"title": "Walkway",
"type": "string"
},
"point": {
"description": "The middle of the crossing at the walkway's floor.",
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Point",
"type": "array"
},
"height": {
"description": "Its deck above the floor, m.",
"title": "Height",
"type": "number"
},
"box": {
"maxItems": 6,
"minItems": 6,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Box",
"type": "array"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"pipe",
"walkway",
"point",
"height",
"box"
],
"title": "ModelStepOver",
"type": "object"
},
"ModelStructure": {
"additionalProperties": false,
"description": "A steel frame: members, gratings, handrails (``parts``), stairs, ladders, walls.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"origin": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Origin",
"type": "array"
},
"rotation_deg": {
"title": "Rotation Deg",
"type": "number"
},
"width": {
"title": "Width",
"type": "number"
},
"depth": {
"title": "Depth",
"type": "number"
},
"footprint": {
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Footprint",
"type": "array"
},
"height": {
"title": "Height",
"type": "number"
},
"grid_x": {
"items": {
"type": "number"
},
"title": "Grid X",
"type": "array"
},
"grid_y": {
"items": {
"type": "number"
},
"title": "Grid Y",
"type": "array"
},
"levels": {
"items": {
"$ref": "#/$defs/ModelStructureLevel"
},
"title": "Levels",
"type": "array"
},
"sections": {
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "boolean"
}
]
},
"title": "Sections",
"type": "object"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
},
"stairs": {
"items": {
"$ref": "#/$defs/ModelStair"
},
"title": "Stairs",
"type": "array"
},
"ladders": {
"items": {
"$ref": "#/$defs/ModelLadder"
},
"title": "Ladders",
"type": "array"
},
"walls": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Walls",
"type": "array"
},
"openings": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "The enclosure's declared openings (the walls are cut).",
"title": "Openings"
},
"serves": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "The valves a valve access platform is for.",
"title": "Serves"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Why a structure was proposed.",
"title": "Reason"
}
},
"required": [
"id",
"source",
"origin",
"rotation_deg",
"width",
"depth",
"footprint",
"height",
"grid_x",
"grid_y"
],
"title": "ModelStructure",
"type": "object"
},
"ModelStructureLevel": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"elevation": {
"title": "Elevation",
"type": "number"
},
"kind": {
"title": "Kind",
"type": "string"
},
"extent": {
"anyOf": [
{
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Extent"
},
"use": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "regular or occasional.",
"title": "Use"
},
"source": {
"anyOf": [
{
"enum": [
"generated",
"declared",
"pinned"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "generated: a platform proposed outside a casing.",
"title": "Source"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Why a platform was proposed.",
"title": "Reason"
},
"serves": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The level inside the casing a proposed platform replaces.",
"title": "Serves"
}
},
"required": [
"id",
"elevation",
"kind"
],
"title": "ModelStructureLevel",
"type": "object"
},
"ModelSupport": {
"additionalProperties": false,
"description": "A pipe shoe or guide where a pipe rests on a steel member.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"kind": {
"enum": [
"shoe",
"guide"
],
"title": "Kind",
"type": "string"
},
"pipe": {
"title": "Pipe",
"type": "string"
},
"on": {
"description": "The steel member's part id.",
"title": "On",
"type": "string"
},
"point": {
"description": "On the member's top, under the pipe's axis.",
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Point",
"type": "array"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"kind",
"pipe",
"on",
"point"
],
"title": "ModelSupport",
"type": "object"
},
"ModelSupportSteel": {
"additionalProperties": false,
"description": "Support steel under a pipe: declared in ``layout/structures.yaml`` (``pipe_supports``)\nor proposed where a level run spans farther than its table allows (``source: generated``,\n``review_needed``; ``cheme layout pin <id>`` declares it).",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"kind": {
"enum": [
"t_post",
"post",
"stub"
],
"title": "Kind",
"type": "string"
},
"at": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"title": "At",
"type": "array"
},
"top": {
"description": "Top of steel, m.",
"title": "Top",
"type": "number"
},
"base": {
"description": "Its foot, m (0: grade).",
"title": "Base",
"type": "number"
},
"width": {
"title": "Width",
"type": "number"
},
"rotation_deg": {
"title": "Rotation Deg",
"type": "number"
},
"serves": {
"description": "Pipe ids it carries.",
"items": {
"type": "string"
},
"title": "Serves",
"type": "array"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"kind",
"at",
"top",
"base",
"width",
"rotation_deg"
],
"title": "ModelSupportSteel",
"type": "object"
},
"ModelTerminal": {
"additionalProperties": false,
"description": "A supply or extract terminal (grille, diffuser) on a header duct.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"system": {
"enum": [
"supply",
"extract"
],
"title": "System",
"type": "string"
},
"point": {
"description": "On the header's centreline, m.",
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"title": "Point",
"type": "array"
},
"flow_m3h": {
"title": "Flow M3H",
"type": "number"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"system",
"point",
"flow_m3h",
"source"
],
"title": "ModelTerminal",
"type": "object"
},
"ModelTray": {
"additionalProperties": false,
"description": "A cable tray run: its centreline (bottom of the tray), width and depth, the cables in\nit and how full it is.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"system": {
"enum": [
"power",
"instrument"
],
"title": "System",
"type": "string"
},
"kind": {
"enum": [
"trunk",
"room",
"branch",
"link"
],
"title": "Kind",
"type": "string"
},
"points": {
"items": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"title": "Points",
"type": "array"
},
"drop_to": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "A branch ending at its motor's cable_entry beside the item: the terminal box its cable drops to from the tray's last point (that drop is cable, not tray).",
"title": "Drop To"
},
"width": {
"description": "m.",
"title": "Width",
"type": "number"
},
"depth": {
"description": "m.",
"title": "Depth",
"type": "number"
},
"length": {
"title": "Length",
"type": "number"
},
"cables": {
"items": {
"type": "string"
},
"title": "Cables",
"type": "array"
},
"fill": {
"description": "Cable cross-section over the tray's, fraction.",
"title": "Fill",
"type": "number"
},
"fill_max": {
"title": "Fill Max",
"type": "number"
},
"rack": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rack"
},
"voltage": {
"anyOf": [
{
"enum": [
"lv",
"hv"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The voltage class of a power tray of a rack with power_trays (none: any).",
"title": "Voltage"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How a leg was routed (astar, ...).",
"title": "Method"
},
"review_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Review Needed"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"system",
"kind",
"points",
"width",
"depth",
"length",
"fill",
"fill_max"
],
"title": "ModelTray",
"type": "object"
},
"ModelTrayTier": {
"additionalProperties": false,
"description": "A rack's tray tier above its pipe tiers: the steel that carries the trays.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"rack": {
"title": "Rack",
"type": "string"
},
"elevation": {
"title": "Elevation",
"type": "number"
},
"parts": {
"items": {
"$ref": "#/$defs/ModelPart"
},
"title": "Parts",
"type": "array"
}
},
"required": [
"id",
"source",
"rack",
"elevation"
],
"title": "ModelTrayTier",
"type": "object"
},
"ModelUnrouted": {
"additionalProperties": false,
"properties": {
"line": {
"title": "Line",
"type": "string"
},
"segment": {
"title": "Segment",
"type": "string"
},
"segment_number": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Segment Number"
},
"sheet": {
"title": "Sheet",
"type": "string"
},
"reason": {
"title": "Reason",
"type": "string"
}
},
"required": [
"line",
"segment",
"sheet",
"reason"
],
"title": "ModelUnrouted",
"type": "object"
},
"ModelZone": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"refs": {
"$ref": "#/$defs/ModelRefs"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"kind": {
"title": "Kind",
"type": "string"
},
"zone": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Zone"
},
"volumes": {
"items": {
"$ref": "#/$defs/ModelZoneVolume"
},
"title": "Volumes",
"type": "array"
},
"basis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
}
},
"required": [
"id",
"source",
"kind"
],
"title": "ModelZone",
"type": "object"
},
"ModelZoneVolume": {
"additionalProperties": false,
"properties": {
"shape": {
"enum": [
"box",
"cylinder",
"sphere"
],
"title": "Shape",
"type": "string"
},
"source": {
"enum": [
"generated",
"declared",
"pinned"
],
"title": "Source",
"type": "string"
},
"box": {
"anyOf": [
{
"maxItems": 6,
"minItems": 6,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Box"
},
"centre": {
"anyOf": [
{
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Centre"
},
"radius": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Radius"
},
"height": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Height"
},
"zone": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Zone"
},
"item": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Item"
},
"source_kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source Kind"
},
"release_grade": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Release Grade"
},
"substance_class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Substance Class"
},
"basis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
}
},
"required": [
"shape",
"source"
],
"title": "ModelZoneVolume",
"type": "object"
}
},
"additionalProperties": false,
"description": "The 3D plant model that cheme layout build derives (layout/plant-model.yaml).",
"properties": {
"schema": {
"const": "cheme/layout_model/v1",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "layout_model",
"title": "Kind",
"type": "string"
},
"provenance": {
"$ref": "#/$defs/ModelProvenance"
},
"units": {
"const": "m",
"default": "m",
"title": "Units",
"type": "string"
},
"site": {
"anyOf": [
{
"$ref": "#/$defs/ModelSite"
},
{
"type": "null"
}
],
"default": null
},
"areas": {
"items": {
"$ref": "#/$defs/ModelArea"
},
"title": "Areas",
"type": "array"
},
"roads": {
"items": {
"$ref": "#/$defs/ModelRoad"
},
"title": "Roads",
"type": "array"
},
"racks": {
"items": {
"$ref": "#/$defs/ModelRack"
},
"title": "Racks",
"type": "array"
},
"buildings": {
"items": {
"$ref": "#/$defs/ModelBuilding"
},
"title": "Buildings",
"type": "array"
},
"equipment": {
"items": {
"$ref": "#/$defs/ModelEquipment"
},
"title": "Equipment",
"type": "array"
},
"pipes": {
"description": "Pipe routes.",
"items": {
"$ref": "#/$defs/ModelPipe"
},
"title": "Pipes",
"type": "array"
},
"structures": {
"description": "Steel.",
"items": {
"$ref": "#/$defs/ModelStructure"
},
"title": "Structures",
"type": "array"
},
"support_steel": {
"description": "Posts and T-posts under pipes (declared, proposed).",
"items": {
"$ref": "#/$defs/ModelSupportSteel"
},
"title": "Support Steel",
"type": "array"
},
"zones": {
"description": "Zones.",
"items": {
"$ref": "#/$defs/ModelZone"
},
"title": "Zones",
"type": "array"
},
"platforms": {
"items": {
"$ref": "#/$defs/ModelPlatform"
},
"title": "Platforms",
"type": "array"
},
"inline": {
"description": "In-line items.",
"items": {
"$ref": "#/$defs/ModelInline"
},
"title": "Inline",
"type": "array"
},
"step_overs": {
"description": "Step-overs proposed over low pipes.",
"items": {
"$ref": "#/$defs/ModelStepOver"
},
"title": "Step Overs",
"type": "array"
},
"supports": {
"description": "Pipe shoes and guides on the steel.",
"items": {
"$ref": "#/$defs/ModelSupport"
},
"title": "Supports",
"type": "array"
},
"penetrations": {
"description": "Pipes through walls outside the declared openings.",
"items": {
"$ref": "#/$defs/ModelPenetration"
},
"title": "Penetrations",
"type": "array"
},
"unrouted": {
"items": {
"$ref": "#/$defs/ModelUnrouted"
},
"title": "Unrouted",
"type": "array"
},
"routing": {
"additionalProperties": true,
"description": "Router summary: counts, methods, rack fill.",
"title": "Routing",
"type": "object"
},
"tray_tiers": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ModelTrayTier"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Rack tray tiers on steel of their own (with an electrical list).",
"title": "Tray Tiers"
},
"trays": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ModelTray"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Cable trays (with an electrical list).",
"title": "Trays"
},
"junction_boxes": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ModelJunctionBox"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Junction Boxes"
},
"cables": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ModelCable"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "The cable schedule.",
"title": "Cables"
},
"cabling": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Cabling summary: counts, the tray rules used, cables missing.",
"title": "Cabling"
},
"hvac_units": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ModelHvacUnit"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Air handling units (with layout/hvac.yaml).",
"title": "Hvac Units"
},
"hvac_rooms": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ModelHvacRoom"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Ventilated rooms with their terminals (with layout/hvac.yaml).",
"title": "Hvac Rooms"
},
"ducts": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ModelDuct"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "HVAC ducts (with layout/hvac.yaml).",
"title": "Ducts"
},
"hvac": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "HVAC summary: counts, air flows, the limits used, missing.",
"title": "Hvac"
}
},
"required": [
"schema",
"kind",
"provenance"
],
"title": "LayoutModelFile",
"type": "object"
}
lci_dataset¶
File: lca/dataset.yaml (generated), lca/datasets/*.yaml. Model: chemeascode.domains.assessment.lca.schemas.LciDataset.
An unallocated life cycle inventory dataset (kind: lci_dataset): a reusable process.
Derived from a plant (cheme assess lca --write writes lca/dataset.yaml) or written by hand, and referenced by other studies as a background (dataset:). It keeps every product unallocated; allocation is the study's choice (allocation: the dataset's default).
schema: cheme/lci_dataset/v2. A v1 dataset (schema: cheme/lca/v1) loads with the defaults of every field v2 added; :func:.documentation.findings names what it lacks.
| field | type | required | default | description |
|---|---|---|---|---|
uuid |
string or null | null |
Stable across versions. | |
version |
string or null | null |
major.minor.patch. | |
parent |
string or null | null |
The uuid of the dataset this one is a (regional) variant of. | |
methodology_version |
string or null | null |
The version of the library methodology the dataset was built under. | |
superseded_by |
SupersededBy or null | null |
||
geography |
DatasetGeography or null | null |
||
time |
DatasetTime or null | null |
||
valid_until |
integer or null | null |
Last year of use (ILCD dataValidUntil). | |
system_model |
cutoff | apos | substitution | consequential or null |
null |
||
technology_level |
undefined | new | modern | current | old | outdated or null |
null |
||
system_boundary |
SystemBoundary or null | null |
||
production_volume |
ProductionVolume or null | null |
||
classification |
Classification or null | null |
||
modelling |
Modelling or null | null |
||
review |
list of Review | Review records; [] or 'unreviewed' when none was made (unreviewed is stated with type: none). | ||
parameters |
list of Parameter | |||
data_generator |
string | "" |
Who modelled the data (person or organisation). | |
entry_by |
string | "" |
Who entered the dataset. | |
schema |
string | yes | cheme/lci_dataset/v2 (cheme/lca/v1: a v1 dataset, read with defaults). | |
kind |
lci_dataset |
yes | ||
id |
string | yes | ||
title |
string | "" |
||
description |
string | "" |
||
scope |
foreground | linked |
"foreground" |
||
basis |
string | "1 h of operation" |
What the amounts are per. | |
location |
string | "" |
||
year |
integer or null | null |
||
boundary |
string | "" |
What the process includes, e.g. gate-to-gate, the ASU plant. | |
technology |
string | "" |
The technology it represents. | |
rights |
string | "" |
The terms of its own data, e.g. CC-BY-4.0 (independently generated); exchanges from external sources keep theirs (source_id). | |
sources |
list of Source | Registry of the externally supplied amounts. | ||
exchanges |
list of DatasetExchange | yes | ||
cutoff |
list of CutoffFlow | Flows left out by the cut-off criteria, with amount and reason. | ||
allocation |
Allocation or null | null |
The default allocation when a study names none. | |
provenance |
DatasetProvenance | |||
generation |
Generation or null | null |
How it was generated (tier, method, defaults used): set by cheme assess lci-estimate; none for a dataset from a flowsheet or written by hand. |
JSON Schema: cheme schema lci_dataset
{
"$defs": {
"Activity": {
"additionalProperties": false,
"description": "A process of a Brightway database (e.g. an ecoinvent market activity), found by name and,\nwhere the name alone is ambiguous, its reference product and location.",
"properties": {
"database": {
"description": "e.g. ecoinvent-3.10-cutoff",
"minLength": 1,
"title": "Database",
"type": "string"
},
"name": {
"description": "e.g. market for electricity, medium voltage",
"minLength": 1,
"title": "Name",
"type": "string"
},
"reference_product": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reference Product"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. DE, RER, GLO",
"title": "Location"
}
},
"required": [
"database",
"name"
],
"title": "Activity",
"type": "object"
},
"Allocation": {
"additionalProperties": false,
"description": "How the burdens of a multi-product process are shared between its products.\n\nThe inventory itself stays unallocated (an LCI dataset); allocation is a choice of the study:\n\n- ``mass``, ``economic`` (mass x price), ``energy`` (mass x energy content), ``exergy``\n (each product's exergy flow), ``shares`` (given fractions): the burdens in proportion;\n- ``substitution`` (system expansion): the functional unit's product carries everything, and\n every other co-product is credited with the production it avoids (``substitution``: its\n background, e.g. the market for liquid nitrogen);\n- ``none``: the functional unit's product carries everything (a single-product process, or\n a deliberately conservative view).\n\nEvery method whose data is complete is also computed for comparison (``compare``). Products\nof the flowsheet not listed in ``coproducts`` are not products: map them (``emission``,\n``free``, or a background for their treatment).",
"properties": {
"method": {
"default": "mass",
"enum": [
"mass",
"economic",
"energy",
"exergy",
"shares",
"substitution",
"none"
],
"title": "Method",
"type": "string"
},
"coproducts": {
"description": "Product ids that share the burdens; the functional unit's product is always one of them (added when missing).",
"items": {
"type": "string"
},
"title": "Coproducts",
"type": "array"
},
"prices": {
"additionalProperties": {
"type": "number"
},
"description": "method=economic: price per kg of each co-product and of the functional unit's product, any one currency (or properties.<product>.price).",
"title": "Prices",
"type": "object"
},
"properties": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/ProductProperties"
},
"description": "Per product: price, energy or exergy per kg (overrides what the flowsheet gives).",
"title": "Properties"
},
"shares": {
"additionalProperties": {
"type": "number"
},
"description": "method=shares: each co-product's fraction (sum 1).",
"title": "Shares",
"type": "object"
},
"substitution": {
"additionalProperties": {
"$ref": "#/$defs/Background"
},
"description": "method=substitution: the avoided production of each co-product other than the functional unit's.",
"title": "Substitution",
"type": "object"
},
"compare": {
"anyOf": [
{
"items": {
"enum": [
"mass",
"economic",
"energy",
"exergy",
"shares",
"substitution",
"none"
],
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Methods to compare with (default: every method whose data is complete).",
"title": "Compare"
},
"source": {
"default": "",
"description": "Why this method, e.g. DESIGN.md D-040.",
"title": "Source",
"type": "string"
},
"deviation": {
"default": "",
"description": "Why the method departs from the library's multi-functionality hierarchy (e.g. a sector PCR), when it does.",
"title": "Deviation",
"type": "string"
}
},
"title": "Allocation",
"type": "object"
},
"Background": {
"additionalProperties": false,
"description": "Where a flow's burdens come from. ``factor`` serves the factors backend, ``activity`` or\n``biosphere`` the Brightway backend; a mapping may give both kinds, so either backend can\nrun. ``dataset`` (another LCI dataset) serves both and excludes the others. ``free`` and\n``emission`` exclude the rest.",
"properties": {
"factor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id of a factor in lca/factors.yaml.",
"title": "Factor"
},
"activity": {
"anyOf": [
{
"$ref": "#/$defs/Activity"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"biosphere": {
"anyOf": [
{
"$ref": "#/$defs/BiosphereFlow"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"dataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetRef"
},
{
"type": "null"
}
],
"default": null,
"description": "An LCI dataset of this or another study (the Atlas)."
},
"elementary": {
"anyOf": [
{
"$ref": "#/$defs/Elementary"
},
{
"type": "null"
}
],
"default": null,
"description": "emission:<component> only: characterised by its CAS number (a category's elementary method, or brightway.biosphere)."
},
"source": {
"description": "Why this mapping.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"proxy": {
"default": "",
"description": "The background stands in for a related flow (another material, geography or technology): why, and where that holds. The results mark it PROXY.",
"title": "Proxy",
"type": "string"
},
"missing": {
"default": "",
"description": "No background is available (yet): why. The exchange stays in the inventory with its quantity and is a gap in every category, never 0.",
"title": "Missing",
"type": "string"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
}
},
"required": [
"source"
],
"title": "Background",
"type": "object"
},
"BiosphereFlow": {
"additionalProperties": false,
"description": "An elementary flow of a Brightway biosphere database, characterised directly by the\nmethod (an emission of the plant itself).",
"properties": {
"database": {
"description": "e.g. ecoinvent-3.10-biosphere",
"minLength": 1,
"title": "Database",
"type": "string"
},
"name": {
"description": "e.g. Carbon dioxide, fossil",
"minLength": 1,
"title": "Name",
"type": "string"
},
"categories": {
"description": "Compartments, e.g. [air] or [air, urban air close to ground].",
"items": {
"type": "string"
},
"title": "Categories",
"type": "array"
}
},
"required": [
"database",
"name"
],
"title": "BiosphereFlow",
"type": "object"
},
"CarbonContent": {
"additionalProperties": false,
"description": "The carbon an exchange carries, per kg of it: ``total`` (kg C/kg) and the\n``biogenic_fraction`` of that carbon (non-fossil: biogenic or atmospheric). Unset: derived\n(the composition's formulas, the traced carbon of the inputs; :mod:`.carbon`).",
"properties": {
"total": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "kg of carbon per kg, e.g. 0.3748 for methanol.",
"title": "Total"
},
"biogenic_fraction": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Share of the carbon that is biogenic (or atmospheric, from direct air capture); the rest is fossil. An input without it counts as fossil.",
"title": "Biogenic Fraction"
},
"source": {
"default": "",
"description": "Where the numbers come from.",
"title": "Source",
"type": "string"
}
},
"title": "CarbonContent",
"type": "object"
},
"Carrier": {
"additionalProperties": false,
"description": "The energy carrier of an exchange and its quality: the temperature of heat or cold, the\npressure (and level) of steam, the lower heating value of a fuel.",
"properties": {
"kind": {
"enum": [
"electricity",
"heat",
"steam",
"fuel",
"cold"
],
"title": "Kind",
"type": "string"
},
"temperature": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "\u00b0C: heat or steam supplied, cold delivered.",
"title": "Temperature"
},
"pressure": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "bar(a): steam.",
"title": "Pressure"
},
"level": {
"default": "",
"description": "e.g. LP, MP, HP steam; a named heat or cooling level.",
"title": "Level",
"type": "string"
},
"lhv": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "MJ/kg: a fuel.",
"title": "Lhv"
},
"composition": {
"default": "",
"description": "A fuel's stated composition.",
"title": "Composition",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"kind"
],
"title": "Carrier",
"type": "object"
},
"Classification": {
"additionalProperties": false,
"description": "ISIC Rev.4 (the activity) and CPC Ver. 2.1 (the reference product), as ecoinvent and the\nUN statistics classify them.",
"properties": {
"isic": {
"default": "",
"description": "e.g. 2011.",
"pattern": "^(\\d{2,4})?$",
"title": "Isic",
"type": "string"
},
"cpc": {
"default": "",
"description": "A CPC 2.1 code.",
"pattern": "^(\\d{1,5})?$",
"title": "Cpc",
"type": "string"
}
},
"title": "Classification",
"type": "object"
},
"Composition": {
"additionalProperties": false,
"description": "What a material exchange is made of, by mass: the input of the dataset's mass and\nelement balances (:mod:`.balance`). Either ``fractions`` (component ->\nmass fraction; a component is read as a molecular formula unless ``formulas`` gives its\nformula) or ``elements`` (element symbol -> mass fraction, e.g. a fuel's ultimate\nanalysis). Filled from the stream table for a flowsheet-derived dataset; a composition\nwhose fractions sum below 1 is incomplete, and the element balance then names it.",
"properties": {
"fractions": {
"additionalProperties": {
"type": "number"
},
"description": "Component -> mass fraction, e.g. {CO2: 1.0}.",
"title": "Fractions",
"type": "object"
},
"formulas": {
"additionalProperties": {
"type": "string"
},
"description": "Component -> molecular formula, where the component's name is no formula (e.g. {MEOH: CH4O}).",
"title": "Formulas",
"type": "object"
},
"elements": {
"additionalProperties": {
"type": "number"
},
"description": "Element symbol -> mass fraction (ultimate analysis); `ash` is the mass of the residue, counted in the mass balance and in no element.",
"title": "Elements",
"type": "object"
},
"source": {
"default": "",
"description": "Where it comes from, e.g. stream S3.",
"title": "Source",
"type": "string"
}
},
"title": "Composition",
"type": "object"
},
"CutoffFlow": {
"additionalProperties": false,
"description": "A flow left out by the cut-off criteria, recorded in the dataset so\nthat the criteria can be checked where it is built and where it is used (:mod:`.cutoff`): its\namount in the dataset's basis, why, and what the never-cut rule looks at.",
"properties": {
"key": {
"pattern": "^[a-z][a-z-]*:[A-Za-z0-9_.\\-]+$",
"title": "Key",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"direction": {
"default": "input",
"enum": [
"input",
"output"
],
"title": "Direction",
"type": "string"
},
"amount": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "None: not known.",
"title": "Amount"
},
"unit": {
"default": "kg",
"description": "An inventory unit.",
"title": "Unit",
"type": "string"
},
"reason": {
"minLength": 3,
"title": "Reason",
"type": "string"
},
"cas": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cas"
},
"catalyst": {
"default": false,
"title": "Catalyst",
"type": "boolean"
},
"contains": {
"description": "Element symbols.",
"items": {
"type": "string"
},
"title": "Contains",
"type": "array"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"key",
"reason"
],
"title": "CutoffFlow",
"type": "object"
},
"DatasetExchange": {
"additionalProperties": false,
"description": "One exchange of an LCI dataset, in the dataset's basis (e.g. per hour of operation).",
"properties": {
"key": {
"description": "feed:<id>, product:<id>, emission:<component>, construction:<id>, ...",
"pattern": "^[a-z][a-z-]*:[A-Za-z0-9_.\\-]+$",
"title": "Key",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"type": {
"description": "product: a (co-)product the burdens are allocated to; input: from the technosphere; output: a waste or other output; emission: to the environment; resource: an elementary flow from nature (m3, m2*a, m2, kg, MJ).",
"enum": [
"product",
"input",
"output",
"emission",
"resource"
],
"title": "Type",
"type": "string"
},
"phase": {
"default": "operation",
"description": "operation, construction, ...",
"title": "Phase",
"type": "string"
},
"amount": {
"title": "Amount",
"type": "number"
},
"unit": {
"description": "The inventory unit of its kind: kg, kWh, m, m2, m2*a, m3, Nm3 (gas at 0 \u00b0C, 1.01325 bar), ea, ea*h, tkm or kBq.",
"title": "Unit",
"type": "string"
},
"provenance": {
"default": "assumed",
"description": "given, calculated, estimated (an emission-factor estimate of emission_estimates:) or assumed.",
"enum": [
"given",
"calculated",
"estimated",
"assumed"
],
"title": "Provenance",
"type": "string"
},
"origin": {
"anyOf": [
{
"enum": [
"measured",
"vendor",
"literature",
"design-rule",
"estimate",
"simulated",
"correlation"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The origin every value it is derived from gives, if one.",
"title": "Origin"
},
"properties": {
"anyOf": [
{
"$ref": "#/$defs/ProductProperties"
},
{
"type": "null"
}
],
"default": null,
"description": "Products: what allocation weighs them by."
},
"link": {
"anyOf": [
{
"$ref": "#/$defs/Background"
},
{
"type": "null"
}
],
"default": null,
"description": "Its background; none: free, or not linked yet."
},
"free": {
"default": false,
"description": "Carries no burden (ambient air, ...).",
"title": "Free",
"type": "boolean"
},
"cas": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "An emission's or resource's CAS number (an attribute).",
"title": "Cas"
},
"flow": {
"description": "Emissions and resources: the flow's identity in reference lists, the primary list (EF 3.1) first, e.g. [{list: ef-3.1, uuid: ...}, {list: biosphere3, uuid: ..., name: ..., categories: [...]}]; one mapping is read as a list.",
"items": {
"$ref": "#/$defs/FlowIdentity"
},
"title": "Flow",
"type": "array"
},
"uncertainty": {
"anyOf": [
{
"$ref": "#/$defs/Uncertainty"
},
{
"type": "null"
}
],
"default": null
},
"streams": {
"description": "What it is derived from (streams, take-off rows).",
"items": {
"type": "string"
},
"title": "Streams",
"type": "array"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
},
"source_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The dataset's sources: entry the amount comes from, when it is externally supplied data (its terms stay with it); none: generated or sourced by the project.",
"title": "Source Id"
},
"pedigree": {
"anyOf": [
{
"$ref": "#/$defs/Pedigree"
},
{
"type": "null"
}
],
"default": null,
"description": "Its data quality (ecoinvent pedigree); unset: the default rule's, from its provenance and origin (cheme assess lca writes it)."
},
"basic_uncertainty": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Basic gsd2 under the pedigree, by exchange type.",
"title": "Basic Uncertainty"
},
"carrier": {
"anyOf": [
{
"$ref": "#/$defs/Carrier"
},
{
"type": "null"
}
],
"default": null,
"description": "An energy exchange's carrier and quality (kWh exchanges)."
},
"state": {
"anyOf": [
{
"$ref": "#/$defs/ProductState"
},
{
"type": "null"
}
],
"default": null,
"description": "A product's phase, pressure, temperature and purity."
},
"carbon": {
"anyOf": [
{
"$ref": "#/$defs/CarbonContent"
},
{
"type": "null"
}
],
"default": null,
"description": "Material exchanges (kg): the carbon it carries per kg and its biogenic fraction (products: always reported in a PCF)."
},
"co2_source": {
"anyOf": [
{
"enum": [
"fossil-point-source",
"biogenic-point-source",
"direct-air-capture"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "An input of captured CO2 (CCU): where it was captured.",
"title": "Co2 Source"
},
"storage": {
"anyOf": [
{
"$ref": "#/$defs/GeologicalStorage"
},
{
"type": "null"
}
],
"default": null,
"description": "An output of CO2 to transport and geological storage (CCS)."
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How the amount follows from the dataset's parameters, e.g. 'capacity * power_per_t' (+ - * / ** and parentheses); it must give the amount.",
"title": "Formula"
},
"treatment": {
"anyOf": [
{
"$ref": "#/$defs/Treatment"
},
{
"type": "null"
}
],
"default": null,
"description": "An output that is neither product nor emission: waste, recyclable or by-product, its route and the product it displaces. The exchange is linked as the dataset's system_model decides: a recyclable or by-product is free under cutoff and apos."
},
"metals": {
"additionalProperties": {
"type": "number"
},
"description": "Element symbol -> mass fraction (a catalyst and its spent output).",
"title": "Metals",
"type": "object"
},
"composition": {
"anyOf": [
{
"$ref": "#/$defs/Composition"
},
{
"type": "null"
}
],
"default": null,
"description": "Material exchanges (kg, Nm3): what it is made of by mass, for the mass and element balances; filled from the stream table for a flowsheet-derived dataset."
},
"balance_exclusion": {
"default": "",
"description": "Why it is left out of the mass and element balances, e.g. a catalyst charge counted over its life (stated, never silent).",
"title": "Balance Exclusion",
"type": "string"
}
},
"required": [
"key",
"type",
"amount",
"unit"
],
"title": "DatasetExchange",
"type": "object"
},
"DatasetGeography": {
"additionalProperties": false,
"description": "What the dataset's geography code (``location``) stands for. The facility's place and\nwhere the dataset may be applied are kept apart from the code it represents.",
"properties": {
"description": {
"default": "",
"description": "Representativeness: how the data represent the location (ILCD geography/locationOfOperationSupplyOrProduction/descriptionOfRestrictions).",
"title": "Description",
"type": "string"
},
"site": {
"default": "",
"description": "The facility's assumed place, e.g. coastal industrial site.",
"title": "Site",
"type": "string"
},
"applicable": {
"description": "Geography codes the dataset may be applied to beyond its own.",
"items": {
"type": "string"
},
"title": "Applicable",
"type": "array"
}
},
"title": "DatasetGeography",
"type": "object"
},
"DatasetProvenance": {
"additionalProperties": false,
"description": "Where a dataset comes from: the generator and the files it was derived from.",
"properties": {
"generator": {
"default": "",
"description": "e.g. cheme 0.7 assess lca.",
"title": "Generator",
"type": "string"
},
"plant": {
"default": "",
"description": "The plant (plant.yaml name).",
"title": "Plant",
"type": "string"
},
"case": {
"default": "",
"title": "Case",
"type": "string"
},
"commit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Commit"
},
"files": {
"additionalProperties": {
"type": "string"
},
"description": "Path -> sha256 or blob.",
"title": "Files",
"type": "object"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"title": "DatasetProvenance",
"type": "object"
},
"DatasetRef": {
"additionalProperties": false,
"description": "An LCI dataset (``kind: lci_dataset``) as the background of a flow: one unit of its\n*product*, allocated by *allocation* (default: the dataset's own default, else mass). The\ndataset's own exchanges are characterised with the study's backend, recursively.",
"properties": {
"path": {
"description": "The dataset file, from the repository root.",
"minLength": 1,
"title": "Path",
"type": "string"
},
"product": {
"description": "Its product, e.g. H2 or product:H2.",
"minLength": 1,
"title": "Product",
"type": "string"
},
"allocation": {
"anyOf": [
{
"enum": [
"mass",
"economic",
"energy",
"exergy",
"shares",
"substitution",
"none"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Default: the dataset's allocation.method, else mass.",
"title": "Allocation"
}
},
"required": [
"path",
"product"
],
"title": "DatasetRef",
"type": "object"
},
"DatasetTime": {
"additionalProperties": false,
"description": "The time the data represent; ``year`` of the dataset is the data's reference year and\n``valid_until`` the last year it may be used.",
"properties": {
"start": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "First valid year.",
"title": "Start"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
}
},
"title": "DatasetTime",
"type": "object"
},
"ElementBalanceRecord": {
"additionalProperties": false,
"description": "The element balance of a generated dataset as it was written: kg of each element in\n(inputs, resources) and out (products, outputs, emissions) per the dataset's basis.",
"properties": {
"closed": {
"title": "Closed",
"type": "boolean"
},
"tolerance": {
"description": "Relative, of the larger side.",
"exclusiveMinimum": 0,
"title": "Tolerance",
"type": "number"
},
"elements": {
"additionalProperties": {
"items": {
"type": "number"
},
"type": "array"
},
"description": "Element -> [kg in, kg out].",
"title": "Elements",
"type": "object"
},
"outside": {
"description": "Exchanges outside the balance (energy, or no formula), by key.",
"items": {
"type": "string"
},
"title": "Outside",
"type": "array"
}
},
"required": [
"closed",
"tolerance"
],
"title": "ElementBalanceRecord",
"type": "object"
},
"Elementary": {
"additionalProperties": false,
"description": "An elementary flow characterised directly by its component's CAS number\n(process/materials.yaml): an emission, or a resource (``compartment: resource``). With backend\nfactors through the packaged method a category names (``elementary:`` of a category in\nlca/factors.yaml, e.g. ipcc2021-gwp100), with backend brightway as the biosphere flow of\nthat CAS number in ``brightway.biosphere``. Its identity in the reference lists comes from\nthe packaged crosswalk (``data/elementary-flows.yaml``), by CAS, compartment and origin, or\nby ``flow`` (the crosswalk id, e.g. water-river).",
"properties": {
"compartment": {
"default": "air",
"enum": [
"air",
"water",
"soil",
"resource"
],
"title": "Compartment",
"type": "string"
},
"subcompartment": {
"default": "unspecified",
"description": "air: unspecified, urban-close-to-ground, non-urban-high-stack, lower-stratosphere; water: unspecified, fresh-surface, ground, sea; soil: unspecified, agricultural, industrial; resource: unspecified, in-air, in-water, in-ground, land.",
"title": "Subcompartment",
"type": "string"
},
"origin": {
"default": "fossil",
"enum": [
"fossil",
"biogenic",
"land-use-change"
],
"title": "Origin",
"type": "string"
},
"flow": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The crosswalk id when CAS and compartment do not decide (a water source: water-river, water-lake, water-sea, water-well, water-cooling).",
"title": "Flow"
}
},
"title": "Elementary",
"type": "object"
},
"FactorScope": {
"additionalProperties": false,
"description": "What a factor measures, as data: the structured scope the method-mix\ncheck and the scenario comparability verdict read instead of parsing free text. Every field is\noptional; an unset field is *not declared* (never assumed), so two factors that leave a\ndimension unset cannot be called like-for-like on it. A factor's own ``scope`` overrides its\nsource's field by field.",
"properties": {
"basis": {
"anyOf": [
{
"enum": [
"direct",
"direct+upstream",
"life-cycle"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"delivery": {
"anyOf": [
{
"enum": [
"generation",
"consumer"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Delivery"
},
"gases": {
"anyOf": [
{
"enum": [
"co2",
"co2e"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Gases"
},
"gwp": {
"anyOf": [
{
"enum": [
"AR4",
"AR5",
"AR6",
"AR4/AR5",
"mixed"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Only meaningful for CO2e; leave unset when not stated.",
"title": "Gwp"
},
"mix": {
"anyOf": [
{
"enum": [
"grid-average",
"residual-mix"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mix"
},
"accounting": {
"anyOf": [
{
"enum": [
"generation",
"consumption"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Accounting"
},
"note": {
"default": "",
"description": "Why a field is set or unset, in a sentence.",
"title": "Note",
"type": "string"
}
},
"title": "FactorScope",
"type": "object"
},
"FlowIdentity": {
"additionalProperties": false,
"description": "An elementary flow's identity in one reference list. ``uuid: null`` records a flow\nwhose identifier in that list is not verified yet (a TODO, reported).",
"properties": {
"list": {
"enum": [
"ef-3.1",
"biosphere3",
"fedefl"
],
"title": "List",
"type": "string"
},
"uuid": {
"anyOf": [
{
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Uuid"
},
"name": {
"default": "",
"title": "Name",
"type": "string"
},
"categories": {
"description": "The list's compartments.",
"items": {
"type": "string"
},
"title": "Categories",
"type": "array"
},
"unit": {
"default": "",
"description": "The list's unit, e.g. m3 for water.",
"title": "Unit",
"type": "string"
},
"per_unit": {
"default": 1.0,
"description": "The list's unit per unit of the exchange (water: 0.001).",
"exclusiveMinimum": 0,
"title": "Per Unit",
"type": "number"
}
},
"required": [
"list"
],
"title": "FlowIdentity",
"type": "object"
},
"Generation": {
"additionalProperties": false,
"description": "How a dataset was generated: its tier, the method, the versioned\ndefaults it used and the caps the tier sets.\n\nTier 0 is stoichiometric (reactions, a yield and defaults), Tier 1 sourced conceptual\n(yields, utilities and emissions taken from open literature, patents or BREFs), Tier 2 and\nup the flowsheet and simulation path. A dataset without ``generation`` is derived from a\nflowsheet (``cheme assess lca``) or written by hand.",
"properties": {
"tier": {
"description": "0 stoichiometric, 1 sourced conceptual, 2+.",
"maximum": 3,
"minimum": 0,
"title": "Tier",
"type": "integer"
},
"method": {
"description": "e.g. stoichiometric (Hischier et al. 2005).",
"minLength": 3,
"title": "Method",
"type": "string"
},
"defaults": {
"default": "",
"description": "The defaults file and its version, e.g. cheme tier-defaults 1.0.0.",
"title": "Defaults",
"type": "string"
},
"defaults_used": {
"description": "The ids of the default rules the exchanges took.",
"items": {
"type": "string"
},
"title": "Defaults Used",
"type": "array"
},
"spec": {
"default": "",
"description": "The estimate it was generated from (its path).",
"title": "Spec",
"type": "string"
},
"maturity_cap": {
"anyOf": [
{
"enum": [
"sourced",
"balanced",
"predictive",
"engineering"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The highest calculation maturity the dataset supports.",
"title": "Maturity Cap"
},
"pedigree_floor": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "The best pedigree scores the tier allows on any exchange: [reliability, completeness, temporal, geographical, technological].",
"title": "Pedigree Floor"
},
"dqr_floor": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The best (lowest) TfS DQR the tier allows: the mean of the floor's temporal, geographical and technological scores.",
"title": "Dqr Floor"
},
"components": {
"additionalProperties": {
"type": "string"
},
"description": "Exchange key -> the component id it is an amount of.",
"title": "Components",
"type": "object"
},
"formulas": {
"additionalProperties": {
"type": "string"
},
"description": "Exchange key -> the formula of its component: the element balance's input.",
"title": "Formulas",
"type": "object"
},
"balance": {
"anyOf": [
{
"$ref": "#/$defs/ElementBalanceRecord"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"tier",
"method"
],
"title": "Generation",
"type": "object"
},
"GeologicalStorage": {
"additionalProperties": false,
"description": "CCS: CO2 sent to transport and geological storage (a technosphere output), with what\nmakes the storage permanent.",
"properties": {
"permanence": {
"description": "Why the storage is permanent, e.g. saline aquifer under the EU CCS Directive 2009/31/EC, monitored, with the leakage it assumes.",
"minLength": 3,
"title": "Permanence",
"type": "string"
},
"reservoir": {
"default": "",
"description": "e.g. depleted gas field, saline aquifer.",
"title": "Reservoir",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"permanence"
],
"title": "GeologicalStorage",
"type": "object"
},
"Modelling": {
"additionalProperties": false,
"description": "The LCI method of the dataset (ILCD modellingAndValidation/LCIMethodAndAllocation).",
"properties": {
"principle": {
"anyOf": [
{
"enum": [
"attributional",
"consequential"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Principle"
},
"multifunctionality": {
"default": "",
"description": "How multi-output is handled (filled from allocation).",
"title": "Multifunctionality",
"type": "string"
},
"sampling": {
"default": "",
"description": "Sampling and representativeness of the data.",
"title": "Sampling",
"type": "string"
}
},
"title": "Modelling",
"type": "object"
},
"Parameter": {
"additionalProperties": false,
"description": "A named parameter exchanges' ``formula`` may use (EcoSpold2 mathematical relations).",
"properties": {
"name": {
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
"title": "Name",
"type": "string"
},
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"default": "",
"title": "Unit",
"type": "string"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"name",
"value"
],
"title": "Parameter",
"type": "object"
},
"Pedigree": {
"additionalProperties": false,
"description": "An exchange's data quality on the ecoinvent pedigree matrix (Weidema et al. 2013): five\nscores, 1 (best) to 5, for reliability, completeness, temporal, geographical and further\ntechnological correlation, relative to the dataset's declared scope. Given by the default\nrule (``rule``, :mod:`.quality`) or by hand with its ``reason``.",
"properties": {
"scores": {
"description": "[reliability, completeness, temporal, geographical, technological].",
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"title": "Scores",
"type": "array"
},
"rule": {
"default": "",
"description": "The default rule that gave them.",
"title": "Rule",
"type": "string"
},
"reason": {
"default": "",
"description": "Why they were set by hand.",
"title": "Reason",
"type": "string"
}
},
"required": [
"scores"
],
"title": "Pedigree",
"type": "object"
},
"ProductProperties": {
"additionalProperties": false,
"description": "What allocation weighs a product by, per unit of it (per kg for a material product).",
"properties": {
"price": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Price per unit, any currency.",
"title": "Price"
},
"energy": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Energy content per unit, kJ (e.g. lower heating value).",
"title": "Energy"
},
"exergy": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Exergy per unit, kJ (chemical + physical, dead state 298.15 K, 101.325 kPa); plant products take it from the flowsheet (cheme process props --fill).",
"title": "Exergy"
},
"source": {
"default": "",
"description": "Where the numbers come from.",
"title": "Source",
"type": "string"
}
},
"title": "ProductProperties",
"type": "object"
},
"ProductState": {
"additionalProperties": false,
"description": "A product's state, part of its identity: GOX at 30 bar(g) and LOX are distinct reference\nproducts. Exporters write it into the reference product's name or properties.",
"properties": {
"phase": {
"anyOf": [
{
"enum": [
"gas",
"liquid",
"solid",
"two-phase",
"supercritical"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Phase"
},
"pressure": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "bar(a).",
"title": "Pressure"
},
"temperature": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "\u00b0C.",
"title": "Temperature"
},
"purity": {
"anyOf": [
{
"exclusiveMinimum": 0,
"maximum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Fraction of the main component.",
"title": "Purity"
},
"basis": {
"anyOf": [
{
"enum": [
"mole",
"mass"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Of the purity.",
"title": "Basis"
},
"component": {
"default": "",
"description": "The main component, e.g. O2.",
"title": "Component",
"type": "string"
},
"grade": {
"default": "",
"description": "A commercial grade, e.g. 99.5 % O2.",
"title": "Grade",
"type": "string"
}
},
"title": "ProductState",
"type": "object"
},
"ProductionVolume": {
"additionalProperties": false,
"description": "The annual output of the represented technology in its geography (market weighting).",
"properties": {
"amount": {
"exclusiveMinimum": 0,
"title": "Amount",
"type": "number"
},
"unit": {
"description": "Per year, e.g. kg/a.",
"minLength": 1,
"title": "Unit",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"amount",
"unit"
],
"title": "ProductionVolume",
"type": "object"
},
"Review": {
"additionalProperties": false,
"description": "One review of the dataset; ``type: none`` states that it is unreviewed.",
"properties": {
"type": {
"enum": [
"none",
"internal",
"independent-external",
"panel"
],
"title": "Type",
"type": "string"
},
"reviewer": {
"default": "",
"title": "Reviewer",
"type": "string"
},
"scope": {
"default": "",
"description": "What was reviewed, e.g. inventory, method.",
"title": "Scope",
"type": "string"
},
"date": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Date"
},
"report": {
"default": "",
"description": "The review record, e.g. reviews/<file>.md.",
"title": "Report",
"type": "string"
}
},
"required": [
"type"
],
"title": "Review",
"type": "object"
},
"Source": {
"additionalProperties": false,
"description": "One entry of the source registry: a dataset or publication factors come from, the exact\nversion, and the terms its numbers and the results derived from them are used under.\n\nThe registry records the terms; it does not interpret a licence or grant rights. Free access\nalone does not establish that results may be published or the numbers redistributed.",
"properties": {
"id": {
"pattern": "^[a-z0-9][a-z0-9_.\\-]*$",
"title": "Id",
"type": "string"
},
"title": {
"minLength": 3,
"title": "Title",
"type": "string"
},
"provider": {
"description": "e.g. UK DESNZ, US EPA, JRC.",
"minLength": 2,
"title": "Provider",
"type": "string"
},
"version": {
"description": "The exact version, e.g. 2026 v1.2.",
"minLength": 1,
"title": "Version",
"type": "string"
},
"url": {
"default": "",
"title": "Url",
"type": "string"
},
"licence": {
"description": "Licence or terms reference, e.g. OGL-3.0, CC-BY-4.0, CC0-1.0, ecoinvent EULA.",
"minLength": 2,
"title": "Licence",
"type": "string"
},
"attribution": {
"default": "",
"description": "The text the licence asks for.",
"title": "Attribution",
"type": "string"
},
"publication": {
"description": "What may be done with results it contributes to (public, restricted, local).",
"enum": [
"public",
"restricted",
"local"
],
"title": "Publication",
"type": "string"
},
"redistribution": {
"default": false,
"description": "True when its numbers may be bundled in a repository or release.",
"title": "Redistribution",
"type": "boolean"
},
"geography": {
"default": "",
"description": "e.g. GB, EU27, US, GLO.",
"title": "Geography",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Reference year.",
"title": "Year"
},
"method": {
"default": "",
"description": "Its characterisation basis, e.g. IPCC AR5 GWP100: contributions to one category resting on different bases are flagged (method mix).",
"title": "Method",
"type": "string"
},
"checksum": {
"default": "",
"description": "e.g. sha256:<hex> of the file read.",
"title": "Checksum",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"scope": {
"anyOf": [
{
"$ref": "#/$defs/FactorScope"
},
{
"type": "null"
}
],
"default": null,
"description": "What its factors measure (basis, delivery point, gases, GWP, mix, accounting): the default of its factors' scope."
}
},
"required": [
"id",
"title",
"provider",
"version",
"licence",
"publication"
],
"title": "Source",
"type": "object"
},
"SupersededBy": {
"additionalProperties": false,
"description": "The dataset (and its version) that replaces this one.",
"properties": {
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"version": {
"pattern": "^\\d+\\.\\d+\\.\\d+$",
"title": "Version",
"type": "string"
}
},
"required": [
"id",
"version"
],
"title": "SupersededBy",
"type": "object"
},
"SystemBoundary": {
"additionalProperties": false,
"description": "The system boundary as data (ISO 14044 4.2.3.3): the steps included and excluded, the\ncut-off criteria, and whether infrastructure, catalysts and non-routine operation count.",
"properties": {
"included": {
"description": "Process steps included.",
"items": {
"type": "string"
},
"title": "Included",
"type": "array"
},
"excluded": {
"description": "Steps left out, and why.",
"items": {
"type": "string"
},
"title": "Excluded",
"type": "array"
},
"cutoff": {
"default": "",
"description": "The cut-off criteria applied.",
"title": "Cutoff",
"type": "string"
},
"infrastructure": {
"anyOf": [
{
"enum": [
"included",
"excluded"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Infrastructure"
},
"catalysts": {
"anyOf": [
{
"enum": [
"included",
"excluded"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Catalysts"
},
"non_routine": {
"anyOf": [
{
"enum": [
"included",
"excluded"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Start-up, shut-down, upsets.",
"title": "Non Routine"
}
},
"title": "SystemBoundary",
"type": "object"
},
"Treatment": {
"additionalProperties": false,
"description": "What becomes of an output that is neither a product nor an emission:\nits kind, the treatment route, and for a recyclable or a by-product the production it displaces.\n\nThe output's own background (``factor``, ``activity``, ``dataset``: e.g. landfill of spent\nzeolite, incineration of waste mineral oil, or an Atlas utility dataset) is the treatment.\nA ``waste`` counts it under every system model. A ``recyclable`` or ``byproduct`` counts it\nonly under a crediting system model (substitution, consequential); under cut-off and APOS it\nleaves burden-free (the recycler carries the treatment), except a ``hazardous`` recyclable,\nwhich counts its background under every system model. ``credit`` is applied only under a\ncrediting system model, for every kind: it is how a substitution variant credits the heat or\nelectricity an incineration (a ``waste``) displaces.\n\n``recyclable`` is for material recycling and re-use only, with a positive market value or an\naccepted scrap grade. Energy recovery is a ``waste`` linked to its incineration: in the\ncut-off model the burden of the incineration stays with the waste producer. The composition\nof the waste (Doka 2003) does not change the treatment's burden here (known limitation).",
"properties": {
"kind": {
"enum": [
"waste",
"recyclable",
"byproduct"
],
"title": "Kind",
"type": "string"
},
"route": {
"description": "The treatment route, e.g. landfill, incineration of waste mineral oil, re-refining, metal recovery, regeneration, wastewater treatment.",
"minLength": 3,
"title": "Route",
"type": "string"
},
"credit": {
"anyOf": [
{
"$ref": "#/$defs/Background"
},
{
"type": "null"
}
],
"default": null,
"description": "The background of the product it displaces, per its unit (e.g. primary steel for steel scrap, or grid electricity for the energy of an incineration); written as a negative avoided:<key> input only under a crediting system model (substitution, consequential), never in cut-off or apos."
},
"ratio": {
"default": 1.0,
"description": "Units displaced per unit of the output (quality and losses of recycling).",
"exclusiveMinimum": 0,
"title": "Ratio",
"type": "number"
},
"hazardous": {
"default": false,
"description": "A hazardous waste: a recyclable that is hazardous needs the recycler's treatment linked (a finding otherwise), as it rarely leaves burden-free; that background counts under every system model, cut-off included.",
"title": "Hazardous",
"type": "boolean"
}
},
"required": [
"kind",
"route"
],
"title": "Treatment",
"type": "object"
},
"Uncertainty": {
"additionalProperties": false,
"description": "The uncertainty of a value, relative to it (see :mod:`.uncertainty`).\n\n``lognormal`` with ``gsd2`` (95 % within value / gsd2 .. value x gsd2) or ``pedigree``\nscores (five, 1 to 5: reliability, completeness, temporal, geographical, technological)\non a ``basic`` gsd2; ``normal`` with ``cv``; ``triangular`` or ``uniform`` with ``low`` and\n``high`` multipliers (e.g. 0.8 and 1.2).",
"properties": {
"distribution": {
"default": "lognormal",
"enum": [
"lognormal",
"normal",
"triangular",
"uniform"
],
"title": "Distribution",
"type": "string"
},
"gsd2": {
"anyOf": [
{
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Gsd2"
},
"pedigree": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 5,
"minItems": 5,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Pedigree"
},
"basic": {
"default": 1.05,
"description": "Basic gsd2 under the pedigree.",
"minimum": 1,
"title": "Basic",
"type": "number"
},
"cv": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cv"
},
"low": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Low"
},
"high": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "High"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"title": "Uncertainty",
"type": "object"
}
},
"additionalProperties": false,
"description": "An unallocated life cycle inventory dataset (``kind: lci_dataset``): a reusable process.\n\nDerived from a plant (``cheme assess lca --write`` writes ``lca/dataset.yaml``) or\nwritten by hand, and referenced by other studies as a background (``dataset:``). It keeps\nevery product unallocated; allocation is the study's choice (``allocation``: the\ndataset's default).\n\n``schema: cheme/lci_dataset/v2``. A v1 dataset (``schema: cheme/lca/v1``) loads with the\ndefaults of every field v2 added; :func:`.documentation.findings` names what it lacks.",
"properties": {
"uuid": {
"anyOf": [
{
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Stable across versions.",
"title": "Uuid"
},
"version": {
"anyOf": [
{
"pattern": "^\\d+\\.\\d+\\.\\d+$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "major.minor.patch.",
"title": "Version"
},
"parent": {
"anyOf": [
{
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The uuid of the dataset this one is a (regional) variant of.",
"title": "Parent"
},
"methodology_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The version of the library methodology the dataset was built under.",
"title": "Methodology Version"
},
"superseded_by": {
"anyOf": [
{
"$ref": "#/$defs/SupersededBy"
},
{
"type": "null"
}
],
"default": null
},
"geography": {
"anyOf": [
{
"$ref": "#/$defs/DatasetGeography"
},
{
"type": "null"
}
],
"default": null
},
"time": {
"anyOf": [
{
"$ref": "#/$defs/DatasetTime"
},
{
"type": "null"
}
],
"default": null
},
"valid_until": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Last year of use (ILCD dataValidUntil).",
"title": "Valid Until"
},
"system_model": {
"anyOf": [
{
"enum": [
"cutoff",
"apos",
"substitution",
"consequential"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "System Model"
},
"technology_level": {
"anyOf": [
{
"enum": [
"undefined",
"new",
"modern",
"current",
"old",
"outdated"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Technology Level"
},
"system_boundary": {
"anyOf": [
{
"$ref": "#/$defs/SystemBoundary"
},
{
"type": "null"
}
],
"default": null
},
"production_volume": {
"anyOf": [
{
"$ref": "#/$defs/ProductionVolume"
},
{
"type": "null"
}
],
"default": null
},
"classification": {
"anyOf": [
{
"$ref": "#/$defs/Classification"
},
{
"type": "null"
}
],
"default": null
},
"modelling": {
"anyOf": [
{
"$ref": "#/$defs/Modelling"
},
{
"type": "null"
}
],
"default": null
},
"review": {
"description": "Review records; [] or 'unreviewed' when none was made (unreviewed is stated with type: none).",
"items": {
"$ref": "#/$defs/Review"
},
"title": "Review",
"type": "array"
},
"parameters": {
"items": {
"$ref": "#/$defs/Parameter"
},
"title": "Parameters",
"type": "array"
},
"data_generator": {
"default": "",
"description": "Who modelled the data (person or organisation).",
"title": "Data Generator",
"type": "string"
},
"entry_by": {
"default": "",
"description": "Who entered the dataset.",
"title": "Entry By",
"type": "string"
},
"schema": {
"description": "cheme/lci_dataset/v2 (cheme/lca/v1: a v1 dataset, read with defaults).",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "lci_dataset",
"title": "Kind",
"type": "string"
},
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"scope": {
"default": "foreground",
"enum": [
"foreground",
"linked"
],
"title": "Scope",
"type": "string"
},
"basis": {
"default": "1 h of operation",
"description": "What the amounts are per.",
"title": "Basis",
"type": "string"
},
"location": {
"default": "",
"title": "Location",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Year"
},
"boundary": {
"default": "",
"description": "What the process includes, e.g. gate-to-gate, the ASU plant.",
"title": "Boundary",
"type": "string"
},
"technology": {
"default": "",
"description": "The technology it represents.",
"title": "Technology",
"type": "string"
},
"rights": {
"default": "",
"description": "The terms of its own data, e.g. CC-BY-4.0 (independently generated); exchanges from external sources keep theirs (source_id).",
"title": "Rights",
"type": "string"
},
"sources": {
"description": "Registry of the externally supplied amounts.",
"items": {
"$ref": "#/$defs/Source"
},
"title": "Sources",
"type": "array"
},
"exchanges": {
"items": {
"$ref": "#/$defs/DatasetExchange"
},
"minItems": 1,
"title": "Exchanges",
"type": "array"
},
"cutoff": {
"description": "Flows left out by the cut-off criteria, with amount and reason.",
"items": {
"$ref": "#/$defs/CutoffFlow"
},
"title": "Cutoff",
"type": "array"
},
"allocation": {
"anyOf": [
{
"$ref": "#/$defs/Allocation"
},
{
"type": "null"
}
],
"default": null,
"description": "The default allocation when a study names none."
},
"provenance": {
"$ref": "#/$defs/DatasetProvenance"
},
"generation": {
"anyOf": [
{
"$ref": "#/$defs/Generation"
},
{
"type": "null"
}
],
"default": null,
"description": "How it was generated (tier, method, defaults used): set by cheme assess lci-estimate; none for a dataset from a flowsheet or written by hand."
}
},
"required": [
"schema",
"kind",
"id",
"exchanges"
],
"title": "LciDataset",
"type": "object"
}
lci_estimate¶
File: lca/estimate.yaml. Model: chemeascode.domains.assessment.lca.schemas.LciEstimate.
An LCI estimate (kind: lci_estimate, lca/estimate.yaml): what cheme assess lci-estimate builds a Tier 0 or Tier 1 dataset from.
The reactions of process/reactions.yaml named in reactions form the reference product (a component of process/materials.yaml); yield is the efficiency over the whole scheme, key and selectivity fix the extents of several reactions. What it does not give comes from the versioned defaults (data/tier-defaults.yaml), marked assumed. Tier 1 takes the yield, electricity and heat from sources.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/lci_estimate/v1. | |
kind |
lci_estimate |
yes | ||
id |
string | yes | ||
title |
string | "" |
||
description |
string | "" |
||
tier |
0 | 1 |
yes | ||
product |
string | yes | The reference product: a component id. | |
reactions |
list of string | yes | Reaction ids of reactions.yaml. | |
key |
string or null | null |
The key reactant (several reactions). | |
selectivity |
map of number | kmol of each product per kmol of the key converted (several reactions). | ||
selectivity_source |
SourceRef or null | null |
Where the selectivities come from. Tier 1 with several reactions requires it; without one the amounts that depend on them are assumed, not calculated. | |
yield |
SourcedValue or null | null |
Efficiency over the whole scheme (0-1]; unset: the default (Tier 0). | |
byproducts |
map of Byproduct | Component -> its fate; every by-product needs one. | ||
losses |
Losses | |||
electricity |
SourcedValue or null | null |
kWh per kg of product; unset: the default (Tier 0). | |
heat |
SourcedValue or null | null |
kWh per kg of product; unset: the default (Tier 0). | |
exchanges |
list of EstimateExchange | |||
origin |
fossil | biogenic | land-use-change |
"fossil" |
The carbon origin of carbon-bearing emissions. | |
location |
string | "" |
||
year |
integer or null | null |
||
technology |
string | "" |
||
documentation |
DatasetDocumentation or null | null |
The dataset's documentation (uuid, geography, review, ...). | |
sources |
list of Source | |||
output |
string | "" |
Where the dataset is written; default lca/datasets/<id>.yaml. |
JSON Schema: cheme schema lci_estimate
{
"$defs": {
"Activity": {
"additionalProperties": false,
"description": "A process of a Brightway database (e.g. an ecoinvent market activity), found by name and,\nwhere the name alone is ambiguous, its reference product and location.",
"properties": {
"database": {
"description": "e.g. ecoinvent-3.10-cutoff",
"minLength": 1,
"title": "Database",
"type": "string"
},
"name": {
"description": "e.g. market for electricity, medium voltage",
"minLength": 1,
"title": "Name",
"type": "string"
},
"reference_product": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reference Product"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. DE, RER, GLO",
"title": "Location"
}
},
"required": [
"database",
"name"
],
"title": "Activity",
"type": "object"
},
"Background": {
"additionalProperties": false,
"description": "Where a flow's burdens come from. ``factor`` serves the factors backend, ``activity`` or\n``biosphere`` the Brightway backend; a mapping may give both kinds, so either backend can\nrun. ``dataset`` (another LCI dataset) serves both and excludes the others. ``free`` and\n``emission`` exclude the rest.",
"properties": {
"factor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id of a factor in lca/factors.yaml.",
"title": "Factor"
},
"activity": {
"anyOf": [
{
"$ref": "#/$defs/Activity"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"biosphere": {
"anyOf": [
{
"$ref": "#/$defs/BiosphereFlow"
},
{
"type": "null"
}
],
"default": null,
"description": "backend brightway."
},
"dataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetRef"
},
{
"type": "null"
}
],
"default": null,
"description": "An LCI dataset of this or another study (the Atlas)."
},
"elementary": {
"anyOf": [
{
"$ref": "#/$defs/Elementary"
},
{
"type": "null"
}
],
"default": null,
"description": "emission:<component> only: characterised by its CAS number (a category's elementary method, or brightway.biosphere)."
},
"source": {
"description": "Why this mapping.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"proxy": {
"default": "",
"description": "The background stands in for a related flow (another material, geography or technology): why, and where that holds. The results mark it PROXY.",
"title": "Proxy",
"type": "string"
},
"missing": {
"default": "",
"description": "No background is available (yet): why. The exchange stays in the inventory with its quantity and is a gap in every category, never 0.",
"title": "Missing",
"type": "string"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
}
},
"required": [
"source"
],
"title": "Background",
"type": "object"
},
"BiosphereFlow": {
"additionalProperties": false,
"description": "An elementary flow of a Brightway biosphere database, characterised directly by the\nmethod (an emission of the plant itself).",
"properties": {
"database": {
"description": "e.g. ecoinvent-3.10-biosphere",
"minLength": 1,
"title": "Database",
"type": "string"
},
"name": {
"description": "e.g. Carbon dioxide, fossil",
"minLength": 1,
"title": "Name",
"type": "string"
},
"categories": {
"description": "Compartments, e.g. [air] or [air, urban air close to ground].",
"items": {
"type": "string"
},
"title": "Categories",
"type": "array"
}
},
"required": [
"database",
"name"
],
"title": "BiosphereFlow",
"type": "object"
},
"Byproduct": {
"additionalProperties": false,
"description": "What becomes of a product of the reactions other than the reference product.",
"properties": {
"fate": {
"enum": [
"coproduct",
"air",
"water",
"wastewater",
"waste"
],
"title": "Fate",
"type": "string"
},
"reason": {
"default": "",
"description": "Why (a source, or the judgement).",
"title": "Reason",
"type": "string"
},
"properties": {
"anyOf": [
{
"$ref": "#/$defs/ProductProperties"
},
{
"type": "null"
}
],
"default": null,
"description": "A co-product: what allocation weighs it by."
}
},
"required": [
"fate"
],
"title": "Byproduct",
"type": "object"
},
"Carrier": {
"additionalProperties": false,
"description": "The energy carrier of an exchange and its quality: the temperature of heat or cold, the\npressure (and level) of steam, the lower heating value of a fuel.",
"properties": {
"kind": {
"enum": [
"electricity",
"heat",
"steam",
"fuel",
"cold"
],
"title": "Kind",
"type": "string"
},
"temperature": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "\u00b0C: heat or steam supplied, cold delivered.",
"title": "Temperature"
},
"pressure": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "bar(a): steam.",
"title": "Pressure"
},
"level": {
"default": "",
"description": "e.g. LP, MP, HP steam; a named heat or cooling level.",
"title": "Level",
"type": "string"
},
"lhv": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "MJ/kg: a fuel.",
"title": "Lhv"
},
"composition": {
"default": "",
"description": "A fuel's stated composition.",
"title": "Composition",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"kind"
],
"title": "Carrier",
"type": "object"
},
"Classification": {
"additionalProperties": false,
"description": "ISIC Rev.4 (the activity) and CPC Ver. 2.1 (the reference product), as ecoinvent and the\nUN statistics classify them.",
"properties": {
"isic": {
"default": "",
"description": "e.g. 2011.",
"pattern": "^(\\d{2,4})?$",
"title": "Isic",
"type": "string"
},
"cpc": {
"default": "",
"description": "A CPC 2.1 code.",
"pattern": "^(\\d{1,5})?$",
"title": "Cpc",
"type": "string"
}
},
"title": "Classification",
"type": "object"
},
"DatasetDocumentation": {
"additionalProperties": false,
"description": "What a professional LCI database documents of each dataset beyond its exchanges, mapped to\nILCD (EF 3.1) and EcoSpold2 in docs/framework/lca.md. Every field is optional in the schema;\nthe gate ``lci-documented`` requires the publication minimum.",
"properties": {
"uuid": {
"anyOf": [
{
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Stable across versions.",
"title": "Uuid"
},
"version": {
"anyOf": [
{
"pattern": "^\\d+\\.\\d+\\.\\d+$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "major.minor.patch.",
"title": "Version"
},
"parent": {
"anyOf": [
{
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The uuid of the dataset this one is a (regional) variant of.",
"title": "Parent"
},
"methodology_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The version of the library methodology the dataset was built under.",
"title": "Methodology Version"
},
"superseded_by": {
"anyOf": [
{
"$ref": "#/$defs/SupersededBy"
},
{
"type": "null"
}
],
"default": null
},
"geography": {
"anyOf": [
{
"$ref": "#/$defs/DatasetGeography"
},
{
"type": "null"
}
],
"default": null
},
"time": {
"anyOf": [
{
"$ref": "#/$defs/DatasetTime"
},
{
"type": "null"
}
],
"default": null
},
"valid_until": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Last year of use (ILCD dataValidUntil).",
"title": "Valid Until"
},
"system_model": {
"anyOf": [
{
"enum": [
"cutoff",
"apos",
"substitution",
"consequential"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "System Model"
},
"technology_level": {
"anyOf": [
{
"enum": [
"undefined",
"new",
"modern",
"current",
"old",
"outdated"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Technology Level"
},
"system_boundary": {
"anyOf": [
{
"$ref": "#/$defs/SystemBoundary"
},
{
"type": "null"
}
],
"default": null
},
"production_volume": {
"anyOf": [
{
"$ref": "#/$defs/ProductionVolume"
},
{
"type": "null"
}
],
"default": null
},
"classification": {
"anyOf": [
{
"$ref": "#/$defs/Classification"
},
{
"type": "null"
}
],
"default": null
},
"modelling": {
"anyOf": [
{
"$ref": "#/$defs/Modelling"
},
{
"type": "null"
}
],
"default": null
},
"review": {
"description": "Review records; [] or 'unreviewed' when none was made (unreviewed is stated with type: none).",
"items": {
"$ref": "#/$defs/Review"
},
"title": "Review",
"type": "array"
},
"parameters": {
"items": {
"$ref": "#/$defs/Parameter"
},
"title": "Parameters",
"type": "array"
},
"data_generator": {
"default": "",
"description": "Who modelled the data (person or organisation).",
"title": "Data Generator",
"type": "string"
},
"entry_by": {
"default": "",
"description": "Who entered the dataset.",
"title": "Entry By",
"type": "string"
}
},
"title": "DatasetDocumentation",
"type": "object"
},
"DatasetGeography": {
"additionalProperties": false,
"description": "What the dataset's geography code (``location``) stands for. The facility's place and\nwhere the dataset may be applied are kept apart from the code it represents.",
"properties": {
"description": {
"default": "",
"description": "Representativeness: how the data represent the location (ILCD geography/locationOfOperationSupplyOrProduction/descriptionOfRestrictions).",
"title": "Description",
"type": "string"
},
"site": {
"default": "",
"description": "The facility's assumed place, e.g. coastal industrial site.",
"title": "Site",
"type": "string"
},
"applicable": {
"description": "Geography codes the dataset may be applied to beyond its own.",
"items": {
"type": "string"
},
"title": "Applicable",
"type": "array"
}
},
"title": "DatasetGeography",
"type": "object"
},
"DatasetRef": {
"additionalProperties": false,
"description": "An LCI dataset (``kind: lci_dataset``) as the background of a flow: one unit of its\n*product*, allocated by *allocation* (default: the dataset's own default, else mass). The\ndataset's own exchanges are characterised with the study's backend, recursively.",
"properties": {
"path": {
"description": "The dataset file, from the repository root.",
"minLength": 1,
"title": "Path",
"type": "string"
},
"product": {
"description": "Its product, e.g. H2 or product:H2.",
"minLength": 1,
"title": "Product",
"type": "string"
},
"allocation": {
"anyOf": [
{
"enum": [
"mass",
"economic",
"energy",
"exergy",
"shares",
"substitution",
"none"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Default: the dataset's allocation.method, else mass.",
"title": "Allocation"
}
},
"required": [
"path",
"product"
],
"title": "DatasetRef",
"type": "object"
},
"DatasetTime": {
"additionalProperties": false,
"description": "The time the data represent; ``year`` of the dataset is the data's reference year and\n``valid_until`` the last year it may be used.",
"properties": {
"start": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "First valid year.",
"title": "Start"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
}
},
"title": "DatasetTime",
"type": "object"
},
"Elementary": {
"additionalProperties": false,
"description": "An elementary flow characterised directly by its component's CAS number\n(process/materials.yaml): an emission, or a resource (``compartment: resource``). With backend\nfactors through the packaged method a category names (``elementary:`` of a category in\nlca/factors.yaml, e.g. ipcc2021-gwp100), with backend brightway as the biosphere flow of\nthat CAS number in ``brightway.biosphere``. Its identity in the reference lists comes from\nthe packaged crosswalk (``data/elementary-flows.yaml``), by CAS, compartment and origin, or\nby ``flow`` (the crosswalk id, e.g. water-river).",
"properties": {
"compartment": {
"default": "air",
"enum": [
"air",
"water",
"soil",
"resource"
],
"title": "Compartment",
"type": "string"
},
"subcompartment": {
"default": "unspecified",
"description": "air: unspecified, urban-close-to-ground, non-urban-high-stack, lower-stratosphere; water: unspecified, fresh-surface, ground, sea; soil: unspecified, agricultural, industrial; resource: unspecified, in-air, in-water, in-ground, land.",
"title": "Subcompartment",
"type": "string"
},
"origin": {
"default": "fossil",
"enum": [
"fossil",
"biogenic",
"land-use-change"
],
"title": "Origin",
"type": "string"
},
"flow": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The crosswalk id when CAS and compartment do not decide (a water source: water-river, water-lake, water-sea, water-well, water-cooling).",
"title": "Flow"
}
},
"title": "Elementary",
"type": "object"
},
"EstimateExchange": {
"additionalProperties": false,
"description": "A further exchange per kg of the reference product, taken from a source (Tier 1:\nauxiliaries, utilities, emissions of a BREF or a patent).",
"properties": {
"key": {
"pattern": "^[a-z][a-z-]*:[A-Za-z0-9_.\\-]+$",
"title": "Key",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"type": {
"enum": [
"input",
"output",
"emission",
"resource"
],
"title": "Type",
"type": "string"
},
"amount": {
"title": "Amount",
"type": "number"
},
"unit": {
"title": "Unit",
"type": "string"
},
"component": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Its component (materials.yaml): it then counts in the balance.",
"title": "Component"
},
"cas": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cas"
},
"carrier": {
"anyOf": [
{
"$ref": "#/$defs/Carrier"
},
{
"type": "null"
}
],
"default": null
},
"link": {
"anyOf": [
{
"$ref": "#/$defs/Background"
},
{
"type": "null"
}
],
"default": null
},
"source": {
"minLength": 3,
"title": "Source",
"type": "string"
},
"source_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source Id"
}
},
"required": [
"key",
"type",
"amount",
"unit",
"source"
],
"title": "EstimateExchange",
"type": "object"
},
"FactorScope": {
"additionalProperties": false,
"description": "What a factor measures, as data: the structured scope the method-mix\ncheck and the scenario comparability verdict read instead of parsing free text. Every field is\noptional; an unset field is *not declared* (never assumed), so two factors that leave a\ndimension unset cannot be called like-for-like on it. A factor's own ``scope`` overrides its\nsource's field by field.",
"properties": {
"basis": {
"anyOf": [
{
"enum": [
"direct",
"direct+upstream",
"life-cycle"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"delivery": {
"anyOf": [
{
"enum": [
"generation",
"consumer"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Delivery"
},
"gases": {
"anyOf": [
{
"enum": [
"co2",
"co2e"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Gases"
},
"gwp": {
"anyOf": [
{
"enum": [
"AR4",
"AR5",
"AR6",
"AR4/AR5",
"mixed"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Only meaningful for CO2e; leave unset when not stated.",
"title": "Gwp"
},
"mix": {
"anyOf": [
{
"enum": [
"grid-average",
"residual-mix"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mix"
},
"accounting": {
"anyOf": [
{
"enum": [
"generation",
"consumption"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Accounting"
},
"note": {
"default": "",
"description": "Why a field is set or unset, in a sentence.",
"title": "Note",
"type": "string"
}
},
"title": "FactorScope",
"type": "object"
},
"Losses": {
"additionalProperties": false,
"description": "How the unconverted input leaves: the defaults' split (air share, the rest to water)\nunless sourced here, or a fate per component (a gas that is vented, not drained).",
"properties": {
"air": {
"anyOf": [
{
"$ref": "#/$defs/SourcedValue"
},
{
"type": "null"
}
],
"default": null,
"description": "Fraction of each input's mass emitted to air."
},
"water": {
"default": "wastewater",
"description": "The rest: wastewater to treatment (technosphere, default) or an emission to water.",
"enum": [
"wastewater",
"water"
],
"title": "Water",
"type": "string"
},
"fate": {
"additionalProperties": {
"enum": [
"coproduct",
"air",
"water",
"wastewater",
"waste"
],
"type": "string"
},
"description": "Component -> where all of its unconverted input goes, instead of the split.",
"title": "Fate",
"type": "object"
},
"reason": {
"default": "",
"description": "Why the fates differ from the split.",
"title": "Reason",
"type": "string"
}
},
"title": "Losses",
"type": "object"
},
"Modelling": {
"additionalProperties": false,
"description": "The LCI method of the dataset (ILCD modellingAndValidation/LCIMethodAndAllocation).",
"properties": {
"principle": {
"anyOf": [
{
"enum": [
"attributional",
"consequential"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Principle"
},
"multifunctionality": {
"default": "",
"description": "How multi-output is handled (filled from allocation).",
"title": "Multifunctionality",
"type": "string"
},
"sampling": {
"default": "",
"description": "Sampling and representativeness of the data.",
"title": "Sampling",
"type": "string"
}
},
"title": "Modelling",
"type": "object"
},
"Parameter": {
"additionalProperties": false,
"description": "A named parameter exchanges' ``formula`` may use (EcoSpold2 mathematical relations).",
"properties": {
"name": {
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
"title": "Name",
"type": "string"
},
"value": {
"title": "Value",
"type": "number"
},
"unit": {
"default": "",
"title": "Unit",
"type": "string"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"name",
"value"
],
"title": "Parameter",
"type": "object"
},
"ProductProperties": {
"additionalProperties": false,
"description": "What allocation weighs a product by, per unit of it (per kg for a material product).",
"properties": {
"price": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Price per unit, any currency.",
"title": "Price"
},
"energy": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Energy content per unit, kJ (e.g. lower heating value).",
"title": "Energy"
},
"exergy": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Exergy per unit, kJ (chemical + physical, dead state 298.15 K, 101.325 kPa); plant products take it from the flowsheet (cheme process props --fill).",
"title": "Exergy"
},
"source": {
"default": "",
"description": "Where the numbers come from.",
"title": "Source",
"type": "string"
}
},
"title": "ProductProperties",
"type": "object"
},
"ProductionVolume": {
"additionalProperties": false,
"description": "The annual output of the represented technology in its geography (market weighting).",
"properties": {
"amount": {
"exclusiveMinimum": 0,
"title": "Amount",
"type": "number"
},
"unit": {
"description": "Per year, e.g. kg/a.",
"minLength": 1,
"title": "Unit",
"type": "string"
},
"source": {
"default": "",
"title": "Source",
"type": "string"
}
},
"required": [
"amount",
"unit"
],
"title": "ProductionVolume",
"type": "object"
},
"Review": {
"additionalProperties": false,
"description": "One review of the dataset; ``type: none`` states that it is unreviewed.",
"properties": {
"type": {
"enum": [
"none",
"internal",
"independent-external",
"panel"
],
"title": "Type",
"type": "string"
},
"reviewer": {
"default": "",
"title": "Reviewer",
"type": "string"
},
"scope": {
"default": "",
"description": "What was reviewed, e.g. inventory, method.",
"title": "Scope",
"type": "string"
},
"date": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Date"
},
"report": {
"default": "",
"description": "The review record, e.g. reviews/<file>.md.",
"title": "Report",
"type": "string"
}
},
"required": [
"type"
],
"title": "Review",
"type": "object"
},
"Source": {
"additionalProperties": false,
"description": "One entry of the source registry: a dataset or publication factors come from, the exact\nversion, and the terms its numbers and the results derived from them are used under.\n\nThe registry records the terms; it does not interpret a licence or grant rights. Free access\nalone does not establish that results may be published or the numbers redistributed.",
"properties": {
"id": {
"pattern": "^[a-z0-9][a-z0-9_.\\-]*$",
"title": "Id",
"type": "string"
},
"title": {
"minLength": 3,
"title": "Title",
"type": "string"
},
"provider": {
"description": "e.g. UK DESNZ, US EPA, JRC.",
"minLength": 2,
"title": "Provider",
"type": "string"
},
"version": {
"description": "The exact version, e.g. 2026 v1.2.",
"minLength": 1,
"title": "Version",
"type": "string"
},
"url": {
"default": "",
"title": "Url",
"type": "string"
},
"licence": {
"description": "Licence or terms reference, e.g. OGL-3.0, CC-BY-4.0, CC0-1.0, ecoinvent EULA.",
"minLength": 2,
"title": "Licence",
"type": "string"
},
"attribution": {
"default": "",
"description": "The text the licence asks for.",
"title": "Attribution",
"type": "string"
},
"publication": {
"description": "What may be done with results it contributes to (public, restricted, local).",
"enum": [
"public",
"restricted",
"local"
],
"title": "Publication",
"type": "string"
},
"redistribution": {
"default": false,
"description": "True when its numbers may be bundled in a repository or release.",
"title": "Redistribution",
"type": "boolean"
},
"geography": {
"default": "",
"description": "e.g. GB, EU27, US, GLO.",
"title": "Geography",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Reference year.",
"title": "Year"
},
"method": {
"default": "",
"description": "Its characterisation basis, e.g. IPCC AR5 GWP100: contributions to one category resting on different bases are flagged (method mix).",
"title": "Method",
"type": "string"
},
"checksum": {
"default": "",
"description": "e.g. sha256:<hex> of the file read.",
"title": "Checksum",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"scope": {
"anyOf": [
{
"$ref": "#/$defs/FactorScope"
},
{
"type": "null"
}
],
"default": null,
"description": "What its factors measure (basis, delivery point, gases, GWP, mix, accounting): the default of its factors' scope."
}
},
"required": [
"id",
"title",
"provider",
"version",
"licence",
"publication"
],
"title": "Source",
"type": "object"
},
"SourceRef": {
"additionalProperties": false,
"description": "A citation without a value: the source of a set of values (the selectivities).",
"properties": {
"source": {
"description": "The publication, page or table.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"source_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Its entry in sources: when it is externally supplied data.",
"title": "Source Id"
}
},
"required": [
"source"
],
"title": "SourceRef",
"type": "object"
},
"SourcedValue": {
"additionalProperties": false,
"description": "A value taken from a source (a publication, a patent, a BREF), cited.",
"properties": {
"value": {
"title": "Value",
"type": "number"
},
"source": {
"description": "The publication, page or table.",
"minLength": 3,
"title": "Source",
"type": "string"
},
"source_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Its entry in sources: when it is externally supplied data.",
"title": "Source Id"
}
},
"required": [
"value",
"source"
],
"title": "SourcedValue",
"type": "object"
},
"SupersededBy": {
"additionalProperties": false,
"description": "The dataset (and its version) that replaces this one.",
"properties": {
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"version": {
"pattern": "^\\d+\\.\\d+\\.\\d+$",
"title": "Version",
"type": "string"
}
},
"required": [
"id",
"version"
],
"title": "SupersededBy",
"type": "object"
},
"SystemBoundary": {
"additionalProperties": false,
"description": "The system boundary as data (ISO 14044 4.2.3.3): the steps included and excluded, the\ncut-off criteria, and whether infrastructure, catalysts and non-routine operation count.",
"properties": {
"included": {
"description": "Process steps included.",
"items": {
"type": "string"
},
"title": "Included",
"type": "array"
},
"excluded": {
"description": "Steps left out, and why.",
"items": {
"type": "string"
},
"title": "Excluded",
"type": "array"
},
"cutoff": {
"default": "",
"description": "The cut-off criteria applied.",
"title": "Cutoff",
"type": "string"
},
"infrastructure": {
"anyOf": [
{
"enum": [
"included",
"excluded"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Infrastructure"
},
"catalysts": {
"anyOf": [
{
"enum": [
"included",
"excluded"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Catalysts"
},
"non_routine": {
"anyOf": [
{
"enum": [
"included",
"excluded"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Start-up, shut-down, upsets.",
"title": "Non Routine"
}
},
"title": "SystemBoundary",
"type": "object"
}
},
"additionalProperties": false,
"description": "An LCI estimate (``kind: lci_estimate``, ``lca/estimate.yaml``): what ``cheme assess\nlci-estimate`` builds a Tier 0 or Tier 1 dataset from.\n\nThe reactions of ``process/reactions.yaml`` named in ``reactions`` form the reference\n``product`` (a component of ``process/materials.yaml``); ``yield`` is the efficiency over\nthe whole scheme, ``key`` and ``selectivity`` fix the extents of several reactions. What it\ndoes not give comes from the versioned defaults (``data/tier-defaults.yaml``), marked\nassumed. Tier 1 takes the yield, electricity and heat from sources.",
"properties": {
"schema": {
"description": "Always cheme/lci_estimate/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "lci_estimate",
"title": "Kind",
"type": "string"
},
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"tier": {
"enum": [
0,
1
],
"title": "Tier",
"type": "integer"
},
"product": {
"description": "The reference product: a component id.",
"title": "Product",
"type": "string"
},
"reactions": {
"description": "Reaction ids of reactions.yaml.",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Reactions",
"type": "array"
},
"key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The key reactant (several reactions).",
"title": "Key"
},
"selectivity": {
"additionalProperties": {
"minimum": 0,
"type": "number"
},
"description": "kmol of each product per kmol of the key converted (several reactions).",
"title": "Selectivity",
"type": "object"
},
"selectivity_source": {
"anyOf": [
{
"$ref": "#/$defs/SourceRef"
},
{
"type": "null"
}
],
"default": null,
"description": "Where the selectivities come from. Tier 1 with several reactions requires it; without one the amounts that depend on them are assumed, not calculated."
},
"yield": {
"anyOf": [
{
"$ref": "#/$defs/SourcedValue"
},
{
"type": "null"
}
],
"default": null,
"description": "Efficiency over the whole scheme (0-1]; unset: the default (Tier 0)."
},
"byproducts": {
"additionalProperties": {
"$ref": "#/$defs/Byproduct"
},
"description": "Component -> its fate; every by-product needs one.",
"title": "Byproducts",
"type": "object"
},
"losses": {
"$ref": "#/$defs/Losses"
},
"electricity": {
"anyOf": [
{
"$ref": "#/$defs/SourcedValue"
},
{
"type": "null"
}
],
"default": null,
"description": "kWh per kg of product; unset: the default (Tier 0)."
},
"heat": {
"anyOf": [
{
"$ref": "#/$defs/SourcedValue"
},
{
"type": "null"
}
],
"default": null,
"description": "kWh per kg of product; unset: the default (Tier 0)."
},
"exchanges": {
"items": {
"$ref": "#/$defs/EstimateExchange"
},
"title": "Exchanges",
"type": "array"
},
"origin": {
"default": "fossil",
"description": "The carbon origin of carbon-bearing emissions.",
"enum": [
"fossil",
"biogenic",
"land-use-change"
],
"title": "Origin",
"type": "string"
},
"location": {
"default": "",
"title": "Location",
"type": "string"
},
"year": {
"anyOf": [
{
"maximum": 2200,
"minimum": 1900,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Year"
},
"technology": {
"default": "",
"title": "Technology",
"type": "string"
},
"documentation": {
"anyOf": [
{
"$ref": "#/$defs/DatasetDocumentation"
},
{
"type": "null"
}
],
"default": null,
"description": "The dataset's documentation (uuid, geography, review, ...)."
},
"sources": {
"items": {
"$ref": "#/$defs/Source"
},
"title": "Sources",
"type": "array"
},
"output": {
"default": "",
"description": "Where the dataset is written; default lca/datasets/<id>.yaml.",
"title": "Output",
"type": "string"
}
},
"required": [
"schema",
"kind",
"id",
"tier",
"product",
"reactions"
],
"title": "LciEstimate",
"type": "object"
}
lca_mapping_profile¶
File: lca/mapping-profiles/*.yaml. Model: chemeascode.domains.assessment.lca.schemas.MappingProfile.
A provider profile (kind: lca_mapping_profile): how one background provider (an ecoinvent release and system model, an open database) names the activities for the flows a study takes, matched by the flowsheet's own terms (a key, a utility kind), so a study changes provider by selecting another profile. Names only: never a factor or a result of the provider, so it may be committed when the provider's terms allow its names.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/lca/v1. | |
kind |
lca_mapping_profile |
yes | ||
id |
string | yes | ||
provider |
string | yes | e.g. ecoinvent, USLCI. | |
version |
string | "" |
e.g. 3.11. | |
system_model |
string | "" |
e.g. cutoff, apos. | |
entries |
list of ProfileEntry | yes |
JSON Schema: cheme schema lca_mapping_profile
{
"$defs": {
"Activity": {
"additionalProperties": false,
"description": "A process of a Brightway database (e.g. an ecoinvent market activity), found by name and,\nwhere the name alone is ambiguous, its reference product and location.",
"properties": {
"database": {
"description": "e.g. ecoinvent-3.10-cutoff",
"minLength": 1,
"title": "Database",
"type": "string"
},
"name": {
"description": "e.g. market for electricity, medium voltage",
"minLength": 1,
"title": "Name",
"type": "string"
},
"reference_product": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reference Product"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. DE, RER, GLO",
"title": "Location"
}
},
"required": [
"database",
"name"
],
"title": "Activity",
"type": "object"
},
"ProfileEntry": {
"additionalProperties": false,
"description": "One mapping of a profile: the provider's activity for the flows it matches.",
"properties": {
"match": {
"$ref": "#/$defs/ProfileMatch"
},
"activity": {
"$ref": "#/$defs/Activity"
},
"source": {
"description": "Why this activity (and who checked it).",
"minLength": 3,
"title": "Source",
"type": "string"
},
"proxy": {
"default": "",
"description": "It stands in for a related flow: why.",
"title": "Proxy",
"type": "string"
}
},
"required": [
"match",
"activity",
"source"
],
"title": "ProfileEntry",
"type": "object"
},
"ProfileMatch": {
"additionalProperties": false,
"description": "Which flows a mapping profile entry serves, by what the flowsheet says they are (the\nprovider-independent side): one feed or product by its key, or every feed of a utility kind\n(a product of a utility kind, e.g. exported power, is matched by its key only: it may be an\nexport, not a supply).",
"properties": {
"key": {
"anyOf": [
{
"pattern": "^(feed|product):[A-Za-z0-9_.\\-]+$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "One flow, e.g. feed:POWER.",
"title": "Key"
},
"utility": {
"anyOf": [
{
"enum": [
"steam",
"hot_oil",
"fired_heat",
"cooling_water",
"air_cooling",
"refrigerant",
"electricity",
"fuel",
"other"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The feeds' utility.kind in process/flowsheet.yaml, e.g. electricity, steam, cooling_water.",
"title": "Utility"
}
},
"title": "ProfileMatch",
"type": "object"
}
},
"additionalProperties": false,
"description": "A provider profile (``kind: lca_mapping_profile``): how one background\nprovider (an ecoinvent release and system model, an open database) names the activities for\nthe flows a study takes, matched by the flowsheet's own terms (a key, a utility kind), so a\nstudy changes provider by selecting another profile. Names only: never a factor or a result\nof the provider, so it may be committed when the provider's terms allow its names.",
"properties": {
"schema": {
"description": "Always cheme/lca/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "lca_mapping_profile",
"title": "Kind",
"type": "string"
},
"id": {
"pattern": "^[A-Za-z0-9_.\\-]+$",
"title": "Id",
"type": "string"
},
"provider": {
"description": "e.g. ecoinvent, USLCI.",
"minLength": 1,
"title": "Provider",
"type": "string"
},
"version": {
"default": "",
"description": "e.g. 3.11.",
"title": "Version",
"type": "string"
},
"system_model": {
"default": "",
"description": "e.g. cutoff, apos.",
"title": "System Model",
"type": "string"
},
"entries": {
"items": {
"$ref": "#/$defs/ProfileEntry"
},
"minItems": 1,
"title": "Entries",
"type": "array"
}
},
"required": [
"schema",
"kind",
"id",
"provider",
"entries"
],
"title": "MappingProfile",
"type": "object"
}
adapter-result¶
File: process/simulation-run.json cases; --json. Model: chemeascode.foundation.schemas.run.AdapterResult.
One run of an adapter for one case.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
cheme/adapter-result/v1 |
"cheme/adapter-result/v1" |
||
case |
string | yes | ||
status |
converged | not-converged | refused | failed |
yes | ||
solver |
Solver | yes | ||
model_fingerprint |
string or null | null |
The fingerprint of the translated inputs; null where the adapter fingerprints each value instead. | |
inputs |
Revision | |||
iterations |
integer or null | null |
||
messages |
list of string | |||
units |
list of UnitResult | |||
streams |
list of StreamResult | |||
findings |
list of object |
JSON Schema: cheme schema adapter-result
{
"$defs": {
"Revision": {
"additionalProperties": true,
"description": "The inputs as they were (``foundation.provenance.SourceRevision.as_dict``).",
"properties": {
"commit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Commit"
},
"dirty": {
"items": {
"type": "string"
},
"title": "Dirty",
"type": "array"
},
"fingerprints": {
"additionalProperties": {
"type": "string"
},
"title": "Fingerprints",
"type": "object"
}
},
"title": "Revision",
"type": "object"
},
"Solver": {
"additionalProperties": true,
"description": "The solver that ran.",
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Version"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The property package, equation of state or rule set.",
"title": "Method"
}
},
"required": [
"name"
],
"title": "Solver",
"type": "object"
},
"StreamResult": {
"additionalProperties": true,
"description": "One stream: the values the adapter calculated, and those it wrote (``filled``).",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"values": {
"additionalProperties": true,
"title": "Values",
"type": "object"
},
"filled": {
"items": {
"type": "string"
},
"title": "Filled",
"type": "array"
}
},
"required": [
"id"
],
"title": "StreamResult",
"type": "object"
},
"UnitResult": {
"additionalProperties": true,
"description": "One step or block: ``status`` simulated, excluded, not-solved, ...",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"status": {
"title": "Status",
"type": "string"
},
"converged": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Converged"
},
"results": {
"additionalProperties": true,
"title": "Results",
"type": "object"
}
},
"required": [
"id",
"status"
],
"title": "UnitResult",
"type": "object"
}
},
"additionalProperties": true,
"description": "One run of an adapter for one case.",
"properties": {
"schema": {
"const": "cheme/adapter-result/v1",
"default": "cheme/adapter-result/v1",
"title": "Schema",
"type": "string"
},
"case": {
"title": "Case",
"type": "string"
},
"status": {
"enum": [
"converged",
"not-converged",
"refused",
"failed"
],
"title": "Status",
"type": "string"
},
"solver": {
"$ref": "#/$defs/Solver"
},
"model_fingerprint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The fingerprint of the translated inputs; null where the adapter fingerprints each value instead.",
"title": "Model Fingerprint"
},
"inputs": {
"$ref": "#/$defs/Revision"
},
"iterations": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Iterations"
},
"messages": {
"items": {
"type": "string"
},
"title": "Messages",
"type": "array"
},
"units": {
"items": {
"$ref": "#/$defs/UnitResult"
},
"title": "Units",
"type": "array"
},
"streams": {
"items": {
"$ref": "#/$defs/StreamResult"
},
"title": "Streams",
"type": "array"
},
"findings": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Findings",
"type": "array"
}
},
"required": [
"case",
"status",
"solver"
],
"title": "AdapterResult",
"type": "object"
}
risk-matrix¶
File: safety/risk-matrix.yaml. Model: chemeascode.domains.safety.schemas.RiskMatrix.
A risk matrix: explicit bands, grades and cells, each cell a band per category.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/risk-matrix/v1. | |
kind |
risk-matrix |
yes | ||
id |
string | yes | ||
title |
string | "" |
||
example |
boolean | false |
True: illustrative data, not a company's risk criteria (validate says so for every study that uses it; gate hazop no-example fails). | |
source |
string | "" |
Where the criteria come from (a procedure). | |
status |
proposed | accepted |
"proposed" |
proposed (the default) until the owner's team accepts the criteria for the studies (accepted); a study rated against a proposed matrix stays a draft. | |
accepted_by |
string | "" |
Who accepted it, and the procedure. | |
bands |
list of Band | yes | Lowest risk first: the band order. | |
likelihood |
list of Likelihood | yes | Least likely first. | |
severity |
list of Severity | yes | Least severe first. | |
categories |
list of Category | yes | ||
cells |
map of map of string or null | null |
Severity code -> likelihood code -> band id. | |
notes |
string | "" |
JSON Schema: cheme schema risk-matrix
{
"$defs": {
"Band": {
"additionalProperties": false,
"description": "A risk band, and what it asks of the study.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"requires_action": {
"default": false,
"description": "A scenario in this band needs an action (validate: hazop-action-required).",
"title": "Requires Action",
"type": "boolean"
}
},
"required": [
"id"
],
"title": "Band",
"type": "object"
},
"Category": {
"additionalProperties": false,
"description": "A category a consequence is rated in (people, environment, asset, reputation, ...).",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"cells": {
"anyOf": [
{
"additionalProperties": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "This category's own cells; none: the matrix's cells.",
"title": "Cells"
}
},
"required": [
"id"
],
"title": "Category",
"type": "object"
},
"Likelihood": {
"additionalProperties": false,
"description": "A likelihood grade.",
"properties": {
"code": {
"title": "Code",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"description": {
"default": "",
"description": "What the grade means, e.g. a frequency.",
"title": "Description",
"type": "string"
}
},
"required": [
"code"
],
"title": "Likelihood",
"type": "object"
},
"Severity": {
"additionalProperties": false,
"description": "A severity grade, described per category.",
"properties": {
"code": {
"title": "Code",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"descriptions": {
"additionalProperties": {
"type": "string"
},
"description": "By category id: what this grade means there.",
"title": "Descriptions",
"type": "object"
}
},
"required": [
"code"
],
"title": "Severity",
"type": "object"
}
},
"additionalProperties": false,
"description": "A risk matrix: explicit bands, grades and cells, each cell a band per category.",
"properties": {
"schema": {
"description": "Always cheme/risk-matrix/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "risk-matrix",
"title": "Kind",
"type": "string"
},
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"example": {
"default": false,
"description": "True: illustrative data, not a company's risk criteria (validate says so for every study that uses it; gate hazop no-example fails).",
"title": "Example",
"type": "boolean"
},
"source": {
"default": "",
"description": "Where the criteria come from (a procedure).",
"title": "Source",
"type": "string"
},
"status": {
"default": "proposed",
"description": "proposed (the default) until the owner's team accepts the criteria for the studies (accepted); a study rated against a proposed matrix stays a draft.",
"enum": [
"proposed",
"accepted"
],
"title": "Status",
"type": "string"
},
"accepted_by": {
"default": "",
"description": "Who accepted it, and the procedure.",
"title": "Accepted By",
"type": "string"
},
"bands": {
"description": "Lowest risk first: the band order.",
"items": {
"$ref": "#/$defs/Band"
},
"minItems": 1,
"title": "Bands",
"type": "array"
},
"likelihood": {
"description": "Least likely first.",
"items": {
"$ref": "#/$defs/Likelihood"
},
"minItems": 1,
"title": "Likelihood",
"type": "array"
},
"severity": {
"description": "Least severe first.",
"items": {
"$ref": "#/$defs/Severity"
},
"minItems": 1,
"title": "Severity",
"type": "array"
},
"categories": {
"items": {
"$ref": "#/$defs/Category"
},
"minItems": 1,
"title": "Categories",
"type": "array"
},
"cells": {
"anyOf": [
{
"additionalProperties": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Severity code -> likelihood code -> band id.",
"title": "Cells"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"schema",
"kind",
"id",
"bands",
"likelihood",
"severity",
"categories"
],
"title": "RiskMatrix",
"type": "object"
}
hazop-study¶
File: safety/hazop/<id>/study.yaml. Model: chemeascode.domains.safety.schemas.HazopStudy.
A HAZOP study: scope, analysed inputs, nodes, deviations, scenarios, safeguards, actions.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string | yes | Always cheme/hazop-study/v1. | |
kind |
hazop-study |
yes | ||
id |
string | yes | The study's directory name under safety/hazop/. | |
title |
string | "" |
||
example |
boolean | false |
True: an illustrative study, not an assessment of a plant (it stays a draft whatever it holds). | |
scope |
string | "" |
||
modes |
list of Mode | |||
analysed |
list of Basis | The files the study analyses (P&IDs, control data), each at the revision analysed (sha256:<hex> or a commit); a later change asks for reassessment. | ||
risk_matrix |
string or null | null |
The matrix file from the repository root. | |
assessment_basis |
string | "" |
How risk is ranked: initial and residual, what is credited. | |
team |
list of Member | |||
nodes |
list of Node | |||
safeguards |
list of Safeguard | |||
actions |
list of Action | |||
notes |
string | "" |
||
extensions |
object |
JSON Schema: cheme schema hazop-study
{
"$defs": {
"Action": {
"additionalProperties": false,
"description": "A recommendation of the study and what became of it.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"text": {
"minLength": 1,
"title": "Text",
"type": "string"
},
"owner": {
"default": "",
"title": "Owner",
"type": "string"
},
"due": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Due"
},
"status": {
"default": "proposed",
"enum": [
"proposed",
"open",
"closed",
"rejected"
],
"title": "Status",
"type": "string"
},
"response": {
"default": "",
"description": "How it was closed, or why it was rejected.",
"title": "Response",
"type": "string"
},
"by": {
"default": "",
"title": "By",
"type": "string"
}
},
"required": [
"id",
"text"
],
"title": "Action",
"type": "object"
},
"BandInputs": {
"additionalProperties": false,
"description": "The inputs a band was looked up from, as the lookup saw them.",
"properties": {
"matrix": {
"description": "The matrix fingerprint.",
"title": "Matrix",
"type": "string"
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The category it was looked up in (written since 0.9.0; without it, the category is the one of the matrix's whose fingerprint matches).",
"title": "Category"
},
"severity": {
"title": "Severity",
"type": "string"
},
"likelihood": {
"title": "Likelihood",
"type": "string"
}
},
"required": [
"matrix",
"severity",
"likelihood"
],
"title": "BandInputs",
"type": "object"
},
"Basis": {
"additionalProperties": false,
"description": "One source an artifact rests on, at the revision it was looked at.",
"properties": {
"path": {
"description": "File or directory from the repository root (process/).",
"minLength": 1,
"title": "Path",
"type": "string"
},
"revision": {
"description": "A commit sha, or sha256:<hex> of the file's content, when it was used.",
"title": "Revision",
"type": "string"
},
"relation": {
"default": "depends-on",
"description": "derived-from, represents, analyses or depends-on.",
"enum": [
"derived-from",
"represents",
"analyses",
"depends-on"
],
"title": "Relation",
"type": "string"
}
},
"required": [
"path",
"revision"
],
"title": "Basis",
"type": "object"
},
"CalculatedBand": {
"additionalProperties": false,
"description": "The band ``cheme safety hazop rate`` looked up; never edited by hand.",
"properties": {
"value": {
"title": "Value",
"type": "string"
},
"provenance": {
"const": "calculated",
"default": "calculated",
"title": "Provenance",
"type": "string"
},
"source": {
"description": "cheme safety hazop rate: <matrix id> (<matrix file>)",
"title": "Source",
"type": "string"
},
"fingerprint": {
"description": "Of the matrix and the codes it was looked up from.",
"title": "Fingerprint",
"type": "string"
},
"inputs": {
"anyOf": [
{
"$ref": "#/$defs/BandInputs"
},
{
"type": "null"
}
],
"default": null,
"description": "What it was looked up from: the matrix fingerprint, the category and the codes (written since 0.9; a band without it is checked by its fingerprint alone)."
}
},
"required": [
"value",
"source",
"fingerprint"
],
"title": "CalculatedBand",
"type": "object"
},
"Deviation": {
"additionalProperties": false,
"description": "A guide word applied to a parameter of the node's design intent.",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Id"
},
"guide_word": {
"enum": [
"no",
"more",
"less",
"as-well-as",
"part-of",
"reverse",
"other-than",
"early",
"late",
"before",
"after"
],
"title": "Guide Word",
"type": "string"
},
"parameter": {
"description": "flow, pressure, temperature, level, ...",
"minLength": 1,
"title": "Parameter",
"type": "string"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"scenarios": {
"items": {
"$ref": "#/$defs/Scenario"
},
"title": "Scenarios",
"type": "array"
},
"notes": {
"default": "",
"description": "e.g. why no cause is credible.",
"title": "Notes",
"type": "string"
}
},
"required": [
"guide_word",
"parameter"
],
"title": "Deviation",
"type": "object"
},
"Member": {
"additionalProperties": false,
"properties": {
"name": {
"minLength": 1,
"title": "Name",
"type": "string"
},
"role": {
"default": "",
"title": "Role",
"type": "string"
}
},
"required": [
"name"
],
"title": "Member",
"type": "object"
},
"Mode": {
"additionalProperties": false,
"description": "An operating mode the study covers.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
}
},
"required": [
"id"
],
"title": "Mode",
"type": "object"
},
"Node": {
"additionalProperties": false,
"description": "A study node: a part of the plant with one design intent.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"design_intent": {
"default": "",
"title": "Design Intent",
"type": "string"
},
"members": {
"description": "The plant items of the node.",
"items": {
"$ref": "#/$defs/PlantRef"
},
"title": "Members",
"type": "array"
},
"modes": {
"description": "Operating mode ids; none: all.",
"items": {
"type": "string"
},
"title": "Modes",
"type": "array"
},
"deviations": {
"items": {
"$ref": "#/$defs/Deviation"
},
"title": "Deviations",
"type": "array"
},
"status": {
"default": "proposed",
"enum": [
"proposed",
"accepted"
],
"title": "Status",
"type": "string"
},
"by": {
"default": "",
"title": "By",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"extensions": {
"additionalProperties": true,
"title": "Extensions",
"type": "object"
}
},
"required": [
"id"
],
"title": "Node",
"type": "object"
},
"PlantRef": {
"additionalProperties": false,
"description": "A plant item: a printed tag (equipment, instrument, piping item or line number), on a\ngiven sheet where the tag alone is ambiguous, or a DEXPI object id on a sheet.",
"properties": {
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tag"
},
"sheet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "plant.yaml sheet id, e.g. P-01.",
"title": "Sheet"
},
"object": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "DEXPI XML id on that sheet.",
"title": "Object"
}
},
"title": "PlantRef",
"type": "object"
},
"Rating": {
"additionalProperties": false,
"description": "Severity and likelihood of a scenario in one category: authored, with their basis.",
"properties": {
"category": {
"title": "Category",
"type": "string"
},
"severity": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "None: not rated yet.",
"title": "Severity"
},
"likelihood": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "None: not rated yet.",
"title": "Likelihood"
},
"basis": {
"default": "",
"description": "Why these codes: the outcome, the frequency.",
"title": "Basis",
"type": "string"
},
"evidence": {
"description": "Files, D-NNN, documents.",
"items": {
"type": "string"
},
"title": "Evidence",
"type": "array"
},
"status": {
"default": "proposed",
"enum": [
"proposed",
"accepted"
],
"title": "Status",
"type": "string"
},
"by": {
"default": "",
"description": "Who proposed or accepted it.",
"title": "By",
"type": "string"
},
"band": {
"anyOf": [
{
"$ref": "#/$defs/CalculatedBand"
},
{
"type": "null"
}
],
"default": null,
"description": "Written by cheme safety hazop rate --write."
}
},
"required": [
"category"
],
"title": "Rating",
"type": "object"
},
"Risk": {
"additionalProperties": false,
"description": "A scenario's ratings: before its safeguards and, separately, with them.",
"properties": {
"initial": {
"description": "Before the safeguards.",
"items": {
"$ref": "#/$defs/Rating"
},
"title": "Initial",
"type": "array"
},
"residual": {
"description": "With the safeguards, as the team rates it (never derived from them).",
"items": {
"$ref": "#/$defs/Rating"
},
"title": "Residual",
"type": "array"
}
},
"title": "Risk",
"type": "object"
},
"Safeguard": {
"additionalProperties": false,
"description": "Something that prevents a cause, or stops or mitigates its consequence.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"minLength": 1,
"title": "Title",
"type": "string"
},
"kind": {
"default": "other",
"enum": [
"control",
"alarm",
"interlock",
"relief",
"check-valve",
"mechanical",
"procedural",
"other"
],
"title": "Kind",
"type": "string"
},
"refs": {
"description": "Its devices: tags on the P&IDs.",
"items": {
"$ref": "#/$defs/PlantRef"
},
"title": "Refs",
"type": "array"
},
"interlock": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Its id in control/cause-effect.yaml.",
"title": "Interlock"
},
"status": {
"default": "proposed",
"enum": [
"proposed",
"accepted"
],
"title": "Status",
"type": "string"
},
"by": {
"default": "",
"title": "By",
"type": "string"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
}
},
"required": [
"id",
"title"
],
"title": "Safeguard",
"type": "object"
},
"Scenario": {
"additionalProperties": false,
"description": "One cause of a deviation leading to one consequence: a worksheet row.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"cause": {
"minLength": 1,
"title": "Cause",
"type": "string"
},
"consequence": {
"default": "",
"title": "Consequence",
"type": "string"
},
"refs": {
"description": "Plant items of the cause and the consequence.",
"items": {
"$ref": "#/$defs/PlantRef"
},
"title": "Refs",
"type": "array"
},
"modes": {
"description": "Operating mode ids; none: all.",
"items": {
"type": "string"
},
"title": "Modes",
"type": "array"
},
"safeguards": {
"description": "Safeguard ids.",
"items": {
"type": "string"
},
"title": "Safeguards",
"type": "array"
},
"actions": {
"description": "Action ids.",
"items": {
"type": "string"
},
"title": "Actions",
"type": "array"
},
"risk": {
"anyOf": [
{
"$ref": "#/$defs/Risk"
},
{
"type": "null"
}
],
"default": null
},
"status": {
"default": "proposed",
"enum": [
"proposed",
"accepted"
],
"title": "Status",
"type": "string"
},
"by": {
"default": "",
"title": "By",
"type": "string"
},
"evidence": {
"items": {
"type": "string"
},
"title": "Evidence",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"extensions": {
"additionalProperties": true,
"title": "Extensions",
"type": "object"
}
},
"required": [
"id",
"cause"
],
"title": "Scenario",
"type": "object"
}
},
"additionalProperties": false,
"description": "A HAZOP study: scope, analysed inputs, nodes, deviations, scenarios, safeguards, actions.",
"properties": {
"schema": {
"description": "Always cheme/hazop-study/v1.",
"title": "Schema",
"type": "string"
},
"kind": {
"const": "hazop-study",
"title": "Kind",
"type": "string"
},
"id": {
"description": "The study's directory name under safety/hazop/.",
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"example": {
"default": false,
"description": "True: an illustrative study, not an assessment of a plant (it stays a draft whatever it holds).",
"title": "Example",
"type": "boolean"
},
"scope": {
"default": "",
"title": "Scope",
"type": "string"
},
"modes": {
"items": {
"$ref": "#/$defs/Mode"
},
"title": "Modes",
"type": "array"
},
"analysed": {
"description": "The files the study analyses (P&IDs, control data), each at the revision analysed (sha256:<hex> or a commit); a later change asks for reassessment.",
"items": {
"$ref": "#/$defs/Basis"
},
"title": "Analysed",
"type": "array"
},
"risk_matrix": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The matrix file from the repository root.",
"title": "Risk Matrix"
},
"assessment_basis": {
"default": "",
"description": "How risk is ranked: initial and residual, what is credited.",
"title": "Assessment Basis",
"type": "string"
},
"team": {
"items": {
"$ref": "#/$defs/Member"
},
"title": "Team",
"type": "array"
},
"nodes": {
"items": {
"$ref": "#/$defs/Node"
},
"title": "Nodes",
"type": "array"
},
"safeguards": {
"items": {
"$ref": "#/$defs/Safeguard"
},
"title": "Safeguards",
"type": "array"
},
"actions": {
"items": {
"$ref": "#/$defs/Action"
},
"title": "Actions",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"extensions": {
"additionalProperties": true,
"title": "Extensions",
"type": "object"
}
},
"required": [
"schema",
"kind",
"id"
],
"title": "HazopStudy",
"type": "object"
}
narrative¶
File: process/narrative.md (front matter). Model: chemeascode.domains.control.schemas.Narrative.
Process narrative: the sections the text describes.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/narrative/v1; optional (a file without it reads as cheme/narrative/v1). | |
sections |
list of Section | |||
basis |
list of Basis | |||
unresolved |
list of string |
JSON Schema: cheme schema narrative
{
"$defs": {
"Basis": {
"additionalProperties": false,
"description": "One source an artifact rests on, at the revision it was looked at.",
"properties": {
"path": {
"description": "File or directory from the repository root (process/).",
"minLength": 1,
"title": "Path",
"type": "string"
},
"revision": {
"description": "A commit sha, or sha256:<hex> of the file's content, when it was used.",
"title": "Revision",
"type": "string"
},
"relation": {
"default": "depends-on",
"description": "derived-from, represents, analyses or depends-on.",
"enum": [
"derived-from",
"represents",
"analyses",
"depends-on"
],
"title": "Relation",
"type": "string"
}
},
"required": [
"path",
"revision"
],
"title": "Basis",
"type": "object"
},
"Section": {
"additionalProperties": false,
"description": "A process section of the narrative: a heading ``## <id> <title>`` in its body.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"equipment": {
"description": "Its tags.",
"items": {
"type": "string"
},
"title": "Equipment",
"type": "array"
},
"blocks": {
"description": "Its blocks or steps of process/flowsheet.yaml.",
"items": {
"type": "string"
},
"title": "Blocks",
"type": "array"
},
"cases": {
"items": {
"type": "string"
},
"title": "Cases",
"type": "array"
},
"modes": {
"description": "normal, startup, shutdown, ...",
"items": {
"type": "string"
},
"title": "Modes",
"type": "array"
},
"loops": {
"items": {
"type": "string"
},
"title": "Loops",
"type": "array"
},
"sequences": {
"items": {
"type": "string"
},
"title": "Sequences",
"type": "array"
},
"interlocks": {
"items": {
"type": "string"
},
"title": "Interlocks",
"type": "array"
}
},
"required": [
"id"
],
"title": "Section",
"type": "object"
}
},
"additionalProperties": false,
"description": "Process narrative: the sections the text describes.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/narrative/v1; optional (a file without it reads as cheme/narrative/v1).",
"title": "Schema"
},
"sections": {
"items": {
"$ref": "#/$defs/Section"
},
"title": "Sections",
"type": "array"
},
"basis": {
"items": {
"$ref": "#/$defs/Basis"
},
"title": "Basis",
"type": "array"
},
"unresolved": {
"items": {
"type": "string"
},
"title": "Unresolved",
"type": "array"
}
},
"title": "Narrative",
"type": "object"
}
control_philosophy¶
File: control/philosophy.md (front matter). Model: chemeascode.domains.control.schemas.Philosophy.
Control philosophy: objectives and failures the text describes.
By id, with the loops, sequences and interlocks they rest on.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
string or null | null |
cheme/control_philosophy/v1; optional (a file without it reads as cheme/control_philosophy/v1). | |
objectives |
list of Objective | |||
failures |
list of Failure | |||
basis |
list of Basis | |||
unresolved |
list of string |
JSON Schema: cheme schema control_philosophy
{
"$defs": {
"Basis": {
"additionalProperties": false,
"description": "One source an artifact rests on, at the revision it was looked at.",
"properties": {
"path": {
"description": "File or directory from the repository root (process/).",
"minLength": 1,
"title": "Path",
"type": "string"
},
"revision": {
"description": "A commit sha, or sha256:<hex> of the file's content, when it was used.",
"title": "Revision",
"type": "string"
},
"relation": {
"default": "depends-on",
"description": "derived-from, represents, analyses or depends-on.",
"enum": [
"derived-from",
"represents",
"analyses",
"depends-on"
],
"title": "Relation",
"type": "string"
}
},
"required": [
"path",
"revision"
],
"title": "Basis",
"type": "object"
},
"Failure": {
"additionalProperties": false,
"description": "An equipment or utility failure and the designed response.",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"description": "e.g. loss of instrument air.",
"minLength": 1,
"title": "Title",
"type": "string"
},
"response": {
"default": "",
"title": "Response",
"type": "string"
},
"loops": {
"items": {
"type": "string"
},
"title": "Loops",
"type": "array"
},
"sequences": {
"items": {
"type": "string"
},
"title": "Sequences",
"type": "array"
},
"interlocks": {
"items": {
"type": "string"
},
"title": "Interlocks",
"type": "array"
}
},
"required": [
"id",
"title"
],
"title": "Failure",
"type": "object"
},
"Objective": {
"additionalProperties": false,
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"title": {
"minLength": 1,
"title": "Title",
"type": "string"
},
"loops": {
"items": {
"type": "string"
},
"title": "Loops",
"type": "array"
}
},
"required": [
"id",
"title"
],
"title": "Objective",
"type": "object"
}
},
"additionalProperties": false,
"description": "Control philosophy: objectives and failures the text describes.\n\nBy id, with the loops, sequences and interlocks they rest on.",
"properties": {
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme/control_philosophy/v1; optional (a file without it reads as cheme/control_philosophy/v1).",
"title": "Schema"
},
"objectives": {
"items": {
"$ref": "#/$defs/Objective"
},
"title": "Objectives",
"type": "array"
},
"failures": {
"items": {
"$ref": "#/$defs/Failure"
},
"title": "Failures",
"type": "array"
},
"basis": {
"items": {
"$ref": "#/$defs/Basis"
},
"title": "Basis",
"type": "array"
},
"unresolved": {
"items": {
"type": "string"
},
"title": "Unresolved",
"type": "array"
}
},
"title": "Philosophy",
"type": "object"
}
process-run¶
File: runs/<run-id>/run.yaml. Model: chemeascode.foundation.schemas.run_record.RunRecord.
Record of one design session: who ran it, on which commits, at what cost, with what.
| field | type | required | default | description |
|---|---|---|---|---|
schema |
process-run/v1 |
yes | process-run/v1 | |
run_id |
string | yes | Also the folder name. | |
process |
string | yes | The plant repository's folder name. | |
kind |
agent | interactive | manual |
yes | agent, interactive or manual. | |
complete |
boolean | yes | False when any fact below is missing. | |
incomplete_notes |
list of string | |||
task_file |
string or null | null |
Where task.md was copied from. | |
branch |
string or null | null |
||
start_commit |
string or null | null |
HEAD at the session's start. | |
end_commit |
string or null | null |
HEAD at the end, before the record's own commit. | |
started |
string or null | null |
||
finished |
string or null | null |
||
wall_s |
number or null | null |
||
cost_usd |
number or null | null |
Only as reported, never estimated. | |
cost_source |
api or null |
null |
||
budget_usd |
number or null | null |
||
model |
string or null | null |
||
effort |
string or null | null |
||
num_turns |
integer or null | null |
Distinct assistant API messages. | |
tokens |
Tokens or null | null |
||
session_id |
string or null | null |
||
session_export |
SessionExport or null | null |
||
tools |
Tools | |||
checks_by_agent |
list of string | Distinct cheme commands the session ran. | ||
checks_after_run |
list of CheckAfterRun | |||
outcome |
Outcome | |||
observed_later |
object |
JSON Schema: cheme schema process-run
{
"$defs": {
"CheckAfterRun": {
"additionalProperties": false,
"description": "A check run by the recorder at the end of the session.",
"properties": {
"command": {
"title": "Command",
"type": "string"
},
"exit": {
"title": "Exit",
"type": "integer"
},
"summary": {
"additionalProperties": true,
"title": "Summary",
"type": "object"
}
},
"required": [
"command",
"exit"
],
"title": "CheckAfterRun",
"type": "object"
},
"Outcome": {
"additionalProperties": false,
"description": "How the session ended.",
"properties": {
"result": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "e.g. success, error_max_turns.",
"title": "Result"
},
"report": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "report.md when there is one.",
"title": "Report"
}
},
"title": "Outcome",
"type": "object"
},
"Runner": {
"additionalProperties": false,
"description": "The external program that ran the session (as it says about itself).",
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"commit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Its commit, when it knows one.",
"title": "Commit"
},
"dirty": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Uncommitted changes in its checkout.",
"title": "Dirty"
}
},
"title": "Runner",
"type": "object"
},
"SessionExport": {
"additionalProperties": false,
"description": "The transcript in the run folder: gzip (mtime 0) of the JSONL.",
"properties": {
"file": {
"description": "session.jsonl.gz",
"title": "File",
"type": "string"
},
"sha256": {
"description": "Of the gzip bytes.",
"pattern": "^[0-9a-f]{64}$",
"title": "Sha256",
"type": "string"
}
},
"required": [
"file",
"sha256"
],
"title": "SessionExport",
"type": "object"
},
"Tokens": {
"additionalProperties": false,
"description": "Tokens of the session, each API message counted once.",
"properties": {
"input": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Input"
},
"output": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Output"
},
"thinking": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Null when never reported.",
"title": "Thinking"
},
"cache_read": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Cache Read"
},
"cache_write": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Cache Write"
}
},
"title": "Tokens",
"type": "object"
},
"Tools": {
"additionalProperties": false,
"description": "The software that produced the run; a version nobody knows is null.",
"properties": {
"cheme": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "cheme-as-code version.",
"title": "Cheme"
},
"core_commit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Commit of the installed cheme-as-code: from git, or HEAD of the source checkout of an editable or local install.",
"title": "Core Commit"
},
"core_dirty": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Uncommitted changes in that checkout (untracked files count).",
"title": "Core Dirty"
},
"pydexpi": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "pyDEXPI version.",
"title": "Pydexpi"
},
"claude_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Claude Code version: the transcript's, else `claude --version`.",
"title": "Claude Code"
},
"claude_agent_sdk": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Claude Agent SDK version, as the runner passed it.",
"title": "Claude Agent Sdk"
},
"runner": {
"anyOf": [
{
"$ref": "#/$defs/Runner"
},
{
"type": "null"
}
],
"default": null,
"description": "The runner, when one passed it."
},
"same_revision": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "True when cheme-as-code and the runner ran from the same clean commit; False when the commits differ or either checkout had changes; null when either is unknown.",
"title": "Same Revision"
}
},
"title": "Tools",
"type": "object"
}
},
"additionalProperties": false,
"description": "Record of one design session: who ran it, on which commits, at what cost, with what.",
"properties": {
"schema": {
"const": "process-run/v1",
"description": "process-run/v1",
"title": "Schema",
"type": "string"
},
"run_id": {
"description": "Also the folder name.",
"pattern": "^\\d{8}-\\d{6}(-[a-z0-9][a-z0-9-]*)?$",
"title": "Run Id",
"type": "string"
},
"process": {
"description": "The plant repository's folder name.",
"title": "Process",
"type": "string"
},
"kind": {
"description": "agent, interactive or manual.",
"enum": [
"agent",
"interactive",
"manual"
],
"title": "Kind",
"type": "string"
},
"complete": {
"description": "False when any fact below is missing.",
"title": "Complete",
"type": "boolean"
},
"incomplete_notes": {
"items": {
"type": "string"
},
"title": "Incomplete Notes",
"type": "array"
},
"task_file": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Where task.md was copied from.",
"title": "Task File"
},
"branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Branch"
},
"start_commit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "HEAD at the session's start.",
"title": "Start Commit"
},
"end_commit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "HEAD at the end, before the record's own commit.",
"title": "End Commit"
},
"started": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Started"
},
"finished": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Finished"
},
"wall_s": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Wall S"
},
"cost_usd": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Only as reported, never estimated.",
"title": "Cost Usd"
},
"cost_source": {
"anyOf": [
{
"const": "api",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cost Source"
},
"budget_usd": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Budget Usd"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Model"
},
"effort": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Effort"
},
"num_turns": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Distinct assistant API messages.",
"title": "Num Turns"
},
"tokens": {
"anyOf": [
{
"$ref": "#/$defs/Tokens"
},
{
"type": "null"
}
],
"default": null
},
"session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Session Id"
},
"session_export": {
"anyOf": [
{
"$ref": "#/$defs/SessionExport"
},
{
"type": "null"
}
],
"default": null
},
"tools": {
"$ref": "#/$defs/Tools"
},
"checks_by_agent": {
"description": "Distinct cheme commands the session ran.",
"items": {
"type": "string"
},
"title": "Checks By Agent",
"type": "array"
},
"checks_after_run": {
"items": {
"$ref": "#/$defs/CheckAfterRun"
},
"title": "Checks After Run",
"type": "array"
},
"outcome": {
"$ref": "#/$defs/Outcome"
},
"observed_later": {
"additionalProperties": true,
"title": "Observed Later",
"type": "object"
}
},
"required": [
"schema",
"run_id",
"process",
"kind",
"complete"
],
"title": "RunRecord",
"type": "object"
}