Skip to content
Health
77/100
good
  • Security25/25
    No findings
  • Activity25/25
    Human commit this month
  • Required by15/25
    1 module depends on it
  • Maturity12/25
    In 2 Odoo series since 18.0

Heuristic over the facts below, not an audit · How it's computed

Security findings
Grave / minor (static analysis)
Required by
1
Modules depending on it
External deps
1 pip · 0 bin
Python packages / system binaries
License
AGPL-3
No conflicts with its dependencies
Folder size
0.2 MB
Module directory on disk
Code analysis 0 migration notes 14 models 16 views 0 HTTP endpoints

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

Code analysis

Extracted from the source by best-effort static analysis (no code is executed); details may be incomplete.

Views touched 16

XML IDNameModelTypeStatus
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

New fields (2)
  • l10n_py_is_maquila_export Boolean
    compute='_compute_maquila_export' store=True string='Maquila Export'
  • l10n_py_maquila_program_id Many2one → l10n_py.maquila.program
    string='Maquila Program' args: 'l10n_py.maquila.program'
Public methods (0)

No public methods.

New fields (3)
  • l10n_py_is_maquila_exempt Boolean
    compute='_compute_maquila_exempt' string='Maquila Exempt'
  • l10n_py_maquila_program_id Many2one → l10n_py.maquila.program
    string='Maquila Program' args: 'l10n_py.maquila.program'
  • l10n_py_remittance_type Selection
    string='Remittance Type' args: [('dividends', 'Dividends'), ('royalties', 'Royalties'), ('interest', 'Interest')]
Public methods (0)

No public methods.

New fields (16)
  • amount_cif Monetary
    string='CIF Amount'
  • cnime_certificate Char
    string='CNIME Certificate' tracking=True
  • company_id Many2one
    related='program_id.company_id' store=True
  • currency_id Many2one → res.currency
    default=<expr> args: 'res.currency'
  • date_admission Date
    default=fields.Date.today required=True string='Import Date' tracking=True
  • date_arrival Date
    help='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_deadline Date
    compute='_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=True string='Deadline'
  • date_extended Date
    string='Extended Deadline' tracking=True
  • good_type Selection
    default='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=True tracking=True args: [('raw_material_input', 'Raw Materials and Inputs'), ('container_box', 'Containers and Trailer Boxes'), ('capital_good', 'Machinery, Tools and Other Goods')]
  • guarantee_id Many2one → l10n_py.maquila.guarantee
    string='Customs Guarantee' tracking=True args: 'l10n_py.maquila.guarantee'
  • line_ids One2many → l10n_py.maquila.admission.line
    string='Lines' args: 'l10n_py.maquila.admission.line', 'admission_id'
  • name Char
    help='Dispatch number (e.g. DI-2026-00123)' required=True string='Dispatch Number' tracking=True
  • picking_ids One2many → stock.picking
    string='Pickings' args: 'stock.picking', 'l10n_py_maquila_admission_id'
  • program_id Many2one → l10n_py.maquila.program
    domain="[('state', '=', 'active')]" required=True tracking=True args: 'l10n_py.maquila.program'
  • state Selection
    default='draft' required=True tracking=True args: [('draft', 'Draft'), ('admitted', 'Admitted'), ('in_production', 'In Production'), ('closed', 'Closed'), ('expired', 'Expired')]
  • supplier_id Many2one → res.partner
    string='Supplier' args: 'res.partner'
Public methods (5)
  • 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)

New fields (10)
  • admission_id Many2one → l10n_py.maquila.admission
    ondelete='cascade' required=True args: 'l10n_py.maquila.admission'
  • currency_id Many2one
    related='admission_id.currency_id'
  • fob_value Monetary
    string='FOB Value'
  • lot_id Many2one → stock.lot
    string='Lot/Serial' args: 'stock.lot'
  • ncm_code Char
    string='NCM Code'
  • product_id Many2one → product.product
    required=True args: 'product.product'
  • qty_consumed Float
    compute='_compute_qty_remaining' digits='Product Unit of Measure'
  • qty_remaining Float
    compute='_compute_qty_remaining' digits='Product Unit of Measure'
  • quantity Float
    digits='Product Unit of Measure' required=True
  • uom_id Many2one → uom.uom
    string='Unit of Measure' args: 'uom.uom'
Public methods (0)

No public methods.

New fields (11)
  • admission_ids Many2many → l10n_py.maquila.admission
    help='Traceability to source temporary admissions' string='Source Admissions' args: 'l10n_py.maquila.admission'
  • company_id Many2one
    related='program_id.company_id' store=True
  • currency_id Many2one → res.currency
    default=<expr> args: 'res.currency'
  • date_export Date
    default=fields.Date.today required=True tracking=True
  • incoterm Char
  • line_ids One2many → l10n_py.maquila.export.line
    string='Lines' args: 'l10n_py.maquila.export.line', 'export_id'
  • name Char
    required=True tracking=True
  • origin_certificate Char
    string='Certificate of Origin' tracking=True
  • picking_ids One2many → stock.picking
    string='Pickings' args: 'stock.picking', 'l10n_py_maquila_export_id'
  • program_id Many2one → l10n_py.maquila.program
    domain="[('state', '=', 'active')]" required=True tracking=True args: 'l10n_py.maquila.program'
  • state Selection
    default='draft' required=True tracking=True args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('dispatched', 'Dispatched')]
Public methods (3)
  • action_confirm(self)
  • action_dispatch(self)
  • action_draft(self)

