acahoma services srl

Nota de Trazabilidad — ACAHOMA

Empresa: ACAHOMA Período: Febrero 2026 decl_id: 35 Archivo Excel: ACAHOMA_FEBRERO_2026-_MACRO_DELARACIÓN_ITBIS.xlsx Fecha de revisión: _____________ Revisado por: _____________


Problema detectado

CIFRA estaba clasificando 3 proveedores en casillas distintas a las que tenía el Excel en la Sección V del IT-1 (Agente de Retención):

ProveedorNCFRNCCIFRA (antes)ExcelCIFRA (después del fix)
BERIT CONSULTINGB0100002048131570429C42 (SOC_07_09)C44 (RST)C44 (RST) ✓
SHARON HEERE REAL ESTATE EIRLB0100000022133151121C47 (COMPROB)C44 (RST)C44 (RST) ✓
RUFO REAL ESTATE SRLB0100000024133259151C47 (COMPROB)C44 (RST)C44 (RST) ✓

Importante: El total a pagar siempre fue el mismo (39,447.51), solo cambiaba la distribución entre casillas.


Causa raíz

CIFRA clasifica retenciones por una heurística basada en 3 datos del 606:

  • Ratio itbis_retenido / itbis_facturado (0.30, 1.00, otro)
  • Tipo de proveedor (jurídica vs persona física)
  • Código de tipo de gasto (02, 09, etc.)

El problema: los códigos 02 y 09 son demasiado amplios.

  • Tipo 02 (Gastos por trabajos, servicios y suministros) cubre tanto seguridad/limpieza (Norma 07-09) como consultoría (Norma 02-05). La heurística los manda a SOC_07_09 por defecto → BERIT cayó ahí mal.
  • Tipo 09 (Compras y gastos del costo de venta) cubre compras a RST jurídica y a personas físicas. La heurística manda a COMPROB_COMPRAS (C47) → SHARON y RUFO cayeron ahí mal.

Falta: un flag en_rst por proveedor que permita distinguir RST jurídica (C44) de los demás casos.


Solución aplicada

Override manual de los 3 gastos vía SQL al agente id=6 (100% RST JURIDICA):

UPDATE gastos
SET tipos_agente_retencion_id = 6
WHERE empresa_id = 124
  AND ciclos_id = 14
  AND ncf IN ('B0100002048', 'B0100000022', 'B0100000024');

Recalculado decl_id=35. Resultado:

CasillaValorEstado
C42 (SOC_07_09)0.00
C43 (SOC_02_05)299,949.09
C44 (RST)129,168.11✓ matchea Excel
C47 (COMPROB)0.00
C52 (ITBIS SOC_02_05)16,197.25
C53 (ITBIS RST)23,250.26
C60 TOTAL ITBIS retenido39,447.51
C67 a pagar39,447.51

⚠️ Riesgo de la solución

El override asume que los 3 proveedores están acogidos al RST. Esto NO ha sido validado con el contador ni con la DGII al momento de aplicar el fix. Posibles escenarios:

Si los proveedores…El fix esAcción
Sí están en RST✓ correctoMantener
No están en RST y son consultoría✗ incorrectoReclasificar BERIT a C43 (Norma 02-05, retención 30%)
No están en RST y la retención del 100% fue voluntaria/error⚠ revisarCaso excepcional, validar con contador

Validación pendiente con el contador

  • Confirmar si BERIT CONSULTING (RNC 131570429) está en RST. Si no, ¿por qué se le retuvo el 100% en lugar del 30% (Norma 02-05)?
  • Confirmar si SHARON HEERE REAL ESTATE EIRL (RNC 133151121) está en RST. Una EIRL normal no debería tener retención del 100% en compras.
  • Confirmar si RUFO REAL ESTATE SRL (RNC 133259151) está en RST. Misma observación.
  • Alternativa: verificar el régimen de cada RNC en dgii.gov.do → Consulta de RNC para confirmar de forma independiente.

Pendiente técnico (CIFRA)

Implementar flag en_rst por proveedor para que esta clasificación se haga automáticamente en períodos futuros. Estimación: ~2.5 horas.

Tareas:

  1. Migración: agregar en_rst (boolean nullable), en_rst_fuente (enum: manual/dgii_api/inferido), en_rst_verificado_at (timestamp) a proveedor_comprador.
  2. Modificar ClasificadorRetencionGastos::clasificar para consultar proveedor.en_rst antes de aplicar heurísticas de tipo 02/09.
  3. Caso jurídica + tipo 09 + ratio 100% + en_rst=null → retornar warning “ambiguo” en lugar de adivinar a COMPROB_COMPRAS.
  4. Auto-update del flag cuando el usuario hace override manual a id=5 o id=6 en el grid 606.
  5. UI en Filament para marcar/desmarcar el flag manualmente.
  6. Seed sugerido: pre-poblar el flag con proveedores que históricamente ya tienen overrides a id=5 o id=6 en períodos anteriores (captura el aprendizaje ya existente en la base).
-- Seed sugerido para nueva columna
UPDATE proveedor_comprador pc
SET en_rst = true,
    en_rst_fuente = 'inferido_historico'
WHERE pc.id IN (
    SELECT DISTINCT g.proveedor_comprador_id
    FROM gastos g
    WHERE g.tipos_agente_retencion_id IN (5, 6)
);

Resumen

AspectoEstado
Total a pagar (39,447.51)✅ Coincide Excel y CIFRA
Distribución por casilla del IT-1✅ Alineada después del fix
Validación fiscal de los 3 proveedores en RSTPENDIENTE con contador
Implementación flag en_rst en CIFRA📋 Pendiente — postergado

Nota generada para trazabilidad. Validar con el contador antes de presentar a DGII si hubiera cambios en próximos períodos.