Pre-launch · ERPlora is in active development. You're viewing a product preview.
Back to apps Sales, payments and tax

Invoicing

Every charged sale becomes a numbered ticket or invoice, corrected only by rectifying invoices.

Free
Start free
Turn it on from your Hub

Apps are turned on from the Apps page of your Hub. Create your free account to get one.

This documentation is only available in Spanish.

Para qué sirve y para quién

Facturación convierte cada venta cobrada en un documento fiscal numerado y lo guarda para siempre: el tique (factura simplificada, F2) de cada cobro, la factura completa (F1) cuando el cliente da su NIF, la factura completa que sustituye a un tique (F3) que ya se llevó el cliente, y la rectificativa (R1–R5) cuando se devuelve dinero, se anula una venta o un documento estaba mal. Es el eslabón entre Ventas y VeriFactu en la cadena fiscal española (venta → factura → registro VeriFactu → AEAT): aquí nace el número de serie que luego viaja a Hacienda. Sirve igual al restaurante y a la peluquería: no hay nada propio de un vertical.

Quién la usa:

  • El empleado consulta las facturas, las imprime, emite una factura a mano, pasa un tique a factura completa y marca pagada una factura.
  • El responsable, además, rectifica y lleva las series de numeración.
  • El propietario y el administrador, además, configuran el emisor (la identidad fiscal del negocio que sale en cada factura).
  • El sistema, sin nadie delante, factura cada cobro y rectifica cada devolución y cada anulación.

No cobra ni devuelve dinero (eso es Ventas), no envía nada a la AEAT ni calcula la huella (eso es VeriFactu) y no guarda la forma de pago.

Referencia adoptada

Aquí manda la especificación oficial sobre el mercado:

  • RD 1619/2012 (Reglamento de facturación): factura completa (art. 6: número y serie, fecha de expedición y de operación si es distinta, nombre, NIF y domicilio de emisor y destinatario, descripción, base, tipo y cuota por tipo), simplificada (art. 7), sustitución del tique por factura completa, y rectificativa con su serie propia, la referencia a la factura que corrige y la corrección hecha (art. 15). Series correlativas, una aparte para las rectificativas, como recuerda la AEAT.
  • SIF / VERI*FACTU (RD 1007/2023, Orden HAC/1177/2024): tipos F1, F2, F3 y R1–R5, rectificativa por diferencias (TipoRectificativa «I») con importes negativos, inmutabilidad del documento emitido.
  • Numeración, contrastada con Odoo, Business Central, NetSuite, Sage 50, Holded, Lightspeed, Toast, Shopify, WooCommerce y Square: el número se asigna en la misma operación que guarda el documento, una serie por código y año que vuelve a 1 cada 1 de enero, plantilla de formato que se congela con el primer número, vista previa del siguiente número sin gastarlo, y la prueba de que no hay huecos.
  • El tipo de rectificativa como en el l10n_es_edi_verifactu de Odoo: R5 para un tique, R1 («error fundado en derecho y art. 80 Uno, Dos y Seis LIVA», la devolución) por defecto en una factura completa, y R2–R4 a elegir al rectificar a mano.
  • El número fiscal se gasta al cobrar, nunca al abrir la cuenta: la cuenta abierta y la precuenta no llevan número de serie.

Antes de empezar

  • Al activar Facturación se activan con ella Ventas, Impuestos y Clientes (las requiere). VeriFactu no se activa sola, pero en España hace falta para que cada factura llegue a la AEAT.
  • El emisor (razón social, NIF y domicilio del negocio) es obligatorio: sin él no se emite ningún documento (Facturación → Emisor, INVOICE-F21). Hoy la identidad fiscal del negocio vive en la cuenta de ERPlora (el SaaS); cuando el SaaS la mande en la foto del hub, el emisor se rellenará solo (INVOICE-F22) y la pantalla dirá que viene de la cuenta.
  • «Hoy» es la hora de Madrid en la fase 1 (el Hub todavía no guarda la zona horaria del negocio): decide la fecha de cada documento y, con ella, el año de su serie. Un cobro a las 00:30 del 1 de enero numera en la serie del año nuevo.
  • Las series se crean solas la primera vez que se usan en el año: «TICKET» (tiques, F2), «FACT» (facturas completas y sustitutivas, F1 y F3) y «RECT» (rectificativas, R1–R5), con el código como prefijo (TICKET-2026-000001). La de un año nuevo hereda el nombre, el prefijo y el formato de la del año anterior con el mismo código. La venta numera siempre en esas tres; una serie con otro código sirve para las facturas hechas a mano (INVOICE-F12).

Configuración inicial, paso a paso:

  1. En Facturación → Emisor, escribe la razón social, el NIF y el domicilio del negocio y guarda.
  2. Si quieres otro prefijo, otro formato o continuar la numeración de otro sistema, crea antes de la primera venta del año las series TICKET (Ticket F2), FACT (Factura F1) y RECT (Rectificativa R1) del año en curso con su «Siguiente número» (INVOICE-F12). Comprueba el «Siguiente número» al editarlas (INVOICE-F13).
  3. Haz una venta de prueba y comprueba en Facturación → Facturas que aparece su tique con el número esperado (INVOICE-F01, INVOICE-F16).

Pantallas

Facturas

Menú Facturación → Facturas. Tabla paginada de 50 en 50 (vista de tabla o de tarjetas; en el móvil, tarjetas con el número como título) con «Número», «Cliente», «Total», «Estado», «Fecha» y «Tipo»; cada columna se ordena. Buscador «Buscar facturas…» (número, nombre o NIF del cliente) y filtros de «Estado», «Tipo», «Serie», «Origen», «Fecha» (entre dos días) y «Total» (entre dos importes). Sin ordenar, lo último emitido sale arriba. Por fila: «Ver» (también al pulsar la fila), «Marcar pagada» (solo en las que están «Emitida» y no son rectificativas) y «Rectificar» (solo en las que no son rectificativas, no están canceladas ni sustituidas). El botón + abre «Nueva factura manual» (INVOICE-F03); sin permiso de emitir no aparece, ni tampoco «Marcar pagada». La lista se pone al día sola cuando se emite, se rectifica o se paga una factura en cualquier dispositivo. Vacía: «Aún no hay facturas.». Cargando: «Cargando…». Error: el mensaje con «Reintentar». Un rechazo de una acción de fila sale como aviso encima de la tabla.

Ficha de factura

