• No se han encontrado resultados

Manual de integración de los proveedores con el Punto General de Entrada de Facturas Electrónicas de la Comunidad Autónoma Canaria PeFAC

N/A
N/A
Protected

Academic year: 2021

Share "Manual de integración de los proveedores con el Punto General de Entrada de Facturas Electrónicas de la Comunidad Autónoma Canaria PeFAC"

Copied!
30
0
0

Texto completo

(1)

Manual de integración de los

proveedores con el Punto General de Entrada de Facturas Electrónicas de la

Comunidad Autónoma Canaria

PeFAC

Uso de servicios web

(2)

Tabla de contenido

1 INTRODUCCIÓN ... 4

2 DESCRIPCIÓN DE LOS SERVICIOS ... 5

3 SEGURIDAD EN LAS LLAMADAS ... 6

4 DEFINICIÓN DE LOS MÉTODOS ... 7

4.1 CLASE:FACTURA ... 7

4.2 CLASE:ANEXO ... 9

4.3 MÉTODO: ENVIARFACTURA ... 9

4.3.1 Ejemplo de petición ... 10

4.3.2 Ejemplo de respuesta ... 11

4.4 MÉTODO: CONSULTARFACTURA ... 12

4.4.1 Ejemplo de petición ... 12

4.4.2 Ejemplo de respuesta ... 12

4.5 MÉTODO: CONSULTARFACTURAPORVALORES ... 13

4.5.1 Ejemplo de petición ... 14

4.5.2 Ejemplo de respuesta ... 14

4.6 MÉTODO: CONSULTARESTADOMOTIVOFACTURA ... 15

4.6.1 Ejemplo de petición ... 15

4.6.2 Ejemplo de respuesta ... 15

4.7 MÉTODO: CONSULTARESTADOMOTIVOFACTURAPORVALORES ... 15

4.7.1 Ejemplo de petición ... 16

4.7.2 Ejemplo de respuesta ... 16

4.8 MÉTODO: CONSULTARGRUPOESTADOSFACTURA ... 16

4.8.1 Ejemplo de petición ... 17

4.8.2 Ejemplo de respuesta ... 17

4.9 MÉTODO: CONSULTARGRUPOESTADOSFACTURAPORVALORES ... 18

4.9.1 Ejemplo de petición ... 19

4.9.2 Ejemplo de respuesta ... 20

4.10 MÉTODO: ANULARFACTURA ... 21

4.10.1 Ejemplo de petición ... 21

4.10.2 Ejemplo de respuesta ... 21

4.11 MÉTODO: ANULARFACTURAPORVALORES ... 23

4.11.1 Ejemplo de petición ... 23

4.11.2 Ejemplo de respuesta ... 23

4.12 MÉTODO: CONSULTARESTADOFACTURA ... 24

4.12.1 Ejemplo de petición ... 25

4.12.2 Ejemplo de respuesta ... 25

4.13 MÉTODO: CONSULTARESTADOFACTURAPORVALORES ... 25

4.13.1 Ejemplo de petición ... 25

4.13.2 Ejemplo de respuesta ... 26

ANEXO I: EXCEPCIONES ... 27

ANEXO II: TABLA DE ERRORES ... 28

(3)

Control de cambios

VER. DESCRIPCIÓN FECHA

1.0 Versión Inicial 27/10/2014

1.1 Actualización del Anexo II: Tabla de errores 30/12/2014

2.0

- Corrección en la redacción de los atributos del método

“consultarEstadoFacturaPorValores”

- Creación de Nuevos métodos:

o consultarEstadoMotivoFactura

o consultarEstadoMotivoFacturaPorValores o consultarGrupoEstadosFactura

o consultarGrupoEstadosFacturaPorValores

- Para adecuarse a la Orden HAP/1650/2015, se modifica el tipo del atributo ejercicio de todos los métodos *PorValores que pasa de ser String a ser Date.

16/09/2015

(4)

1 Introducción

Este manual pretende servir de referencia a los desarrolladores que quieran integrar diferentes sistemas de facturación con el Punto General de Entrada de Facturas Electrónicas de la Comunidad Autónoma Canaria (PEFAC en adelante).

Los servicios web disponibles en el PEFAC permiten integrar la gestión de facturas de los proveedores con los diferentes organismos del Gobierno de Canarias, permitiendo a sus aplicativos de facturación automatizar el envío de facturas y la recuperación del estado de tramitación de las mismas.

