Paraguay - Maquila Operations
l10n_py_maquila_ops · OCA/l10n-paraguay
-
Security25/25No findings
-
Activity25/25Human commit this month
-
Required by15/251 module depends on it
-
Maturity12/25In 2 Odoo series since 18.0
Heuristic over the facts below, not an audit · How it's computed
Description
Operations of Paraguay's Maquila regime (Ley 7547/2025):
- Temporary admission of goods with a customs guarantee, CIF control and per-line remaining balance. The stay follows Ley 7547/2025 Art. 14 by type of good: raw materials and inputs 12 months from the import date (extendable once, up to the same period); containers and trailer boxes 12 months from the arrival declaration (no extension); other goods while the program is in force.
- Export dispatches with traceability to the source admissions.
- Customs guarantees (bank, insurance, deposit, mortgage), per operation or global (Decreto 5714/2026 Art. 28), with available balance control and automatic expiry. Form and validity of the guarantee follow art. 293 of the Customs Code and are not validated by the module.
- Fiscal positions for temporary admission and exempt export.
- Wizards for the Tributo Único Maquilador (TUM, 1%), the IVA credit (compensate/transfer) and the VAN period computation.
- Domestic-market sales control (Ley 7547/2025 Art. 18): only pure maquila is capped, at 10% of what it exported in the last year. A pure maquila with no exports in that period has a zero cap and cannot sell domestically, unless a Maquila manager sets an explicit, logged override on the order.
All monetary comparisons and accounting entries are converted to the company currency.
Open legal questions (not decided by the module): the law caps sales at 10% of the "volumen exportado en el ultimo ano"; the module measures the exported FOB value (quantities of different products and units cannot be added) and reads "ultimo ano" as the previous calendar year. Both readings must be confirmed with the Secretaria Ejecutiva / DNIT.
Dependencies
- Odoo dependencies
- Python dependencies
- python-stdnum
- System dependencies
- None
- Required by
- l10n_py_maquila_report
Code analysis
Extracted from the source by best-effort static analysis (no code is executed); details may be incomplete.
Views touched 16
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_account_payment_form_maquila |
account.payment.form.maquila | account.payment | form | Inherits account.view_account_payment_form |
view_maquila_admission_form |
l10n_py.maquila.admission.form | l10n_py.maquila.admission | form | New |
view_maquila_admission_search |
l10n_py.maquila.admission.search | l10n_py.maquila.admission | search | New |
view_maquila_admission_tree |
l10n_py.maquila.admission.tree | l10n_py.maquila.admission | list | New |
view_maquila_export_form |
l10n_py.maquila.export.form | l10n_py.maquila.export | form | New |
view_maquila_export_search |
l10n_py.maquila.export.search | l10n_py.maquila.export | search | New |
view_maquila_export_tree |
l10n_py.maquila.export.tree | l10n_py.maquila.export | list | New |
view_maquila_guarantee_form |
l10n_py.maquila.guarantee.form | l10n_py.maquila.guarantee | form | New |
view_maquila_guarantee_search |
l10n_py.maquila.guarantee.search | l10n_py.maquila.guarantee | search | New |
view_maquila_guarantee_tree |
l10n_py.maquila.guarantee.tree | l10n_py.maquila.guarantee | list | New |
view_maquila_program_form_inherit_ops |
l10n_py.maquila.program.form.inherit.ops | l10n_py.maquila.program | form | Inherits l10n_py_maquila_base.view_maquila_program_form |
view_maquila_tax_credit_wizard_form |
l10n_py.maquila.tax.credit.wizard.form | l10n_py.maquila.tax.credit.wizard | form | New |
view_maquila_tum_wizard_form |
l10n_py.maquila.tum.wizard.form | l10n_py.maquila.tum.wizard | form | New |
view_purchase_order_form_maquila |
purchase.order.form.maquila | purchase.order | form | Inherits purchase.purchase_order_form |
view_purchase_order_line_form_maquila |
purchase.order.line.form.maquila | purchase.order | form | Inherits purchase.purchase_order_form |
view_sale_order_form_maquila |
sale.order.form.maquila | sale.order | form | Inherits sale.view_order_form |
HTTP endpoints 0
No HTTP endpoints found for this module.
Models touched 14
-
l10n_py_is_maquila_exportBooleancompute='_compute_maquila_export'store=Truestring='Maquila Export' -
l10n_py_maquila_program_idMany2one → l10n_py.maquila.programstring='Maquila Program' args: 'l10n_py.maquila.program'
No public methods.
-
l10n_py_is_maquila_exemptBooleancompute='_compute_maquila_exempt'string='Maquila Exempt' -
l10n_py_maquila_program_idMany2one → l10n_py.maquila.programstring='Maquila Program' args: 'l10n_py.maquila.program' -
l10n_py_remittance_typeSelectionstring='Remittance Type' args: [('dividends', 'Dividends'), ('royalties', 'Royalties'), ('interest', 'Interest')]
No public methods.
-
amount_cifMonetarystring='CIF Amount' -
cnime_certificateCharstring='CNIME Certificate'tracking=True -
company_idMany2onerelated='program_id.company_id'store=True -
currency_idMany2one → res.currencydefault=<expr> args: 'res.currency' -
date_admissionDatedefault=fields.Date.todayrequired=Truestring='Import Date'tracking=True -
date_arrivalDatehelp='Date of the arrival declaration (declaracion de llegada). Starts the 12-month stay of containers and trailer boxes (Ley 7547/2025 Art. 14).'string='Arrival Declaration Date'tracking=True -
date_deadlineDatecompute='_compute_date_deadline'help='Ley 7547/2025 Art. 14: 12 months from the import date (raw materials and inputs), 12 months from the arrival declaration (containers and trailer boxes), or the program benefit expiry (other goods).'store=Truestring='Deadline' -
date_extendedDatestring='Extended Deadline'tracking=True -
good_typeSelectiondefault='raw_material_input'help='Ley 7547/2025 Art. 14 stay limits per type of good:\n- Raw materials and inputs: 12 months from the import date, extendable once for up to the same period (biministerial resolution).\n- Containers and trailer boxes: 12 months maximum from the arrival declaration; no extension.\n- Other goods (machinery, tools, equipment): while the Maquila program remains in force.'required=Truetracking=True args: [('raw_material_input', 'Raw Materials and Inputs'), ('container_box', 'Containers and Trailer Boxes'), ('capital_good', 'Machinery, Tools and Other Goods')] -
guarantee_idMany2one → l10n_py.maquila.guaranteestring='Customs Guarantee'tracking=True args: 'l10n_py.maquila.guarantee' -
line_idsOne2many → l10n_py.maquila.admission.linestring='Lines' args: 'l10n_py.maquila.admission.line', 'admission_id' -
nameCharhelp='Dispatch number (e.g. DI-2026-00123)'required=Truestring='Dispatch Number'tracking=True -
picking_idsOne2many → stock.pickingstring='Pickings' args: 'stock.picking', 'l10n_py_maquila_admission_id' -
program_idMany2one → l10n_py.maquila.programdomain="[('state', '=', 'active')]"required=Truetracking=True args: 'l10n_py.maquila.program' -
stateSelectiondefault='draft'required=Truetracking=True args: [('draft', 'Draft'), ('admitted', 'Admitted'), ('in_production', 'In Production'), ('closed', 'Closed'), ('expired', 'Expired')] -
supplier_idMany2one → res.partnerstring='Supplier' args: 'res.partner'
-
action_admit(self) -
action_close(self) -
action_draft(self) -
action_extend(self)Ley 7547/2025 Art. 14: raw materials and inputs may have their stay extended (biministerial resolution) for a period not exceeding the original 12 months. Containers and trailer boxes (12 months maximum) and the other goods (stay tied to the program) cannot be extended. -
action_in_production(self)
-
admission_idMany2one → l10n_py.maquila.admissionondelete='cascade'required=True args: 'l10n_py.maquila.admission' -
currency_idMany2onerelated='admission_id.currency_id' -
fob_valueMonetarystring='FOB Value' -
lot_idMany2one → stock.lotstring='Lot/Serial' args: 'stock.lot' -
ncm_codeCharstring='NCM Code' -
product_idMany2one → product.productrequired=True args: 'product.product' -
qty_consumedFloatcompute='_compute_qty_remaining'digits='Product Unit of Measure' -
qty_remainingFloatcompute='_compute_qty_remaining'digits='Product Unit of Measure' -
quantityFloatdigits='Product Unit of Measure'required=True -
uom_idMany2one → uom.uomstring='Unit of Measure' args: 'uom.uom'
No public methods.
-
admission_idsMany2many → l10n_py.maquila.admissionhelp='Traceability to source temporary admissions'string='Source Admissions' args: 'l10n_py.maquila.admission' -
company_idMany2onerelated='program_id.company_id'store=True -
currency_idMany2one → res.currencydefault=<expr> args: 'res.currency' -
date_exportDatedefault=fields.Date.todayrequired=Truetracking=True -
incotermChar -
line_idsOne2many → l10n_py.maquila.export.linestring='Lines' args: 'l10n_py.maquila.export.line', 'export_id' -
nameCharrequired=Truetracking=True -
origin_certificateCharstring='Certificate of Origin'tracking=True -
picking_idsOne2many → stock.pickingstring='Pickings' args: 'stock.picking', 'l10n_py_maquila_export_id' -
program_idMany2one → l10n_py.maquila.programdomain="[('state', '=', 'active')]"required=Truetracking=True args: 'l10n_py.maquila.program' -
stateSelectiondefault='draft'required=Truetracking=True args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('dispatched', 'Dispatched')]
-
action_confirm(self) -
action_dispatch(self) -
action_draft(self)
-
currency_idMany2onerelated='export_id.currency_id' -
export_idMany2one → l10n_py.maquila.exportondelete='cascade'required=True args: 'l10n_py.maquila.export' -
fob_valueMonetarystring='FOB Value' -
product_idMany2one → product.productrequired=True args: 'product.product' -
quantityFloatdigits='Product Unit of Measure'required=True -
uom_idMany2one → uom.uomstring='Unit of Measure' args: 'uom.uom'
No public methods.
-
admission_idsOne2many → l10n_py.maquila.admissionstring='Admissions' args: 'l10n_py.maquila.admission', 'guarantee_id' -
amountMonetaryrequired=True -
amount_availableMonetarycompute='_compute_amounts' -
amount_usedMonetarycompute='_compute_amounts' -
company_idMany2onerelated='program_id.company_id'store=True -
currency_idMany2one → res.currencydefault=<expr> args: 'res.currency' -
date_endDaterequired=True -
date_startDaterequired=True -
guarantee_typeSelectionrequired=Truetracking=True args: [('bank', 'Bank Guarantee'), ('insurance', 'Insurance Bond'), ('deposit', 'Cash Deposit'), ('mortgage', 'Mortgage')] -
issuerCharhelp='Bank or insurance company' -
nameCharrequired=Truetracking=True -
program_idMany2one → l10n_py.maquila.programrequired=Truetracking=True args: 'l10n_py.maquila.program' -
scopeSelectiondefault='operation'help='Decreto 5714/2026 Art. 28: the DNIT may authorize global guarantees covering one or more customs operations. A per-operation guarantee covers a single admission. Form, modalities and validity follow art. 293 of the Customs Code (Ley 2422/2004) and its regulations; they are not validated by this module.'required=Truetracking=True args: [('operation', 'Per Operation'), ('global', 'Global')] -
stateSelectiondefault='active'required=Truetracking=True args: [('active', 'Active'), ('expired', 'Expired'), ('released', 'Released')]
No public methods.
-
admission_countIntegercompute='_compute_admission_count' -
admission_idsOne2many → l10n_py.maquila.admissionstring='Admissions' args: 'l10n_py.maquila.admission', 'program_id' -
export_countIntegercompute='_compute_export_count' -
export_idsOne2many → l10n_py.maquila.exportstring='Exports' args: 'l10n_py.maquila.export', 'program_id' -
guarantee_countIntegercompute='_compute_guarantee_count' -
guarantee_idsOne2many → l10n_py.maquila.guaranteestring='Guarantees' args: 'l10n_py.maquila.guarantee', 'program_id'
-
action_view_admissions(self) -
action_view_exports(self) -
action_view_guarantees(self)
-
action_typeSelectiondefault='compensate'required=True args: [('compensate', 'Compensate'), ('transfer', 'Transfer to Third Party')] -
amountMonetaryrequired=True -
credit_account_idMany2one → account.accountstring='Credit Account' args: 'account.account' -
currency_idMany2one → res.currencydefault=<expr> args: 'res.currency' -
debit_account_idMany2one → account.accountstring='Debit Account' args: 'account.account' -
program_idMany2one → l10n_py.maquila.programdomain="[('state', '=', 'active')]"required=True args: 'l10n_py.maquila.program' -
transfer_partner_idMany2one → res.partnerstring='Transfer To' args: 'res.partner'
-
action_execute(self)
-
credit_account_idMany2one → account.accounthelp='Account to credit for TUM liability'string='TUM Payable Account' args: 'account.account' -
currency_idMany2one → res.currencydefault=<expr> args: 'res.currency' -
debit_account_idMany2one → account.accounthelp='Account to debit for TUM expense'string='TUM Expense Account' args: 'account.account' -
export_invoice_amountMonetaryreadonly=True -
period_endDaterequired=True -
period_startDaterequired=True -
program_idMany2one → l10n_py.maquila.programdomain="[('state', '=', 'active')]"required=True args: 'l10n_py.maquila.program' -
tum_amountMonetarycompute='_compute_tum'string='TUM Amount' -
tum_baseMonetarycompute='_compute_tum'string='TUM Base' -
tum_rateFloatdefault=1.0string='TUM Rate %' -
van_amountMonetaryhelp='Value added in the national territory (Ley 7547/2025 Art. 37). Enter it manually; when l10n_py_maquila_mrp is installed, its VAN wizard computes it from the bill of materials.'string='VAN Amount'
-
action_compute(self)Compute VAN and export invoice amounts for the period. -
action_generate_move(self)Generate the TUM accounting entry.
-
l10n_py_maquila_program_idMany2one → l10n_py.maquila.programstring='Maquila Program' args: 'l10n_py.maquila.program'
No public methods.
-
l10n_py_origin_typeSelectionstring='Origin Type' args: [('temporary_admission', 'Temporary Admission'), ('national_py', 'National (Paraguay)'), ('national_mercosul', 'National (Mercosul)'), ('imported', 'Imported (Other)')]
-
default_get(self, fields_list)@api.model
-
l10n_py_is_maquila_exportBooleancompute='_compute_is_maquila_export' -
l10n_py_maquila_cap_overrideBooleancopy=Falsegroups='l10n_py_maquila_base.group_maquila_manager'help='Explicit exception to the Art. 18 domestic sales cap of pure maquila. Only Maquila managers can set it; a reason is required and the use is logged in the chatter when the order is confirmed.'string='Override Domestic Sales Cap'tracking=True -
l10n_py_maquila_cap_override_reasonCharcopy=Falsegroups='l10n_py_maquila_base.group_maquila_manager'string='Override Reason'tracking=True -
l10n_py_maquila_program_idMany2one → l10n_py.maquila.programstring='Maquila Program' args: 'l10n_py.maquila.program' -
l10n_py_maquila_typeSelectionrelated='l10n_py_maquila_program_id.maquila_type'string='Maquila Type'
-
action_confirm(self)
-
l10n_py_maquila_admission_idMany2one → l10n_py.maquila.admissionstring='Maquila Admission' args: 'l10n_py.maquila.admission' -
l10n_py_maquila_export_idMany2one → l10n_py.maquila.exportstring='Maquila Export' args: 'l10n_py.maquila.export'
No public methods.
Loading…
- Status
- Open migration PR — not merged yet for this version
- CI status
- checks failing
- Open since
- 7 days ago
- Last activity
- 7 days ago
- Repository
- OCA/l10n-paraguay
- Pull request
- [20.0][MIG] l10n_py_maquila_ops: Migration to 20.0 (#80)