Flujos y casos de uso (Contabilidad)

Visión de extremo a extremo

1. Onboarding y suscripción

Landing → registro → se crea subscriptions/{uid}_accountants (estado trialing, 30 días) → dashboard → activar plan. Paddle maneja el cobro; la Cloud Function paddleWebhook actualiza el estado. Los planes definen límites de clientes/facturas (isBlocked corta cuando se excede).

2. Alta de cliente

/accountants → modal de nuevo cliente → opcional “Consultar Hacienda” (useHaciendaLookup) → autorelleno de régimen y actividades económicas (CIIU) → guardar en users/{uid}/clients/{id}. El estado moroso/omiso se muestra como badge.

3. Ingesta de comprobantes

/billsdrag-and-drop de XML (lotes de 50):

  • Parseo con fast-xml-parser; se quitan los nodos de firma (ds:*, xades:*).
  • flatten() aplana a notación punto y calcula el desglose de IVA/TE/Otros + detección de tarifa-mismatch.
  • tipoMovimiento = ingreso si la cédula del cliente es el emisor, gasto si es el receptor.
  • Detección de duplicados por Clave.
  • Escritura por writeBatch a accountantFiles/{fileId} (+ backfill de FechaEmisionTS).

Tipos de raíz soportados: FacturaElectronica, NotaDebito/CreditoElectronica, TiqueteElectronico, FacturaElectronicaCompra (FEC), FacturaElectronicaExportacion, ReciboElectronicoPago, y los mensajes MensajeHacienda/MensajeReceptor (actualizan MH/MR).

4. Libros (compras / ventas)

/booksBooksView carga los accountantFiles del año y construye las filas (buildPurchaseBookRows / buildSalesBookRows, solo aceptadas). En LibrosTab el contador puede:

  • Asignar cuenta contable (CuentaContableModal, árbol con overrides por año).
  • Asignar detalle fiscal (DetalleIngresosModal) y actividad/régimen.
  • Edición masiva (BulkEditModal).
  • Resolver tarifa-mismatch (TarifaMismatchModal: tarifa real / código / TE).
  • Calcular prorrata (ProrrataModal).
  • Guardar (LibroConfirmModal) en gastosBook/ingresosBook/{year}/months/{periodo}/rows/{rowKey} (se guarda el breakdown original, sin redistribuir).

5. Generar declaración

Botón “Generar formulario”FormModal con el selector según el régimen del cliente:

RégimenFormulario
TradicionalD-150 (mensual)
SimplificadoD-153 (si hay factor IVA) · D-104 (físico) · D-105 (jurídico) — trimestral
Especial agropecuarioD-152 (anual) o D-151 (cuatrimestral)

Se elige el período, se pueden editar los factores por actividad, y se exporta a PDF/Excel. El cálculo es en runtime — las declaraciones no se persisten (solo los libros, prorrata, pagos, taxi y cuentas).

6. Pagos y cobros

/payments (PagosView/PagoModal) y /receivables (CobrosView): registran el flujo de caja contra facturas, con condición crédito/contado y estado vencido/vigente (colección pagos).

7. Módulo taxi

/taxi: lecturas de odómetro por placa/trimestre → cálculo automático del recorrido (recálculo en cascada entre trimestres) → genera la sección de D-104 simplificado (monto = totalRecorrido × factorISU, CIIU 4922.2).

8. Analítica del cliente

/info: useClientBookSummaries agrega los monthSummaries de ingresos/gastos → gráficos (Recharts) + estado Hacienda.

9. Habilitar la facturación (App B)

/accountants/clients/[clientId]/facturacionFacturadorAccessPanel: crea/gestiona el usuario POS (acceso a App B) con custom claims confinados al clientId. Ver Arquitectura → Relación con App B.