{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": [
    "schema_version",
    "source_edition",
    "source_commit",
    "research_cutoff",
    "review_due",
    "generated_at",
    "record_type",
    "supplied_facts",
    "location",
    "evidence",
    "sources",
    "publisher",
    "derived_checklist",
    "unresolved_questions",
    "comparison_fields",
    "limitations",
    "canonical_methodology"
  ],
  "properties": {
    "schema_version": {
      "type": "string"
    },
    "source_edition": {
      "const": "permeate-nwfl-2026-10-01-r1"
    },
    "source_commit": {
      "type": "string"
    },
    "research_cutoff": {
      "type": "string"
    },
    "review_due": {
      "type": "string"
    },
    "generated_at": {
      "type": "string"
    },
    "record_type": {
      "const": "administrative_scope_and_quote_readiness"
    },
    "supplied_facts": {
      "type": "object",
      "properties": {
        "service": {
          "type": "string",
          "enum": [
            "traditional-reserve-study",
            "sirs",
            "condition-survey",
            "balcony-railing",
            "milestone",
            "unknown"
          ],
          "description": "Select the requested service exactly. SIRS, traditional reserves and milestone inspections are distinct. Use unknown when unspecified; milestone has no published amount."
        },
        "scope": {
          "type": "string",
          "maxLength": 80,
          "description": "Optional base or exact published scenario ID. Preserve user-supplied scope qualifiers. For a non-base scope, use permeate_list_services to obtain the matching released scenario ID before lookup or preparation; do not invent an ID or silently omit the qualifier. Omit when no scope is specified. If no published scenario matches, retain the requested scope as unresolved in the response, do not pass an unsupported scope value, and do not present a base amount as its planning guidance. Preserve returned unpriced status and null amounts."
        },
        "zip": {
          "type": "string",
          "maxLength": 80,
          "description": "Supplied five-digit US ZIP. Coverage and county intersections are checked against the released dataset; ZIP does not identify a property or prove local pricing."
        },
        "community": {
          "type": "string",
          "maxLength": 80,
          "description": "Supplied community name or published locality ID. Ambiguous names require ZIP selection; do not infer a property."
        },
        "county": {
          "type": "string",
          "enum": [
            "unknown",
            "Bay",
            "Walton",
            "Okaloosa",
            "other"
          ],
          "description": "User-supplied county. Preserve unknown; do not choose a county from a multi-county ZIP."
        },
        "prior_reports": {
          "type": "string",
          "enum": [
            "yes",
            "no",
            "unknown"
          ],
          "description": "Whether prior reports are available: yes, no or unknown. Missing facts remain unknown."
        },
        "drawings": {
          "type": "string",
          "enum": [
            "yes",
            "no",
            "unknown"
          ],
          "description": "Whether drawings are available: yes, no or unknown. Missing facts remain unknown."
        },
        "component_inventory": {
          "type": "string",
          "enum": [
            "yes",
            "no",
            "unknown"
          ],
          "description": "Whether a component inventory is available: yes, no or unknown."
        },
        "authority_notice": {
          "type": "string",
          "enum": [
            "yes",
            "no",
            "unknown"
          ],
          "description": "Whether an authority notice is available: yes, no or unknown."
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "location": {
      "type": "object",
      "required": [
        "status"
      ],
      "properties": {
        "status": {
          "type": "string"
        },
        "zip": {
          "type": [
            "string",
            "null"
          ]
        },
        "counties": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "evidence": {
      "anyOf": [
        {
          "type": "null"
        },
        {
          "type": "object",
          "required": [
            "range_type",
            "range_status",
            "low",
            "high",
            "price_basis",
            "limitations",
            "scope_verified",
            "evidence_area",
            "applicability_area"
          ],
          "properties": {
            "low": {
              "type": [
                "number",
                "null"
              ]
            },
            "high": {
              "type": [
                "number",
                "null"
              ]
            },
            "range_type": {
              "type": "string"
            },
            "range_status": {
              "type": "string"
            },
            "price_basis": {
              "type": "string"
            },
            "scope_verified": {
              "type": "boolean"
            },
            "limitations": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "evidence_area": {
              "type": "string"
            },
            "applicability_area": {
              "type": "string"
            }
          }
        }
      ]
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "claim_id",
          "edition",
          "url",
          "pinned_url",
          "locator",
          "qualification"
        ]
      }
    },
    "publisher": {
      "type": "object",
      "required": [
        "name",
        "url",
        "mirror_url",
        "mirror_role"
      ]
    },
    "derived_checklist": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "label",
          "supplied_status",
          "action"
        ]
      }
    },
    "unresolved_questions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "comparison_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "limitations": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "canonical_methodology": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