Tal y como se establece en la Ley 25/2013, de 27 de diciembre, de impulso de la factura electrónica y creación del registro contable de facturas en el Sector Público el formato de factura único aceptado es Facturae (http://www.facturae.es), permitiendo firmas electrónicas en dichos documentos realizadas con certificados emitidos por cualquier autoridad certificadora aceptada por el Gobierno de Canarias (https://sede.gobcan.es/sede/la_sede/sistemas_firma).

(5)

2 Descripción de los servicios

Los servicios web publicados ofrecen a los integradores la posibilidad de realizar las siguientes operaciones:

 Enviar una factura al PEFAC (con anexos si es necesario).

 Consultar el estado de tramitación de una o varias facturas presentada a través del PEFAC.

 Anular las facturas presentadas a través del PEFAC.

Los servicios están definidos según el estándar SOAP 1.1, utilizando Message Transmission Optimization Mechanism (MTOM) para optimizar el envío de ficheros (facturas y anexos) a través de los mensajes SOAP1, lo que implica que la librería de implementación de servicios web debe soportar2 esta característica.

1 Para más información sobre MTOM: http://www.w3.org/Submission/soap11mtom10/

2 Algunos ejemplos de implementación en diferentes tecnologías:

MTOM en JAX/WS: https://metro.java.net/nonav/1.2/guide/Binary_Attachments__MTOM_.html MTOM en CXF: http://cxf.apache.org/docs/mtom.html

MTOM en .NET: http://msdn.microsoft.com/es-es/library/aa395209%28v=vs.110%29.aspx

(6)

3 Seguridad en las llamadas

Todas las llamadas al servicio web se realizarán mediante HTTPS con autenticación cliente, lo que implica que el cliente deberá usar un certificado digital en el establecimiento de la conexión con el servidor.

Al igual que en las firmas de las facturas electrónicas, se aceptarán certificados de las autoridades certificadoras indicadas en https://sede.gobcan.es/sede/la_sede/sistemas_firma.

Existe un cliente desarrollado en Java que permite efectuar todas las peticiones y que los integradores pueden utilizar en sus desarrollos, ya sea a modo de ejemplo o directamente como parte de sus desarrollos. El código fuente de dicho desarrollo también está disponible.

(7)

4 Definición de los métodos

A continuación definiremos los métodos y estructuras de datos utilizadas en la comunicación con PeFAC.

Los métodos trabajan principalmente con dos estructuras principales empleadas en las llamadas como parámetros o devueltos por el servicio como resultado: Factura y AnexoFactura.

4.1 Clase: Factura

Este grupo de clases permite a los sistemas integrados conocer el estado y el valor de varios atributos de una factura.

Ilustración 1: Diagrama de "Factura"

Esta clase sólo la utiliza el servidor para informar al sistema llamador del estado y otros parámetros relativos a la factura tratada.

Se compone de dos elementos, el primero de ellos es la versión uno del componente Factura y el segundo añade atributos nuevos en la

(8)

versión dos. Mantienen una relación de herencia, siendo el componente de versión 2 heredero de todos los atributos y métodos del componente de versión 1.

A continuación detallaremos el tipo y significado de cada campo:

 id: valor de tipo Long (entero de 64 bit) que indica el identificador único de la factura dentro del PEFAC, pudiéndose utilizar dicho identificador como referencia en los métodos

“*PorId” (ver más adelante).

 serie: cadena con que guarda la serie de la factura tal y como se especificó en la factura original.

 numero: valor de tipo String que representa el número de factura tal y como lo especificó el proveedor en la factura original.

 nifProveedor: valor de tipo String con el CIF/NIF del proveedor, tal y como se indicó en la factura original.

 nifCliente: valor de tipo String con el CIF/NIF del destinatario de la factura, tal y como se indicó en la factura original.

 fechaFactura: campo de tipo Date que almacena la fecha de la factura, tal y como se definió en la factura original. Este campo se utiliza como ejercicio de la factura, utilizándose solamente la fecha y no la hora.

 fechaFirma: campo de tipo Date con la fecha y hora de la firma de la factura.

 moneda: campo de tipo String con el código de la moneda en la que se define la factura original.

 total: campo de tipo BigDecimal (coma fija) con el importe total de la factura original.

 liquido: valor de tipo BigDecimal (como fija) con el importe líquido de la factura orginal.

 versionFacturaE: valor de tipo String que indica la versión de documento Facturae utilizada en la factura.

 comprobanteRegistro: binario conteniendo el comprobante de registro de la presentación de la factura, en formato PDF y con información adicional para la comprobación de su validez.

 fechaRegistro: campo de tipo Date con la fecha y hora en la que se registró la presentación de la factura.

 estadoFactura: campo de tipo String que indica el estado actual de la factura en el PEFAC. Los posibles valores son:

REGISTRADA, REGISTRADA EN RCF, CONTABILIZADA, PAGADA, ANULADA, RECHAZADA.

(9)

 observacionesAnulacion: campo de tipo String con una descripción del motivo que llevó al proveedor a iniciar el proceso de anulación de la factura, en caso contrario este campo será nulo.

 fechaAnulacion: campo de tipo Date con la fecha y hora en la que se inició el proceso de anulación, en caso contrario este campo será nulo.

 oficinaContable: valor de tipo String representando el código DIR3 de la Oficina Contable a la que se dirigió la factura.

 organoGestor: valor de tipo String representando el código DIR3 del Órgano Gestor al que se dirigió la factura.

 unidadTramitadora: valor de tipo String representando el código DIR3 de la Unidad Tramitadora a la que se dirigió la factura.

 organoProponente: valor de tipo String representando el código DIR3 de Órgano Proponente al que se dirigió la factura.

 claveTesoreria: valor de tipo String con la clave de tesorería asignada a esta factura.

 observacionesEstado: valor de tipo String con una descripción del motivo que llevó al gestor a establecer el correspondiente estado para la factura.

4.2 Clase: Anexo

Esta clase permite identificar los anexos que se añadirán a una factura, siendo utilizada sólo en el método “enviarFactura” ya que los anexos no se podrán consultar posteriormente a su envío.

Ilustración 2: Diagrama de "Anexo"

4.3 Método: enviarFactura

Con este método los sistemas de facturación podrán presentar facturas (y adjuntos) al PeFAC. El método acepta como parámetro un fichero XML en formato Facturae v3.2 ó 3.2.1 y un listado de anexos opcionales.

(10)

Parámetro Tipo Observaciones

facturae XML Contenido del archivo Facturae v3.2 ó 3.2.1 con la factura a enviar al PEFAC.

anexos List<Anexo> Listado con los anexos asociados a la factura (no obligatorio).

4.3.1 Ejemplo de petición

El contenido de una petición SOAP al servicio sería similar a las siguientes líneas:

<S:Envelope>

<S:Header/>

<S:Body>

<ns3:enviarFactura>

<facturae>

<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include"

href="cid:identificador-mime">

</xop:Include>

</facturae>

<anexos>

<nombre>DocumentoAnexo.pdf</nombre>

<contenido>

<xop:Include href="cid:identificador-mime">

</xop:Include>

</contenido>

</anexos>

</ns3:enviarFactura>

</S:Body>

</S:Envelope>

Del ejemplo se han eliminado algunas definiciones de espacios de nombre XML básicos para simplificar (xmlns:S y xmlns:ns3), práctica que se continuará en los siguientes ejemplos.

De este ejemplo destaca que el contenido de los ficheros subidos (factura y anexos) no se codifican en base64 sino que van en formato nativo/binario directamente, pero en forma de anexo MIME/multipart (MTOM), donde el cliente SOAP no envía al servidor un texto XML directamente, sino una mensaje MIME/multipart que contiene, entre otros, el mensaje SOAP3.

El uso de MTOM ahorra un 33% en el tamaño de cada binario que use

3 El atributo XML “href” del elemento <xop:Include> sirve para indicar el identificador de la “parte”

del mensaje MIME/multipart que contiene el documento correspondiente.

(11)

esta codificación en lugar de base64, y si bien no es aconsejable si los binarios son lo bastante pequeños como para que ese 33% no compense el sobrepeso de cada cabecera de cada “parte” del MIME/multipart, en este caso el tamaño del XML de Facturae y de los anexos sí lo justifican ampliamente.

4.3.2 Ejemplo de respuesta

El servidor devolverá un resumen de la factura con los datos que se han generado en el PEFAC, siempre y cuando todo vaya bien y no se produzca ningún error.

Un ejemplo de respuesta sería:

<S:Envelope>

<S:Body>

<ns2:enviarFacturaResponse>

<return>

<id>2527</id>

<numero>3</numero>

<nifProveedor>12345678X</nifProveedor>

<nifCliente>Q8550003A</nifCliente>

<fechaFactura>2014-06-18T00:00:00+01:00</fechaFactura>

<fechaFirma>2014-06-18T14:50:34+01:00</fechaFirma>

<moneda>EUR</moneda>

<total>1575</total>

<liquido>1653.75</liquido>

<versionFacturaE>3.2</versionFacturaE>

<comprobanteRegistro>

<xop:Include href="cid:identificador-mime"/>

</comprobanteRegistro>

<fechaRegistro>2014-07-23T14:11:28+01:00</fechaRegistro>

<estadoFactura>REGISTRADA</estadoFactura>

<oficinaContable>E03078004</oficinaContable>

<organoGestor>E03131204</organoGestor>

<unidadTramitadora>E03131204</unidadTramitadora>

<observacionesEstado>Observaciones de la presentación</observacionesEstado>

</return>

</ns2:enviarFacturaResponse>

</S:Body>

</S:Envelope>

El llamador podrá obtener el justificante (en formato PDF) generado por la oficina de registro correspondiente en el campo

“comprobanteRegistro” (en el XML de respuesta viene como adjunto MTOM tal y como se vio anteriormente).

(12)

El “id” de la factura puede usarse para posteriores referencias con el PEFAC, aunque no es necesario ya que cualquier factura podrá ser referenciada por la tupla <CIF-EJERCICIO-NÚMERO_FACTURA>.

4.4 Método: consultarFactura

Este método permite obtener la información existente en el PEFAC relativa a una factura identificada por el “id” proporcionado. Este “id”

es el mismo que el campo “id” devuelto por el método

“enviarFactura” en su respuesta. Como veremos más adelante en el método “consultarFacturaPorValores” no es necesario que los sistemas de facturación guarden este identificador en sus tablas ya que también podemos referenciar una factura por la tupla <CIF- EJERCICIO-SERIE-NÚMERO_FACTURA>.

Parámetro Tipo Observaciones

idFactura Entero Identificador único de la factura en el PEFAC.

4.4.1 Ejemplo de petición

El contenido SOAP de la petición podría ser como sigue:

<S:Envelope >

<S:Body>

<ns3:consultarFactura>

<idFactura>2527</idFactura>

</ns3:consultarFactura>

</S:Body>

</S:Envelope>

En la petición se observa como único parámetro el identificador único de la factura en el PEFAC.

4.4.2 Ejemplo de respuesta

La respuesta del servicio a un petición como la anterior sería:

<S:Envelope>

<S:Body>

<ns2:consultarFacturaResponse>

<return>

<id>2527</id>

<numero>3</numero>

(13)

<nifProveedor>12345678X</nifProveedor>

<nifCliente>Q8550003A</nifCliente>

<fechaFactura>2014-06-18T00:00:00+01:00</fechaFactura>

<fechaFirma>2014-06-18T14:50:34+01:00</fechaFirma>

<moneda>EUR</moneda>

<total>1575</total>

<liquido>1653.75</liquido>

<versionFacturaE>3.2</versionFacturaE>

<comprobanteRegistro>

<xop:Include href="cid:identificador-mime"/>

</comprobanteRegistro>

<fechaRegistro>2014-07-23T14:11:28+01:00</fechaRegistro>

<estadoFactura>REGISTRADA</estadoFactura>

<oficinaContable>E03078004</oficinaContable>

<organoGestor>E03131204</organoGestor>

<unidadTramitadora>E03131204</unidadTramitadora>

<observacionesEstado>Observaciones del estado de la facture</observacionesEstado>

</return>

</ns2:consultarFacturaResponse>

</S:Body>

</S:Envelope>

La respuesta contiene los principales datos de la factura en el PEFAC, teniendo el mismo formato que la respuesta de “enviarFactura”.

4.5 Método: consultarFacturaPorValores

Este método permite obtener la información existente en el PEFAC relativa a una factura identificada por la tupla <CIF-EJERCICIO- SERIE-NÚMERO_FACTURA>.

Parámetro Tipo Observaciones

nifcifProveedor String CIF/NIF del proveedor/emisor de la factura.

ejercicio Date Fecha del ejercicio, se ignorará los campos de la hora (hora, minutos, segundos, etc.)

serie String Serie de la factura. No obligatorio si la factura no lo especifica.

numeroFactura String Número de la factura .

Al no utilizar el identificador único del PEFAC los sistemas de información pueden ahorrarse modificar sus modelos de datos para almacenar dicha referencia en sus propios aplicativos.

(14)

4.5.1 Ejemplo de petición

El contenido SOAP de la petición podría ser como sigue:

<S:Envelope>

<S:Body>

<ns3:consultarFacturaPorValores>

<nifcifProveedor>12345678X</nifcifProveedor>

<ejercicio>2014-06-18</ejercicio>

<numeroFactura>3</numeroFactura>

</ns3:consultarFacturaPorValores>

</S:Body>

</S:Envelope>

4.5.2 Ejemplo de respuesta

La respuesta del servicio a un petición como la anterior sería:

<S:Envelope>

<S:Body>

<ns2:consultarFacturaPorValoresResponse>

<return>

<id>2527</id>

<numero>3</numero>

<nifProveedor>12345678X</nifProveedor>

<nifCliente>Q8550003A</nifCliente>

<fechaFactura>2014-06-18T00:00:00+01:00</fechaFactura>

<fechaFirma>2014-06-18T14:50:34+01:00</fechaFirma>

<moneda>EUR</moneda>

<total>1575</total>

<liquido>1653.75</liquido>

<versionFacturaE>3.2</versionFacturaE>

<comprobanteRegistro>

<xop:Include href="cid:identificador-mime"/>

</comprobanteRegistro>

<fechaRegistro>2014-07-23T14:11:28+01:00</fechaRegistro>

<estadoFactura>REGISTRADA</estadoFactura>

<oficinaContable>E03078004</oficinaContable>

<organoGestor>E03131204</organoGestor>

<unidadTramitadora>E03131204</unidadTramitadora>

<observacionesEstado>Observaciones del estado de la facture</observacionesEstado>

</return>

</ns2:consultarFacturaPorValoresResponse>

</S:Body>

</S:Envelope>

(15)

La respuesta contiene los principales datos de la factura en el PEFAC, teniendo el mismo formato que la respuesta de “enviarFactura”.

4.6 Método: consultarEstadoMotivoFactura

Este método permite obtener el Motivo del estado asignado a la factura por el gestor, la factura se identifica por su identificador único en PeFAC, este identificador único se devuelve en la respuesta del método enviarFactura.

Parámetro Tipo Observaciones

idFactura Entero Identificador único de la factura en el PEFAC.

4.6.1 Ejemplo de petición

El contenido de una petición SOAP al servicio sería similar a las siguientes líneas:

<S:Envelope>

<S:Header/>

<S:Body>

<ns2:consultarEstadoMotivoFactura>

<idFactura>824</idFactura>

</ns2:consultarEstadoMotivoFactura>

</S:Body>

</S:Envelope>

4.6.2 Ejemplo de respuesta

El servidor devolverá un mensaje con el estado y las observaciones establecidas por el gestor para dicho estado.

4.7 Método: consultarEstadoMotivoFacturaPorValores

Este método permite obtener el Motivo del estado asignado a la factura por el gestor, la factura se identifica por la tupla <CIF- EJERCICIO-SERIE-NÚMERO_FACTURA>.

(16)

Parámetro Tipo Observaciones

nifcifProveedor String CIF/NIF del proveedor/emisor de la factura.

ejercicio Date Fecha del ejercicio, se ignorará los campos de la hora (hora, minutos, segundos, etc.)

serie String Serie de la factura. No obligatorio si la factura no lo especifica.

numeroFactura String Número de la factura.

4.7.1 Ejemplo de petición

El contenido de una petición SOAP al servicio sería similar a las siguientes líneas:

<S:Envelope>

<S:Header/>

<S:Body>

<ns2:consultarEstadoMotivoFacturaPorValores>

<nifcifProveedor>00278402X</nifcifProveedor>

<ejercicio>2015/06/29</ejercicio>

<numeroFactura>V203-1</numeroFactura>

</ns2:consultarEstadoMotivoFacturaPorValores>

</S:Body>

</S:Envelope>

4.7.2 Ejemplo de respuesta

El servidor devolverá un mensaje con el estado y las observaciones establecidas por el gestor para dicho estado.

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

<S:Body>

<ns2:consultarEstadoMotivoFacturaPorValoresResponse xmlns:ns2="http://v2.ws.efactura.ceh.gobiernodecanarias.org/">

<respuestaEstadoFactura>

<estadoFactura>REGISTRADA</estadoFactura>

</respuestaEstadoFactura>

</ns2:consultarEstadoMotivoFacturaPorValoresResponse>

</S:Body>

</S:Envelope>

4.8 Método: consultarGrupoEstadosFactura

Este método permite obtener el estado y su correspondiente motivo del conjunto de facturas identificadas por su identificador único. Estos identificadores únicos son los devueltos en la respuesta del método enviarFactura.

(17)

Parámetro Tipo Observaciones

facturaId Entero Identificador único de la factura en el PEFAC. 1 o más identificadores

4.8.1 Ejemplo de petición

El contenido de una petición SOAP al servicio sería similar a las siguientes líneas:

<S:Envelope>

<S:Body>

<ns2:consultarGrupoEstadosFactura>

<facturaId>605</facturaId>

<facturaId>42</facturaId>

<facturaId>888</facturaId>

<facturaId>444</facturaId>

</ns2:consultarGrupoEstadosFactura>

</S:Body>

</S:Envelope>

4.8.2 Ejemplo de respuesta

El servidor devolverá un mensaje con el estado y las observaciones establecidas por el gestor para dicho estado.

(18)

<S:Envelope>

<S:Body>

<ns2:consultarGrupoEstadosFacturaResponse>

<resultadoEstadosFacturas>

<id>605</id>

<respuestaEstadoFactura>

<estadoFactura>REGISTRADA_RCF</estadoFactura>

<observaciones>Factura registrada</observaciones>

</respuestaEstadoFactura>

</resultadoEstadosFacturas>

<resultadoEstadosFacturas>

<id>42</id>

<respuestaEstadoFactura>

<estadoFactura>RECHAZADA</estadoFactura>

<observaciones>Prueba de modificación del motivo</observaciones>

</respuestaEstadoFactura>

</resultadoEstadosFacturas>

<resultadoEstadosFacturas>

<id>888</id>

</resultadoEstadosFacturas>

<resultadoEstadosFacturas>

<id>444</id>

<error>credenciales.error.facturainvalida</error>

</resultadoEstadosFacturas>

</ns2:consultarGrupoEstadosFacturaResponse>

</S:Body>

</S:Envelope>

En caso de producirse algún error durante la consulta de alguno de los identificadores de facturas, este error se enviará como respuesta en lugar del estado y el motivo correspondientes.

4.9 Método: consultarGrupoEstadosFacturaPorValores

Este método permite obtener el estado y su correspondiente motivo del conjunto de facturas identificadas por la tupla <CIF-EJERCICIO- SERIE-NÚMERO_FACTURA>

(19)

Parámetro Tipo Observaciones

facturaTupla facturaTupla Tuplas de las facturas que se desean consultar. 1 o más identificadores.

 nifcifProveedores

 ejercicio

 serie

 numeroFactura

4.9.1 Ejemplo de petición

El contenido de una petición SOAP al servicio sería similar a las siguientes líneas:

<S:Envelope>

<S:Header/>

<S:Body>

<ns2:consultarGrupoEstadoFacturasPorValores>

<facturaTupla>

<nifcifProveedor>00278402X</nifcifProveedor>

<ejercicio>2015/06/29</ejercicio>

<serie>MAC-</serie>

<numeroFactura>1</numeroFactura>

</facturaTupla>

<facturaTupla>

<nifcifProveedor>00279292A</nifcifProveedor>

<ejercicio>2014/10/06</ejercicio>

<serie>CEHS-</serie>

<numeroFactura>10</numeroFactura>

</facturaTupla>

<facturaTupla>

<nifcifProveedor>00278402X</nifcifProveedor>

<ejercicio>2014/05/21</ejercicio>

<serie>Emit-</serie>

<numeroFactura>3</numeroFactura>

</facturaTupla>

</ns2:consultarGrupoEstadoFacturasPorValores>

</S:Body>

</S:Envelope>

(20)

4.9.2 Ejemplo de respuesta

El servidor devolverá un mensaje con el estado y las observaciones establecidas por el gestor para dicho estado.

<S:Envelope>

<S:Body>

<ns2:consultarGrupoEstadoFacturasPorValoresResponse>

<resultadoEstadosFacturas>

<facturaTupla>

<nifcifProveedor>00278402X</nifcifProveedor>

<ejercicio>2015/06/29</ejercicio>

<serie>MAC-</serie>

<numeroFactura>1</numeroFactura>

</facturaTupla>

<respuestaEstadoFactura>

<estadoFactura>REGISTRADA_RCF</estadoFactura>

<observaciones>Factura registrada</observaciones>

</respuestaEstadoFactura>

</resultadoEstadosFacturas>

<resultadoEstadosFacturas>

<facturaTupla>

<nifcifProveedor>00279292A</nifcifProveedor>

<ejercicio>2014/10/06</ejercicio>

<serie>CEHS-</serie>

<numeroFactura>10</numeroFactura>

</facturaTupla>

<respuestaEstadoFactura>

<estadoFactura>RECHAZADA</estadoFactura>

<observaciones>Prueba de modificación del motivo</observaciones>

</respuestaEstadoFactura>

</resultadoEstadosFacturas>

<resultadoEstadosFacturas>

<facturaTupla>

<nifcifProveedor>00278402X</nifcifProveedor>

<ejercicio>2014/05/21</ejercicio>

<serie>Emit-</serie>

<numeroFactura>3</numeroFactura>

</facturaTupla>

<error>credenciales.error.facturainvalida</error>

</resultadoEstadosFacturas>

</ns2:consultarGrupoEstadoFacturasPorValoresResponse>

</S:Body>

</S:Envelope>

En caso de producirse algún error durante la consulta de alguno de los identificadores de facturas, este error se enviará como respuesta

(21)

en lugar del estado y el motivo correspondientes.

4.10 Método: anularFactura

Este método inicia la anulación de factura a partir del “id” de la factura en el PEFAC. En el siguiente método veremos que no es necesario que los integradores guarden los “id” en sus sistemas ya que también se puede referenciar una factura por la tupla <CIF- EJERCICIO-SERIE-NÚMERO_FACTURA>.

Este método devolverá un error si no es posible anular una factura debido a su estado de tramitación actual ya que sólo es posible anular facturas que no hayan pasado del estado “REGISTRADA RCF”, pero es importante destacar que aunque el sistema acepte la anulación, ésta puede rechazarse posteriormente si la factura se encuentra en un estado de tramitación que impide la anulación de la misma4.

Parámetro Tipo Observaciones

idFactura Entero Identificador único de la factura en el PEFAC.

motivoAnulacion String Motivo de la petición de anulación (obligatorio).

4.10.1 Ejemplo de petición

Una petición SOAP de ejemplo sería:

<S:Envelope>

<S:Body>

<ns3:anularFactura>

<idFactura>2527</idFactura>

<motivoAnulacion>Error en el centro gestor</motivoAnulacion>

</ns3:anularFactura>

</S:Body>

</S:Envelope>

4.10.2 Ejemplo de respuesta

La respuesta del proceso de anulación sería:

4 Hay que tener en cuenta que hay varios procesos y responsables involucrados en la gestión de la facturación y en el momento de la petición el estado que figura en los sistemas puede no estar actualizado o estar en pleno proceso de actualización.

(22)

<S:Envelope>

<S:Body>

<ns2:anularFacturaResponse>

<return>

<id>2527</id>

<numero>3</numero>

<nifProveedor>12345678X</nifProveedor>

<nifCliente>Q8550003A</nifCliente>

<fechaFactura>2014-06-18T00:00:00+01:00</fechaFactura>

<fechaFirma>2014-06-18T14:50:34+01:00</fechaFirma>

<moneda>EUR</moneda>

<total>1575</total>

<liquido>1653.75</liquido>

<versionFacturaE>3.2</versionFacturaE>

<comprobanteRegistro>

<xop:Include href="cid:identificador-mime"/>

</comprobanteRegistro>

<fechaRegistro>2014-07-23T14:11:28+01:00</fechaRegistro>

<estadoFactura>ANULADA</estadoFactura>

<observacionesAnulacion>

Error en el centro gestor </observacionesAnulacion>

<fechaAnulacion>2014-07-23T14:11:28+01:00</fechaAnulacion>

<oficinaContable>E03078004</oficinaContable>

<organoGestor>E03131204</organoGestor>

<unidadTramitadora>E03131204</unidadTramitadora>

</return>

</ns2:anularFacturaResponse>

</S:Body>

</S:Envelope>

La respuesta contiene los principales datos de la factura en el PEFAC, teniendo el mismo formato que la respuesta de “enviarFactura”, pero en los que aparecen 3 nuevos campos con valor:

 observacionesAnulacion: descripción del motivo de anulación proporcionado por el llamador.

 fechaAnulacion: fecha de la anulación.

Si finalmente la anulación es válida no podremos realizar nuevas peticiones de anulación sobre esta factura ya que el servicio generará un error las siguientes peticiones de anulación.

Si por el contrario, la factura no puede ser anulada debido al avanzado estado de tramitación de la factura, los 3 campos relativos a la petición de anulación seguirán estando presentes en posteriores llamadas a “consultarFactura” y “consultarFacturaPorValores” para

(23)

efectos de conservación de histórico, pero con el estado actualizado según el progreso de la tramitación de la factura. Esta situación con campos de anulación inicializados pero con estado diferente a ANULADA indicarán, por tanto, una actualización posterior de los sistemas de gestión que habrán rechazado dicha anulación (la factura no podrá volver a anularse).

4.11 Método: anularFacturaPorValores

Este método realiza la misma función que el anterior pero referencia a la factura a anular por la tupla <CIF-EJERCICIO-SERIE- NÚMERO_FACTURA>.

Parámetro Tipo Observaciones

nifcifProveedor String CIF/NIF del proveedor/emisor de la factura.

ejercicio Date Fecha del ejercicio, se ignorará los campos de la hora (hora, minutos, segundos, etc.)

serie String Serie de la factura. No obligatorio si la factura no lo especifica.

numeroFactura String Número de la factura .

motivoAnulacion String Motivo de la anulación (obligatorio).

4.11.1 Ejemplo de petición

Una anulación de factura con este método quedaría:

<S:Envelope >

<S:Body>

<ns3:anularFacturaPorValores>

<nifcifProveedor>00278402X</nifcifProveedor>

<ejercicio>2015/06/29</ejercicio>

<numeroFactura>1</numeroFactura>

<motivoAnulacion>Error en el centro gestor</motivoAnulacion>

</ns3:anularFacturaPorValores>

</S:Body>

</S:Envelope>

4.11.2 Ejemplo de respuesta

(24)

La respuesta a la petición anterior sería:

<S:Envelope>

<S:Body>

<ns2:anularFacturaPorValoresResponse>

<return>

<id>2527</id>

<numero>1</numero>

<nifProveedor>00278402X</nifProveedor>

<nifCliente>Q8550003A</nifCliente>

<fechaFactura>2015-06-29T00:00:00+01:00</fechaFactura>

<fechaFirma>2014-06-18T14:50:34+01:00</fechaFirma>

<moneda>EUR</moneda>

<total>1575</total>

<liquido>1653.75</liquido>

<versionFacturaE>3.2</versionFacturaE>

<comprobanteRegistro>

<xop:Include href="cid:identificador-mime"/>

</comprobanteRegistro>

<fechaRegistro>2014-07-23T14:11:28+01:00</fechaRegistro>

<estadoFactura>ANULADA</estadoFactura>

<observacionesAnulacion>

Error en el centro gestor </observacionesAnulacion>

<fechaAnulacion>2014-07-23T14:11:28+01:00</fechaAnulacion>

<oficinaContable>E03078004</oficinaContable>

<organoGestor>E03131204</organoGestor>

<unidadTramitadora>E03131204</unidadTramitadora>

</return>

</ns2:anularFacturaPorValoresResponse>

</S:Body>

</S:Envelope>

4.12 Método: consultarEstadoFactura

Este método indica el estado de una factura a partir del “id” de la factura en el PEFAC. En el siguiente método veremos que no es necesario que los integradores guarden los “id” en sus sistemas ya que también se puede referenciar una factura por la tupla <CIF- EJERCICIO-SERIE-NÚMERO_FACTURA>.

Parámetro Tipo Observaciones

idFactura Entero Identificador único de la factura en el PEFAC.

(25)

4.12.1 Ejemplo de petición

Un ejemplo de mensaje de petición sería:

<S:Envelope>

<S:Body>

<ns3:consultarEstadoFactura >

<idFactura>53</idFactura>

</ns3:consultarEstadoFactura>

</S:Body>

</S:Envelope>

4.12.2 Ejemplo de respuesta

Un ejemplo de mensaje de respuesta sería:

<S:Envelope>

<S:Body>

<ns2:consultarEstadoFacturaResponse>

<return>ANULADA</return>

</ns2:consultarEstadoFacturaResponse>

</S:Body>

</S:Envelope>

4.13 Método: consultarEstadoFacturaPorValores

Este método permite consultar el estado de una factura identificándola mediante la tupla <CIF-EJERCICIO-SERIE- NÚMERO_FACTURA>.

Parámetro Tipo Observaciones

nifcifProveedor String CIF/NIF del proveedor/emisor de la factura.

ejercicio Date Fecha del ejercicio, se ignorará los campos de la hora (hora, minutos, segundos, etc.)

serie String Serie de la factura. No obligatorio si la factura no lo especifica.

numeroFactura String Número de la factura .

motivoAnulacion String Motivo de la anulación (obligatorio).

4.13.1 Ejemplo de petición

Un ejemplo de mensaje de petición sería:

(26)

<S:Envelope>

<S:Body>

<ns3:consultarEstadoFacturaPorValores>

<nifcifProveedor>00278402X</nifcifProveedor>

<ejercicio>2014/06/29</ejercicio>

<serie>Emit-</serie>

<numeroFactura>3</numeroFactura>

</ns3:consultarEstadoFacturaPorValores>

</S:Body>

</S:Envelope>

4.13.2 Ejemplo de respuesta

Un ejemplo de mensaje de respuesta sería:

<S:Envelope>

<S:Body>

<ns2:consultarEstadoFacturaPorValoresResponse>

<return>PAGADA</return>

</ns2:consultarEstadoFacturaPorValoresResponse>

</S:Body>

</S:Envelope>

(27)

Anexo I: Excepciones

En caso de error los métodos podrán lanzar una excepción. El mensaje de respuesta contendrá un listado con una descripción de los mensajes de error que ha generado la llamada.

Ilustración 3: Diagrama de ServicioError

Un ejemplo de error devuelto al anular una factura podría ser:

<S:Envelope>

<S:Body>

<S:Fault>

<faultcode>S:Server</faultcode>

<faultstring>

org.gobiernodecanarias.ceh.efactura.ws.ServicioError </faultstring>

<detail>

<ns2:ServicioError>

<mensajesError>

anulacion.error.estadoIncorrecto </mensajesError>

</ns2:ServicioError>

</detail>

</S:Fault>

</S:Body>

</S:Envelope>

Vemos que elemento “ServicioError” va dentro del elemento “detail”

del Fault de SOAP, cuyos campos “faultcode” y “faultstring” podrán albergar códigos y descripciones de error asociados a la parte técnica y de implementación del servicio, que podrían ser de utilidad para una mejor depuración del error al contactar con Soporte.

(28)

Anexo II: Tabla de errores

Error Descripción

anexo.error.nombreFicheroVacio Anexo sin nombre

anexo.error.sinContenido Anexo sin contenido

anulacion.error.estadoIncorrecto Factura no se puede anular en estado actual

factura.error.estado.actualizacion Estado no válido en actualización

anulacion.error.facturaObligatoria Se debe especificar una factura para anular

anulacion.error.observacionesObligatorias

Se debe indicar un motivo para la anulación de la factura

anulacion.error.validacion.backend

Factura no anulable por estar siendo gestionada en centro gestor

credenciales.error.certificado.nif

El certificado usado no es válido al no proporcionar suficiente información de identificación (NIF). Reinicie el navegador y seleccione otro certificado para conectarse a la aplicación.

credenciales.error.facturainvalida El usuario especificado en el certificado no puede acceder a la factura indicada

facturae.error.firmaSolicitudPresentacion No se ha podido firmar la solicitud de la presentación de la factura.

facturae.error.noxml

El documento seleccionado no contiene una factura electrónica. Por favor, compruebe que el documento seleccionado es una factura electrónica y vuelva a intentar la presentación.

facturae.error.oficinaContableNotDefined La factura no declara la oficina contable.

facturae.error.organoGestorNotDefined La factura no declara el órgano gestor.

facturae.error.platino.expediente.new Error creando el expediente.

facturae.error.registro Ha ocurrido un error durante el registro.

facturae.error.report No ha sido posible generar el comprobante

(vuelva a intentarlo en unos minutos).

facturae.error.sefcan.socket.timeout Error de conexión a SEFCAN.

(29)

facturae.error.sign.error Error al verificar la firma de la factura.

facturae.error.sign.expired Factura firmada con un certificado expirado.

facturae.error.sign.notX509 La factura no está firmada con un certificado X509.

facturae.error.sign.notYetValid Factura firmada con un certificado antes de ser válido.

facturae.error.sign.status.revoked Estado del certificado revocado.

facturae.error.sign.status.unknown Estado del certificado desconocido.

facturae.error.truster No ha sido posible encontrar el validador de confianza.

facturae.error.unidadTramitadoraNotDefin

ed La factura no declara la unidad tramitadora.

facturae.error.upload.void Debe indicar una factura a enviar.

facturae.error.validation.facturaRepetida La factura ya ha sido enviada.

facturae.error.validation.fechaEntrega.prio r.fechaFactura

La fecha de la factura no puede ser posterior a la fecha de entrega.

facturae.error.validation.fechaEntrega.void La fecha de entrega de la factura no está incluida.

facturae.error.validation.fechaFactura.void La fecha de la factura no está incluida.

facturae.error.validation.fechaFactura.year 2000

La fecha no puede ser anterior al 01/Enero/2000.

facturae.error.validation.liquido.neg El líquido total de la factura no puede ser negativo.

facturae.error.validation.total.neg El importe total de la factura no puede ser negativo.

facturae.error.versionDesconocido Versión de Facturae desconocida o no permitida.

facturae.error.xml XML no válido.

persistence.error.ejercicio.diario: Varias facturas en días diferentes para la tupla año-nif-serie-número.

attachment.error.mimeTypeNotAllowed: Tipo MIME no permitido (sólo PDF o HTML).

(30)

Referencias

Documento similar

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

que hasta que llegue el tiempo en que su regia planta ; | pise el hispano suelo... que hasta que el

No había pasado un día desde mi solemne entrada cuando, para que el recuerdo me sirviera de advertencia, alguien se encargó de decirme que sobre aquellas losas habían rodado

In medicinal products containing more than one manufactured item (e.g., contraceptive having different strengths and fixed dose combination as part of the same medicinal

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)

Package Item (Container) Type : Vial (100000073563) Quantity Operator: equal to (100000000049) Package Item (Container) Quantity : 1 Material : Glass type I (200000003204)