demo seed change
This commit is contained in:
43
shared/demo/fixtures/professional/01-tenant.json
Normal file
43
shared/demo/fixtures/professional/01-tenant.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"tenant": {
|
||||
"id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Panadería Artesana Madrid - Demo",
|
||||
"subdomain": "demo-artesana",
|
||||
"email": "demo.professional@panaderiaartesana.com",
|
||||
"subscription_tier": "professional",
|
||||
"tenant_type": "standalone",
|
||||
"is_active": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z"
|
||||
},
|
||||
"owner": {
|
||||
"id": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "María García López",
|
||||
"email": "maria.garcia@panaderiaartesana.com",
|
||||
"role": "owner"
|
||||
},
|
||||
"subscription": {
|
||||
"id": "80000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"plan": "professional",
|
||||
"status": "active",
|
||||
"monthly_price": 299.00,
|
||||
"max_users": 10,
|
||||
"max_locations": 3,
|
||||
"max_products": 500,
|
||||
"features": {
|
||||
"production_planning": true,
|
||||
"procurement_management": true,
|
||||
"inventory_management": true,
|
||||
"sales_analytics": true,
|
||||
"multi_location": true,
|
||||
"advanced_reporting": true,
|
||||
"api_access": true,
|
||||
"priority_support": true
|
||||
},
|
||||
"trial_ends_at": "2025-02-15T06:00:00Z",
|
||||
"next_billing_date": "2025-02-01T06:00:00Z",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z"
|
||||
}
|
||||
}
|
||||
74
shared/demo/fixtures/professional/02-auth.json
Normal file
74
shared/demo/fixtures/professional/02-auth.json
Normal file
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"users": [
|
||||
{
|
||||
"id": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "María García López",
|
||||
"email": "maria.garcia@panaderiaartesana.com",
|
||||
"role": "owner",
|
||||
"is_active": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Juan Panadero",
|
||||
"email": "juan.panadero@panaderiaartesana.com",
|
||||
"role": "baker",
|
||||
"is_active": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Ana Ventas",
|
||||
"email": "ana.ventas@panaderiaartesana.com",
|
||||
"role": "sales",
|
||||
"is_active": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000003",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Pedro Calidad",
|
||||
"email": "pedro.calidad@panaderiaartesana.com",
|
||||
"role": "quality_control",
|
||||
"is_active": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000004",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Laura Admin",
|
||||
"email": "laura.admin@panaderiaartesana.com",
|
||||
"role": "admin",
|
||||
"is_active": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000005",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Carlos Almacén",
|
||||
"email": "carlos.almacen@panaderiaartesana.com",
|
||||
"role": "warehouse",
|
||||
"is_active": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000006",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Isabel Producción",
|
||||
"email": "isabel.produccion@panaderiaartesana.com",
|
||||
"role": "production_manager",
|
||||
"is_active": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1016,5 +1016,102 @@
|
||||
"updated_at": "2025-01-15T06:00:00Z",
|
||||
"created_by": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6"
|
||||
}
|
||||
],
|
||||
"stock": [
|
||||
{
|
||||
"id": "10000000-0000-0000-0000-000000001001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000001",
|
||||
"quantity": 80.0,
|
||||
"reserved_quantity": 0.0,
|
||||
"available_quantity": 80.0,
|
||||
"location": "Almacén Principal - Zona A",
|
||||
"production_stage": "raw_ingredient",
|
||||
"quality_status": "good",
|
||||
"expiration_date": "2025-07-15T00:00:00Z",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000001",
|
||||
"batch_number": "HAR-T55-20250110-001",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z",
|
||||
"is_available": true,
|
||||
"is_expired": false,
|
||||
"notes": "⚠️ CRITICAL: Below reorder point (80 < 150) - NO pending PO - Should trigger RED alert"
|
||||
},
|
||||
{
|
||||
"id": "10000000-0000-0000-0000-000000001002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000011",
|
||||
"quantity": 25.0,
|
||||
"reserved_quantity": 5.0,
|
||||
"available_quantity": 20.0,
|
||||
"location": "Almacén Refrigerado - Zona B",
|
||||
"production_stage": "raw_ingredient",
|
||||
"quality_status": "good",
|
||||
"expiration_date": "2025-02-15T00:00:00Z",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000002",
|
||||
"batch_number": "MAN-SAL-20250112-001",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z",
|
||||
"is_available": true,
|
||||
"is_expired": false,
|
||||
"notes": "⚠️ LOW: Below reorder point (25 < 40) - Has pending PO (PO-2025-006) - Should show warning"
|
||||
},
|
||||
{
|
||||
"id": "10000000-0000-0000-0000-000000001003",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000021",
|
||||
"quantity": 8.0,
|
||||
"reserved_quantity": 2.0,
|
||||
"available_quantity": 6.0,
|
||||
"location": "Almacén Refrigerado - Zona C",
|
||||
"production_stage": "raw_ingredient",
|
||||
"quality_status": "good",
|
||||
"expiration_date": "2025-02-28T00:00:00Z",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000003",
|
||||
"batch_number": "LEV-FRE-20250114-001",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z",
|
||||
"is_available": true,
|
||||
"is_expired": false,
|
||||
"notes": "⚠️ LOW: Below reorder point (8 < 10) - Has pending PO (PO-2025-004-URGENT) - Critical for production"
|
||||
},
|
||||
{
|
||||
"id": "10000000-0000-0000-0000-000000001004",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000002",
|
||||
"quantity": 180.0,
|
||||
"reserved_quantity": 20.0,
|
||||
"available_quantity": 160.0,
|
||||
"location": "Almacén Principal - Zona A",
|
||||
"production_stage": "raw_ingredient",
|
||||
"quality_status": "good",
|
||||
"expiration_date": "2025-06-15T00:00:00Z",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000001",
|
||||
"batch_number": "HAR-T65-20250111-001",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z",
|
||||
"is_available": true,
|
||||
"is_expired": false,
|
||||
"notes": "Above reorder point - Normal stock level"
|
||||
},
|
||||
{
|
||||
"id": "10000000-0000-0000-0000-000000001005",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000012",
|
||||
"quantity": 120.0,
|
||||
"reserved_quantity": 10.0,
|
||||
"available_quantity": 110.0,
|
||||
"location": "Almacén Refrigerado - Zona B",
|
||||
"production_stage": "raw_ingredient",
|
||||
"quality_status": "good",
|
||||
"expiration_date": "2025-01-22T00:00:00Z",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000002",
|
||||
"batch_number": "LEC-ENT-20250114-001",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z",
|
||||
"is_available": true,
|
||||
"is_expired": false,
|
||||
"notes": "Above reorder point - Normal stock level"
|
||||
}
|
||||
]
|
||||
}
|
||||
840
shared/demo/fixtures/professional/04-recipes.json
Normal file
840
shared/demo/fixtures/professional/04-recipes.json
Normal file
@@ -0,0 +1,840 @@
|
||||
{
|
||||
"recipes": [
|
||||
{
|
||||
"id": "30000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Baguette Francesa Tradicional",
|
||||
"recipe_code": null,
|
||||
"version": "1.0",
|
||||
"finished_product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"description": "Baguette francesa tradicional con corteza crujiente y miga alveolada. Perfecta para acompañar cualquier comida.",
|
||||
"category": "Panes",
|
||||
"cuisine_type": "Francesa",
|
||||
"difficulty_level": 2,
|
||||
"yield_quantity": 10.0,
|
||||
"yield_unit": "units",
|
||||
"prep_time_minutes": 20,
|
||||
"cook_time_minutes": 25,
|
||||
"total_time_minutes": 165,
|
||||
"rest_time_minutes": 120,
|
||||
"estimated_cost_per_unit": null,
|
||||
"last_calculated_cost": null,
|
||||
"cost_calculation_date": null,
|
||||
"target_margin_percentage": null,
|
||||
"suggested_selling_price": null,
|
||||
"instructions": {
|
||||
"steps": [
|
||||
{
|
||||
"step": 1,
|
||||
"title": "Amasado",
|
||||
"description": "Mezclar harina, agua, sal y levadura. Amasar durante 15 minutos hasta obtener una masa lisa y elástica.",
|
||||
"duration_minutes": 15
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"title": "Primera Fermentación",
|
||||
"description": "Dejar reposar la masa en un recipiente tapado durante 60 minutos a temperatura ambiente (22-24°C).",
|
||||
"duration_minutes": 60
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"title": "División y Formado",
|
||||
"description": "Dividir la masa en 10 piezas de 250g cada una. Formar las baguettes dándoles la forma alargada característica.",
|
||||
"duration_minutes": 20
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"title": "Segunda Fermentación",
|
||||
"description": "Colocar las baguettes en un lienzo enharinado y dejar fermentar 60 minutos más.",
|
||||
"duration_minutes": 60
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"title": "Greñado y Horneado",
|
||||
"description": "Hacer cortes diagonales en la superficie con una cuchilla. Hornear a 240°C con vapor inicial durante 25 minutos.",
|
||||
"duration_minutes": 25
|
||||
}
|
||||
]
|
||||
},
|
||||
"preparation_notes": "Es crucial usar vapor al inicio del horneado para lograr una corteza crujiente. La temperatura del agua debe estar entre 18-20°C.",
|
||||
"storage_instructions": "Consumir el mismo día de producción. Se puede congelar después del horneado.",
|
||||
"serves_count": null,
|
||||
"nutritional_info": null,
|
||||
"allergen_info": null,
|
||||
"dietary_tags": null,
|
||||
"batch_size_multiplier": 1.0,
|
||||
"minimum_batch_size": null,
|
||||
"maximum_batch_size": null,
|
||||
"optimal_production_temperature": null,
|
||||
"optimal_humidity": null,
|
||||
"quality_check_configuration": null,
|
||||
"status": "ACTIVE",
|
||||
"is_seasonal": false,
|
||||
"season_start_month": null,
|
||||
"season_end_month": null,
|
||||
"is_signature_item": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z",
|
||||
"created_by": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"updated_by": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6"
|
||||
},
|
||||
{
|
||||
"id": "30000000-0000-0000-0000-000000000002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Croissant de Mantequilla Artesanal",
|
||||
"recipe_code": null,
|
||||
"version": "1.0",
|
||||
"finished_product_id": "20000000-0000-0000-0000-000000000002",
|
||||
"description": "Croissant de mantequilla con laminado perfecto y textura hojaldrada. Elaboración artesanal con mantequilla de alta calidad.",
|
||||
"category": "Bollería",
|
||||
"cuisine_type": "Francesa",
|
||||
"difficulty_level": 4,
|
||||
"yield_quantity": 12.0,
|
||||
"yield_unit": "units",
|
||||
"prep_time_minutes": 45,
|
||||
"cook_time_minutes": 18,
|
||||
"total_time_minutes": 333,
|
||||
"rest_time_minutes": 270,
|
||||
"estimated_cost_per_unit": null,
|
||||
"last_calculated_cost": null,
|
||||
"cost_calculation_date": null,
|
||||
"target_margin_percentage": null,
|
||||
"suggested_selling_price": null,
|
||||
"instructions": {
|
||||
"steps": [
|
||||
{
|
||||
"step": 1,
|
||||
"title": "Preparación de la Masa Base",
|
||||
"description": "Mezclar todos los ingredientes excepto la mantequilla de laminado. Amasar hasta obtener una masa homogénea.",
|
||||
"duration_minutes": 20
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"title": "Reposo en Frío",
|
||||
"description": "Envolver la masa en film y refrigerar durante 2 horas.",
|
||||
"duration_minutes": 120
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"title": "Laminado",
|
||||
"description": "Extender la masa en rectángulo. Colocar la mantequilla en el centro y hacer 3 dobleces sencillos con 30 minutos de reposo entre cada uno.",
|
||||
"duration_minutes": 90
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"title": "Formado",
|
||||
"description": "Extender a 3mm de grosor, cortar triángulos y enrollar para formar los croissants.",
|
||||
"duration_minutes": 25
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"title": "Fermentación Final",
|
||||
"description": "Dejar fermentar a 26°C durante 2-3 horas hasta que dupliquen su volumen.",
|
||||
"duration_minutes": 150
|
||||
},
|
||||
{
|
||||
"step": 6,
|
||||
"title": "Horneado",
|
||||
"description": "Pintar con huevo batido y hornear a 200°C durante 18 minutos hasta dorar.",
|
||||
"duration_minutes": 18
|
||||
}
|
||||
]
|
||||
},
|
||||
"preparation_notes": "La mantequilla para laminar debe estar a 15-16°C, flexible pero no blanda. Trabajar en ambiente fresco.",
|
||||
"storage_instructions": "Consumir el día de producción. Se puede congelar la masa formada antes de la fermentación final.",
|
||||
"serves_count": null,
|
||||
"nutritional_info": null,
|
||||
"allergen_info": null,
|
||||
"dietary_tags": null,
|
||||
"batch_size_multiplier": 1.0,
|
||||
"minimum_batch_size": null,
|
||||
"maximum_batch_size": null,
|
||||
"optimal_production_temperature": null,
|
||||
"optimal_humidity": null,
|
||||
"quality_check_configuration": null,
|
||||
"status": "ACTIVE",
|
||||
"is_seasonal": false,
|
||||
"season_start_month": null,
|
||||
"season_end_month": null,
|
||||
"is_signature_item": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z",
|
||||
"created_by": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"updated_by": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6"
|
||||
},
|
||||
{
|
||||
"id": "30000000-0000-0000-0000-000000000003",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Pan de Pueblo con Masa Madre",
|
||||
"recipe_code": null,
|
||||
"version": "1.0",
|
||||
"finished_product_id": "20000000-0000-0000-0000-000000000003",
|
||||
"description": "Hogaza de pan rústico elaborada con masa madre natural. Corteza gruesa y miga densa con sabor ligeramente ácido.",
|
||||
"category": "Panes Artesanales",
|
||||
"cuisine_type": "Española",
|
||||
"difficulty_level": 3,
|
||||
"yield_quantity": 4.0,
|
||||
"yield_unit": "units",
|
||||
"prep_time_minutes": 30,
|
||||
"cook_time_minutes": 45,
|
||||
"total_time_minutes": 435,
|
||||
"rest_time_minutes": 360,
|
||||
"estimated_cost_per_unit": null,
|
||||
"last_calculated_cost": null,
|
||||
"cost_calculation_date": null,
|
||||
"target_margin_percentage": null,
|
||||
"suggested_selling_price": null,
|
||||
"instructions": {
|
||||
"steps": [
|
||||
{
|
||||
"step": 1,
|
||||
"title": "Autolisis",
|
||||
"description": "Mezclar harinas y agua, dejar reposar 30 minutos para desarrollar el gluten.",
|
||||
"duration_minutes": 30
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"title": "Incorporación de Masa Madre y Sal",
|
||||
"description": "Añadir la masa madre y la sal. Amasar suavemente hasta integrar completamente.",
|
||||
"duration_minutes": 15
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"title": "Fermentación en Bloque con Pliegues",
|
||||
"description": "Realizar 4 series de pliegues cada 30 minutos durante las primeras 2 horas. Luego dejar reposar 2 horas más.",
|
||||
"duration_minutes": 240
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"title": "División y Preformado",
|
||||
"description": "Dividir en 4 piezas de 800g. Preformar en bolas y dejar reposar 30 minutos.",
|
||||
"duration_minutes": 30
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"title": "Formado Final",
|
||||
"description": "Formar las hogazas dándoles tensión superficial. Colocar en banneton o lienzo enharinado.",
|
||||
"duration_minutes": 15
|
||||
},
|
||||
{
|
||||
"step": 6,
|
||||
"title": "Fermentación Final",
|
||||
"description": "Dejar fermentar a temperatura ambiente durante 2 horas o en frío durante la noche.",
|
||||
"duration_minutes": 120
|
||||
},
|
||||
{
|
||||
"step": 7,
|
||||
"title": "Horneado",
|
||||
"description": "Hacer cortes en la superficie. Hornear a 230°C con vapor inicial durante 45 minutos.",
|
||||
"duration_minutes": 45
|
||||
}
|
||||
]
|
||||
},
|
||||
"preparation_notes": "La masa madre debe estar activa y en su punto óptimo. La temperatura final de la masa debe ser 24-25°C.",
|
||||
"storage_instructions": "Se conserva hasta 5-7 días en bolsa de papel. Mejora al segundo día.",
|
||||
"serves_count": null,
|
||||
"nutritional_info": null,
|
||||
"allergen_info": null,
|
||||
"dietary_tags": null,
|
||||
"batch_size_multiplier": 1.0,
|
||||
"minimum_batch_size": null,
|
||||
"maximum_batch_size": null,
|
||||
"optimal_production_temperature": null,
|
||||
"optimal_humidity": null,
|
||||
"quality_check_configuration": null,
|
||||
"status": "ACTIVE",
|
||||
"is_seasonal": false,
|
||||
"season_start_month": null,
|
||||
"season_end_month": null,
|
||||
"is_signature_item": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z",
|
||||
"created_by": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"updated_by": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6"
|
||||
},
|
||||
{
|
||||
"id": "30000000-0000-0000-0000-000000000004",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Napolitana de Chocolate",
|
||||
"recipe_code": null,
|
||||
"version": "1.0",
|
||||
"finished_product_id": "20000000-0000-0000-0000-000000000004",
|
||||
"description": "Bollería de hojaldre rectangular rellena de chocolate. Clásico de las panaderías españolas.",
|
||||
"category": "Bollería",
|
||||
"cuisine_type": "Española",
|
||||
"difficulty_level": 3,
|
||||
"yield_quantity": 16.0,
|
||||
"yield_unit": "units",
|
||||
"prep_time_minutes": 40,
|
||||
"cook_time_minutes": 15,
|
||||
"total_time_minutes": 325,
|
||||
"rest_time_minutes": 270,
|
||||
"estimated_cost_per_unit": null,
|
||||
"last_calculated_cost": null,
|
||||
"cost_calculation_date": null,
|
||||
"target_margin_percentage": null,
|
||||
"suggested_selling_price": null,
|
||||
"instructions": {
|
||||
"steps": [
|
||||
{
|
||||
"step": 1,
|
||||
"title": "Masa Base y Laminado",
|
||||
"description": "Preparar masa de hojaldre siguiendo el mismo proceso que los croissants.",
|
||||
"duration_minutes": 180
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"title": "Corte y Formado",
|
||||
"description": "Extender la masa y cortar rectángulos de 10x15cm. Colocar barritas de chocolate en el centro.",
|
||||
"duration_minutes": 20
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"title": "Sellado",
|
||||
"description": "Doblar la masa sobre sí misma para cubrir el chocolate. Sellar bien los bordes.",
|
||||
"duration_minutes": 20
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"title": "Fermentación",
|
||||
"description": "Dejar fermentar a 26°C durante 90 minutos.",
|
||||
"duration_minutes": 90
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"title": "Horneado",
|
||||
"description": "Pintar con huevo y hornear a 190°C durante 15 minutos.",
|
||||
"duration_minutes": 15
|
||||
}
|
||||
]
|
||||
},
|
||||
"preparation_notes": "El chocolate debe ser de buena calidad para un mejor resultado. No sobrecargar de chocolate.",
|
||||
"storage_instructions": "Consumir preferiblemente el día de producción.",
|
||||
"serves_count": null,
|
||||
"nutritional_info": null,
|
||||
"allergen_info": null,
|
||||
"dietary_tags": null,
|
||||
"batch_size_multiplier": 1.0,
|
||||
"minimum_batch_size": null,
|
||||
"maximum_batch_size": null,
|
||||
"optimal_production_temperature": null,
|
||||
"optimal_humidity": null,
|
||||
"quality_check_configuration": null,
|
||||
"status": "ACTIVE",
|
||||
"is_seasonal": false,
|
||||
"season_start_month": null,
|
||||
"season_end_month": null,
|
||||
"is_signature_item": false,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z",
|
||||
"created_by": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"updated_by": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6"
|
||||
}
|
||||
],
|
||||
"recipe_ingredients": [
|
||||
{
|
||||
"id": "473debdb-ab7c-4a79-9b41-985715695710",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000001",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000001",
|
||||
"quantity": 1000.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": "tamizada",
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 1,
|
||||
"ingredient_group": "Secos",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "545c7899-d893-41f4-a839-963235f128cd",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000001",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000033",
|
||||
"quantity": 650.0,
|
||||
"unit": "ml",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": "temperatura ambiente",
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 2,
|
||||
"ingredient_group": "Líquidos",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "4e9ec9cc-6339-4191-bad5-c52b604106c9",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000001",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000031",
|
||||
"quantity": 20.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 3,
|
||||
"ingredient_group": "Secos",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "f89b85f2-e18e-451a-8048-668bcfb6bc51",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000001",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000021",
|
||||
"quantity": 15.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": "desmenuzada",
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 4,
|
||||
"ingredient_group": "Fermentos",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "5e25c0c8-17b9-4db1-b099-8dc459def206",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000002",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000001",
|
||||
"quantity": 500.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 1,
|
||||
"ingredient_group": "Masa base",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "89a9872d-4bf4-469f-8c84-37f7bf0c9a92",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000002",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000012",
|
||||
"quantity": 120.0,
|
||||
"unit": "ml",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": "tibia",
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 2,
|
||||
"ingredient_group": "Masa base",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "1843a05b-d3dd-4963-afa1-1c76fcd6922f",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000002",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000033",
|
||||
"quantity": 80.0,
|
||||
"unit": "ml",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 3,
|
||||
"ingredient_group": "Masa base",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "af984d98-3b75-458f-8fdd-02699dc33e9d",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000002",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000032",
|
||||
"quantity": 50.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 4,
|
||||
"ingredient_group": "Masa base",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "b09b738f-d24c-4dde-be76-6b88ea99511e",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000002",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000031",
|
||||
"quantity": 10.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 5,
|
||||
"ingredient_group": "Masa base",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "119496cd-e7e3-40a4-b298-09a434b679fc",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000002",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000021",
|
||||
"quantity": 20.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 6,
|
||||
"ingredient_group": "Masa base",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "c8fe9422-3000-42b4-a74a-cb00b6277130",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000002",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000011",
|
||||
"quantity": 25.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": "en la masa",
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 7,
|
||||
"ingredient_group": "Masa base",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "107a15bf-d2df-4e25-95fe-aee64febf112",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000002",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000011",
|
||||
"quantity": 250.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": "para laminar (15-16°C)",
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 8,
|
||||
"ingredient_group": "Laminado",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "242e8508-3adf-4b11-b482-33d740bd5397",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000003",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000002",
|
||||
"quantity": 800.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 1,
|
||||
"ingredient_group": "Harinas",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "ea701cf5-0c6b-45aa-9519-e4dc42a40662",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000003",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000004",
|
||||
"quantity": 200.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 2,
|
||||
"ingredient_group": "Harinas",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "3a4f0c61-8451-42fe-b3bc-4b0f4527af87",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000003",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000023",
|
||||
"quantity": 300.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": "activa y alimentada",
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 3,
|
||||
"ingredient_group": "Fermentos",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "ededf3a3-b58a-4f10-8d12-324aa3400349",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000003",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000033",
|
||||
"quantity": 650.0,
|
||||
"unit": "ml",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": "temperatura ambiente",
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 4,
|
||||
"ingredient_group": "Líquidos",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "93177be7-24e5-4e97-8d46-df373d6a04bc",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000003",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000031",
|
||||
"quantity": 22.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 5,
|
||||
"ingredient_group": "Condimentos",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "c27a4fbb-d451-4a14-b0e2-09e5cbd07bad",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000004",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000001",
|
||||
"quantity": 500.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 1,
|
||||
"ingredient_group": "Masa",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "dd8a0784-ead1-483b-b183-21c71b692a7d",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000004",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000011",
|
||||
"quantity": 300.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 2,
|
||||
"ingredient_group": "Laminado",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "6434bf78-48e5-469d-a8d0-6f4dbe5c69ca",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000004",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000041",
|
||||
"quantity": 200.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": "en barritas",
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 3,
|
||||
"ingredient_group": "Relleno",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "38661b92-03e9-4dcd-ac90-86832eee9455",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000004",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000032",
|
||||
"quantity": 60.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 4,
|
||||
"ingredient_group": "Masa",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "1ff5fb46-3361-4978-b248-a6b3bb6592f7",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000004",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000031",
|
||||
"quantity": 10.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 5,
|
||||
"ingredient_group": "Masa",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "aa85612a-f99b-4c8b-a100-08ae4a9898a5",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000004",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000021",
|
||||
"quantity": 15.0,
|
||||
"unit": "g",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 6,
|
||||
"ingredient_group": "Masa",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
},
|
||||
{
|
||||
"id": "33c542c8-bf36-4041-957f-765bf28cc68a",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"recipe_id": "30000000-0000-0000-0000-000000000004",
|
||||
"ingredient_id": "10000000-0000-0000-0000-000000000012",
|
||||
"quantity": 150.0,
|
||||
"unit": "ml",
|
||||
"quantity_in_base_unit": null,
|
||||
"alternative_quantity": null,
|
||||
"alternative_unit": null,
|
||||
"preparation_method": null,
|
||||
"ingredient_notes": null,
|
||||
"is_optional": false,
|
||||
"ingredient_order": 7,
|
||||
"ingredient_group": "Masa",
|
||||
"substitution_options": null,
|
||||
"substitution_ratio": null,
|
||||
"unit_cost": null,
|
||||
"total_cost": null,
|
||||
"cost_updated_at": null
|
||||
}
|
||||
]
|
||||
}
|
||||
154
shared/demo/fixtures/professional/05-suppliers.json
Normal file
154
shared/demo/fixtures/professional/05-suppliers.json
Normal file
@@ -0,0 +1,154 @@
|
||||
{
|
||||
"suppliers": [
|
||||
{
|
||||
"id": "40000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Harinas del Norte",
|
||||
"supplier_code": "SUP-HARINA-001",
|
||||
"business_name": "Harinas del Norte S.L.",
|
||||
"tax_id": "B12345678",
|
||||
"contact_person": "José Martínez",
|
||||
"email": "pedidos@harinasdelnorte.es",
|
||||
"phone": "+34 945 123 456",
|
||||
"address": "Pol. Industrial Norte, Calle 5",
|
||||
"city": "Vitoria-Gasteiz",
|
||||
"postal_code": "01000",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"rating": 4.5,
|
||||
"payment_terms": "30_DAYS",
|
||||
"minimum_order_amount": 200.0,
|
||||
"lead_time_days": 2,
|
||||
"contract_start_date": "2024-01-01T00:00:00Z",
|
||||
"contract_end_date": "2025-12-31T23:59:59Z",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"specialties": ["flour", "bread_improvers"],
|
||||
"delivery_areas": ["Madrid", "Basque Country", "Navarra"]
|
||||
},
|
||||
{
|
||||
"id": "40000000-0000-0000-0000-000000000002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Lácteos Gipuzkoa",
|
||||
"supplier_code": "SUP-LACTEO-001",
|
||||
"business_name": "Lácteos Gipuzkoa S.A.",
|
||||
"tax_id": "B87654321",
|
||||
"contact_person": "María López",
|
||||
"email": "ventas@lacteosgipuzkoa.com",
|
||||
"phone": "+34 943 234 567",
|
||||
"address": "Calle Urola, 12",
|
||||
"city": "Donostia-San Sebastián",
|
||||
"postal_code": "20001",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"rating": 4.8,
|
||||
"payment_terms": "15_DAYS",
|
||||
"minimum_order_amount": 150.0,
|
||||
"lead_time_days": 1,
|
||||
"contract_start_date": "2024-03-15T00:00:00Z",
|
||||
"contract_end_date": "2025-12-31T23:59:59Z",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"specialties": ["milk", "butter", "cream"],
|
||||
"delivery_areas": ["Madrid", "Basque Country", "Cantabria"]
|
||||
},
|
||||
{
|
||||
"id": "40000000-0000-0000-0000-000000000003",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Frutas Frescas",
|
||||
"supplier_code": "SUP-FRUTA-001",
|
||||
"business_name": "Frutas Frescas S.L.",
|
||||
"tax_id": "B23456789",
|
||||
"contact_person": "Carlos Ruiz",
|
||||
"email": "info@frutasfrescas.es",
|
||||
"phone": "+34 915 345 678",
|
||||
"address": "Mercado Central, Pabellón 3",
|
||||
"city": "Madrid",
|
||||
"postal_code": "28013",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"rating": 4.2,
|
||||
"payment_terms": "7_DAYS",
|
||||
"minimum_order_amount": 100.0,
|
||||
"lead_time_days": 1,
|
||||
"contract_start_date": "2024-06-01T00:00:00Z",
|
||||
"contract_end_date": "2025-12-31T23:59:59Z",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"specialties": ["fruits", "vegetables", "citrus"],
|
||||
"delivery_areas": ["Madrid", "Toledo", "Guadalajara"]
|
||||
},
|
||||
{
|
||||
"id": "40000000-0000-0000-0000-000000000004",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Sal de Mar",
|
||||
"supplier_code": "SUP-SAL-001",
|
||||
"business_name": "Sal de Mar S.A.",
|
||||
"tax_id": "B34567890",
|
||||
"contact_person": "Ana Martínez",
|
||||
"email": "ventas@saldemar.com",
|
||||
"phone": "+34 965 456 789",
|
||||
"address": "Calle Salinera, 8",
|
||||
"city": "Alicante",
|
||||
"postal_code": "03001",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"rating": 4.7,
|
||||
"payment_terms": "30_DAYS",
|
||||
"minimum_order_amount": 50.0,
|
||||
"lead_time_days": 3,
|
||||
"contract_start_date": "2024-01-01T00:00:00Z",
|
||||
"contract_end_date": "2025-12-31T23:59:59Z",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"specialties": ["salt", "sea_salt", "gourmet_salt"],
|
||||
"delivery_areas": ["Madrid", "Valencia", "Murcia"]
|
||||
},
|
||||
{
|
||||
"id": "40000000-0000-0000-0000-000000000005",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Envases Pro",
|
||||
"supplier_code": "SUP-ENVASE-001",
|
||||
"business_name": "Envases Pro S.L.",
|
||||
"tax_id": "B45678901",
|
||||
"contact_person": "Luis Gómez",
|
||||
"email": "comercial@envasespro.es",
|
||||
"phone": "+34 932 345 678",
|
||||
"address": "Calle Industrial, 15",
|
||||
"city": "Barcelona",
|
||||
"postal_code": "08019",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"rating": 4.0,
|
||||
"payment_terms": "60_DAYS",
|
||||
"minimum_order_amount": 300.0,
|
||||
"lead_time_days": 5,
|
||||
"contract_start_date": "2024-01-01T00:00:00Z",
|
||||
"contract_end_date": "2025-12-31T23:59:59Z",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"specialties": ["packaging", "bags", "boxes"],
|
||||
"delivery_areas": ["Madrid", "Barcelona", "Zaragoza"]
|
||||
},
|
||||
{
|
||||
"id": "40000000-0000-0000-0000-000000000006",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"name": "Levaduras Spain",
|
||||
"supplier_code": "SUP-LEVADURA-001",
|
||||
"business_name": "Levaduras Spain S.A.",
|
||||
"tax_id": "B56789012",
|
||||
"contact_person": "Sofía Fernández",
|
||||
"email": "ventas@levadurasspain.com",
|
||||
"phone": "+34 976 567 890",
|
||||
"address": "Calle Fermentación, 3",
|
||||
"city": "Zaragoza",
|
||||
"postal_code": "50001",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"rating": 4.9,
|
||||
"payment_terms": "30_DAYS",
|
||||
"minimum_order_amount": 100.0,
|
||||
"lead_time_days": 2,
|
||||
"contract_start_date": "2024-01-01T00:00:00Z",
|
||||
"contract_end_date": "2025-12-31T23:59:59Z",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"specialties": ["yeast", "baking_yeast", "dry_yeast"],
|
||||
"delivery_areas": ["Madrid", "Zaragoza", "Navarra"]
|
||||
}
|
||||
]
|
||||
}
|
||||
1619
shared/demo/fixtures/professional/06-production.json
Normal file
1619
shared/demo/fixtures/professional/06-production.json
Normal file
File diff suppressed because it is too large
Load Diff
436
shared/demo/fixtures/professional/07-procurement.json
Normal file
436
shared/demo/fixtures/professional/07-procurement.json
Normal file
@@ -0,0 +1,436 @@
|
||||
{
|
||||
"purchase_orders": [
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-0000000000c1",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"po_number": "PO-LATE-0001",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000001",
|
||||
"order_date": "BASE_TS - 1d",
|
||||
"status": "pending_approval",
|
||||
"priority": "high",
|
||||
"required_delivery_date": "BASE_TS - 4h",
|
||||
"estimated_delivery_date": "BASE_TS - 4h",
|
||||
"expected_delivery_date": "BASE_TS - 4h",
|
||||
"subtotal": 500.00,
|
||||
"tax_amount": 105.00,
|
||||
"shipping_cost": 20.00,
|
||||
"discount_amount": 0.00,
|
||||
"total_amount": 625.00,
|
||||
"currency": "EUR",
|
||||
"delivery_address": "Calle Panadería, 45, 28001 Madrid",
|
||||
"delivery_instructions": "URGENTE: Entrega en almacén trasero",
|
||||
"delivery_contact": "Carlos Almacén",
|
||||
"delivery_phone": "+34 910 123 456",
|
||||
"requires_approval": true,
|
||||
"sent_to_supplier_at": "BASE_TS - 1d",
|
||||
"supplier_confirmation_date": "BASE_TS - 23h",
|
||||
"supplier_reference": "SUP-REF-LATE-001",
|
||||
"notes": "⚠️ EDGE CASE: Delivery should have arrived 4 hours ago - will trigger red supplier delay alert",
|
||||
"created_by": "50000000-0000-0000-0000-000000000005"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-0000000000c2",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"po_number": "PO-UPCOMING-0001",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000002",
|
||||
"order_date": "BASE_TS - 1h",
|
||||
"status": "pending_approval",
|
||||
"priority": "medium",
|
||||
"required_delivery_date": "BASE_TS + 2h30m",
|
||||
"estimated_delivery_date": "BASE_TS + 2h30m",
|
||||
"expected_delivery_date": "BASE_TS + 2h30m",
|
||||
"subtotal": 300.00,
|
||||
"tax_amount": 63.00,
|
||||
"shipping_cost": 15.00,
|
||||
"discount_amount": 0.00,
|
||||
"total_amount": 378.00,
|
||||
"currency": "EUR",
|
||||
"delivery_address": "Calle Panadería, 45, 28001 Madrid",
|
||||
"delivery_instructions": "Mantener refrigerado",
|
||||
"delivery_contact": "Carlos Almacén",
|
||||
"delivery_phone": "+34 910 123 456",
|
||||
"requires_approval": true,
|
||||
"sent_to_supplier_at": "BASE_TS - 1h",
|
||||
"supplier_confirmation_date": "BASE_TS - 30m",
|
||||
"supplier_reference": "SUP-REF-UPCOMING-001",
|
||||
"notes": "⚠️ EDGE CASE: Delivery expected in 2.5 hours - will show in upcoming deliveries",
|
||||
"created_by": "50000000-0000-0000-0000-000000000005"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"po_number": "PO-2025-001",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000001",
|
||||
"order_date_offset_days": -7,
|
||||
"status": "completed",
|
||||
"priority": "normal",
|
||||
"required_delivery_date_offset_days": -2,
|
||||
"estimated_delivery_date_offset_days": -2,
|
||||
"expected_delivery_date_offset_days": -2,
|
||||
"subtotal": 850.00,
|
||||
"tax_amount": 178.50,
|
||||
"shipping_cost": 25.00,
|
||||
"discount_amount": 0.00,
|
||||
"total_amount": 1053.50,
|
||||
"currency": "EUR",
|
||||
"delivery_address": "Calle Panadería, 45, 28001 Madrid",
|
||||
"delivery_instructions": "Entrega en almacén trasero",
|
||||
"delivery_contact": "Carlos Almacén",
|
||||
"delivery_phone": "+34 910 123 456",
|
||||
"requires_approval": false,
|
||||
"sent_to_supplier_at_offset_days": -7,
|
||||
"supplier_confirmation_date_offset_days": -6,
|
||||
"supplier_reference": "SUP-REF-2025-001",
|
||||
"notes": "Pedido habitual semanal de harinas",
|
||||
"created_by": "50000000-0000-0000-0000-000000000005"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"po_number": "PO-2025-002",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000002",
|
||||
"order_date_offset_days": -5,
|
||||
"status": "completed",
|
||||
"priority": "normal",
|
||||
"required_delivery_date_offset_days": -1,
|
||||
"estimated_delivery_date_offset_days": -1,
|
||||
"expected_delivery_date_offset_days": -1,
|
||||
"subtotal": 320.00,
|
||||
"tax_amount": 67.20,
|
||||
"shipping_cost": 15.00,
|
||||
"discount_amount": 0.00,
|
||||
"total_amount": 402.20,
|
||||
"currency": "EUR",
|
||||
"delivery_address": "Calle Panadería, 45, 28001 Madrid",
|
||||
"delivery_instructions": "Mantener refrigerado",
|
||||
"delivery_contact": "Carlos Almacén",
|
||||
"delivery_phone": "+34 910 123 456",
|
||||
"requires_approval": false,
|
||||
"sent_to_supplier_at_offset_days": -5,
|
||||
"supplier_confirmation_date_offset_days": -4,
|
||||
"supplier_reference": "LGIPUZ-2025-042",
|
||||
"notes": "Pedido de lácteos para producción semanal",
|
||||
"created_by": "50000000-0000-0000-0000-000000000005"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000003",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"po_number": "PO-2025-003",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000003",
|
||||
"order_date_offset_days": -3,
|
||||
"status": "approved",
|
||||
"priority": "high",
|
||||
"required_delivery_date_offset_days": 1,
|
||||
"estimated_delivery_date_offset_days": 2,
|
||||
"expected_delivery_date_offset_days": 2,
|
||||
"subtotal": 450.00,
|
||||
"tax_amount": 94.50,
|
||||
"shipping_cost": 20.00,
|
||||
"discount_amount": 22.50,
|
||||
"total_amount": 542.00,
|
||||
"currency": "EUR",
|
||||
"delivery_address": "Calle Panadería, 45, 28001 Madrid",
|
||||
"delivery_instructions": "Requiere inspección de calidad",
|
||||
"delivery_contact": "Pedro Calidad",
|
||||
"delivery_phone": "+34 910 123 456",
|
||||
"requires_approval": true,
|
||||
"auto_approved": true,
|
||||
"auto_approval_rule_id": "10000000-0000-0000-0000-000000000001",
|
||||
"approved_at_offset_days": -2,
|
||||
"approved_by": "50000000-0000-0000-0000-000000000006",
|
||||
"notes": "Pedido urgente para nueva línea de productos ecológicos - Auto-aprobado por IA",
|
||||
"reasoning_data": {
|
||||
"job": "ensure_quality_ingredients",
|
||||
"context": {
|
||||
"en": "Organic ingredients needed for new product line",
|
||||
"es": "Ingredientes ecológicos necesarios para nueva línea de productos",
|
||||
"eu": "Produktu lerro berrirako osagai ekologikoak behar dira"
|
||||
},
|
||||
"decision": {
|
||||
"en": "Auto-approved: Under €500 threshold and from certified supplier",
|
||||
"es": "Auto-aprobado: Bajo umbral de €500 y de proveedor certificado",
|
||||
"eu": "Auto-onartuta: €500ko mugaren azpian eta hornitzaile ziurtatutik"
|
||||
}
|
||||
},
|
||||
"created_by": "50000000-0000-0000-0000-000000000005"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000004",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"po_number": "PO-2025-004-URGENT",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000001",
|
||||
"order_date_offset_days": -0.5,
|
||||
"status": "confirmed",
|
||||
"priority": "urgent",
|
||||
"required_delivery_date_offset_days": -0.167,
|
||||
"estimated_delivery_date_offset_days": 0.083,
|
||||
"expected_delivery_date_offset_days": -0.167,
|
||||
"subtotal": 1200.00,
|
||||
"tax_amount": 252.00,
|
||||
"shipping_cost": 35.00,
|
||||
"discount_amount": 60.00,
|
||||
"total_amount": 1427.00,
|
||||
"currency": "EUR",
|
||||
"delivery_address": "Calle Panadería, 45, 28001 Madrid",
|
||||
"delivery_instructions": "URGENTE - Entrega antes de las 10:00 AM",
|
||||
"delivery_contact": "Isabel Producción",
|
||||
"delivery_phone": "+34 910 123 456",
|
||||
"requires_approval": false,
|
||||
"sent_to_supplier_at_offset_days": -0.5,
|
||||
"supplier_confirmation_date_offset_days": -0.4,
|
||||
"supplier_reference": "SUP-URGENT-2025-005",
|
||||
"notes": "EDGE CASE: Entrega retrasada - debió llegar hace 4 horas. Stock crítico de harina",
|
||||
"reasoning_data": {
|
||||
"job": "avoid_production_stoppage",
|
||||
"context": {
|
||||
"en": "Critical flour shortage - production at risk",
|
||||
"es": "Escasez crítica de harina - producción en riesgo",
|
||||
"eu": "Irina-faltagatik ekoizpena arriskuan"
|
||||
},
|
||||
"urgency": {
|
||||
"en": "Urgent: Delivery delayed 4 hours, affecting today's production",
|
||||
"es": "Urgente: Entrega retrasada 4 horas, afectando la producción de hoy",
|
||||
"eu": "Presazkoa: Entrega 4 ordu berandu, gaurko ekoizpena eraginda"
|
||||
}
|
||||
},
|
||||
"created_by": "50000000-0000-0000-0000-000000000006"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000007",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"po_number": "PO-2025-007",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000004",
|
||||
"order_date_offset_days": -7,
|
||||
"status": "completed",
|
||||
"priority": "normal",
|
||||
"required_delivery_date_offset_days": -5,
|
||||
"estimated_delivery_date_offset_days": -5,
|
||||
"expected_delivery_date_offset_days": -5,
|
||||
"subtotal": 450.00,
|
||||
"tax_amount": 94.50,
|
||||
"shipping_cost": 25.00,
|
||||
"discount_amount": 0.00,
|
||||
"total_amount": 569.50,
|
||||
"currency": "EUR",
|
||||
"delivery_address": "Calle Panadería, 45, 28001 Madrid",
|
||||
"delivery_instructions": "Entrega en horario de mañana",
|
||||
"delivery_contact": "Carlos Almacén",
|
||||
"delivery_phone": "+34 910 123 456",
|
||||
"requires_approval": false,
|
||||
"sent_to_supplier_at_offset_days": -7,
|
||||
"supplier_confirmation_date_offset_days": -6,
|
||||
"supplier_reference": "SUP-REF-2025-007",
|
||||
"notes": "Pedido de ingredientes especiales para línea premium - Entregado hace 5 días",
|
||||
"created_by": "50000000-0000-0000-0000-000000000005"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000005",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"po_number": "PO-2025-005",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000004",
|
||||
"order_date_offset_days": 0,
|
||||
"status": "draft",
|
||||
"priority": "normal",
|
||||
"required_delivery_date_offset_days": 3,
|
||||
"estimated_delivery_date_offset_days": 3,
|
||||
"expected_delivery_date_offset_days": 3,
|
||||
"subtotal": 280.00,
|
||||
"tax_amount": 58.80,
|
||||
"shipping_cost": 12.00,
|
||||
"discount_amount": 0.00,
|
||||
"total_amount": 350.80,
|
||||
"currency": "EUR",
|
||||
"delivery_address": "Calle Panadería, 45, 28001 Madrid",
|
||||
"delivery_instructions": "Llamar antes de entregar",
|
||||
"delivery_contact": "Carlos Almacén",
|
||||
"delivery_phone": "+34 910 123 456",
|
||||
"requires_approval": false,
|
||||
"notes": "Pedido planificado para reposición semanal",
|
||||
"created_by": "50000000-0000-0000-0000-000000000005"
|
||||
},
|
||||
{
|
||||
"id": "50000000-0000-0000-0000-000000000006",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"po_number": "PO-2025-006",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000002",
|
||||
"order_date_offset_days": -0.5,
|
||||
"status": "sent_to_supplier",
|
||||
"priority": "high",
|
||||
"required_delivery_date_offset_days": 0.25,
|
||||
"estimated_delivery_date_offset_days": 0.25,
|
||||
"expected_delivery_date_offset_days": 0.25,
|
||||
"subtotal": 195.00,
|
||||
"tax_amount": 40.95,
|
||||
"shipping_cost": 10.00,
|
||||
"discount_amount": 0.00,
|
||||
"total_amount": 245.95,
|
||||
"currency": "EUR",
|
||||
"delivery_address": "Calle Panadería, 45, 28001 Madrid",
|
||||
"delivery_instructions": "Mantener cadena de frío - Entrega urgente para producción",
|
||||
"delivery_contact": "Carlos Almacén",
|
||||
"delivery_phone": "+34 910 123 456",
|
||||
"requires_approval": false,
|
||||
"sent_to_supplier_at_offset_days": -0.5,
|
||||
"notes": "⏰ EDGE CASE: Entrega esperada en 6 horas - mantequilla para producción de croissants de mañana",
|
||||
"created_by": "50000000-0000-0000-0000-000000000006"
|
||||
}
|
||||
],
|
||||
"purchase_order_items": [
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000001",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000001",
|
||||
"product_name": "Harina de Trigo T55",
|
||||
"product_code": "HAR-T55-001",
|
||||
"ordered_quantity": 500.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 0.85,
|
||||
"line_total": 425.00,
|
||||
"received_quantity": 500.0,
|
||||
"remaining_quantity": 0.0
|
||||
},
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000001",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000002",
|
||||
"product_name": "Harina de Trigo T65",
|
||||
"product_code": "HAR-T65-002",
|
||||
"ordered_quantity": 200.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 0.95,
|
||||
"line_total": 190.00,
|
||||
"received_quantity": 200.0,
|
||||
"remaining_quantity": 0.0
|
||||
},
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000003",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000001",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000005",
|
||||
"product_name": "Harina Centeno",
|
||||
"product_code": "HAR-CENT-005",
|
||||
"ordered_quantity": 100.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 1.15,
|
||||
"line_total": 115.00,
|
||||
"received_quantity": 100.0,
|
||||
"remaining_quantity": 0.0
|
||||
},
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000004",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000001",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000006",
|
||||
"product_name": "Sal Marina",
|
||||
"product_code": "SAL-MAR-006",
|
||||
"ordered_quantity": 50.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 2.40,
|
||||
"line_total": 120.00,
|
||||
"received_quantity": 50.0,
|
||||
"remaining_quantity": 0.0
|
||||
},
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000005",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000002",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000011",
|
||||
"product_name": "Mantequilla sin Sal 82% MG",
|
||||
"product_code": "MANT-001",
|
||||
"ordered_quantity": 80.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 4.00,
|
||||
"line_total": 320.00,
|
||||
"received_quantity": 80.0,
|
||||
"remaining_quantity": 0.0
|
||||
},
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000006",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000004",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000001",
|
||||
"product_name": "Harina de Trigo T55",
|
||||
"product_code": "HAR-T55-001",
|
||||
"ordered_quantity": 1000.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 0.80,
|
||||
"line_total": 800.00,
|
||||
"received_quantity": 0.0,
|
||||
"remaining_quantity": 1000.0,
|
||||
"notes": "URGENTE - Stock crítico"
|
||||
},
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000007",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000004",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000011",
|
||||
"product_name": "Levadura Fresca",
|
||||
"product_code": "LEV-FRESC-001",
|
||||
"ordered_quantity": 50.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 8.00,
|
||||
"line_total": 400.00,
|
||||
"received_quantity": 0.0,
|
||||
"remaining_quantity": 50.0,
|
||||
"notes": "Stock agotado - prioridad máxima"
|
||||
},
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000008",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000006",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000011",
|
||||
"product_name": "Mantequilla sin Sal 82% MG",
|
||||
"product_code": "MANT-001",
|
||||
"ordered_quantity": 30.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 6.50,
|
||||
"line_total": 195.00,
|
||||
"received_quantity": 0.0,
|
||||
"remaining_quantity": 30.0
|
||||
},
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000009",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000007",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000041",
|
||||
"product_name": "Chocolate Negro 70% Cacao",
|
||||
"product_code": "CHO-NEG-001",
|
||||
"ordered_quantity": 20.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 15.50,
|
||||
"line_total": 310.00,
|
||||
"received_quantity": 20.0,
|
||||
"remaining_quantity": 0.0
|
||||
},
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000010",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000007",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000042",
|
||||
"product_name": "Almendras Laminadas",
|
||||
"product_code": "ALM-LAM-001",
|
||||
"ordered_quantity": 15.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 8.90,
|
||||
"line_total": 133.50,
|
||||
"received_quantity": 15.0,
|
||||
"remaining_quantity": 0.0
|
||||
},
|
||||
{
|
||||
"id": "51000000-0000-0000-0000-000000000011",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"purchase_order_id": "50000000-0000-0000-0000-000000000007",
|
||||
"inventory_product_id": "10000000-0000-0000-0000-000000000043",
|
||||
"product_name": "Pasas de Corinto",
|
||||
"product_code": "PAS-COR-001",
|
||||
"ordered_quantity": 10.0,
|
||||
"unit_of_measure": "kilograms",
|
||||
"unit_price": 4.50,
|
||||
"line_total": 45.00,
|
||||
"received_quantity": 10.0,
|
||||
"remaining_quantity": 0.0
|
||||
}
|
||||
]
|
||||
}
|
||||
306
shared/demo/fixtures/professional/08-orders.json
Normal file
306
shared/demo/fixtures/professional/08-orders.json
Normal file
@@ -0,0 +1,306 @@
|
||||
{
|
||||
"customers": [
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_code": "CUST-001",
|
||||
"name": "Restaurante El Buen Yantar",
|
||||
"customer_type": "WHOLESALE",
|
||||
"contact_person": "Luis Gómez",
|
||||
"email": "compras@buenyantar.es",
|
||||
"phone": "+34 912 345 678",
|
||||
"address": "Calle Mayor, 45",
|
||||
"city": "Madrid",
|
||||
"postal_code": "28013",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"total_orders": 45,
|
||||
"total_spent": 3250.75,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Regular wholesale customer - weekly orders"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_code": "CUST-002",
|
||||
"name": "Cafetería La Esquina",
|
||||
"customer_type": "RETAIL",
|
||||
"contact_person": "Marta Ruiz",
|
||||
"email": "cafeteria@laesquina.com",
|
||||
"phone": "+34 913 456 789",
|
||||
"address": "Plaza del Sol, 12",
|
||||
"city": "Madrid",
|
||||
"postal_code": "28012",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"total_orders": 12,
|
||||
"total_spent": 850.20,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Small retail customer - biweekly orders"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000003",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_code": "CUST-003",
|
||||
"name": "Hotel Madrid Plaza",
|
||||
"customer_type": "WHOLESALE",
|
||||
"contact_person": "Carlos Fernández",
|
||||
"email": "compras@hotelmadridplaza.com",
|
||||
"phone": "+34 914 567 890",
|
||||
"address": "Calle Gran Vía, 25",
|
||||
"city": "Madrid",
|
||||
"postal_code": "28013",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"total_orders": 28,
|
||||
"total_spent": 2150.50,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Hotel chain - large volume orders"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000004",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_code": "CUST-004",
|
||||
"name": "Panadería Los Nogales",
|
||||
"customer_type": "RETAIL",
|
||||
"contact_person": "Ana López",
|
||||
"email": "panaderia@losnogales.es",
|
||||
"phone": "+34 915 678 901",
|
||||
"address": "Calle Alcala, 120",
|
||||
"city": "Madrid",
|
||||
"postal_code": "28009",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"total_orders": 8,
|
||||
"total_spent": 620.40,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Local bakery - frequent small orders"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000005",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_code": "CUST-005",
|
||||
"name": "Supermercado EcoMarket",
|
||||
"customer_type": "WHOLESALE",
|
||||
"contact_person": "Pedro Martínez",
|
||||
"email": "compras@ecomarket.es",
|
||||
"phone": "+34 916 789 012",
|
||||
"address": "Avenida América, 35",
|
||||
"city": "Madrid",
|
||||
"postal_code": "28002",
|
||||
"country": "España",
|
||||
"status": "ACTIVE",
|
||||
"total_orders": 15,
|
||||
"total_spent": 1250.75,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Organic supermarket chain - premium products"
|
||||
}
|
||||
],
|
||||
"customer_orders": [
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000001",
|
||||
"order_number": "ORD-20250115-001",
|
||||
"order_date": "2025-01-14T11:00:00Z",
|
||||
"delivery_date": "2025-01-15T09:00:00Z",
|
||||
"status": "DELIVERED",
|
||||
"total_amount": 125.50,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Regular weekly order"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000002",
|
||||
"order_number": "ORD-20250115-002",
|
||||
"order_date": "2025-01-14T14:00:00Z",
|
||||
"delivery_date": "2025-01-15T10:00:00Z",
|
||||
"status": "DELIVERED",
|
||||
"total_amount": 45.20,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Small retail order"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000099",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000001",
|
||||
"order_number": "ORD-URGENT-001",
|
||||
"order_date": "2025-01-15T07:00:00Z",
|
||||
"delivery_date": "2025-01-15T08:30:00Z",
|
||||
"status": "PENDING",
|
||||
"total_amount": 185.75,
|
||||
"is_urgent": true,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Urgent order - special event at restaurant",
|
||||
"reasoning_data": {
|
||||
"type": "urgent_delivery",
|
||||
"parameters": {
|
||||
"event_type": "special_event",
|
||||
"required_time": "2025-01-15T08:30:00Z",
|
||||
"priority": "high"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000100",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000005",
|
||||
"order_number": "ORD-20250115-003",
|
||||
"order_date": "2025-01-15T08:00:00Z",
|
||||
"delivery_date": "2025-01-15T10:00:00Z",
|
||||
"status": "PENDING",
|
||||
"total_amount": 215.50,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Regular wholesale order - organic products",
|
||||
"reasoning_data": {
|
||||
"type": "standard_delivery",
|
||||
"parameters": {
|
||||
"delivery_window": "morning",
|
||||
"priority": "medium"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"order_items": [
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000101",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"order_id": "60000000-0000-0000-0000-000000000001",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"quantity": 50.0,
|
||||
"unit_price": 2.50,
|
||||
"total_price": 125.00,
|
||||
"created_at": "2025-01-15T06:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000102",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"order_id": "60000000-0000-0000-0000-000000000002",
|
||||
"product_id": "20000000-0000-0000-0000-000000000002",
|
||||
"quantity": 12.0,
|
||||
"unit_price": 3.75,
|
||||
"total_price": 45.00,
|
||||
"created_at": "2025-01-15T06:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000199",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"order_id": "60000000-0000-0000-0000-000000000099",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"quantity": 75.0,
|
||||
"unit_price": 2.45,
|
||||
"total_price": 183.75,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Urgent delivery - priority processing"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000103",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"order_id": "60000000-0000-0000-0000-000000000100",
|
||||
"product_id": "20000000-0000-0000-0000-000000000003",
|
||||
"quantity": 20.0,
|
||||
"unit_price": 3.25,
|
||||
"total_price": 65.00,
|
||||
"created_at": "2025-01-15T06:00:00Z"
|
||||
}
|
||||
],
|
||||
"completed_orders": [
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000201",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000001",
|
||||
"order_number": "ORD-20250114-001",
|
||||
"order_date": "2025-01-13T10:00:00Z",
|
||||
"delivery_date": "2025-01-13T12:00:00Z",
|
||||
"status": "DELIVERED",
|
||||
"total_amount": 150.25,
|
||||
"created_at": "2025-01-13T10:00:00Z",
|
||||
"notes": "Regular weekly order - delivered on time"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000202",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000003",
|
||||
"order_number": "ORD-20250114-002",
|
||||
"order_date": "2025-01-13T14:00:00Z",
|
||||
"delivery_date": "2025-01-14T08:00:00Z",
|
||||
"status": "DELIVERED",
|
||||
"total_amount": 225.75,
|
||||
"created_at": "2025-01-13T14:00:00Z",
|
||||
"notes": "Hotel order - large quantity for breakfast service"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000203",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000002",
|
||||
"order_number": "ORD-20250113-001",
|
||||
"order_date": "2025-01-12T09:00:00Z",
|
||||
"delivery_date": "2025-01-12T11:00:00Z",
|
||||
"status": "DELIVERED",
|
||||
"total_amount": 55.50,
|
||||
"created_at": "2025-01-12T09:00:00Z",
|
||||
"notes": "Small retail order - delivered on time"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000204",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000004",
|
||||
"order_number": "ORD-20250113-002",
|
||||
"order_date": "2025-01-12T11:00:00Z",
|
||||
"delivery_date": "2025-01-12T14:00:00Z",
|
||||
"status": "DELIVERED",
|
||||
"total_amount": 42.75,
|
||||
"created_at": "2025-01-12T11:00:00Z",
|
||||
"notes": "Local bakery order - small quantity"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000205",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000005",
|
||||
"order_number": "ORD-20250112-001",
|
||||
"order_date": "2025-01-11T10:00:00Z",
|
||||
"delivery_date": "2025-01-11T16:00:00Z",
|
||||
"status": "DELIVERED",
|
||||
"total_amount": 185.25,
|
||||
"created_at": "2025-01-11T10:00:00Z",
|
||||
"notes": "Organic supermarket order - premium products"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000206",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000001",
|
||||
"order_number": "ORD-20250111-001",
|
||||
"order_date": "2025-01-10T08:00:00Z",
|
||||
"delivery_date": "2025-01-10T10:00:00Z",
|
||||
"status": "DELIVERED",
|
||||
"total_amount": 135.50,
|
||||
"created_at": "2025-01-10T08:00:00Z",
|
||||
"notes": "Regular wholesale order - delivered on time"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000207",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000003",
|
||||
"order_number": "ORD-20250110-001",
|
||||
"order_date": "2025-01-09T15:00:00Z",
|
||||
"delivery_date": "2025-01-10T07:00:00Z",
|
||||
"status": "DELIVERED",
|
||||
"total_amount": 195.75,
|
||||
"created_at": "2025-01-09T15:00:00Z",
|
||||
"notes": "Hotel order - evening delivery for next morning"
|
||||
},
|
||||
{
|
||||
"id": "60000000-0000-0000-0000-000000000208",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"customer_id": "60000000-0000-0000-0000-000000000002",
|
||||
"order_number": "ORD-20250109-001",
|
||||
"order_date": "2025-01-08T10:00:00Z",
|
||||
"delivery_date": "2025-01-08T12:00:00Z",
|
||||
"status": "DELIVERED",
|
||||
"total_amount": 48.25,
|
||||
"created_at": "2025-01-08T10:00:00Z",
|
||||
"notes": "Small retail order - delivered on time"
|
||||
}
|
||||
]
|
||||
}
|
||||
72
shared/demo/fixtures/professional/09-sales.json
Normal file
72
shared/demo/fixtures/professional/09-sales.json
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"sales_data": [
|
||||
{
|
||||
"id": "70000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"sale_date": "2025-01-14T10:00:00Z",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"quantity_sold": 45.0,
|
||||
"unit_price": 2.50,
|
||||
"total_revenue": 112.50,
|
||||
"sales_channel": "IN_STORE",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Regular daily sales"
|
||||
},
|
||||
{
|
||||
"id": "70000000-0000-0000-0000-000000000002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"sale_date": "2025-01-14T11:00:00Z",
|
||||
"product_id": "20000000-0000-0000-0000-000000000002",
|
||||
"quantity_sold": 10.0,
|
||||
"unit_price": 3.75,
|
||||
"total_revenue": 37.50,
|
||||
"sales_channel": "IN_STORE",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Morning croissant sales"
|
||||
},
|
||||
{
|
||||
"id": "70000000-0000-0000-0000-000000000003",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"sale_date": "2025-01-14T12:00:00Z",
|
||||
"product_id": "20000000-0000-0000-0000-000000000003",
|
||||
"quantity_sold": 8.0,
|
||||
"unit_price": 2.25,
|
||||
"total_revenue": 18.00,
|
||||
"sales_channel": "IN_STORE",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Lunch time bread sales"
|
||||
},
|
||||
{
|
||||
"id": "70000000-0000-0000-0000-000000000004",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"sale_date": "2025-01-14T15:00:00Z",
|
||||
"product_id": "20000000-0000-0000-0000-000000000004",
|
||||
"quantity_sold": 12.0,
|
||||
"unit_price": 1.75,
|
||||
"total_revenue": 21.00,
|
||||
"sales_channel": "IN_STORE",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Afternoon pastry sales"
|
||||
},
|
||||
{
|
||||
"id": "70000000-0000-0000-0000-000000000099",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"sale_date": "2025-01-15T07:30:00Z",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"quantity_sold": 25.0,
|
||||
"unit_price": 2.60,
|
||||
"total_revenue": 65.00,
|
||||
"sales_channel": "IN_STORE",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Early morning rush - higher price point",
|
||||
"reasoning_data": {
|
||||
"type": "peak_demand",
|
||||
"parameters": {
|
||||
"demand_factor": 1.2,
|
||||
"time_period": "morning_rush",
|
||||
"price_adjustment": 0.10
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
164
shared/demo/fixtures/professional/10-forecasting.json
Normal file
164
shared/demo/fixtures/professional/10-forecasting.json
Normal file
@@ -0,0 +1,164 @@
|
||||
{
|
||||
"forecasts": [
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"forecast_date": "2025-01-16T00:00:00Z",
|
||||
"predicted_quantity": 50.0,
|
||||
"confidence_score": 0.92,
|
||||
"forecast_horizon_days": 1,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Regular daily demand forecast"
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000002",
|
||||
"forecast_date": "2025-01-16T00:00:00Z",
|
||||
"predicted_quantity": 15.0,
|
||||
"confidence_score": 0.88,
|
||||
"forecast_horizon_days": 1,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Croissant demand forecast"
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000003",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000003",
|
||||
"forecast_date": "2025-01-16T00:00:00Z",
|
||||
"predicted_quantity": 10.0,
|
||||
"confidence_score": 0.85,
|
||||
"forecast_horizon_days": 1,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Country bread demand forecast"
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000099",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"forecast_date": "2025-01-17T00:00:00Z",
|
||||
"predicted_quantity": 75.0,
|
||||
"confidence_score": 0.95,
|
||||
"forecast_horizon_days": 2,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Weekend demand spike forecast",
|
||||
"reasoning_data": {
|
||||
"type": "demand_spike",
|
||||
"parameters": {
|
||||
"event_type": "weekend",
|
||||
"demand_increase_factor": 1.5,
|
||||
"historical_pattern": "weekend_spike"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000100",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"forecast_date": "2025-01-18T00:00:00Z",
|
||||
"predicted_quantity": 60.0,
|
||||
"confidence_score": 0.92,
|
||||
"forecast_horizon_days": 3,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Sunday demand forecast - slightly lower than Saturday",
|
||||
"historical_accuracy": 0.90
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000101",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000002",
|
||||
"forecast_date": "2025-01-16T00:00:00Z",
|
||||
"predicted_quantity": 15.0,
|
||||
"confidence_score": 0.88,
|
||||
"forecast_horizon_days": 1,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Croissant demand forecast - weekend preparation",
|
||||
"historical_accuracy": 0.89
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000102",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000002",
|
||||
"forecast_date": "2025-01-17T00:00:00Z",
|
||||
"predicted_quantity": 25.0,
|
||||
"confidence_score": 0.90,
|
||||
"forecast_horizon_days": 2,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Weekend croissant demand - higher than weekdays",
|
||||
"historical_accuracy": 0.91
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000103",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000003",
|
||||
"forecast_date": "2025-01-16T00:00:00Z",
|
||||
"predicted_quantity": 10.0,
|
||||
"confidence_score": 0.85,
|
||||
"forecast_horizon_days": 1,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Country bread demand forecast",
|
||||
"historical_accuracy": 0.88
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000104",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000003",
|
||||
"forecast_date": "2025-01-17T00:00:00Z",
|
||||
"predicted_quantity": 12.0,
|
||||
"confidence_score": 0.87,
|
||||
"forecast_horizon_days": 2,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Weekend country bread demand",
|
||||
"historical_accuracy": 0.90
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000105",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"forecast_date": "2025-01-19T00:00:00Z",
|
||||
"predicted_quantity": 45.0,
|
||||
"confidence_score": 0.91,
|
||||
"forecast_horizon_days": 4,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Monday demand - back to normal after weekend",
|
||||
"historical_accuracy": 0.92
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000106",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"forecast_date": "2025-01-20T00:00:00Z",
|
||||
"predicted_quantity": 48.0,
|
||||
"confidence_score": 0.90,
|
||||
"forecast_horizon_days": 5,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Tuesday demand forecast",
|
||||
"historical_accuracy": 0.90
|
||||
},
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000000107",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"forecast_date": "2025-01-21T00:00:00Z",
|
||||
"predicted_quantity": 50.0,
|
||||
"confidence_score": 0.89,
|
||||
"forecast_horizon_days": 6,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Wednesday demand forecast",
|
||||
"historical_accuracy": 0.89
|
||||
}
|
||||
],
|
||||
"prediction_batches": [
|
||||
{
|
||||
"id": "80000000-0000-0000-0000-000000001001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"batch_id": "20250116-001",
|
||||
"prediction_date": "2025-01-15T06:00:00Z",
|
||||
"status": "COMPLETED",
|
||||
"total_forecasts": 4,
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"notes": "Daily forecasting batch"
|
||||
}
|
||||
]
|
||||
}
|
||||
160
shared/demo/fixtures/professional/11-orchestrator.json
Normal file
160
shared/demo/fixtures/professional/11-orchestrator.json
Normal file
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"orchestration_run": {
|
||||
"id": "90000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"run_number": "ORCH-20250114-001",
|
||||
"status": "completed",
|
||||
"run_type": "daily",
|
||||
"started_at": "2025-01-14T22:00:00Z",
|
||||
"completed_at": "2025-01-14T22:15:00Z",
|
||||
"duration_seconds": 900,
|
||||
"trigger_type": "scheduled",
|
||||
"trigger_source": "system",
|
||||
"created_at": "2025-01-14T22:00:00Z",
|
||||
"updated_at": "2025-01-14T22:15:00Z",
|
||||
"notes": "Nightly orchestration run - Last successful execution before demo session"
|
||||
},
|
||||
"orchestration_results": {
|
||||
"production_batches_created": 18,
|
||||
"production_batches_completed": 15,
|
||||
"production_batches_in_progress": 3,
|
||||
"purchase_orders_created": 6,
|
||||
"purchase_orders_approved": 4,
|
||||
"purchase_orders_pending_approval": 2,
|
||||
"inventory_updates": 25,
|
||||
"stock_alerts_generated": 3,
|
||||
"quality_checks_performed": 12,
|
||||
"delivery_schedules_updated": 4,
|
||||
"forecasts_generated": 10,
|
||||
"ai_insights_posted": 5,
|
||||
"notifications_sent": 8,
|
||||
"errors_encountered": 0,
|
||||
"warnings_generated": 2
|
||||
},
|
||||
"production_coordination": {
|
||||
"batches_synchronized": [
|
||||
{
|
||||
"batch_id": "40000000-0000-0000-0000-000000000001",
|
||||
"product_name": "Baguette Francesa Tradicional",
|
||||
"quantity": 98.0,
|
||||
"status": "COMPLETED",
|
||||
"coordinated_with_po": "50000000-0000-0000-0000-000000000001",
|
||||
"flour_consumed": 50.0,
|
||||
"yeast_consumed": 2.0,
|
||||
"butter_consumed": 1.5
|
||||
},
|
||||
{
|
||||
"batch_id": "40000000-0000-0000-0000-000000000002",
|
||||
"product_name": "Croissant de Mantequilla Artesanal",
|
||||
"quantity": 115.0,
|
||||
"status": "COMPLETED",
|
||||
"coordinated_with_po": "50000000-0000-0000-0000-000000000002",
|
||||
"flour_consumed": 30.0,
|
||||
"yeast_consumed": 1.5,
|
||||
"butter_consumed": 15.0
|
||||
},
|
||||
{
|
||||
"batch_id": "40000000-0000-0000-0000-000000000003",
|
||||
"product_name": "Pan de Pueblo con Masa Madre",
|
||||
"quantity": 80.0,
|
||||
"status": "COMPLETED",
|
||||
"coordinated_with_po": "50000000-0000-0000-0000-000000000001",
|
||||
"flour_consumed": 40.0,
|
||||
"yeast_consumed": 1.0
|
||||
}
|
||||
],
|
||||
"production_alerts": [
|
||||
{
|
||||
"alert_type": "LOW_STOCK",
|
||||
"product_id": "10000000-0000-0000-0000-000000000001",
|
||||
"product_name": "Harina de Trigo T55",
|
||||
"current_stock": 150.0,
|
||||
"threshold": 200.0,
|
||||
"severity": "WARNING",
|
||||
"related_po": "50000000-0000-0000-0000-000000000004"
|
||||
},
|
||||
{
|
||||
"alert_type": "DELAYED_DELIVERY",
|
||||
"product_id": "10000000-0000-0000-0000-000000000001",
|
||||
"product_name": "Harina de Trigo T55",
|
||||
"expected_delivery": "2025-01-14T10:00:00Z",
|
||||
"actual_delivery": "2025-01-14T14:00:00Z",
|
||||
"delay_hours": 4,
|
||||
"severity": "CRITICAL",
|
||||
"related_po": "50000000-0000-0000-0000-000000000004",
|
||||
"impacted_batches": [
|
||||
"40000000-0000-0000-0000-0000000000a3"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"procurement_coordination": {
|
||||
"purchase_orders_processed": [
|
||||
{
|
||||
"po_id": "50000000-0000-0000-0000-000000000001",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000001",
|
||||
"supplier_name": "Harinas del Norte",
|
||||
"status": "completed",
|
||||
"total_amount": 1053.50,
|
||||
"items_received": 3,
|
||||
"items_pending": 0,
|
||||
"delivery_status": "on_time"
|
||||
},
|
||||
{
|
||||
"po_id": "50000000-0000-0000-0000-000000000002",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000002",
|
||||
"supplier_name": "Lácteos Gipuzkoa",
|
||||
"status": "completed",
|
||||
"total_amount": 402.20,
|
||||
"items_received": 1,
|
||||
"items_pending": 0,
|
||||
"delivery_status": "on_time"
|
||||
},
|
||||
{
|
||||
"po_id": "50000000-0000-0000-0000-000000000004",
|
||||
"supplier_id": "40000000-0000-0000-0000-000000000001",
|
||||
"supplier_name": "Harinas del Norte",
|
||||
"status": "confirmed",
|
||||
"total_amount": 1427.00,
|
||||
"items_received": 0,
|
||||
"items_pending": 2,
|
||||
"delivery_status": "delayed",
|
||||
"delay_hours": 4,
|
||||
"urgency": "high"
|
||||
}
|
||||
],
|
||||
"procurement_alerts": [
|
||||
{
|
||||
"alert_type": "PO_APPROVAL_ESCALATION",
|
||||
"po_id": "50000000-0000-0000-0000-000000000003",
|
||||
"supplier_name": "Eco-Proveedores",
|
||||
"status": "pending_approval",
|
||||
"age_hours": 72,
|
||||
"severity": "WARNING",
|
||||
"reason": "Auto-approval threshold not met"
|
||||
}
|
||||
]
|
||||
},
|
||||
"inventory_synchronization": {
|
||||
"stock_updates": 25,
|
||||
"low_stock_alerts": 3,
|
||||
"expiration_alerts": 1,
|
||||
"stock_movements": 15,
|
||||
"inventory_accuracy": 98.5
|
||||
},
|
||||
"ai_insights": {
|
||||
"yield_improvement_suggestions": 2,
|
||||
"waste_reduction_opportunities": 1,
|
||||
"demand_forecasting_updates": 3,
|
||||
"procurement_optimization": 2,
|
||||
"production_scheduling": 1
|
||||
},
|
||||
"system_state": {
|
||||
"last_successful_run": "2025-01-14T22:00:00Z",
|
||||
"next_scheduled_run": "2025-01-15T22:00:00Z",
|
||||
"system_health": "healthy",
|
||||
"api_availability": 100.0,
|
||||
"database_performance": "optimal",
|
||||
"integration_status": "all_connected"
|
||||
}
|
||||
}
|
||||
118
shared/demo/fixtures/professional/12-quality.json
Normal file
118
shared/demo/fixtures/professional/12-quality.json
Normal file
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"quality_controls": [
|
||||
{
|
||||
"id": "70000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"batch_id": "40000000-0000-0000-0000-000000000001",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"product_name": "Baguette Francesa Tradicional",
|
||||
"control_type": "visual_inspection",
|
||||
"control_date": "2025-01-08T14:30:00Z",
|
||||
"status": "COMPLETED",
|
||||
"result": "PASSED",
|
||||
"quality_score": 95.0,
|
||||
"inspected_by": "50000000-0000-0000-0000-000000000007",
|
||||
"notes": "Excelente aspecto y textura, 2 unidades con quemaduras leves (dentro de tolerancia)",
|
||||
"defects_found": [
|
||||
{
|
||||
"defect_type": "burnt",
|
||||
"quantity": 2.0,
|
||||
"severity": "minor"
|
||||
}
|
||||
],
|
||||
"corrective_actions": null,
|
||||
"created_at": "2025-01-08T14:30:00Z",
|
||||
"updated_at": "2025-01-08T14:45:00Z"
|
||||
},
|
||||
{
|
||||
"id": "70000000-0000-0000-0000-000000000002",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"batch_id": "40000000-0000-0000-0000-000000000002",
|
||||
"product_id": "20000000-0000-0000-0000-000000000002",
|
||||
"product_name": "Croissant de Mantequilla Artesanal",
|
||||
"control_type": "dimensional_check",
|
||||
"control_date": "2025-01-08T14:45:00Z",
|
||||
"status": "COMPLETED",
|
||||
"result": "PASSED",
|
||||
"quality_score": 92.0,
|
||||
"inspected_by": "50000000-0000-0000-0000-000000000007",
|
||||
"notes": "Buen desarrollo y laminado, 3 unidades con forma irregular (dentro de tolerancia)",
|
||||
"defects_found": [
|
||||
{
|
||||
"defect_type": "misshapen",
|
||||
"quantity": 3.0,
|
||||
"severity": "minor"
|
||||
}
|
||||
],
|
||||
"corrective_actions": null,
|
||||
"created_at": "2025-01-08T14:45:00Z",
|
||||
"updated_at": "2025-01-08T15:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "70000000-0000-0000-0000-000000000003",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"batch_id": "40000000-0000-0000-0000-000000000004",
|
||||
"product_id": "20000000-0000-0000-0000-000000000004",
|
||||
"product_name": "Napolitana de Chocolate",
|
||||
"control_type": "taste_test",
|
||||
"control_date": "2025-01-09T14:30:00Z",
|
||||
"status": "COMPLETED",
|
||||
"result": "FAILED",
|
||||
"quality_score": 65.0,
|
||||
"inspected_by": "50000000-0000-0000-0000-000000000007",
|
||||
"notes": "⚠️ CRITICAL: Sabor amargo en el chocolate, posible problema con proveedor de cacao",
|
||||
"defects_found": [
|
||||
{
|
||||
"defect_type": "off_taste",
|
||||
"quantity": 10.0,
|
||||
"severity": "major"
|
||||
}
|
||||
],
|
||||
"corrective_actions": [
|
||||
"Lote puesto en cuarentena",
|
||||
"Notificado proveedor de chocolate",
|
||||
"Programada nueva prueba con muestra diferente"
|
||||
],
|
||||
"batch_status_after_control": "QUARANTINED",
|
||||
"created_at": "2025-01-09T14:30:00Z",
|
||||
"updated_at": "2025-01-09T15:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "70000000-0000-0000-0000-000000000004",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"batch_id": "40000000-0000-0000-0000-000000000015",
|
||||
"product_id": "20000000-0000-0000-0000-000000000001",
|
||||
"product_name": "Baguette Francesa Tradicional",
|
||||
"control_type": "visual_inspection",
|
||||
"control_date": "BASE_TS + 0h",
|
||||
"status": "PENDING",
|
||||
"result": null,
|
||||
"quality_score": null,
|
||||
"inspected_by": null,
|
||||
"notes": "⚠️ PENDING: Control de calidad programado para lote en producción",
|
||||
"defects_found": null,
|
||||
"corrective_actions": null,
|
||||
"batch_status_after_control": "QUALITY_CHECK",
|
||||
"created_at": "2025-01-15T06:00:00Z",
|
||||
"updated_at": "2025-01-15T06:00:00Z"
|
||||
}
|
||||
],
|
||||
"quality_alerts": [
|
||||
{
|
||||
"id": "71000000-0000-0000-0000-000000000001",
|
||||
"tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
||||
"alert_type": "QUALITY_FAILURE",
|
||||
"severity": "HIGH",
|
||||
"status": "OPEN",
|
||||
"related_control_id": "70000000-0000-0000-0000-000000000003",
|
||||
"related_batch_id": "40000000-0000-0000-0000-000000000004",
|
||||
"product_id": "20000000-0000-0000-0000-000000000004",
|
||||
"product_name": "Napolitana de Chocolate",
|
||||
"description": "Fallo crítico en control de calidad - Sabor amargo en chocolate",
|
||||
"created_at": "2025-01-09T15:00:00Z",
|
||||
"acknowledged_at": "2025-01-09T15:15:00Z",
|
||||
"resolved_at": null,
|
||||
"notes": "Lote en cuarentena, investigación en curso con proveedor"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user