Ir al contenido
ReferenciaErrores
Sello del hash FQoLsS2APAq1NuPR7HopP4iqhxk=09-despatch-between-establishments · DIGESTVALUE · FQoLsS2APAq1NuPR7HopP4iqhxk= ·

Ejemplos / Guía de remisión remitente (09) / Caso 21 de 21

Guía de remisión entre establecimientos

Transporte público (01): el transportista con su RUC y su registro MTC, sin placas ni conductor; destinatario, origen y destino son del propio remitente.

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

Los tres archivos, en el repositorio: el JSON de entrada, el XML sin firmar y el XML firmado.

El SDK la envía con sunat-sdk gre-send y consulta su ticket con sunat-sdk gre-ticket: va al servicio REST de la SUNAT, no al billService de la factura (Paso a producción).

La SUNAT no tiene ambiente de pruebas para la guía, y lo que contrasta con sus registros (RUC, registro del MTC, establecimientos) se sabe al enviarla. Lo demás se comprueba aquí: este XML firmado valida contra el esquema UBL 2.1 de OASIS, y si tu JSON rompe una regla de la SUNAT que se verifica con el XML solo, build lo rechaza con el mismo código de error que daría la SUNAT.

Entrada en JSON

Marcadas, las líneas que cambian respecto del caso más parecido, Guía de remisión por venta; lo igual queda plegado.

fixtures/09-despatch-between-establishments.json
{  "kind": "despatch",  "ubl_version": "2.1",  "document_type": "09",  "series": "T001",  "number": "2",  "issue_date": "2026-10-15T18:45:00-05:00",
MostrarOcultar las líneas 8 a 22
  "issuer": {    "ruc": "20123456789",    "legal_name": "EMPRESA DEMO ORACULO S.A.C.",    "trade_name": "DEMO ORACULO",    "address": {      "ubigeo": "150101",      "country_code": "PE",      "department": "LIMA",      "province": "LIMA",      "district": "LIMA",      "urbanization": "-",      "street": "AV. EJEMPLO 123",      "establishment_code": "0000"    }  },
  "recipient": {    "document_type": "6",    "document_number": "20123456789",    "legal_name": "EMPRESA DEMO ORACULO S.A.C."  },  "shipment": {    "reason_code": "04",    "reason_description": "Traslado entre establecimientos de la misma empresa",    "transport_mode": "01",    "start_date": "2026-10-16",    "gross_weight": "1.250",    "weight_unit": "TNE",    "carrier": {      "ruc": "20555666777",      "legal_name": "TRANSPORTES DEMO S.R.L.",      "mtc_registration": "MTC1508123CNG"    },    "origin": {      "ubigeo": "150101",      "address": "AV. EJEMPLO 123, LIMA",      "establishment_code": "0000",      "establishment_ruc": "20123456789"    },    "destination": {      "ubigeo": "150135",      "address": "AV. INDUSTRIAL 789, SAN MARTÍN DE PORRES",      "establishment_code": "0002",      "establishment_ruc": "20123456789"    }  },  "lines": [    {      "quantity": "40",      "unit": "BX",      "description": "Cajas de cuadernos para la tienda de Lima Norte",      "product_code": "CUA-CAJA"    }  ]}

XML sin firmar

Marcadas, las líneas que cambian respecto de Guía de remisión por venta.

