Incluir información adicional o notas en la imagen PDF de facturas XML

Las facturas XML pueden incluir información importante que no sea necesario extraer pero que debería estar visible en las facturas para ayudar a los operadores de Verify a realizar su trabajo. Podría tratarse de información de contacto o instrucciones especiales, por ejemplo. A tal efecto, al final de la imagen del PDF podría mostrarse un único campo de nota.

Para proporcionar esta posibilidad, el campo NotaFactura se encuentra al final de la categoría Campos de la ficha Campos del Asignador XML. El elemento XML <Notes></Notes> se correlaciona con esto.

Para los estándares de facturas XML que utilicen un único elemento de nota para la información adicional

Esto está integrado automáticamente en aquellos estándares de factura XML admitidos que incluyen información adicional en un único elemento XML (Svefaktura, OIOUBL, OIOXML, XML General).

  • Si el elemento <Notes> se encuentra en la ubicación esperada, la información que contiene se adapta al final de la factura como un apéndice (si la información es muy grande, se añadirán páginas de apéndice adicionales para que quepa entera).
  • Si el elemento está en una factura pero no está en la ubicación correcta, puede asociar la información al campo NotaFactura.
  • Si existe el elemento en el XML pero está vacío, en la imagen de factura no se muestra nada.
  • Se puede utilizar XSL junto con el campo NotaFactura para incluir todo el código XML en la imagen PDF (ver Ejemplos más abajo).

Para los estándares de facturas XML que permiten varios elementos para la información adicional

Los estándares de factura XML como E2B y Finvoice permiten que se añada información adicional a las facturas desde varios elementos XML. Para poder incluir esta información al final de dichas facturas, hay que especificar segmentos XSL para el campo NotaFactura:

  1. Cuando esté en el Asignador XML optimizando una definición de factura Finvoice o E2B, seleccione la ficha Campos a la derecha de la ventana, expanda la sección Campos, y seleccione el campo NotaFactura que está al final de la lista.
  2. En la ficha Reglas de asignación de campos a la izquierda de la ventana hacia la parte inferior, seleccione Utilizar XSL.
  3. Pegue el extracto XSL adecuado abajo, en el recuadro de texto:
    • Fragmento E2B

El primer código de ejemplo más abajo se debe utilizar si en el archivo XML hay declarado un espacio de nombres XML predeterminado utilizando xmlns, como <Invoice xmlns="http://www.e2b.no/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance":

<xsl:template match="/">
     <xsl:for-each select="x:Invoice/x:InvoiceHeader/x:FreeText">
               <xsl:value-of select="."/>
               <xsl:text>&#13;</xsl:text>
     </xsl:for-each>
</xsl:template>

Si no se encuentra dicha declaración, utilice este fragmento de código:

<xsl:template match="/">
     <xsl:for-each select="Invoice/InvoiceHeader/FreeText">
               <xsl:value-of select="."/>
               <xsl:text>&#13;</xsl:text>
     </xsl:for-each>
</xsl:template>
  • Fragmento Finvoice

El primer código de ejemplo más abajo se debe utilizar si en el archivo XML hay declarado un espacio de nombres XML predeterminado utilizando xmlns, como <Invoice xmlns="http://www.e2b.no/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance:

<xsl:template match="/">
     <xsl:for-each select="x:Finvoice/x:SpecificationDetails/x:SpecificationFreeText">
               <xsl:value-of select="."/>
               <xsl:text>&#13;</xsl:text>
     </xsl:for-each>
</xsl:template>

Si no se encuentra dicha declaración, utilice este fragmento de código:

<xsl:template match="/">
     <xsl:for-each select="Finvoice/SpecificationDetails/SpecificationFreeText">
               <xsl:value-of select="."/>
               <xsl:text>&#13;</xsl:text>
     </xsl:for-each>
</xsl:template>
  1. Haga clic en Extraer y compruebe que el valor del comentario extraído se muestra en el campo NotaFactura en la lista y, a continuación, haga clic en la ficha imagen para asegurarse de que aparece en la imagen de la factura.

Tenga en cuenta si los cambios se deben aplicar a todas las facturas o sólo a aquellas que tengan la definición de facturas de XML actual. Haga clic en Guardar definición XML para guardar el cambio solo para la definición actual de factura XML (esto es, el proveedor actual). Haga clic en Guardar el perfil XML si quiere que las reglas se apliquen a todas las facturas XML que coinciden con el perfil de factura de XML independientemente de la definición de factura XML.

  1. Antes de que se reinterpreten las facturas, no olvide eliminar las facturas y las definiciones de facturas que están conectadas a la definición de factura XML optimizada. (Más información.)
Nota Toda definición de factura Finvoice o E2B en la que se incluya una nota o información adicional en la imagen PDF se debe optimizar de esta forma para que esto sea posible.

Ejemplos

Siga los pasos según se ha indicado en la sección anterior para cualquier estándar de factura XML (esto es, no solo para E2B y Finvoice), pero en el paso 3, utilice en su lugar uno de los fragmentos XSL siguientes:

  • Visualización de todo el código XML al final de la factura sin formato especial
    <xsl:template match="/">
    <xsl:copy-of select="."/>
    </xsl:template>
  • Listar elementos de código XML al final de la factura en orden alfabético junto con el valor correspondiente de la factura
<xsl:template match="/">
<xsl:variable name="unique-list" select="//*[not(.=following::*)]"/>
<xsl:for-each select="$unique-list">
<xsl:sort select="name(.)"/>
<xsl:value-of select="name(.)"/>=<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
  • Mostrar un resumen sencillo de factura por persona al final de la factura
<xsl:template match="/">
<!-- Get all unique values of ‘Description‘ -->
      <xsl:for-each select="//cac:InvoiceLine[not(cac:Item/cbc:Description = preceding::cac:Item/cbc:Description)]">
                               <xsl:sort select="cac:Item/cbc:Description"/> <!-- Sort by Description  -->
                             <!-- For each Description -->
                             <xsl:variable name='CurrentPerson' select="cac:Item/cbc:Description" />      <!-- Get value of Description -->
                             <xsl:variable name='NodeForCurrentPerson' select="//cac:InvoiceLine[cac:Item/cbc:Description=$CurrentPerson]" />         <!-- Get node set of Description -->
                             <xsl:variable name='NumOfRows' select="count($NodeForCurrentPerson)" />      <!-- Count number of nodes for Description -->
                             <xsl:variable name='SumOfCost' select="sum($NodeForCurrentPerson/cac:Item/cac:BasePrice/cbc:PriceAmount)" />       <!-- Sum of value of all PriceAmount nodes for Description -->
             Person: <xsl:value-of select="$CurrentPerson"/> #Rows: <xsl:value-of select="$NumOfRows"/>  Totalt:<xsl:value-of select="$SumOfCost"/>         <!-- Compose the value of the Note field -->
      </xsl:for-each>
</xsl:template>