{
 "$defs": {
  "BudgetSignal": {
   "additionalProperties": false,
   "properties": {
    "value": {
     "default": "unknown",
     "pattern": "^(on_budget|over_budget|under_budget|unknown)$",
     "title": "Value",
     "type": "string"
    },
    "overrun_pct": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Overrun Pct"
    }
   },
   "title": "BudgetSignal",
   "type": "object"
  },
  "Category": {
   "enum": [
    "airport",
    "rail",
    "road",
    "port",
    "canal",
    "water",
    "pipeline",
    "gas-terminal",
    "energy-nuclear",
    "energy-wind",
    "energy-solar",
    "energy-hydro",
    "energy-gas",
    "energy-coal",
    "energy-storage",
    "energy-waste",
    "mining",
    "grid",
    "military",
    "cyber",
    "space",
    "datacenter",
    "digital",
    "factory",
    "science",
    "health",
    "culture",
    "other"
   ],
   "title": "Category",
   "type": "string"
  },
  "Cost": {
   "additionalProperties": false,
   "properties": {
    "amount_mln": {
     "exclusiveMinimum": 0,
     "title": "Amount Mln",
     "type": "number"
    },
    "currency": {
     "default": "PLN",
     "pattern": "^[A-Z]{3}$",
     "title": "Currency",
     "type": "string"
    },
    "basis": {
     "$ref": "#/$defs/CostBasis"
    },
    "price_year": {
     "anyOf": [
      {
       "maximum": 2100,
       "minimum": 1980,
       "type": "integer"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Price Year"
    },
    "funding": {
     "items": {
      "type": "string"
     },
     "title": "Funding",
     "type": "array"
    },
    "funding_en": {
     "items": {
      "type": "string"
     },
     "title": "Funding En",
     "type": "array"
    },
    "aggregate_treatment": {
     "default": "inventory_value",
     "pattern": "^(inventory_value|spend_only|context_only)$",
     "title": "Aggregate Treatment",
     "type": "string"
    },
    "as_of": {
     "anyOf": [
      {
       "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "As Of"
    },
    "vat_basis": {
     "anyOf": [
      {
       "pattern": "^(net|gross)$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Vat Basis"
    },
    "scope_note": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Scope Note"
    },
    "scope_note_en": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Scope Note En"
    },
    "source_amount_mln": {
     "anyOf": [
      {
       "exclusiveMinimum": 0,
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Source Amount Mln"
    },
    "source_currency": {
     "anyOf": [
      {
       "pattern": "^[A-Z]{3}$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Source Currency"
    },
    "fx_year": {
     "anyOf": [
      {
       "maximum": 2100,
       "minimum": 1990,
       "type": "integer"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Fx Year"
    },
    "source_ref": {
     "minimum": 0,
     "title": "Source Ref",
     "type": "integer"
    }
   },
   "required": [
    "amount_mln",
    "basis",
    "source_ref"
   ],
   "title": "Cost",
   "type": "object"
  },
  "CostBasis": {
   "enum": [
    "envelope",
    "contract",
    "eu_eligible",
    "estimate"
   ],
   "title": "CostBasis",
   "type": "string"
  },
  "DeliveredSignal": {
   "additionalProperties": false,
   "properties": {
    "value": {
     "default": "unknown",
     "pattern": "^(yes|partial|no|not_due|unknown)$",
     "title": "Value",
     "type": "string"
    }
   },
   "title": "DeliveredSignal",
   "type": "object"
  },
  "DomesticShare": {
   "additionalProperties": false,
   "description": "How much of the project's value is captured by Polish industry/economy vs foreign.\nA SEPARATE axis from `cost` (how much) — this is *who captures* it. Grounded, never a\nguess: `pct` only when a source publishes a figure, else a qualitative `band` or null.\n\nMATH SAFETY (per Codex review): `cost * pct` is valid ONLY when `basis=local_content`\n(a real workshare/local-content measurement) AND `applies_to` shares the same denominator\nas `cost` (whole_project_cost | contract). `prime_is_polish` / `assembly_in_pl` /\n`foreign_prime` are evidence TAGS, not percentage math — the rollup must not multiply them.",
   "properties": {
    "pct": {
     "anyOf": [
      {
       "maximum": 100,
       "minimum": 0,
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "description": "Polish local-content share of value (%) when a source gives a number",
     "title": "Pct"
    },
    "band": {
     "anyOf": [
      {
       "pattern": "^(high|medium|low)$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "description": "Qualitative band when no % published (high>=~66, medium ~33-66, low<~33)",
     "title": "Band"
    },
    "basis": {
     "anyOf": [
      {
       "pattern": "^(local_content|prime_is_polish|assembly_in_pl|foreign_prime|estimate|other)$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "description": "What the figure refers to; only local_content is aggregatable math",
     "title": "Basis"
    },
    "applies_to": {
     "anyOf": [
      {
       "pattern": "^(whole_project_cost|contract|phase|component|unknown)$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "description": "Denominator the pct is measured against — guards cost*pct",
     "title": "Applies To"
    },
    "note": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Note"
    },
    "source_ref": {
     "anyOf": [
      {
       "minimum": 0,
       "type": "integer"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "description": "Index into references[]",
     "title": "Source Ref"
    }
   },
   "title": "DomesticShare",
   "type": "object"
  },
  "EuFundingRow": {
   "additionalProperties": false,
   "description": "Evidence attachment from EU funds lists - never auto-summed into cost.",
   "properties": {
    "title": {
     "title": "Title",
     "type": "string"
    },
    "value_pln": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Value Pln"
    },
    "match_confirmed": {
     "default": false,
     "title": "Match Confirmed",
     "type": "boolean"
    },
    "list_name": {
     "title": "List name",
     "type": "string"
    }
   },
   "required": [
    "list_name",
    "title"
   ],
   "title": "EuFundingRow",
   "type": "object"
  },
  "ExternalId": {
   "additionalProperties": false,
   "properties": {
    "ns": {
     "title": "Ns",
     "type": "string"
    },
    "id": {
     "title": "Id",
     "type": "string"
    },
    "url": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Url"
    }
   },
   "required": [
    "ns",
    "id"
   ],
   "title": "ExternalId",
   "type": "object"
  },
  "FundingSource": {
   "additionalProperties": false,
   "description": "One financing source, structured so 'who pays' (national budget vs EU SAFE / cohesion /\nKPO vs NATO vs foreign loan) can be surfaced separately from `cost`. Complements the older\nfree-text `cost.funding[]` and the EU-list evidence in `eu_funding_rows`.\n\n`instrument` keeps grants, loans, guarantees, equity and procurement payments from being\nsummed as if identical (Codex); `amount_basis` records what the number represents.",
   "properties": {
    "source_type": {
     "pattern": "^(national_budget|state_special_fund|state_bank|eu_safe|eu_cohesion|eu_kpo|eu_cef|eu_other|nato|us_fms_fmf|foreign_loan|multilateral_bank|local_government|own_funds|private|other)$",
     "title": "Source Type",
     "type": "string"
    },
    "program": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "description": "Named vehicle, e.g. FIK, KPO, CEF, BGK, EIB",
     "title": "Program"
    },
    "instrument": {
     "anyOf": [
      {
       "pattern": "^(budget_allocation|grant|loan|equity|guarantee|contract_payment|revenue_support|other)$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Instrument"
    },
    "amount_basis": {
     "anyOf": [
      {
       "pattern": "^(committed|contracted|awarded|disbursed|eligible|loan_facility|planned)$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Amount Basis"
    },
    "share_pct": {
     "anyOf": [
      {
       "maximum": 100,
       "minimum": 0,
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Share Pct"
    },
    "amount_mln": {
     "anyOf": [
      {
       "minimum": 0,
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Amount Mln"
    },
    "currency": {
     "anyOf": [
      {
       "pattern": "^[A-Z]{3}$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Currency"
    },
    "note": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Note"
    },
    "source_ref": {
     "anyOf": [
      {
       "minimum": 0,
       "type": "integer"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "description": "Index into references[]",
     "title": "Source Ref"
    }
   },
   "required": [
    "source_type"
   ],
   "title": "FundingSource",
   "type": "object"
  },
  "Kind": {
   "enum": [
    "new_build",
    "expansion",
    "modernization"
   ],
   "title": "Kind",
   "type": "string"
  },
  "Links": {
   "additionalProperties": false,
   "properties": {
    "official": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Official"
    },
    "wikipedia_pl": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Wikipedia Pl"
    },
    "wikipedia_en": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Wikipedia En"
    }
   },
   "title": "Links",
   "type": "object"
  },
  "LocalizedText": {
   "additionalProperties": false,
   "properties": {
    "pl": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Pl"
    },
    "en": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "En"
    }
   },
   "title": "LocalizedText",
   "type": "object"
  },
  "Location": {
   "additionalProperties": false,
   "properties": {
    "lat": {
     "anyOf": [
      {
       "maximum": 90,
       "minimum": -90,
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Lat"
    },
    "lon": {
     "anyOf": [
      {
       "maximum": 180,
       "minimum": -180,
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Lon"
    },
    "precision_km": {
     "anyOf": [
      {
       "exclusiveMinimum": 0,
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Precision Km"
    },
    "voivodeship": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Voivodeship"
    }
   },
   "title": "Location",
   "type": "object"
  },
  "LossSignal": {
   "additionalProperties": false,
   "description": "Only a documented loss — sunk cost, reported write-off, or an audit/prosecutor finding —\njustifies a 'written_off' label. Not vibes, not politics.",
   "properties": {
    "value": {
     "default": "unknown",
     "pattern": "^(none_known|sunk_cost_known|writeoff_reported|audit_or_prosecutor_claim|unknown)$",
     "title": "Value",
     "type": "string"
    },
    "amount_mln": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Amount Mln"
    },
    "currency": {
     "anyOf": [
      {
       "pattern": "^[A-Z]{3}$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Currency"
    }
   },
   "title": "LossSignal",
   "type": "object"
  },
  "Maturity": {
   "enum": [
    "too_early",
    "provisional",
    "settled",
    "disputed"
   ],
   "title": "Maturity",
   "type": "string"
  },
  "Outcome": {
   "additionalProperties": false,
   "properties": {
    "as_of": {
     "anyOf": [
      {
       "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "As Of"
    },
    "maturity": {
     "$ref": "#/$defs/Maturity",
     "default": "provisional"
    },
    "labels": {
     "items": {
      "$ref": "#/$defs/OutcomeLabel"
     },
     "title": "Labels",
     "type": "array"
    },
    "delivered": {
     "$ref": "#/$defs/DeliveredSignal"
    },
    "schedule": {
     "$ref": "#/$defs/ScheduleSignal"
    },
    "budget": {
     "$ref": "#/$defs/BudgetSignal"
    },
    "utilization": {
     "$ref": "#/$defs/UtilizationSignal"
    },
    "scope": {
     "$ref": "#/$defs/ScopeSignal"
    },
    "loss": {
     "$ref": "#/$defs/LossSignal"
    },
    "source_refs": {
     "description": "Indices into references[]",
     "items": {
      "type": "integer"
     },
     "title": "Source Refs",
     "type": "array"
    }
   },
   "title": "Outcome",
   "type": "object"
  },
  "OutcomeLabel": {
   "description": "Human-readable chips DERIVED from the signals below (deterministically) — never hand-asserted\nas a verdict. e.g. delivered · delayed · over_budget · underused · rescaled · restructured ·\nwritten_off · disputed.",
   "enum": [
    "delivered",
    "delayed",
    "over_budget",
    "underused",
    "rescaled",
    "restructured",
    "discontinued",
    "written_off",
    "disputed"
   ],
   "title": "OutcomeLabel",
   "type": "string"
  },
  "Owner": {
   "additionalProperties": false,
   "properties": {
    "name": {
     "title": "Name",
     "type": "string"
    },
    "type": {
     "$ref": "#/$defs/OwnerType"
    }
   },
   "required": [
    "name",
    "type"
   ],
   "title": "Owner",
   "type": "object"
  },
  "OwnerType": {
   "enum": [
    "ministry",
    "soe",
    "local_gov",
    "private",
    "mixed"
   ],
   "title": "OwnerType",
   "type": "string"
  },
  "Progress": {
   "additionalProperties": false,
   "description": "Only populated when a real source publishes a progress figure.",
   "properties": {
    "kind": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "description": "physical|financial",
     "title": "Kind"
    },
    "pct": {
     "anyOf": [
      {
       "maximum": 100,
       "minimum": 0,
       "type": "number"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Pct"
    },
    "source_ref": {
     "anyOf": [
      {
       "minimum": 0,
       "type": "integer"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Source Ref"
    }
   },
   "title": "Progress",
   "type": "object"
  },
  "Reference": {
   "additionalProperties": false,
   "properties": {
    "url": {
     "title": "Url",
     "type": "string"
    },
    "archive_url": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Archive Url"
    },
    "retrieved_at": {
     "anyOf": [
      {
       "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Retrieved At"
    },
    "title": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Title"
    },
    "publisher": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Publisher"
    },
    "date": {
     "anyOf": [
      {
       "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Date"
    },
    "supports": {
     "items": {
      "type": "string"
     },
     "title": "Supports",
     "type": "array"
    },
    "document_ref": {
     "anyOf": [
      {
       "pattern": "^[A-Z]/\\d{2}/\\d{3}(/[A-Z]{3})?$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Document Ref"
    }
   },
   "required": [
    "url"
   ],
   "title": "Reference",
   "type": "object"
  },
  "Review": {
   "additionalProperties": false,
   "properties": {
    "tier": {
     "$ref": "#/$defs/ReviewTier",
     "default": "sampled"
    },
    "human_approved": {
     "default": false,
     "title": "Human Approved",
     "type": "boolean"
    },
    "approved_by": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Approved By"
    },
    "approved_at": {
     "anyOf": [
      {
       "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Approved At"
    },
    "notes": {
     "default": "",
     "title": "Notes",
     "type": "string"
    }
   },
   "title": "Review",
   "type": "object"
  },
  "ReviewTier": {
   "enum": [
    "full",
    "sampled"
   ],
   "title": "ReviewTier",
   "type": "string"
  },
  "ScheduleSignal": {
   "additionalProperties": false,
   "properties": {
    "value": {
     "default": "unknown",
     "pattern": "^(on_time|delayed|ahead|not_due|unknown)$",
     "title": "Value",
     "type": "string"
    },
    "slip_months": {
     "anyOf": [
      {
       "type": "integer"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Slip Months"
    }
   },
   "title": "ScheduleSignal",
   "type": "object"
  },
  "ScopeSignal": {
   "additionalProperties": false,
   "properties": {
    "value": {
     "default": "unknown",
     "pattern": "^(as_announced|rescaled_down|rescaled_up|restructured|superseded|unknown)$",
     "title": "Value",
     "type": "string"
    }
   },
   "title": "ScopeSignal",
   "type": "object"
  },
  "Sensitivity": {
   "enum": [
    "public",
    "approx_only"
   ],
   "title": "Sensitivity",
   "type": "string"
  },
  "Stage": {
   "enum": [
    "announced",
    "permits",
    "tender",
    "construction",
    "commissioning",
    "operational"
   ],
   "title": "Stage",
   "type": "string"
  },
  "StageEvent": {
   "additionalProperties": false,
   "properties": {
    "stage": {
     "$ref": "#/$defs/Stage"
    },
    "date": {
     "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
     "title": "Date",
     "type": "string"
    },
    "ref": {
     "description": "Index into references[]",
     "minimum": 0,
     "title": "Ref",
     "type": "integer"
    }
   },
   "required": [
    "stage",
    "date",
    "ref"
   ],
   "title": "StageEvent",
   "type": "object"
  },
  "Status": {
   "description": "Lifecycle FACT only — never a success judgment. 'failed' was dropped (it's a verdict; a\nproject 'failing' is expressed via outcome labels backed by evidence). on_hold+suspended\nmerged into 'paused'. See docs/methodology.md.",
   "enum": [
    "planned",
    "in_progress",
    "paused",
    "completed",
    "cancelled",
    "superseded"
   ],
   "title": "Status",
   "type": "string"
  },
  "StatusEvent": {
   "additionalProperties": false,
   "description": "Lifecycle history — so a reversal (Izera: cancelled → in_progress) keeps its past instead of\nsilently rewriting it. The record's `status` is the latest; `status_events` is the trail.",
   "properties": {
    "status": {
     "$ref": "#/$defs/Status"
    },
    "date": {
     "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
     "title": "Date",
     "type": "string"
    },
    "ref": {
     "description": "Index into references[]",
     "minimum": 0,
     "title": "Ref",
     "type": "integer"
    },
    "note_pl": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Note Pl"
    },
    "note_en": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Note En"
    },
    "successor_slug": {
     "anyOf": [
      {
       "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Successor Slug"
    }
   },
   "required": [
    "status",
    "date",
    "ref"
   ],
   "title": "StatusEvent",
   "type": "object"
  },
  "Timeline": {
   "additionalProperties": false,
   "properties": {
    "announced": {
     "anyOf": [
      {
       "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Announced"
    },
    "started": {
     "anyOf": [
      {
       "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Started"
    },
    "planned_end_original": {
     "anyOf": [
      {
       "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Planned End Original"
    },
    "planned_end_current": {
     "anyOf": [
      {
       "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Planned End Current"
    },
    "actual_end": {
     "anyOf": [
      {
       "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Actual End"
    }
   },
   "title": "Timeline",
   "type": "object"
  },
  "TranslationStatus": {
   "enum": [
    "pl_only",
    "pl_approved",
    "en_synced",
    "en_stale"
   ],
   "title": "TranslationStatus",
   "type": "string"
  },
  "UtilizationSignal": {
   "additionalProperties": false,
   "description": "The 'built but nobody uses it = actually a failure' criterion — stored as a METRIC, never a\nvibe. Radom: actual 250k pax vs 3 mln capacity, dated + sourced.",
   "properties": {
    "value": {
     "default": "unknown",
     "pattern": "^(not_operational|too_early|in_use|underused|idle|not_applicable|unknown)$",
     "title": "Value",
     "type": "string"
    },
    "metric": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Metric"
    },
    "metric_en": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Metric En"
    },
    "actual": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Actual"
    },
    "expected_or_capacity": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Expected Or Capacity"
    },
    "unit": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Unit"
    },
    "unit_en": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Unit En"
    },
    "period": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Period"
    },
    "period_en": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ],
     "default": null,
     "title": "Period En"
    }
   },
   "title": "UtilizationSignal",
   "type": "object"
  }
 },
 "additionalProperties": true,
 "properties": {
  "slug": {
   "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
   "title": "Slug",
   "type": "string"
  },
  "parent_slug": {
   "anyOf": [
    {
     "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
     "type": "string"
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "title": "Parent Slug"
  },
  "name": {
   "$ref": "#/$defs/LocalizedText"
  },
  "summary": {
   "$ref": "#/$defs/LocalizedText"
  },
  "category": {
   "$ref": "#/$defs/Category"
  },
  "tags": {
   "items": {
    "type": "string"
   },
   "title": "Tags",
   "type": "array"
  },
  "strategic": {
   "default": false,
   "title": "Strategic",
   "type": "boolean"
  },
  "kind": {
   "$ref": "#/$defs/Kind",
   "default": "new_build"
  },
  "owner": {
   "anyOf": [
    {
     "$ref": "#/$defs/Owner"
    },
    {
     "type": "null"
    }
   ],
   "default": null
  },
  "status": {
   "$ref": "#/$defs/Status"
  },
  "status_as_of": {
   "anyOf": [
    {
     "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
     "type": "string"
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "title": "Status As Of"
  },
  "status_events": {
   "items": {
    "$ref": "#/$defs/StatusEvent"
   },
   "title": "Status Events",
   "type": "array"
  },
  "stage": {
   "anyOf": [
    {
     "$ref": "#/$defs/Stage"
    },
    {
     "type": "null"
    }
   ],
   "default": null
  },
  "stage_events": {
   "items": {
    "$ref": "#/$defs/StageEvent"
   },
   "title": "Stage Events",
   "type": "array"
  },
  "progress": {
   "$ref": "#/$defs/Progress"
  },
  "timeline": {
   "$ref": "#/$defs/Timeline"
  },
  "cost": {
   "anyOf": [
    {
     "$ref": "#/$defs/Cost"
    },
    {
     "type": "null"
    }
   ],
   "default": null
  },
  "eu_funding_rows": {
   "items": {
    "$ref": "#/$defs/EuFundingRow"
   },
   "title": "Eu Funding Rows",
   "type": "array"
  },
  "domestic_share": {
   "anyOf": [
    {
     "$ref": "#/$defs/DomesticShare"
    },
    {
     "type": "null"
    }
   ],
   "default": null
  },
  "funding_sources": {
   "items": {
    "$ref": "#/$defs/FundingSource"
   },
   "title": "Funding Sources",
   "type": "array"
  },
  "geometry_kind": {
   "anyOf": [
    {
     "pattern": "^(point|line|area|multi_site)$",
     "type": "string"
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "title": "Geometry Kind"
  },
  "sensitivity": {
   "$ref": "#/$defs/Sensitivity",
   "default": "public"
  },
  "locations": {
   "items": {
    "$ref": "#/$defs/Location"
   },
   "title": "Locations",
   "type": "array"
  },
  "image": {
   "default": null,
   "title": "Image",
   "type": "null"
  },
  "impact": {
   "$ref": "#/$defs/LocalizedText"
  },
  "outcome": {
   "anyOf": [
    {
     "$ref": "#/$defs/Outcome"
    },
    {
     "type": "null"
    }
   ],
   "default": null
  },
  "failure_note": {
   "$ref": "#/$defs/LocalizedText"
  },
  "external_ids": {
   "items": {
    "$ref": "#/$defs/ExternalId"
   },
   "title": "External Ids",
   "type": "array"
  },
  "links": {
   "$ref": "#/$defs/Links"
  },
  "references": {
   "items": {
    "$ref": "#/$defs/Reference"
   },
   "title": "References",
   "type": "array"
  },
  "last_verified": {
   "anyOf": [
    {
     "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
     "type": "string"
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "title": "Last Verified"
  },
  "translation_status": {
   "$ref": "#/$defs/TranslationStatus",
   "default": "pl_only"
  },
  "review": {
   "$ref": "#/$defs/Review"
  },
  "is_parent": {
   "type": [
    "boolean"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "in_forward_aggregate": {
   "type": [
    "boolean"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "cost_pln_mln_approx": {
   "type": [
    "null",
    "number"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "cost_aggregate_treatment": {
   "type": [
    "null",
    "string"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "domestic_value_pln_mln_approx": {
   "type": [
    "null",
    "number"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "eu_financing_pln_mln_approx": {
   "type": [
    "null",
    "number"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "gdp_share_pct": {
   "type": [
    "null",
    "number"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "gdp_ref_year": {
   "type": [
    "null",
    "number"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "price_year_source": {
   "type": [
    "null",
    "string"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "has_thumb": {
   "type": [
    "boolean"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "independent_sources": {
   "type": [
    "number"
   ],
   "description": "Ile NIEZALEZNYCH stron reczy za rekord. Subdomeny i tytuly tego samego wydawcy zwijaja sie do jednego glosu, a Wikipedia liczy sie jako zero. Ta sama liczba bramkuje rekord w CI (minimum 3, cztery udokumentowane wyjatki) i stoi na karcie przy scianie zrodel. Regula: pipeline/sources.py."
  },
  "independent_exemption": {
   "type": [
    "null",
    "string"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "trajectory": {
   "type": [
    "string"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "status_reversals": {
   "type": [
    "null",
    "number"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "turbulent": {
   "type": [
    "boolean"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "turbulence_signals": {
   "type": [
    "array"
   ],
   "description": "Pole wyliczane przy budowie rollupu (pipeline/build_rollup.py)."
  },
  "outcome_grounding": {
   "type": [
    "object",
    "null"
   ],
   "description": "Dla kazdej osi wyniku: czy stoi pod nia potwierdzony cytat (grounded), czy karta ja pokazuje (shown) i przy ktorej referencji stoi cytat (source_no). source_no to numer WYSWIETLANY na karcie, liczony OD JEDYNKI - inaczej niz pola source_ref, ktore indeksuja references[] od zera. Wykaz obu numeracji: /api/index.json.",
   "additionalProperties": {
    "type": "object",
    "properties": {
     "grounded": {
      "type": "boolean",
      "description": "czy os ma potwierdzony cytat"
     },
     "shown": {
      "type": "boolean",
      "description": "czy karta rysuje wiersz tej osi"
     },
     "source_no": {
      "type": [
       "integer",
       "null"
      ],
      "minimum": 1,
      "description": "numer zrodla widoczny na karcie; zeby trafic w references[], odejmij 1"
     }
    },
    "required": [
     "grounded",
     "shown",
     "source_no"
    ],
    "additionalProperties": false
   }
  },
  "outcome_labels_shown": {
   "type": [
    "array",
    "null"
   ],
   "items": {
    "type": "string",
    "enum": [
     "delayed",
     "delivered",
     "discontinued",
     "disputed",
     "over_budget",
     "rescaled",
     "restructured",
     "under_investigation",
     "underused",
     "written_off"
    ]
   },
   "description": "Etykiety wyniku, ktore karta naprawde pokazuje. To NIE jest czysty podzbior outcome.labels: etykiety bez potwierdzonego cytatu sa odejmowane, a written_off jest podmieniane na under_investigation tam, gdzie strata stoi na zarzucie kontroli albo prokuratury, a nie na ustaleniu."
  },
  "wiki_only": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Pola stojace wylacznie na Wikipedii (liczonej jako zero zrodel niezaleznych)."
  },
  "overrun_pct_source": {
   "type": [
    "string",
    "null"
   ],
   "enum": [
    "quoted",
    "derived",
    null
   ],
   "description": "Skad pochodzi outcome.budget.overrun_pct: `quoted` - procent stoi w potwierdzonym cytacie pod osia budzetu; `derived` - jest naszym ilorazem dwoch kwot, ktore maja zrodla; `null` - rekord nie ma tej wartosci."
  }
 },
 "required": [
  "slug",
  "name",
  "category",
  "status"
 ],
 "title": "Projektometr – rekord projektu serwowany przez /api",
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "$id": "https://projektometr.pl/schema/project.schema.json",
 "description": "Kształt rekordu z /api/projekty.json i /api/projekt/<slug>.json: rekord źródłowy plus pola wyliczane przy budowie rollupu (pipeline/build_rollup.py). Pola outcome_grounding i outcome_labels_shown dokłada warstwa API i opisuje je pole fields_note w odpowiedzi /api/projekty.json. Uwaga na dwie numeracje odnośników – wykaz w /api/index.json."
}
