{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Previdenza INPS case records",
  "type": "object",
  "required": [
    "professional_question",
    "material_decisions",
    "decision_log",
    "facts"
  ],
  "properties": {
    "case_id": {
      "type": "string",
      "minLength": 1
    },
    "language": {
      "enum": [
        "it",
        "en",
        "fr",
        "de",
        "es"
      ]
    },
    "professional_question": {
      "type": "string",
      "minLength": 1
    },
    "material_decisions": {
      "type": "object",
      "required": [
        "professional_question_confirmed",
        "framework_confirmed",
        "period_scope_confirmed",
        "ambiguous_terms_resolved"
      ],
      "properties": {
        "professional_question_confirmed": {
          "const": true
        },
        "framework_confirmed": {
          "const": true
        },
        "period_scope_confirmed": {
          "const": true
        },
        "ambiguous_terms_resolved": {
          "const": true
        }
      }
    },
    "decision_log": {
      "type": "array",
      "minItems": 4,
      "items": {
        "type": "object",
        "required": [
          "decision_id",
          "gate",
          "decision",
          "decided_by_id",
          "decided_by_role",
          "recorded_at",
          "basis"
        ],
        "properties": {
          "decision_id": {
            "type": "string",
            "minLength": 1
          },
          "gate": {
            "enum": [
              "professional_question_confirmed",
              "framework_confirmed",
              "period_scope_confirmed",
              "ambiguous_terms_resolved"
            ]
          },
          "decision": {
            "const": true
          },
          "decided_by_id": {
            "type": "string",
            "minLength": 1
          },
          "decided_by_role": {
            "enum": [
              "authorized_user",
              "professional_reviewer"
            ]
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time"
          },
          "basis": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    "facts": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": [
          "fact_id",
          "statement",
          "review_label",
          "value",
          "value_type",
          "evidence",
          "review_status"
        ],
        "properties": {
          "fact_id": {
            "type": "string",
            "minLength": 1
          },
          "statement": {
            "type": "string",
            "minLength": 1
          },
          "review_label": {
            "type": "string",
            "minLength": 1
          },
          "value_type": {
            "enum": [
              "amount",
              "date",
              "number",
              "percentage",
              "text"
            ]
          },
          "review_status": {
            "enum": [
              "confirmed",
              "disputed",
              "pending"
            ]
          },
          "evidence": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "document_id",
                "locator",
                "quote"
              ],
              "properties": {
                "document_id": {
                  "type": "string",
                  "minLength": 1
                },
                "locator": {
                  "type": "object",
                  "required": [
                    "kind",
                    "value"
                  ]
                },
                "quote": {
                  "type": "string",
                  "minLength": 1
                },
                "visual_confirmation": {
                  "description": "Required by validation when a confirmed fact cites an OCR-derived, browser-captured, or mechanically weak evidence fragment.",
                  "type": "object",
                  "required": [
                    "confirmed",
                    "confirmed_by_id",
                    "confirmed_by_role",
                    "recorded_at",
                    "basis"
                  ],
                  "properties": {
                    "confirmed": {
                      "const": true
                    },
                    "confirmed_by_id": {
                      "type": "string",
                      "minLength": 1
                    },
                    "confirmed_by_role": {
                      "enum": [
                        "authorized_user",
                        "professional_reviewer"
                      ]
                    },
                    "recorded_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "basis": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "timeline": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "event_id",
          "date",
          "date_precision",
          "description",
          "source_fact_ids"
        ]
      }
    },
    "jurisdiction": {
      "enum": [
        "IT",
        "CH-GE"
      ]
    },
    "jurisdiction_basis": {
      "type": "string",
      "minLength": 1
    }
  }
}
