roshkadev / rshk-jsifenlib

Librería de código abierto para interactuar con SIFEN de la SET.
100 stars 43 forks source link

Xml mal formado al enviar evento del receptor: Notificación de Recepción #11

Closed hriveros22 closed 2 years ago

hriveros22 commented 2 years ago

Al intentar enviar el evento de notificación de recepción del receptor, el ws de la SET devuelve la respuesta bruta: <?xml version="1.0" encoding="UTF-8"?>

2022-06-27T10:36:39-04:00Rechazado0160XML Mal Formado. En el server log: 10:36:39,929 WARNING [class com.roshka.sifen.internal.request.ReqRecEventoDe] (default task-1) El nombre del nodo [rRetEnviDe] no coincide con el nombre esperado [rRetEnviEventoDe] Por lo que puedo notar, en el xml debe formarse el tag con el nombre: rRetEnviEventoDe, pero se está formando con el nombre: rRetEnviDe Para los demas eventos del receptor no tuve inconvenientes y pude enviarlos sin problemas. Estoy usando la ultima versión de la api: rshk-jsifenlib 0.2.1 Comparto el cdc de la FE que estoy utilizando: 01800034686001001000004322022062417878047569
martinzarza commented 2 years ago

Gracias @hriveros22 por el aviso. Vamos a estar verificando y corrigiendo el problema lo más rápido posible.

martinzarza commented 2 years ago

@hriveros22 Podrías compartir el código que estás utilizando para el evento con el que tenés el error?

hriveros22 commented 2 years ago

Si, a continuación:

//metodo interno para cargar los datos del receptor en el objeto DatosReceptor DatosReceptor recep = sifenDAO.obtenerReceptorFacele(idDocumento); EventosDE evento = new EventosDE(); TrGesEve rGesEve = new TrGesEve(); Date fecha = sifenDAO.fechaActual(); rGesEve.setdFecFirma(fecha.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); rGesEve.setId(sifenDAO.obtenerSecuenciaEventoReceptor().toString()); rGesEve.setgGroupTiEvt(new TgGroupTiEvt());
TrGeVeNotRec notifRecep = new TrGeVeNotRec(); notifRecep.setId(cdc); notifRecep.setdFecEmi(recep.getFechaEmisionDE().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); notifRecep.setdFecRecep(fecha.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); notifRecep.setiTipRec(recep.getTipoDocReceptor().equalsIgnoreCase("RUC")? TiNatRec.CONTRIBUYENTE:TiNatRec.NO_CONTRIBUYENTE); notifRecep.setdNomRec(recep.getNombreRazonSocialReceptor()); if(recep.getTipoDocReceptor().equalsIgnoreCase("RUC")){ notifRecep.setdRucRec(recep.getNroDocReceptor().substring(0, recep.getNroDocReceptor().length()-2)); notifRecep.setdDVRec(recep.getNroDocReceptor().substring(recep.getNroDocReceptor().length()-1, recep.getNroDocReceptor().length())); }else{
notifRecep.setdNumID(recep.getNroDocReceptor().replaceAll("-", "")); if(recep.getTipoDocReceptor().equalsIgnoreCase("CI")) notifRecep.setdTipIDRec(TiTipDocRec.CEDULA_PARAGUAYA); else if(recep.getTipoDocReceptor().equalsIgnoreCase("PAS")) notifRecep.setdTipIDRec(TiTipDocRec.PASAPORTE); else if(recep.getTipoDocReceptor().equalsIgnoreCase("DIE")) notifRecep.setdTipIDRec(TiTipDocRec.CEDULA_EXTRANJERA); else notifRecep.setdTipIDRec(TiTipDocRec.OTRO); }
rGesEve.getgGroupTiEvt().setrGeVeNotRec(notifRecep); evento.setrGesEveList(new ArrayList()); evento.getrGesEveList().add(rGesEve); RespuestaRecepcionEvento respuesta = Sifen.recepcionEvento(evento);

if(!((Integer)respuesta.getCodigoEstado()).toString().equalsIgnoreCase("200")) throw new ServiceException(ErrorCode.VALIDATION_FAILED, "sifen.eventoreceptor.rechazado", respuesta.getRespuestaBruta());

martinzarza commented 2 years ago

Verifico que no se está seteando un valor al campo obligatorio dTotalGs en el evento notifRecep. Podrías agregar ese valor y probar de vuelta? Ya que el resto de cosas están en orden.

image

hriveros22 commented 2 years ago

efectivamente, era por el campo dTotalGs, solucionado!

martinzarza commented 2 years ago

Perfecto, cierro el issue. Cualquier otra consulta, podés crear otro sin problema.