[Ejemplos](https://fe.kembec.com/ejemplos/) / Resumen diario (RC) / Caso 17 de 21

# Resumen diario que anula una boleta

Anula la boleta B001-2 del [resumen de dos boletas](https://fe.kembec.com/ejemplos/rc-receipts-added/): la misma línea, con los mismos importes, y estado 3 en lugar de 1.

Firma este JSON con el certificado de prueba y tu `DigestValue` tiene que ser `K1ZRusF6NsOrJPZsjMDz3MEfo4A=`. El sello es ese valor, dibujado.

Los tres archivos, en el repositorio: [el JSON de entrada](https://github.com/Kembec/facturacion-electronica-sunat-sdk/blob/v0.1.0-beta.5/fixtures/rc-receipt-void.json), [el XML sin firmar](https://github.com/Kembec/facturacion-electronica-sunat-sdk/blob/v0.1.0-beta.5/tests/vectors/rc-receipt-void.unsigned.xml) y [el XML firmado](https://github.com/Kembec/facturacion-electronica-sunat-sdk/blob/v0.1.0-beta.5/tests/vectors/rc-receipt-void.signed.xml).

A diferencia de la factura, no vuelve con la CDR: `sunat-sdk summary` devuelve un ticket, y con `sunat-sdk ticket` preguntas hasta que la traiga; con 98 se pregunta otra vez, no se reenvía. Desde PHP, con `summary()` y `ticket()` ([Paso a producción](https://fe.kembec.com/empezar/paso-a-produccion/#respuestas-de-la-sunat)).

## Entrada en JSON

`fixtures/rc-receipt-void.json`:

```json
{
  "kind": "summary",
  "number": "3",
  "generation_date": "2026-10-15",
  "reference_date": "2026-10-14",
  "currency": "PEN",
  "issuer": {
    "ruc": "20123456789",
    "legal_name": "EMPRESA DEMO ORACULO S.A.C.",
    "trade_name": "DEMO ORACULO",
    "email": "facturacion@example.com",
    "telephone": "014000000",
    "address": {
      "ubigeo": "150101",
      "country_code": "PE",
      "department": "LIMA",
      "province": "LIMA",
      "district": "LIMA",
      "urbanization": "-",
      "street": "AV. EJEMPLO 123",
      "establishment_code": "0000"
    }
  },
  "lines": [
    {
      "document_type": "03",
      "document_number": "B001-2",
      "status": "3",
      "customer_document_type": "1",
      "customer_document_number": "87654321",
      "total": "59.00",
      "taxed": "50.00",
      "igv": "9.00"
    }
  ]
}
```

## XML sin firmar

`tests/vectors/rc-receipt-void.unsigned.xml`:

```xml
<?xml version="1.0" encoding="utf-8"?><SummaryDocuments xmlns="urn:sunat:names:specification:ubl:peru:schema:xsd:SummaryDocuments-1" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1"><ext:UBLExtensions><ext:UBLExtension><ext:ExtensionContent/></ext:UBLExtension></ext:UBLExtensions><cbc:UBLVersionID>2.0</cbc:UBLVersionID><cbc:CustomizationID>1.1</cbc:CustomizationID><cbc:ID>RC-20261015-3</cbc:ID><cbc:ReferenceDate>2026-10-14</cbc:ReferenceDate><cbc:IssueDate>2026-10-15</cbc:IssueDate><cac:Signature><cbc:ID>IDSignKG</cbc:ID><cac:SignatoryParty><cac:PartyIdentification><cbc:ID>20123456789</cbc:ID></cac:PartyIdentification><cac:PartyName><cbc:Name><![CDATA[EMPRESA DEMO ORACULO S.A.C.]]></cbc:Name></cac:PartyName></cac:SignatoryParty><cac:DigitalSignatureAttachment><cac:ExternalReference><cbc:URI>#signatureKG</cbc:URI></cac:ExternalReference></cac:DigitalSignatureAttachment></cac:Signature><cac:AccountingSupplierParty><cbc:CustomerAssignedAccountID>20123456789</cbc:CustomerAssignedAccountID><cbc:AdditionalAccountID>6</cbc:AdditionalAccountID><cac:Party><cac:PartyLegalEntity><cbc:RegistrationName><![CDATA[EMPRESA DEMO ORACULO S.A.C.]]></cbc:RegistrationName></cac:PartyLegalEntity></cac:Party></cac:AccountingSupplierParty><sac:SummaryDocumentsLine><cbc:LineID>1</cbc:LineID><cbc:DocumentTypeCode>03</cbc:DocumentTypeCode><cbc:ID>B001-2</cbc:ID><cac:AccountingCustomerParty><cbc:CustomerAssignedAccountID>87654321</cbc:CustomerAssignedAccountID><cbc:AdditionalAccountID>1</cbc:AdditionalAccountID></cac:AccountingCustomerParty><cac:Status><cbc:ConditionCode>3</cbc:ConditionCode></cac:Status><sac:TotalAmount currencyID="PEN">59.00</sac:TotalAmount><sac:BillingPayment><cbc:PaidAmount currencyID="PEN">50.00</cbc:PaidAmount><cbc:InstructionID>01</cbc:InstructionID></sac:BillingPayment><cac:TaxTotal><cbc:TaxAmount currencyID="PEN">9.00</cbc:TaxAmount><cac:TaxSubtotal><cbc:TaxAmount currencyID="PEN">9.00</cbc:TaxAmount><cac:TaxCategory><cac:TaxScheme><cbc:ID>1000</cbc:ID><cbc:Name>IGV</cbc:Name><cbc:TaxTypeCode>VAT</cbc:TaxTypeCode></cac:TaxScheme></cac:TaxCategory></cac:TaxSubtotal></cac:TaxTotal></sac:SummaryDocumentsLine></SummaryDocuments>
```

## Firma

Firmado con el certificado de prueba del SDK, el que baja la [guía de inicio](https://fe.kembec.com/empezar/guia-de-inicio/).

K1ZRusF6NsOrJPZsjMDz3MEfo4A=

Si tu `DigestValue` es este, tu XML es el mismo que el del SDK. Con el certificado de prueba el `SignatureValue` también coincide; con el tuyo cambia, porque depende de tu clave.

- **DigestValue**: `K1ZRusF6NsOrJPZsjMDz3MEfo4A=`
- **SignatureValue**: `1DMtqqf07UoqlApGJHVbj4Myrc7JyHobudNKX/qFrWduqyftDgq7JrnrCKSGHUa5DEGG7EskmO5Ku2nTWvdivZ43BU9rmNPm7mAQT2wYOpnVAhw8R0UqvajXqX9ejgNB6mc0Gz2a/4wxs4k9M/WNbzbmsuf4vUCqqobZ0qr0sU55H9zUkQrdpsklmC+P8SseA0ROOekDp6UKoUgu1VTUQLEmQDOojI7ZvydaxepdcyWOCZo4L6qUo4PlCeX2yUFC893MUV/k7HJheP6PcS2uHGCTAY9ZahmOiyXzCGKLm/VWy7/bUtKuj82ly2bPad8MhGY4Pds9LI52LJH9ZF6UWg==`

### XML firmado

`tests/vectors/rc-receipt-void.signed.xml`:

```xml
<?xml version="1.0" encoding="utf-8"?>
<SummaryDocuments xmlns="urn:sunat:names:specification:ubl:peru:schema:xsd:SummaryDocuments-1" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1"><ext:UBLExtensions><ext:UBLExtension><ext:ExtensionContent><ds:Signature Id="signatureKG"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI=""><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>K1ZRusF6NsOrJPZsjMDz3MEfo4A=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>1DMtqqf07UoqlApGJHVbj4Myrc7JyHobudNKX/qFrWduqyftDgq7JrnrCKSGHUa5DEGG7EskmO5Ku2nTWvdivZ43BU9rmNPm7mAQT2wYOpnVAhw8R0UqvajXqX9ejgNB6mc0Gz2a/4wxs4k9M/WNbzbmsuf4vUCqqobZ0qr0sU55H9zUkQrdpsklmC+P8SseA0ROOekDp6UKoUgu1VTUQLEmQDOojI7ZvydaxepdcyWOCZo4L6qUo4PlCeX2yUFC893MUV/k7HJheP6PcS2uHGCTAY9ZahmOiyXzCGKLm/VWy7/bUtKuj82ly2bPad8MhGY4Pds9LI52LJH9ZF6UWg==</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIID8zCCAtugAwIBAgIUY968iRS4gHDjt9RwTaDaujmFLO0wDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlBFMS8wLQYDVQQKDCZURVNUIE9OTFkgLSBOT1QgVkFMSUQgRk9SIEFOWSBUQVhQQVlFUjESMBAGA1UECwwJVEVTVCBPTkxZMRQwEgYDVQQFEwsyMDAwMDAwMDAwMTEeMBwGA1UEAwwVVEVTVCBPTkxZIDIwMDAwMDAwMDAxMB4XDTI2MTAxNTIxMjc0NVoXDTM2MTAxMjIxMjc0NVowgYgxCzAJBgNVBAYTAlBFMS8wLQYDVQQKDCZURVNUIE9OTFkgLSBOT1QgVkFMSUQgRk9SIEFOWSBUQVhQQVlFUjESMBAGA1UECwwJVEVTVCBPTkxZMRQwEgYDVQQFEwsyMDAwMDAwMDAwMTEeMBwGA1UEAwwVVEVTVCBPTkxZIDIwMDAwMDAwMDAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6GZTtpFyih4C6ETakE6Q4+SFBFWJ/TQi2pbxJRD7GkQ1tKeB+ENcBk8EjnOocxdYWvSBpOd9UYkpc2C+jlbVWd04ey8psznwCHzJJ1+qgQqVI8PpH5A4eEw5LGXupHmnJSYpGXFGIJ6+tlJRqvZbq7RTh7Rpxs4DkCjUhUke/BKIZahYDzSGFLlsWx01Dq8Xeb6xF2sLlZXy/b0MvRZAe7I/xplIftS/rrDQ/rE5DfS0Dibayc/uNIRw1+NiKpT0wwY/VCzRQrM27dG7sTyhNAy6C3vtRmO5Bl9+0wrXldZcR4VSm1yrg65KRWv6DNcG2MkxRYBphaM+sJfkNECs6wIDAQABo1MwUTAdBgNVHQ4EFgQUE359gu7BEXWLRhx+VNBeec2Pp/kwHwYDVR0jBBgwFoAUE359gu7BEXWLRhx+VNBeec2Pp/kwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAzjWgukifoL9gZckM2jWW7a+N6+5W/0EkGJVFV9RbCceNpDpdMyVD4QyVm1nOJ/bQzOLdDnjyD3J34/1pEwo/hS/HehPy50twvf/uKEwPU4TNQTyjChnM3k+IX7cOusuPIBsC6trufeHOSky5lWiKWusMHo8VsPvVinE0n/RqTo47enHPFa6huF3egiQEJ6H+lxerXvWT8IkaGFA2YKjAGGsenlCSw9rRGX4tzQtUkJx0oFaEZGNpq+OYr334J3cZp9LskUFnrvRoAz3Fk8HdbVlfQTovFunFY9VzxbKjBfyWa6hymTxcvBR9x4ZfUKM9P3REeBKaTWdqe2oz4d6LLA==</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature></ext:ExtensionContent></ext:UBLExtension></ext:UBLExtensions><cbc:UBLVersionID>2.0</cbc:UBLVersionID><cbc:CustomizationID>1.1</cbc:CustomizationID><cbc:ID>RC-20261015-3</cbc:ID><cbc:ReferenceDate>2026-10-14</cbc:ReferenceDate><cbc:IssueDate>2026-10-15</cbc:IssueDate><cac:Signature><cbc:ID>IDSignKG</cbc:ID><cac:SignatoryParty><cac:PartyIdentification><cbc:ID>20123456789</cbc:ID></cac:PartyIdentification><cac:PartyName><cbc:Name><![CDATA[EMPRESA DEMO ORACULO S.A.C.]]></cbc:Name></cac:PartyName></cac:SignatoryParty><cac:DigitalSignatureAttachment><cac:ExternalReference><cbc:URI>#signatureKG</cbc:URI></cac:ExternalReference></cac:DigitalSignatureAttachment></cac:Signature><cac:AccountingSupplierParty><cbc:CustomerAssignedAccountID>20123456789</cbc:CustomerAssignedAccountID><cbc:AdditionalAccountID>6</cbc:AdditionalAccountID><cac:Party><cac:PartyLegalEntity><cbc:RegistrationName><![CDATA[EMPRESA DEMO ORACULO S.A.C.]]></cbc:RegistrationName></cac:PartyLegalEntity></cac:Party></cac:AccountingSupplierParty><sac:SummaryDocumentsLine><cbc:LineID>1</cbc:LineID><cbc:DocumentTypeCode>03</cbc:DocumentTypeCode><cbc:ID>B001-2</cbc:ID><cac:AccountingCustomerParty><cbc:CustomerAssignedAccountID>87654321</cbc:CustomerAssignedAccountID><cbc:AdditionalAccountID>1</cbc:AdditionalAccountID></cac:AccountingCustomerParty><cac:Status><cbc:ConditionCode>3</cbc:ConditionCode></cac:Status><sac:TotalAmount currencyID="PEN">59.00</sac:TotalAmount><sac:BillingPayment><cbc:PaidAmount currencyID="PEN">50.00</cbc:PaidAmount><cbc:InstructionID>01</cbc:InstructionID></sac:BillingPayment><cac:TaxTotal><cbc:TaxAmount currencyID="PEN">9.00</cbc:TaxAmount><cac:TaxSubtotal><cbc:TaxAmount currencyID="PEN">9.00</cbc:TaxAmount><cac:TaxCategory><cac:TaxScheme><cbc:ID>1000</cbc:ID><cbc:Name>IGV</cbc:Name><cbc:TaxTypeCode>VAT</cbc:TaxTypeCode></cac:TaxScheme></cac:TaxCategory></cac:TaxSubtotal></cac:TaxTotal></sac:SummaryDocumentsLine></SummaryDocuments>
```

## Reproducirlo

Con el SDK instalado como dice la [guía de inicio](https://fe.kembec.com/empezar/guia-de-inicio/#2-instala-el-sdk), baja el caso y el certificado de prueba:

```bash
curl -fsSL --remote-name-all \
  https://fe.kembec.com/sdk/v0.1.0-beta.5/rc-receipt-void.json \
  https://fe.kembec.com/sdk/v0.1.0-beta.5/test-cert.pem \
  https://fe.kembec.com/sdk/v0.1.0-beta.5/test-key.pem
```

Fírmalo como en la [guía](https://fe.kembec.com/empezar/guia-de-inicio/#2-firma-el-caso-de-prueba): tu `DigestValue` tiene que ser el de arriba.

### PHP

En `firmar.php`, la línea del JSON queda así:

`firmar.php`:

```php
$factura = file_get_contents(__DIR__ . '/rc-receipt-void.json');
```

```bash
php firmar.php
```

### JavaScript

En `firmar.mjs`, la línea del JSON queda así:

`firmar.mjs`:

```js
const built = JSON.parse(sdk.build(leer('rc-receipt-void.json')));
```

```bash
node firmar.mjs
```

### Python

En `firmar.py`, la línea del JSON queda así:

`firmar.py`:

```python
built = sunat_sdk.build(leer('rc-receipt-void.json'))
```

```bash
python firmar.py
```

### CLI

```bash
sunat-sdk build < rc-receipt-void.json \
  | sunat-sdk sign --cert test-cert.pem --key test-key.pem > firmada.json
grep -o '"digest_value":"[^"]*"' firmada.json
grep -q '"digest_value":"K1ZRusF6NsOrJPZsjMDz3MEfo4A="' firmada.json && echo "digest ok"
```