Se abre desde una fila de Facturas (/invoice/invoices/<id>). Arriba, «Factura {número}» con la etiqueta de estado y los botones «Imprimir / PDF» y «← Volver». Si es una factura completa o una rectificativa de una factura completa sin NIF del cliente, el aviso «Esta factura no tiene el NIF del cliente: la impresora de tiques no puede sacarla como factura completa.». Debajo, «Tipo», «Serie», «Fecha de emisión», «Fecha de operación» (si es otra), «Cliente», «NIF cliente», «Dirección», «Emisor», «Origen» («Venta del TPV», «Alta manual», «Sustituye a una factura simplificada», «Rectificación», «Devolución de la venta», «Anulación de la venta»), «Venta» (su número), «Rectifica a» (el número de la original, que la abre), «Sustituye a» / «Sustituida por» (enlaces), «Rectificativas» (las que la corrigen), «Pagada el» y «Notas». Las líneas: «#», «Descripción», «Cant.», «Precio», «IVA %», «Base», «Impuesto», «Total» (en el móvil, cada línea en bloque); sin líneas, «Sin líneas de detalle.». El desglose por tipo («IVA 21 %», «Recargo de equivalencia 5,2 %», «Exento (E1)», «No sujeto», «Inversión del sujeto pasivo») con su base y su cuota, y los totales «Base», «Impuestos» y «Total». Los botones «Marcar pagada», «Rectificar» y «Factura completa» (solo en un tique que no se ha sustituido) con la misma regla que en la fila. Un rechazo sale justo encima de esos botones. Error al abrir: «Factura no encontrada» o el mensaje del fallo, con «← Volver».

Rectificar

Ventana que abre «Rectificar», desde la fila o desde la ficha. Título «Rectificar {número}», la nota «Se emitirá una rectificativa (serie RECT) con los importes negados y la factura original quedará cancelada. Esta operación no se puede deshacer.», el «Tipo de rectificativa» (R1 a R4; en un tique, siempre R5, sin elegir), el campo «Motivo» (obligatorio), «Emitir rectificativa» («Rectificando…» mientras va) y «Cancelar». Tres finales dentro de la misma ventana: el rechazo traducido, el documento que no se puede rectificar («Una rectificativa no se puede rectificar.», «La factura ya está cancelada.») y el resultado «Rectificativa {número} emitida. {original} queda cancelada.», cada uno con «Cerrar».

Factura completa (sustituir un tique)

Ventana que abre «Factura completa» en la ficha de un tique. Título «Factura completa del tique {número}», el buscador de clientes de Clientes (rellena los datos) y «Nombre o razón social», «País», «Tipo de documento» (solo fuera de España), «NIF» y «Domicilio», todos obligatorios salvo el tipo. «Emitir factura completa» y «Cancelar». Al emitir, la ventana se cierra y la ficha abre la F3 nueva.

Nueva factura manual

Ventana con la «Serie» (las activas del año que emiten F1 o F2; de entrada, la predeterminada o FACT), el buscador de clientes de Clientes, «Cliente», «NIF cliente», «Dirección», «País», «Notas» y las líneas: «Descripción», «Cant.» (1 de entrada; admite decimales), «Precio» (sin IVA, en euros) e «IVA %» (21 de entrada). «+ Línea» añade otra y la cruz la quita. «Emitir factura» («Emitiendo…» mientras va) está en gris hasta que cada línea tiene descripción, cantidad y precio. Un rechazo sale encima de los botones, por campo cuando es de un campo.

Series

Menú Facturación → Series (solo con permiso de llevar las series). La entrada «Cada serie define el prefijo, el formato y el contador de la numeración por año y tipo de factura…» y una tabla con «Código», «Nombre», «Tipo», «Año», «Prefijo», «Formato» (vacío se lee PREFIX-YYYY-NNNNNN), «Nº actual», «Activa» y «Predet.»; buscador «Buscar código, nombre…». Por debajo de 1280 px abre en tarjetas. + abre «Nueva serie de numeración»; «Editar» (o pulsar la fila) abre «Editar serie {código}» (INVOICE-F12, INVOICE-F13). Vacía: «Aún no hay series. Crea la primera para numerar tus facturas.». Cargando: «Cargando series…». Error: «No se pudieron cargar las series» con «Reintentar».

Emisor

Menú Facturación → Emisor. «Razón social», «NIF», «Domicilio», «Código postal», «Ciudad», «Provincia» y «País», y «Guardar». Arriba, si aún no está completo, «Sin el emisor no se puede emitir ninguna factura.»; si lo mandó la cuenta de ERPlora, «Datos recibidos de tu cuenta de ERPlora el {fecha}.». Solo lo cambian el propietario y el administrador; el resto lo ve sin poder editar.

Estados de cada pantalla

Estado Qué ve la persona
Cargando «Cargando…» (o «Cargando series…») mientras llega el primer resultado.
Vacío «Aún no hay facturas.» / «Aún no hay series…» (o «Sin resultados» con búsqueda o filtro), con + si puede crear.
Error El aviso de la tabla con «Reintentar»; un rechazo de una ventana sale dentro de ella, junto a su campo si es de un campo.
Reconectando Lo pintado se queda; una franja avisa «Reconectando…».
App inactiva (app_inactive) «Esta app no está activa en este negocio».
Sin permiso No aparece lo que no puede hacer; si llega por otra puerta, «No tienes permiso».

Flujos

