let tension_type = [| 'High, 'Medium, 'Low, 'Ignored |] in
let horizon_type = [| 'Weeks, 'Months, 'Years, 'Continuous |] in

let state_type = {
  id          | String,
  name        | String,
  description | String,
  tension     | tension_type,
} in

let transition_type = {
  from      | String,
  to        | String,
  condition | String,
  catalyst  | String,
  blocker   | String,
  horizon   | horizon_type,
} in

let coupling_type = {
  origin      | String,
  destination | String,
  kind        | String,
  note        | String,
} in

{
  TensionLevel = tension_type,
  Horizon      = horizon_type,
  State        = state_type,
  Transition   = transition_type,
  Coupling     = coupling_type,

  Dimension = {
    id            | String,
    name          | String,
    description   | String,
    current_state | String,
    desired_state | String,
    horizon       | horizon_type,
    states        | Array state_type,
    transitions   | Array transition_type,
    coupled_with  | Array String | default = [],
  },

  StateConfig = {
    dimensions | Array {
      id            | String,
      name          | String,
      description   | String,
      current_state | String,
      desired_state | String,
      horizon       | horizon_type,
      states        | Array state_type,
      transitions   | Array transition_type,
      coupled_with  | Array String,
    },
  },
}
