Saltar a contenido

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