ID Flujo Estado
INVOICE-F01 El tique (factura simplificada) que nace al cobrar hecho — Ventas lo emite al cobrar, dentro de la transacción del cobro (sale.sale.complete → invoice.invoice.create_from_sale; en curso en Ventas); la reacción del outbox (events.REACTIONS) queda de respaldo (fase 2)
INVOICE-F02 La factura completa al cobrar a un cliente con NIF hecho — Ventas lo emite al cobrar, dentro de la transacción del cobro (sale.sale.complete → invoice.invoice.create_from_sale; en curso en Ventas); la reacción del outbox (events.REACTIONS) queda de respaldo (fase 2)
INVOICE-F03 Emitir una factura a mano hecho
INVOICE-F04 El cliente pide la factura completa de su tique servidor hecho; falta la página pública de la plataforma (/p)
INVOICE-F05 Pasar un tique a factura completa desde el mostrador hecho
INVOICE-F06 Una venta cobrada que no se ha podido facturar hecho — Ventas cobra igualmente con el documento «pendiente» y la reacción del outbox lo emite en cuanto puede (reintentos: relay de la fase 2); por la API o el asistente, por el número de la venta
INVOICE-F07 Anular una venta cobrada que ya tiene su tique hecho — Ventas la pide al anular, dentro de la transacción de la anulación (sale.sale.void → invoice.invoice.rectify_from_void; en curso en Ventas); la reacción del outbox queda de respaldo (fase 2)
INVOICE-F08 Rectificar una factura a mano hecho
INVOICE-F09 La rectificativa al devolver una venta entera hecho — Ventas la pide al devolver, dentro de la transacción de la devolución (sale.sale.refund → invoice.invoice.rectify_from_refund; en curso en Ventas); la reacción del outbox queda de respaldo (fase 2)
INVOICE-F10 La rectificativa por diferencias al devolver parte de una venta hecho — Ventas la pide al devolver, dentro de la transacción de la devolución (sale.sale.refund → invoice.invoice.rectify_from_refund; en curso en Ventas); la reacción del outbox queda de respaldo (fase 2)
INVOICE-F11 Numerar cada documento en su serie y su año hecho
INVOICE-F12 Crear una serie de numeración hecho
INVOICE-F13 Cambiar una serie hecho
INVOICE-F14 Saber si la numeración del año está preparada servidor hecho; la tarea de Inicio es de la plataforma
INVOICE-F15 Comprobar que la numeración no tiene huecos hecho
INVOICE-F16 Buscar una factura hecho
INVOICE-F17 Ver una factura hecho; el justificante VeriFactu llega con la app de VeriFactu
INVOICE-F18 Imprimir o guardar en PDF una factura hecho; la impresora de tiques llega con la app de Impresión
INVOICE-F19 Marcar una factura como pagada hecho
INVOICE-F20 Dar a otras apps la factura de una venta hecho
INVOICE-F21 Configurar el emisor hecho
INVOICE-F22 Recibir el emisor de la cuenta de ERPlora servidor hecho; la foto del SaaS todavía no lleva el emisor
INVOICE-F23 Emitir las facturas de ERPlora (hub de plataforma) hecho (servidor; sin pantalla); en la fase 1 no se da de alta donde factura un negocio real

INVOICE-F01 El tique (factura simplificada) que nace al cobrar

Estado: hecho — Ventas lo emite al cobrar, dentro de la transacción del cobro (sale.sale.complete → invoice.invoice.create_from_sale; en curso en Ventas); la reacción del outbox (events.REACTIONS) queda de respaldo (fase 2) Actor: sistema Pantalla: ninguna Pasos: 1. El cajero cobra una venta en Ventas como tique, que es lo habitual en barra y en el salón. 2. Al cobrar, Ventas pide a Facturación su factura simplificada (F2), dentro del mismo cobro: sale en la serie «TICKET» del año, fechada el día del negocio, con la fecha de operación del cobro, las líneas de la venta y el cliente si la venta tenía uno. La factura nace «Pagada» (el dinero ya está en la caja), con la hora del cobro, y el tique de Ventas ya lleva su número. 3. La factura aparece en Facturación → Facturas como «Ticket», «Pagada», con «Origen» «Venta del TPV». 4. Se comprueba abriéndola: las líneas y el «Total» son los del tique de Ventas, al céntimo. Entra: la venta cobrada de Ventas (sale.sale.completed), leída de la propia venta: sus líneas con base y cuota ya calculadas, si los precios llevaban el IVA dentro, la regla fiscal congelada de cada línea y el tipo de documento; el emisor configurado. Sale: la F2 con su número, la descripción de la operación («Venta {número de la venta}», en español, la lengua de la AEAT), sus líneas (cada una con su precio unitario sin IVA y antes de descuentos, y el descuento aparte, sin IVA) y el desglose por clave fiscal (impuesto, régimen, calificación, tipo y recargo), cerrado una vez por clave: lo cobrado no cambia ni un céntimo, pero con el IVA incluido la base y la cuota de cada tipo se recalculan sobre el total cobrado de ese tipo (base por división, cuota por diferencia) y se reparten a las líneas, que siguen sumando lo cobrado. Avisa invoice.invoice.issued: VeriFactu crea su registro y Ventas podrá poner el número en su tique. Si falla: el mismo aviso repetido no crea otra factura ni gasta número (una factura por venta, también con dos entregas a la vez): la reacción del outbox responde la que emitió el cobro. Si VeriFactu rechaza su registro (no se podría declarar), no se emite el tique: el cobro queda con el documento «pendiente», el motivo a la vista y «Emitir ahora» en Ventas. Sin emisor configurado, o si los importes no cuadran (una cuota que no corresponde a su tipo, una cuota en una línea que no es sujeta), Facturación no escribe nada ni gasta número; Ventas cobra igualmente con el documento «pendiente» y lo emite la reacción del outbox en cuanto se pueda (INVOICE-F06). Una venta que ya no existe no se factura. El techo de la simplificada (3.000 €) lo vigila Ventas al cobrar. Implicados: SALE-F01, SALE-F04, TAX-F18, TAX-F19

INVOICE-F02 La factura completa al cobrar a un cliente con NIF

Estado: hecho — Ventas lo emite al cobrar, dentro de la transacción del cobro (sale.sale.complete → invoice.invoice.create_from_sale; en curso en Ventas); la reacción del outbox (events.REACTIONS) queda de respaldo (fase 2) Actor: sistema Pantalla: ninguna Pasos: 1. El cajero cobra en Ventas eligiendo «Factura», con el nombre, el NIF y la dirección del cliente (Ventas no deja cobrar como factura sin los tres). 2. Al cobrar, Ventas pide la factura completa (F1), dentro del mismo cobro: sale en la serie «FACT» del año, con el nombre, el NIF, la dirección, el país y el tipo de documento del cliente copiados del cobro (o, si el cobro no los trae, de la ficha del cliente), y cada línea con su precio sin IVA y su descuento aparte (RD 1619/2012, art. 6.1.f). 3. Aparece en Facturas como «Factura», «Pagada», «Venta del TPV», y la ficha enseña «NIF cliente» y «Dirección». Entra: la venta cobrada como factura (sale.sale.completed con tipo de documento factura) y los datos fiscales del cliente que viajan en el aviso. Sale: la F1 (avisa invoice.invoice.issued). Es una copia: editar después la ficha del cliente no la cambia. Un cliente de fuera de España se declara por su país y su tipo de documento. Si falla: como en INVOICE-F01. Sin nombre, NIF y dirección del cliente, «Una factura completa necesita el nombre, el NIF y la dirección del cliente.» y no se emite nada. El destinatario se lee igual que en cualquier otro documento: un NIF español que no valida, o un NIF extranjero sin su tipo de documento, se rechaza bajo su campo (422) y no se emite nada. En un tique (F2) el destinatario es opcional: si el NIF de la ficha o del cobro no valida, el tique sale igualmente con el nombre y sin NIF (queda en el registro de la aplicación), para que nunca quede «pendiente» por eso. Implicados: SALE-F04, CUSTOMER-F17

INVOICE-F03 Emitir una factura a mano

