SUNAT Web Services
Libreria para realizar envíos de comprobantes electrónicos a los servicios web de la SUNAT y/o OSCE de acuerdo a lo especificado por la SUNAT:
Inicio rápido
Incluir la última version de la libreria. Si utiliza maven agrege las siguientes lineas al archivo pom.xml:
<dependency>
<groupId>io.github.project-openubl</groupId>
<artifactId>xsender</artifactId>
<version>3.0.1.Final</version>
</dependency>
Puede ver la lista de todos las disponibles aqui.
BillService:sendBill
Utilizado para enviar:
- Boletas y Facturas.
- Notas de Crédito.
- Notas de Débito.
- Guias de Remisión.
- Percepciones.
- Retenciones.
ServiceConfig config = new ServiceConfig.Builder()
.url("https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService")
.username("12345678959MODDATOS")
.password("MODDATOS")
.build();
File file = new File("../../12345678959-01-F001-00000001.xml");
BillServiceModel result = BillServiceManager.sendBill(file, config);
Nota: El valor de URL dependerá de qué tipo de documento está intentando enviar.
BillService:sendSummary
Utilizado para enviar:
- Baja.
- Resumen diario.
ServiceConfig config = new ServiceConfig.Builder()
.url("https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService")
.username("12345678959MODDATOS")
.password("MODDATOS")
.build();
File file = new File(".../../12345678959-RA-20180316-00001.xml");
BillServiceModel result = BillServiceManager.sendSummary(file, config);
Nota: El resultado de enviar una baja o resumen diario es un número de ticket. En caso desee consultar el ticket al mismo tiempo en el que se envía el comprobante, entonces deberás de usar:
ServiceConfig config;
File file;
Map<String, Object> params; // Datos que se enviarán al callback.
long delay; // Cantidad de milisegundos a esperar antes de consultar el ticket.
BillServiceManager.sendSummary(
file,
config,
params,
new BillServiceCallback() {
@Override
public void onSuccess(Map<String, Object> params, int code, String description, byte[] cdr) { }
@Override
public void onError(Map<String, Object> params, int code, String description, byte[] cdr) { }
@Override
public void onProcess(Map<String, Object> params, int code, String description) { }
@Override
public void onException(Map<String, Object> params, int code, String description) { }
@Override
public void onThrownException(Map<String, Object> params, SOAPFaultException exception) { }
}, delay);
BillService:getStatus
Utilizado para consultar tickets:
ServiceConfig config = new ServiceConfig.Builder()
.url("https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService")
.username("12345678959MODDATOS")
.password("MODDATOS")
.build();
BillServiceModel result = BillServiceManager.getStatus("miTicket", config);
BillConsultService:getStatus
ServiceConfig config = new ServiceConfig.Builder()
.url(URL_CONSULTA)
.username(USERNAME)
.passwod(PASSWORD)
.build();
BillConsultBean consult = new BillConsultBean.Builder()
.ruc("1234567894")
.tipo("01")
.serie("F001")
.numero(102)
.build();
service.sunat.gob.pe.billconsultservice.StatusResponse response = BillConsultServiceManager.getStatus(consult, config);
BillConsultService:getStatusCdr
ServiceConfig config = new ServiceConfig.Builder()
.url(URL_CONSULTA)
.username(USERNAME)
.passwod(PASSWORD)
.build();
BillConsultBean consult = new BillConsultBean.Builder()
.ruc("1234567894")
.tipo("01")
.serie("F001")
.numero(102)
.build();
service.sunat.gob.pe.billconsultservice.StatusResponse response = BillConsultServiceManager.getStatusCdr(config, consult);
BillValidService:getStatus
Verificar la autenticidad de un archivo XMl:
File file = new File("../folder/F001-00005954.xml");
ServiceConfig config = new ServiceConfig.Builder()
.url("https://e-factura.sunat.gob.pe/ol-it-wsconsvalidcpe/billValidService")
.username(USERNAME)
.passwod(PASSWORD)
.build();
StatusResponse status = BillValidServiceManager.getStatus(file, config);
Sunat Web Services
El conjunto de Web Services que la SUNAT publica puede ser encontrada aqui.
Listado de errores CPE SUNAT
La SUNAT clasifica los errores en tres tipos: Excepciones, Rechazo, Observaciones.
Los códigos se han clasificado de acuerdo al tipo de error:
- Del 0100 al 1999 Excepciones
- Del 2000 al 3999 Errores que generan rechazo
- Del 4000 en adelante Observaciones
De acuerdo al tipo de error que se genera, el sistema responde de manera distinta al emisor. Las respuestas son:
- Si es una EXCEPCION, el sistema responde como una excepción del programa, es decir, retorna el código de error con su descripción.
- Si hay un ERROR QUE GENERA RECHAZO, el sistema genera una constancia de recepción (CDR) con estado rechazada, indicando que el comprobante no ha sido registrado en SUNAT por tener errores.
- Si hay OBSERVACIONES, el sistema genera una constancia de recepción (CDR) con estado aceptada con advertencias, indicando que el comprobante ha sido correctamente enviado y registrado en SUNAT. Las advertencias se muestran en la constancia de recepción.
- Finalmente, si no hay ningún tipo de error, se genera una constancia de recepción (CDR) aceptada, indicando que el comprobante ha sido correctamente enviado y registrado en SUNAT.
Nota: La lista de errores puede ser descargada aqui.
Control de errores SUNAT
Cuando una petición a BillService devuelve algun error es posible controlar esos errores haciendo uso de la interfaz:
interface ErrorBillServiceProviderFactory { ....}
Nota: Se recorrerá todos las instancias que implementen la interfaz ErrorBillServiceProviderFactory y se detendrá el recorrido cuando alguna instance devuelva un valor diferente a null.
BillServiceProviderFactory por defecto
CLASE | DESCRIPCION | ACTIVO POR DEFECTO |
---|---|---|
ErrorExcepcionBillServiceProviderFactory | Errores entre 100 y 1999 inclusive | SI |
ErrorRechazoBillServiceProviderFactory | Errores entre 2000 y 3999 inclusive | SI |
ErrorObservacionesBillServiceProviderFactory | Errores mayores a 4000 | SI |
Error2324BillServiceProviderFactory | Error para el error 2324. Pone como aceptado un comprobante que ya fue comunicado como baja anteriormente | SI |
Error1033BillServiceProviderFactory | Error para el error 1033. Permite recuperar el cdr de un comprobante que ya fue enviado anteriormente | NO |
Extender la funcionalidad de acuerdo a tus necesidades
En caso desees controlar los errores de la SUNAT deberás seguir los siguientes pasos:
- Crear una clase que implemente la interfaz ErrorBillServiceProviderFactory:
public class MyErrorHandlerFactory implements ErrorBillServiceProviderFactory { ... }
- Crear el archivo:
META-INF/services/ErrorBillServiceProviderFactory
- Dentro del archivo creado en el paso anterior se deberá añadir una linea indicando el nombre de la clase (incluyendo el paquete en el que está ubicado) creada en el paso 1:
mipaquete.MyErrorHandlerFactory