RESÚMENES DIARIOS

Generación de resumen diario

La API de Resúmenes Diarios permite enviar múltiples comprobantes de boletas, notas de crédito y notas de débito a SUNAT en una sola operación. Esta funcionalidad es ideal para empresas que emiten muchas boletas diarias.

El proceso de envío del resumen diario se realiza en dos etapas:

  1. Generación y Envío: Se envían los datos del resumen a SUNAT y se obtiene un número de ticket
  2. Consulta de Estado: Se consulta el estado del procesamiento usando el ticket obtenido

Para la primera etapa (envío), debe enviar los datos en formato JSON a través de la siguiente URL del servicio:

IMPORTANTE: El resumen diario debe enviarse hasta las 12:00 p.m. del día siguiente hábil a la emisión de los comprobantes. Puede incluir boletas de venta (código 03), notas de crédito (código 07) y notas de débito (código 08) relacionadas a boletas.

                    
https://billing.codideep.com/dailysummary/send   
                    
                        
                        Copiado!
                

A continuación se mostrará un ejemplo de como se debe enviar el resumen diario directamente a SUNAT en formato JSON usando algunos lenguajes y herramientas. El sistema procesará automáticamente todos los comprobantes del día especificado.

INFO: Para poder realizar las peticiones al servidor necesita contar con las credenciales de acceso (username y password), ambos obtenidos al momento de adquirir el servicio.

                    
                    
        {
            "dto_rucEmpresaEf": "20123456789",
            "dto_razonSocialEmpresaEf": "CODIDEEP E.I.R.L.",
            "dto_userNameEf": "",
            "dto_passwordEf": "",
            "dto_serieNumeroComprobanteEf": "RC-20231123-001",
            "dto_fechaParaResumenEf": "2023-11-23",
            "dto_demoEf": true,
            "dto_listaComprobanteEf": [
                {
                    "documentTypeCode": "03",
                    "numeroRecibo": "B001-00000001",
                    "numeroReciboRelacionado": "",
                    "documentoCliente": "12345678",
                    "divisa": "Soles",
                    "total": 118.00,
                    "totalOutImpuestoGravado": 100.00,
                    "totalOutImpuestoInafecto": 0.00,
                    "totalOutImpuestoExonerado": 0.00,
                    "situacionImpuesto": "Afecto",
                    "isc": 0.00,
                    "igv": 18.00,
                    "impuestoAplicado": 18.00
                },
                {
                    "documentTypeCode": "07",
                    "numeroRecibo": "BC01-00000001",
                    "numeroReciboRelacionado": "B001-00000001",
                    "documentoCliente": "12345678",
                    "divisa": "Soles",
                    "total": 50.00,
                    "totalOutImpuestoGravado": 42.37,
                    "totalOutImpuestoInafecto": 0.00,
                    "totalOutImpuestoExonerado": 0.00,
                    "situacionImpuesto": "Afecto",
                    "isc": 0.00,
                    "igv": 7.63,
                    "impuestoAplicado": 18.00
                }
            ]
        }
                    
                    
        // Lista de comprobantes para el resumen diario
        $listaComprobanteEf = array();
        
        // Ejemplo de boleta de venta
        $objectTemp = new stdClass();
        $objectTemp->documentTypeCode = '03'; // Boleta de venta
        $objectTemp->numeroRecibo = 'B001-00000001';
        $objectTemp->numeroReciboRelacionado = '';
        $objectTemp->documentoCliente = '12345678';
        $objectTemp->divisa = 'Soles';
        $objectTemp->total = 118.00;
        $objectTemp->totalOutImpuestoGravado = 100.00;
        $objectTemp->totalOutImpuestoInafecto = 0.00;
        $objectTemp->totalOutImpuestoExonerado = 0.00;
        $objectTemp->situacionImpuesto = 'Afecto';
        $objectTemp->isc = 0.00;
        $objectTemp->igv = 18.00;
        $objectTemp->impuestoAplicado = 18.00;
        $listaComprobanteEf[] = $objectTemp;
        
        // Ejemplo de nota de crédito relacionada a boleta
        $objectTemp = new stdClass();
        $objectTemp->documentTypeCode = '07'; // Nota de crédito
        $objectTemp->numeroRecibo = 'BC01-00000001';
        $objectTemp->numeroReciboRelacionado = 'B001-00000001';
        $objectTemp->documentoCliente = '12345678';
        $objectTemp->divisa = 'Soles';
        $objectTemp->total = 50.00;
        $objectTemp->totalOutImpuestoGravado = 42.37;
        $objectTemp->totalOutImpuestoInafecto = 0.00;
        $objectTemp->totalOutImpuestoExonerado = 0.00;
        $objectTemp->situacionImpuesto = 'Afecto';
        $objectTemp->isc = 0.00;
        $objectTemp->igv = 7.63;
        $objectTemp->impuestoAplicado = 18.00;
        $listaComprobanteEf[] = $objectTemp;
        
        // Datos para el resumen diario
        $data = array(
            'dto.rucEmpresaEf' => '20123456789',
            'dto.razonSocialEmpresaEf' => 'CODIDEEP E.I.R.L.',
            'dto.userNameEf' => '',
            'dto.passwordEf' => '',
            'dto.serieNumeroComprobanteEf' => 'RC-20231123-001',
            'dto.fechaParaResumenEf' => '2023-11-23',
            'dto.demoEf' => true,
            'dto.listaComprobanteEf' => $listaComprobanteEf
        );

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, 'https://billing.codideep.com/dailysummary/send');
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
                    
                    
        // La URL de la API a la que se enviará la solicitud
        const url = 'https://billing.codideep.com/dailysummary/send';
        
        // Lista de comprobantes para el resumen diario
        const listaComprobanteEf = [
            // Boleta de venta
            {
                "documentTypeCode": "03",
                "numeroRecibo": "B001-00000001",
                "numeroReciboRelacionado": "",
                "documentoCliente": "12345678",
                "divisa": "Soles",
                "total": 118.00,
                "totalOutImpuestoGravado": 100.00,
                "totalOutImpuestoInafecto": 0.00,
                "totalOutImpuestoExonerado": 0.00,
                "situacionImpuesto": "Afecto",
                "isc": 0.00,
                "igv": 18.00,
                "impuestoAplicado": 18.00
            },
            // Nota de crédito relacionada a boleta
            {
                "documentTypeCode": "07",
                "numeroRecibo": "BC01-00000001",
                "numeroReciboRelacionado": "B001-00000001",
                "documentoCliente": "12345678",
                "divisa": "Soles",
                "total": 50.00,
                "totalOutImpuestoGravado": 42.37,
                "totalOutImpuestoInafecto": 0.00,
                "totalOutImpuestoExonerado": 0.00,
                "situacionImpuesto": "Afecto",
                "isc": 0.00,
                "igv": 7.63,
                "impuestoAplicado": 18.00
            }
        ];
        
        // Los datos del resumen diario en formato JSON
        const data = {
            "dto_rucEmpresaEf": "20123456789",
            "dto_razonSocialEmpresaEf": "CODIDEEP E.I.R.L.",
            "dto_userNameEf": "",
            "dto_passwordEf": "",
            "dto_serieNumeroComprobanteEf": "RC-20231123-001",
            "dto_fechaParaResumenEf": "2023-11-23",
            "dto_demoEf": true,
            "dto_listaComprobanteEf": listaComprobanteEf
        };
        
        // 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
