sábado, 13 de junio de 2015

Facturación Electrónica SUNAT

Desde hace tres años aproximadamente, SUNAT viene trabajando el proyecto de Facturación Electrónica para procesar los documentos enviados por los emisores autorizados.

El formato definido para el intercambio de información de Facturación Electrónica SUNAT
es XML basado en el estándar UBL 2.0 (http://docs.oasis-open.org/ubl/os-UBL-2.0/UBL-2.0.html).


SUNAT, ha definido que para el envío de los documentos XML de factura, boleta, nota de crédito y débito, primero deben ser comprimidos en un archivo ZIP para luego ser enviado por Servicio Web, el cual está protegido bajo un esquema de seguridad basado en WSSecurity, quien solicitará como credenciales la Clave SOL de SUNAT.

También se ha especificado que la codificación a emplear en los archivos XML será:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>

Esto último para guardar compatibilidad con ciertos caracteres y los acentos.

Para la integración Emisor - SUNAT, sen ha definido los siguientes ambientes:




En el ambiente de homologación se realizan las pruebas de calidad antes de pasar a producción.

El CDR, es un archivo ZIP que es enviado al Emisor como respuesta al proceso de recepción de los documentos XML de Facturación Electrónica. Este archivo ZIP contiene un archivo XML con un estado que indica el éxito o fracaso de la operación y un listado de códigos de error u observaciones, los cuales ya están definidos previamente en la documentación Manual del Programador.

Adicionalmente, tanto en el ambiente de homologación como producción, requieren de certificado digital firmado, el cual es validado por SUNAT.

Los Servicios Web de SUNAT están desarrollados en Java y son de tipo SOAP.

Actualmente se vienen desarrollando proyectos de Facturación Electrónica en clientes que cuentan con SAP ERP y necesitan enviar sus documentos de facturación a SUNAT, por lo que el uso de los Servicios Web hacen que esto sea posible.

Anexos:





REST y SOAP

REST y SOAP: ¿Cuándo?, ¿por qué? y ¿cómo? usarlos

Interesante conferencia de Tom Burnell, Arquitecto de Soluciones de la empresa Axway.

Al inicio del video muestra un comparativo entre desarrolladores ReST vs SOAP. Tener en cuenta que esta conferencia es de hace dos años aproximadamente, podemos ver que hay una gran diferencia y que por el momento la tendencia es que se mantenga.

Luego en otro momento hace una analogía para comparar ReST y SOAP con el actor Martin Lawrence y su personaje de la película "Big Momma's House", donde resalta que con SOAP el mensaje del Cliente llega con cierta sobrecarga a su destino mientras que con ReST llega tal cual.

Menciona también el concepto de HATEOAS (Hypermedia as the Engine of Application State), que es una restricción de la arquitectura ReST, donde se resalta que un Cliente no necesita de ningún conocimiento previo de como interactuar con cualquier aplicación o servidor.



Seguridad en REST

Video conferencia de la empresa Stormpath donde se muestran algunas alternativas y buenas prácticas para "asegurar" un servicio REST.




Consumir Servicio Web desde SAP

Consumo de un Servicio Web PHP desde SAP ERP

Cuando tenemos la necesidad de comunicar distintos sistemas, es casi seguro que lo primero que se nos viene a la mente es Servicio Web. Ya dependerá de las tecnologías, estándares y protocolos a usar de acuerdo al caso que se determine la mejor solución.

A continuación les mostraré a nivel de pantallas el paso a paso de como consumir un Servicio Web desarrollado en PHP por un proveedor externo desde un sistema SAP ERP.

Para el caso, el servicio a consumir es sencillo, básicamente es un Dummy con el que se está probando el envío de textos muy grandes, pero para efectos didácticos más que suficiente.

Entonces tenemos:

01.- Servicio Web PHP que recibe un texto y lo guarda en una tabla de BD MySQL.



02.- Sistema SAP ERP


Paso a Paso:

Para que SAP pueda consumir un Servicio Web se realizan dos tareas:

  • Registrar el Servicio Web, lo podemos hacer utilizando la transacción SE80.
  • Configurar el SOA Management, esto  para crear el puerto lógico de nuestro Servicio Web.

01: Ejecutar Trx. (Transacción) SE80 y seleccionar los objetos locales para el usuario.




















02: Clic derecho sobre $TMP [USUARIO SAP] para desplegar el menú. Seleccionar
Crear / Enterprise Service.































03: Se inicia el asistente para registrar el Servicio Web, seleccionar Service-Consumer.


04: Seleccionar WSDL / Schema.


05: Seleccionar URL.


06: Ingresamos la URL del Servicio Web.


07: En este paso, debemos ingresar el Paquete SAP donde se crearán todos los objetos, la Orden de  Transporte y un prefijo para el Servicio Web. También se puede crear solo como objeto local si se trata de una prueba y no se requiere luego transportar a QAS y PRD, basta con marcar el check "Local Objects".


08: Llegado a este punto, solo nos queda hacer clic en Finalizar. SAP comenzará a crear los objetos que harán posible el consumo del Servicio Web.


09: Finalmente, debemos quedarnos con una estructura similar a la siguiente.

















Si hacemos doble clic sobre el Servicio creado, podemos visualizar al lado derecho algunos detalles.




Para que podamos invocar el Servicio Web, hace falta una tarea más, que es crear el puerto lógico. Esto se realiza por medio de configuración en el SOA Management. Para ejecutarlo, usar la transacción SOAMANAGER y se abrirá una ventana de navegador web como la siguiente.

Hacer clic en el vínculo Web Service Configuration.


01: Como primer paso, debemos ubicar el objeto Web Service creado para configurarlo.
























02: Seleccionado el objeto, clic sobre el botón Create.


















03: A continuación se muestran las pestañas con los datos de configuración.

 
 
 
 
 














04: Finalmente, grabar y activar el objeto.

Probando el Servicio Web desde SAP

SAP nos permite realizar Test para probar el consumo de nuestro Servicio Web, esto desde la transacción SE80 haciendo doble clic sobre el objeto y luego presionar el botón Ejecutar (resaltado en amarillo) de la barra de herramientas superior.










Al ejecutar, se mostrará la siguiente pantalla, es aquí donde debemos indicarle el puerto lógico que hemos creado anteriormente en SOA Management. Luego dar clic en el botón ejecutar de la parte inferior (primero desde la izquierda).


Se muestra el formato XML del Servicio Web PHP.

Ingresamos algunos valores de prueba y hacemos clic en ejecutar. 

 Finalmente, recibimos la respuesta de nuestro Servicio Web PHP confirmando que los datos se grabaron correctamente.















Nota: Dependiendo de la versión de SAP, las pantallas del asistente en SE80 y SOA Management pueden variar.