diff --git a/frontend/src/components/domain/unified-wizard/wizards/QualityTemplateWizard.tsx b/frontend/src/components/domain/unified-wizard/wizards/QualityTemplateWizard.tsx index 88420cbe..2be85e72 100644 --- a/frontend/src/components/domain/unified-wizard/wizards/QualityTemplateWizard.tsx +++ b/frontend/src/components/domain/unified-wizard/wizards/QualityTemplateWizard.tsx @@ -17,6 +17,14 @@ const TemplateInfoStep: React.FC = ({ data, onDataChange, onCom name: data.name || '', scope: data.scope || 'product', frequency: data.frequency || 'batch', + frequencyTime: data.frequencyTime || '', + responsibleRole: data.responsibleRole || '', + requiresPhoto: data.requiresPhoto || false, + criticalControlPoint: data.criticalControlPoint || false, + requiredEquipment: data.requiredEquipment || '', + acceptanceCriteria: data.acceptanceCriteria || '', + notifyOnFail: data.notifyOnFail || false, + specificConditions: data.specificConditions || '', }); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); @@ -38,25 +46,46 @@ const TemplateInfoStep: React.FC = ({ data, onDataChange, onCom safety: 'safety' }; + // Build comprehensive description + let description = `Plantilla de ${templateData.scope} con frecuencia ${templateData.frequency}.`; + if (templateData.frequencyTime) { + description += ` ${templateData.frequencyTime}.`; + } + if (templateData.responsibleRole) { + description += ` Responsable: ${templateData.responsibleRole}.`; + } + if (templateData.requiredEquipment) { + description += ` Equipo requerido: ${templateData.requiredEquipment}.`; + } + if (templateData.acceptanceCriteria) { + description += ` Criterios: ${templateData.acceptanceCriteria}.`; + } + if (templateData.specificConditions) { + description += ` Condiciones: ${templateData.specificConditions}.`; + } + if (templateData.requiresPhoto) { + description += ` Requiere fotografía.`; + } + const templateCreateData: QualityCheckTemplateCreate = { name: templateData.name, - description: `Plantilla de ${templateData.scope} con frecuencia ${templateData.frequency}`, + description: description, check_type: scopeMapping[templateData.scope] || 'product_quality', applicable_stages: [], check_points: [ { - name: 'Verificación General', - description: 'Punto de verificación inicial', + name: templateData.acceptanceCriteria ? 'Verificación de Criterios' : 'Verificación General', + description: templateData.acceptanceCriteria || 'Punto de verificación inicial', expected_value: 'Conforme', measurement_type: 'pass_fail', - is_critical: false, + is_critical: templateData.criticalControlPoint, weight: 1.0 } ], scoring_method: 'weighted_average', pass_threshold: 70.0, - weight: 5.0, - is_required: templateData.frequency === 'batch', + weight: templateData.criticalControlPoint ? 10.0 : 5.0, + is_required: templateData.frequency === 'batch' || templateData.criticalControlPoint, is_active: true, frequency_days: templateData.frequency === 'daily' ? 1 : templateData.frequency === 'weekly' ? 7 : undefined }; @@ -89,41 +118,165 @@ const TemplateInfoStep: React.FC = ({ data, onDataChange, onCom )} -
-
- - setTemplateData({ ...templateData, name: e.target.value })} - placeholder="Ej: Control de Calidad de Pan" - className="w-full px-3 py-2 border border-[var(--border-secondary)] rounded-lg focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)] bg-[var(--bg-primary)] text-[var(--text-primary)]" - /> +
+ {/* Basic Information */} +
+

+ Información Básica +

+
+
+ + setTemplateData({ ...templateData, name: e.target.value })} + placeholder="Ej: Control de Calidad de Pan" + className="w-full px-3 py-2 border border-[var(--border-secondary)] rounded-lg focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)] bg-[var(--bg-primary)] text-[var(--text-primary)]" + /> +
+
+ + +
+
+ + +
+
+ + setTemplateData({ ...templateData, frequencyTime: e.target.value })} + placeholder="Ej: 8:00 AM, antes de hornear, temperatura ambiente" + className="w-full px-3 py-2 border border-[var(--border-secondary)] rounded-lg focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)] bg-[var(--bg-primary)] text-[var(--text-primary)]" + /> +
+
-
- - + + {/* Responsibility & Requirements */} +
+

+ Responsabilidad y Requisitos +

+
+
+ + setTemplateData({ ...templateData, responsibleRole: e.target.value })} + placeholder="Ej: Jefe de Producción, Panadero" + className="w-full px-3 py-2 border border-[var(--border-secondary)] rounded-lg focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)] bg-[var(--bg-primary)] text-[var(--text-primary)]" + /> +
+
+ + setTemplateData({ ...templateData, requiredEquipment: e.target.value })} + placeholder="Ej: Termómetro, báscula, cronómetro" + className="w-full px-3 py-2 border border-[var(--border-secondary)] rounded-lg focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)] bg-[var(--bg-primary)] text-[var(--text-primary)]" + /> +
+
+ +