import json

# La URL de la API a la que se enviará la solicitud
url = "https://billing.codideep.com/dailysummary/send"

# Lista de comprobantes para el resumen diario
lista_comprobante_ef = [
    # Boleta de venta
    {
        "documentTypeCode": "03",
        "numeroRecibo": "B001-00000001",
        "numeroReciboRelacionado": "",
        "documentoCliente": "12345678",
        "divisa": "Soles",
        "total": 118.00,
        "totalOutImpuestoGravado": 100.00,
        "totalOutImpuestoInafecto": 0.00,
        "totalOutImpuestoExonerado": 0.00,
        "situacionImpuesto": "Afecto",
        "isc": 0.00,
        "igv": 18.00,
        "impuestoAplicado": 18.00
    },
    # Nota de crédito relacionada a boleta
    {
        "documentTypeCode": "07",
        "numeroRecibo": "BC01-00000001",
        "numeroReciboRelacionado": "B001-00000001",
        "documentoCliente": "12345678",
        "divisa": "Soles",
        "total": 50.00,
        "totalOutImpuestoGravado": 42.37,
        "totalOutImpuestoInafecto": 0.00,
        "totalOutImpuestoExonerado": 0.00,
        "situacionImpuesto": "Afecto",
        "isc": 0.00,
        "igv": 7.63,
        "impuestoAplicado": 18.00
    }
]

