Ir al contenido
ReferenciaErrores
Sello del hash okrodRhy3nBUgjzTlf4MXzekYDI=01-invoice-detraction · DIGESTVALUE · okrodRhy3nBUgjzTlf4MXzekYDI= ·

Ejemplos / Factura (01) / Caso 3 de 21

Factura con detracción

Factura con tipo de operación 1001 y su detracción: código 037 al 12 %, 141,60 soles, número de cuenta, medio de pago 001 y la leyenda 2006.

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

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

Entrada en JSON

Marcadas, las líneas que cambian respecto del caso más parecido, Factura a crédito en dos cuotas; lo igual queda plegado.

fixtures/01-invoice-detraction.json
{  "kind": "invoice",  "ubl_version": "2.1",  "operation_type": "1001",  "document_type": "01",  "series": "F001",  "number": "921",  "issue_date": "2026-10-16T11:00:00-05:00",  "currency": "PEN",  "payment_terms": {    "type": "Contado"  },  "detraction": {    "code": "037",    "percent": "12.00",    "amount": "141.60",    "account": "00-741-123456",    "payment_means_code": "001"  },
MostrarOcultar las líneas 20 a 57
  "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"    }  },  "customer": {    "document_type": "6",    "document_number": "20000000001",    "legal_name": "CLIENTE DEMO S.A.",    "address": {      "ubigeo": "150122",      "country_code": "PE",      "department": "LIMA",      "province": "LIMA",      "district": "MIRAFLORES",      "street": "CALLE CLIENTE 456"    }  },  "totals": {    "taxed": "1000.00",    "igv": "180.00",    "total_taxes": "180.00",    "sale_value": "1000.00",    "subtotal": "1180.00",    "payable": "1180.00"  },
  "lines": [    {      "unit": "ZZ",      "quantity": "1",      "product_code": "SRV010",      "sunat_product_code": "81112100",      "description": "Servicio de soporte de software, octubre 2026",      "unit_value": "1000.00",      "igv_base": "1000.00",      "igv_rate": "18.00",      "igv": "180.00",      "affectation": "10",      "total_taxes": "180.00",      "unit_price": "1180.00",      "line_value": "1000.00"    }  ],  "legends": [    {      "code": "1000",      "value": "SON MIL CIENTO OCHENTA CON 00/100 SOLES"    },    {      "code": "2006",      "value": "Operación sujeta a detracción"    }  ]}

XML sin firmar

Marcadas, las líneas que cambian respecto de Factura a crédito en dos cuotas.

tests/vectors/01-invoice-detraction.unsigned.xml
<?xml version="1.0" encoding="utf-8"?><Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-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:UBLExtension>  </ext:UBLExtensions>  <cbc:UBLVersionID>2.1</cbc:UBLVersionID>  <cbc:CustomizationID>2.0</cbc:CustomizationID>  <cbc:ID>F001-921</cbc:ID>  <cbc:IssueDate>2026-10-16</cbc:IssueDate>  <cbc:IssueTime>11:00:00</cbc:IssueTime>  <cbc:InvoiceTypeCode listID="1001">01</cbc:InvoiceTypeCode>  <cbc:Note languageLocaleID="1000"><![CDATA[SON MIL CIENTO OCHENTA CON 00/100 SOLES]]></cbc:Note>  <cbc:Note languageLocaleID="2006"><![CDATA[Operación sujeta a detracción]]></cbc:Note>
MostrarOcultar las líneas 16 a 82
  <cbc:DocumentCurrencyCode>PEN</cbc:DocumentCurrencyCode>  <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>    <cac:Party>      <cac:PartyIdentification>        <cbc:ID schemeID="6">20123456789</cbc:ID>      </cac:PartyIdentification>      <cac:PartyName>        <cbc:Name><![CDATA[DEMO ORACULO]]></cbc:Name>      </cac:PartyName>      <cac:PartyLegalEntity>        <cbc:RegistrationName><![CDATA[EMPRESA DEMO ORACULO S.A.C.]]></cbc:RegistrationName>        <cac:RegistrationAddress>          <cbc:ID>150101</cbc:ID>          <cbc:AddressTypeCode>0000</cbc:AddressTypeCode>          <cbc:CitySubdivisionName>-</cbc:CitySubdivisionName>          <cbc:CityName>LIMA</cbc:CityName>          <cbc:CountrySubentity>LIMA</cbc:CountrySubentity>          <cbc:District>LIMA</cbc:District>          <cac:AddressLine>            <cbc:Line><![CDATA[AV. EJEMPLO 123]]></cbc:Line>          </cac:AddressLine>          <cac:Country>            <cbc:IdentificationCode>PE</cbc:IdentificationCode>          </cac:Country>        </cac:RegistrationAddress>      </cac:PartyLegalEntity>      <cac:Contact>        <cbc:Telephone>014000000</cbc:Telephone>        <cbc:ElectronicMail>facturacion@example.com</cbc:ElectronicMail>      </cac:Contact>    </cac:Party>  </cac:AccountingSupplierParty>  <cac:AccountingCustomerParty>    <cac:Party>      <cac:PartyIdentification>        <cbc:ID schemeID="6">20000000001</cbc:ID>      </cac:PartyIdentification>      <cac:PartyLegalEntity>        <cbc:RegistrationName><![CDATA[CLIENTE DEMO S.A.]]></cbc:RegistrationName>        <cac:RegistrationAddress>          <cbc:ID>150122</cbc:ID>          <cac:AddressLine>            <cbc:Line><![CDATA[CALLE CLIENTE 456]]></cbc:Line>          </cac:AddressLine>          <cac:Country>            <cbc:IdentificationCode>PE</cbc:IdentificationCode>          </cac:Country>        </cac:RegistrationAddress>      </cac:PartyLegalEntity>    </cac:Party>  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>    <cbc:ID>Detraccion</cbc:ID>    <cbc:PaymentMeansCode>001</cbc:PaymentMeansCode>    <cac:PayeeFinancialAccount>      <cbc:ID>00-741-123456</cbc:ID>    </cac:PayeeFinancialAccount>  </cac:PaymentMeans>  <cac:PaymentTerms>    <cbc:ID>Detraccion</cbc:ID>    <cbc:PaymentMeansID>037</cbc:PaymentMeansID>    <cbc:PaymentPercent>12</cbc:PaymentPercent>    <cbc:Amount currencyID="PEN">141.60</cbc:Amount>  </cac:PaymentTerms>  <cac:PaymentTerms>    <cbc:ID>FormaPago</cbc:ID>    <cbc:PaymentMeansID>Contado</cbc:PaymentMeansID>  </cac:PaymentTerms>
