{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://example.invalid/schemas/report-payload.schema.json", "title": "Monthly Report Render Payload", "type": "object", "additionalProperties": false, "properties": { "report": { "type": "object", "additionalProperties": false, "properties": { "report_version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+$" }, "prompt_version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+$" }, "template_version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+$" }, "generated_at": { "type": "string", "format": "date-time" }, "publisher": { "type": "string", "minLength": 2, "maxLength": 120 }, "period": { "type": "object", "additionalProperties": false, "properties": { "year": { "type": "integer", "minimum": 2020, "maximum": 2100 }, "month": { "type": "integer", "minimum": 1, "maximum": 12 }, "label": { "type": "string", "minLength": 4, "maxLength": 40 }, "comparison_label": { "type": "string", "minLength": 4, "maxLength": 60 } }, "required": [ "year", "month", "label", "comparison_label" ] } }, "required": [ "report_version", "prompt_version", "template_version", "generated_at", "publisher", "period" ] }, "customer": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^[a-zA-Z0-9_-]{2,64}$" }, "name": { "type": "string", "minLength": 2, "maxLength": 160 }, "property_name": { "type": "string", "minLength": 2, "maxLength": 160 }, "location": { "type": "string", "minLength": 2, "maxLength": 160 }, "contact_line": { "type": "string", "minLength": 0, "maxLength": 180 }, "logo_data_uri": { "type": "string", "pattern": "^data:image/(png|jpeg|svg\\+xml);base64," }, "logo_text": { "type": "string", "minLength": 1, "maxLength": 5 } }, "required": [ "id", "name", "property_name", "location", "contact_line", "logo_text" ] }, "design": { "type": "object", "additionalProperties": false, "properties": { "theme": { "type": "string", "enum": [ "alpine-sage", "classic", "editorial-ink", "editorial-ivory", "editorial-rose", "executive-blue", "executive-burgundy", "executive-charcoal", "forest-lodge", "ledger-blue", "ledger-green", "ledger-sepia", "magazine-citrus", "magazine-cobalt", "magazine-plum", "midnight-gold", "modern", "nordic-light", "nordic-night", "ocean-breeze", "poster-mono", "poster-red", "poster-yellow", "soft-lavender", "split-teal", "split-terracotta", "split-violet", "sunset-coral" ] }, "primary_color": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "secondary_color": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "accent_color": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "text_color": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "muted_color": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "surface_color": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "font_family": { "type": "string", "minLength": 3, "maxLength": 100, "pattern": "^[A-Za-z0-9 _,-]+$" }, "palette_mode": { "type": "string", "enum": [ "theme", "custom" ], "description": "theme nutzt die feste Theme-Palette; custom nutzt die mitgelieferten Designfarben." } }, "required": [ "theme", "primary_color", "secondary_color", "accent_color", "text_color", "muted_color", "surface_color", "font_family" ] }, "metrics": { "type": "object", "additionalProperties": false, "properties": { "currency": { "type": "string", "enum": [ "EUR", "USD", "GBP" ] }, "revenue": { "type": "number", "minimum": 0 }, "occupancy_rate": { "type": "number", "minimum": 0, "maximum": 100 }, "adr": { "type": "number", "minimum": 0 }, "revpar": { "type": "number", "minimum": 0 }, "bookings": { "type": "integer", "minimum": 0 }, "nights_sold": { "type": "integer", "minimum": 0 }, "average_stay": { "type": "number", "minimum": 0 }, "cancellation_rate": { "type": "number", "minimum": 0, "maximum": 100 }, "comparison": { "type": "object", "additionalProperties": false, "properties": { "revenue_delta_pct": { "type": "number", "minimum": -1000, "maximum": 1000 }, "occupancy_delta_pp": { "type": "number", "minimum": -100, "maximum": 100 }, "adr_delta_pct": { "type": "number", "minimum": -1000, "maximum": 1000 }, "bookings_delta": { "type": "integer", "minimum": -100000, "maximum": 100000 } }, "required": [ "revenue_delta_pct", "occupancy_delta_pp", "adr_delta_pct", "bookings_delta" ] } }, "required": [ "currency", "revenue", "occupancy_rate", "adr", "revpar", "bookings", "nights_sold", "average_stay", "cancellation_rate", "comparison" ] }, "trends": { "type": "array", "minItems": 2, "maxItems": 12, "items": { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string", "minLength": 2, "maxLength": 20 }, "revenue": { "type": "number", "minimum": 0 }, "occupancy_rate": { "type": "number", "minimum": 0, "maximum": 100 }, "adr": { "type": "number", "minimum": 0 } }, "required": [ "label", "revenue", "occupancy_rate", "adr" ] } }, "content": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://example.invalid/schemas/claude-output.schema.json", "title": "Claude Monthly Report Content", "type": "object", "additionalProperties": false, "properties": { "summary": { "type": "object", "additionalProperties": false, "properties": { "headline": { "type": "string", "minLength": 8, "maxLength": 110 }, "text": { "type": "string", "minLength": 80, "maxLength": 900 }, "rating": { "type": "string", "enum": [ "positive", "neutral", "watch" ] } }, "required": [ "headline", "text", "rating" ] }, "developments": { "type": "array", "minItems": 2, "maxItems": 4, "items": { "type": "object", "additionalProperties": false, "properties": { "title": { "type": "string", "minLength": 4, "maxLength": 80 }, "text": { "type": "string", "minLength": 40, "maxLength": 450 }, "impact": { "type": "string", "enum": [ "positive", "neutral", "negative" ] } }, "required": [ "title", "text", "impact" ] } }, "recommendations": { "type": "array", "minItems": 1, "maxItems": 3, "items": { "type": "object", "additionalProperties": false, "properties": { "priority": { "type": "integer", "minimum": 1, "maximum": 3 }, "category": { "type": "string", "minLength": 3, "maxLength": 80 }, "title": { "type": "string", "minLength": 5, "maxLength": 100 }, "reason": { "type": "string", "minLength": 40, "maxLength": 450 }, "action": { "type": "string", "minLength": 30, "maxLength": 450 }, "expected_effect": { "type": "string", "minLength": 20, "maxLength": 300 } }, "required": [ "priority", "category", "title", "reason", "action", "expected_effect" ] } }, "outlook": { "type": "object", "additionalProperties": false, "properties": { "headline": { "type": "string", "minLength": 5, "maxLength": 100 }, "text": { "type": "string", "minLength": 60, "maxLength": 700 } }, "required": [ "headline", "text" ] }, "data_quality_notes": { "type": "array", "maxItems": 4, "items": { "type": "string", "minLength": 5, "maxLength": 240 } } }, "required": [ "summary", "developments", "recommendations", "outlook", "data_quality_notes" ] }, "legal_note": { "type": "string", "minLength": 10, "maxLength": 500 } }, "required": [ "report", "customer", "design", "metrics", "trends", "content", "legal_note" ] }