Facturación electrónica (App B)Modelo de datos y XML v4.4

Modelo de datos y XML v4.4 (Facturación)

Firestore

Todo cuelga del negocio: users/{ownerUid}/clients/{clientId}/...

ColecciónContenido
comprobantesCada comprobante emitido (ComprobanteDoc): clave, consecutivo, tipo, estado, receptor, líneas, totales, condición, medio, fechas, detalleMensaje.
productosCatálogo: nombre, codigoCABYS, codigoTarifaIVA, exento, precioUnitario, unidadMedida, permiteFracciones, controlaInventario + existencias, datos de medicamento (registro, forma farmacéutica).
receptoresClientes/proveedores: identificación, Ubicación v4.4, correo, MAG (activoMAG, vencimientoMAG), exoneración (documento) + sub-doc exo/cabys (CABYS cubiertos), otrasSenasExtranjero (FEC 05).
emisor (config)Razón social, nombre comercial, actividades económicas, ubicación, certificado + credenciales (server-side).

Storage: XML firmado + XML respuesta de Hacienda (xmlStoragePath(...)). El PDF se genera on-demand.

Cadena de tipos (mantener en sync)

EmitirInput (emitir.ts)          ← payload de entrada
  → ComprobanteDoc (emisorStore) ← lo que se guarda en Firestore
  → ComprobanteMeta (client/api) ← lo que lee el cliente
  → ReciboData (ReciboModal)     ← tiquet imprimible
  → FacturaPdfData (pdf.ts)      ← PDF

Estructura del XML (Hacienda v4.4)

Clave numérica (50 dígitos)

506 | DD MM AA | cédula emisor (12) | consecutivo (20) | situación (1) | código seguridad (8)

Número consecutivo (20 dígitos)

casa (3) | terminal (5) | tipo doc (2) | consecutivo (10)

tipo doc: 01 factura, 02 ND, 03 NC, 04 tiquete, 08 FEC, 09 FEE.

Bloques principales

  • Emisor / Receptor — identificación + Ubicacion (provincia, cantón, distrito, otras señas). En FEC los roles se invierten.
  • CondicionVenta + PlazoCredito (solo crédito 02/10) + MedioPago.
  • DetalleServicio / LineaDetalle — por línea: CodigoCABYS, Cantidad (decimal), UnidadMedida, Detalle, PrecioUnitario, Impuesto (tarifa) y Exoneracion opcional (TipoDocumento, NumeroDocumento, NombreInstitucion, FechaEmision, TarifaExonerada).
  • ResumenFacturaTotalVentaNeta, desgloses de IVA, TotalComprobante.
  • InformacionReferencia (NC/ND/FEC) — orden XSD: TipoDocIR → TipoDocRefOTRO → Numero → FechaEmisionIR → Codigo → CodigoReferenciaOTRO → Razon.
  • ds:Signature / xades:QualifyingProperties — firma XAdES-EPES.

Firma digital

XAdES-EPES, SHA256 + RSA, firma enveloped, con la llave criptográfica del emisor (.p12), incluyendo la política de firma de Hacienda (URL + hash).

Recepción (API)

POST /recepcion con el cuerpo { clave, fecha, emisor, receptor?, comprobanteXml (base64), consecutivoReceptor?, callbackUrl? }. Estado por GET /recepcion/{clave} → JSON con ind-estado y respuesta-xml (base64 del MensajeHacienda; de ahí se extrae <DetalleMensaje>).

Catálogos de códigos

  • Identificación receptor: 01 Física · 02 Jurídica · 03 DIMEX · 04 NITE · 05 Extranjero No Domiciliado (no válido en factura 01; sí en FEC).
  • Condición de venta: 01 Contado · 02 Crédito · 03 Consignación · 04 Apartado · 05/06 Arrendamiento · 07 Cobro a favor de tercero · 08 Servicios al Estado · 10 Crédito IVA ≤90 días · 12-15 · 99 Otros.
  • Medio de pago: 01 Efectivo · 02 Tarjeta · 03 Cheque · 04 Transferencia · 05 Recaudado por terceros · 06 SINPE Móvil · 07 Plataforma Digital · 99 Otros.
  • Unidades de medida: Unid, Sp (servicios) — enteras; Kg, G, L, mL, M, cm, h, D… — fraccionables.

Toda emisión se audita contra la guía oficial ANEXOS Y ESTRUCTURAS v4.4 de Hacienda.