New fields (6)
  • currency_id Many2one
    related='export_id.currency_id'
  • export_id Many2one → l10n_py.maquila.export
    ondelete='cascade' required=True args: 'l10n_py.maquila.export'
  • fob_value Monetary
    string='FOB Value'
  • product_id Many2one → product.product
    required=True args: 'product.product'
  • quantity Float
    digits='Product Unit of Measure' required=True
  • uom_id Many2one → uom.uom
    string='Unit of Measure' args: 'uom.uom'
Public methods (0)

No public methods.

New fields (14)
  • admission_ids One2many → l10n_py.maquila.admission
    string='Admissions' args: 'l10n_py.maquila.admission', 'guarantee_id'
  • amount Monetary
    required=True
  • amount_available Monetary
    compute='_compute_amounts'
  • amount_used Monetary
    compute='_compute_amounts'
  • company_id Many2one
    related='program_id.company_id' store=True
  • currency_id Many2one → res.currency
    default=<expr> args: 'res.currency'
  • date_end Date
    required=True
  • date_start Date
    required=True
  • guarantee_type Selection
    required=True tracking=True args: [('bank', 'Bank Guarantee'), ('insurance', 'Insurance Bond'), ('deposit', 'Cash Deposit'), ('mortgage', 'Mortgage')]
  • issuer Char
    help='Bank or insurance company'
  • name Char
    required=True tracking=True
  • program_id Many2one → l10n_py.maquila.program
    required=True tracking=True args: 'l10n_py.maquila.program'
  • scope Selection
    default='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=True tracking=True args: [('operation', 'Per Operation'), ('global', 'Global')]
  • state Selection
    default='active' required=True tracking=True args: [('active', 'Active'), ('expired', 'Expired'), ('released', 'Released')]
Public methods (0)

No public methods.

New fields (6)
  • admission_count Integer
    compute='_compute_admission_count'
  • admission_ids One2many → l10n_py.maquila.admission
    string='Admissions' args: 'l10n_py.maquila.admission', 'program_id'
  • export_count Integer
    compute='_compute_export_count'
  • export_ids One2many → l10n_py.maquila.export
    string='Exports' args: 'l10n_py.maquila.export', 'program_id'
  • guarantee_count Integer
    compute='_compute_guarantee_count'
  • guarantee_ids One2many → l10n_py.maquila.guarantee
    string='Guarantees' args: 'l10n_py.maquila.guarantee', 'program_id'
Public methods (3)
  • action_view_admissions(self)
  • action_view_exports(self)
  • action_view_guarantees(self)

New fields (7)
  • action_type Selection
    default='compensate' required=True args: [('compensate', 'Compensate'), ('transfer', 'Transfer to Third Party')]
  • amount Monetary
    required=True
  • credit_account_id Many2one → account.account
    string='Credit Account' args: 'account.account'
  • currency_id Many2one → res.currency
    default=<expr> args: 'res.currency'
  • debit_account_id Many2one → account.account
    string='Debit Account' args: 'account.account'
  • program_id Many2one → l10n_py.maquila.program
    domain="[('state', '=', 'active')]" required=True args: 'l10n_py.maquila.program'
  • transfer_partner_id Many2one → res.partner
    string='Transfer To' args: 'res.partner'
Public methods (1)
  • action_execute(self)

New fields (11)
  • credit_account_id Many2one → account.account
    help='Account to credit for TUM liability' string='TUM Payable Account' args: 'account.account'
  • currency_id Many2one → res.currency
    default=<expr> args: 'res.currency'
  • debit_account_id Many2one → account.account
    help='Account to debit for TUM expense' string='TUM Expense Account' args: 'account.account'
  • export_invoice_amount Monetary
    readonly=True
  • period_end Date
    required=True
  • period_start Date
    required=True
  • program_id Many2one → l10n_py.maquila.program
    domain="[('state', '=', 'active')]" required=True args: 'l10n_py.maquila.program'
  • tum_amount Monetary
    compute='_compute_tum' string='TUM Amount'
  • tum_base Monetary
    compute='_compute_tum' string='TUM Base'
  • tum_rate Float
    default=1.0 string='TUM Rate %'
  • van_amount Monetary
    help='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'
Public methods (2)
  • action_compute(self)
    Compute VAN and export invoice amounts for the period.
  • action_generate_move(self)
    Generate the TUM accounting entry.

New fields (1)
  • l10n_py_maquila_program_id Many2one → l10n_py.maquila.program
    string='Maquila Program' args: 'l10n_py.maquila.program'
Public methods (0)

No public methods.

New fields (1)
  • l10n_py_origin_type Selection
    string='Origin Type' args: [('temporary_admission', 'Temporary Admission'), ('national_py', 'National (Paraguay)'), ('national_mercosul', 'National (Mercosul)'), ('imported', 'Imported (Other)')]
Public methods (1)
  • default_get(self, fields_list)
    @api.model

New fields (5)
  • l10n_py_is_maquila_export Boolean
    compute='_compute_is_maquila_export'
  • l10n_py_maquila_cap_override Boolean
    copy=False groups='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_reason Char
    copy=False groups='l10n_py_maquila_base.group_maquila_manager' string='Override Reason' tracking=True
  • l10n_py_maquila_program_id Many2one → l10n_py.maquila.program
    string='Maquila Program' args: 'l10n_py.maquila.program'
  • l10n_py_maquila_type Selection
    related='l10n_py_maquila_program_id.maquila_type' string='Maquila Type'
Public methods (1)
  • action_confirm(self)

New fields (2)
  • l10n_py_maquila_admission_id Many2one → l10n_py.maquila.admission
    string='Maquila Admission' args: 'l10n_py.maquila.admission'
  • l10n_py_maquila_export_id Many2one → l10n_py.maquila.export
    string='Maquila Export' args: 'l10n_py.maquila.export'
Public methods (0)

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)