Estado: hecho Actor: empleado, responsable, administrador Pantalla: Facturas, Nueva factura manual Pasos: 1. En Facturas, pulsa +: se abre «Nueva factura manual». 2. Elige la «Serie» (las activas del año que emiten facturas, F1, o tiques, F2, y siempre «FACT» y «TICKET» aunque el año aún no las haya abierto; empieza en la predeterminada o en «FACT») y, si quieres, busca al cliente en Clientes: rellena nombre, NIF, dirección y país. Escribe o corrige «Cliente», «NIF cliente», «Dirección» y «Notas». 3. Rellena cada línea: «Descripción», «Cant.» (1 de entrada; hasta tres decimales), «Precio» sin IVA y en euros, e «IVA %» (21 de entrada). «+ Línea» añade otra y la cruz la quita. 4. Pulsa «Emitir factura»; está en gris hasta que cada línea tiene descripción, cantidad y precio. La ventana se cierra y la factura aparece en la lista con su número, «Emitida» y «Origen» «Alta manual». Entra: lo que escribe la persona; el emisor configurado. Por la API o el asistente una línea puede llevar además la categoría fiscal de Impuestos: entonces su tipo y su calificación son los de la regla vigente hoy, no el «IVA %» escrito. El tipo escrito es del impuesto del territorio fiscal del negocio (Impuestos → Ajustes, TAX-F11): en Canarias se declara como IGIC y en Ceuta y Melilla como IPSI. Sale: la factura (F1 en una serie de facturas, F2 en una de tiques) con el IVA calculado encima del precio, cerrado una vez por tipo y repartido entre las líneas por resto mayor (los conceptos suman el total impreso), y como descripción de la operación sus conceptos («Curso de corte, Kit de tinte», hasta 500 caracteres); avisa invoice.invoice.issued. Si falla: dentro de la ventana, encima de los botones: «Una factura completa necesita el nombre, el NIF y la dirección del cliente.», «Ese NIF no es válido.» (bajo el campo), «Línea {n}: el precio no es un importe…», una línea con precio que sale a 0,00, una serie inactiva, que no emite facturas o de otro año («Esa serie numera otro año…»), un tique por encima del límite de Ventas («Por encima de 3.000,00 € no se puede emitir un tique…», RD 1619/2012 art. 4), o la falta de emisor. No se emite nada ni se gasta número, y lo escrito se conserva. Implicados: TAX-F18, CUSTOMER-F17

INVOICE-F04 El cliente pide la factura completa de su tique

Estado: servidor hecho; falta la página pública de la plataforma (/p) Actor: cliente Pantalla: página pública de la plataforma (/p) Pasos: 1. El tique que imprime Ventas lleva un código para pedir la factura. 2. El cliente lo abre en su móvil, sin iniciar sesión, y escribe sus datos fiscales. 3. Facturación emite la factura completa sustitutiva (F3), como en INVOICE-F05. Entra: el tique (F2) y los datos que escribe el cliente. Sale: la F3 (avisa invoice.invoice.issued). Si falla: como en INVOICE-F05. Pendiente: la página pública y el código del tique son de la plataforma (/p) y de Ventas; Facturación ya ofrece la operación que la página llamará (invoice.invoice.substitute). Implicados: SALE-F29

INVOICE-F05 Pasar un tique a factura completa desde el mostrador

Estado: hecho Actor: empleado, responsable, administrador Pantalla: Ficha de factura, Factura completa Pasos: 1. El cliente vuelve con su tique y pide la factura a su nombre. 2. En Facturas, busca el tique (por su número) y ábrelo. 3. Pulsa «Factura completa», busca al cliente o escribe sus datos (nombre, país, NIF y domicilio) y pulsa «Emitir factura completa». 4. Se abre la F3 nueva: «Factura», «Origen» «Sustituye a una factura simplificada» y «Sustituye a» con el número del tique; el tique dice «Sustituida por» con el de la F3. Entra: el tique (F2) que se sustituye y los datos fiscales del cliente. Sale: la F3 en la serie «FACT» del año, con las líneas y los importes del tique copiados al céntimo (misma operación) y la misma fecha de operación; el tique no se toca. Si el tique estaba pagado, la F3 nace pagada. Avisa invoice.invoice.issued. Desde entonces, rectificar o devolver esa venta rectifica la F3, no el tique. Si falla: sin nombre, NIF o domicilio, rechazo; un NIF español que no es válido, «Ese NIF no es válido.»; un documento que no es un tique, «Solo un tique (factura simplificada) se puede sustituir por una factura completa.». Si el tique ya tiene su F3, responde con ella sin emitir otra ni gastar número. Implicados: INVOICE-F04

INVOICE-F06 Una venta cobrada que no se ha podido facturar

Estado: hecho — Ventas cobra igualmente con el documento «pendiente» y la reacción del outbox lo emite en cuanto puede (reintentos: relay de la fase 2); por la API o el asistente, por el número de la venta Actor: sistema, administrador, asistente Pantalla: ninguna Pasos: 1. Una venta queda cobrada y Facturación no puede emitir su factura al cobrar: falta el emisor o los importes no cuadran. Ventas cobra igualmente y deja su documento «pendiente». 2. La venta no se pierde: el aviso queda guardado en la cola de avisos del hub y se reintenta. 3. Quien arregla la causa (configura el emisor) ve salir la factura en el siguiente reintento. Por la API o el asistente se puede pedir también la factura de una venta concreta, por su número. Entra: el aviso de la venta cobrada, o el número de la venta. Sale: lo de INVOICE-F01 o INVOICE-F02, fechado el día en que por fin se emite (la fecha de operación sigue siendo la del cobro). Si falla: una devolución o una anulación que llega antes que la factura de su venta no se pierde: se reintenta hasta que la factura existe (INVOICE-F07, INVOICE-F09). Pendiente: el reparto de avisos entre apps y sus reintentos son del relay del outbox (fase 2); hasta entonces la reacción está declarada (events.REACTIONS) y se prueba entregando el aviso real. Implicados: SALE-F01

INVOICE-F07 Anular una venta cobrada que ya tiene su tique