# Los datos del resumen diario en formato JSON
data = {
    "dto_rucEmpresaEf": "20123456789",
    "dto_razonSocialEmpresaEf": "CODIDEEP E.I.R.L.",
    "dto_userNameEf": "",
    "dto_passwordEf": "",
    "dto_serieNumeroComprobanteEf": "RC-20231123-001",
    "dto_fechaParaResumenEf": "2023-11-23",
    "dto_demoEf": True,
    "dto_listaComprobanteEf": lista_comprobante_ef
}

# Cabeceras de la solicitud
headers = {
    'Content-Type': 'application/json'
}

# Realiza la solicitud POST y obtiene la respuesta
response = requests.post(url, data=json.dumps(data), headers=headers)

# Comprueba si la solicitud fue exitosa
if response.status_code == 200:
    # Imprime la respuesta en formato JSON
    print(response.json())
else:
    # Si hay un error, imprime el código de estado
    print(f"Error: {response.status_code}")
    print(response.text)
                    
                        
                    Copiado!
                

Si los datos enviados son correctos, se le enviará un objeto con el mensaje de operación realizada correctamente, como se muestra a continuación:

                    
        {
            "mo": {
                "listMessage": [
                    "Operación realizada correctamente."
                ],
                "type": "success"
            },
            "dto": {
                "hash": "xmJWd3Cu2dc0GTRtkWNOW05gU+Y="
            },
            "listDto": null
        }
                    
                

Envío del XML a SUNAT

Una vez que has generado tu resumen diario en formato XML y se ha enviado a través del sistema de la API, estamos listos para poder emitir nuestro resumen a la SUNAT. El siguiente paso una vez enviado nuestro resumen sería esperar a que la SUNAT procese tu documento y nos envíe una respuesta. Nosotros como intermediarios recibiremos el CDR comprimido y se le enviará a usted la respuesta que fue emitida por parte de SUNAT. La respuesta puede ser positiva, lo que significa que la SUNAT ha aceptado tu resumen y lo ha registrado en su sistema, o negativa, lo que significa que la SUNAT ha encontrado algún problema con tu resumen y no lo ha aceptado.

El endpoint para este segundo proceso es el siguiente:

                
https://billing.codideep.com/dailysummary/send  
                
                    
                    Copiado!
            

Ahora que ya tienes el XML con los datos de tu resumen diario generado en nuestro sistema, puedes enviar los datos a SUNAT, para ello debes enviar un objeto JSON con los siguientes datos:

                    
                    
            {
                "dto_codigoUnicoVenta" : 1,
                "dto_rucEmpresaEf" :  "00000000000",
                "dto_userNameEf": "",
                "dto_passwordEf": "",
                "dto_correlativoResumenEf": "RC-20231123-001",
                "dto_demoEf": true
            }                  
                    
                    
            // Inicializamos el manejador de cURL
            $curl = curl_init();
            
            // Establecemos la URL a la que se realizará la petición
            curl_setopt($curl, CURLOPT_URL, 'https://billing.codideep.com/dailysummary/send');
            
            // Establecemos el método de petición a POST
            curl_setopt($curl, CURLOPT_POST, 1);
            
            // Establecemos los datos a enviar en la petición
            $data =
            [
                "dto_codigoUnicoVenta" => 1,
                "dto_rucEmpresaEf" =>  "00000000000",
                "dto_userNameEf"=> "",
                "dto_passwordEf"=> "",
                "dto_correlativoResumenEf"=> "RC-20231123-001",
                "dto_demoEf"=> true
            ];
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
            
            // Ejecutamos la petición y recogemos la respuesta
            $response = curl_exec($curl);
            
            // Cerramos el manejador de cURL
            curl_close($curl);
            
            // Mostramos la respuesta
            echo $response;
                    
                    
        // La URL de la API a la que se enviará la solicitud
        const url = 'https://billing.codideep.com/dailysummary/send';
        // Los datos del resumen diario en formato JSON
        const data = {
            "dto_codigoUnicoVenta" : 1,
            "dto_rucEmpresaEf" :  "00000000000",
            "dto_userNameEf": "",
            "dto_passwordEf": "",
            "dto_correlativoResumenEf": "RC-20231123-001",
            "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_correlativoResumenEf": "RC-20231123-001",
            "dto_demoEf": true
        }
        
        # Realizamos la petición POST a la URL especificada
        response = requests.post('https://billing.codideep.com/dailysummary/send', data=data)
        
        # Imprimimos la respuesta
        print(response.text)
                    
                        
                    Copiado!
                

