package SUNAT::UBL::CreditNote;


use lib qw(../);
use Data::Dump qw(dump);
use File::Path qw( make_path rmtree );


=head1 NAME

SUNAT::UBL::CreditNote - Generacion de XML CP

=head1 VERSION

Version 2.1

=head2 new($cpObj)

donde $cpObj debe de tener la estructura siguiente:


#TODO 

=cut 

sub new
{
my $class = shift;  
my ($cp) = (@_);

my $self = {};
bless( $self, $class ); 
$self->{UBLtype} = 'CreditNote';

#Carga el Documento template
$self->{_xml} ='';
$self->{emisor_ruc} = $cp->{emi}{id_emisor};

my @lines = <DATA>;
foreach (@lines) {$self->{_xml} .= $_;}

$cp->{ID}=$cp->{cab}{sunat_id};
$self->{ID} = $cp->{ID};
$self->{IDTYPO} = $cp->{cab}{id_cp_tipo};

$self->{_xml} =~s/%IDMONEDATIPO%/$cp->{cab}{id_moneda_tipo}/ig;

$self->{_xml} =~s/%RUC%/$cp->{emi}{id_emisor}/ig;
$self->{_xml} =~s/%RSOCIAL%/$cp->{emi}{razonsocial}/ig;
$self->{_xml} =~s/%NCOMERC%/$cp->{emi}{nombrecomercial}/ig;

$self->{_xml} =~s/%IDLOCAL%/$cp->{cab}{id_local}/ig;

$self->{_xml} =~s/%ID%/$cp->{ID}/ig;

$self->{_xml} =~s/%EFECHA%/$cp->{cab}{emision_fecha}/ig;
$self->{_xml} =~s/%EHORA%/$cp->{cab}{emision_hora}/ig;


$self->{_xml} =~s/%IDNCTIPO%/$cp->{cab}{id_nc_tipo}/ig;
$self->{_xml} =~s/%REFSUNATID%/$cp->{cab}{ref_sunat_id}/ig;
$self->{_xml} =~s/%REFIDCPTIPO%/$cp->{cab}{ref_id_cp_tipo}/ig;
$self->{_xml} =~s/%MOTIVO%/$cp->{cab}{motivo}/ig;

#Agrega las notas
$self->{_xml} =~m/(?s)%OPTNOTA%(.*?)%OPTNOTA%/;
my $tmpl = $1;
my $acc ='';

for(my $x=0;$cp->{not}[$x];$x++)
{
	my $det = $tmpl;
	$det=~s/%VALOR%/$cp->{not}[$x]->{valor}/ig;
	$det=~s/%IDLEYENDATIPO%/$cp->{not}[$x]->{id_leyenda_tipo}/ig;
	$acc = $acc.$det;
}

$self->{_xml} =~s/(?s)%OPTNOTA%(.*?)%OPTNOTA%/$acc/;

#Datos del cliente

$self->{_xml} =~s/%CIDDOCUMENTO%/$cp->{cab}{cliente_id_documento_tipo}/ig;
$self->{_xml} =~s/%CNUMDOCUMENTO%/$cp->{cab}{cliente_documento_numero}/ig;
$self->{_xml} =~s/%CRSOCIAL%/$cp->{cab}{cliente_razon_social}/ig;

#Total impuestos IGV + ISC
$self->{_xml} =~s/%TOTALIMPUESTOS%/$cp->{cab}{total_impuestos}/;

#TRIBUTO 1000 IGV
$self->{_xml} =~m/(?s)%OPTBASE1000%(.*?)%OPTBASE1000%/;
my $tmpl = $1;
if($cp->{cab}{valor_1000}*1 ne 0)
{
	$tmpl =~s/%BASE1000%/$cp->{cab}{base_1000}/;
	$tmpl =~s/%VALOR1000%/$cp->{cab}{valor_1000}/;
}
else
{
	$tmpl = '';
}
$self->{_xml} =~s/(?s)%OPTBASE1000%(.*?)%OPTBASE1000%/$tmpl/;

#TRIBUTO 2000 ISC
$self->{_xml} =~m/(?s)%OPTBASE2000%(.*?)%OPTBASE2000%/;
my $tmpl = $1;
if($cp->{cab}{valor_2000}*1 ne 0)
{
	$tmpl =~s/%BASE2000%/$cp->{cab}{base_2000}/;
	$tmpl =~s/%VALOR2000%/$cp->{cab}{valor_2000}/;
}
else
{
	$tmpl = '';
}
$self->{_xml} =~s/(?s)%OPTBASE2000%(.*?)%OPTBASE2000%/$tmpl/;

#TRIBUTO 9995 EXPORTACION
$self->{_xml} =~m/(?s)%OPTBASE9995%(.*?)%OPTBASE9995%/;
my $tmpl = $1;
if($cp->{cab}{base_9995}*1 ne 0)
{
	$tmpl =~s/%BASE9995%/$cp->{cab}{base_9995}/;
}
else
{
	$tmpl = '';
}
$self->{_xml} =~s/(?s)%OPTBASE9995%(.*?)%OPTBASE9995%/$tmpl/;


#TRIBUTO 9996 GRATUITO
$self->{_xml} =~m/(?s)%OPTBASE9996%(.*?)%OPTBASE9996%/;
my $tmpl = $1;
if($cp->{cab}{base_9996}*1 ne 0)
{
	$tmpl =~s/%BASE9996%/$cp->{cab}{base_9996}/;
}
else
{
	$tmpl = '';
}
$self->{_xml} =~s/(?s)%OPTBASE9996%(.*?)%OPTBASE9996%/$tmpl/;

#TRIBUTO 9997 EXONERADO
$self->{_xml} =~m/(?s)%OPTBASE9997%(.*?)%OPTBASE9997%/;
my $tmpl = $1;
if($cp->{cab}{base_9997}*1 ne 0)
{
	$tmpl =~s/%BASE9997%/$cp->{cab}{base_9997}/;
}
else
{
	$tmpl = '';
}
$self->{_xml} =~s/(?s)%OPTBASE9997%(.*?)%OPTBASE9997%/$tmpl/;

#TRIBUTO 9998 INAFECTO
$self->{_xml} =~m/(?s)%OPTBASE9998%(.*?)%OPTBASE9998%/;
my $tmpl = $1;
if($cp->{cab}{base_9998}*1 ne 0)
{
	$tmpl =~s/%BASE9998%/$cp->{cab}{base_9998}/;
}
else
{
	$tmpl = '';
}
$self->{_xml} =~s/(?s)%OPTBASE9998%(.*?)%OPTBASE9998%/$tmpl/;

#TRIBUTO 9999 OTROS CONCEPTOS DE PAGO 
$self->{_xml} =~m/(?s)%OPTBASE9999%(.*?)%OPTBASE9999%/;
my $tmpl = $1;
if($cp->{cab}{base_9999}*1 ne 0)
{
	$tmpl =~s/%BASE9999%/$cp->{cab}{base_9999}/;
}
else
{
	$tmpl = '';
}
$self->{_xml} =~s/(?s)%OPTBASE9999%(.*?)%OPTBASE9999%/$tmpl/;

#SUMATORIAS
$self->{_xml} =~s/%PRECIOTOTAL%/$cp->{cab}{precio_total}/;
$self->{_xml} =~s/%TOTALITEMS%/$cp->{cab}{total_items}/;
$self->{_xml} =~s/%TOTALDESCUENTOS%/$cp->{cab}{total_descuentos}/;
$self->{_xml} =~s/%TOTALOTROCARGOVALOR%/$cp->{cab}{total_otrocargo_valor}/;
$self->{_xml} =~s/%TOTALPAGAR%/$cp->{cab}{total_pagar}/;


#ITEMS
$self->{_xml} =~m/(?s)%OPTITEM%(.*?)%OPTITEM%/;
my $tmpl = $1;
my $acc = '';
my $x=0;
for($x=0;$cp->{det}[$x];$x++)
{
	my $det = $tmpl;


	#DESCUEMTO POR ITEM
	if($cp->{det}[$x]->{item_cargo_valor}*1 ne 0)
	{
		$det=~s/%ITEMCARGO%/$cp->{det}[$x]->{item_cargo}/ig;
		$det=~s/%IDITEMCARGOTIPO%/$cp->{det}[$x]->{id_item_cargo_tipo}/ig;
		$det=~s/%ITEMCARGOFACTOR%/$cp->{det}[$x]->{item_cargo_factor}/ig;
		$det=~s/%ITEMCARGOVALOR%/$cp->{det}[$x]->{item_cargo_valor}/ig;
		$det=~s/%ITEMCARGOBASE%/$cp->{det}[$x]->{item_cargo_base}/ig;
		$det=~s/%OPTITEMCARGO%//ig;
	}
	else
	{
		$det =~s/(?s)%OPTITEMCARGO%(.*?)%OPTITEMCARGO%//;
	}

		$det=~s/%IDIGVTIPO%/$cp->{det}[$x]->{id_igv_tipo}/ig;
		$det=~s/%IGVFACTOR%/$cp->{det}[$x]->{igv_factor}/ig;

	#ESQUEMA DE IGV POR ITEM
	if($cp->{det}[$x]->{item_base_1000}*1 ne 0)
	{
		$det=~s/%ITEMBASE1000%/$cp->{det}[$x]->{item_base_1000}/ig;
		$det=~s/%ITEMVALOR1000%/$cp->{det}[$x]->{item_valor_1000}/ig;

		$det=~s/%OPTITEM1000%//ig;
	}
	else
	{
		$det =~s/(?s)%OPTITEM1000%(.*?)%OPTITEM1000%//;
	}

	#ESQUEMA DE ISC POR ITEM
	if($cp->{det}[$x]->{item_base_2000}*1 ne 0)
	{
		$det=~s/%ITEMBASE2000%/$cp->{det}[$x]->{item_base_2000}/ig;
		$det=~s/%ITEMVALOR2000%/$cp->{det}[$x]->{item_valor_2000}/ig;
		$det=~s/%IDISCTIPO%/$cp->{det}[$x]->{id_isc_tipo}/ig;
		$det=~s/%ISCFACTOR%/$cp->{det}[$x]->{isc_factor}/ig;

		$det=~s/%OPTITEM2000%//ig;
	}
	else
	{
		$det =~s/(?s)%OPTITEM2000%(.*?)%OPTITEM2000%//;
	}

	#ESQUEMA DE GRATUITO POR ITEM
	if($cp->{det}[$x]->{item_base_9996}*1 ne 0)
	{
		$cp->{det}[$x]->{precio_venta} =0;
		$det=~s/%ITEMBASE9996%/$cp->{det}[$x]->{item_base_9996}/ig;


		$det=~s/%OPTITEM9996%//ig;
	}
	else
	{
		$det =~s/(?s)%OPTITEM9996%(.*?)%OPTITEM9996%//;
	}

	#ESQUEMA DE EXONERACION POR ITEM
	if($cp->{det}[$x]->{item_base_9997}*1 ne 0)
	{
		$det=~s/%ITEMBASE9997%/$cp->{det}[$x]->{item_base_9997}/ig;


		$det=~s/%OPTITEM9997%//ig;
	}
	else
	{
		$det =~s/(?s)%OPTITEM9997%(.*?)%OPTITEM9997%//;
	}

	#ESQUEMA DE INAFECTO POR ITEM
	if($cp->{det}[$x]->{item_base_9998}*1 ne 0)
	{
		$det=~s/%ITEMBASE9998%/$cp->{det}[$x]->{item_base_9998}/ig;


		$det=~s/%OPTITEM9998%//ig;
	}
	else
	{
		$det =~s/(?s)%OPTITEM9998%(.*?)%OPTITEM9998%//;
	}

	$det=~s/%ORDEN%/$cp->{det}[$x]->{orden}/ig;
	$det=~s/%IDMEDIDATIPO%/$cp->{det}[$x]->{id_medida_tipo}/ig;
	$det=~s/%CANTIDAD%/$cp->{det}[$x]->{cantidad}/ig;
	$det=~s/%ITEMCARGOBASE%/$cp->{det}[$x]->{item_cargo_base}/ig;
	$det=~s/%PRECIOVENTA%/$cp->{det}[$x]->{precio_venta}/ig;
	$det=~s/%IDPRECIOUNITARIOTIPO%/$cp->{det}[$x]->{id_precio_unitario_tipo}/ig;
	$det=~s/%ITEMTOTALIMPUESTO%/$cp->{det}[$x]->{item_total_impuesto}/ig;
	$det=~s/%DESCRIPCION%/$cp->{det}[$x]->{descripcion}/ig;
	$det=~s/%CODIGO%/$cp->{det}[$x]->{codigo}/ig;
	$det=~s/%ITEMUNITARIO%/$cp->{det}[$x]->{item_unitario}/ig;

	#acumula en el detalle
	$acc = $acc.$det;
}

$self->{_xml} =~s/(?s)%OPTITEM%(.*?)%OPTITEM%/$acc/;


$self->{_xml} =~s/%ITEMCOUNT%/$x/ig;

#LIMPIA LA ESTRUCTURA
$self->{_xml} =~s/\n+/\n/ig;


#IMPRIME ESTRUCTURA
#print dump($cp);

$self->{_srcObj} = $cp;
return $self; 

}