Estado: hecho — Ventas la pide al anular, dentro de la transacción de la anulación (sale.sale.void → invoice.invoice.rectify_from_void; en curso en Ventas); la reacción del outbox queda de respaldo (fase 2) Actor: sistema Pantalla: ninguna Pasos: 1. Alguien anula en Ventas una venta cobrada como tique, con su motivo (Ventas no deja anular una venta cobrada como factura ni una con devoluciones). 2. Al anular, Ventas pide la rectificativa del tique entero, dentro de la anulación: R5 (rectificativa de simplificada) en la serie «RECT» del año, en negativo, con el motivo de la anulación. Si el tique ya se había sustituido por una F3, rectifica la F3 (R1). 3. El tique pasa a «Cancelada»; la rectificativa sale con «Origen» «Anulación de la venta». Entra: la anulación de la venta (sale.sale.voided), resuelta desde la propia venta. Sale: la rectificativa y la original cancelada (avisa invoice.invoice.issued y invoice.invoice.rectified); VeriFactu la registra. El aviso repetido no emite otra. Si falla: si la venta aún no tiene factura, se reintenta hasta que la tenga (INVOICE-F06). Implicados: SALE-F30

INVOICE-F08 Rectificar una factura a mano

Estado: hecho Actor: responsable, administrador, asistente Pantalla: Rectificar Pasos: 1. En Facturas (fila) o en la ficha, pulsa «Rectificar» en una factura que no sea rectificativa ni esté cancelada o sustituida. 2. Elige el «Tipo de rectificativa» (R1 de entrada: error fundado en derecho y art. 80 Uno, Dos y Seis LIVA; R2 concurso; R3 deudas incobrables; R4 resto; un tique siempre R5), escribe el «Motivo» y pulsa «Emitir rectificativa» (un segundo clic no emite otra). 3. La ventana dice «Rectificativa {número} emitida. {original} queda cancelada.». Al cerrarla, la original sale «Cancelada» y la lista tiene una «Rectificativa» nueva fechada hoy, con los importes y las líneas de la original en negativo y la nota «Rectifica la factura {número}. Motivo: {motivo}». Entra: la factura elegida, el tipo y el motivo. La fecha la pone el servidor: el día del negocio. Sale: la rectificativa numerada en la serie «RECT» del año, con el emisor y el cliente de la original, su desglose en negativo y sus líneas en negativo (la cantidad lleva el signo; el precio no); la original pasa a «Cancelada» (avisa invoice.invoice.issued y invoice.invoice.rectified). No mueve dinero ni caja. Si la original ya tenía rectificativas por diferencias (devoluciones parciales), esta rectifica exactamente lo que queda, con una línea por clave fiscal a su propio tipo. Si falla: dentro de la ventana, traducido. Una fecha que no es la de hoy (API o asistente): «Una factura rectificativa lleva la fecha del día en que se emite…» y no se emite nada. Sobre una rectificativa o una cancelada, la ventana solo dice por qué. Sobre un tique sustituido, «Este tique ya se sustituyó por una factura completa: rectifica la factura completa.». Dos rectificaciones a la vez de la misma factura: la segunda espera a la primera y se rechaza sin gastar número. Sin permiso no aparece la acción. Implicados: SALE-F31

INVOICE-F09 La rectificativa al devolver una venta entera

Estado: hecho — Ventas la pide al devolver, dentro de la transacción de la devolución (sale.sale.refund → invoice.invoice.rectify_from_refund; en curso en Ventas); la reacción del outbox queda de respaldo (fase 2) Actor: sistema Pantalla: ninguna Pasos: 1. Alguien devuelve en Ventas una venta cobrada entera, de una vez. 2. Al devolver, Ventas pide la rectificativa, dentro de la devolución: la factura de esa venta entera en negativo, en la serie «RECT» del año, fechada el día del negocio, con las líneas de la original en negativo y el motivo de la devolución. R5 si la original es un tique; R1 si es una factura completa. 3. La original pasa a «Cancelada»; la rectificativa aparece en Facturas con «Origen» «Devolución de la venta» y «Rectifica a» la original. Entra: la devolución de Ventas (sale.sale.refunded), leída del propio documento de devolución: la venta, el importe y si cierra la venta. La factura original se busca por la venta (su F3 si el tique se sustituyó), nunca por lo que diga el aviso. Sale: la rectificativa y la original cancelada (avisa invoice.invoice.issued y invoice.invoice.rectified). Si falla: la misma devolución dos veces es un solo documento, un solo número. Si la venta aún no tiene factura, se reintenta hasta que la tenga (INVOICE-F06). Implicados: SALE-F31

INVOICE-F10 La rectificativa por diferencias al devolver parte de una venta

Estado: hecho — Ventas la pide al devolver, dentro de la transacción de la devolución (sale.sale.refund → invoice.invoice.rectify_from_refund; en curso en Ventas); la reacción del outbox queda de respaldo (fase 2) Actor: sistema Pantalla: ninguna Pasos: 1. Alguien devuelve en Ventas una parte de una venta cobrada. 2. Al devolver, Ventas pide una rectificativa por diferencias por el importe devuelto: en negativo, en la serie «RECT» del año. Si volvieron artículos, el importe se reparte solo entre sus claves fiscales (devolver el champú al 21 % no toca el menú al 10 %); si solo volvió dinero, entre todas las claves en proporción. Lleva una línea por clave, a su propio tipo, con lo que volvió de esa clave («2 × Champú, 1 × Cera») o, sin artículos, el motivo. La original sigue «Pagada» o «Emitida». 3. Cada devolución siguiente emite la suya sobre lo que queda; la que cierra la venta se lleva exactamente lo que queda, y entonces la original pasa a «Cancelada». 4. Con la venta devuelta entera, la original y sus rectificativas suman cero al céntimo, tipo a tipo. Entra: la devolución de Ventas (sale.sale.refunded), como en INVOICE-F09. Sale: una rectificativa por documento de devolución; la original se cancela solo cuando queda a cero. Si falla: la misma devolución dos veces es un solo documento, y nunca se rectifica más de lo que queda de la original. Implicados: SALE-F31

INVOICE-F11 Numerar cada documento en su serie y su año

Estado: hecho Actor: sistema Pantalla: ninguna Pasos: 1. Cada vez que se emite un documento (tique, factura, sustitutiva o rectificativa), Facturación toma la serie de su código y del año del día del negocio; si no existe, la crea en ese momento con el contador a 0, heredando nombre, prefijo y formato de la del año anterior con ese código (o, la primera vez, con el código como prefijo). 2. Sube el contador de esa serie en uno y escribe el número con el formato de la serie (sin formato, TICKET-2026-000001) en la misma operación que guarda el documento. 3. El 1 de enero, a la hora del negocio, el siguiente documento abre la serie del año nuevo y vuelve a 1 (o al «Siguiente número» que se le haya fijado). Entra: el código de serie que toca (TICKET para los tiques, FACT para las facturas completas y las sustitutivas, RECT para las rectificativas; en el alta manual, la serie elegida) y el día del negocio. Sale: el número del documento. El número entra en la huella encadenada de VeriFactu. Si falla: si la emisión se rechaza o falla, no se guarda nada y el contador no sube: no queda hueco. Dos cobros a la vez en la misma serie esperan uno al otro y reciben números seguidos; dos documentos de la misma serie no pueden llevar el mismo número («Ese número ya existe en la serie…»: pasa si una serie de otro año usa un formato sin el año). Implicados: ninguno