Como respuesta del servidor en caso de que la petición sea satisfactoria, se obtendrá un JSON con la siguiente estructura:

                    
            {
                "mo": {
                    "listMessage": [
                        "Operación realizada correctamente."
                    ],
                    "type": "success"
                },
                "dto": {
                    "codigoCdr": "0",
                    "estadoEnvioSunat": "Aprobado",
                    "descripcionCdr": "El Resumen Diario RC-20231123-001, ha sido aceptado",
                    "ticket": "123456789012345"
                },
                "listDto": null
            }
                    
                

Consultar Estado del Resumen

Después de enviar el resumen diario, puedes consultar su estado de procesamiento en SUNAT. Usa el mismo identificador del resumen para verificar si fue aceptado o rechazado.

                
https://billing.codideep.com/dailysummary/getstatus  
                
                    
                    Copiado!
            

Envía los mismos datos de autenticación y el identificador del resumen:

                    
                    
            {
                "dto_rucEmpresaEf": "20123456789",
                "dto_razonSocialEmpresaEf": "CODIDEEP E.I.R.L.",
                "dto_userNameEf": "",
                "dto_passwordEf": "",
                "dto_serieNumeroComprobanteEf": "RC-20231123-001",
                "dto_demoEf": true
            }
                    
                    
            $data = array(
                "dto_rucEmpresaEf" => "20123456789",
                "dto_razonSocialEmpresaEf" => "CODIDEEP E.I.R.L.",
                "dto_userNameEf" => "",
                "dto_passwordEf" => "",
                "dto_serieNumeroComprobanteEf" => "RC-20231123-001",
                "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/dailysummary/getstatus", false, $context);
            echo $result;
                    
                    
        // La URL de la API a la que se enviará la solicitud
        const url = 'https://billing.codideep.com/dailysummary/getstatus';
        // Los datos para consultar el estado
        const data = {
            "dto_rucEmpresaEf": "20123456789",
            "dto_razonSocialEmpresaEf": "CODIDEEP E.I.R.L.",
            "dto_userNameEf": "",
            "dto_passwordEf": "",
            "dto_serieNumeroComprobanteEf": "RC-20231123-001",
            "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_rucEmpresaEf": "20123456789",
            "dto_razonSocialEmpresaEf": "CODIDEEP E.I.R.L.",
            "dto_userNameEf": "",
            "dto_passwordEf": "",
            "dto_serieNumeroComprobanteEf": "RC-20231123-001",
            "dto_demoEf": true
        }
        
        # Realizamos la petición POST a la URL especificada
        response = requests.post('https://billing.codideep.com/dailysummary/getstatus', data=data)
        
        # Imprimimos la respuesta
        print(response.text)
                    
                        
                    Copiado!
                

La API te devolverá el estado actual del resumen diario:

                    
            {
                "mo": {
                    "listMessage": [
                        "Consulta realizada correctamente."
                    ],
                    "type": "success"
                },
                "dto": {
                    "codigoCdr": "0",
                    "estadoEnvioSunat": "Aceptado",
                    "descripcionCdr": "El Resumen Diario ha sido aceptado",
                    "estadoProceso": "Procesado"
                },
                "listDto": null
            }