{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "fleet/profile/calendar.schema.json",
  "title": "Arcodange compliance calendar (fleet/profile/calendar.yaml)",
  "description": "Dated obligations the T11 reminder loop (erp#60) reads. due 'YYYY-MM-DD' = exact date; 'YYYY-MM' = month window (source gives no day - verify on the authority's notice, never invent). Exactly one of due|recurrence per entry unless status is pending-definition/conditional (checked by scripts/validate.py, which implements the JSON-Schema subset {type, properties, required, additionalProperties, items, enum, pattern}).",
  "type": "object",
  "additionalProperties": false,
  "required": ["version", "defaults", "entries"],
  "properties": {
    "version": { "type": "integer", "enum": [1] },
    "defaults": {
      "type": "object",
      "additionalProperties": false,
      "required": ["reminders_days_before"],
      "properties": {
        "reminders_days_before": { "type": "array", "items": { "type": "integer" } },
        "reminders_repeat_until_acknowledged": { "type": "boolean" }
      }
    },
    "entries": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["id", "title", "category", "source"],
        "properties": {
          "id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
          "title": { "type": "string" },
          "category": { "type": "string", "enum": ["fiscal", "legal", "regulatory", "social", "receivable", "contract"] },
          "nature": { "type": "string", "enum": ["regulatory-hard", "fiscal-hard", "legal-hard", "engineering", "informational"] },
          "status": { "type": "string", "enum": ["confirmed", "estimated", "conditional", "pending-definition"] },
          "due": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}(-[0-9]{2})?$" },
          "recurrence": { "type": "string", "enum": ["yearly", "quarterly", "monthly", "unknown"] },
          "months": { "type": "array", "items": { "type": "integer" } },
          "effective_from": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" },
          "effective_until": { "type": ["string", "null"], "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" },
          "authority": { "type": "string" },
          "related_task": { "type": "string", "pattern": "^T[0-9]{2}$" },
          "source": { "type": "string" },
          "notes": { "type": "string" }
        }
      }
    }
  }
}