INVOICE-F12 Crear una serie de numeración

Estado: hecho Actor: responsable, administrador Pantalla: Series Pasos: 1. En Facturación → Series, pulsa +: se abre «Nueva serie de numeración». 2. Escribe «Código» (mayúsculas, dígitos, guion o guion bajo), «Nombre», «Tipo de factura» (de F1 a R5), «Año» (de entrada, el del negocio), «Prefijo» (vacío = el código), si quieres «Formato del número» (marcadores {prefix}, {code}, {year}, {seq} y {seq:01d}…{seq:09d}; vacío es PREFIX-YYYY-NNNNNN) y «Siguiente número» (1 de entrada; otro para continuar la numeración de otro sistema). Elige «Activa» y «Serie predeterminada». 3. Pulsa «Crear serie». La ventana se cierra y la serie aparece con «Nº actual» uno menos que el siguiente número. Entra: lo que escribe la persona. Sale: la serie; si se marcó predeterminada, la que lo era ese año deja de serlo. Para que la usen las ventas y las devoluciones, el código tiene que ser TICKET, FACT o RECT; con otro código, sirve para el alta manual (si su tipo es F1 o F2). Si falla: un código vacío o con otra forma, un formato sin el año o sin marcador de secuencia, con un salto de línea, o un prefijo o formato con tildes o símbolos como º o ª, salen bajo su campo (el número es el NumSerieFactura de VeriFactu: solo ASCII imprimible); unos números que con la secuencia más ancha pasarían de 60 caracteres, «Los números de esta serie no cabrían en 60 caracteres…» bajo el prefijo o el formato; un código que ya existe ese año, «Ya hay una serie con ese código ese año.». Implicados: ninguno

INVOICE-F13 Cambiar una serie

Estado: hecho Actor: responsable, administrador Pantalla: Series Pasos: 1. En Series, pulsa «Editar» en la fila (o la fila entera): se abre «Editar serie {código}». 2. Cambia «Nombre», «Activa», «Serie predeterminada» y, mientras la serie no haya emitido nada, «Prefijo», «Formato del número» y «Siguiente número». «Código», «Tipo de factura» y «Año» están bloqueados. 3. Mira «Siguiente número»: es exactamente el número que llevará el próximo documento, calculado por el servidor sin gastarlo. 4. Pulsa «Guardar»; la ventana se cierra y la tabla se pone al día. Entra: la serie elegida y los cambios. Sale: la serie cambiada; los números ya emitidos no cambian. Una serie inactiva deja de ofrecerse (y se rechaza) en el alta manual; las ventas siguen numerando en TICKET, FACT y RECT. Si falla: con la serie ya usada, prefijo, formato y siguiente número están bloqueados y lo dice «Esta serie ya ha emitido facturas, así que su prefijo, su formato y su siguiente número ya no se pueden cambiar: el número forma parte de la cadena de VeriFactu. Crea una serie nueva si necesitas otros.». Implicados: ninguno

INVOICE-F14 Saber si la numeración del año está preparada

Estado: servidor hecho; la tarea de Inicio es de la plataforma Actor: responsable, administrador, asistente Pantalla: ninguna (la tarea de Inicio llegará con la plataforma) Pasos: 1. Se pregunta (asistente, API o la futura tarea de Inicio) si la numeración del año está preparada. 2. La respuesta dice el año del negocio y cuántas series ordinarias (F1, F2, F3), de rectificativas (R1–R5) y predeterminadas tiene ese año, y si está preparada (al menos una ordinaria y una de rectificativas). Entra: las series del año del negocio. Sale: nada; solo se lee. Si falla: nada que fallar; un negocio recién creado responde que no está preparada. Pendiente: la tarea «Tu numeración de facturas» de Inicio es de la plataforma. Implicados: ninguno

INVOICE-F15 Comprobar que la numeración no tiene huecos

Estado: hecho Actor: empleado, responsable, administrador, asistente Pantalla: ninguna (asistente o API) Pasos: 1. Pide al asistente si la numeración tiene huecos, o el libro de números de una serie. 2. Sin huecos, la respuesta es que no falta ninguno; con huecos, dice la serie, el año, el último número que sí está y cuántos faltan seguidos. 3. El libro dice qué número se dio a qué documento y cuándo. Entra: los documentos emitidos. Sale: nada; solo se lee. Si falla: el libro es la propia factura (el número se asigna en la misma transacción que la guarda, así que un número sin documento no puede existir). El hueco que se ve es el de un «Siguiente número» que se saltó números, o uno que nunca se usó; antes del primer número de una serie no cuenta como hueco. Implicados: ninguno

INVOICE-F16 Buscar una factura

Estado: hecho Actor: empleado, responsable, administrador Pantalla: Facturas Pasos: 1. Abre Facturación → Facturas. 2. Escribe en «Buscar facturas…» un número, un nombre de cliente o un NIF; o filtra (estado, tipo, serie, origen, fecha, total); o pulsa una columna para ordenar. 3. La tabla enseña las que casan, de 50 en 50; lo último emitido, arriba. 4. Pulsa «Ver», o la fila, para abrirla (INVOICE-F17). Entra: las facturas del hub. Sale: nada; solo se lee. Si falla: sin resultados, «Sin resultados»; con un error, el mensaje y «Reintentar». Un total que no es un importe dice «Escribe un importe, como 12,50» bajo su campo, y una fecha final anterior a la inicial, «La fecha final no puede ser anterior a la inicial.»; ninguno de los dos filtra. Implicados: ninguno

INVOICE-F17 Ver una factura

Estado: hecho; el justificante VeriFactu llega con la app de VeriFactu Actor: empleado, responsable, administrador Pantalla: Ficha de factura Pasos: 1. En Facturas, abre la factura. 2. Lee la cabecera, las líneas (con su «Precio» sin IVA y antes de descuentos y, si alguna lo tiene, la columna «Dto.» con el descuento sin IVA), el desglose y los totales. 3. «Rectifica a», «Sustituye a», «Sustituida por» y las rectificativas abren el documento enlazado. 4. «← Volver» regresa a la lista. Entra: la factura y sus líneas. Sale: nada; solo se lee. La ficha se pone al día sola si mientras tanto se paga o se rectifica. Si falla: «Factura no encontrada» o el motivo del fallo. Pendiente: el «Justificante VeriFactu» (estado, CSV, QR «QR tributario:» / «VERI*FACTU») lo pintará la ficha cuando exista VeriFactu, con su propia consulta por factura. Implicados: ninguno

