Merges ac-helper (PHP Activation Calendar) and brief-extractor (Python AI) into a single Docker app with React/TypeScript frontend. Features: - Brief upload → AI extraction → review → Activation Calendar import - Handsontable v17 spreadsheet with dependent dropdowns (148 categories) - AI natural language commands via Gemini (YOLO mode, voice input) - Azure AD MSAL SPA PKCE authentication, user roles (user/admin) - CSV Activation Calendar export - Real-time WebSocket job progress - Admin: user management, dropdown Excel upload - Multi-stage Dockerfile, docker-compose, nginx proxy instructions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
93 lines
No EOL
3.8 KiB
JSON
Executable file
93 lines
No EOL
3.8 KiB
JSON
Executable file
{
|
||
"name": "base_deliverable_extraction",
|
||
"description": "Extract base deliverables with multiplier arrays from document analysis",
|
||
"schema": {
|
||
"type": "object",
|
||
"properties": {
|
||
"assets": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "object",
|
||
"properties": {
|
||
"title": {
|
||
"type": "string",
|
||
"description": "Asset title or name (normalized base deliverable name without multipliers)"
|
||
},
|
||
"status": {
|
||
"type": "string",
|
||
"description": "Current status (e.g., 'Draft', 'In Progress', 'Final')"
|
||
},
|
||
"category": {
|
||
"type": "string",
|
||
"description": "Asset category (e.g., 'Social Media', 'Display Advertising', 'Video Content')"
|
||
},
|
||
"media": {
|
||
"type": "string",
|
||
"description": "Media type (e.g., 'IMAGE', 'VIDEO', 'COPY', 'INTERACTIVE')"
|
||
},
|
||
"asset_type": {
|
||
"type": "string",
|
||
"description": "File format (e.g., 'JPG', 'PNG', 'MP4', 'GIF')"
|
||
},
|
||
"brand_identifier": {
|
||
"type": "string",
|
||
"description": "Brand or client identifier (e.g., 'Adidas', 'Nike', 'Client A')"
|
||
},
|
||
"technical_specifications": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string"
|
||
},
|
||
"description": "MULTIPLIER FIELD: Dimensions, sizes, requirements. Use array when document lists multiple sizes/specs for this deliverable (e.g., ['1080x1080', '1080x1920', '1200x1500']). Use single value ['1920x1080'] when only one size specified"
|
||
},
|
||
"review_date": {
|
||
"type": "string",
|
||
"description": "Review deadline (e.g., '2025-09-30')"
|
||
},
|
||
"live_date": {
|
||
"type": "string",
|
||
"description": "Go-live date (e.g., '2025-10-15')"
|
||
},
|
||
"end_date": {
|
||
"type": "string",
|
||
"description": "End/expiry date (e.g., '2025-12-31')"
|
||
},
|
||
"reference_material": {
|
||
"type": "string",
|
||
"description": "Requirements, links, notes (e.g., 'As per style guide', 'See attachment A')"
|
||
},
|
||
"language_country_market": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string"
|
||
},
|
||
"description": "MULTIPLIER FIELD: Target language-country-market combinations using ISO codes. Use when deliverable serves multiple markets (e.g., ['EN-UK', 'DE-DE', 'FR-FR', 'ES-ES']). Use single value ['EN-US'] for single market. Format: [Language ISO]-[Country ISO] or just [Country ISO] if language not specified"
|
||
},
|
||
"quantity": {
|
||
"type": "string",
|
||
"description": "Expected total quantity for VALIDATION. Use this as a sense-check: the multiplication of all array fields should result in a total close to this quantity. If brief says '50 banners', ensure technical_specifications × language_country_market ≈ 50"
|
||
},
|
||
"page_number": {
|
||
"type": "string",
|
||
"description": "Source page reference (e.g., '5', 'Pages 3-7')"
|
||
},
|
||
"priority_level": {
|
||
"type": "string",
|
||
"description": "Business priority (e.g., 'High', 'Medium', 'Low')"
|
||
},
|
||
"creative_direction": {
|
||
"type": "string",
|
||
"description": "Design requirements (e.g., 'Brand colors, clean layout', 'Minimalist style')"
|
||
}
|
||
},
|
||
"required": [
|
||
"title"
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"required": [
|
||
"assets"
|
||
]
|
||
}
|
||
} |