{
  "generatedFrom": "src/engine/yaml/format-dictionary.ts",
  "payloadVersion": "1.0",
  "note": "Generated by `npm run gen:format-keys` — do not edit. Every key of an Axmo model.yaml, per level. use: both = written and read; read = read only (legacy or hand-authored); retired = not used (ignored, warned about or refused, as its note says).",
  "levels": [
    {
      "id": "root",
      "title": "Top level",
      "path": "",
      "documentedIn": [
        "2",
        "2.1"
      ],
      "keys": [
        {
          "key": "axmo",
          "use": "both",
          "required": true,
          "values": [
            "\"1.0\""
          ],
          "enforced": "exact",
          "note": "Quoted: an unquoted 1.0 is a number and is refused."
        },
        {
          "key": "name",
          "use": "both",
          "required": false,
          "default": "\"Imported Model\"",
          "field": "name",
          "note": "Always written."
        },
        {
          "key": "description",
          "use": "both",
          "required": false,
          "default": "\"\"",
          "field": "description",
          "note": "Written when non-empty; a non-string reads as empty."
        },
        {
          "key": "exportedAt",
          "use": "both",
          "required": false,
          "default": "null",
          "field": "exportedAt",
          "note": "Always written, quoted ISO 8601. A non-string (an unquoted timestamp) reads as null."
        },
        {
          "key": "settings",
          "use": "both",
          "required": false,
          "note": "Written only when a setting is not at its default."
        },
        {
          "key": "dimensions",
          "use": "both",
          "required": false,
          "default": "no dimensions",
          "emptyMeans": "no entries",
          "field": "dims + sdtInstances",
          "note": "Always written. Name-keyed."
        },
        {
          "key": "series",
          "use": "both",
          "required": false,
          "default": "no series",
          "emptyMeans": "no entries",
          "field": "series",
          "note": "Always written. Name-keyed; read-only (system) series are not written."
        },
        {
          "key": "dataSources",
          "use": "both",
          "required": false,
          "emptyMeans": "no entries",
          "field": "dataSources",
          "note": "Name-keyed. Not written at the definition level or when empty."
        },
        {
          "key": "dataLoaders",
          "use": "both",
          "required": false,
          "emptyMeans": "no entries",
          "field": "seriesLoaders + dimensionGenerators",
          "note": "Name-keyed. Not written at the definition level or when empty."
        },
        {
          "key": "axisDefinitions",
          "use": "both",
          "required": false,
          "emptyMeans": "no entries",
          "field": "axisDefinitions",
          "note": "Name-keyed. Not written at the definition level or when empty."
        },
        {
          "key": "outputRanges",
          "use": "both",
          "required": false,
          "emptyMeans": "no entries",
          "field": "outputRanges",
          "note": "Name-keyed. Not written at the definition level or when empty."
        },
        {
          "key": "data",
          "use": "both",
          "required": false,
          "emptyMeans": "no entries",
          "note": "Address-keyed; complete level only. Export-only sidecar, not part of the definition."
        },
        {
          "key": "namedStructures",
          "use": "both",
          "required": false,
          "emptyMeans": "no entries",
          "note": "Name-keyed; complete level only. Export-only sidecar, not part of the definition."
        }
      ]
    },
    {
      "id": "settings",
      "title": "Model settings",
      "path": "settings",
      "documentedIn": [
        "2.1"
      ],
      "keys": [
        {
          "key": "allowCyclicProgressiveDataLoad",
          "use": "both",
          "required": false,
          "default": "false",
          "values": [
            "true",
            "false"
          ],
          "field": "allowCyclicProgressiveDataLoad",
          "note": "Written only when true; only the literal true is read as true."
        }
      ]
    },
    {
      "id": "dimension",
      "title": "Dimension",
      "path": "dimensions.<name>",
      "documentedIn": [
        "3.1",
        "3.2"
      ],
      "open": "The keys of its variant, chosen by type: a categorical or a sequential dimension.",
      "keys": [
        {
          "key": "type",
          "use": "both",
          "required": true,
          "values": [
            "categorical",
            "sequential"
          ],
          "enforced": "exact",
          "note": "Exact spelling; it decides which keys the rest of the mapping has."
        }
      ]
    },
    {
      "id": "categoricalDimension",
      "title": "Categorical dimension",
      "path": "dimensions.<name> (type: categorical)",
      "documentedIn": [
        "3.1"
      ],
      "keys": [
        {
          "key": "layers",
          "use": "both",
          "required": true,
          "values": "a non-empty list of layer names, top to bottom",
          "field": "spec.layers[].name"
        },
        {
          "key": "tree",
          "use": "both",
          "required": true,
          "values": "a map of element names, each holding nothing (a leaf), a list of child names or a map of children (the tree grammar, §3.1)",
          "field": "spec.layers[].nodes",
          "note": "{} means no elements."
        }
      ]
    },
    {
      "id": "sequentialDimension",
      "title": "Sequential dimension",
      "path": "dimensions.<name> (type: sequential)",
      "documentedIn": [
        "3.2",
        "3.2.1"
      ],
      "keys": [
        {
          "key": "sequentialType",
          "use": "both",
          "required": true,
          "values": [
            "axmo_time"
          ],
          "enforced": "exact",
          "field": "instance.typeId",
          "note": "Any other value is refused."
        },
        {
          "key": "parameters",
          "use": "both",
          "required": true,
          "values": "a map of the type's parameters (the SDT definition)",
          "field": "instance.parameters"
        }
      ]
    },
    {
      "id": "timeParameters",
      "title": "axmo_time parameters",
      "path": "dimensions.<name>.parameters (sequentialType: axmo_time)",
      "documentedIn": [
        "3.2.1",
        "3.2.4"
      ],
      "keys": [
        {
          "key": "selected_levels",
          "use": "both",
          "required": "unless the legacy levels is present",
          "values": "a non-empty list of levels, each one of \"day\", \"month\", \"quarter\", \"half_year\", \"year\" (in any letter case)",
          "field": "instance.parameters.selected_levels",
          "note": "Declared by AXMO_TIME_DEF (\"Layers\"). The layers, root first, with their elements' names, for a dimension named Time from 2027-06-30 to 2027-07-01 with every level: Top_Time (All_Time); Year (2027); Half-Year (2027-H1, 2027-H2); Quarter (2027-Q2, 2027-Q3); Month (2027-06, 2027-07); Day (2027-06-30, 2027-07-01). A level not selected has no layer; the root layer and its one element are always there, named after the dimension."
        },
        {
          "key": "start",
          "use": "both",
          "required": true,
          "default": "{{ is_set('selected_levels') ? current_period(selected_levels[0] === 'day' ? 'date' : selected_levels[0]) : null }}",
          "values": "the type of selected_levels[0]",
          "field": "instance.parameters.start",
          "note": "Declared by AXMO_TIME_DEF (\"Start\")."
        },
        {
          "key": "end_mode",
          "use": "both",
          "required": false,
          "default": "end_point",
          "values": [
            "end_point",
            "duration"
          ],
          "enforced": "exact",
          "field": "instance.parameters.end_mode",
          "note": "Declared by AXMO_TIME_DEF (\"End defined by\")."
        },
        {
          "key": "end",
          "use": "both",
          "required": "one of end / duration",
          "values": "the type of selected_levels[0]",
          "field": "instance.parameters.end",
          "note": "Declared by AXMO_TIME_DEF (\"End\")."
        },
        {
          "key": "duration",
          "use": "both",
          "required": "one of end / duration",
          "values": "integer_with_unit",
          "field": "instance.parameters.duration",
          "note": "Declared by AXMO_TIME_DEF (\"Duration\")."
        },
        {
          "key": "hasBefore",
          "use": "both",
          "required": false,
          "default": "false",
          "values": "boolean",
          "field": "instance.parameters.hasBefore",
          "note": "Declared by AXMO_TIME_DEF (\"Opening element (BEFORE)\")."
        },
        {
          "key": "hasAfter",
          "use": "both",
          "required": false,
          "default": "false",
          "values": "boolean",
          "field": "instance.parameters.hasAfter",
          "note": "Declared by AXMO_TIME_DEF (\"Closing element (AFTER)\")."
        },
        {
          "key": "levels",
          "use": "read",
          "required": false,
          "values": "coarsest-first level names, e.g. [Year, Quarter, Month]",
          "note": "The legacy v1 spelling of selected_levels; read only when selected_levels is absent."
        }
      ]
    },
    {
      "id": "duration",
      "title": "Duration value",
      "path": "dimensions.<name>.parameters.duration",
      "documentedIn": [
        "3.2.1",
        "3.2.3"
      ],
      "keys": [
        {
          "key": "value",
          "use": "both",
          "required": true,
          "values": "an integer, at least 1"
        },
        {
          "key": "unit",
          "use": "both",
          "required": true,
          "values": "one of the selected levels"
        }
      ]
    },
    {
      "id": "series",
      "title": "Series",
      "path": "series.<name>",
      "documentedIn": [
        "4",
        "4.1",
        "4.2"
      ],
      "keys": [
        {
          "key": "type",
          "use": "both",
          "required": true,
          "values": [
            "input",
            "calculated"
          ],
          "enforced": "caseInsensitive",
          "field": "type",
          "note": "Read case-insensitively; written in lower case."
        },
        {
          "key": "formula",
          "use": "both",
          "required": "for a calculated series",
          "field": "formula",
          "note": "Read as text; kept on an input series too."
        },
        {
          "key": "description",
          "use": "both",
          "required": false,
          "field": "meta.description",
          "note": "Written when non-empty; a non-string reads as none."
        },
        {
          "key": "dimensions",
          "use": "both",
          "required": "always written; an absent (or empty) value reads as 0-D and is reported",
          "values": "a list of names, or a list of single-key maps (a binding each); a map is read only",
          "field": "dimensions"
        }
      ]
    },
    {
      "id": "binding",
      "title": "Binding (one dimension of a series)",
      "path": "series.<name>.dimensions[].<dimension>",
      "documentedIn": [
        "4.3",
        "4.4",
        "4.5"
      ],
      "keys": [
        {
          "key": "rollUp",
          "use": "both",
          "required": false,
          "default": "SUM",
          "values": [
            "SUM",
            "AVG",
            "AVGA",
            "MIN",
            "MINA",
            "MAX",
            "MAXA",
            "WEIGHTED_AVG",
            "FIRST",
            "LAST",
            "NONE",
            "FORMULA"
          ],
          "enforced": "caseInsensitive",
          "field": "defaultRollUp",
          "note": "Checked when the file is read, in any case (ISSUE-112); kept as written. A single-key map's value may be the method alone (Geo: AVG)."
        },
        {
          "key": "rollUpFormula",
          "use": "both",
          "required": "for rollUp: FORMULA on an input series",
          "field": "defaultFormula",
          "note": "Optional on a calculated series: without it, the series' own formula is evaluated at the total. Written only with FORMULA; read with any method."
        },
        {
          "key": "weightSeries",
          "use": "both",
          "required": "for rollUp: WEIGHTED_AVG",
          "values": "a series in the file, or a sequential dimension's weight series",
          "field": "rollUpOptions.weightSeries",
          "note": "Read only when rollUp is exactly WEIGHTED_AVG; otherwise dropped. Whether it names a series is judged by the compile, not on read."
        },
        {
          "key": "splitDown",
          "use": "both",
          "required": false,
          "default": "NONE",
          "values": [
            "PROPORTIONAL",
            "EQUAL",
            "COPY",
            "FIRST",
            "LAST",
            "NONE"
          ],
          "enforced": "caseInsensitive",
          "field": "splitDown",
          "note": "Written only when not NONE; read upper-cased; any other rule is refused (ISSUE-113). An empty value reads as absent."
        },
        {
          "key": "driverSeries",
          "use": "both",
          "required": "for splitDown: PROPORTIONAL",
          "field": "splitDownOptions.driverSeries",
          "note": "Written only with PROPORTIONAL; read whenever splitDown is set."
        },
        {
          "key": "layerOverrides",
          "use": "retired",
          "required": false,
          "note": "No longer supported (ADR-021)."
        },
        {
          "key": "splitNullPolicy",
          "use": "retired",
          "required": false,
          "note": "Deleted (ADR-430)."
        }
      ]
    },
    {
      "id": "dataSource",
      "title": "Data source",
      "path": "dataSources.<name>",
      "documentedIn": [
        "5"
      ],
      "keys": [
        {
          "key": "sourceType",
          "use": "both",
          "required": false,
          "default": "\"excel-range\"",
          "field": "sourceType",
          "note": "Not validated."
        },
        {
          "key": "rangeRef",
          "use": "both",
          "required": false,
          "field": "config.rangeRef",
          "note": "The Input Range's current address where it has one, else the stored reference; omitted when empty."
        },
        {
          "key": "shape",
          "use": "both",
          "required": false,
          "default": "\"table\"",
          "values": [
            "scalar",
            "vector",
            "table"
          ],
          "field": "shape",
          "note": "Not validated."
        },
        {
          "key": "range",
          "use": "read",
          "required": false,
          "field": "config.range",
          "note": "Legacy; kept in config and used as the sheet fallback when collecting sheets."
        },
        {
          "key": "hasHeaders",
          "use": "both",
          "required": false,
          "default": "true",
          "field": "config.hasHeaders",
          "note": "Whether the range's first row holds the column names (an Excel table's header row always does)."
        },
        {
          "key": "addRowNumber",
          "use": "both",
          "required": false,
          "default": "false",
          "field": "config.addRowNumber",
          "note": "true appends a column _Row_No numbering the rows R1, R2, … in source order."
        },
        {
          "key": "sheetName",
          "use": "both",
          "required": false,
          "field": "config.sheetName",
          "note": "The sheet a bare address is read on; a sheet rename keeps it current."
        },
        {
          "key": "columnLayout",
          "use": "both",
          "required": false,
          "default": "\"dataseries\"",
          "values": [
            "dataseries",
            "dimension"
          ],
          "enforced": "exact",
          "field": "config.columnLayout",
          "note": "dimension: the columns of a band hold the elements of columnsDimension — one loader reads them, mapping that dimension to _HeaderDimElement and reading _Value (or the seriesNameColumn's series)."
        },
        {
          "key": "columnsDimension",
          "use": "both",
          "required": false,
          "field": "config.columnsDimension",
          "note": "With columnLayout: dimension — the dimension whose elements the band's column headers name."
        },
        {
          "key": "bandStartMode",
          "use": "both",
          "required": false,
          "default": "\"beginning\"",
          "values": [
            "beginning",
            "at",
            "after"
          ],
          "enforced": "exact",
          "field": "config.bandStartMode",
          "note": "Where the band begins: the first column, at bandStartColumn, or after it."
        },
        {
          "key": "bandStartColumn",
          "use": "both",
          "required": false,
          "field": "config.bandStartColumn",
          "note": "With bandStartMode at or after."
        },
        {
          "key": "bandEndMode",
          "use": "both",
          "required": false,
          "default": "\"end\"",
          "values": [
            "end",
            "at",
            "before"
          ],
          "enforced": "exact",
          "field": "config.bandEndMode",
          "note": "Where the band ends: the last column, at bandEndColumn, or before it (a trailing Total column)."
        },
        {
          "key": "bandEndColumn",
          "use": "both",
          "required": false,
          "field": "config.bandEndColumn",
          "note": "With bandEndMode at or before."
        },
        {
          "key": "seriesNameColumn",
          "use": "both",
          "required": false,
          "field": "config.seriesNameColumn",
          "note": "The column naming each row's series; absent, the band loads one series as _Value."
        },
        {
          "key": "rangeType",
          "use": "retired",
          "required": false,
          "note": "Dropped on read (ADR-063)."
        },
        {
          "key": "columns",
          "use": "retired",
          "required": false,
          "note": "A header cache only the removed bindInputRange wrote; headers are read from the range."
        }
      ]
    },
    {
      "id": "dataLoader",
      "title": "Data loader",
      "path": "dataLoaders.<name>",
      "documentedIn": [
        "6.1",
        "6.2"
      ],
      "open": "The keys of its variant, chosen by type: a series loader or a dimension generator.",
      "keys": [
        {
          "key": "type",
          "use": "both",
          "required": true,
          "values": [
            "seriesLoader",
            "dimensionGenerator"
          ],
          "enforced": "exact",
          "note": "Exact spelling; it decides which keys the rest of the mapping has."
        }
      ]
    },
    {
      "id": "seriesLoader",
      "title": "Series loader",
      "path": "dataLoaders.<name> (type: seriesLoader)",
      "documentedIn": [
        "6.1"
      ],
      "keys": [
        {
          "key": "source",
          "use": "both",
          "required": true,
          "values": "a data source in the file",
          "field": "sourceId (sourceName when it names none)",
          "note": "A name the file does not declare leaves the object out of the model, with a definition error (ADR-441)."
        },
        {
          "key": "target",
          "use": "both",
          "required": "in every form but the bulk one",
          "values": "a series in the file",
          "field": "targetSeriesName",
          "note": "Not a key of the bulk form. A name the file does not declare leaves the object out of the model, with a definition error (ADR-441)."
        },
        {
          "key": "loadMode",
          "use": "both",
          "required": false,
          "default": "table",
          "values": [
            "table",
            "vector",
            "scalar"
          ],
          "enforced": "exact",
          "field": "loadMode.type",
          "note": "Exact spelling; it decides which keys the loader has. Any other value is refused (AGL9-17)."
        },
        {
          "key": "valueColumn",
          "use": "both",
          "required": "table mode, singular form",
          "field": "loadMode.valueColumnName"
        },
        {
          "key": "duplicateHandling",
          "use": "both",
          "required": false,
          "default": "FIRST",
          "values": [
            "FIRST",
            "LAST",
            "AVERAGE",
            "SUM",
            "BLOCK"
          ],
          "enforced": "exact",
          "field": "loadMode.duplicateHandling",
          "note": "Table mode, singular form; always written. Not a key of any other form (ISSUE-111): a bulk loader's targets carry their own."
        },
        {
          "key": "targets",
          "use": "both",
          "required": false,
          "values": "a list of target entries (table mode only)",
          "field": "targets",
          "note": "A non-empty list makes the loader a bulk one (ADR-061)."
        },
        {
          "key": "dimensionMappings",
          "use": "both",
          "required": false,
          "values": "a map of dimension name → { column }",
          "field": "loadMode.dimensionMappings (column)",
          "note": "Table mode. A malformed entry is dropped."
        },
        {
          "key": "openDimension",
          "use": "both",
          "required": false,
          "default": "\"\"",
          "field": "loadMode.openDimension",
          "note": "Vector mode."
        },
        {
          "key": "elementSubset",
          "use": "both",
          "required": false,
          "default": "[]",
          "field": "loadMode.elementSubset",
          "note": "Vector mode."
        },
        {
          "key": "ignoreEmptyValues",
          "use": "both",
          "required": false,
          "default": "false",
          "field": "ignoreEmptyValues",
          "note": "Written only when true. true: an empty source value cell is skipped with no message; a value that cannot be loaded is still reported."
        },
        {
          "key": "fixedCoordinates",
          "use": "both",
          "required": false,
          "values": "a map of dimension name → element name",
          "field": "loadMode.dimensionMappings (fixed) / loadMode.fixedCoordinates"
        }
      ]
    },
    {
      "id": "loaderTarget",
      "title": "Series loader target entry",
      "path": "dataLoaders.<name>.targets[]",
      "documentedIn": [
        "6.1"
      ],
      "keys": [
        {
          "key": "target",
          "use": "both",
          "required": true,
          "values": "a series in the file",
          "field": "targetSeriesName",
          "note": "A name the file does not declare leaves the object out of the model, with a definition error (ADR-441)."
        },
        {
          "key": "valueColumn",
          "use": "both",
          "required": true,
          "field": "valueColumnName"
        },
        {
          "key": "duplicateHandling",
          "use": "both",
          "required": false,
          "default": "FIRST",
          "values": [
            "FIRST",
            "LAST",
            "AVERAGE",
            "SUM",
            "BLOCK"
          ],
          "enforced": "exact",
          "field": "duplicateHandling",
          "note": "Always written."
        }
      ]
    },
    {
      "id": "dimensionMapping",
      "title": "Dimension mapping",
      "path": "dataLoaders.<name>.dimensionMappings.<dimension>",
      "documentedIn": [
        "6.1"
      ],
      "keys": [
        {
          "key": "column",
          "use": "both",
          "required": "for the mapping to be read (an entry without it is dropped)",
          "field": "source.columnName"
        }
      ]
    },
    {
      "id": "fixedCoordinates",
      "title": "Fixed coordinates",
      "path": "dataLoaders.<name>.fixedCoordinates",
      "documentedIn": [
        "6.1"
      ],
      "open": "Dimension name → element name: the coordinate every loaded value takes on that dimension.",
      "keys": []
    },
    {
      "id": "dimensionGenerator",
      "title": "Dimension generator",
      "path": "dataLoaders.<name> (type: dimensionGenerator)",
      "documentedIn": [
        "6.2"
      ],
      "keys": [
        {
          "key": "source",
          "use": "both",
          "required": true,
          "values": "a data source in the file",
          "field": "sourceId (sourceName when it names none)",
          "note": "A name the file does not declare leaves the object out of the model, with a definition error (ADR-441)."
        },
        {
          "key": "target",
          "use": "both",
          "required": true,
          "values": "a dimension in the file",
          "field": "targetDimensionName",
          "note": "A name the file does not declare leaves the object out of the model, with a definition error (ADR-441)."
        },
        {
          "key": "sourceColumn",
          "use": "both",
          "required": false,
          "default": "\"\"",
          "field": "elementSource.columnName",
          "note": "Always written."
        },
        {
          "key": "parentElement",
          "use": "both",
          "required": false,
          "field": "parentSource (fixed).elementName",
          "note": "Mutually exclusive with parentColumn."
        },
        {
          "key": "parentColumn",
          "use": "both",
          "required": false,
          "field": "parentSource (column).columnName"
        },
        {
          "key": "layerColumn",
          "use": "both",
          "required": false,
          "field": "elementSource.layerColumnName",
          "note": "Names each element's layer, which must lie below its parent's; without it, or where a cell is empty, the layer is the parent's + 1."
        }
      ]
    },
    {
      "id": "axisDefinition",
      "title": "Axis definition",
      "path": "axisDefinitions.<name>",
      "documentedIn": [
        "7"
      ],
      "keys": [
        {
          "key": "blocks",
          "use": "both",
          "required": true,
          "values": "a list of blocks",
          "field": "items"
        }
      ]
    },
    {
      "id": "axisBlock",
      "title": "Axis block",
      "path": "axisDefinitions.<name>.blocks[] / outputRanges.<name>.rowDef|colDef.blocks[]",
      "documentedIn": [
        "7",
        "7.1"
      ],
      "keys": [
        {
          "key": "series",
          "use": "both",
          "required": "one kind key per block",
          "values": "one series reference: [alias := ] expression; a list is read only",
          "field": "seriesRefs[]"
        },
        {
          "key": "dimension",
          "use": "both",
          "required": "one kind key per block",
          "values": "Dimension/Layer, or a bare Dimension",
          "field": "dimensionName + layerName"
        },
        {
          "key": "dimensionAll",
          "use": "both",
          "required": "one kind key per block",
          "values": "a dimension name",
          "field": "dimensionName",
          "note": "Every layer of the dimension as one block, coarsest first: each total comes before its members, on either axis. On a sequential dimension BEFORE is the first element and AFTER the last; neither counts in a total."
        },
        {
          "key": "axisDef",
          "use": "both",
          "required": "one kind key per block",
          "values": "an axis definition's name",
          "field": "name"
        },
        {
          "key": "format",
          "use": "both",
          "required": false,
          "values": "an Excel number format string",
          "field": "seriesRefs[].format",
          "note": "Series blocks only."
        },
        {
          "key": "newLine",
          "use": "both",
          "required": false,
          "default": "false",
          "field": "newLine",
          "note": "Written only when true; read as a truth value. Not a key of an axisDef block."
        }
      ]
    },
    {
      "id": "outputRange",
      "title": "Output range",
      "path": "outputRanges.<name>",
      "documentedIn": [
        "8"
      ],
      "keys": [
        {
          "key": "cell",
          "use": "both",
          "required": true,
          "values": "a sheet-qualified anchor",
          "field": "anchorCell",
          "note": "Update does not create the sheet: it must exist when Update writes the range (an Import creates the sheets a file names; apply warns, APPLY_OUTPUT_SHEET_NOT_IN_WORKBOOK)."
        },
        {
          "key": "rowDef",
          "use": "both",
          "required": false,
          "default": "an empty axis",
          "values": "{ blocks: [...] }",
          "emptyMeans": "an empty axis",
          "field": "rowDef"
        },
        {
          "key": "colDef",
          "use": "both",
          "required": false,
          "default": "an empty axis",
          "values": "{ blocks: [...] }",
          "emptyMeans": "an empty axis",
          "field": "colDef"
        },
        {
          "key": "showColumnHeaders",
          "use": "both",
          "required": false,
          "default": "true",
          "field": "options.showColumnHeaders",
          "note": "Written only when false."
        },
        {
          "key": "showRowLabels",
          "use": "both",
          "required": false,
          "default": "true",
          "field": "options.showRowLabels",
          "note": "Written only when false."
        },
        {
          "key": "showData",
          "use": "both",
          "required": false,
          "default": "true",
          "field": "options.showData",
          "note": "Written only when false."
        },
        {
          "key": "internalSeries",
          "use": "both",
          "required": false,
          "values": "a map of name → inner series",
          "field": "internalSeries"
        },
        {
          "key": "dropSet",
          "use": "both",
          "required": false,
          "values": "a map of dimension name → element names",
          "field": "dropSet",
          "note": "Each listed element is dropped with its whole subtree: it and every element below it emit no row or column. A model series keeps the model's totals (a surviving total still counts what was dropped); an inner series' totals are over the surviving elements only."
        },
        {
          "key": "allowOverwriteExistingData",
          "use": "both",
          "required": false,
          "default": "false",
          "field": "allowOverwriteExistingData",
          "note": "Written only when true."
        },
        {
          "key": "exportUserColumns",
          "use": "both",
          "required": false,
          "default": "false",
          "field": "exportUserColumns",
          "note": "Written only when true."
        },
        {
          "key": "userColumns",
          "use": "both",
          "required": false,
          "values": "a list of user-column entries",
          "field": "userColumns",
          "note": "Transport only."
        },
        {
          "key": "outputMode",
          "use": "both",
          "required": false,
          "default": "report",
          "values": [
            "report",
            "table"
          ],
          "field": "outputMode",
          "note": "Written only as table; any other value reads as report."
        },
        {
          "key": "tableOptions",
          "use": "both",
          "required": false,
          "field": "tableOptions"
        },
        {
          "key": "renderState",
          "use": "retired",
          "required": false,
          "note": "Workbook-only; never written, ignored on read."
        },
        {
          "key": "valueDef",
          "use": "retired",
          "required": false,
          "note": "Not part of the format; ignored on read."
        }
      ]
    },
    {
      "id": "axisReference",
      "title": "Output range axis (rowDef / colDef)",
      "path": "outputRanges.<name>.rowDef | colDef",
      "documentedIn": [
        "8"
      ],
      "keys": [
        {
          "key": "blocks",
          "use": "both",
          "required": "unless the axis is written empty ({})",
          "values": "a list of blocks (§7)",
          "field": "items"
        },
        {
          "key": "axis",
          "use": "retired",
          "required": false,
          "note": "The retired whole-axis form (ADR-038); reference an axis definition with an axisDef block."
        }
      ]
    },
    {
      "id": "dropSet",
      "title": "Drop set",
      "path": "outputRanges.<name>.dropSet",
      "documentedIn": [
        "8"
      ],
      "open": "Dimension name → the element names dropped from it, a list (each drops its whole subtree).",
      "keys": []
    },
    {
      "id": "internalSeries",
      "title": "Inner series",
      "path": "outputRanges.<name>.internalSeries.<name>",
      "documentedIn": [
        "8"
      ],
      "keys": [
        {
          "key": "type",
          "use": "both",
          "required": false,
          "default": "CALCULATED",
          "values": [
            "CALCULATED",
            "INPUT"
          ],
          "field": "type",
          "note": "Written upper-case; exactly INPUT reads as input, anything else as CALCULATED."
        },
        {
          "key": "expression",
          "use": "both",
          "required": "unless the legacy formula is written",
          "field": "expression",
          "note": "A blank expression is refused."
        },
        {
          "key": "formula",
          "use": "read",
          "required": false,
          "field": "expression",
          "note": "Legacy spelling of expression, read when expression is absent."
        },
        {
          "key": "description",
          "use": "both",
          "required": false,
          "field": "description",
          "note": "Written when non-empty."
        },
        {
          "key": "dimensions",
          "use": "both",
          "required": false,
          "default": "0-D",
          "values": "as a series' dimensions",
          "field": "dimensions",
          "note": "Written when non-empty. Its references are judged when the output range is compiled."
        }
      ]
    },
    {
      "id": "userColumn",
      "title": "User column entry",
      "path": "outputRanges.<name>.userColumns[]",
      "documentedIn": [
        "8"
      ],
      "keys": [
        {
          "key": "name",
          "use": "both",
          "required": "for the column to be replayed (an entry without it is skipped)",
          "values": "a string",
          "field": "name"
        },
        {
          "key": "index",
          "use": "both",
          "required": "for the column to be replayed (an entry without it is skipped)",
          "values": "a finite number",
          "field": "index"
        },
        {
          "key": "formula",
          "use": "both",
          "required": "for the column to be replayed (an entry without it is skipped)",
          "values": "a string",
          "field": "formula"
        },
        {
          "key": "numberFormat",
          "use": "both",
          "required": false,
          "field": "numberFormat",
          "note": "Carried when a string."
        }
      ]
    },
    {
      "id": "tableOptions",
      "title": "Table options",
      "path": "outputRanges.<name>.tableOptions",
      "documentedIn": [
        "8"
      ],
      "keys": [
        {
          "key": "includeNonLeafs",
          "use": "both",
          "required": false,
          "default": "false",
          "field": "tableOptions.includeNonLeafs",
          "note": "Written only when true."
        }
      ]
    },
    {
      "id": "dataRectangle",
      "title": "Data rectangle",
      "path": "data.<address>",
      "documentedIn": [
        "9.1",
        "9.3"
      ],
      "keys": [
        {
          "key": "values",
          "use": "both",
          "required": true,
          "values": "a two-dimensional list of cells (values: [[...], ...]); the legacy pre-ADR-064 shapes (columns / rows / value, or a one-dimensional values list) are no longer read — re-export the model"
        },
        {
          "key": "columns",
          "use": "retired",
          "required": false,
          "note": "The pre-ADR-064 shape."
        },
        {
          "key": "rows",
          "use": "retired",
          "required": false,
          "note": "The pre-ADR-064 shape."
        },
        {
          "key": "value",
          "use": "retired",
          "required": false,
          "note": "The pre-ADR-064 shape."
        }
      ]
    },
    {
      "id": "namedStructure",
      "title": "Named structure",
      "path": "namedStructures.<name>",
      "documentedIn": [
        "9.1",
        "9.2"
      ],
      "keys": [
        {
          "key": "kind",
          "use": "both",
          "required": true,
          "values": [
            "table",
            "namedRange"
          ],
          "enforced": "exact",
          "note": "Any other value is a parse error."
        },
        {
          "key": "range",
          "use": "both",
          "required": "for a table"
        },
        {
          "key": "hasHeaders",
          "use": "both",
          "required": false,
          "default": "true",
          "note": "Tables."
        },
        {
          "key": "definition",
          "use": "both",
          "required": "for a named range"
        }
      ]
    }
  ]
}
