esofitec. CoreDocs

esofitec. CoreDocs

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.