NOTA DE CRÉDITO
Generación de nota de crédito
Ahora que ya tienes generado una factura que ha sido aceptada por la SUNAT y quieres realizar acciones como ajustar el saldo, corregir errores en la factura o incluso cancelar la misma factura; puedes usar las notas de crédito para realizar estas acciones. El flujo de este proceso es el mismo como cuando generas una factura(se crea el xml en servidor para posteriormente ser enviado a SUNAT).
El endpoint para este proceso es el siguiente:
https://billing.codideep.com/creditnote/generatexml
Ahora se mostrará una serie de ejemplos de como se debe enviar el JSON para generar el XML de la nota de crédito en el servidor de la API.:
{ "dto_codigoUnicoVenta": 1, "dto_serieNumeroComprobanteEf": "F001-00000001", "dto_codigoMotivoNota": "01", "dto_descripcionMotivoNota": "Descuento del total debido a un error de marca de producto", "dto_serieNumeroComprobanteVentaEf": "F001-00000001", "dto_rucEmpresaEf": "00000000000", "dto_razonSocialEmisorEf": "CODIDEEP E.I.R.L.", "dto_userNameEf": "", "dto_passwordEf": "", "dto_documentoClienteEf": "10707485863", "dto_denominacionClienteEf": "Kevin Arnold Arias Figueroa", "dto_divisaEf": "Soles", "dto_totalNotaEf": 118.00, "dto_subTotalNotaEf": 100, "dto_totalImpuestoAplicadoEf": 18, "dto_listaProductoEf": [ { "cantidadProductoEf": 1, "precioTotalVentaProductoEf": 118, "subTotalVentaProductoEf": 100, "impuestoInafectoVentaProductoEf": 0, "impuestoAplicadoVentaProductoEf": 18, "precioUnitarioVentaProductoEf": 118, "subTotalPrecioUnitarioVentaProductoEf": 100, "situacionImpuestoProductoEf": "Afecto", "porcentajeTributacionProductoEf": 18 } ] }
$data = array( "dto_codigoUnicoVenta" => 1, "dto_serieNumeroComprobanteEf" => "F001-00000001", "dto_codigoMotivoNota" => "01", "dto_descripcionMotivoNota" => "Descuento del total debido a un error de marca de producto", "dto_serieNumeroComprobanteVentaEf" => "F001-00000001", "dto_rucEmpresaEf" => "00000000000", "dto_razonSocialEmisorEf" => "CODIDEEP E.I.R.L.", "dto_userNameEf" => "",//USUARIO Y CONTRASEÑA DE LA API "dto_passwordEf" => "", "dto_documentoClienteEf" => "10707485863", "dto_denominacionClienteEf" => "Kevin Arnold Arias Figueroa", "dto_divisaEf" => "Soles", "dto_totalNotaEf" => 118.00, "dto_subTotalNotaEf" => 100, "dto_totalImpuestoAplicadoEf" => 18, "dto_listaProductoEf" => array( array( "cantidadProductoEf" => 1, "precioTotalVentaProductoEf" => 118, "subTotalVentaProductoEf" => 100, "impuestoInafectoVentaProductoEf" => 0, "impuestoAplicadoVentaProductoEf" => 18, "precioUnitarioVentaProductoEf" => 118, "subTotalPrecioUnitarioVentaProductoEf" => 100, "situacionImpuestoProductoEf" => "Afecto", "porcentajeTributacionProductoEf" => 18 ) ) ); $options = array( 'http' => array( 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'method' => 'POST', 'content' => http_build_query($data) ) ); $context = stream_context_create($options); $result = file_get_contents("https://billing.codideep.com/creditnote/generatexml", false, $context); echo $result;
// La URL de la API a la que se enviará la solicitud const url = 'https://billing.codideep.com/creditnote/generatexml'; // Los datos de la factura en formato JSON const data = { "dto_codigoUnicoVenta": 1, "dto_serieNumeroComprobanteEf": "F001-00000001", "dto_codigoMotivoNota": "01", "dto_descripcionMotivoNota": "Descuento del total debido a un error de marca de producto", "dto_serieNumeroComprobanteVentaEf": "F001-00000001", "dto_rucEmpresaEf": "00000000000", "dto_razonSocialEmisorEf": "CODIDEEP E.I.R.L.", "dto_userNameEf": "",//usuario y contrasña de la empresa "dto_passwordEf": "",//usuario y contrasña de la empresa "dto_documentoClienteEf": "10707485863", "dto_denominacionClienteEf": "Kevin Arnold Arias Figueroa", "dto_divisaEf": "Soles", "dto_totalNotaEf": 118.00, "dto_subTotalNotaEf": 100, "dto_totalImpuestoAplicadoEf": 18, "dto_listaProductoEf": [ { "cantidadProductoEf": 1, "precioTotalVentaProductoEf": 118, "subTotalVentaProductoEf": 100, "impuestoInafectoVentaProductoEf": 0, "impuestoAplicadoVentaProductoEf": 18, "precioUnitarioVentaProductoEf": 118, "subTotalPrecioUnitarioVentaProductoEf": 100, "situacionImpuestoProductoEf": "Afecto", "porcentajeTributacionProductoEf": 18 } ] }; // Opciones de la solicitud, incluyendo el método y el cuerpo const options = { method: 'POST', headers: { 'Content-Type': 'application/json' }, // Convierte el objeto a una cadena JSON body: JSON.stringify(data) }; // Envia la solicitud y maneja la respuesta fetch(url, options) .then(response => response.json()) .then(data => { // Imprime la respuesta en la consola console.log(data); }) .catch(error => { // Si ocurre un error, lo muestra en la consola console.error(error); });
import requests # Establecemos los datos a enviar en la petición data = { "dto_codigoUnicoVenta": 1, "dto_serieNumeroComprobanteEf": "F001-00000001", "dto_codigoMotivoNota": "01", "dto_descripcionMotivoNota": "Descuento del total debido a un error de marca de producto", "dto_serieNumeroComprobanteVentaEf": "F001-00000001", "dto_rucEmpresaEf": "00000000000", "dto_razonSocialEmisorEf": "CODIDEEP E.I.R.L.", "dto_userNameEf": "",#usuario y contrasña de la empresa "dto_passwordEf": "",#usuario y contrasña de la empresa "dto_documentoClienteEf": "10707485863", "dto_denominacionClienteEf": "Kevin Arnold Arias Figueroa", "dto_divisaEf": "Soles", "dto_totalNotaEf": 118.00, "dto_subTotalNotaEf": 100, "dto_totalImpuestoAplicadoEf": 18, "dto_listaProductoEf": [ { "cantidadProductoEf": 1, "precioTotalVentaProductoEf": 118, "subTotalVentaProductoEf": 100, "impuestoInafectoVentaProductoEf": 0, "impuestoAplicadoVentaProductoEf": 18, "precioUnitarioVentaProductoEf": 118, "subTotalPrecioUnitarioVentaProductoEf": 100, "situacionImpuestoProductoEf": "Afecto", "porcentajeTributacionProductoEf": 18 } ] } # Realizamos la petición POST a la URL especificada response = requests.post('https://billing.codideep.com/creditnote/send', data=data) # Imprimimos la respuesta print(response.text)
Y como respuesta por parte del servidor en caso de ser correcta será el siguiente:
{
"mo": {
"listMessage": [
"Operación realizada correctamente."
],
"type": "success"
},
"dto": {
"hash": "fmO6ztHsLmxRDR0NoztIzGw3Qd4="
},
"listDto": null
}
Envío de XML a SUNAT
Ahora que ya generó la nota de crédito en formato XML dentro de nuestro sistema, puedes proceder a enviarlo a SUNAT para que sea procesado y aceptado.
Para consumir de este servicio se tiene el siguiente endpoint:
https://billing.codideep.com/creditnote/send
Y como parte del cuerpo del JSON que se va enviar se debe seguir el siguiente formato:
{ "dto_codigoUnicoVenta" : 1, "dto_rucEmpresaEf" : "00000000000", "dto_userNameEf": "", "dto_passwordEf": "", "dto_serieNumeroComprobanteEf":"F001-00000001" , "dto_demoEf": true }
$data = array( "dto_codigoUnicoVenta" => 1, "dto_rucEmpresaEf" => "00000000000", "dto_userNameEf"=> "", "dto_passwordEf"=> "", "dto_serieNumeroComprobanteEf"=>"F001-00000001" , "dto_demoEf"=> true ); $options = array( 'http' => array( 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'method' => 'POST', 'content' => http_build_query($data) ) ); $context = stream_context_create($options); $result = file_get_contents("https://billing.codideep.com/creditnote/send", false, $context); echo $result;
// La URL de la API a la que se enviará la solicitud const url = 'https://billing.codideep.com/creditnote/send'; // Los datos de la nota de crédito en formato JSON const data = { "dto_codigoUnicoVenta" : 1, "dto_rucEmpresaEf" : "00000000000", "dto_userNameEf": "", "dto_passwordEf": "", "dto_serieNumeroComprobanteEf":"F001-00000001" , "dto_demoEf": true }; // Opciones de la solicitud, incluyendo el método y el cuerpo const options = { method: 'POST', headers: { 'Content-Type': 'application/json' }, // Convierte el objeto a una cadena JSON body: JSON.stringify(data) }; // Envia la solicitud y maneja la respuesta fetch(url, options) .then(response => response.json()) .then(data => { // Imprime la respuesta en la consola console.log(data); }) .catch(error => { // Si ocurre un error, lo muestra en la consola console.error(error); });
import requests # Establecemos los datos a enviar en la petición data = { "dto_codigoUnicoVenta" : 1, "dto_rucEmpresaEf" : "00000000000", "dto_userNameEf": "", "dto_passwordEf": "", "dto_serieNumeroComprobanteEf":"F001-00000001" , "dto_demoEf": true } # Realizamos la petición POST a la URL especificada response = requests.post('https://billing.codideep.com/creditnote/send', data=data) # Imprimimos la respuesta print(response.text)
Una vez que haya enviado la nota de crédito al servicio de la API y que esta a su vez realice el proceso de envío a la SUNAT, se nos devolverá un JSON con la respuesta de la SUNAT, el cual si todo ha salido bien se le mostrará una respuesta de estado correcto de la siguiente forma:
{
"mo": {
"listMessage": [
"Operación realizada correctamente."
],
"type": "success"
},
"dto": {
"codigoCdr": "0",
"estadoEnvioSunat": "Aprobado",
"descripcionCdr": "La Nota de Credito numero F001-00000001, ha sido aceptada"
},
"listDto": null
}