You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RELOG/relog-web/src/casebuilder/validate.js

195 lines
4.9 KiB

const Ajv = require("ajv");
const ajv = new Ajv();
const schema = {
$schema: "http://json-schema.org/draft-07/schema#",
$id: "https://anl-ceeesa.github.io/RELOG/input",
title: "Schema for RELOG Input File",
definitions: {
TimeSeries: {
type: "array",
items: {
type: "number",
},
},
Parameters: {
type: "object",
properties: {
"time horizon (years)": {
type: "number",
},
"distance metric": {
type: "string",
},
},
required: ["time horizon (years)"],
},
Plant: {
type: "object",
additionalProperties: {
type: "object",
properties: {
input: {
type: "string",
},
"outputs (tonne/tonne)": {
type: "object",
additionalProperties: {
type: "number",
},
},
"energy (GJ/tonne)": {
$ref: "#/definitions/TimeSeries",
},
"emissions (tonne/tonne)": {
type: "object",
additionalProperties: {
$ref: "#/definitions/TimeSeries",
},
},
locations: {
$ref: "#/definitions/PlantLocation",
},
},
required: ["input", "locations"],
},
},
PlantLocation: {
type: "object",
additionalProperties: {
type: "object",
properties: {
location: {
type: "string",
},
"latitude (deg)": {
type: "number",
},
"longitude (deg)": {
type: "number",
},
disposal: {
type: "object",
additionalProperties: {
type: "object",
properties: {
"cost ($/tonne)": {
$ref: "#/definitions/TimeSeries",
},
"limit (tonne)": {
$ref: "#/definitions/TimeSeries",
},
},
required: ["cost ($/tonne)"],
},
},
storage: {
type: "object",
properties: {
"cost ($/tonne)": {
$ref: "#/definitions/TimeSeries",
},
"limit (tonne)": {
type: "number",
},
},
required: ["cost ($/tonne)", "limit (tonne)"],
},
"capacities (tonne)": {
type: "object",
additionalProperties: {
type: "object",
properties: {
"variable operating cost ($/tonne)": {
$ref: "#/definitions/TimeSeries",
},
"fixed operating cost ($)": {
$ref: "#/definitions/TimeSeries",
},
"opening cost ($)": {
$ref: "#/definitions/TimeSeries",
},
},
required: [
"variable operating cost ($/tonne)",
"fixed operating cost ($)",
"opening cost ($)",
],
},
},
},
required: ["capacities (tonne)"],
},
},
InitialAmount: {
type: "object",
additionalProperties: {
type: "object",
properties: {
location: {
type: "string",
},
"latitude (deg)": {
type: "number",
},
"longitude (deg)": {
type: "number",
},
"amount (tonne)": {
$ref: "#/definitions/TimeSeries",
},
},
required: ["amount (tonne)"],
},
},
Product: {
type: "object",
additionalProperties: {
type: "object",
properties: {
"transportation cost ($/km/tonne)": {
$ref: "#/definitions/TimeSeries",
},
"transportation energy (J/km/tonne)": {
$ref: "#/definitions/TimeSeries",
},
"transportation emissions (tonne/km/tonne)": {
type: "object",
additionalProperties: {
$ref: "#/definitions/TimeSeries",
},
},
"initial amounts": {
$ref: "#/definitions/InitialAmount",
},
"disposal limit (tonne)": {
$ref: "#/definitions/TimeSeries",
},
"disposal cost ($/tonne)": {
$ref: "#/definitions/TimeSeries",
},
"acquisition cost ($/tonne)": {
$ref: "#/definitions/TimeSeries",
},
},
required: ["transportation cost ($/km/tonne)"],
},
},
},
type: "object",
properties: {
parameters: {
$ref: "#/definitions/Parameters",
},
plants: {
$ref: "#/definitions/Plant",
},
products: {
$ref: "#/definitions/Product",
},
},
required: ["parameters", "plants", "products"],
};
export const validate = ajv.compile(schema);