Repository
OCA/l10n-paraguay · module folder · Try on Runboat
Module version
1.0.0
Category
Accounting/Localizations
Folder size
0.19 MB
License
LGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/l10n-paraguay
Last tracking update
2026-08-07 08:42:53
Authors
Odoo Community Association (OCA), KMEE
Maintainers
Odoo Community Association (OCA), KMEE
Committers
mileo, OCA-git-bot, oca-ci, André Marcos Ferreira
Odoo dependencies
Python dependencies
num2words, python-stdnum
System dependencies
None
Required by
l10n_py_edi_base
Description
# Paraguay - Accounting Extensions

This module extends the base Paraguayan accounting localization with specific functionality required for Paraguayan fiscal compliance.

## Features

- **Journal Extensions**: Enhanced journal configuration with Paraguayan-specific fields
  - Establishment (punto de expedición)
  - Point of Sale (punto de emisión)
  - Timbrado (tax stamp authorization)

- **Authorization Management**: Complete timbrado lifecycle management
  - Authorization number tracking
  - Validity period control
  - Document number range management
  - Automatic sequence generation

- **Account Move Extensions**: Enhanced invoice/bill features
  - Automatic timbrado assignment
  - Document number formatting
  - Fiscal validations

- **Fiscal Validations**: 
  - Valid timbrado verification
  - Document number range validation
  - Expiration date checking

## Purpose

This module bridges the gap between Odoo's standard accounting and Paraguayan fiscal requirements, particularly focusing on timbrado management which is mandatory for all fiscal documents in Paraguay.

## Dependencies

- `account`: Odoo core accounting
- `l10n_py_base`: Base Paraguayan localization

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
view_account_authorization_form account.authorization.form account.authorization form New
view_account_authorization_search account.authorization.search account.authorization search New
view_account_authorization_tree account.authorization.tree account.authorization list New
view_account_journal_form_edi account.journal.form.edi account.journal form Inherits account.view_account_journal_form
view_invoice_tree_py account.move.tree.py account.move tree Inherits account.view_invoice_tree
view_move_form_py account.move.form.py account.move form Inherits account.view_move_form
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (4)

New fields (16)
  • active Boolean
    default=True help='Marcar como inactivo para deshabilitar el timbrado' string='Activo'
  • company_id Many2one → res.company
    default=<expr> required=True string='Compañía' args: 'res.company'
  • date_from Date
    help='Fecha desde la cual el timbrado es válido' required=True string='Fecha de Inicio'
  • date_to Date
    help='Fecha hasta la cual el timbrado es válido' required=True string='Fecha de Vencimiento'
  • establishment Char
    default='001' help='Código de establecimiento (3 dígitos)' required=True size=3 string='Establecimiento'
  • expedition_point Char
    default='001' help='Código de punto de expedición (3 dígitos)' required=True size=3 string='Punto de Expedición'
  • invoice_number_from Integer
    help='Primer número de factura autorizado' required=True string='Número Desde'
  • invoice_number_to Integer
    help='Último número de factura autorizado' required=True string='Número Hasta'
  • l10n_latam_document_type_id Many2one → l10n_latam.document.type
    comodel_name='l10n_latam.document.type' help='Tipo de documento LATAM (Factura, NC, ND, etc.)' required=True string='Tipo de Documento'
  • name Char
    help='Número de timbrado otorgado por la SET' required=True size=8 string='Número de Timbrado'
  • next_number Integer
    compute='_compute_next_number' help='Próximo número de factura a utilizar' string='Próximo Número'
  • remaining_numbers Integer
    compute='_compute_remaining_numbers' help='Cantidad de números aún disponibles' string='Números Disponibles'
  • series Char
    default='AA' help='Serie del timbrado (2 letras mayúsculas, AA-ZZ). Permite reiniciar numeración cuando se agota la faja.' size=2 string='Serie'
  • state Selection
    compute='_compute_state' store=True string='Estado' args: [('valid', 'Vigente'), ('expired', 'Vencido'), ('to_expire', 'Por Vencer')]
  • usage_percentage Float
    compute='_compute_usage_percentage' help='Porcentaje de números utilizados respecto al total autorizado' string='Porcentaje de Uso'
  • used_numbers Integer
    compute='_compute_used_numbers' help='Cantidad de números ya utilizados' string='Números Utilizados'
Public methods (2)
  • check_number_available(self, number, exclude_move_id=False)
    Verifica si un número está disponible en este timbrado
  • check_validity(self)
    Verifica si el timbrado es válido en la fecha actual

