← Files LuciaARCHIVED FILE

modules/presenza-digitale-studio/schemas/website_intake.schema.json

6.23 KB · Oct 3, 2026 · 06:31 UTC

↓ Download file

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://mparanza.com/schemas/presenza-digitale-studio/website-intake-v3.json",
  "title": "Website intake",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema_version",
    "mode",
    "studio",
    "reference_date",
    "objective",
    "audiences",
    "requested_pages",
    "existing_site",
    "selected_files",
    "confirmed_facts",
    "constraints",
    "external_routes"
  ],
  "properties": {
    "schema_version": {"const": 3},
    "mode": {"enum": ["refresh", "first_site"]},
    "studio": {
      "type": "object",
      "additionalProperties": false,
      "required": ["name", "owner", "language"],
      "properties": {
        "name": {"type": "string", "minLength": 1},
        "owner": {"type": "string", "minLength": 1},
        "language": {"type": "string", "minLength": 2},
        "jurisdiction": {"type": ["string", "null"]}
      }
    },
    "reference_date": {"type": "string", "format": "date"},
    "objective": {"type": "string", "minLength": 1},
    "audiences": {
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {"type": "string", "minLength": 1}
    },
    "requested_pages": {
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {"type": "string", "minLength": 1}
    },
    "existing_site": {
      "type": "object",
      "additionalProperties": false,
      "required": ["url", "platform"],
      "properties": {
        "url": {"type": ["string", "null"], "format": "uri"},
        "platform": {"type": ["string", "null"]}
      }
    },
    "selected_files": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["id", "role", "path", "approved_for_website_use"],
        "properties": {
          "id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9_-]*$"},
          "role": {
            "enum": [
              "current_site_snapshot",
              "screenshot",
              "studio_material",
              "brand_asset",
              "approved_photo",
              "legal_text",
              "source_code",
              "other"
            ]
          },
          "path": {"type": "string", "minLength": 1},
          "approved_for_website_use": {"const": true}
        }
      }
    },
    "confirmed_facts": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "statement",
          "confirmed_by",
          "confirmed_by_user",
          "approved_for_website_use"
        ],
        "properties": {
          "id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9_-]*$"},
          "statement": {"type": "string", "minLength": 1},
          "confirmed_by": {"type": "string", "minLength": 1},
          "confirmed_by_user": {"const": true},
          "approved_for_website_use": {"const": true}
        }
      }
    },
    "constraints": {
      "type": "array",
      "uniqueItems": true,
      "items": {"type": "string", "minLength": 1}
    },
    "external_routes": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "public_site_inspection",
        "studio_material_connector",
        "creative_assistance",
        "preview_publication",
        "final_publication"
      ],
      "properties": {
        "public_site_inspection": {
          "allOf": [
            {"$ref": "#/$defs/route"},
            {"properties": {"provider": {"enum": ["none", "public_web", "other"]}}}
          ]
        },
        "studio_material_connector": {
          "allOf": [
            {"$ref": "#/$defs/route"},
            {"properties": {"provider": {"enum": ["none", "connector"]}}}
          ]
        },
        "creative_assistance": {
          "allOf": [
            {"$ref": "#/$defs/route"},
            {"properties": {"provider": {"enum": ["none", "creative_service", "other"]}}}
          ]
        },
        "preview_publication": {
          "allOf": [
            {"$ref": "#/$defs/route"},
            {"properties": {"provider": {"enum": ["none", "sites", "other"]}}}
          ]
        },
        "final_publication": {
          "allOf": [
            {"$ref": "#/$defs/route"},
            {"properties": {"provider": {"enum": ["none", "sites", "other"]}}}
          ]
        }
      }
    }
  },
  "allOf": [
    {
      "anyOf": [
        {"properties": {"selected_files": {"minItems": 1}}},
        {"properties": {"confirmed_facts": {"minItems": 1}}}
      ]
    },
    {
      "if": {"properties": {"mode": {"const": "refresh"}}},
      "then": {
        "properties": {
          "selected_files": {"minItems": 1},
          "existing_site": {
            "properties": {
              "url": {"type": "string", "format": "uri", "pattern": "^https?://", "minLength": 1},
              "platform": {
                "oneOf": [
                  {"type": "null"},
                  {"type": "string", "minLength": 1}
                ]
              }
            }
          }
        }
      },
      "else": {
        "properties": {
          "existing_site": {
            "properties": {
              "url": {"type": "null"},
              "platform": {"type": "null"}
            }
          }
        }
      }
    }
  ],
  "$defs": {
    "route": {
      "type": "object",
      "additionalProperties": false,
      "required": ["selected", "provider", "destination", "approved_by_user"],
      "properties": {
        "selected": {"type": "boolean"},
        "provider": {
          "enum": ["none", "public_web", "connector", "creative_service", "sites", "other"]
        },
        "destination": {"type": "string"},
        "approved_by_user": {"type": "boolean"}
      },
      "allOf": [
        {
          "if": {"properties": {"selected": {"const": true}}},
          "then": {
            "properties": {
              "provider": {"not": {"const": "none"}},
              "destination": {"minLength": 1},
              "approved_by_user": {"const": true}
            }
          },
          "else": {
            "properties": {
              "provider": {"const": "none"},
              "approved_by_user": {"const": false}
            }
          }
        }
      ]
    }
  }
}

SHA-256: e7b925fd9a18c5b9010dd61738cefa6e5563a09ef509ab8dc2866c85a7526b8c