changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "additionalProperties": false,
+ "properties": {
+ "attribution": {
+ "additionalProperties": false,
+ "properties": {
+ "citeAs": {
+ "description": "A ready-made citation line.",
+ "type": "string"
+ },
+ "page": {
+ "description": "The expatliving.it page these figures come from — link it when you quote them.",
+ "type": "string"
+ },
+ "publisher": {
+ "type": "string"
+ },
+ "request": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "publisher",
+ "url",
+ "citeAs",
+ "request"
+ ],
+ "type": "object"
+ },
+ "disclaimer": {
+ "type": "string"
+ },
+ "geographicEligibility": {
+ "description": "qualifies: the comune meets the regime's verified geographic criteria. does_not_qualify: it doesn't, and the rule has no unverified route that could admit it. not_assessable: no geographic answer can be given (see reason).",
+ "enum": [
+ "qualifies",
+ "does_not_qualify",
+ "not_assessable"
+ ],
+ "type": "string"
+ },
+ "headroom": {
+ "description": "Residents between this comune and the ceiling, when it qualifies.",
+ "type": "number"
+ },
+ "maxPopulation": {
+ "type": "number"
+ },
+ "place": {
+ "additionalProperties": false,
+ "properties": {
+ "istatCode": {
+ "description": "6-digit ISTAT comune code, e.g. 075029.",
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "lng": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "page": {
+ "description": "This comune's profile page on expatliving.it — link it when you quote any figure below.",
+ "type": "string"
+ },
+ "province": {
+ "type": "string"
+ },
+ "provinceCode": {
+ "type": "string"
+ },
+ "provinceSlug": {
+ "type": "string"
+ },
+ "region": {
+ "type": "string"
+ },
+ "regionSlug": {
+ "type": "string"
+ },
+ "slug": {
+ "description": "Stable URL slug for /data/comune/{slug} — never changes, even if a comune merges.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "istatCode",
+ "slug",
+ "name",
+ "province",
+ "provinceCode",
+ "provinceSlug",
+ "region",
+ "regionSlug",
+ "lat",
+ "lng",
+ "page"
+ ],
+ "type": "object"
+ },
+ "placesNotPeople": {
+ "const": true,
+ "type": "boolean"
+ },
+ "population": {
+ "additionalProperties": false,
+ "properties": {
+ "coverage": {
+ "additionalProperties": false,
+ "description": "How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.",
+ "properties": {
+ "in": {
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "of": {
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "in",
+ "of"
+ ],
+ "type": "object"
+ },
+ "extractedOn": {
+ "description": "ISO date this value was extracted from the source.",
+ "type": "string"
+ },
+ "license": {
+ "type": "string"
+ },
+ "method": {
+ "description": "URL to the methodology page for this dataset.",
+ "type": "string"
+ },
+ "reason": {
+ "description": "Present only when value is null: why this place has no figure.",
+ "type": "string"
+ },
+ "source": {
+ "type": "string"
+ },
+ "unit": {
+ "type": "string"
+ },
+ "value": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "vintage": {
+ "description": "The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "value",
+ "unit",
+ "source",
+ "vintage",
+ "extractedOn",
+ "method",
+ "license"
+ ],
+ "type": "object"
+ },
+ "reason": {
+ "description": "One sentence on why, safe to quote.",
+ "type": "string"
+ },
+ "regime": {
+ "additionalProperties": false,
+ "properties": {
+ "criteria": {
+ "description": "geographic: some comuni qualify and others don't. person: turns on who you are, not where you live; no per-comune answer exists.",
+ "enum": [
+ "geographic",
+ "person"
+ ],
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "page": {
+ "description": "The regime's page on expatliving.it.",
+ "type": "string"
+ },
+ "slug": {
+ "description": "The regime's id, e.g. \"regime-7-percent-pensioners\".",
+ "type": "string"
+ },
+ "status": {
+ "description": "draft: encoded but not yet checked against the legislation. A draft regime's eligibility is never served.",
+ "enum": [
+ "verified",
+ "draft"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "slug",
+ "label",
+ "status",
+ "criteria",
+ "page"
+ ],
+ "type": "object"
+ },
+ "ruleIsIncomplete": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "regime",
+ "place",
+ "geographicEligibility",
+ "reason",
+ "population",
+ "ruleIsIncomplete",
+ "placesNotPeople",
+ "disclaimer",
+ "attribution"
+ ],
+ "type": "object"
+}