se mueven archivos .gc a directorio facho/fe/data/dian/codelist/
FossilOrigin-Name: dbd0c91c222b504d32a8728084a024ccd2b7f5204819a68bf26318d3e38e378c
This commit is contained in:
@@ -1,61 +1 @@
|
||||
import os.path
|
||||
|
||||
from lxml import etree
|
||||
|
||||
|
||||
DATA_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
class CodeList:
|
||||
|
||||
def __init__(self, filename, primary_column):
|
||||
self.short_name = ''
|
||||
self.long_name = ''
|
||||
self.version = 1
|
||||
self.canonical_uri = ''
|
||||
self.canonical_version_uri = ''
|
||||
self.location_uri = ''
|
||||
|
||||
self.rows = {}
|
||||
self._load(filename, primary_column)
|
||||
|
||||
def _load(self, filename, primary_column):
|
||||
tree = etree.parse(filename)
|
||||
|
||||
#obtener identificadores...
|
||||
self.short_name = tree.find('./Identification/ShortName').text
|
||||
self.long_name = tree.find('./Identification/LongName').text
|
||||
self.version = tree.find('./Identification/Version').text
|
||||
self.canonical_uri = tree.find('./Identification/CanonicalUri').text
|
||||
self.canonical_version_uri = tree.find('./Identification/CanonicalVersionUri').text
|
||||
self.location_uri = tree.find('./Identification/LocationUri').text
|
||||
|
||||
#obtener registros...
|
||||
for row in tree.findall('./SimpleCodeList/Row'):
|
||||
new_row = self.xmlrow_to_dict(row)
|
||||
primary_key = new_row[primary_column]
|
||||
self.rows[primary_key] = new_row.copy()
|
||||
|
||||
def xmlrow_to_dict(self, xmlrow):
|
||||
row = {}
|
||||
|
||||
#construir registro...
|
||||
for value in xmlrow.getchildren():
|
||||
row[value.attrib['ColumnRef']] = value.getchildren()[0].text
|
||||
|
||||
return row
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self.rows[str(key)]
|
||||
|
||||
|
||||
# nombres de variables igual a ./Identification/ShortName
|
||||
# TODO: garantizar unica carga en python
|
||||
|
||||
__all__ = ['TipoOrganizacion',
|
||||
'TipoResponsabilidad',
|
||||
'TipoAmbiente']
|
||||
|
||||
TipoOrganizacion = CodeList(os.path.join(DATA_DIR, 'TipoOrganizacion-2.1.gc'), 'name')
|
||||
TipoResponsabilidad = CodeList(os.path.join(DATA_DIR, 'TipoResponsabilidad-2.1.gc'), 'name')
|
||||
TipoAmbiente = CodeList(os.path.join(DATA_DIR, 'TipoAmbiente-2.1.gc'), 'name')
|
||||
from .codelist import CodeList
|
||||
|
||||
61
facho/fe/data/dian/codelist/__init__.py
Normal file
61
facho/fe/data/dian/codelist/__init__.py
Normal file
@@ -0,0 +1,61 @@
|
||||
import os.path
|
||||
|
||||
from lxml import etree
|
||||
|
||||
|
||||
DATA_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
class CodeList:
|
||||
|
||||
def __init__(self, filename, primary_column):
|
||||
self.short_name = ''
|
||||
self.long_name = ''
|
||||
self.version = 1
|
||||
self.canonical_uri = ''
|
||||
self.canonical_version_uri = ''
|
||||
self.location_uri = ''
|
||||
|
||||
self.rows = {}
|
||||
self._load(filename, primary_column)
|
||||
|
||||
def _load(self, filename, primary_column):
|
||||
tree = etree.parse(filename)
|
||||
|
||||
#obtener identificadores...
|
||||
self.short_name = tree.find('./Identification/ShortName').text
|
||||
self.long_name = tree.find('./Identification/LongName').text
|
||||
self.version = tree.find('./Identification/Version').text
|
||||
self.canonical_uri = tree.find('./Identification/CanonicalUri').text
|
||||
self.canonical_version_uri = tree.find('./Identification/CanonicalVersionUri').text
|
||||
self.location_uri = tree.find('./Identification/LocationUri').text
|
||||
|
||||
#obtener registros...
|
||||
for row in tree.findall('./SimpleCodeList/Row'):
|
||||
new_row = self.xmlrow_to_dict(row)
|
||||
primary_key = new_row[primary_column]
|
||||
self.rows[primary_key] = new_row.copy()
|
||||
|
||||
def xmlrow_to_dict(self, xmlrow):
|
||||
row = {}
|
||||
|
||||
#construir registro...
|
||||
for value in xmlrow.getchildren():
|
||||
row[value.attrib['ColumnRef']] = value.getchildren()[0].text
|
||||
|
||||
return row
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self.rows[str(key)]
|
||||
|
||||
|
||||
# nombres de variables igual a ./Identification/ShortName
|
||||
# TODO: garantizar unica carga en python
|
||||
|
||||
__all__ = ['TipoOrganizacion',
|
||||
'TipoResponsabilidad',
|
||||
'TipoAmbiente']
|
||||
|
||||
TipoOrganizacion = CodeList(os.path.join(DATA_DIR, 'TipoOrganizacion-2.1.gc'), 'name')
|
||||
TipoResponsabilidad = CodeList(os.path.join(DATA_DIR, 'TipoResponsabilidad-2.1.gc'), 'name')
|
||||
TipoAmbiente = CodeList(os.path.join(DATA_DIR, 'TipoAmbiente-2.1.gc'), 'name')
|
||||
@@ -10,7 +10,7 @@ import zipfile
|
||||
import warnings
|
||||
import hashlib
|
||||
from contextlib import contextmanager
|
||||
from .data import dian
|
||||
from .data.dian import codelist
|
||||
|
||||
NAMESPACES = {
|
||||
'fe': 'http://www.dian.gov.co/contratos/facturaelectronica/v1',
|
||||
@@ -50,7 +50,7 @@ class DianXMLExtensionCUFE(FachoXMLExtension):
|
||||
self.invoice = invoice
|
||||
|
||||
def _tipo_ambiente(self):
|
||||
return int(dian.TipoAmbiente[self.tipo_ambiente]['code'])
|
||||
return int(codelist.TipoAmbiente[self.tipo_ambiente]['code'])
|
||||
|
||||
def build(self, fachoxml):
|
||||
cufe = self._generate_cufe(self.invoice, fachoxml)
|
||||
|
||||
@@ -7,7 +7,7 @@ import copy
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
|
||||
from .data import dian
|
||||
from .data.dian import codelist
|
||||
from . import fe
|
||||
|
||||
@dataclass
|
||||
@@ -146,12 +146,12 @@ class DianResolucion0001Validator:
|
||||
|
||||
def _validate_party(self, party):
|
||||
try:
|
||||
dian.TipoResponsabilidad[party.responsability_code]
|
||||
codelist.TipoResponsabilidad[party.responsability_code]
|
||||
except KeyError:
|
||||
self.errors.append(('responsability_code', 'not found'))
|
||||
|
||||
try:
|
||||
dian.TipoOrganizacion[party.organization_code]
|
||||
codelist.TipoOrganizacion[party.organization_code]
|
||||
except KeyError:
|
||||
self.errors.append(('organization_code', 'not found'))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user