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.
{ "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.
<?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.
<?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><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><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>Firma
Firmado con el certificado de prueba del SDK, el que baja la guía de inicio.
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
<?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.
<?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><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>Reproducirlo
Con el SDK instalado como dice la guía de inicio, baja el caso y el certificado de prueba:
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.pemFí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í:
$factura = file_get_contents(__DIR__ . '/01-invoice-detraction.json');php firmar.phpJavaScript
En firmar.mjs, la línea del JSON queda así:
const built = JSON.parse(sdk.build(leer('01-invoice-detraction.json')));node firmar.mjsPython
En firmar.py, la línea del JSON queda así:
built = sunat_sdk.build(leer('01-invoice-detraction.json'))python firmar.pyCLI
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"