=head2 toXMLString()

Obtiene el XML

=cut

sub toXMLString
{
 my $self = shift;
 return $self->{_xml};
}
return 1;



=head2 saveXML($dirname)  guarda el fichero en el directorio 

Guarda el fichero en el directorio en formato XML devuelve el nombre de fichero sin firmar

=cut

sub saveXML
{
 my $self = shift;
 my ($dirname) = (@_);
 if($dirname eq '') {return undef;}
 if($dirname =~m/\/$/){$dirname = $dirname.'/';}

 $dirname= $dirname.$self->{_srcObj}{emi}{id_emisor}.'/';
 $filename = $self->{emisor_ruc}.'-'.$self->{IDTYPO}.'-'.$self->{ID};

 if(! -e $dirname)
  {
	make_path $dirname;
  }

	open my $fh, '>', $dirname.$filename.'.XML' or die $!;
	binmode $fh;
	print $fh $self->{_xml};
	close $fh;

  if(-e $dirname.$filename.'.XML')
  {
  	return $filename;
  }
  else
  {
  	return undef;
  }
}




return 1;

__DATA__
<?xml version="1.0" encoding="UTF-8"?>
<CreditNote xmlns="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2" 
	xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" 
	xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" 
	xmlns:ccts="urn:un:unece:uncefact:documentation:2" 
	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
	xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" 
	xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" 
	xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1" 
	xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <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>%ID%</cbc:ID>
   <cbc:IssueDate>%EFECHA%</cbc:IssueDate>
   <cbc:IssueTime>%EHORA%</cbc:IssueTime>
   <cbc:DocumentCurrencyCode>%IDMONEDATIPO%</cbc:DocumentCurrencyCode>
