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
                    
                        
                        Copiado!
                

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)
                        
                            
                        Copiado!
                    

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
                
                    
                    Copiado!
            

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)
                
                
                Copiado!
            

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
                }