INVOICE-F18 Imprimir o guardar en PDF una factura

Estado: hecho; la impresora de tiques llega con la app de Impresión Actor: empleado, responsable, administrador Pantalla: Ficha de factura Pasos: 1. En la ficha, pulsa «Imprimir / PDF». 2. Se abre el diálogo de impresión del navegador con la factura en A4 (emisor, «Facturar a», líneas, desglose por tipo, totales y la nota de lo que rectifica), en el idioma de la pantalla, desde donde se puede guardar como PDF. Un documento de una venta sale como «Copia» (el original fue el papel del cobro); uno emitido desde Facturación, como original. Entra: la factura y sus líneas. Sale: el papel; la factura no cambia. Si falla: «No se pudo imprimir la factura». Pendiente: la impresora de tiques llega con la app de Impresión, que imprimirá el mismo documento (invoice.invoice.document, la plantilla templates/invoice/invoice.html); el QR de VeriFactu llega con VeriFactu. Implicados: ninguno

INVOICE-F19 Marcar una factura como pagada

Estado: hecho Actor: empleado, responsable, administrador Pantalla: Facturas, Ficha de factura Pasos: 1. En Facturas (fila) o en la ficha, pulsa «Marcar pagada» en una factura «Emitida». 2. Confirma en «¿Marcar {número} como pagada?» («El cobro se registra con la fecha y la hora de ahora.») con «Marcar pagada», o vuelve con «Cancelar». 3. La factura pasa a «Pagada» y la ficha enseña «Pagada el» con la fecha y la hora. Entra: la factura elegida. Sale: el estado «Pagada» y la fecha de pago (avisa invoice.invoice.paid). Ningún importe cambia y la caja no se toca. Si falla: si mientras tanto alguien la pagó o la rectificó, «Esta factura no se puede marcar como pagada: solo se puede con una factura emitida que aún no esté pagada. No se ha cambiado nada.». Las facturas que nacen de una venta ya nacen pagadas y una rectificativa no se paga: no ofrecen la acción. Implicados: ninguno

INVOICE-F20 Dar a otras apps la factura de una venta

Estado: hecho Actor: sistema Pantalla: ninguna Pasos: 1. Otra app pregunta qué factura nació de una venta. 2. Facturación contesta con el documento vigente de la venta (su F3 si el tique se sustituyó): número, tipo, serie, fecha, emisor, cliente, total y estado. Entra: la venta (su id o su número). Sale: los datos de la factura; solo se lee. Si falla: si la factura aún no existe, contesta que no hay. Implicados: SALE-F29

INVOICE-F21 Configurar el emisor

Estado: hecho Actor: propietario, administrador Pantalla: Emisor Pasos: 1. Abre Facturación → Emisor. 2. Escribe «Razón social», «NIF», «Domicilio», «Código postal», «Ciudad», «Provincia» y elige el «País» (España de entrada). 3. Pulsa «Guardar»: sale «Emisor guardado.». Entra: lo que escribe la persona. Sale: el emisor, que se copia en cada documento que se emita desde ahora (los ya emitidos no cambian); avisa invoice.issuer.updated. Si falla: sin razón social, NIF o domicilio, bajo su campo; un NIF español que no es válido, «Ese NIF no es válido.». Implicados: ninguno

INVOICE-F22 Recibir el emisor de la cuenta de ERPlora

Estado: servidor hecho; la foto del SaaS todavía no lleva el emisor Actor: sistema Pantalla: Emisor Pasos: 1. Cuando la cuenta de ERPlora (el SaaS) manda la foto del hub con la identidad fiscal del negocio, la plataforma se la entrega a Facturación con la versión de la foto. 2. Facturación guarda el emisor y la pantalla dice «Datos recibidos de tu cuenta de ERPlora el {fecha}.». Entra: el bloque issuer de la foto (legal_name, tax_id, address, postal_code, city, province, country) y su version. Sale: el emisor (avisa invoice.issuer.updated). Una foto más vieja que la guardada se ignora. Si falla: un emisor incompleto o con un NIF no válido se rechaza y queda el anterior. Pendiente: la foto del SaaS todavía no lleva la identidad fiscal; el contrato está escrito abajo. Implicados: ninguno

INVOICE-F23 Emitir las facturas de ERPlora (hub de plataforma)

Estado: hecho (servidor; sin pantalla: nadie entra en el hub de plataforma) Actor: sistema (la cuenta de ERPlora, el SaaS, por /internal/platform/invoices) Pantalla: ninguna Pasos: 1. Un cliente paga su suscripción en Stripe; el SaaS numera su factura (ERP-2026-00123, abonos en ERPR) y la manda al hub de plataforma de ERPlora con POST /internal/platform/invoices, firmada. 2. Facturación la emite tal cual llega, con el número y la fecha del SaaS (ninguna serie del Hub cuenta para ella), con ERPlora como emisor y el pagador de ese día como destinatario, y VeriFactu sella su registro en la misma transacción. Contesta 201 {"status": "issued", "qr", "error": null}. 3. El SaaS pregunta después cómo va (GET …/{id}): issued mientras el registro va a la AEAT, accepted, accepted_with_errors o rejected cuando contesta (con su código y su mensaje). 4. El PDF (GET …/{id}/pdf) es el mismo A4 de INVOICE-F18 en el idioma del pagador, con el QR de VeriFactu («QR tributario:», «VERI*FACTU») solo cuando la AEAT ya lo aceptó, como el SaaS antiguo. Entra: el cuerpo de platform_payload() del SaaS (id, kind, series, number, issued_on, rectification, currency, language, céntimos, tax_treatment, tax_country, tax_rate, recipient, lines, rectifies). Sale: la factura con platform_ref = el id del SaaS (avisa invoice.invoice.issued; un abono, además, invoice.invoice.rectified) y su registro de VeriFactu. Si falla: la misma factura otra vez (o dos entregas a la vez) contesta lo que ya hay, sin escribir nada (200); un abono de una factura que no llegó, 404 invoice.platform_original_unknown; más de 400 € sin NIF, 409 invoice.platform_recipient_required; un cuerpo fuera de contrato, 422 con su código; un rechazo de VeriFactu deshace la factura entera. Implicados: VeriFactu (verifactu.record.create, verifactu.record.by_invoice, verifactu.record.get)

Servicios: lo que entra y lo que sale