%OPTNOTA%
   <cbc:Note languageLocaleID="%IDLEYENDATIPO%">%VALOR%</cbc:Note>
%OPTNOTA%
   <cac:DiscrepancyResponse>
      <cbc:ReferenceID>%REFSUNATID%</cbc:ReferenceID>
      <cbc:ResponseCode>%IDNCTIPO%</cbc:ResponseCode>
      <cbc:Description>%MOTIVO%</cbc:Description>
   </cac:DiscrepancyResponse>
   <cac:BillingReference>
      <cac:InvoiceDocumentReference>
         <cbc:ID>%REFSUNATID%</cbc:ID>
         <cbc:DocumentTypeCode>%REFIDCPTIPO%</cbc:DocumentTypeCode>
      </cac:InvoiceDocumentReference>
   </cac:BillingReference>
   <cac:Signature>
      <cbc:ID>IDSignST</cbc:ID>
      <cac:SignatoryParty>
         <cac:PartyIdentification>
            <cbc:ID>%RUC%</cbc:ID>
         </cac:PartyIdentification>
         <cac:PartyName>
            <cbc:Name>%RSOCIAL%</cbc:Name>
         </cac:PartyName>
      </cac:SignatoryParty>
      <cac:DigitalSignatureAttachment>
         <cac:ExternalReference>
            <cbc:URI>#SignatureSP</cbc:URI>
         </cac:ExternalReference>
      </cac:DigitalSignatureAttachment>
   </cac:Signature>
   <cac:AccountingSupplierParty>
      <cac:Party>
         <cac:PartyIdentification>
            <cbc:ID schemeID="6" schemeName="Documento de Identidad" schemeAgencyName="PE:SUNAT" schemeURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo06">%RUC%</cbc:ID>
         </cac:PartyIdentification>
         <cac:PartyName>
            <cbc:Name>%NCOMERC%</cbc:Name>
         </cac:PartyName>
         <cac:PartyLegalEntity>
            <cbc:RegistrationName>%RSOCIAL%</cbc:RegistrationName>
            <cac:RegistrationAddress>
            	<cbc:AddressTypeCode listAgencyName="PE:SUNAT" listName="Establecimientos anexos">%IDLOCAL%</cbc:AddressTypeCode>
            </cac:RegistrationAddress>
         </cac:PartyLegalEntity>
      </cac:Party>
   </cac:AccountingSupplierParty>

   <cac:AccountingCustomerParty>
      <cac:Party>
         <cac:PartyIdentification>
            <cbc:ID schemeID="%CIDDOCUMENTO%" schemeName="Documento de Identidad" schemeAgencyName="PE:SUNAT" schemeURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo06">%CNUMDOCUMENTO%</cbc:ID>
         </cac:PartyIdentification>
         <cac:PartyLegalEntity>
            <cbc:RegistrationName>%CRSOCIAL%</cbc:RegistrationName>
         </cac:PartyLegalEntity>
      </cac:Party>
   </cac:AccountingCustomerParty>


   <cac:TaxTotal>
      <cbc:TaxAmount currencyID="%IDMONEDATIPO%">%TOTALIMPUESTOS%</cbc:TaxAmount>