tests/vectors/09-despatch-between-establishments.unsigned.xml
<?xml version="1.0" encoding="UTF-8"?><DespatchAdvice xmlns="urn:oasis:names:specification:ubl:schema:xsd:DespatchAdvice-2" 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">  <ext:UBLExtensions>    <ext:UBLExtension>      <ext:ExtensionContent></ext:ExtensionContent>    </ext:UBLExtension>  </ext:UBLExtensions>  <cbc:UBLVersionID>2.1</cbc:UBLVersionID>  <cbc:CustomizationID>2.0</cbc:CustomizationID>  <cbc:ID>T001-2</cbc:ID>  <cbc:IssueDate>2026-10-15</cbc:IssueDate>  <cbc:IssueTime>18:45:00</cbc:IssueTime>
MostrarOcultar las líneas 13 a 39
  <cbc:DespatchAdviceTypeCode>09</cbc:DespatchAdviceTypeCode>  <cac:Signature>    <cbc:ID>IDSignKG</cbc:ID>    <cac:SignatoryParty>      <cac:PartyIdentification>        <cbc:ID>20123456789</cbc:ID>      </cac:PartyIdentification>      <cac:PartyName>        <cbc:Name>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:DespatchSupplierParty>    <cac:Party>      <cac:PartyIdentification>        <cbc:ID schemeID="6">20123456789</cbc:ID>      </cac:PartyIdentification>      <cac:PartyLegalEntity>        <cbc:RegistrationName>EMPRESA DEMO ORACULO S.A.C.</cbc:RegistrationName>      </cac:PartyLegalEntity>    </cac:Party>  </cac:DespatchSupplierParty>
  <cac:DeliveryCustomerParty>    <cac:Party>      <cac:PartyIdentification>        <cbc:ID schemeID="6">20123456789</cbc:ID>      </cac:PartyIdentification>      <cac:PartyLegalEntity>        <cbc:RegistrationName>EMPRESA DEMO ORACULO S.A.C.</cbc:RegistrationName>      </cac:PartyLegalEntity>    </cac:Party>  </cac:DeliveryCustomerParty>  <cac:Shipment>    <cbc:ID>SUNAT_Envio</cbc:ID>    <cbc:HandlingCode>04</cbc:HandlingCode>    <cbc:HandlingInstructions>Traslado entre establecimientos de la misma empresa</cbc:HandlingInstructions>    <cbc:GrossWeightMeasure unitCode="TNE">1.250</cbc:GrossWeightMeasure>    <cac:ShipmentStage>      <cbc:TransportModeCode>01</cbc:TransportModeCode>      <cac:TransitPeriod>        <cbc:StartDate>2026-10-16</cbc:StartDate>      </cac:TransitPeriod>      <cac:CarrierParty>        <cac:PartyIdentification>          <cbc:ID schemeID="6">20555666777</cbc:ID>        </cac:PartyIdentification>        <cac:PartyLegalEntity>          <cbc:RegistrationName>TRANSPORTES DEMO S.R.L.</cbc:RegistrationName>          <cbc:CompanyID>MTC1508123CNG</cbc:CompanyID>        </cac:PartyLegalEntity>      </cac:CarrierParty>    </cac:ShipmentStage>
MostrarOcultar las líneas 70 a 88
    <cac:Delivery>      <cac:DeliveryAddress>        <cbc:ID>150135</cbc:ID>        <cbc:AddressTypeCode listID="20123456789">0002</cbc:AddressTypeCode>        <cac:AddressLine>          <cbc:Line>AV. INDUSTRIAL 789, SAN MARTÍN DE PORRES</cbc:Line>        </cac:AddressLine>      </cac:DeliveryAddress>      <cac:Despatch>        <cac:DespatchAddress>          <cbc:ID>150101</cbc:ID>          <cbc:AddressTypeCode listID="20123456789">0000</cbc:AddressTypeCode>          <cac:AddressLine>            <cbc:Line>AV. EJEMPLO 123, LIMA</cbc:Line>          </cac:AddressLine>        </cac:DespatchAddress>      </cac:Despatch>    </cac:Delivery>  </cac:Shipment>
  <cac:DespatchLine>    <cbc:ID>1</cbc:ID>    <cbc:DeliveredQuantity unitCode="BX">40</cbc:DeliveredQuantity>    <cac:OrderLineReference>      <cbc:LineID>1</cbc:LineID>    </cac:OrderLineReference>    <cac:Item>      <cbc:Description>Cajas de cuadernos para la tienda de Lima Norte</cbc:Description>      <cac:SellersItemIdentification>        <cbc:ID>CUA-CAJA</cbc:ID>      </cac:SellersItemIdentification>    </cac:Item>  </cac:DespatchLine></DespatchAdvice>