New fields (4)
  • l10n_py_authorization_id Many2one → account.authorization
    domain="[('company_id', '=', company_id), ('active', '=', True)]" help='Timbrado autorizado por SET para este diario' string='Timbrado' args: 'account.authorization'
  • l10n_py_authorization_validity Date
    help='Fecha de vencimiento del timbrado' readonly=True related='l10n_py_authorization_id.date_to' store=True string='Vencimiento del Timbrado'
  • l10n_py_establishment Char
    default='001' help='Código de establecimiento (3 dígitos)' size=3 string='Establecimiento'
  • l10n_py_point Char
    default='001' help='Código de punto de expedición (3 dígitos)' size=3 string='Punto de Expedición'
Public methods (0)

No public methods.

New fields (16)
  • l10n_py_amount_exempt Monetary
    compute='_compute_l10n_py_iva' currency_field='currency_id' help='Subtotal exento/no gravado (SIFEN F003)' store=True string='Total Exento (F003)'
  • l10n_py_amount_iva_10 Monetary
    compute='_compute_l10n_py_iva' currency_field='currency_id' help='Liquidación IVA 10% (SIFEN F016)' store=True string='Liquidación IVA 10% (F016)'
  • l10n_py_amount_iva_5 Monetary
    compute='_compute_l10n_py_iva' currency_field='currency_id' help='Liquidación IVA 5% (SIFEN F015)' store=True string='Liquidación IVA 5% (F015)'
  • l10n_py_amount_iva_total Monetary
    compute='_compute_l10n_py_iva' currency_field='currency_id' help='Total liquidación IVA (SIFEN F014)' store=True string='Total IVA (F014)'
  • l10n_py_amount_subtotal_10 Monetary
    compute='_compute_l10n_py_iva' currency_field='currency_id' help='Subtotal gravado 10% — valor con impuesto incluido (SIFEN F005)' store=True string='Total Gravado 10% (F005)'
  • l10n_py_amount_subtotal_5 Monetary
    compute='_compute_l10n_py_iva' currency_field='currency_id' help='Subtotal gravado 5% — valor con impuesto incluido (SIFEN F004)' store=True string='Total Gravado 5% (F004)'
  • l10n_py_amount_total_pyg Monetary
    compute='_compute_l10n_py_total_pyg' currency_field='currency_id' help='Total de la operación en guaraníes (SIFEN F023)' store=True string='Total en Guaraníes (F023)'
  • l10n_py_amount_total_words Char
    compute='_compute_l10n_py_amount_total_words' string='Total en Letras'
  • l10n_py_authorization_id Many2one → account.authorization
    domain="[('company_id', '=', company_id), ('active', '=', True), ('state', '!=', 'expired')]" help='Timbrado utilizado para esta factura' string='Timbrado' args: 'account.authorization'
  • l10n_py_base_10 Monetary
    compute='_compute_l10n_py_iva' currency_field='currency_id' help='Base gravada neta 10% sin IVA (SIFEN F019)' store=True string='Base Gravada 10% (F019)'
  • l10n_py_base_5 Monetary
    compute='_compute_l10n_py_iva' currency_field='currency_id' help='Base gravada neta 5% sin IVA (SIFEN F018)' store=True string='Base Gravada 5% (F018)'
  • l10n_py_base_total Monetary
    compute='_compute_l10n_py_iva' currency_field='currency_id' help='Total base gravada (SIFEN F020 = F018 + F019)' store=True string='Total Base Gravada (F020)'
  • l10n_py_exchange_rate Float
    digits=(16, 4) help='Tipo de cambio a guaraníes (PYG) para facturación en moneda extranjera' string='Tipo de Cambio'
  • l10n_py_full_invoice_number Char
    compute='_compute_l10n_py_full_invoice_number' help='Número completo de factura (formato: 001-001-0000001)' store=True string='Número Completo'
  • l10n_py_invoice_number Integer
    help='Número de factura según timbrado autorizado' string='Número de Factura'
  • l10n_py_total_operation Monetary
    compute='_compute_l10n_py_iva' currency_field='currency_id' help='Total de la operación (SIFEN F008 = F003 + F004 + F005)' store=True string='Total Operación (F008)'
Public methods (1)
  • action_post(self)
    Override para asignar numeración secuencial al confirmar

New fields (0)

No new fields.

Public methods (0)

No public methods.

Loading…