Skip to content

Full JSON Schema

Below is the complete, verbatim Standard Flowsheet Format (SFF) JSON schema. You can copy this for your own tools or to validate your exported flowsheets.

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Standard Flowsheet Format (SFF)",
  "description": "A standard, machine-readable representation of a process flowsheet designed for interoperability and data exchange. It represents the process as a directed graph with rich data attached to both nodes (units) and edges (streams).",
  "type": "object",
  "properties": {
    "metadata": {
      "description": "Information about the source, context, and version of the flowsheet.",
      "type": "object",
      "properties": {
        "sff_version": {
          "type": "string",
          "description": "Version of the SFF schema used, e.g., '1.0'."
        },
        "TEA_currency": {
          "type": "string",
          "description": "Currency used to report cost results.",
          "default": "USD"
        },
        "TEA_year": {
          "type": "number",
          "description": "TEA year used to report cost results."
        },
        "source_doi": {
          "type": "string",
          "description": "Digital Object Identifier (DOI) of the source publication, if any."
        },
        "product_name": {
          "type": "string",
          "description": "The primary product of the process."
        },
        "organism": {
          "type": "string",
          "description": "The organism used for production, if applicable."
        },
        "process_title": {
          "type": "string",
          "description": "A descriptive title for the process."
        },
        "flowsheet_designers": {
          "type": "string",
          "description": "Name(s) of the authors who designed this flowsheet."
        }
      },
      "required": [
        "sff_version",
        "TEA_year"
      ]
    },
    "units": {
      "description": "An array of all unit operations, representing the nodes of the process graph.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "A unique identifier for this unit operation."
          },
          "unit_type": {
            "type": "string",
            "description": "A short description of the type of unit operation (e.g., 'Distillation', 'Solids centrifugation')."
          },
          "design_input_specs": {
            "type": "object",
            "description": "Design input specifications for the unit operation. If provided, these specifications -- combined with the provided compositions of streams entering this unit operation and the method described in 'design_simulation_method' -- should be sufficient to generate all design results, cost results, utility results, and compositions of all streams effluent from this unit operation."
          },
          "design_simulation_method": {
            "type": "string",
            "description": "Design and simulation method for the unit operation, (e.g., for distillation, this could be 'McCabe-Thiele', 'Fenske-Underwood-Gilliland', or 'MESH'). If provided, this method -- combined with the provided 'design_input_specs' and compositions of streams entering this unit operation -- should be sufficient to generate all design results, cost results, utility results, and compositions of all streams effluent from this unit operation."
          },
          "thermo_property_package": {
            "type": "object",
            "description": "A thermodynamic property package, with qualitative descriptions of property estimation methods.",
            "properties": {
              "id": {
                "type": "string"
              },
              "mixture": {
                "type": "string",
                "description": "Method for computing mixture properties (e.g., 'ideal mixture').",
                "default": "Ideal"
              },
              "gamma": {
                "type": "string",
                "description": "Method for computing activity coefficients (e.g., 'UNIFAC').",
                "default": "Ideal"
              },
              "phi": {
                "type": "string",
                "description": "Method for computing fugacity coefficients (e.g., 'Ideal').",
                "default": "Ideal"
              },
              "PCF": {
                "type": "string",
                "description": "Method for computing Poynting correction factors (e.g., 'None').",
                "default": "None"
              }
            },
            "additionalProperties": {
              "type": "string"
            }
          },
          "reactions": {
            "type": "array",
            "description": "Reactions occurring in this unit operation, each with the index (determining the order in which reactions occur, with identical index for parallel reactions), conversion, and the reactant for conversion.",
            "items": {
              "type": "object",
              "properties": {
                "index": {
                  "type": "integer"
                },
                "equation": {
                  "type": "string"
                },
                "reactant": {
                  "type": "string"
                },
                "conversion": {
                  "type": "number"
                }
              }
            }
          },
          "design_results": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            },
            "description": "Design results for this unit operation. This object, combined with design_input_specs, should provide a full design description for this unit operation (to the highest level of detail modeled)."
          },
          "purchase_costs": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            },
            "description": "Equipment purchase cost results for this unit operation. These may be for the entire unit operation or for individual unit operations (depending on the level of detail modeled)."
          },
          "installed_costs": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            },
            "description": "Equipment installed (purchase + installation) cost results for this unit operation. These may be for the entire unit operation or for individual unit operations (depending on the level of detail modeled)."
          },
          "utility_consumption_results": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            },
            "description": "Heating, cooling, and power utility demand results for this unit operation. These must refer to the same utility IDs as those detailed in the heat_utilities or power_utilities properties for this flowsheet."
          },
          "utility_production_results": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            },
            "description": "Heating, cooling, and power utility production results for this unit operation. These must refer to the same utility IDs as those detailed in the heat_utilities or power_utilities properties for this flowsheet."
          }
        },
        "required": [
          "id",
          "unit_type"
        ],
        "additionalProperties": false
      }
    },
    "streams": {
      "description": "An array of process streams that connect the units, representing the edges of the process graph.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "A unique identifier for this stream."
          },
          "source_unit_id": {
            "type": "string",
            "description": "The ID of the unit operation from which this stream originates."
          },
          "sink_unit_id": {
            "type": "string",
            "description": "The ID of the unit operation that this stream enters."
          },
          "stream_description": {
            "type": "string",
            "description": "A qualitative description of the stream from the perspective of either the source (e.g., 'Centrifugate') or sink unit operation (e.g., 'Make-up solvent')."
          },
          "price": {
            "type": "object",
            "properties": {
              "value": {
                "type": "number"
              },
              "units": {
                "type": "string",
                "default": "$/kg"
              }
            }
          },
          "stream_properties": {
            "description": "Structured object specifying the properties of the stream.",
            "type": "object",
            "properties": {
              "total_mass_flow": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "number"
                  },
                  "units": {
                    "type": "string",
                    "default": "kg/h"
                  }
                }
              },
              "total_volumetric_flow": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "number"
                  },
                  "units": {
                    "type": "string",
                    "default": "m3/h"
                  }
                }
              },
              "total_molar_flow": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "number"
                  },
                  "units": {
                    "type": "string",
                    "default": "kmol/h"
                  }
                }
              },
              "temperature": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "number",
                    "minimum": 0
                  },
                  "units": {
                    "type": "string",
                    "default": "K"
                  }
                }
              },
              "pressure": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "number"
                  },
                  "units": {
                    "type": "string",
                    "default": "Pa"
                  }
                }
              },
              "composition": {
                "description": "An array detailing the chemical components of the stream.",
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "phase": {
                      "type": "string",
                      "default": "l"
                    },
                    "component_name": {
                      "type": "string"
                    },
                    "mol_fraction": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    }
                  },
                  "required": [
                    "component_name",
                    "mol_fraction"
                  ]
                }
              }
            },
            "required": [
              "total_mass_flow",
              "total_volumetric_flow",
              "temperature",
              "pressure"
            ]
          }
        },
        "required": [
          "id",
          "source_unit_id",
          "sink_unit_id"
        ]
      }
    },
    "chemicals": {
      "description": "An array of all chemicals involved in this process flowsheet.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "A unique identifier for this chemical, used in the 'composition' property of stream objects."
          },
          "registry_id": {
            "type": "string",
            "description": "CAS number or SMILES string."
          }
        },
        "required": [
          "id",
          "registry_id"
        ],
        "additionalProperties": true
      }
    },
    "utilities": {
        "description": "An array of all heating, cooling, power, and other utility types involved in this flowsheet.",
        "type": "object",
        "properties": {
            "heat_utilities": {
              "description": "An array of all heating and cooling utility types involved in this process flowsheet. Combustion-based utility types (e.g., natural gas) should not be specified here and should instead be specified in 'other_utilities'.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "A unique identifier for this utility type (e.g., high-pressure steam)."
                  },
                  "temperature": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "number"
                      },
                      "units": {
                        "type": "string",
                        "default": "K"
                      }
                    }
                  },
                  "pressure": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "number"
                      },
                      "units": {
                        "type": "string",
                        "default": "Pa"
                      }
                    }
                  },
                  "regeneration_price": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "number",
                        "default": 0
                      },
                      "units": {
                        "type": "string",
                        "default": "$/kmol"
                      }
                    }
                  },
                  "heat_transfer_price": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "number",
                        "default": 0
                      },
                      "units": {
                        "type": "string",
                        "default": "$/kJ"
                      }
                    }
                  },
                  "heat_transfer_efficiency": {
                    "type": "number",
                    "default": 1
                  },
                  "temperature_limit": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "number"
                      },
                      "units": {
                        "type": "string",
                        "default": "K"
                      }
                    }
                  },
                  "composition": {
                    "description": "An array detailing the chemical components of the heating or cooling utility.",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "phase": {
                          "type": "string",
                          "default": "l"
                        },
                        "component_name": {
                          "type": "string"
                        },
                        "mol_fraction": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 1
                        }
                      },
                      "required": [
                        "component_name",
                        "mol_fraction"
                      ]
                    }
                  },
                  "units_for_utility_results": {
                    "type": "string",
                    "description": "Units (e.g., 'kJ/h') for the values associated with this utility in the 'utility_results' of unit operations in this flowsheet."
                  }
                },
                "required": [
                  "id",
                  "temperature",
                  "pressure",
                  "composition",
                  "units_for_utility_results"
                ],
                "additionalProperties": false
              }
            },
            "power_utilities": {
              "description": "An array of all power utility types involved in this process flowsheet.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "A unique identifier for this power utility type (e.g., 'marginal electricity')."
                  },
                  "price": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "number",
                        "default": 0
                      },
                      "units": {
                        "type": "string",
                        "default": "$/kWh"
                      }
                    }
                  },
                  "units_for_utility_results": {
                    "type": "string",
                    "description": "Units (e.g., 'kW') for the values associated with this utility in the 'utility_results' of unit operations in this flowsheet."
                  }
                },
                "required": [
                  "id",
                  "units_for_utility_results"
                ],
                "additionalProperties": {
                  "type": "number"
                }
              }
            },
            "other_utilities": {
              "description": "An array of all other utility types involved in this process flowsheet. Combustion-based utility types (e.g., natural gas) may be specified here.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "A unique identifier for this utility type (e.g., natural gas)."
                  },
                  "temperature": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "number"
                      },
                      "units": {
                        "type": "string",
                        "default": "K"
                      }
                    }
                  },
                  "pressure": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "number"
                      },
                      "units": {
                        "type": "string",
                        "default": "Pa"
                      }
                    }
                  },
                  "price": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "number",
                        "default": 0
                      },
                      "units": {
                        "type": "string",
                        "default": "$/kg"
                      }
                    }
                  },
                  "composition": {
                    "description": "An array detailing the chemical components of the utility.",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "phase": {
                          "type": "string",
                          "default": "l"
                        },
                        "component_name": {
                          "type": "string"
                        },
                        "mol_fraction": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 1
                        }
                      },
                      "required": [
                        "component_name",
                        "mol_fraction"
                      ]
                    }
                  },
                  "units_for_utility_results": {
                    "type": "string",
                    "description": "Units (e.g., 'kg/h') for the values associated with this utility in the 'utility_results' of unit operations in this flowsheet."
                  }
                },
                "required": [
                  "id",
                  "temperature",
                  "pressure",
                  "composition",
                  "units_for_utility_results"
                ],
                "additionalProperties": false
              }
            }
    }
  }
},
  "required": [
    "metadata",
    "units",
    "streams",
    "utilities"
  ]
}