{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:transparenta-digitala:publication-export:1.0.0",
  "title": "Pachet portabil al unei publicări canonice",
  "description": "Contract deschis pentru exportul, migrarea și verificarea unei publicări împreună cu istoricul său. Demonstrator fără efect juridic.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "$schema",
    "kind",
    "schemaVersion",
    "canonical",
    "record",
    "history",
    "lifecycle",
    "portability"
  ],
  "properties": {
    "$schema": {
      "const": "/schemas/publication-export/v1.json"
    },
    "kind": {
      "const": "transparenta-digitala.publication-export"
    },
    "schemaVersion": {
      "const": "1.0.0"
    },
    "canonical": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id",
        "slug",
        "permanentPath",
        "apiPath",
        "version",
        "payloadChecksum"
      ],
      "properties": {
        "id": { "type": "string", "format": "uuid" },
        "slug": { "type": "string", "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" },
        "permanentPath": { "type": "string", "pattern": "^/publicari/" },
        "apiPath": { "type": "string", "pattern": "^/api/v1/publications/" },
        "version": { "type": "integer", "minimum": 1 },
        "payloadChecksum": {
          "oneOf": [
            { "type": "string", "pattern": "^[0-9a-f]{64}$" },
            { "type": "null" }
          ]
        }
      }
    },
    "record": {
      "type": "object",
      "required": [
        "id",
        "slug",
        "state",
        "institutionId",
        "institutionSlug",
        "institutionName",
        "title",
        "category",
        "format",
        "publishedAt",
        "version",
        "assisted",
        "distribution"
      ],
      "properties": {
        "id": { "type": "string" },
        "slug": { "type": "string" },
        "state": { "enum": ["active", "withdrawn"] },
        "version": { "type": "integer", "minimum": 1 },
        "assisted": { "type": ["object", "null"] },
        "distribution": { "type": ["object", "null"] }
      },
      "additionalProperties": true
    },
    "history": {
      "type": "object",
      "additionalProperties": false,
      "required": ["publicationVersions", "structuredVersions"],
      "properties": {
        "publicationVersions": {
          "type": "array",
          "items": { "type": "object" }
        },
        "structuredVersions": {
          "type": "array",
          "items": { "type": "object" }
        }
      }
    },
    "lifecycle": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "state",
        "canonicalHttpStatus",
        "representation",
        "downloadsAvailable",
        "historyPreserved",
        "canonicalUrlPreserved"
      ],
      "properties": {
        "state": { "enum": ["active", "withdrawn"] },
        "canonicalHttpStatus": { "const": 200 },
        "representation": { "enum": ["current", "withdrawal_notice"] },
        "downloadsAvailable": { "type": "boolean" },
        "historyPreserved": { "const": true },
        "canonicalUrlPreserved": { "const": true }
      }
    },
    "portability": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "apiVersion",
        "minimumReaderVersion",
        "license",
        "vendorNeutral",
        "widgetScriptPath",
        "widgetStylePath"
      ],
      "properties": {
        "apiVersion": { "const": "1.0" },
        "minimumReaderVersion": { "const": "1.0.0" },
        "license": { "const": "CC-BY-4.0" },
        "vendorNeutral": { "const": true },
        "widgetScriptPath": { "const": "/widgeturi/v1/publications.js" },
        "widgetStylePath": { "const": "/widgeturi/v1/publications.css" }
      }
    }
  }
}