%OPTBASE1000%
      <cac:TaxSubtotal>
         <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%BASE1000%</cbc:TaxableAmount>
         <cbc:TaxAmount currencyID="%IDMONEDATIPO%">%VALOR1000%</cbc:TaxAmount>
         <cac:TaxCategory>
            <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">S</cbc:ID>
            <cac:TaxScheme>
               <cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">1000</cbc:ID>
               <cbc:Name>IGV</cbc:Name>
               <cbc:TaxTypeCode>VAT</cbc:TaxTypeCode>
            </cac:TaxScheme>
         </cac:TaxCategory>
      </cac:TaxSubtotal>
%OPTBASE1000%
%OPTBASE2000%
      <cac:TaxSubtotal>
         <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%BASE2000%</cbc:TaxableAmount>
         <cbc:TaxAmount currencyID="%IDMONEDATIPO%">%VALOR2000%</cbc:TaxAmount>
         <cac:TaxCategory>
            <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">S</cbc:ID>
            <cac:TaxScheme>
               <cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">2000</cbc:ID>
               <cbc:Name>ISC</cbc:Name>
               <cbc:TaxTypeCode>EXC</cbc:TaxTypeCode>
            </cac:TaxScheme>
         </cac:TaxCategory>
      </cac:TaxSubtotal>