Todo se puede pedir por las pantallas, el asistente (por voz o por texto, con la sesión de la propia persona) y la API, con las mismas reglas y los mismos permisos. Pensado para la voz: una factura se nombra por su número (FACT-2026-000012), una venta por su número del día (20261014-0003), un cliente por su nombre, su teléfono o su correo (como en Clientes) y una serie por su código.

Lo que ofrece: consultas (leen, no cambian nada)

Qué da Quién puede Flujos Servicio
Las facturas, con búsqueda, filtros, orden y páginas (hasta 100) ver F16 invoice.invoice.list
Una factura con sus líneas, desglose y enlaces, por su id o su número ver F17 invoice.invoice.get
La factura vigente de una venta ver F20 invoice.invoice.by_source
El documento imprimible (HTML A4) de una factura ver F18 invoice.invoice.document
Las series, con búsqueda, filtros y páginas ver F12, F13 invoice.series.list
El siguiente número de una serie, sin gastarlo ver F13 invoice.series.peek_next
Si la numeración del año está preparada ver F14 invoice.numbering.status
Los huecos de la numeración ver F15 invoice.numbering.gaps
El libro de números entregados ver F15 invoice.numbering.allocations
El emisor ver F21, F22 invoice.issuer.get
Cómo va una factura de ERPlora (por el id del SaaS) solo el sistema F23 invoice.invoice.platform_status
El A4 de una factura de ERPlora, en su idioma solo el sistema F23 invoice.invoice.platform_document
Si el hub de plataforma puede emitir ahora solo el sistema F23 invoice.invoice.platform_health

Todas se pueden seguir en vivo.

Lo que ofrece: acciones (cambian datos)

Qué hace Quién puede Flujos Servicio
Emite una factura a mano emitir F03 invoice.invoice.create
Emite la factura de una venta cobrada (también la reacción a su cobro) emitir F01, F02, F06 invoice.invoice.create_from_sale
Sustituye un tique por una factura completa emitir F04, F05 invoice.invoice.substitute
Marca pagada una factura emitida emitir F19 invoice.invoice.mark_paid
Rectifica una factura rectificar F08 invoice.invoice.rectify
Emite la rectificativa de una devolución (también la reacción a ella) rectificar F09, F10 invoice.invoice.rectify_from_refund
Emite la rectificativa de una venta anulada (también la reacción a ella) rectificar F07 invoice.invoice.rectify_from_void
Crea una serie llevar las series F12 invoice.series.create
Cambia una serie llevar las series F13 invoice.series.update
Guarda el emisor configurar el emisor F21 invoice.issuer.update
Guarda el emisor que manda la cuenta de ERPlora solo el sistema F22 invoice.issuer.sync
Emite una factura de ERPlora con su registro de VeriFactu solo el sistema F23 invoice.invoice.issue_platform

Lo que avisa

Aviso Cuándo Qué lleva Servicio
Documento emitido Toda F1, F2, F3 y R1–R5 nueva invoice_id, number, series, invoice_type, total, source_type, sale_id, source ({type, sale_id, refund_id, void}: de qué cobro, devolución o anulación de Ventas sale), rectifies_id, substitutes_id invoice.invoice.issued
Factura rectificada Una rectificativa corrige una factura invoice_id (la original), number, status, rectification_id, rectification_number, remaining invoice.invoice.rectified
Factura pagada Marcar pagada invoice_id, number, paid_at invoice.invoice.paid
Serie nueva Crear una serie id, code, year invoice.series.created
Serie cambiada Cambiar una serie id, code, year, fields invoice.series.updated
Emisor cambiado Guardar o recibir el emisor source invoice.issuer.updated

Contrato del origen con Ventas: source.type es el source_type del documento (sale, manual, substitution, rectification, refund, void); source.sale_id la venta de la que sale (también en su F3 y en sus rectificativas), source.refund_id la devolución de una rectificativa por devolución y source.void es true en la de una anulación. Así sale.sale.record_invoice enlaza con su cobro, su devolución o su anulación un documento que quedó «pendiente» y emitió después la reacción del outbox.

Qué refresca cada aviso: la lista, la ficha, la factura de una venta y el documento, con «emitido», «rectificada» y «pagada»; las series, el siguiente número, el estado de la numeración, los huecos y el libro, con «emitido» y los de series; el emisor, con «emisor cambiado».

A qué reacciona

Aviso De Qué hace Servicio
Venta cobrada (sale.sale.completed) Ventas Emite su F2 o su F1 (F01, F02) invoice.invoice.create_from_sale
Venta devuelta (sale.sale.refunded) Ventas Emite la rectificativa de la devolución (F09, F10) invoice.invoice.rectify_from_refund
Venta anulada (sale.sale.voided) Ventas Emite la rectificativa del tique entero (F07) invoice.invoice.rectify_from_void

Cada reacción corre como el sistema, en su propia transacción, y es idempotente: una por venta, una por devolución y una por anulación.

Lo que necesita de otras apps

  • Ventas (requisito): la venta, sus líneas, sus devoluciones y su anulación, leídas de sus filas.
  • Impuestos (requisito): la regla congelada en cada línea de la venta (impuesto, régimen, calificación, tipo y recargo) y, en el alta manual por categoría, la regla vigente hoy (resolve_tax, en el territorio fiscal del negocio); el impuesto de un territorio (tax_kind_of, business_tax_kind) para lo que no tiene regla: la línea con tipo tecleado (el territorio del negocio) y la de una venta cuya regla ya no existe (el territorio que la línea congeló al cobrarse); el redondeo a mitad hacia arriba (round_half_up).
  • Clientes (requisito): la ficha del cliente (nombre o empresa, NIF, domicilio y país) que rellena los datos fiscales en el alta manual, en la sustitución y en la F1 de una venta que no los trae.

Quién la usa

App Para qué Servicio
VeriFactu Registrar cada documento emitido y encadenar su huella invoice.invoice.issued + la factura (requiere invoice)
Ventas Poner el número de la factura en el tique invoice.invoice.by_source
Impresión Imprimir el documento invoice.invoice.document

Quién puede qué

Permiso Propietario Administrador Responsable Empleado Servicio
Ver facturas, series, numeración y emisor; imprimir sí sí sí sí invoice.view_invoice
Emitir a mano, facturar una venta, sustituir un tique, marcar pagada sí sí sí sí invoice.add_invoice
Rectificar (a mano, por devolución y por anulación) sí sí sí no invoice.rectify_invoice
Crear y cambiar series sí sí sí no invoice.manage_series
Configurar el emisor sí sí no no invoice.manage_issuer

Los papeles llegan del SaaS con prefijo (hub_owner, hub_admin, hub_manager, hub_employee). Recibir el emisor del SaaS (invoice.sync_issuer) no es de ningún papel: solo del sistema.