MostrarOcultar las líneas 100 a 120
  <cac:TaxTotal>    <cbc:TaxAmount currencyID="PEN">180.00</cbc:TaxAmount>    <cac:TaxSubtotal>      <cbc:TaxableAmount currencyID="PEN">1000.00</cbc:TaxableAmount>      <cbc:TaxAmount currencyID="PEN">180.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>  <cac:LegalMonetaryTotal>    <cbc:LineExtensionAmount currencyID="PEN">1000.00</cbc:LineExtensionAmount>    <cbc:TaxInclusiveAmount currencyID="PEN">1180.00</cbc:TaxInclusiveAmount>    <cbc:PayableAmount currencyID="PEN">1180.00</cbc:PayableAmount>  </cac:LegalMonetaryTotal>  <cac:InvoiceLine>    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="ZZ">1</cbc:InvoicedQuantity>
MostrarOcultar las líneas 122 a 144
    <cbc:LineExtensionAmount currencyID="PEN">1000.00</cbc:LineExtensionAmount>    <cac:PricingReference>      <cac:AlternativeConditionPrice>        <cbc:PriceAmount currencyID="PEN">1180</cbc:PriceAmount>        <cbc:PriceTypeCode>01</cbc:PriceTypeCode>      </cac:AlternativeConditionPrice>    </cac:PricingReference>    <cac:TaxTotal>      <cbc:TaxAmount currencyID="PEN">180.00</cbc:TaxAmount>      <cac:TaxSubtotal>        <cbc:TaxableAmount currencyID="PEN">1000.00</cbc:TaxableAmount>        <cbc:TaxAmount currencyID="PEN">180.00</cbc:TaxAmount>        <cac:TaxCategory>          <cbc:Percent>18</cbc:Percent>          <cbc:TaxExemptionReasonCode>10</cbc:TaxExemptionReasonCode>          <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>
    <cac:Item>      <cbc:Description><![CDATA[Servicio de soporte de software, octubre 2026]]></cbc:Description>      <cac:SellersItemIdentification>        <cbc:ID>SRV010</cbc:ID>      </cac:SellersItemIdentification>      <cac:CommodityClassification>        <cbc:ItemClassificationCode>81112100</cbc:ItemClassificationCode>      </cac:CommodityClassification>    </cac:Item>    <cac:Price>      <cbc:PriceAmount currencyID="PEN">1000</cbc:PriceAmount>    </cac:Price>  </cac:InvoiceLine></Invoice>

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 okrodRhy3nBUgjzTlf4MXzekYDI=

