diff --git a/facho/fe/form/__init__.py b/facho/fe/form/__init__.py index 46768c4..32d2453 100644 --- a/facho/fe/form/__init__.py +++ b/facho/fe/form/__init__.py @@ -100,15 +100,31 @@ class Amount: @dataclass class Item: + scheme_name: str + scheme_agency_id: str + scheme_id: str description: str id: str -@dataclass class StandardItem(Item): - pass + def __init__(self, id_: str, description: str = ''): + super().__init__(id=id_, + description=description, + scheme_name='', + scheme_id='999', + scheme_agency_id='') +class UNSPSCItem(Item): + def __init__(self, id_: str, description: str = ''): + super().__init__(id=id_, + description=description, + scheme_name='UNSPSC', + scheme_id='001', + scheme_agency_id='10') + + @dataclass class Country: code: str diff --git a/facho/fe/form_xml/invoice.py b/facho/fe/form_xml/invoice.py index b0eb6ae..aed6697 100644 --- a/facho/fe/form_xml/invoice.py +++ b/facho/fe/form_xml/invoice.py @@ -514,8 +514,13 @@ class DIANInvoiceXML(fe.FeXML): line.set_element('./cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cac:TaxScheme/cbc:ID', subtotal.tax_scheme_ident) line.set_element('./cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cac:TaxScheme/cbc:Name', subtotal.tax_scheme_name) line.set_element('./cac:Item/cbc:Description', invoice_line.item.description) - # TODO - line.set_element('./cac:Item/cac:StandardItemIdentification/cbc:ID', invoice_line.item.id) + + line.set_element('./cac:Item/cac:StandardItemIdentification/cbc:ID', + invoice_line.item.id, + schemeID=invoice_line.item.scheme_id, + schemeName=invoice_line.item.scheme_name, + schemeAgencyID=invoice_line.item.scheme_agency_id) + line.set_element('./cac:Price/cbc:PriceAmount', invoice_line.price.amount, currencyID="COP") #DIAN 1.7.-2020: FBB04 line.set_element('./cac:Price/cbc:BaseQuantity', invoice_line.price.amount) diff --git a/tests/fixtures.py b/tests/fixtures.py index 57cf5c8..487e5df 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -131,7 +131,7 @@ def simple_invoice(): inv.add_invoice_line(form.InvoiceLine( quantity = 1, description = 'producto facho', - item = form.StandardItem('test', 9999), + item = form.StandardItem( 9999), price = form.Price(form.Amount(100.0), '01', ''), tax = form.TaxTotal( tax_amount = form.Amount(0.0), diff --git a/tests/test_fe_form.py b/tests/test_fe_form.py index 56e1b51..db2fdf9 100644 --- a/tests/test_fe_form.py +++ b/tests/test_fe_form.py @@ -91,7 +91,7 @@ def test_invoice_totals(simple_invoice_without_lines): simple_invoice.add_invoice_line(form.InvoiceLine( quantity = 1, description = 'producto', - item = form.StandardItem('test', 9999), + item = form.StandardItem(9999), price = form.Price(form.Amount(1_500_000), '01', ''), tax = form.TaxTotal( subtotals = [ @@ -114,7 +114,7 @@ def test_invoice_cufe(simple_invoice_without_lines): simple_invoice.add_invoice_line(form.InvoiceLine( quantity = 1, description = 'producto', - item = form.StandardItem('test', 111), + item = form.StandardItem(111), price = form.Price(form.Amount(1_500_000), '01', ''), tax = form.TaxTotal( subtotals = [ @@ -179,7 +179,7 @@ def test_credit_note_cude(simple_credit_note_without_lines): simple_invoice.add_invoice_line(form.InvoiceLine( quantity = 1, description = 'producto', - item = form.StandardItem('test', 111), + item = form.StandardItem(111), price = form.Price(form.Amount(5_000), '01', ''), tax = form.TaxTotal( subtotals = [ @@ -214,7 +214,7 @@ def test_debit_note_cude(simple_debit_note_without_lines): simple_invoice.add_invoice_line(form.InvoiceLine( quantity = 1, description = 'producto', - item = form.StandardItem('test', 111), + item = form.StandardItem(111), price = form.Price(form.Amount(30_000), '01', ''), tax = form.TaxTotal( subtotals = [ diff --git a/tests/test_form.py b/tests/test_form.py index 08b5aed..d0a6417 100644 --- a/tests/test_form.py +++ b/tests/test_form.py @@ -18,7 +18,7 @@ def test_invoice_legalmonetary(): inv.add_invoice_line(form.InvoiceLine( quantity = 1, description = 'producto facho', - item = form.StandardItem('test', 9999), + item = form.StandardItem(9999), price = form.Price( amount = form.Amount(100.0), type_code = '01', @@ -44,7 +44,7 @@ def test_FAU10(): inv.add_invoice_line(form.InvoiceLine( quantity = 1, description = 'producto facho', - item = form.StandardItem('test', 9999), + item = form.StandardItem(9999), price = form.Price( amount = form.Amount(100.0), type_code = '01', @@ -72,7 +72,7 @@ def test_FAU14(): inv.add_invoice_line(form.InvoiceLine( quantity = 1, description = 'producto facho', - item = form.StandardItem('test', 9999), + item = form.StandardItem(9999), price = form.Price( amount = form.Amount(100.0), type_code = '01',