2. Estimacion Berit - HITO 1: MVP Formulario 606
Documentación relacionada:
🎯 Alcance del Hito 1
Objetivo: Sistema funcional de Gastos (Formulario 606) desde la recepción de datos procesados hasta la generación del archivo TXT para DGII.
Enfoque MVP:
- Base de datos multi-tenant
- Maestro de clientes
- Gestión de contactos y ciclos
- Integración con PREX (recibe datos ya procesados vía API)
- Interfaz de auditoría para validación final
- Validaciones de gastos fijos
- Resumen 606 con fórmulas
- Generación TXT para DGII
- Dashboard básico
Duración: 3 sprints (6 semanas) | Story Points: ~130
Nota: Auth ya implementado (Jetstream + Filament + roles)
Sprint 1 (2 semanas): Setup, BD y Maestro de Clientes
Inicio: 2025-01-13 | Fin: 2025-01-24 Story Points: 42
1.1 Setup Inicial [8 SP]
- [2] Crear repositorio GitHub ➕ 2025-01-13
- [2] Setup Laravel + PostgreSQL ➕ 2025-01-13
- [5] Instalar dependencias ➕ 2025-11-23
- Spatie Media Library
- Laravel Excel
- DomPDF
- [3] Configurar ambiente desarrollo ➕ 2025-11-24
- Configurar colas
1.2 Base de Datos [18 SP]
- [13] Crear todas las migraciones ➕ 2025-01-15
- Tabla tenants (sistema multi-tenant)
- Tablas core: empresas, ciclo, tipos_documentos, contactos
- Tabla gastos (30+ campos del 606)
- Tabla gastos_fijos (para validaciones)
- Tablas auxiliares: formas_de_pago, tipos_bienes_servicios
- Índices críticos en tenant_id, empresa_id, ciclo_id
- [5] Seeders catálogos DGII ➕ 2025-01-17
- Tipos documentos, formas de pago
- Tipos de bienes y servicios comprados
1.3 Multi-Tenant [5 SP]
- [3] Global scope + middleware ➕ 2025-01-19
- TenantScope con filtrado automático por tenant_id
- Middleware SetTenantFromAuth
- Trait TenantScoped para modelos
- [2] Tests aislamiento ➕ 2025-01-20
- Verificar que queries filtran por tenant_id
- Verificar auto-asignación de tenant_id
1.4 Maestro de Clientes [11 SP]
- [8] Filament Resource empresas ➕ 2025-01-21
- Campos básicos: RNC, nombre, tipo_cliente, nivel_facturación
- Servicios (checkboxes): DGII, Anticipos, IR-17
- Tab “Gastos Fijos”: tabla con RNC proveedor + tipo gasto
- Aplicar TenantScoped trait
- [3] CRUD gastos fijos ➕ 2025-01-23
- Vincular proveedor (contacto) + tipo de gasto
- Activar/desactivar gastos fijos
Entregable Sprint 1: BD funcional + Maestro de clientes operativo + Multi-tenancy implementado
Sprint 2 (2 semanas): Integración PREX y Auditoría
Inicio: 2025-01-27 | Fin: 2025-02-07 Story Points: 46
2.1 Contactos y Ciclos [8 SP]
- [5] Filament Resource contactos ➕ 2025-01-27
- CRUD básico: RNC, nombre, tipo_documento
- Importación masiva desde Excel
- Aplicar TenantScoped trait
- [3] API ciclos fiscales ➕ 2025-01-29
- Generación automática mensual (año + mes)
- Identificador: “202501”
- Validaciones: warning día 10, bloqueo día 20
2.2 API para Recibir de PREX [13 SP]
- [8] Endpoint POST /api/prex/import-gastos ➕ 2025-01-30
- Validar API Key en header X-ORDEN-API-KEY
- Validar estructura del payload JSON
- Validar que empresa pertenece al tenant
- Crear registros en tabla gastos:
- origen = ‘prex’
- prex_factura_id (solo referencia)
- voucher_url (link al PDF en PREX)
- estado = ‘pendiente_revision’
- Matching automático con contactos por RNC
- Crear contacto si no existe
- Retornar: {success: true, gastos_creados: [ids]}
- [3] Middleware de autenticación API ➕ 2025-02-01
- ValidatePrexApiKey middleware
- Verificar API Key contra empresas.prex_api_key
- [2] Tests de integración ➕ 2025-02-02
- Test payload válido
- Test API Key inválida
- Test datos duplicados
2.3 Interfaz de Auditoría [21 SP]
- [8] Layout 2 columnas ➕ 2025-02-03
- Voucher original (iframe desde voucher_url)
- Controles: Zoom, navegación anterior/siguiente
- Contador: “Factura 5/23”
- Filtros: por estado, por empresa, por ciclo
- [8] Form editable + auto-save ➕ 2025-02-05
- Inputs para todos los campos del gasto
- Auto-save al cambiar campo (debounce 500ms)
- Indicador visual: campo modificado (badge amarillo)
- Validaciones en tiempo real:
- NCF: formato + no duplicado
- RNC: 11 dígitos
- Fechas: lógicas (pago >= comprobante)
- Cálculos: total = monto + ITBIS
- Mensajes de error inline
- [5] Sistema de aprobación ➕ 2025-02-07
- Estados: pendiente_revision, en_revision, aprobado, rechazado
- Botones: Aprobar, Rechazar, Aprobar todos
- Roles: Oficial edita, Supervisor aprueba
- Log de cambios (quién modificó qué)
2.4 Validaciones de Gastos Fijos [4 SP]
- [3] Service: ValidadorGastosFijosService ➕ 2025-02-07
- Al aprobar → comparar gastos vs gastos_fijos del cliente
- Generar alertas si faltan gastos esperados
- Retornar lista de gastos faltantes
- [1] UI alertas en auditoría ➕ 2025-02-07
- Banner: “Faltan 2 gastos fijos esperados”
- Lista: Luz (EDENORTE), Renta (INMOBILIARIA X)
Entregable Sprint 2: Integración completa con PREX + Interfaz de auditoría funcional
Sprint 3 (2 semanas): Resumen 606, TXT y Dashboard
Inicio: 2025-02-10 | Fin: 2025-02-21 Story Points: 42
3.1 Resumen 606 [18 SP]
- [5] Documentar fórmulas del Excel ➕ 2025-02-10
- Obtener Excel 606 de Berit
- Mapear cada celda del “Resumen 606”
- Identificar todas las fórmulas Excel
- Traducir a lógica PHP
- [13] Service: Resumen606Service ➕ 2025-02-12
- Agrupaciones por tipo de gasto (01-09):
- 01: Gastos de personal
- 02: Gastos por trabajos, suministros y servicios
- 09: Costo de venta (compras)
- Agrupaciones por NCF (B01, B11, B13, B14, B15)
- Cálculos especiales:
- Compras gravadas vs exentas
- ITBIS adelantar vs ITBIS costo
- Retenciones (ITBIS, ISR)
- Validaciones cruzadas: suma de tipos = Total general
- Tests unitarios de cálculos
- Agrupaciones por tipo de gasto (01-09):
3.2 Generación TXT [11 SP]
- [3] Documentar formato oficial DGII ➕ 2025-02-15
- Obtener especificaciones TXT 606 de DGII
- Estructura: header, líneas detalle, footer
- Longitud campos, decimales, formato fechas
- [8] Service: Generador606TxtService ➕ 2025-02-16
- Generar header (datos empresa, período)
- Formatear cada gasto aprobado como línea
- Padding, decimales correctos
- Fechas en formato YYYYMMDD
- Generar footer (totales, cantidad registros)
- Validar longitud de cada línea
- Endpoint: POST /api/reportes/606/generar-txt
- Retornar archivo TXT para descarga
3.3 Unificar Vouchers en PDF [5 SP]
- [5] Servicio de consolidación ➕ 2025-02-18
- Obtener todas las voucher_urls de gastos aprobados
- Usar FPDI o similar para merge PDFs
- Orden cronológico por fecha_comprobante
- Endpoint: POST /api/reportes/606/unificar-vouchers
- Retornar PDF unificado para descarga
3.4 Dashboard Básico [8 SP]
- [5] Dashboard gastos ➕ 2025-02-19
- Selector de ciclo (mes/año)
- Cards: Total gastos, ITBIS, # facturas, # pendientes revisión
- Gráfico: Evolución gastos (últimos 6 meses)
- Gráfico: Top 10 proveedores del mes
- Tabla: Resumen por tipo de gasto
- [3] Filtros y exportación ➕ 2025-02-20
- Filtros: fecha, proveedor, monto, estado
- Exportar a Excel (listado completo de gastos)
- Exportar resumen 606 a Excel
Entregable Sprint 3: Sistema completo funcional + TXT 606 listo para DGII
📊 Resumen del Hito 1
| Sprint | Enfoque | Story Points | Duración |
|---|---|---|---|
| Sprint 1 | Setup + BD + Multi-Tenant + Maestro Clientes | 42 | 2 semanas |
| Sprint 2 | Integración PREX + Auditoría | 46 | 2 semanas |
| Sprint 3 | Resumen 606 + TXT + Dashboard | 42 | 2 semanas |
| TOTAL | MVP Funcional | 130 SP | 6 semanas |
🎯 Milestones Clave
- Semana 2 (24-ene): ✅ Multi-tenancy + Maestro de clientes
- Semana 4 (07-feb): ✅ PREX integrado + Auditoría funcional
- Semana 6 (21-feb): ✅ Resumen 606 + TXT para DGII
🔄 División de Trabajo: Andrés vs Jeisson
Andrés (Laravel/Filament):
- Base de datos completa con multi-tenancy
- Maestro de clientes
- Contactos y ciclos
- API para recibir datos de PREX (POST /api/prex/import-gastos)
- Interfaz de auditoría completa
- Validaciones de gastos fijos
- Resumen 606 con fórmulas
- Generación TXT DGII
- Dashboard
Jeisson (PREX - Sistema independiente):
- Sistema completo PREX con prex_db
- OCR de vouchers (Tesseract)
- Extracción con IA (Claude API)
- Interfaz de validación en PREX
- API Client para exportar a ORDEN
- Testing de precisión (objetivo: ≥85%)
Ver: Tareas completas de Jeisson
📋 Formato del Payload de PREX a ORDEN
{
"ciclo_id": "202501",
"gastos": [
{
"prex_factura_id": 123,
"rnc": "12345678901",
"nombre_proveedor": "EDENORTE DOMINICANA",
"ncf": "B01-00000123",
"fecha_comprobante": "2025-01-15",
"fecha_pago": "2025-01-15",
"monto_facturado": 1000.00,
"itbis_facturado": 180.00,
"total_factura": 1180.00,
"forma_pago": "efectivo",
"tipo_bien_servicio_comprado_id": 2,
"voucher_url": "https://prex.app/vouchers/empresa_1/202501/factura_123.pdf"
}
]
}Headers requeridos:
Content-Type: application/json
X-ORDEN-API-KEY: {api_key_del_cliente}
⚠️ Supuestos Clave
- PREX de Jeisson entrega datos ya procesados y validados
- Fórmulas del Excel 606 de Berit están disponibles para documentar
- Especificaciones TXT DGII están disponibles en sitio web DGII
- Desarrollo con IA (Claude, Cursor) acelera ~40%
🚀 Siguiente Hito
Hito 2: Formulario 607 (Ingresos)
- Duración estimada: 2-3 sprints (4-6 semanas)
- Aprovecha toda la base del 606
- Flujo: Importación Excel → Ajustes → Generación 607 + TXT
🔗 Integración PREX ↔ ORDEN
Flujo de Datos:
1. Usuario sube vouchers en PREX
2. PREX procesa (OCR + IA)
3. Usuario valida/corrige en PREX
4. Usuario aprueba facturas en PREX
5. Usuario da click "Exportar a ORDEN"
6. PREX → POST /api/prex/import-gastos → ORDEN
7. ORDEN recibe y guarda en tabla gastos (estado: pendiente_revision)
8. Personal de Berit revisa en interfaz de auditoría ORDEN
9. Personal aprueba gastos
10. Sistema valida gastos fijos
11. Sistema genera Resumen 606
12. Sistema genera TXT para DGII
Arquitectura:
prex_db (PREX) → REST API → orden_db (ORDEN)
- facturas_prex - gastos
- datos_extraidos * origen: 'prex'
* prex_factura_id: 123
* voucher_url: https://...
IMPORTANTE:
- No hay Foreign Keys entre bases de datos
gastos.prex_factura_ides solo una referencia numéricagastos.voucher_urlpermite visualizar PDF original desde ORDEN
📝 Notas Técnicas
Multi-Tenancy:
// Modelo base con TenantScoped
class Empresa extends Model
{
use TenantScoped;
protected $fillable = ['tenant_id', 'nombre', 'rnc'];
}
// Queries automáticamente filtradas
$empresas = Empresa::all();
// SELECT * FROM empresas WHERE tenant_id = 1API de Integración:
// routes/api.php
Route::post('/prex/import-gastos', [PrexIntegrationController::class, 'importGastos'])
->middleware('auth.prex.api');
// Middleware valida API Key
class ValidatePrexApiKey
{
public function handle($request, Closure $next)
{
$apiKey = $request->header('X-ORDEN-API-KEY');
$empresa = Empresa::where('prex_api_key', $apiKey)->first();
if (!$empresa) {
return response()->json(['error' => 'Invalid API Key'], 401);
}
// Setear tenant para esta request
auth()->setUser($empresa->users()->first());
return $next($request);
}
}✅ Definition of Done por Sprint
Sprint 1:
- Migraciones ejecutadas sin errores
- Seeders poblaron catálogos
- Multi-tenancy probado (2 tenants aislados)
- Maestro de clientes CRUD funcional
- Gastos fijos configurables
Sprint 2:
- Endpoint /api/prex/import-gastos funcional
- Tests de integración pasando
- Interfaz auditoría muestra vouchers de PREX
- Auto-save funcionando
- Sistema de aprobación operativo
- Validador de gastos fijos detecta faltantes
Sprint 3:
- Resumen 606 calcula correctamente (comparar con Excel)
- TXT 606 genera en formato DGII válido
- PDF unificado de vouchers descargable
- Dashboard muestra métricas correctas
- Sistema completo probado end-to-end
🎓 Recursos de Referencia
- DGII - Formularios: https://dgii.gov.do/formularios/
- DGII - Comprobantes Fiscales: https://dgii.gov.do/ncf/
- Laravel Multi-Tenancy: https://laravel.com/docs/11.x/eloquent#global-scopes
- Filament Admin: https://filamentphp.com/docs
- Laravel Excel: https://docs.laravel-excel.com/
Features Pospuestos para Hito 2:
- ❌ Formulario 607 (Ingresos)
- ❌ Elite 1 y Anexo A
- ❌ Métricas detalladas por empleado
- ❌ Sistema completo notas/CRM
- ❌ Autorizaciones de pago automáticas
- ❌ Gestión NCF completa