okrodRhy3nBUgjzTlf4MXzekYDI=

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
okrodRhy3nBUgjzTlf4MXzekYDI=
SignatureValue
uazJtZnFALFnBjmKxrgJaTw+HdgEA7d2EMmOn1vyaAtXEEeaB4hPfI97X2AgOQQKVkHdMHRBi7FqfdPLjFksNkC42B/1K4RZb8+0bYVqCWqdEWLqPzgf/9ZXcpjF/NJhkyqfp2b4VwhBRiMWp369+GWn4hFiNs6zPbUDKPOZzmz9mbQuy4ieIv8hLbuxM0FnFgHWP7Hc2mmes+QHAMag+bFkPDQAgetASACDYxs/jLI0lDCx65P1YVlkr0yHd2DEBYl05xe/pa8lg/R+X/LMiOlfwfEb+C0sY5a5wd8sEM5aJ7GUT+c9e5L8ul5QptO7quMFADvH/pUm/iVi4UPCyg==

XML firmado

tests/vectors/01-invoice-detraction.signed.xml
<?xml version="1.0" encoding="utf-8"?><Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-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>okrodRhy3nBUgjzTlf4MXzekYDI=</ds:DigestValue>            </ds:Reference>          </ds:SignedInfo>          <ds:SignatureValue>uazJtZnFALFnBjmKxrgJaTw+HdgEA7d2EMmOn1vyaAtXEEeaB4hPfI97X2AgOQQKVkHdMHRBi7FqfdPLjFksNkC42B/1K4RZb8+0bYVqCWqdEWLqPzgf/9ZXcpjF/NJhkyqfp2b4VwhBRiMWp369+GWn4hFiNs6zPbUDKPOZzmz9mbQuy4ieIv8hLbuxM0FnFgHWP7Hc2mmes+QHAMag+bFkPDQAgetASACDYxs/jLI0lDCx65P1YVlkr0yHd2DEBYl05xe/pa8lg/R+X/LMiOlfwfEb+C0sY5a5wd8sEM5aJ7GUT+c9e5L8ul5QptO7quMFADvH/pUm/iVi4UPCyg==</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>F001-921</cbc:ID>  <cbc:IssueDate>2026-10-16</cbc:IssueDate>  <cbc:IssueTime>11:00:00</cbc:IssueTime>  <cbc:InvoiceTypeCode listID="1001">01</cbc:InvoiceTypeCode>  <cbc:Note languageLocaleID="1000"><![CDATA[SON MIL CIENTO OCHENTA CON 00/100 SOLES]]></cbc:Note>  <cbc:Note languageLocaleID="2006"><![CDATA[Operación sujeta a detracción]]></cbc:Note>  <cbc:DocumentCurrencyCode>PEN</cbc:DocumentCurrencyCode>  <cac:Signature>    <cbc:ID>IDSignKG</cbc:ID>    <cac:SignatoryParty>      <cac:PartyIdentification>
Mostrar las 138 líneas restantes (178 en total)
        <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>    <cac:Party>      <cac:PartyIdentification>        <cbc:ID schemeID="6">20123456789</cbc:ID>      </cac:PartyIdentification>      <cac:PartyName>        <cbc:Name><![CDATA[DEMO ORACULO]]></cbc:Name>      </cac:PartyName>      <cac:PartyLegalEntity>        <cbc:RegistrationName><![CDATA[EMPRESA DEMO ORACULO S.A.C.]]></cbc:RegistrationName>        <cac:RegistrationAddress>          <cbc:ID>150101</cbc:ID>          <cbc:AddressTypeCode>0000</cbc:AddressTypeCode>          <cbc:CitySubdivisionName>-</cbc:CitySubdivisionName>          <cbc:CityName>LIMA</cbc:CityName>          <cbc:CountrySubentity>LIMA</cbc:CountrySubentity>          <cbc:District>LIMA</cbc:District>          <cac:AddressLine>            <cbc:Line><![CDATA[AV. EJEMPLO 123]]></cbc:Line>          </cac:AddressLine>          <cac:Country>            <cbc:IdentificationCode>PE</cbc:IdentificationCode>          </cac:Country>        </cac:RegistrationAddress>      </cac:PartyLegalEntity>      <cac:Contact>        <cbc:Telephone>014000000</cbc:Telephone>        <cbc:ElectronicMail>facturacion@example.com</cbc:ElectronicMail>      </cac:Contact>    </cac:Party>  </cac:AccountingSupplierParty>  <cac:AccountingCustomerParty>    <cac:Party>      <cac:PartyIdentification>        <cbc:ID schemeID="6">20000000001</cbc:ID>      </cac:PartyIdentification>      <cac:PartyLegalEntity>        <cbc:RegistrationName><![CDATA[CLIENTE DEMO S.A.]]></cbc:RegistrationName>        <cac:RegistrationAddress>          <cbc:ID>150122</cbc:ID>          <cac:AddressLine>            <cbc:Line><![CDATA[CALLE CLIENTE 456]]></cbc:Line>          </cac:AddressLine>          <cac:Country>            <cbc:IdentificationCode>PE</cbc:IdentificationCode>          </cac:Country>        </cac:RegistrationAddress>      </cac:PartyLegalEntity>    </cac:Party>  </cac:AccountingCustomerParty>  <cac:PaymentMeans>    <cbc:ID>Detraccion</cbc:ID>    <cbc:PaymentMeansCode>001</cbc:PaymentMeansCode>    <cac:PayeeFinancialAccount>      <cbc:ID>00-741-123456</cbc:ID>    </cac:PayeeFinancialAccount>  </cac:PaymentMeans>  <cac:PaymentTerms>    <cbc:ID>Detraccion</cbc:ID>    <cbc:PaymentMeansID>037</cbc:PaymentMeansID>    <cbc:PaymentPercent>12</cbc:PaymentPercent>    <cbc:Amount currencyID="PEN">141.60</cbc:Amount>  </cac:PaymentTerms>  <cac:PaymentTerms>    <cbc:ID>FormaPago</cbc:ID>    <cbc:PaymentMeansID>Contado</cbc:PaymentMeansID>  </cac:PaymentTerms>  <cac:TaxTotal>    <cbc:TaxAmount currencyID="PEN">180.00</cbc:TaxAmount>    <cac:TaxSubtotal>      <cbc:TaxableAmount currencyID="PEN">1000.00</cbc:TaxableAmount>      <cbc:TaxAmount currencyID="PEN">180.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>  <cac:LegalMonetaryTotal>    <cbc:LineExtensionAmount currencyID="PEN">1000.00</cbc:LineExtensionAmount>    <cbc:TaxInclusiveAmount currencyID="PEN">1180.00</cbc:TaxInclusiveAmount>    <cbc:PayableAmount currencyID="PEN">1180.00</cbc:PayableAmount>  </cac:LegalMonetaryTotal>  <cac:InvoiceLine>    <cbc:ID>1</cbc:ID>    <cbc:InvoicedQuantity unitCode="ZZ">1</cbc:InvoicedQuantity>    <cbc:LineExtensionAmount currencyID="PEN">1000.00</cbc:LineExtensionAmount>    <cac:PricingReference>      <cac:AlternativeConditionPrice>        <cbc:PriceAmount currencyID="PEN">1180</cbc:PriceAmount>        <cbc:PriceTypeCode>01</cbc:PriceTypeCode>      </cac:AlternativeConditionPrice>    </cac:PricingReference>    <cac:TaxTotal>      <cbc:TaxAmount currencyID="PEN">180.00</cbc:TaxAmount>      <cac:TaxSubtotal>        <cbc:TaxableAmount currencyID="PEN">1000.00</cbc:TaxableAmount>        <cbc:TaxAmount currencyID="PEN">180.00</cbc:TaxAmount>        <cac:TaxCategory>          <cbc:Percent>18</cbc:Percent>          <cbc:TaxExemptionReasonCode>10</cbc:TaxExemptionReasonCode>          <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>    <cac:Item>      <cbc:Description><![CDATA[Servicio de soporte de software, octubre 2026]]></cbc:Description>      <cac:SellersItemIdentification>        <cbc:ID>SRV010</cbc:ID>      </cac:SellersItemIdentification>      <cac:CommodityClassification>        <cbc:ItemClassificationCode>81112100</cbc:ItemClassificationCode>      </cac:CommodityClassification>    </cac:Item>    <cac:Price>      <cbc:PriceAmount currencyID="PEN">1000</cbc:PriceAmount>    </cac:Price>  </cac:InvoiceLine></Invoice>

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/01-invoice-detraction.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__ . '/01-invoice-detraction.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('01-invoice-detraction.json')));
Terminal
node firmar.mjs

Python

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

firmar.py
built = sunat_sdk.build(leer('01-invoice-detraction.json'))
Terminal
python firmar.py

CLI

Terminal
sunat-sdk build < 01-invoice-detraction.json \  | sunat-sdk sign --cert test-cert.pem --key test-key.pem > firmada.jsongrep -o '"digest_value":"[^"]*"' firmada.jsongrep -q '"digest_value":"okrodRhy3nBUgjzTlf4MXzekYDI="' firmada.json && echo "digest ok"