diff --git a/facho/fe/fe.py b/facho/fe/fe.py
index 39de2b8..42bc41d 100644
--- a/facho/fe/fe.py
+++ b/facho/fe/fe.py
@@ -1,6 +1,7 @@
# This file is part of facho. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
+from lxml.builder import E
from ..facho import FachoXML, FachoXMLExtension, LXMLBuilder
import uuid
import xmlsig
@@ -32,24 +33,25 @@ POLICY_NAME = u'Política de firma para facturas electrónicas de la República
NAMESPACES = {
- 'atd': 'urn:oasis:names:specification:ubl:schema:xsd:AttachedDocument-2',
- 'no': 'dian:gov:co:facturaelectronica:NominaIndividual',
- 'fe': 'http://www.dian.gov.co/contratos/facturaelectronica/v1',
+ #'atd': 'urn:oasis:names:specification:ubl:schema:xsd:AttachedDocument-2',
+ #'no': 'dian:gov:co:facturaelectronica:NominaIndividual',
+ 'noa': 'dian:gov:co:facturaelectronica:NominaIndividualDeAjuste',
+ # 'fe': 'http://www.dian.gov.co/contratos/facturaelectronica/v1',
'xs': 'http://www.w3.org/2001/XMLSchema-instance',
- 'cac': 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2',
- 'cbc': 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2',
- 'cdt': 'urn:DocumentInformation:names:specification:ubl:colombia:schema:xsd:DocumentInformationAggregateComponents-1',
- 'clm54217': 'urn:un:unece:uncefact:codelist:specification:54217:2001',
- 'clmIANAMIMEMediaType': 'urn:un:unece:uncefact:codelist:specification:IANAMIMEMediaType:2003',
+ # 'cac': 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2',
+ #'cbc': 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2',
+ # 'cdt': 'urn:DocumentInformation:names:specification:ubl:colombia:schema:xsd:DocumentInformationAggregateComponents-1',
+ # 'clm54217': 'urn:un:unece:uncefact:codelist:specification:54217:2001',
+ # 'clmIANAMIMEMediaType': 'urn:un:unece:uncefact:codelist:specification:IANAMIMEMediaType:2003',``
'ext': 'urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2',
- 'qdt': 'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2',
- 'sts': 'dian:gov:co:facturaelectronica:Structures-2-1',
- 'udt': 'urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2',
- 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
- 'xades': 'http://uri.etsi.org/01903/v1.3.2#',
- 'xades141': 'http://uri.etsi.org/01903/v1.4.1#',
- 'ds': 'http://www.w3.org/2000/09/xmldsig#',
- 'sig': 'http://www.w3.org/2000/09/xmldsig#',
+ # 'qdt': 'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2',
+ # 'sts': 'dian:gov:co:facturaelectronica:Structures-2-1',
+ # 'udt': 'urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2',
+ 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
+ 'xades': 'http://uri.etsi.org/01903/v1.3.2#',
+ 'xades141': 'http://uri.etsi.org/01903/v1.4.1#',
+ 'ds': 'http://www.w3.org/2000/09/xmldsig#',
+ #'sig': 'http://www.w3.org/2000/09/xmldsig#',
}
def fe_from_string(document: str) -> FachoXML:
@@ -77,7 +79,6 @@ def mock_xades_policy():
class FeXML(FachoXML):
def __init__(self, root, namespace):
-
super().__init__("{%s}%s" % (namespace, root),
nsmap=NAMESPACES)
@@ -88,8 +89,8 @@ class FeXML(FachoXML):
def tostring(self, **kw):
# MACHETE(bit4bit) la DIAN espera que la etiqueta raiz no este en un namespace
return super().tostring(**kw)\
- .replace("fe:", "")\
- .replace("xmlns:no", "xmlns")\
+ .replace("noa:", "")\
+ .replace("xmlns:noa", "xmlns")\
.replace("change", "xsi:schemaLocation")
diff --git a/facho/fe/nomina/__init__.py b/facho/fe/nomina/__init__.py
index 5baaf57..1e08fda 100644
--- a/facho/fe/nomina/__init__.py
+++ b/facho/fe/nomina/__init__.py
@@ -250,7 +250,7 @@ class InformacionGeneral:
# NIE202
# TABLA 5.5.2
# TODO(bit4bit) solo NominaIndividual
- TipoXML = '102',
+ TipoXML = '103',
# NIE024
CUNE = None,
# NIE025
@@ -313,11 +313,30 @@ class DIANNominaXML:
self.informacion_general_version = None
self.tag_document = tag_document
- self.fexml = fe.FeXML(tag_document, 'http://www.dian.gov.co/contratos/facturaelectronica/v1')
+ self.fexml = fe.FeXML(tag_document, "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste")
if schemaLocation is not None:
- self.fexml.root.set("SchemaLocation", "")
+ self.fexml.root.set(
+ "SchemaLocation",
+ "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste NominaIndividualDeAjusteElectronicaXSD.xsd"
+ )
self.fexml.root.set("change", schemaLocation)
+ else:
+ schemaLocation = "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste NominaIndividualDeAjusteElectronicaXSD.xsd"
+ self.fexml.root.set(
+ "SchemaLocation", "")
+ self.fexml.root.set(
+ "change", schemaLocation)
+
+
+
+
+ # self.fexml.root.set(
+ # "SchemaLocation",
+ # "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste NominaIndividualDeAjusteElectronicaXSD.xsd"
+ #)
+ # self.fexml.root.set("change", schemaLocation)
+
# layout, la dian requiere que los elementos
# esten ordenados segun el anexo tecnico
@@ -538,14 +557,11 @@ class DIANNominaXML:
class DIANNominaIndividual(DIANNominaXML):
def __init__(self):
- schema = "dian:gov:co:facturaelectronica:NominaIndividual NominaIndividualElectronicaXSD.xsd"
-
super().__init__('NominaIndividual', schemaLocation=schema)
self.informacion_general_version = 'V1.0: Documento Soporte de Pago de Nómina Electrónica'
# TODO(bit4bit) confirmar que no tienen en comun con NominaIndividual
class DIANNominaIndividualDeAjuste(DIANNominaXML):
-
class Reemplazar(DIANNominaXML):
@dataclass
class Predecesor:
@@ -554,6 +570,7 @@ class DIANNominaIndividualDeAjuste(DIANNominaXML):
fecha_generacion: str
def apply(self, fragment):
+ fragment.set_element('./TipoNota', '1')
fragment.set_element('./Reemplazar/ReemplazandoPredecesor', None,
# NIAE090
NumeroPred = self.numero,
@@ -566,7 +583,7 @@ class DIANNominaIndividualDeAjuste(DIANNominaXML):
def __init__(self):
super().__init__('NominaIndividualDeAjuste', './Reemplazar')
# NIAE214
- self.root_fragment.set_element('./TipoNota', '1')
+ # self.root_fragment.set_element('./TipoNota', '1')
def asignar_predecesor(self, predecesor):
if not isinstance(predecesor, self.Predecesor):
@@ -583,6 +600,7 @@ class DIANNominaIndividualDeAjuste(DIANNominaXML):
fecha_generacion: str
def apply(self, fragment):
+ fragment.set_element('./TipoNota', '2')
fragment.set_element('./Eliminar/EliminandoPredecesor', None,
# NIAE090
NumeroPred = self.numero,
@@ -593,16 +611,17 @@ class DIANNominaIndividualDeAjuste(DIANNominaXML):
)
def __init__(self):
+ schema = "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste NominaIndividualDeAjusteElectronicaXSD.xsd"
super().__init__('NominaIndividualDeAjuste', './Eliminar')
- self.root_fragment.set_element('./TipoNota', '2')
+ # self.root_fragment.set_element('./TipoNota', '2')
self.informacion_general_version = "V1.0: Nota de Ajuste de Documento Soporte de Pago de Nómina Electrónica"
def asignar_predecesor(self, predecesor):
if not isinstance(predecesor, self.Predecesor):
raise ValueError("se espera tipo Eliminar.Predecesor")
predecesor.apply(self.fexml)
-
- def __init__(self):
- super().__init__('NominaIndividualDeAjuste')
+ def __init__(self):
+ schema = "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste NominaIndividualDeAjusteElectronicaXSD.xsd"
+ super().__init__('NominaIndividualDeAjuste')
diff --git a/scrips/AJU00001.py b/scrips/AJU00001.py
new file mode 100644
index 0000000..3154f18
--- /dev/null
+++ b/scrips/AJU00001.py
@@ -0,0 +1,129 @@
+
+from facho import fe
+
+SOFTWARE_PIN='20234'
+SOFTWARE_ID='100b0d10-0ca0-4ad4-a894-b704a568cbf3'
+NIT='901575528'
+DV='2'
+
+def extensions(nomina):
+ return []
+
+def nomina():
+ nomina = fe.nomina.DIANNominaIndividualDeAjuste.Eliminar()
+
+ nomina.asignar_predecesor(fe.nomina.DIANNominaIndividualDeAjuste.Eliminar.Predecesor(
+ numero='A000001',
+ fecha_generacion='2025-03-23',
+ cune = '38e3a0863b2cc46e0746d0d97d0b305125292f24c0e478f9dd4f4a097c4403ae4e52d96d90f8b5702fc5eac8bc71004b',
+ ))
+
+ # nomina.asignar_fecha_pago('2024-04-30')
+
+ nomina.asignar_metadata(fe.nomina.Metadata(
+ novedad=fe.nomina.Novedad(False),
+ secuencia=fe.nomina.NumeroSecuencia(
+ prefijo='AJU',
+ consecutivo='00001'
+ ),
+ lugar_generacion=fe.nomina.Lugar(
+ pais = fe.nomina.Pais(
+ code = 'CO'
+ ),
+ departamento = fe.nomina.Departamento(
+ code = '05'
+ ),
+ municipio = fe.nomina.Municipio(
+ code = '05001'
+ ),
+ ),
+ proveedor=fe.nomina.Proveedor(
+ razon_social='BICI PIZZA S.A.S',
+ nit=NIT,
+ dv=DV,
+ software_id=SOFTWARE_ID,
+ software_pin=SOFTWARE_PIN
+ )
+ ))
+
+ nomina.asignar_periodo(fe.nomina.Periodo(
+ fecha_ingreso= '2022-01-05',
+ fecha_liquidacion_inicio='2024-04-01',
+ fecha_liquidacion_fin='2024-04-30',
+ fecha_generacion='2024-04-30'
+ ))
+
+ nomina.asignar_informacion_general(fe.nomina.InformacionGeneral(
+ fecha_generacion = '2024-04-30',
+ hora_generacion = '08:01:00-05:00',
+ tipo_ambiente = fe.nomina.InformacionGeneral.AMBIENTE_PRUEBAS,
+ software_pin = SOFTWARE_PIN,
+ periodo_nomina = fe.nomina.PeriodoNomina(code='1'),
+ tipo_moneda = fe.nomina.TipoMoneda(code='COP')
+ ))
+
+ nomina.asignar_pago(fe.nomina.Pago(
+ forma=fe.nomina.FormaPago(
+ code='1',
+ ),
+ metodo=fe.nomina.MetodoPago(
+ code='10'
+ )
+ ))
+ nomina.asignar_empleador(fe.nomina.Empleador(
+ razon_social='BICI PIZZA S.A.S',
+ nit = NIT,
+ dv = DV,
+ pais = fe.nomina.Pais(
+ code = 'CO'
+ ),
+ departamento = fe.nomina.Departamento(
+ code = '05'
+ ),
+ municipio = fe.nomina.Municipio(
+ code = '05001'
+ ),
+ direccion = 'calle etrivial'
+ ))
+
+ nomina.asignar_trabajador(fe.nomina.Trabajador(
+ tipo_contrato = fe.nomina.TipoContrato(
+ code = '1'
+ ),
+ alto_riesgo = False,
+ tipo_documento = fe.nomina.TipoDocumento(
+ code = '11'
+ ),
+ primer_apellido = 'GONZALEZ',
+ segundo_apellido = '',
+ primer_nombre = 'JUAN',
+ lugar_trabajo = fe.nomina.LugarTrabajo(
+ pais = fe.nomina.Pais(code='CO'),
+ departamento = fe.nomina.Departamento(code='05'),
+ municipio = fe.nomina.Municipio(code='05001'),
+ direccion = 'CL 35C 102-17 BL 7 AP 101'
+ ),
+ numero_documento = NIT,
+ tipo = fe.nomina.TipoTrabajador(
+ code = '01'
+ ),
+ salario_integral = False,
+ sueldo = fe.nomina.Amount(2400000)
+ ))
+
+ nomina.adicionar_devengado(fe.nomina.DevengadoBasico(
+ dias_trabajados = 30,
+ sueldo_trabajado = fe.nomina.Amount(2400000)
+ ))
+
+ nomina.adicionar_deduccion(fe.nomina.DeduccionSalud(
+ porcentaje = fe.nomina.Amount(4),
+ deduccion = fe.nomina.Amount(96000)
+ ))
+
+ nomina.adicionar_deduccion(fe.nomina.DeduccionFondoPension(
+ porcentaje=fe.nomina.Amount(4),
+ deduccion = fe.nomina.Amount(96000)
+ ))
+ return nomina
+
diff --git a/scrips/AJU00001.xml b/scrips/AJU00001.xml
new file mode 100644
index 0000000..53a174b
--- /dev/null
+++ b/scrips/AJU00001.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+v3gLXFVP20p3X5RTkooSR2z/9jmFi4R6YbPQlKHLRwo=
+
+
+
+4vxQuFc85SS7cssuTdGgdTC/9qxq5XFRvGMQDp+1xeM=
+
+
+
+
+
+
+CRSEul95G+Fqlnj1I1vKAj4c2HRsHJgpqcsYs+JJd/4=
+
+
+O6ZPJ5b6iosFTKFV0CBoAAJqeQ3XmI73tKILKe5OG7idjWjVDKSlwVNOpTMw3uaM
+qPt95yAzEYcy6f1NiHE5I6DhwmJhrpUJ1RlJZkSm0RAH4YUIWBStue+MbZIcPZqx
+7TKS3O80DIGlZGAhn7MpP1AfevHD42ubDzLeVPM8dA205ZV6htmuknBO1rhNy7Te
+J4ph/bk8eJc5N2d33ImlTJv32zc1Yyg4Vg7i6BbL2ngduRlPLoaac2VEDKs7JJxp
+RZJi3N9e5RLkpzK5s+5+1tvHFf19yKR+zvGfb5i8GzKK/a5WPJ2aDYAtLuvUvLum
+VmU3yzMVKAIAhsU8aa+E8w==
+
+
+MIIH8TCCBdmgAwIBAgIIQxaPJd4YTlMwDQYJKoZIhvcNAQELBQAwgbYxIzAhBgkq
+hkiG9w0BCQEWFGluZm9AYW5kZXNzY2QuY29tLmNvMSYwJAYDVQQDEx1DQSBBTkRF
+UyBTQ0QgUy5BLiBDbGFzZSBJSSB2MzEwMC4GA1UECxMnRGl2aXNpb24gZGUgY2Vy
+dGlmaWNhY2lvbiBlbnRpZGFkIGZpbmFsMRIwEAYDVQQKEwlBbmRlcyBTQ0QxFDAS
+BgNVBAcTC0JvZ290YSBELkMuMQswCQYDVQQGEwJDTzAeFw0yNDA1MTYwNTAwMDBa
+Fw0yNTA1MTYwNDU5MDBaMIIBQDEtMCsGA1UECRMkVFYgNDYgQyA0MiBFU1RFIDc4
+OSBDT1JSIFNBTlRBIEVMRU5BMSIwIAYJKoZIhvcNAQkBFhNiaWNpcGl6emFAZ21h
+aWwuY29tMRowGAYDVQQDExFCSUNJIFBJWlpBIFMuQS5TLjETMBEGA1UEBRMKOTAx
+NTc1NTI4MjE2MDQGA1UEDBMtRW1pc29yIEZhY3R1cmEgRWxlY3Ryb25pY2EgLSBQ
+ZXJzb25hIEp1cmlkaWNhMTswOQYDVQQLEzJFbWl0aWRvIHBvciBBbmRlcyBTQ0Qg
+QWMgMjYgNjkgQyAwMyBUb3JyZSBCIE9mIDcwMTEQMA4GA1UEChMHR0VSRU5URTES
+MBAGA1UEBwwJTUVERUxMw41OMRIwEAYDVQQIEwlBTlRJT1FVSUExCzAJBgNVBAYT
+AkNPMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5J1O+4ZedrSBUsb+
+9tjNPHI9RGeIJcJl3Wc/208OqMYcCwGLUkrYBgH78E7IayD5/wra04OU57cS1/+/
+yBUWYR60oqkaH2/8OXkJMqmjisVM/b58m7zyMw4TAF8N/PbswnrKukFU2acxISwT
+Lu36HC4hshWw8bEGP54szvv1xnwqcOAWNBCxcBuc9k1JD+SIiqqPwHKh+6EDIoou
+jo0H15w3rAxkHQRvYe6/IrpvH2sqJl1I3dLv0iqy9+d2l891KBA9Yebdw7m/+ufu
++eqs+0zKrwV6QLhRFmceHzEkPMTFepc2COGf80OUNbI6WWnspvDK97D8YG0MeifP
+YveIPwIDAQABo4ICdDCCAnAwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRA/iZp
+RzInMtGsIcgu7M+N1TVo6DBvBggrBgEFBQcBAQRjMGEwNgYIKwYBBQUHMAKGKmh0
+dHA6Ly9jZXJ0cy5hbmRlc3NjZC5jb20uY28vQ2xhc2VJSXYzLmNydDAnBggrBgEF
+BQcwAYYbaHR0cDovL29jc3AuYW5kZXNzY2QuY29tLmNvMB4GA1UdEQQXMBWBE2Jp
+Y2lwaXp6YUBnbWFpbC5jb20wggEjBgNVHSAEggEaMIIBFjCBwQYNKwYBBAGB9EgB
+AgYIADCBrzCBrAYIKwYBBQUHAgIwgZ8MgZxMYSB1dGlsaXphY2nDs24gZGUgZXN0
+ZSBjZXJ0aWZpY2FkbyBlc3TDoSBzdWpldGEgYSBsYSBQQyBkZSBGYWN0dXJhY2nD
+s24gRWxlY3Ryw7NuaWNhIHkgRFBDIGVzdGFibGVjaWRhcyBwb3IgQW5kZXMgU0NE
+LiBDw7NkaWdvIGRlIEFjcmVkaXRhY2nDs246IDE2LUVDRC0wMDQwUAYNKwYBBAGB
+9EgBAQEKADA/MD0GCCsGAQUFBwIBFjFodHRwczovL3d3dy5hbmRlc3NjZC5jb20u
+Y28vZG9jcy9EUENfQW5kZXNTQ0QucGRmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggr
+BgEFBQcDBDA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLmFuZGVzc2NkLmNv
+bS5jby9DbGFzZUlJdjMuY3JsMB0GA1UdDgQWBBRKPoh3BJM7SxEL0UXkSne2MyFO
+jjAOBgNVHQ8BAf8EBAMCBeAwDQYJKoZIhvcNAQELBQADggIBAA6Zzor3kpJ6vNKv
+TAeHaMfmJ/PaghQ1+Lab7Pwk+lsPsMETFu/IpEK5qij2bV54UNnqyLYOZtIbnWTG
+qgT7QxQvy+/of/I3zzF+kH4/Lp2TSlHaDEb/airCZ3I2G23M9iaZzSwYuOsOaGwp
+4ovkXlYwQ7FVNfIIoAq95m9cBAigb06bRIlVBVTQq44hQFQQG6aSIT7SSPtCwPhB
+5CJzG09pmgbxizqN/yxdjWdfW6Av79dh6K4uQT++Vtyp5DuAkmfn0ehayrUbDLkH
+9jQFF128U5pnOPfKWf22acXqQBapesUSV/HZUZ3PXoWeHWXcMdz0azxOEunS4+px
+fs5UzInRAmEcYwJHqJT3irFz+J2RsZ0WnJHrTGqFoXniQQH8QbCHehDTGN7/v/v1
+LQBr5PQBnSEWhmrQ9uFrwPyMMg3yd+L75TaHLZ0MTSVezAG52oM9jBiU5tYXkSio
+EfPdIsGlG74BybULGSG2OlTINlblj/lj7pL67V+gY9EGN1zzNKL5sW4YXlXewa6K
+dTpLmmzWzI8Cm+tOuuJDSHSwMjn525O+Z/oyKLjdQdyfg1KnZYwNZFpMmCwfP5nd
+cm4F7Anzb9HX9ciluAxc6as9TsNoDDTSAGPuUr0QvXqXd9ZCgXdNzdFeiaYknLP5
+hT4f5CoO2M8qcG+CH7HnkaOHrSuK
+
+
+
+5J1O+4ZedrSBUsb+9tjNPHI9RGeIJcJl3Wc/208OqMYcCwGLUkrYBgH78E7IayD5
+/wra04OU57cS1/+/yBUWYR60oqkaH2/8OXkJMqmjisVM/b58m7zyMw4TAF8N/Pbs
+wnrKukFU2acxISwTLu36HC4hshWw8bEGP54szvv1xnwqcOAWNBCxcBuc9k1JD+SI
+iqqPwHKh+6EDIooujo0H15w3rAxkHQRvYe6/IrpvH2sqJl1I3dLv0iqy9+d2l891
+KBA9Yebdw7m/+ufu+eqs+0zKrwV6QLhRFmceHzEkPMTFepc2COGf80OUNbI6WWns
+pvDK97D8YG0MeifPYveIPw==
+AQAB
+
+
+
+2025-04-13T18:25:09.305178YcIPspAVFcNg+B/galYrdCLYvLIEwFI4KWdSzcuupPY=C=CO, L=Bogota D.C., O=Andes SCD, OU=Division de certificacion entidad final, CN=CA ANDES SCD S.A. Clase II v3, OID.1.2.840.113549.1.9.1=info@andesscd.com.co4834208642831502931https://facturaelectronica.dian.gov.co/politicadefirma/v2/politicadefirmav2.pdfPolítica de firma para facturas electrónicas de la República de Colombia.dMoMvtcG5aIzgYo0tIsSQeVJBDnUnfSOfBpxXrmor0Y=supplier2falsehttps://catalogo-vpfe-hab.dian.gov.co/document/searchqr?documentkey=19a695aad7a8fa12c4c2c4c07dbed5a5daf39ba43b333503cc23a1c7a09295ddf222c0e278762ca67a48874e9c68efc602400000.00192000.002208000.00
\ No newline at end of file
diff --git a/scrips/AJU00001.zip b/scrips/AJU00001.zip
new file mode 100644
index 0000000..fdb7bbf
Binary files /dev/null and b/scrips/AJU00001.zip differ
diff --git a/scrips/Certificado.pfx b/scrips/Certificado.pfx
new file mode 100644
index 0000000..7b6b58d
Binary files /dev/null and b/scrips/Certificado.pfx differ
diff --git a/scrips/nomina.csv b/scrips/nomina.csv
index aa28bf6..fbf83ae 100644
--- a/scrips/nomina.csv
+++ b/scrips/nomina.csv
@@ -1,3 +1 @@
-P,#,Nombre,P_Apellido,S_Apellido,Cédula,Dirección,Salario,Días,Salud,Pension,Aux Transpo,Sueldo,Fecha_pago,Fecha_Ingreso,Fecha_inicio,Fecha_fin,Fecha_generación,hora_generacion
-N,000005,JUAN,GONZALEZ,CARDONA,71380802,CL 35C 102-17 BL 7 AP 101,2400000,30,96000,96000,140606,2400000,2024-04-30,2022-01-05,2024-04-01,2024-04-30,2024-04-30,08:01:00
-N,000006,VIVIANA,GIRALDO,VASQUEZ,32257132,CL 35C 102-17 BL 7 AP 101,1160000,30,46400,46400,140606,1160000,2024-04-30,2022-09-05,2024-04-01,2024-04-30,2024-04-30,08:01:00
+N,0000011,JUAN,GONZALEZ,CARDONA,71380802,CL 35C 102-17 BL 7 AP 101,2400000,30,96000,96000,140606,2400000,2024-04-30,2022-01-05,2024-04-01,2024-04-30,2024-04-30,08:01:00``
diff --git a/scrips/nomina.sh b/scrips/nomina.sh
old mode 100644
new mode 100755
index 7b190b0..1a2777c
--- a/scrips/nomina.sh
+++ b/scrips/nomina.sh
@@ -13,7 +13,7 @@ LLAVE_PRIVADA='privada.pem'
LLAVE_PUBLICA='publica.pem'
CERTIFICADO='Certificado.pfx'
HABILITACION='True'
-ARCHIVO_CSV='nomina.csv'
+ARCHIVO_CSV='./nomina.csv'
IFS=,
while read line; do
@@ -39,7 +39,8 @@ while read line; do
Fin=${field[16]}
Generacion=${field[17]}
Hora=${field[18]}
-
+
+ echo ${Pago}
echo "
from facho import fe
diff --git a/scrips/nomina_ajuste.csv b/scrips/nomina_ajuste.csv
new file mode 100644
index 0000000..a1a0a40
--- /dev/null
+++ b/scrips/nomina_ajuste.csv
@@ -0,0 +1 @@
+AJU,00001,JUAN,GONZALEZ,CARDONA,71380802,CL 35C 102-17 BL 7 AP 101,2400000,30,96000,96000,140606,2400000,2024-04-30,2022-01-05,2024-04-01,2024-04-30,2024-04-30,08:01:00
diff --git a/scrips/nomina_ajuste.sh b/scrips/nomina_ajuste.sh
new file mode 100755
index 0000000..fe0ff6d
--- /dev/null
+++ b/scrips/nomina_ajuste.sh
@@ -0,0 +1,182 @@
+#!/bin/bash
+
+SOFTWARE_PIN='20234'
+SOFTWARE_ID='100b0d10-0ca0-4ad4-a894-b704a568cbf3'
+NIT='901575528'
+DV='2'
+TIPO_AMBIENTE='AMBIENTE_PRUEBAS'
+RAZON_SOCIAL='BICI PIZZA S.A.S'
+SET_PRUEBAS='be4d232c-9c7b-4542-b24d-6044c4e316ce'
+PASSPHARASE='7U3XbtZ76W'
+#La ruta donde se encuentren estos archivos
+LLAVE_PRIVADA='privada.pem'
+LLAVE_PUBLICA='publica.pem'
+CERTIFICADO='Certificado.pfx'
+HABILITACION='True'
+ARCHIVO_CSV='./nomina_ajuste.csv'
+
+IFS=,
+while read line; do
+
+ field=($line)
+
+ Prefijo=${field[0]}
+ Numero=${field[1]}
+ Nombre=${field[2]}
+ P_Apellido=${field[3]}
+ S_Apellifo=${field[4]}
+ Cedula=${field[5]}
+ Direccion=${field[6]}
+ Salario=${field[7]}
+ Sueldo=${field[12]}
+ Dias=${field[8]}
+ Salud=${field[9]}
+ Pension=${field[10]}
+ AuxTp=${field[11]}
+ Pago=${field[13]}
+ Ingreso=${field[14]}
+ Inicio=${field[15]}
+ Fin=${field[16]}
+ Generacion=${field[17]}
+ Hora=${field[18]}
+
+ echo ${Pago}
+ echo "
+from facho import fe
+
+SOFTWARE_PIN='${SOFTWARE_PIN}'
+SOFTWARE_ID='${SOFTWARE_ID}'
+NIT='${NIT}'
+DV='${DV}'
+
+def extensions(nomina):
+ return []
+
+def nomina():
+ nomina = fe.nomina.DIANNominaIndividualDeAjuste.Eliminar()
+
+ nomina.asignar_predecesor(fe.nomina.DIANNominaIndividualDeAjuste.Eliminar.Predecesor(
+ numero='A000001',
+ fecha_generacion='2025-03-23',
+ cune = '38e3a0863b2cc46e0746d0d97d0b305125292f24c0e478f9dd4f4a097c4403ae4e52d96d90f8b5702fc5eac8bc71004b',
+ ))
+
+ # nomina.asignar_fecha_pago('${Pago}')
+
+ nomina.asignar_metadata(fe.nomina.Metadata(
+ novedad=fe.nomina.Novedad(False),
+ secuencia=fe.nomina.NumeroSecuencia(
+ prefijo='${Prefijo}',
+ consecutivo='${Numero}'
+ ),
+ lugar_generacion=fe.nomina.Lugar(
+ pais = fe.nomina.Pais(
+ code = 'CO'
+ ),
+ departamento = fe.nomina.Departamento(
+ code = '05'
+ ),
+ municipio = fe.nomina.Municipio(
+ code = '05001'
+ ),
+ ),
+ proveedor=fe.nomina.Proveedor(
+ razon_social='${RAZON_SOCIAL}',
+ nit=NIT,
+ dv=DV,
+ software_id=SOFTWARE_ID,
+ software_pin=SOFTWARE_PIN
+ )
+ ))
+
+ nomina.asignar_periodo(fe.nomina.Periodo(
+ fecha_ingreso= '${Ingreso}',
+ fecha_liquidacion_inicio='${Inicio}',
+ fecha_liquidacion_fin='${Fin}',
+ fecha_generacion='${Generacion}'
+ ))
+
+ nomina.asignar_informacion_general(fe.nomina.InformacionGeneral(
+ fecha_generacion = '${Generacion}',
+ hora_generacion = '${Hora}-05:00',
+ tipo_ambiente = fe.nomina.InformacionGeneral.${TIPO_AMBIENTE},
+ software_pin = SOFTWARE_PIN,
+ periodo_nomina = fe.nomina.PeriodoNomina(code='1'),
+ tipo_moneda = fe.nomina.TipoMoneda(code='COP')
+ ))
+
+ nomina.asignar_pago(fe.nomina.Pago(
+ forma=fe.nomina.FormaPago(
+ code='1',
+ ),
+ metodo=fe.nomina.MetodoPago(
+ code='10'
+ )
+ ))
+ nomina.asignar_empleador(fe.nomina.Empleador(
+ razon_social='${RAZON_SOCIAL}',
+ nit = NIT,
+ dv = DV,
+ pais = fe.nomina.Pais(
+ code = 'CO'
+ ),
+ departamento = fe.nomina.Departamento(
+ code = '05'
+ ),
+ municipio = fe.nomina.Municipio(
+ code = '05001'
+ ),
+ direccion = 'calle etrivial'
+ ))
+
+ nomina.asignar_trabajador(fe.nomina.Trabajador(
+ tipo_contrato = fe.nomina.TipoContrato(
+ code = '1'
+ ),
+ alto_riesgo = False,
+ tipo_documento = fe.nomina.TipoDocumento(
+ code = '11'
+ ),
+ primer_apellido = '${P_Apellido}',
+ segundo_apellido = '${S_Apellido}',
+ primer_nombre = '${Nombre}',
+ lugar_trabajo = fe.nomina.LugarTrabajo(
+ pais = fe.nomina.Pais(code='CO'),
+ departamento = fe.nomina.Departamento(code='05'),
+ municipio = fe.nomina.Municipio(code='05001'),
+ direccion = '${Direccion}'
+ ),
+ numero_documento = NIT,
+ tipo = fe.nomina.TipoTrabajador(
+ code = '01'
+ ),
+ salario_integral = False,
+ sueldo = fe.nomina.Amount(${Sueldo})
+ ))
+
+ nomina.adicionar_devengado(fe.nomina.DevengadoBasico(
+ dias_trabajados = ${field[8]},
+ sueldo_trabajado = fe.nomina.Amount(${Salario})
+ ))
+
+ nomina.adicionar_deduccion(fe.nomina.DeduccionSalud(
+ porcentaje = fe.nomina.Amount(4),
+ deduccion = fe.nomina.Amount(${Salud})
+ ))
+
+ nomina.adicionar_deduccion(fe.nomina.DeduccionFondoPension(
+ porcentaje=fe.nomina.Amount(4),
+ deduccion = fe.nomina.Amount(${Pension})
+ ))
+ return nomina
+ " >"${Prefijo}${Numero}".py
+ facho generate-nomina --private-key ${CERTIFICADO} --passphrase ${PASSPHARASE} --use-cache-policy --sign "${field[0]}${field[1]}".py "${Prefijo}${Numero}".xml
+ CUNE=$(grep -oP "(.*)" "${Prefijo}${Numero}".xml | sed -n 's/.*documentkey=\([^<]*\)<\/CodigoQR>.*/\1/p')
+ zip "${field[0]}${field[1]}".zip "${field[0]}${field[1]}".xml
+ if [ "$HABILITACION" == "True" ]; then
+ facho soap-send-test-set-async --private-key ${LLAVE_PRIVADA} --public-key ${LLAVE_PUBLICA} --habilitacion --password ${PASSPHARASE} --test-setid ${SET_PRUEBAS} "${field[0]}${field[1]}".xml "${field[0]}${field[1]}".zip
+ else
+ facho soap-send-nomina-sync --private-key ${LLAVE_PRIVADA} --public-key ${LLAVE_PUBLICA} --password ${PASSPHARASE} "${field[0]}${field[1]}".xml "${field[0]}${field[1]}".zip --produccion
+ fi
+
+done <${ARCHIVO_CSV}
diff --git a/scrips/privada.pem b/scrips/privada.pem
new file mode 100644
index 0000000..a86972c
--- /dev/null
+++ b/scrips/privada.pem
@@ -0,0 +1,169 @@
+Bag Attributes
+ localKeyID: 47 1D 7A 81 07 9A 0F 92 5D D8 E8 FD 6D 22 D2 A6 D9 20 23 40
+ friendlyName: BICI PIZZA S.A.S.
+subject=street = TV 46 C 42 ESTE 789 CORR SANTA ELENA, emailAddress = bicipizza@gmail.com, CN = BICI PIZZA S.A.S., serialNumber = 9015755282, title = Emisor Factura Electronica - Persona Juridica, OU = Emitido por Andes SCD Ac 26 69 C 03 Torre B Of 701, O = GERENTE, L = MEDELL\C3\8DN, ST = ANTIOQUIA, C = CO
+
+issuer=emailAddress = info@andesscd.com.co, CN = CA ANDES SCD S.A. Clase II v3, OU = Division de certificacion entidad final, O = Andes SCD, L = Bogota D.C., C = CO
+
+-----BEGIN CERTIFICATE-----
+MIIH8TCCBdmgAwIBAgIIQxaPJd4YTlMwDQYJKoZIhvcNAQELBQAwgbYxIzAhBgkq
+hkiG9w0BCQEWFGluZm9AYW5kZXNzY2QuY29tLmNvMSYwJAYDVQQDEx1DQSBBTkRF
+UyBTQ0QgUy5BLiBDbGFzZSBJSSB2MzEwMC4GA1UECxMnRGl2aXNpb24gZGUgY2Vy
+dGlmaWNhY2lvbiBlbnRpZGFkIGZpbmFsMRIwEAYDVQQKEwlBbmRlcyBTQ0QxFDAS
+BgNVBAcTC0JvZ290YSBELkMuMQswCQYDVQQGEwJDTzAeFw0yNDA1MTYwNTAwMDBa
+Fw0yNTA1MTYwNDU5MDBaMIIBQDEtMCsGA1UECRMkVFYgNDYgQyA0MiBFU1RFIDc4
+OSBDT1JSIFNBTlRBIEVMRU5BMSIwIAYJKoZIhvcNAQkBFhNiaWNpcGl6emFAZ21h
+aWwuY29tMRowGAYDVQQDExFCSUNJIFBJWlpBIFMuQS5TLjETMBEGA1UEBRMKOTAx
+NTc1NTI4MjE2MDQGA1UEDBMtRW1pc29yIEZhY3R1cmEgRWxlY3Ryb25pY2EgLSBQ
+ZXJzb25hIEp1cmlkaWNhMTswOQYDVQQLEzJFbWl0aWRvIHBvciBBbmRlcyBTQ0Qg
+QWMgMjYgNjkgQyAwMyBUb3JyZSBCIE9mIDcwMTEQMA4GA1UEChMHR0VSRU5URTES
+MBAGA1UEBwwJTUVERUxMw41OMRIwEAYDVQQIEwlBTlRJT1FVSUExCzAJBgNVBAYT
+AkNPMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5J1O+4ZedrSBUsb+
+9tjNPHI9RGeIJcJl3Wc/208OqMYcCwGLUkrYBgH78E7IayD5/wra04OU57cS1/+/
+yBUWYR60oqkaH2/8OXkJMqmjisVM/b58m7zyMw4TAF8N/PbswnrKukFU2acxISwT
+Lu36HC4hshWw8bEGP54szvv1xnwqcOAWNBCxcBuc9k1JD+SIiqqPwHKh+6EDIoou
+jo0H15w3rAxkHQRvYe6/IrpvH2sqJl1I3dLv0iqy9+d2l891KBA9Yebdw7m/+ufu
++eqs+0zKrwV6QLhRFmceHzEkPMTFepc2COGf80OUNbI6WWnspvDK97D8YG0MeifP
+YveIPwIDAQABo4ICdDCCAnAwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRA/iZp
+RzInMtGsIcgu7M+N1TVo6DBvBggrBgEFBQcBAQRjMGEwNgYIKwYBBQUHMAKGKmh0
+dHA6Ly9jZXJ0cy5hbmRlc3NjZC5jb20uY28vQ2xhc2VJSXYzLmNydDAnBggrBgEF
+BQcwAYYbaHR0cDovL29jc3AuYW5kZXNzY2QuY29tLmNvMB4GA1UdEQQXMBWBE2Jp
+Y2lwaXp6YUBnbWFpbC5jb20wggEjBgNVHSAEggEaMIIBFjCBwQYNKwYBBAGB9EgB
+AgYIADCBrzCBrAYIKwYBBQUHAgIwgZ8MgZxMYSB1dGlsaXphY2nDs24gZGUgZXN0
+ZSBjZXJ0aWZpY2FkbyBlc3TDoSBzdWpldGEgYSBsYSBQQyBkZSBGYWN0dXJhY2nD
+s24gRWxlY3Ryw7NuaWNhIHkgRFBDIGVzdGFibGVjaWRhcyBwb3IgQW5kZXMgU0NE
+LiBDw7NkaWdvIGRlIEFjcmVkaXRhY2nDs246IDE2LUVDRC0wMDQwUAYNKwYBBAGB
+9EgBAQEKADA/MD0GCCsGAQUFBwIBFjFodHRwczovL3d3dy5hbmRlc3NjZC5jb20u
+Y28vZG9jcy9EUENfQW5kZXNTQ0QucGRmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggr
+BgEFBQcDBDA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLmFuZGVzc2NkLmNv
+bS5jby9DbGFzZUlJdjMuY3JsMB0GA1UdDgQWBBRKPoh3BJM7SxEL0UXkSne2MyFO
+jjAOBgNVHQ8BAf8EBAMCBeAwDQYJKoZIhvcNAQELBQADggIBAA6Zzor3kpJ6vNKv
+TAeHaMfmJ/PaghQ1+Lab7Pwk+lsPsMETFu/IpEK5qij2bV54UNnqyLYOZtIbnWTG
+qgT7QxQvy+/of/I3zzF+kH4/Lp2TSlHaDEb/airCZ3I2G23M9iaZzSwYuOsOaGwp
+4ovkXlYwQ7FVNfIIoAq95m9cBAigb06bRIlVBVTQq44hQFQQG6aSIT7SSPtCwPhB
+5CJzG09pmgbxizqN/yxdjWdfW6Av79dh6K4uQT++Vtyp5DuAkmfn0ehayrUbDLkH
+9jQFF128U5pnOPfKWf22acXqQBapesUSV/HZUZ3PXoWeHWXcMdz0azxOEunS4+px
+fs5UzInRAmEcYwJHqJT3irFz+J2RsZ0WnJHrTGqFoXniQQH8QbCHehDTGN7/v/v1
+LQBr5PQBnSEWhmrQ9uFrwPyMMg3yd+L75TaHLZ0MTSVezAG52oM9jBiU5tYXkSio
+EfPdIsGlG74BybULGSG2OlTINlblj/lj7pL67V+gY9EGN1zzNKL5sW4YXlXewa6K
+dTpLmmzWzI8Cm+tOuuJDSHSwMjn525O+Z/oyKLjdQdyfg1KnZYwNZFpMmCwfP5nd
+cm4F7Anzb9HX9ciluAxc6as9TsNoDDTSAGPuUr0QvXqXd9ZCgXdNzdFeiaYknLP5
+hT4f5CoO2M8qcG+CH7HnkaOHrSuK
+-----END CERTIFICATE-----
+Bag Attributes:
+subject=emailAddress = info@andesscd.com.co, CN = ROOT CA ANDES SCD S.A., OU = Division de certificacion, O = Andes SCD, L = Bogota D.C., C = CO
+
+issuer=emailAddress = info@andesscd.com.co, CN = ROOT CA ANDES SCD S.A., OU = Division de certificacion, O = Andes SCD, L = Bogota D.C., C = CO
+
+-----BEGIN CERTIFICATE-----
+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
+-----END CERTIFICATE-----
+Bag Attributes:
+subject=emailAddress = info@andesscd.com.co, CN = CA ANDES SCD S.A. Clase II v2, OU = Division de certificacion entidad final, O = Andes SCD, L = Bogota D.C., C = CO
+
+issuer=emailAddress = info@andesscd.com.co, CN = ROOT CA ANDES SCD S.A., OU = Division de certificacion, O = Andes SCD, L = Bogota D.C., C = CO
+
+-----BEGIN CERTIFICATE-----
+MIIGrzCCBJegAwIBAgIIRLa0wz3hC2gwDQYJKoZIhvcNAQELBQAwgaExIzAhBgkq
+hkiG9w0BCQEWFGluZm9AYW5kZXNzY2QuY29tLmNvMR8wHQYDVQQDExZST09UIENB
+IEFOREVTIFNDRCBTLkEuMSIwIAYDVQQLExlEaXZpc2lvbiBkZSBjZXJ0aWZpY2Fj
+aW9uMRIwEAYDVQQKEwlBbmRlcyBTQ0QxFDASBgNVBAcTC0JvZ290YSBELkMuMQsw
+CQYDVQQGEwJDTzAeFw0xOTA4MDYxNjE0NTNaFw0yNTExMTUxNzM0MzBaMIG2MSMw
+IQYJKoZIhvcNAQkBFhRpbmZvQGFuZGVzc2NkLmNvbS5jbzEmMCQGA1UEAxMdQ0Eg
+QU5ERVMgU0NEIFMuQS4gQ2xhc2UgSUkgdjIxMDAuBgNVBAsTJ0RpdmlzaW9uIGRl
+IGNlcnRpZmljYWNpb24gZW50aWRhZCBmaW5hbDESMBAGA1UEChMJQW5kZXMgU0NE
+MRQwEgYDVQQHEwtCb2dvdGEgRC5DLjELMAkGA1UEBhMCQ08wggIiMA0GCSqGSIb3
+DQEBAQUAA4ICDwAwggIKAoICAQDOWKOiAg0IgACNXNyDCoAyaXo514UwF9oCqMjg
+xAOhOe+g3lUDWTXtV6l8O1VXHQa86KZwqgT0mfw0HqePQYKC93n9+timuuT1FuAJ
+Z9TnF/f6DQDzFQWsRVLdqV/hzNQ/rbOvPX8WN4Z97TyJaUtlxbENOKgOlzsW8hGe
+eVrjDz9fk1e0TPem/CswuY+7Z/Pi4/EVz28UoTlfEMOg84ZutTomHOskIp6S86lw
+X+ts15yChEf/dXBVkAMkBUpFc39iZWhhtewZo56Q8u9an5ZBQtOorB33LKFKn2P1
+V95Cf2XPZqWqLrP1wRQn0XWB1uDF+eAyQzShGA0jrZGgdlaFW8J7bx8+YntJHqFi
+jI3UVwqCyb+TGO9RRcTRp3OfAwAKCbh56gHacvF5KEGj36d0zofw808WBpnhrnvQ
+ofPp48mowpbByzuIqVtX0utVXgzg4QdNBSQ6uhDnjB8ETzwuJcUokC1lXwBMSDa0
+f5psC1yflyqdTOpSjZC8pMxwGUXhhvkfxDBaSsueExLpcKlolVojQRWm6C2oiumS
+2lgeL4ydh8DFhi2llMLVCLZQLffG9ziTZtMd97n55NvXrVa4XbDIf4i5/XFrYgFy
+R/rBZduYWDqxcwFnUP6HhTfuael8qNxKA3UWmxFK3ixNN5kaC/ErX3g4fC+KGqh4
+LeljKQIDAQABo4HTMIHQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU3RGS
+WqlsBAz+NKJYv+sd+98IsG8wNwYIKwYBBQUHAQEEKzApMCcGCCsGAQUFBzABhhto
+dHRwOi8vb2NzcC5hbmRlc3NjZC5jb20uY28wNAYDVR0fBC0wKzApoCegJYYjaHR0
+cDovL2NybC5hbmRlc3NjZC5jb20uY28vUmFpei5jcmwwHQYDVR0OBBYEFDpXUNB3
+Gz7Wi+r/l5nX/4QCSCkPMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC
+AgEALA0nz8TvtoMZ70MBN7FFWZMqTXvkXY7mcnWImpTFLGzny+i119qODuItEf5G
+977TzoTCxZC8DlPL1d88+YxAfYFRLXdb1HcDrNuWKMyoiFGH3vhNl+Ef//4zed98
+DV5jtoaCofFt/JzPz2iA7Al2LZ1m0vAF0z12LAytHqSfob+5mdgWkBnLae0vaWU+
+eGnoTkCYsasxca9oSKHDajqTvTa5WogibUaffcnb9LYaP3nkam9+favCyHHQW2lp
+2xPPcP1gisvp99ga9Cwft7d/QHXNjseop2TwDoUHViUImaSpLz+2kWhkr2LOSTpL
+43rWQhVQ/Y6SyYd3YWEBxJWwFvVlHvQ2wKwiE/z7kHnCP9ztPhS0umC1BMGq3pC4
+fifzvx9218JjDIOVrKzwonCTj0vwQZ4FmTttAr0G+R5TrqqvgF1t/RTfhWIxhUTk
+TR3xRpR/5mBtqrSmyojGtdVkwHq2dmmDIkjefSbxKDkkAkhDRt5CDeV913B3MvYm
+UiMoOJmLyapIZjIko1HxzXBv3dPc5LYSKpG8rd9SjJtA7W8LQzAVUq8O32nO7edY
+IvTrC11fLkdToGOxLmfTzZ+facUESteELfxchZoda6I9qH5Xa7Xka2M2mmkj0SGU
+46KREw+DtpoUkpAQ7rLaZ+4stT0j1Z8soirB+EUk8oBLiTI=
+-----END CERTIFICATE-----
+Bag Attributes
+ localKeyID: 47 1D 7A 81 07 9A 0F 92 5D D8 E8 FD 6D 22 D2 A6 D9 20 23 40
+ friendlyName: BICI PIZZA S.A.S.
+Key Attributes:
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIZXaHIVVK8xgCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECDiCo/ndioOzBIIEyOaIf6RezHh0
+6knOjiQyjWvc12TOqcPORR5yFaddeAZ5aoaHLfozNzhafH08QSsxAN2PW9aJI38u
+rejfKXiOx9X98zFs5LVvbcNYaSlJBT7nCTvIJSRUO/p3lkDXUnW3+jbO2uT2UOgk
+exV198RS1fZjat1VyIf/3DTCHYJKLvC2D46F6NgsdadEkDSyrLvqcCW3HAbE3zw/
+SmYmxGyEQVJWfgjTuzja07AFjWspls1rGXO9gdxcLXXHcDDfArkUPe9OTmeKMoXM
+gtMuAAMJaQ3xpw3M7FaLHB0F0zXec5UhYTgs7n0jw/D2jTORqHqvAcZGRGuGnGwZ
+QtuzISqBMqDEtdkVoobz0QURJP1QVj4X14xcQnaVbXCJq5uUdPlTkBvjHS11/tqX
+X31wk2DmkGSsEtdLfeVupsWjd7C83IWEhZfj86lh0oxZORdR8n+JHyOI3bIFJqK0
+z5tv8HN7RfBZI09wr8YNYU45IfVgOBy3PDbeQ50eAVJg1T8pbQQHwUZ+0e1MXSiI
+iiAU/j0VQYsSMFVZizNozfMAJ5kjV5Pb+BqhrPb10h1o/H4O+46kVJYUXakeVdMk
+mLUDBvWG3rwqXvwan9k+Zeld9/frDoa9BjEi7QhgkuyaduzT8yXIai3oOoniX5FH
+kDL6NAp0oBoVu4jLOvsGvYX69qc6AiMTaJgYxE9Nvv/hjhE3zuyEvGcXfDhH9yhp
+BpQMXH9S18l/WBWb7ebzp+qFPfxQ/BzFEVGEJrWZMbwZZsGYs/t8Ug9Q2dZjPweS
+42UWQU5qSabwT/A+NGtdNvPUbNnG/hpZr5Rt89JTUnqxQSTvqydvx3sijNniIOdu
+nHrCT51yHXUIXgD3DsxBoXF2pPCotRALdxfVpA0f2Vcs4ihEKRqEfZ+EGrHarRgJ
+u11LpS312Un2Ua8jifli2YkAGZiWxQ2VraoNdZiTRcUktFEjWaI73uXeoPhXNvTO
+PnD5sjZgYwTFfd90zvhN+8oPs8csFUV1UjLE+WZOm0qtNUJWOncBca1ceonWNiCq
+0HNZF9nnn+qCIoNQ+7MHDBWRAh7h68Tsp22M3FqbayLmsDQWIaruN3Kw7VzDFubk
+d9seJxsOos58kbq5x9MXnbY630+1qjvDZaUP/SWyytJJrI0g24h8EC59RfiYXeGR
+Mv2M4YIVZUqH0bivzDwumzb8MR7vFQGHFU0bbQZtouvulWc/naHF1eX5a3jrkqeI
+WJ0Ms8wlqxtYONJWzo90E26Z10PH62QbYM+4Lu6lgFVC6Idzsy19GkksrQNfghE7
+XdDQb8BeS1Uer8qbt8IXSaS9X8jSTx29ccOE/ZFU8F0ZnxOR3s3hL+QMePictzyO
+KVPOx7mUPrIbFg7NTMqRssmeYS4RXRShdR45cGtfrqHyrVsaO3x02ukB5LHNHfvV
+3Dkrem7xf+m/T74GONuZJ5jNXsFz2rSY7PCxFTpPgHTPb56Kdmb+jaBj5vxfUjgA
+ObioPS4HMPt/OKTREHpHbGFhlPD/RXDzh8K6dLPUbyMRZMUKIoDb2Mp8JYhOv0yO
+oKVE7E/nYU6OtUGbS/qkuirpUeVmpvadTSuIaPA2KZYZJhKj0y0u5AO61k8ZLGKb
+HPL9j6aYYJSt6dWdlY0Y6A==
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/scrips/publica.pem b/scrips/publica.pem
new file mode 100644
index 0000000..54d6fc4
--- /dev/null
+++ b/scrips/publica.pem
@@ -0,0 +1,135 @@
+Bag Attributes
+ localKeyID: 47 1D 7A 81 07 9A 0F 92 5D D8 E8 FD 6D 22 D2 A6 D9 20 23 40
+ friendlyName: BICI PIZZA S.A.S.
+subject=street = TV 46 C 42 ESTE 789 CORR SANTA ELENA, emailAddress = bicipizza@gmail.com, CN = BICI PIZZA S.A.S., serialNumber = 9015755282, title = Emisor Factura Electronica - Persona Juridica, OU = Emitido por Andes SCD Ac 26 69 C 03 Torre B Of 701, O = GERENTE, L = MEDELL\C3\8DN, ST = ANTIOQUIA, C = CO
+
+issuer=emailAddress = info@andesscd.com.co, CN = CA ANDES SCD S.A. Clase II v3, OU = Division de certificacion entidad final, O = Andes SCD, L = Bogota D.C., C = CO
+
+-----BEGIN CERTIFICATE-----
+MIIH8TCCBdmgAwIBAgIIQxaPJd4YTlMwDQYJKoZIhvcNAQELBQAwgbYxIzAhBgkq
+hkiG9w0BCQEWFGluZm9AYW5kZXNzY2QuY29tLmNvMSYwJAYDVQQDEx1DQSBBTkRF
+UyBTQ0QgUy5BLiBDbGFzZSBJSSB2MzEwMC4GA1UECxMnRGl2aXNpb24gZGUgY2Vy
+dGlmaWNhY2lvbiBlbnRpZGFkIGZpbmFsMRIwEAYDVQQKEwlBbmRlcyBTQ0QxFDAS
+BgNVBAcTC0JvZ290YSBELkMuMQswCQYDVQQGEwJDTzAeFw0yNDA1MTYwNTAwMDBa
+Fw0yNTA1MTYwNDU5MDBaMIIBQDEtMCsGA1UECRMkVFYgNDYgQyA0MiBFU1RFIDc4
+OSBDT1JSIFNBTlRBIEVMRU5BMSIwIAYJKoZIhvcNAQkBFhNiaWNpcGl6emFAZ21h
+aWwuY29tMRowGAYDVQQDExFCSUNJIFBJWlpBIFMuQS5TLjETMBEGA1UEBRMKOTAx
+NTc1NTI4MjE2MDQGA1UEDBMtRW1pc29yIEZhY3R1cmEgRWxlY3Ryb25pY2EgLSBQ
+ZXJzb25hIEp1cmlkaWNhMTswOQYDVQQLEzJFbWl0aWRvIHBvciBBbmRlcyBTQ0Qg
+QWMgMjYgNjkgQyAwMyBUb3JyZSBCIE9mIDcwMTEQMA4GA1UEChMHR0VSRU5URTES
+MBAGA1UEBwwJTUVERUxMw41OMRIwEAYDVQQIEwlBTlRJT1FVSUExCzAJBgNVBAYT
+AkNPMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5J1O+4ZedrSBUsb+
+9tjNPHI9RGeIJcJl3Wc/208OqMYcCwGLUkrYBgH78E7IayD5/wra04OU57cS1/+/
+yBUWYR60oqkaH2/8OXkJMqmjisVM/b58m7zyMw4TAF8N/PbswnrKukFU2acxISwT
+Lu36HC4hshWw8bEGP54szvv1xnwqcOAWNBCxcBuc9k1JD+SIiqqPwHKh+6EDIoou
+jo0H15w3rAxkHQRvYe6/IrpvH2sqJl1I3dLv0iqy9+d2l891KBA9Yebdw7m/+ufu
++eqs+0zKrwV6QLhRFmceHzEkPMTFepc2COGf80OUNbI6WWnspvDK97D8YG0MeifP
+YveIPwIDAQABo4ICdDCCAnAwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRA/iZp
+RzInMtGsIcgu7M+N1TVo6DBvBggrBgEFBQcBAQRjMGEwNgYIKwYBBQUHMAKGKmh0
+dHA6Ly9jZXJ0cy5hbmRlc3NjZC5jb20uY28vQ2xhc2VJSXYzLmNydDAnBggrBgEF
+BQcwAYYbaHR0cDovL29jc3AuYW5kZXNzY2QuY29tLmNvMB4GA1UdEQQXMBWBE2Jp
+Y2lwaXp6YUBnbWFpbC5jb20wggEjBgNVHSAEggEaMIIBFjCBwQYNKwYBBAGB9EgB
+AgYIADCBrzCBrAYIKwYBBQUHAgIwgZ8MgZxMYSB1dGlsaXphY2nDs24gZGUgZXN0
+ZSBjZXJ0aWZpY2FkbyBlc3TDoSBzdWpldGEgYSBsYSBQQyBkZSBGYWN0dXJhY2nD
+s24gRWxlY3Ryw7NuaWNhIHkgRFBDIGVzdGFibGVjaWRhcyBwb3IgQW5kZXMgU0NE
+LiBDw7NkaWdvIGRlIEFjcmVkaXRhY2nDs246IDE2LUVDRC0wMDQwUAYNKwYBBAGB
+9EgBAQEKADA/MD0GCCsGAQUFBwIBFjFodHRwczovL3d3dy5hbmRlc3NjZC5jb20u
+Y28vZG9jcy9EUENfQW5kZXNTQ0QucGRmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggr
+BgEFBQcDBDA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLmFuZGVzc2NkLmNv
+bS5jby9DbGFzZUlJdjMuY3JsMB0GA1UdDgQWBBRKPoh3BJM7SxEL0UXkSne2MyFO
+jjAOBgNVHQ8BAf8EBAMCBeAwDQYJKoZIhvcNAQELBQADggIBAA6Zzor3kpJ6vNKv
+TAeHaMfmJ/PaghQ1+Lab7Pwk+lsPsMETFu/IpEK5qij2bV54UNnqyLYOZtIbnWTG
+qgT7QxQvy+/of/I3zzF+kH4/Lp2TSlHaDEb/airCZ3I2G23M9iaZzSwYuOsOaGwp
+4ovkXlYwQ7FVNfIIoAq95m9cBAigb06bRIlVBVTQq44hQFQQG6aSIT7SSPtCwPhB
+5CJzG09pmgbxizqN/yxdjWdfW6Av79dh6K4uQT++Vtyp5DuAkmfn0ehayrUbDLkH
+9jQFF128U5pnOPfKWf22acXqQBapesUSV/HZUZ3PXoWeHWXcMdz0azxOEunS4+px
+fs5UzInRAmEcYwJHqJT3irFz+J2RsZ0WnJHrTGqFoXniQQH8QbCHehDTGN7/v/v1
+LQBr5PQBnSEWhmrQ9uFrwPyMMg3yd+L75TaHLZ0MTSVezAG52oM9jBiU5tYXkSio
+EfPdIsGlG74BybULGSG2OlTINlblj/lj7pL67V+gY9EGN1zzNKL5sW4YXlXewa6K
+dTpLmmzWzI8Cm+tOuuJDSHSwMjn525O+Z/oyKLjdQdyfg1KnZYwNZFpMmCwfP5nd
+cm4F7Anzb9HX9ciluAxc6as9TsNoDDTSAGPuUr0QvXqXd9ZCgXdNzdFeiaYknLP5
+hT4f5CoO2M8qcG+CH7HnkaOHrSuK
+-----END CERTIFICATE-----
+Bag Attributes:
+subject=emailAddress = info@andesscd.com.co, CN = ROOT CA ANDES SCD S.A., OU = Division de certificacion, O = Andes SCD, L = Bogota D.C., C = CO
+
+issuer=emailAddress = info@andesscd.com.co, CN = ROOT CA ANDES SCD S.A., OU = Division de certificacion, O = Andes SCD, L = Bogota D.C., C = CO
+
+-----BEGIN CERTIFICATE-----
+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
+-----END CERTIFICATE-----
+Bag Attributes:
+subject=emailAddress = info@andesscd.com.co, CN = CA ANDES SCD S.A. Clase II v2, OU = Division de certificacion entidad final, O = Andes SCD, L = Bogota D.C., C = CO
+
+issuer=emailAddress = info@andesscd.com.co, CN = ROOT CA ANDES SCD S.A., OU = Division de certificacion, O = Andes SCD, L = Bogota D.C., C = CO
+
+-----BEGIN CERTIFICATE-----
+MIIGrzCCBJegAwIBAgIIRLa0wz3hC2gwDQYJKoZIhvcNAQELBQAwgaExIzAhBgkq
+hkiG9w0BCQEWFGluZm9AYW5kZXNzY2QuY29tLmNvMR8wHQYDVQQDExZST09UIENB
+IEFOREVTIFNDRCBTLkEuMSIwIAYDVQQLExlEaXZpc2lvbiBkZSBjZXJ0aWZpY2Fj
+aW9uMRIwEAYDVQQKEwlBbmRlcyBTQ0QxFDASBgNVBAcTC0JvZ290YSBELkMuMQsw
+CQYDVQQGEwJDTzAeFw0xOTA4MDYxNjE0NTNaFw0yNTExMTUxNzM0MzBaMIG2MSMw
+IQYJKoZIhvcNAQkBFhRpbmZvQGFuZGVzc2NkLmNvbS5jbzEmMCQGA1UEAxMdQ0Eg
+QU5ERVMgU0NEIFMuQS4gQ2xhc2UgSUkgdjIxMDAuBgNVBAsTJ0RpdmlzaW9uIGRl
+IGNlcnRpZmljYWNpb24gZW50aWRhZCBmaW5hbDESMBAGA1UEChMJQW5kZXMgU0NE
+MRQwEgYDVQQHEwtCb2dvdGEgRC5DLjELMAkGA1UEBhMCQ08wggIiMA0GCSqGSIb3
+DQEBAQUAA4ICDwAwggIKAoICAQDOWKOiAg0IgACNXNyDCoAyaXo514UwF9oCqMjg
+xAOhOe+g3lUDWTXtV6l8O1VXHQa86KZwqgT0mfw0HqePQYKC93n9+timuuT1FuAJ
+Z9TnF/f6DQDzFQWsRVLdqV/hzNQ/rbOvPX8WN4Z97TyJaUtlxbENOKgOlzsW8hGe
+eVrjDz9fk1e0TPem/CswuY+7Z/Pi4/EVz28UoTlfEMOg84ZutTomHOskIp6S86lw
+X+ts15yChEf/dXBVkAMkBUpFc39iZWhhtewZo56Q8u9an5ZBQtOorB33LKFKn2P1
+V95Cf2XPZqWqLrP1wRQn0XWB1uDF+eAyQzShGA0jrZGgdlaFW8J7bx8+YntJHqFi
+jI3UVwqCyb+TGO9RRcTRp3OfAwAKCbh56gHacvF5KEGj36d0zofw808WBpnhrnvQ
+ofPp48mowpbByzuIqVtX0utVXgzg4QdNBSQ6uhDnjB8ETzwuJcUokC1lXwBMSDa0
+f5psC1yflyqdTOpSjZC8pMxwGUXhhvkfxDBaSsueExLpcKlolVojQRWm6C2oiumS
+2lgeL4ydh8DFhi2llMLVCLZQLffG9ziTZtMd97n55NvXrVa4XbDIf4i5/XFrYgFy
+R/rBZduYWDqxcwFnUP6HhTfuael8qNxKA3UWmxFK3ixNN5kaC/ErX3g4fC+KGqh4
+LeljKQIDAQABo4HTMIHQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU3RGS
+WqlsBAz+NKJYv+sd+98IsG8wNwYIKwYBBQUHAQEEKzApMCcGCCsGAQUFBzABhhto
+dHRwOi8vb2NzcC5hbmRlc3NjZC5jb20uY28wNAYDVR0fBC0wKzApoCegJYYjaHR0
+cDovL2NybC5hbmRlc3NjZC5jb20uY28vUmFpei5jcmwwHQYDVR0OBBYEFDpXUNB3
+Gz7Wi+r/l5nX/4QCSCkPMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC
+AgEALA0nz8TvtoMZ70MBN7FFWZMqTXvkXY7mcnWImpTFLGzny+i119qODuItEf5G
+977TzoTCxZC8DlPL1d88+YxAfYFRLXdb1HcDrNuWKMyoiFGH3vhNl+Ef//4zed98
+DV5jtoaCofFt/JzPz2iA7Al2LZ1m0vAF0z12LAytHqSfob+5mdgWkBnLae0vaWU+
+eGnoTkCYsasxca9oSKHDajqTvTa5WogibUaffcnb9LYaP3nkam9+favCyHHQW2lp
+2xPPcP1gisvp99ga9Cwft7d/QHXNjseop2TwDoUHViUImaSpLz+2kWhkr2LOSTpL
+43rWQhVQ/Y6SyYd3YWEBxJWwFvVlHvQ2wKwiE/z7kHnCP9ztPhS0umC1BMGq3pC4
+fifzvx9218JjDIOVrKzwonCTj0vwQZ4FmTttAr0G+R5TrqqvgF1t/RTfhWIxhUTk
+TR3xRpR/5mBtqrSmyojGtdVkwHq2dmmDIkjefSbxKDkkAkhDRt5CDeV913B3MvYm
+UiMoOJmLyapIZjIko1HxzXBv3dPc5LYSKpG8rd9SjJtA7W8LQzAVUq8O32nO7edY
+IvTrC11fLkdToGOxLmfTzZ+facUESteELfxchZoda6I9qH5Xa7Xka2M2mmkj0SGU
+46KREw+DtpoUkpAQ7rLaZ+4stT0j1Z8soirB+EUk8oBLiTI=
+-----END CERTIFICATE-----