%OPTBASE2000%
%OPTBASE9995%
      <cac:TaxSubtotal>
         <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%BASE9995%</cbc:TaxableAmount>
         <cbc:TaxAmount currencyID="%IDMONEDATIPO%">0.00</cbc:TaxAmount>
         <cac:TaxCategory>
            <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">G</cbc:ID>
            <cac:TaxScheme>
               <cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">9995</cbc:ID>
               <cbc:Name>EXP</cbc:Name>
               <cbc:TaxTypeCode>FRE</cbc:TaxTypeCode>
            </cac:TaxScheme>
         </cac:TaxCategory>
      </cac:TaxSubtotal>
%OPTBASE9995%
%OPTBASE9996%
      <cac:TaxSubtotal>
         <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%BASE9996%</cbc:TaxableAmount>
         <cbc:TaxAmount currencyID="%IDMONEDATIPO%">0.00</cbc:TaxAmount>
         <cac:TaxCategory>
            <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">Z</cbc:ID>
            <cac:TaxScheme>
               <cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">9996</cbc:ID>
               <cbc:Name>GRA</cbc:Name>
               <cbc:TaxTypeCode>FRE</cbc:TaxTypeCode>
            </cac:TaxScheme>
         </cac:TaxCategory>
      </cac:TaxSubtotal>
%OPTBASE9996%
%OPTBASE9997%
      <cac:TaxSubtotal>
         <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%BASE9997%</cbc:TaxableAmount>
         <cbc:TaxAmount currencyID="%IDMONEDATIPO%">0.00</cbc:TaxAmount>
         <cac:TaxCategory>
            <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">E</cbc:ID>
            <cac:TaxScheme>
               <cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">9997</cbc:ID>
               <cbc:Name>EXO</cbc:Name>
               <cbc:TaxTypeCode>VAT</cbc:TaxTypeCode>
            </cac:TaxScheme>
         </cac:TaxCategory>
      </cac:TaxSubtotal>
