Skip to content

JSON Schemas

The following JSON Schema files describe the structure of each JSON input file in a Novomodelo case directory. Point your editor’s JSON Schema validation setting at the appropriate file to get autocompletion, hover documentation, and inline error highlighting while authoring case inputs.

For a complete description of each file’s fields and validation rules, see the Case Format reference page.

Schema fileInput fileDescription
config.schema.jsonconfig.jsonStudy configuration: training parameters, stopping rules, cut selection, per-phase solver profiles, backward-scheduler parallelism, simulation settings, and export flags
penalties.schema.jsonpenalties.jsonGlobal penalty cost defaults for bus deficit, line exchange, hydro violations, and non-controllable source curtailment
stages.schema.jsonstages.jsonTemporal structure of the study: stage sequence, load blocks, and policy graph horizon
buses.schema.jsonsystem/buses.jsonElectrical bus registry: bus identifiers, names, and optional entity-level deficit cost tiers
lines.schema.jsonsystem/lines.jsonTransmission line registry: line identifiers, source/target buses, and directional MW capacity bounds
hydros.schema.jsonsystem/hydros.jsonHydro plant registry: reservoir bounds, outflow limits, generation model parameters, and cascade linkage
thermals.schema.jsonsystem/thermals.jsonThermal plant registry: generation bounds and linear cost coefficients
energy_contracts.schema.jsonsystem/energy_contracts.jsonBilateral energy contract registry (optional entities)
non_controllable_sources.schema.jsonsystem/non_controllable_sources.jsonIntermittent (non-dispatchable) generation source registry (optional entities)
pumping_stations.schema.jsonsystem/pumping_stations.jsonPumping station registry (optional entities)
production_models.schema.jsonsystem/hydro_production_models.jsonProduction model selection, FPHA hyperplane config, and per-stage productivity overrides (optional)
generic_parameters.schema.jsonconstraints/generic_parameters.jsonNamed study parameters — constant, per-stage, seasonal, computed, or per-(stage,block) values referenced by name from generic constraints
initial_conditions.schema.jsoninitial_conditions.jsonInitial reservoir storage and filling storage, recent inflow observations for PAR-lag initialization, past defluences (travel-time seed), and past anticipated commitments
correlation.schema.jsonscenarios/correlation.jsonInter-site correlation matrix for scenario generation (supports inflow, load, and NCS entity types)
generic_constraints.schema.jsonconstraints/generic_constraints.jsonUser-defined linear constraints authored via named expressions and interval bounds over LP variables, with optional slack penalties
load_factors.schema.jsonscenarios/load_factors.jsonBlock-level load scaling factors for bus-stage demand profiles
non_controllable_factors.schema.jsonscenarios/non_controllable_factors.jsonBlock-level NCS availability scaling factors per source per stage per block
post_study_stages.schema.jsonpost_study_stages.jsonPost-study boundary stages plus per-(thermal, post-study-stage) cost and min/max generation bounds

Every schema is served from this site at a stable URL, /schemas/<name>.schema.json (for example https://docs.novomodelo.invalid/schemas/config.schema.json), which serves the schemas of the novomodelo release the latest documentation describes. Each frozen documentation version in the header’s version picker serves the schemas of its own novomodelo release under its path, /vX.Y/schemas/<name>.schema.json. Point your editor’s JSON Schema mapping at the URL that matches the novomodelo release you run, for autocompletion and validation while authoring case inputs.

Add a json.schemas entry to your workspace .vscode/settings.json:

{
"json.schemas": [
{
"fileMatch": ["config.json"],
"url": "https://docs.novomodelo.invalid/schemas/config.schema.json"
},
{
"fileMatch": ["system/hydros.json"],
"url": "https://docs.novomodelo.invalid/schemas/hydros.schema.json"
}
]
}

Alternatively, add a $schema key directly inside each JSON file:

{
"$schema": "https://docs.novomodelo.invalid/schemas/config.schema.json",
"training": {
"selection": { "method": "sampled", "forward_passes": 192 },
"stopping_rules": [{ "type": "iteration_limit", "limit": 200 }]
}
}

Configure json.schemas in your nvim-lspconfig setup for jsonls following the same URL pattern shown above.

Go to Preferences > Languages & Frameworks > Schemas and DTDs > JSON Schema Mappings, add a new mapping, paste the schema URL, and select the file pattern.

These schemas are generated in the novomodelo repository from the novomodelo-io Rust types — the Rust types are the ground truth, and the schema files are their generated output, licensed Apache-2.0. This site vendors the copy generated at novomodelo v0.18.0 under public/schemas/ so the files have a stable URL to serve from and to link to.

Do not hand-edit any vendored schema file. When novomodelo regenerates the schemas (after a change to a novomodelo-io input type), re-vendor the committed copy here with (the command reads the v0.18.0 tag by default; -- --ref <tag> selects another):

Terminal window
npm run refresh:schemas

Run npm run refresh:schemas -- --check to verify the committed copy still matches the source tag without writing anything.