Este documento es un material de especificación de los requisitos de innovación. Se trata de un contenido sumamente técnico. |
---|
Crear el Web Service TSSIntegSUNAT para permitir que TSS reciba documentos fiscales electrónicos para Perú y los envié a la SUNAT posteriormente.
Especificación | |||
Producto | TSS | Módulo | N/A |
Segmento ejecutor | Servicios | ||
Projeto1 | Proyecto de Desarrollo_MEX | IRM/EPIC1 | |
Requisito/Story/Issue1 | SERINN001-1144 | Subtarea1 | SERINN001-1158 |
Chamado/Ticket2 |
| ||
País | ( ) Brasil ( ) Argentina ( ) México ( ) Chile ( ) Paraguay ( ) Ecuador ( ) EEUU ( ) Colombia ( x) Perú | ||
Otros |
|
Leyenda: 1 – Innovación 2 – Mantenimiento (Los demás campos se deben completar en ambos los procesos).
Crear el Web Service TSSIntegSUNAT para permitir que TSS reciba documentos fiscales electrónicos para Perú y los envié a la SUNAT posteriormente.
El Web Service deberá tener los siguientes Métodos:
· SendDoc
· ConsultaDoc
Web Method SendDoc
Deberá encargarse de recibir los Documentos XML y guardarlos dentro de TSS para su posterior envío a la SUNAT
Parámetros de entrada:
Parámetro | Tipo | Observación |
UserToken | String | Token Utilizado para TSS. |
IdEnt | String | Id de identificación de la Entidad registrada en TSS |
IdDoc | String | Idenficación del Documento en TSS |
Modelo | String | Modelo de Documento: S1- Factura Venta S4 – Nota Crédito S5 – Nota Débito S6 – Guia Remision S7- Comprobante Retención SD - Boleta de Venta SE – Comunicación de Baja |
XML | Base64Binary | XML de Documento Fiscal bajo estándar UBL dependiento del tipo de Documento. |
Exemplo:
Petición:
<body>
<SendDoc>
<userToken>String</userToken>
<entidade>String</entidade>
<idDoc>String</idDoc>
<modelo>String</modelo>
<xml>base64BInary</xml>
</ SendDoc >
</body>
Parámetros de salida:
Parámetro | Tipo | Observación |
IdDoc | String | Id de Documento Registrado en TSS |
HasError | Boolean | True Si existió algún problema con el documento. |
Error | Complejo | Resultado de la recepción del Documento. Si existieron errores durante el proceso serán reportados en este Elemento. |
Codigo | String | Código del Error |
Descripcion | String | Descripción del error producido al procesar el documento. |
Exemplo:
<body>
<SendDocResult>
<id>String</id>
<HasError>boolean</ HasError >
<erro>
<codigo>String</codigo>
<descricao>String</descricao>
</erro>
</body>
Proceso
· Deberá Validar que el USERTOKEN sea Igual a “TOTVS”, si es diferente deberá generar SOAP FAULT indicando “000 – UserToken Inválido”.
· Deberá validar que la Entidad(idEnt) exista en TSS en la tabla SPED001L. Si no existe, deberá retornar erro código “001” indicando el siguiente mensaje: “Empresa o Entidad no registrada en TSS”
Ejemplo:
<body>
<SendDocResult>
<id>F0010000000001</id>
<HasError>True</ HasError >
<erro>
<codigo>001</codigo>
<descricao>Empresa o Entidad no registrada en TSS</descricao>
</erro>
</SendDocResult>
</body>
· Validará que el modelo a recibir se encuentre dentro de los siguientes:
S1- Factura Venta
S4 – Nota Crédito
S5 – Nota Débito
S6 – Guia Remision
S7- Comprobante Retención
SD - Boleta de Venta
SE- Comunicado de Baja
Si es diferente a los mencionados, deberá retornar error indicando “002 – Modelo Inválido”. Ejemplo:
<body>
<SendDocResult>
<id>F0010000000001</id>
<HasError>True</ HasError >
<erro>
<codigo>002</codigo>
<descricao>Modelo Inválido</descricao>
</erro>
</SendDocResult>
</body>
· Validar que la propiedad XML no esté vacía, si no se informa XML entonces debe generar error Indicando “003 – XML Vacío”. Ejemplo:
<body>
<SendDocResult>
<id>F0010000000001</id>
<HasError>True</ HasError >
<erro>
<codigo>003</codigo>
<descricao>XML Vacio</descricao>
</erro>
</SendDocResult>
</body>
· Validar que exista el archivo Schema para el modelo indicado, vea la siguiente tabla:
Modelo |
Archivo Schema
|
S1- Factura Venta SD – Boleta de Venta | UBL-Invoice-2.0.xsd |
S4 - Nota Crédito | UBL-CreditNote-2.0.xsd |
S5 – Nota Débito | UBL-DebitNote-2.0.xsd |
S6 – Guia Remision | UBL-DespatchAdvice-2.0.xsd |
S7- Comprobante Retención | UBLPE-Retention-1.0 |
SE-Comunicado de Baja | UBL-VoidedDocuments-1.0 |
Este Archivo debe ubicarse dentro de la carpeta “Schemas” de TSS. Si no existe el archivo, deberá retornar error indicando “004 – Archivo ” + nombre del archivo xsd + “No se encuentra en TSS. Verifique”.
Ejemplo:
<body>
<SendDocResult>
<id>F0010000000001</id>
<HasError>True</ HasError >
<erro>
<codigo>004</codigo>
<descricao>Archivo UBL-Invoice-2.0.xsd No se encuentra en TSS. Verifique </descricao>
</erro>
</SendDocResult>
</body>
· Validar que el XML recibido pase la validación contra el esquema correspondiente. Para ello deberá usar el xsd según el modelo:
Modelo |
Archivo Schema
|
S1- Factura Venta SD – Boleta de Venta | UBL-Invoice-2.0.xsd |
S4 - Nota Crédito | UBL-CreditNote-2.0.xsd |
S5 – Nota Débito | UBL-DebitNote-2.0.xsd |
S6 – Guia Remision | UBL-DespatchAdvice-2.0.xsd |
S7- Comprobante Retención | UBLPE-Retention-1.0 |
SE-Comunicado de Baja | UBL-VoidedDocuments-1.0 |
Si el XML no cumple con el esquema establecido deberá retornar error “005 – Error de Esquema” más el error que arroje la función TSSValidSchema .
Ejemplo:
<body>
<SendDocResult>
<id>F0010000000001</id>
<HasError>True</ HasError >
<erro>
<codigo>005</codigo>
<descricao>Error de Esquema: Elemento RUC no contiene el tipo correcto </descricao>
</erro>
</SendDocResult>
</body>
· Validar si el registro para el idDoc recibido existe en la tabla SPED050L .
Si el registro existe, revisar que su estatus sea diferente de Autorizado(STATUS = 6).
Si SPED050L->STATUS = 6 Deberá retornar error: “006 – El documento ya ha sido Autorizado y TSS no puede recibirlo nuevamente.”
Ejemplo:
<body>
<SendDocResult>
<id>F0010000000001</id>
<HasError>True</ HasError >
<erro>
<codigo>006</codigo>
<descricao>
El documento ya ha sido Autorizado por la SUNAT y TSS no puede recibirlo nuevamente.
</descricao>
</erro>
</SendDocResult>
</body>
Si el documento se encuentra en “Esperando Proceso” (STATUS = 4). Deberá retornar error: 007 – “Espere el procesamiento del documento”
Ejemplo:
<body>
<SendDocResult>
<id>F0010000000001</id>
<HasError>True</ HasError >
<erro>
<codigo>007</codigo>
<descricao> Espere el procesamiento del documento </descricao>
</erro>
</SendDocResult>
</body>
Si el documento no se puede grabar en TSS. Debera retornar error: 008 – “Error en la grabacion del registro”
Ejemplo:
<body>
<SendDocResult>
<id>F0010000000001</id>
<HasError>True</ HasError >
<erro>
<codigo>008</codigo>
<descricao> Error en la grabacion del registro </descricao>
</erro>
</SendDocResult>
</body>
Para cualquier otro Estatus, deberá actualizar el registro cómo sigue:
SPED050L->ID_ENT := Propiedad IdEnt
SPED050L->NFE_ID := Propiedad IdDoc
SPED050L->MODELO := Propiedad Modelo
SPED050L->DATE_NFE := Date()
SPED050L->TIME_NFE := Time()
SPED050L->AMBIENTE := Ambiente configurado MV_AMBIENTE
SPED050L->MODALIDADE := vacio
SPED050L->STATUS := 1
SPED050L->XML_ERP := Propiedad XML
SPED050L->ERRCODE := 0
SPED050L->ERRMSG := ""
· De no pasar alguna de las validaciones mencionadas, no deberá registrar el documento en TSS.
· Si pasó todas las validaciones anteriores, deberá generar un nuevo registro en la tabla SPED050L como se indica a continuación:
SPED050L->ID_ENT := Propiedad IdEnt
SPED050L->NFE_ID := Propiedad IdDoc
SPED050L->MODELO := Propiedad Modelo
SPED050L->DATE_NFE := Date()
SPED050L->TIME_NFE := Time()
SPED050L->AMBIENTE := Ambiente configurado MV_AMBIENTE
SPED050L->MODALIDADE := vacio
SPED050L->STATUS := 1
SPED050L->XML_ERP := Propiedad XML
SPED050L->ERRCODE := 0
SPED050L->ERRMSG := ""
Deberá realizar envió de retorno Positivo. Ejemplo:
<body>
<SendDocResult>
<id>F0010000000001</id>
<HasError>False</ HasError >
<erro>
<codigo></codigo>
<descricao> </descricao>
</erro>
</SendDocResult>
</body>
Web Method ConsultaDoc
El objetivo de este web Method es permitir realizar monitoreo o consulta de un documento enviado a TSS. El método se define de la siguiente forma:
Parámetros de entrada:
Parámetro | Tipo | Observación |
UserToken | String | Token Utilizado para TSS. |
IdEnt | String | Id de identificación de la Entidad registrada en TSS |
IdDoc | String | Idenficación del Documento en TSS |
Modelo | String | Modelo de Documento: S1- Factura Venta S4 – Nota Crédito S5 – Nota Débito S6 – Guia Remision S7- Comprobante Retención SD - Boleta de Venta SE – Comunicado de Baja |
Todos los parámetros de entrada son obligatorios.
Exemplo Petición:
<body>
<ConsultaDoc>
<userToken>String</userToken>
<entidade>String</entidade>
<modelo>String</modelo>
<idDoc>String</idInicial>
</ConsultaDoc>
</body>
Parámetros de salida:
Parámetro | Tipo | Observación |
IdDoc | String | Id de Documento Registrado en TSS |
Status | Integer | Estatus del documento en TSS : 1=Recibido TSS 4=Aguardando processamento 5=Documento Rechazado SUNAT 6=Documento Autorizado SUNAT 7=Documento Inhabilitado SUNAT |
Ambiente | Integer | Ambiente configurado para recepción de documentos. |
Código | String | Código de Error En caso de haberlo |
Mensaje | String | Mensaje de Retorno |
Recomendación | String | Recomendación emitida por la SUNAT |
FechaAut | Date | Fecha Autorizacion |
HrAut | String | Hora Autorizacion |
XML | Base64binary | XML del Documento si fue Autorizado. Para Comunicado de Baja, Retornar siempre XML |
Exemplo de Retorno:
<body>
< ConsultaDocResult>
<idDoc>String</idDoc>
<Status>boolean</Status>
<Ambiente>boolean</Ambiente>
<codigo>String</codigo>
<descripcion>String</descricao>
<recomendacion>String</recomendacion>
<FechaAut>Date</FechaAut>
<HrAut>String</HrAut>
<XML>Base64Binary</XML>
</ConsultaDocResult>
</body>
Proceso del Web Method
· Deberá realizar consulta a la tabla SPED050L para aquellos registros en dónde:
ID_ENT= IdEnt
NFE_ID = idDoc
MODELO=Modelo
AMBIENTE= Parámetro MV_AMBIENTE table SPED000L para ID_ENT= IdEnt
Si no encuentra registro, deberá generar SOAP FAULT indicando “007- Documento” + IdDoc + “No Encontrado.”
Si encuentra registro, deberá retornar :
IDDOC = SPED050L->NFE_ID
STATUS = SPED050L ->STATUS
AMBIENTE= SPED050L->AMBIENTE
CODIGO = SPED050L->ERRCODE
DESCRIPCION=SPED050L->ERRMSG
FECHAAUT=SPED050L->DATE_ENFE
HRAUT=SPED050L->TIME_ENFE
XML=SPED050L->XML_SIG
Ejemplo de retorno con Rechazo:
<body>
< ConsultaDocResult>
<idDoc>F001000000001</idDoc>
<Status>5</Status>
<Ambiente>2</Ambiente>
<codigo>21</codigo>
<descripcion>El documento afectado por la nota no existe </descricao>
<recomendacion>Revisar y re transmitir</recomendacion>
<FechaAut> </FechaAut>
<HrAut></HrAut>
<XML> </XML>
</ConsultaDocResult>
</body>
Ejemplo de retorno Positivo
<body>
< ConsultaDocResult>
<idDoc>F001000000002</idDoc>
<Status>6</Status>
<Ambiente>2</Ambiente>
<codigo>21</codigo>
<descripcion>SUNAT Aprobado </descricao>
<recomendacion>Distribuir Receptor</recomendacion>
<FechaAut>2017-05-22</FechaAut>
<HrAut>14:05:12</HrAut>
<XML> PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxEZWJpdE5vdGUgeG1sbnM9InVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkRlYml0Tm90ZS0yIiB4bWxuczpjYWM9InVybjpDQogICAgICAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5QRTwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT4NCiAgICAgICAgICAgIDwvY2FjOkNvdW50cnk- XML>
</ConsultaDocResult>
</body>
Rutina | Tipo de Operación | Opción de Menú | Reglas de Negocio |
TSSIntegSUNAT.prw | Creación | N/A | - |
TSSIntegSUNATWS.prw | Creación | N/A | - |
Tablas Utilizadas
Este documento es un material de especificación de los requisitos de innovación. Se trata de un contenido sumamente técnico. |
---|