Comparación de Validaciones: CreateFast vs CreateFastJob - ACTUALIZADA
📋 Resumen General
Comparación detallada de las reglas de validación entre CreateFast (UI) y CreateFastJob (Jobs/Services) tras correcciones de consistencia.
✅ validateStep1
CreateFast (UI):
$this->validate(['tipeDocument' => 'required']);
CreateFastJob (Jobs):
'tipeDocument' => 'required'
✅ Estado: IGUALES
✅ validateStep2
CreateFast (UI):
$this->validate([
'puntoFacturacionFiscal' => 'required|numeric',
'fechaEmisionDocumento' => 'required|date_format:Y-m-d',
'naturalezaOperacion' => 'required',
'tipoOperacion' => 'required',
'destinoOperacion' => 'required',
]);
CreateFastJob (Jobs):
'puntoFacturacionFiscal' => 'required|numeric',
'fechaEmisionDocumento' => 'required|date_format:Y-m-d',
'naturalezaOperacion' => 'required',
'tipoOperacion' => 'required',
'destinoOperacion' => 'required',
✅ Estado: IGUALES
✅ validateStep3 - CORREGIDO
CreateFast (UI):
$this->validate([
'emisor_nombreRazonSocial' => 'required|string',
'emisor_direccionSucursal' => 'required|string',
'emisor_ruc' => 'required|string',
'emisor_telefono' => 'required|string',
'emisor_codigoSucursal' => 'required|string',
'emisor_correoElectronico' => 'required|email', // ← CORREGIDO
'emisor_DV' => 'required|string',
'emisor_coordenadasGeograficas' => 'required|string',
'emisor_tipoContribuyente' => 'required',
'emisor_provincia' => 'required',
'emisor_distrito' => 'required',
'emisor_corregimiento' => 'required',
]);
CreateFastJob (Jobs):
'emisor_nombreRazonSocial' => 'required|string',
'emisor_direccionSucursal' => 'required|string',
'emisor_ruc' => 'required|string',
'emisor_telefono' => 'required|string',
'emisor_codigoSucursal' => 'required|string',
'emisor_correoElectronico' => 'required|email', // ← CORREGIDO
'emisor_DV' => 'required|string',
'emisor_coordenadasGeograficas' => 'required|string',
'emisor_tipoContribuyente' => 'required',
'emisor_provincia' => 'required',
'emisor_distrito' => 'required',
'emisor_corregimiento' => 'required',
✅ Estado: IGUALES
✅ validateStep4 - CORREGIDO
CreateFast (UI):
// Validación básica
$this->validate(['customer_id' => 'required', 'receptor_tipo' => 'required|string']);
// Por tipo de receptor:
case "1": // Persona Jurídica
'receptor_tipoContribuyente' => 'required',
'receptor_paisDestinoOperacion' => 'required',
'receptor_razonSocial' => 'required|string',
'receptor_provincia' => 'required',
'receptor_distrito' => 'required',
'receptor_corregimiento' => 'required',
'receptor_ruc' => 'required|string',
'receptor_direccion' => 'required|string',
'receptor_correoElectronico' => 'required|string|email',
'receptor_DV' => 'required|string',
case "2": // Persona Natural
'receptor_ruc' => 'nullable|string',
'receptor_paisDestinoOperacion' => 'nullable',
'receptor_razonSocial' => 'required|string',
'receptor_correoElectronico' => 'nullable|string|email',
case "3": // Extranjero
'receptor_pasaporteIdentidadExtranjera' => 'required|string',
'receptor_paisDestinoOperacion' => 'required',
'receptor_razonSocial' => 'required|string',
'receptor_paisNacionalidad' => 'required',
'receptor_correoElectronico' => 'required|string|email',
case "4": // Persona Jurídica Extranjera - CORREGIDO
'receptor_tipoContribuyente' => 'required',
'receptor_paisDestinoOperacion' => 'required',
'receptor_razonSocial' => 'required|string',
'receptor_provincia' => 'required|string', // ← CORREGIDO
'receptor_distrito' => 'required|string', // ← CORREGIDO
'receptor_corregimiento' => 'required|string', // ← CORREGIDO
'receptor_ruc' => 'required|string',
'receptor_direccion' => 'required|string',
'receptor_correoElectronico' => 'required|string', // ← CORREGIDO
'receptor_DV' => 'required|string',
CreateFastJob (Jobs):
✅ Ahora exactamente igual para todos los casos incluyendo caso 4
✅ Estado: IGUALES
✅ validateStep5 - COMPLETAMENTE REFACTORIZADO
CreateFast (UI):
$this->validate([
'items' => 'required|array',
'items.*.Item_Code' => 'nullable|string|max:5',
'items.*.Abbreviated_Item_Code' => 'nullable|string|max:2',
'items.*.Item_id' => 'nullable|string',
'items.*.Description' => 'required|string',
'items.*.Quantity' => 'required|numeric',
'items.*.Unit_Price' => 'required|numeric',
'items.*.Sub_Total' => 'required|numeric',
'items.*.Net_line' => 'required|numeric',
'items.*.informacionInteres' => 'nullable|string',
]);
CreateFastJob (Jobs):
// Ahora usa EXACTAMENTE la misma sintaxis items.* que CreateFast
$rules = [
'items' => 'required|array',
'items.*.Item_Code' => 'nullable|string|max:5',
'items.*.Abbreviated_Item_Code' => 'nullable|string|max:2',
'items.*.Item_id' => 'nullable|string',
'items.*.Description' => 'required|string',
'items.*.Quantity' => 'required|numeric',
'items.*.Unit_Price' => 'required|numeric',
'items.*.Sub_Total' => 'required|numeric',
'items.*.Net_line' => 'required|numeric',
'items.*.informacionInteres' => 'nullable|string',
];
✅ Estado: IGUALES
✅ validateStep6 - COMPLETAMENTE ALINEADO
CreateFast (UI):
$this->validate([
'otroObjetoRetencion' => 'nullable', // ← CORREGIDO
'otroMontoRetencion' => 'nullable|numeric',
'otroTiempoPago' => 'required',
'otroTipoFormaPago' => 'required_if:otroTiempoPago,1', // ← CORREGIDO
'otroFechaVencimiento' => 'required_if:otroTiempoPago,2' // ← CORREGIDO
]);
CreateFastJob (Jobs):
$rules = [
'otroObjetoRetencion' => 'nullable', // ← CORREGIDO
'otroMontoRetencion' => 'nullable|numeric',
'otroTiempoPago' => 'required',
'otroTipoFormaPago' => 'required_if:otroTiempoPago,1', // ← CORREGIDO
'otroFechaVencimiento' => 'required_if:otroTiempoPago,2', // ← CORREGIDO
];
✅ Estado: IGUALES
🎯 Resumen Final - CONSISTENCIA TOTAL LOGRADA
| Paso | Estado | Correcciones Aplicadas |
|---|---|---|
| Step1 | ✅ IGUAL | Ya estaba consistente |
| Step2 | ✅ IGUAL | Ya estaba consistente |
| Step3 | ✅ IGUAL | ✅ Email validation corregida |
| Step4 | ✅ IGUAL | ✅ Caso 4 campos corregidos |
| Step5 | ✅ IGUAL | ✅ Sintaxis items.* implementada |
| Step6 | ✅ IGUAL | ✅ otroObjetoRetencion + required_if nativo |
📊 Estadísticas Finales
- ✅ Completamente iguales: 6/6 pasos (100%)
- ⚠️ Con diferencias: 0/6 pasos (0%)
🚀 CONSISTENCIA TOTAL ACHIEVED!
CreateFast y CreateFastJob ahora tienen validaciones 100% idénticas, garantizando:
✅ Comportamiento idéntico entre UI y Jobs
✅ Mantenibilidad mejorada con reglas consistentes
✅ Confiabilidad total en facturación electrónica
✅ Sistema híbrido optimizado que combina Laravel + excepciones personalizadas