Addons estándar / Extensión de datos FACe
Configuración y mapeos
Todo lo que hace el módulo se declara en dos tablas del diccionario, editables desde tablas adicionales. No hay nada que programar ni que recompilar para dar de alta un dato nuevo en el fichero de factura electrónica.
Parámetros de la empresa#
Una fila por empresa, en la tabla de configuración del módulo:
| Columna | Valores | Efecto |
|---|---|---|
SIT_FACE_EXT_ACTIVO |
T / F |
Con F el módulo no interviene y a3ERP emite el XML sin tratar |
SIT_FACE_EXT_FORZARNODOS |
T / F |
Con T genera el nodo aunque el valor de origen esté vacío |
SIT_FACE_EXT_VALIDARXSD |
T / F |
Con T valida el XML resultante contra el esquema de la versión de Facturae detectada |
SIT_FACE_EXT_TRUNCAR |
T / F |
Ver más abajo: es el parámetro con más consecuencias |
SIT_FACE_EXT_AVISOS |
T / F |
Con F no se muestran ventanas. Necesario en instalaciones desatendidas |
SIT_FACE_EXT_NIVELTRAZA |
0 a 6 |
0 Trace, 1 Debug, 2 Information, 3 Warning, 4 Error, 5 Critical, 6 ninguna. Por defecto 2 |
El parámetro de truncado#
Decide qué ocurre cuando el valor de origen es más largo de lo que admite el nodo de destino, y las dos opciones llevan a resultados muy distintos:
| Valor | Qué pasa |
|---|---|
T |
El valor se recorta a la longitud admitida y la factura se emite |
F |
No se emite ningún fichero. a3ERP muestra un mensaje indicando la factura, el campo, el valor, su longitud y el límite del nodo |
Cuál conviene depende del dato. Si es una referencia que el receptor usa para casar la factura con un contrato, un valor recortado puede provocar el rechazo, y entonces es preferible que la emisión se detenga y alguien lo corrija. Si es información complementaria, recortar es preferible a bloquear la facturación.
Conviene decidirlo con el cliente en la puesta en marcha y dejarlo escrito, porque es lo que explica que un día no salga el fichero.
Los avisos en pantalla#
Con T, el módulo puede mostrar un aviso cuando detecta una incidencia de configuración al entrar en la empresa. Sólo lo hace cuando quien lo ejecuta es a3ERP.
Si la facturación se lanza desde un proceso externo desatendido, ponerlo a F. Un aviso que nadie va a atender deja el proceso esperando indefinidamente.
Todo lo que se muestra en pantalla está también en la traza, así que desactivarlo no pierde información.
Los mapeos#
Cada fila de la tabla de mapeos declara una correspondencia entre un campo de la factura y un nodo del fichero.
| Columna | Contenido |
|---|---|
SIT_FACE_EXT_ACTIVO |
T / F. Permite desactivar un mapeo sin borrarlo |
SIT_FACE_EXT_ORDEN |
Orden de aplicación entre mapeos |
SIT_FACE_EXT_DESCRIPCION |
Texto libre. Es lo que se lee al revisar la configuración: merece la pena cuidarlo |
SIT_FACE_EXT_NIVEL |
C cabecera, L línea |
SIT_FACE_EXT_TABORIGEN |
CABEFACV o LINEFACT |
SIT_FACE_EXT_CAMPORIGEN |
Columna de origen, propia del ERP o añadida por el módulo |
SIT_FACE_EXT_XPATHPADRE |
Ruta del nodo padre dentro del XML |
SIT_FACE_EXT_NODO |
Nombre del nodo a generar |
SIT_FACE_EXT_TIPO |
TEXTO, FECHA, NUMERO o ENTERO |
SIT_FACE_EXT_FORMATO |
Formato de salida, cuando el tipo lo admite |
SIT_FACE_EXT_LONGMAX |
Longitud máxima. Con 0 se toma la del esquema |
SIT_FACE_EXT_VERMIN / _VERMAX |
Acotan el mapeo a un rango de versiones de Facturae |
SIT_FACE_EXT_SIEXISTE |
Qué hacer si el nodo ya existe en el XML |
SIT_FACE_EXT_FORZAR |
T genera el nodo aunque el valor esté vacío, para este mapeo concreto |
Un mapeo leído de principio a fin#
Esta fila, que es una de las que vienen de serie:
| Columna | Valor |
|---|---|
SIT_FACE_EXT_ACTIVO |
T |
SIT_FACE_EXT_ORDEN |
10 |
SIT_FACE_EXT_DESCRIPCION |
Referencia contrato receptor (cabecera) |
SIT_FACE_EXT_NIVEL |
C |
SIT_FACE_EXT_TABORIGEN |
CABEFACV |
SIT_FACE_EXT_CAMPORIGEN |
SIT_FACE_EXT_RECCONTRACTREF |
SIT_FACE_EXT_XPATHPADRE |
InvoiceIssueData |
SIT_FACE_EXT_NODO |
ReceiverContractReference |
SIT_FACE_EXT_TIPO |
TEXTO |
SIT_FACE_EXT_LONGMAX |
20 |
SIT_FACE_EXT_VERMIN |
3.2.2 |
SIT_FACE_EXT_SIEXISTE |
V |
Se lee así: por cada factura, tomar de la cabecera el valor de la columna de referencia de contrato; si la factura se emite en Facturae 3.2.2 o posterior, generar dentro del bloque de datos de emisión un nodo ReceiverContractReference con ese valor como texto, recortado a 20 caracteres si el truncado está activo; y si ese nodo ya existiera con contenido, no tocarlo.
Con la factura llevando CTR-2026-0143, el resultado es:
<InvoiceIssueData>
<IssueDate>2026-04-03</IssueDate>
<InvoiceCurrencyCode>EUR</InvoiceCurrencyCode>
<TaxCurrencyCode>EUR</TaxCurrencyCode>
<LanguageName>es</LanguageName>
<ReceiverContractReference>CTR-2026-0143</ReceiverContractReference>
</InvoiceIssueData>
El nodo no se añade al final por casualidad: el esquema define una secuencia y el módulo calcula la posición que le corresponde, insertándolo antes del primer hermano que deba ir detrás. Si el nombre no perteneciera a la secuencia de ese padre en esa versión, el mapeo se omitiría y quedaría en la traza.
Nodos que cuelgan de un agrupador#
Cuando el destino vive bajo un nodo intermedio que a3ERP no genera, no hay que declarar el intermedio: basta con nombrarlo en la ruta del padre y el módulo lo crea, también en su posición correcta. Los dos mapeos del periodo de facturación funcionan así, apuntando ambos a InvoiceIssueData/InvoicingPeriod:
<InvoicingPeriod>
<StartDate>2026-01-01</StartDate>
<EndDate>2026-03-31</EndDate>
</InvoicingPeriod>
Son dos filas independientes, una por fecha. Si sólo se rellena una de las dos fechas en la factura, se genera el agrupador con un solo hijo, lo que puede no ser válido según el esquema: conviene tratar esos pares como lo que son, un dato que se informa entero o no se informa.
Si el nodo ya existe#
| Valor | Comportamiento |
|---|---|
V |
Rellenar sólo si el nodo existente está vacío. Es el valor por defecto y el más prudente |
O |
Omitir: no tocar lo que a3ERP haya generado |
S |
Sobrescribir siempre |
S debe usarse con criterio: sobrescribir un nodo que a3ERP ha rellenado significa entregar algo distinto de lo que el ERP calculó.
Acotar por versión de Facturae#
Un nodo puede existir en 3.2.2 y no en 3.1. Informando la versión mínima y la máxima, el mapeo se aplica sólo donde el esquema lo admite, y se ignora en el resto sin producir errores. Dejar ambas vacías significa «en todas».
Dónde se pueden guardar los datos de origen#
Si el dato ya existe en la factura, se mapea directamente desde su columna. Si no existe, el diccionario añade columnas preparadas para ello:
| Tabla | Columna | Tipo | Para |
|---|---|---|---|
CABEFACV |
SIT_FACE_EXT_RECCONTRACTREF |
varchar(20) |
Referencia de contrato |
CABEFACV |
SIT_FACE_EXT_RECTRANSREF |
varchar(20) |
Referencia de pedido |
CABEFACV |
SIT_FACE_EXT_PERIODOINI |
datetime |
Inicio del periodo facturado |
CABEFACV |
SIT_FACE_EXT_PERIODOFIN |
datetime |
Fin del periodo facturado |
CABEFACV |
SIT_FACE_EXT_INFOADIC |
varchar(2500) |
Información adicional |
LINEFACT |
SIT_FACE_EXT_RECCONTRACTREF |
varchar(20) |
Referencia de contrato de la línea |
LINEFACT |
SIT_FACE_EXT_RECTRANSREF |
varchar(20) |
Referencia de pedido de la línea |
Nada impide mapear desde otras columnas de la factura, propias del ERP o añadidas por otra extensión.
Longitudes que no cuadran
La columna de información adicional admite 2.500 caracteres, pero muchos nodos del esquema admiten muchos menos. Es el origen habitual del truncado: conviene comprobar el límite del nodo de destino antes de dar por buena una configuración, y decidir en consecuencia el parámetro de truncado.
Lo que no se puede configurar#
Los nodos con relevancia fiscal están vetados por código: número y serie de factura, fechas de expedición y de operación, identificación fiscal de las partes, importes, impuestos, totales y firma.
Un mapeo que apunte a uno de ellos se descarta al cargar la configuración, se registra en la traza y se avisa al entrar en la empresa. El veto no tiene parámetro que lo desactive, y es deliberado: el fichero entregado no puede contradecir lo que el ERP tiene registrado. Si un dato fiscal sale mal, se corrige en la factura y se vuelve a emitir.
Después de tocar la configuración#
Los mapeos y los parámetros se leen al entrar en la empresa. Un cambio hecho con a3ERP abierto no tiene efecto hasta volver a entrar.
Al entrar, el módulo comprueba la configuración y agrupa las incidencias que encuentre —un campo de origen que no existe, un nodo mal escrito, un mapeo vetado— para presentarlas de una vez. Merece la pena mirarlas: un mapeo descartado no vuelve a avisar durante la sesión, y la factura sale sin ese dato.