%OPTBASE9997%
%OPTBASE9998%
      <cac:TaxSubtotal>
         <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%BASE9998%</cbc:TaxableAmount>
         <cbc:TaxAmount currencyID="%IDMONEDATIPO%">0.00</cbc:TaxAmount>
         <cac:TaxCategory>
            <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">O</cbc:ID>
            <cac:TaxScheme>
               <cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">9998</cbc:ID>
               <cbc:Name>INA</cbc:Name>
               <cbc:TaxTypeCode>FRE</cbc:TaxTypeCode>
            </cac:TaxScheme>
         </cac:TaxCategory>
      </cac:TaxSubtotal>
%OPTBASE9998%
%OPTBASE9999%
      <cac:TaxSubtotal>
         <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%BASE9999%</cbc:TaxableAmount>
         <cbc:TaxAmount currencyID="%IDMONEDATIPO%">0.00</cbc:TaxAmount>
         <cac:TaxCategory>
            <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">S</cbc:ID>
            <cac:TaxScheme>
               <cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">9999</cbc:ID>
               <cbc:Name>OTROS</cbc:Name>
               <cbc:TaxTypeCode>OTH</cbc:TaxTypeCode>
            </cac:TaxScheme>
         </cac:TaxCategory>
      </cac:TaxSubtotal>
%OPTBASE9999%
   </cac:TaxTotal>



   <cac:LegalMonetaryTotal>
      <cbc:PayableAmount currencyID="%IDMONEDATIPO%">%TOTALPAGAR%</cbc:PayableAmount>
   </cac:LegalMonetaryTotal>


%OPTITEM%
   <cac:CreditNoteLine>
      <cbc:ID>%ORDEN%</cbc:ID>
      <cbc:CreditedQuantity unitCode="%IDMEDIDATIPO%" unitCodeListID="UN/ECE rec 20" unitCodeListAgencyName="United Nations Economic Commission for Europe">%CANTIDAD%</cbc:CreditedQuantity>
      <cbc:LineExtensionAmount currencyID="%IDMONEDATIPO%">%ITEMCARGOBASE%</cbc:LineExtensionAmount>
      <cac:PricingReference>
         <cac:AlternativeConditionPrice>
            <cbc:PriceAmount currencyID="%IDMONEDATIPO%">%PRECIOVENTA%</cbc:PriceAmount>
            <cbc:PriceTypeCode listName="SUNAT:Indicador de Tipo de Precio" listAgencyName="PE:SUNAT" listURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo16">%IDPRECIOUNITARIOTIPO%</cbc:PriceTypeCode>
         </cac:AlternativeConditionPrice>
      </cac:PricingReference>

      <cac:TaxTotal>
         <cbc:TaxAmount currencyID="%IDMONEDATIPO%">%ITEMTOTALIMPUESTO%</cbc:TaxAmount>
%OPTITEM1000%
         <cac:TaxSubtotal>
            <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%ITEMBASE1000%</cbc:TaxableAmount>
            <cbc:TaxAmount currencyID="%IDMONEDATIPO%">%ITEMVALOR1000%</cbc:TaxAmount>
            <cac:TaxCategory>
               <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">S</cbc:ID>
               <cbc:Percent>%IGVFACTOR%</cbc:Percent>
               <cbc:TaxExemptionReasonCode listAgencyName="PE:SUNAT" listName="SUNAT:Codigo de Tipo de Afectacion del IGV" listURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo07">%IDIGVTIPO%</cbc:TaxExemptionReasonCode>
               <cac:TaxScheme>
                  <cbc:ID schemeID="UN/ECE 5153" schemeName="Tax Scheme Identifier" schemeAgencyName="United Nations Economic Commission for Europe">1000</cbc:ID>
                  <cbc:Name>IGV</cbc:Name>
                  <cbc:TaxTypeCode>VAT</cbc:TaxTypeCode>
               </cac:TaxScheme>
            </cac:TaxCategory>
         </cac:TaxSubtotal>