Formateado para leerlo. «Copiar» copia el archivo tal como está en el repositorio, en una línea.

Firma

Firmado con el certificado de prueba del SDK, el que baja la guía de inicio.

Sello del hash FQoLsS2APAq1NuPR7HopP4iqhxk=

FQoLsS2APAq1NuPR7HopP4iqhxk=

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
FQoLsS2APAq1NuPR7HopP4iqhxk=
SignatureValue
leWgTahhQN0od5tTUZq2egFilsNM7tVgEeHVsxe9INOev75wcftjPKxnLZ2RRuZdxKu3njcRESv4NIjtqD7KAh/vaV8awnwBVOYrcLT/T5ghix5odSgxVMfgeZploTTvZ5jmACOYOr5I1XAbPg1Sd4FdwAqp9YvKU9PnPr7Np8a0lejV0ih01H/ybMmRYNMAhjL3ZKFTzGlLH07Vqla3SsWL7fQwzOTD4BtYAxf9rc8pVsZJyYvSRfu26AoJmCASINbkQa3hyUpzf/ic7ETNARuNcavOsWYi3IQyQAFBXUnWeTzdGpb97UrDojEPaSlZ/iX1ki7/U8z6VHhd/rHkXg==

XML firmado

tests/vectors/09-despatch-between-establishments.signed.xml
<?xml version="1.0" encoding="UTF-8"?><DespatchAdvice xmlns="urn:oasis:names:specification:ubl:schema:xsd:DespatchAdvice-2" 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">  <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>FQoLsS2APAq1NuPR7HopP4iqhxk=</ds:DigestValue>            </ds:Reference>          </ds:SignedInfo>          <ds:SignatureValue>leWgTahhQN0od5tTUZq2egFilsNM7tVgEeHVsxe9INOev75wcftjPKxnLZ2RRuZdxKu3njcRESv4NIjtqD7KAh/vaV8awnwBVOYrcLT/T5ghix5odSgxVMfgeZploTTvZ5jmACOYOr5I1XAbPg1Sd4FdwAqp9YvKU9PnPr7Np8a0lejV0ih01H/ybMmRYNMAhjL3ZKFTzGlLH07Vqla3SsWL7fQwzOTD4BtYAxf9rc8pVsZJyYvSRfu26AoJmCASINbkQa3hyUpzf/ic7ETNARuNcavOsWYi3IQyQAFBXUnWeTzdGpb97UrDojEPaSlZ/iX1ki7/U8z6VHhd/rHkXg==</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.1</cbc:UBLVersionID>  <cbc:CustomizationID>2.0</cbc:CustomizationID>  <cbc:ID>T001-2</cbc:ID>  <cbc:IssueDate>2026-10-15</cbc:IssueDate>  <cbc:IssueTime>18:45:00</cbc:IssueTime>  <cbc:DespatchAdviceTypeCode>09</cbc:DespatchAdviceTypeCode>  <cac:Signature>    <cbc:ID>IDSignKG</cbc:ID>    <cac:SignatoryParty>      <cac:PartyIdentification>        <cbc:ID>20123456789</cbc:ID>      </cac:PartyIdentification>      <cac:PartyName>
Mostrar las 82 líneas restantes (122 en total)
        <cbc:Name>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:DespatchSupplierParty>    <cac:Party>      <cac:PartyIdentification>        <cbc:ID schemeID="6">20123456789</cbc:ID>      </cac:PartyIdentification>      <cac:PartyLegalEntity>        <cbc:RegistrationName>EMPRESA DEMO ORACULO S.A.C.</cbc:RegistrationName>      </cac:PartyLegalEntity>    </cac:Party>  </cac:DespatchSupplierParty>  <cac:DeliveryCustomerParty>    <cac:Party>      <cac:PartyIdentification>        <cbc:ID schemeID="6">20123456789</cbc:ID>      </cac:PartyIdentification>      <cac:PartyLegalEntity>        <cbc:RegistrationName>EMPRESA DEMO ORACULO S.A.C.</cbc:RegistrationName>      </cac:PartyLegalEntity>    </cac:Party>  </cac:DeliveryCustomerParty>  <cac:Shipment>    <cbc:ID>SUNAT_Envio</cbc:ID>    <cbc:HandlingCode>04</cbc:HandlingCode>    <cbc:HandlingInstructions>Traslado entre establecimientos de la misma empresa</cbc:HandlingInstructions>    <cbc:GrossWeightMeasure unitCode="TNE">1.250</cbc:GrossWeightMeasure>    <cac:ShipmentStage>      <cbc:TransportModeCode>01</cbc:TransportModeCode>      <cac:TransitPeriod>        <cbc:StartDate>2026-10-16</cbc:StartDate>      </cac:TransitPeriod>      <cac:CarrierParty>        <cac:PartyIdentification>          <cbc:ID schemeID="6">20555666777</cbc:ID>        </cac:PartyIdentification>        <cac:PartyLegalEntity>          <cbc:RegistrationName>TRANSPORTES DEMO S.R.L.</cbc:RegistrationName>          <cbc:CompanyID>MTC1508123CNG</cbc:CompanyID>        </cac:PartyLegalEntity>      </cac:CarrierParty>    </cac:ShipmentStage>    <cac:Delivery>      <cac:DeliveryAddress>        <cbc:ID>150135</cbc:ID>        <cbc:AddressTypeCode listID="20123456789">0002</cbc:AddressTypeCode>        <cac:AddressLine>          <cbc:Line>AV. INDUSTRIAL 789, SAN MARTÍN DE PORRES</cbc:Line>        </cac:AddressLine>      </cac:DeliveryAddress>      <cac:Despatch>        <cac:DespatchAddress>          <cbc:ID>150101</cbc:ID>          <cbc:AddressTypeCode listID="20123456789">0000</cbc:AddressTypeCode>          <cac:AddressLine>            <cbc:Line>AV. EJEMPLO 123, LIMA</cbc:Line>          </cac:AddressLine>        </cac:DespatchAddress>      </cac:Despatch>    </cac:Delivery>  </cac:Shipment>  <cac:DespatchLine>    <cbc:ID>1</cbc:ID>    <cbc:DeliveredQuantity unitCode="BX">40</cbc:DeliveredQuantity>    <cac:OrderLineReference>      <cbc:LineID>1</cbc:LineID>    </cac:OrderLineReference>    <cac:Item>      <cbc:Description>Cajas de cuadernos para la tienda de Lima Norte</cbc:Description>      <cac:SellersItemIdentification>        <cbc:ID>CUA-CAJA</cbc:ID>      </cac:SellersItemIdentification>    </cac:Item>  </cac:DespatchLine></DespatchAdvice>

Formateado para leerlo. «Copiar» copia el archivo tal como está en el repositorio.

Reproducirlo

Con el SDK instalado como dice la guía de inicio, baja el caso y el certificado de prueba:

Terminal
curl -fsSL --remote-name-all \  https://fe.kembec.com/sdk/v0.1.0-beta.5/09-despatch-between-establishments.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: tu DigestValue tiene que ser el de arriba.

PHP

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

firmar.php
$factura = file_get_contents(__DIR__ . '/09-despatch-between-establishments.json');
Terminal
php firmar.php

JavaScript

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

firmar.mjs
const built = JSON.parse(sdk.build(leer('09-despatch-between-establishments.json')));
Terminal
node firmar.mjs

Python

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

firmar.py
built = sunat_sdk.build(leer('09-despatch-between-establishments.json'))
Terminal
python firmar.py

CLI

Terminal
sunat-sdk build < 09-despatch-between-establishments.json \  | sunat-sdk sign --cert test-cert.pem --key test-key.pem > firmada.jsongrep -o '"digest_value":"[^"]*"' firmada.jsongrep -q '"digest_value":"FQoLsS2APAq1NuPR7HopP4iqhxk="' firmada.json && echo "digest ok"