%OPTITEM1000%
%OPTITEM2000%
         <cac:TaxSubtotal>
            <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%ITEMBASE2000%</cbc:TaxableAmount>
            <cbc:TaxAmount currencyID="%IDMONEDATIPO%">%ITEMVALOR2000%</cbc:TaxAmount>
            <cac:TaxCategory>
               <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">S</cbc:ID>
               <cbc:Percent>%ISCFACTOR%</cbc:Percent>
               <cbc:TierRange>%IDISCTIPO%</cbc:TierRange>
               <cac:TaxScheme>
                  <cbc:ID schemeID="UN/ECE 5153" schemeName="Tax Scheme Identifier" schemeAgencyName="United Nations Economic Commission for Europe">2000</cbc:ID>
                  <cbc:Name>ISC</cbc:Name>
                  <cbc:TaxTypeCode>EXC</cbc:TaxTypeCode>
               </cac:TaxScheme>
            </cac:TaxCategory>
         </cac:TaxSubtotal>
%OPTITEM2000%
%OPTITEM9996%
         <cac:TaxSubtotal>
            <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">0.00</cbc:TaxableAmount>
            <cbc:TaxAmount currencyID="%IDMONEDATIPO%">0.00</cbc:TaxAmount>
            <cac:TaxCategory>
               <cbc:ID>Z</cbc:ID>
               <cbc:Percent>%IGVFACTOR%</cbc:Percent>
               <cbc:TaxExemptionReasonCode listAgencyName="PE:SUNAT" listName="SUNAT:Codigo de Tipo de Afectacion del IGV" listURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo07">%IDIGVTIPO%</cbc:TaxExemptionReasonCode>
               <cac:TaxScheme>
                  <cbc:ID>9996</cbc:ID>
                  <cbc:Name>GRA</cbc:Name>
                  <cbc:TaxTypeCode>FRE</cbc:TaxTypeCode>
               </cac:TaxScheme>
            </cac:TaxCategory>
         </cac:TaxSubtotal>
%OPTITEM9996%
%OPTITEM9997%
         <cac:TaxSubtotal>
            <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%ITEMBASE9997%</cbc:TaxableAmount>
            <cbc:TaxAmount currencyID="%IDMONEDATIPO%">0.00</cbc:TaxAmount>
            <cac:TaxCategory>
               <cbc:ID>E</cbc:ID>
               <cbc:Percent>%IGVFACTOR%</cbc:Percent>
               <cbc:TaxExemptionReasonCode listAgencyName="PE:SUNAT" listName="SUNAT:Codigo de Tipo de Afectacion del IGV" listURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo07">%IDIGVTIPO%</cbc:TaxExemptionReasonCode>
               <cac:TaxScheme>
                  <cbc:ID>9997</cbc:ID>
                  <cbc:Name>EXO</cbc:Name>
                  <cbc:TaxTypeCode>VAT</cbc:TaxTypeCode>
               </cac:TaxScheme>
            </cac:TaxCategory>
         </cac:TaxSubtotal>
%OPTITEM9997%
%OPTITEM9998%
         <cac:TaxSubtotal>
            <cbc:TaxableAmount currencyID="%IDMONEDATIPO%">%ITEMBASE9998%</cbc:TaxableAmount>
            <cbc:TaxAmount currencyID="%IDMONEDATIPO%">0.00</cbc:TaxAmount>
            <cac:TaxCategory>
               <cbc:ID>0</cbc:ID>
               <cbc:Percent>%IGVFACTOR%</cbc:Percent>
               <cbc:TaxExemptionReasonCode listAgencyName="PE:SUNAT" listName="SUNAT:Codigo de Tipo de Afectacion del IGV" listURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo07">%IDIGVTIPO%</cbc:TaxExemptionReasonCode>
               <cac:TaxScheme>
                  <cbc:ID>9998</cbc:ID>
                  <cbc:Name>INA</cbc:Name>
                  <cbc:TaxTypeCode>FRE</cbc:TaxTypeCode>
               </cac:TaxScheme>
            </cac:TaxCategory>
         </cac:TaxSubtotal>
%OPTITEM9998%
      </cac:TaxTotal>
      <cac:Item>
         <cbc:Description>%DESCRIPCION%</cbc:Description>
         <cac:SellersItemIdentification>
            <cbc:ID>%CODIGO%</cbc:ID>
         </cac:SellersItemIdentification>
      </cac:Item>
      <cac:Price>
         <cbc:PriceAmount currencyID="%IDMONEDATIPO%">%ITEMUNITARIO%</cbc:PriceAmount>
      </cac:Price>
   </cac:CreditNoteLine>
%OPTITEM%

</CreditNote>
