🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1012 lines
43 KiB
Markdown
1012 lines
43 KiB
Markdown
# ANALISIS COMPARATIVO EXHAUSTIVO: Odoo Account vs ERP-Core Financial
|
|
|
|
## Metadata
|
|
- **Fecha de Analisis:** 2026-01-04
|
|
- **Fuente Odoo:** `/home/isem/workspace-old/wsl-ubuntu/workspace/worskpace-inmobiliaria/shared/reference/odoo/addons/account/models/`
|
|
- **Fuente ERP-Core:** `/home/isem/workspace-v1/projects/erp-core/database/ddl/04-financial.sql`
|
|
|
|
---
|
|
|
|
# 1. INVENTARIO DE MODELOS/TABLAS
|
|
|
|
## 1.1 Modelos Odoo Account
|
|
| # | Modelo Odoo | Descripcion | Tabla SQL Equivalente |
|
|
|---|-------------|-------------|----------------------|
|
|
| 1 | account.move | Journal Entry (Asiento Contable/Factura) | journal_entries + invoices |
|
|
| 2 | account.move.line | Journal Item (Linea de Asiento) | journal_entry_lines + invoice_lines |
|
|
| 3 | account.journal | Diarios Contables | journals |
|
|
| 4 | account.journal.group | Grupos de Diarios | NO EXISTE |
|
|
| 5 | account.account | Cuentas Contables | accounts |
|
|
| 6 | account.account.tag | Etiquetas de Cuentas | NO EXISTE |
|
|
| 7 | account.group | Grupos de Cuentas | NO EXISTE |
|
|
| 8 | account.root | Raiz de Cuentas | NO EXISTE |
|
|
| 9 | account.tax | Impuestos | taxes |
|
|
| 10 | account.tax.group | Grupos de Impuestos | tax_groups |
|
|
| 11 | account.tax.repartition.line | Distribucion de Impuestos | NO EXISTE |
|
|
| 12 | account.payment | Pagos | payments |
|
|
| 13 | account.payment.term | Terminos de Pago | payment_terms |
|
|
| 14 | account.payment.term.line | Lineas de Terminos de Pago | NO EXISTE (JSONB) |
|
|
| 15 | account.payment.method | Metodos de Pago | NO EXISTE (ENUM) |
|
|
| 16 | account.payment.method.line | Lineas de Metodos de Pago | NO EXISTE |
|
|
| 17 | account.bank.statement | Extractos Bancarios | NO EXISTE |
|
|
| 18 | account.bank.statement.line | Lineas de Extractos | NO EXISTE |
|
|
| 19 | account.partial.reconcile | Conciliacion Parcial | account_partial_reconcile |
|
|
| 20 | account.full.reconcile | Conciliacion Completa | account_full_reconcile |
|
|
| 21 | account.reconcile.model | Modelos de Conciliacion | NO EXISTE |
|
|
| 22 | account.reconcile.model.line | Lineas de Modelos de Conciliacion | NO EXISTE |
|
|
| 23 | account.fiscal.position | Posiciones Fiscales | NO EXISTE |
|
|
| 24 | account.fiscal.position.tax | Mapeo de Impuestos Fiscales | NO EXISTE |
|
|
| 25 | account.fiscal.position.account | Mapeo de Cuentas Fiscales | NO EXISTE |
|
|
| 26 | account.cash.rounding | Redondeo de Efectivo | NO EXISTE |
|
|
| 27 | account.incoterms | Incoterms | NO EXISTE |
|
|
| 28 | account.analytic.account | Cuentas Analiticas | NO EXISTE |
|
|
| 29 | account.analytic.line | Lineas Analiticas | NO EXISTE |
|
|
| 30 | account.analytic.plan | Planes Analiticos | NO EXISTE |
|
|
|
|
## 1.2 Tablas ERP-Core Financial
|
|
| # | Tabla ERP-Core | Descripcion | Modelo Odoo Equivalente |
|
|
|---|----------------|-------------|------------------------|
|
|
| 1 | financial.account_types | Tipos de Cuentas | PARCIAL - fields.Selection en account.account |
|
|
| 2 | financial.accounts | Plan de Cuentas | account.account |
|
|
| 3 | financial.journals | Diarios | account.journal |
|
|
| 4 | financial.fiscal_years | Anos Fiscales | NO EXISTE EN ODOO BASE |
|
|
| 5 | financial.fiscal_periods | Periodos Fiscales | NO EXISTE EN ODOO BASE |
|
|
| 6 | financial.journal_entries | Asientos | account.move |
|
|
| 7 | financial.journal_entry_lines | Lineas de Asiento | account.move.line |
|
|
| 8 | financial.tax_groups | Grupos de Impuestos | account.tax.group |
|
|
| 9 | financial.taxes | Impuestos | account.tax |
|
|
| 10 | financial.payment_terms | Terminos de Pago | account.payment.term |
|
|
| 11 | financial.invoices | Facturas | account.move (con move_type) |
|
|
| 12 | financial.invoice_lines | Lineas de Factura | account.move.line |
|
|
| 13 | financial.payments | Pagos | account.payment |
|
|
| 14 | financial.payment_invoice | Conciliacion Pago-Factura | account.partial.reconcile |
|
|
| 15 | financial.bank_accounts | Cuentas Bancarias | res.partner.bank |
|
|
| 16 | financial.reconciliations | Conciliaciones Bancarias | account.bank.statement |
|
|
| 17 | financial.account_full_reconcile | Conciliacion Completa | account.full.reconcile |
|
|
| 18 | financial.account_partial_reconcile | Conciliacion Parcial | account.partial.reconcile |
|
|
|
|
---
|
|
|
|
# 2. COMPARATIVA DETALLADA POR TABLA
|
|
|
|
## 2.1 account.move (Odoo) vs journal_entries + invoices (ERP-Core)
|
|
|
|
### 2.1.1 Campos de account.move
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | ERP usa UUID |
|
|
| name | Char | name (journal_entries) / number (invoices) | VARCHAR | EQUIVALENTE | |
|
|
| ref | Char | ref (journal_entries) / ref (invoices) | VARCHAR | EQUIVALENTE | |
|
|
| date | Date | date (journal_entries) / invoice_date (invoices) | DATE | EQUIVALENTE | |
|
|
| state | Selection | status | ENUM | EQUIVALENTE | Valores diferentes |
|
|
| move_type | Selection | - / invoice_type | ENUM | PARCIAL | Odoo unifica facturas y asientos |
|
|
| is_storno | Boolean | - | - | **FALTANTE** | |
|
|
| journal_id | Many2one | journal_id | UUID FK | EQUIVALENTE | |
|
|
| company_id | Many2one | company_id | UUID FK | EQUIVALENTE | |
|
|
| line_ids | One2many | - | - | EQUIVALENTE | Relacion inversa |
|
|
| origin_payment_id | Many2one | - | - | **FALTANTE** | |
|
|
| matched_payment_ids | Many2many | - | - | **FALTANTE** | |
|
|
| reconciled_payment_ids | Many2many (computed) | - | - | **FALTANTE** | |
|
|
| payment_count | Integer (computed) | - | - | N/A | Computed |
|
|
| statement_line_id | Many2one | - | - | **FALTANTE** | |
|
|
| statement_id | Many2one | - | - | **FALTANTE** | |
|
|
| tax_cash_basis_rec_id | Many2one | - | - | **FALTANTE** | Cash basis |
|
|
| tax_cash_basis_origin_move_id | Many2one | - | - | **FALTANTE** | |
|
|
| tax_cash_basis_created_move_ids | One2many | - | - | **FALTANTE** | |
|
|
| always_tax_exigible | Boolean | - | - | **FALTANTE** | |
|
|
| auto_post | Selection | - | - | **FALTANTE** | |
|
|
| auto_post_until | Date | - | - | **FALTANTE** | |
|
|
| auto_post_origin_id | Many2one | - | - | **FALTANTE** | |
|
|
| checked | Boolean | - | - | **FALTANTE** | |
|
|
| posted_before | Boolean | - | - | **FALTANTE** | |
|
|
| made_sequence_gap | Boolean | - | - | **FALTANTE** | |
|
|
| invoice_line_ids | One2many | - | - | N/A | Subset de line_ids |
|
|
| invoice_date | Date | invoice_date | DATE | EQUIVALENTE | |
|
|
| invoice_date_due | Date | due_date | DATE | EQUIVALENTE | |
|
|
| delivery_date | Date | - | - | **FALTANTE** | |
|
|
| invoice_payment_term_id | Many2one | payment_term_id | UUID FK | EQUIVALENTE | |
|
|
| partner_id | Many2one | partner_id | UUID FK | EQUIVALENTE | |
|
|
| commercial_partner_id | Many2one | - | - | **FALTANTE** | |
|
|
| partner_shipping_id | Many2one | - | - | **FALTANTE** | |
|
|
| partner_bank_id | Many2one | - | - | **FALTANTE** | |
|
|
| fiscal_position_id | Many2one | - | - | **FALTANTE** | |
|
|
| payment_reference | Char | - | - | **FALTANTE** | |
|
|
| display_qr_code | Boolean | - | - | **FALTANTE** | |
|
|
| qr_code_method | Selection | - | - | **FALTANTE** | |
|
|
| invoice_outstanding_credits_debits_widget | Binary | - | - | N/A | Computed |
|
|
| invoice_has_outstanding | Boolean | - | - | N/A | Computed |
|
|
| invoice_payments_widget | Binary | - | - | N/A | Computed |
|
|
| preferred_payment_method_line_id | Many2one | - | - | **FALTANTE** | |
|
|
| company_currency_id | Many2one | - | - | N/A | Related |
|
|
| currency_id | Many2one | currency_id | UUID FK | EQUIVALENTE | |
|
|
| invoice_currency_rate | Float | - | - | **FALTANTE** | |
|
|
| direction_sign | Integer | - | - | N/A | Computed |
|
|
| amount_untaxed | Monetary | amount_untaxed | DECIMAL | EQUIVALENTE | |
|
|
| amount_tax | Monetary | amount_tax | DECIMAL | EQUIVALENTE | |
|
|
| amount_total | Monetary | amount_total | DECIMAL | EQUIVALENTE | |
|
|
| amount_residual | Monetary | amount_residual | DECIMAL | EQUIVALENTE | |
|
|
| amount_untaxed_signed | Monetary | - | - | **FALTANTE** | |
|
|
| amount_tax_signed | Monetary | - | - | **FALTANTE** | |
|
|
| amount_total_signed | Monetary | - | - | **FALTANTE** | |
|
|
| amount_residual_signed | Monetary | - | - | **FALTANTE** | |
|
|
| amount_total_in_currency_signed | Monetary | - | - | **FALTANTE** | |
|
|
| tax_totals | Binary | - | - | N/A | Computed |
|
|
| payment_state | Selection | payment_state | ENUM | EQUIVALENTE | |
|
|
| reversed_entry_id | Many2one | - | - | **FALTANTE** | |
|
|
| reversal_move_ids | One2many | - | - | **FALTANTE** | |
|
|
| invoice_vendor_bill_id | Many2one | - | - | **FALTANTE** | |
|
|
| invoice_source_email | Char | - | - | **FALTANTE** | |
|
|
| invoice_partner_display_name | Char | - | - | N/A | Computed |
|
|
| is_manually_modified | Boolean | - | - | **FALTANTE** | |
|
|
| quick_edit_mode | Boolean | - | - | N/A | Computed |
|
|
| quick_edit_total_amount | Monetary | - | - | **FALTANTE** | |
|
|
| restrict_mode_hash_table | Boolean | - | - | **FALTANTE** | Hash |
|
|
| secure_sequence_number | Integer | - | - | **FALTANTE** | Hash |
|
|
| inalterable_hash | Char | - | - | **FALTANTE** | Hash |
|
|
| secured | Boolean | - | - | N/A | Computed |
|
|
| needed_terms | Binary | - | - | N/A | Computed |
|
|
| needed_terms_dirty | Boolean | - | - | N/A | Computed |
|
|
| created_at | - | created_at | TIMESTAMP | EQUIVALENTE | ERP |
|
|
| created_by | - | created_by | UUID FK | EQUIVALENTE | ERP |
|
|
| updated_at | - | updated_at | TIMESTAMP | EQUIVALENTE | ERP |
|
|
| updated_by | - | updated_by | UUID FK | EQUIVALENTE | ERP |
|
|
| posted_at | - | posted_at | TIMESTAMP | EQUIVALENTE | ERP |
|
|
| posted_by | - | posted_by | UUID FK | EQUIVALENTE | ERP |
|
|
| cancelled_at | - | cancelled_at | TIMESTAMP | EQUIVALENTE | ERP |
|
|
| cancelled_by | - | cancelled_by | UUID FK | EQUIVALENTE | ERP |
|
|
| validated_at | - | validated_at | TIMESTAMP | EQUIVALENTE | ERP |
|
|
| validated_by | - | validated_by | UUID FK | EQUIVALENTE | ERP |
|
|
|
|
### Estado Selection Odoo (move_type):
|
|
```python
|
|
[
|
|
('entry', 'Journal Entry'),
|
|
('out_invoice', 'Customer Invoice'),
|
|
('out_refund', 'Customer Credit Note'),
|
|
('in_invoice', 'Vendor Bill'),
|
|
('in_refund', 'Vendor Credit Note'),
|
|
('out_receipt', 'Sales Receipt'),
|
|
('in_receipt', 'Purchase Receipt'),
|
|
]
|
|
```
|
|
|
|
### Estado ENUM ERP-Core (invoice_type):
|
|
```sql
|
|
CREATE TYPE financial.invoice_type AS ENUM (
|
|
'customer',
|
|
'supplier'
|
|
);
|
|
```
|
|
|
|
**GAP:** ERP-Core no distingue entre facturas, notas de credito y recibos. Solo tiene customer/supplier.
|
|
|
|
---
|
|
|
|
## 2.2 account.move.line (Odoo) vs journal_entry_lines + invoice_lines (ERP-Core)
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | |
|
|
| move_id | Many2one | entry_id | UUID FK | EQUIVALENTE | |
|
|
| journal_id | Many2one | - | - | **FALTANTE** | Related en Odoo |
|
|
| company_id | Many2one | - | - | **FALTANTE** | Related en Odoo |
|
|
| move_name | Char | - | - | N/A | Related |
|
|
| parent_state | Selection | - | - | N/A | Related |
|
|
| date | Date | - | - | N/A | Related |
|
|
| ref | Char | ref | VARCHAR | EQUIVALENTE | |
|
|
| sequence | Integer | - | - | **FALTANTE** | Orden |
|
|
| account_id | Many2one | account_id | UUID FK | EQUIVALENTE | |
|
|
| account_name | Char | - | - | N/A | Related |
|
|
| account_code | Char | - | - | N/A | Related |
|
|
| name | Char | description | TEXT | EQUIVALENTE | |
|
|
| debit | Monetary | debit | DECIMAL | EQUIVALENTE | |
|
|
| credit | Monetary | credit | DECIMAL | EQUIVALENTE | |
|
|
| balance | Monetary | - | - | **FALTANTE** | debit - credit |
|
|
| cumulated_balance | Monetary | - | - | N/A | Computed |
|
|
| currency_rate | Float | - | - | N/A | Computed |
|
|
| amount_currency | Monetary | amount_currency | DECIMAL | EQUIVALENTE | |
|
|
| currency_id | Many2one | currency_id | UUID FK | EQUIVALENTE | |
|
|
| is_same_currency | Boolean | - | - | N/A | Computed |
|
|
| partner_id | Many2one | partner_id | UUID FK | EQUIVALENTE | |
|
|
| is_imported | Boolean | - | - | **FALTANTE** | |
|
|
| reconcile_model_id | Many2one | - | - | **FALTANTE** | |
|
|
| payment_id | Many2one | - | - | **FALTANTE** | |
|
|
| statement_line_id | Many2one | - | - | **FALTANTE** | |
|
|
| statement_id | Many2one | - | - | **FALTANTE** | |
|
|
| tax_ids | Many2many | tax_ids | UUID[] | EQUIVALENTE | Array en ERP |
|
|
| group_tax_id | Many2one | - | - | **FALTANTE** | |
|
|
| tax_line_id | Many2one | - | - | **FALTANTE** | |
|
|
| tax_group_id | Many2one | - | - | **FALTANTE** | |
|
|
| tax_base_amount | Monetary | - | - | **FALTANTE** | |
|
|
| tax_repartition_line_id | Many2one | - | - | **FALTANTE** | |
|
|
| tax_tag_ids | Many2many | - | - | **FALTANTE** | |
|
|
| tax_tag_invert | Boolean | - | - | **FALTANTE** | |
|
|
| amount_residual | Monetary | - | - | **FALTANTE** | Conciliacion |
|
|
| amount_residual_currency | Monetary | - | - | **FALTANTE** | Conciliacion |
|
|
| reconciled | Boolean | - | - | **FALTANTE** | |
|
|
| full_reconcile_id | Many2one | - | - | **FALTANTE** | |
|
|
| matched_debit_ids | One2many | - | - | **FALTANTE** | |
|
|
| matched_credit_ids | One2many | - | - | **FALTANTE** | |
|
|
| matching_number | Char | - | - | **FALTANTE** | |
|
|
| is_account_reconcile | Boolean | - | - | N/A | Related |
|
|
| account_type | Selection | - | - | N/A | Related |
|
|
| display_type | Selection | - | - | **FALTANTE** | |
|
|
| product_id | Many2one | product_id | UUID FK | EQUIVALENTE | |
|
|
| product_uom_id | Many2one | uom_id | UUID FK | EQUIVALENTE | |
|
|
| quantity | Float | quantity | DECIMAL | EQUIVALENTE | |
|
|
| date_maturity | Date | - | - | **FALTANTE** | Fecha vencimiento |
|
|
| price_unit | Float | price_unit | DECIMAL | EQUIVALENTE | |
|
|
| price_subtotal | Monetary | amount_untaxed | DECIMAL | EQUIVALENTE | |
|
|
| price_total | Monetary | amount_total | DECIMAL | EQUIVALENTE | |
|
|
| discount | Float | - | - | **FALTANTE** | |
|
|
| analytic_line_ids | One2many | - | - | **FALTANTE** | |
|
|
| analytic_distribution | Json | analytic_account_id | UUID | PARCIAL | ERP solo soporta 1 cuenta |
|
|
| discount_date | Date | - | - | **FALTANTE** | Early payment |
|
|
| discount_amount_currency | Monetary | - | - | **FALTANTE** | |
|
|
| discount_balance | Monetary | - | - | **FALTANTE** | |
|
|
| payment_date | Date | - | - | N/A | Computed |
|
|
|
|
### Display Type Selection Odoo:
|
|
```python
|
|
[
|
|
('product', 'Product'),
|
|
('cogs', 'Cost of Goods Sold'),
|
|
('tax', 'Tax'),
|
|
('discount', "Discount"),
|
|
('rounding', "Rounding"),
|
|
('payment_term', 'Payment Term'),
|
|
('line_section', 'Section'),
|
|
('line_note', 'Note'),
|
|
('epd', 'Early Payment Discount')
|
|
]
|
|
```
|
|
**GAP:** ERP-Core no tiene display_type para diferenciar tipos de lineas.
|
|
|
|
---
|
|
|
|
## 2.3 account.journal (Odoo) vs journals (ERP-Core)
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | |
|
|
| name | Char | name | VARCHAR | EQUIVALENTE | |
|
|
| code | Char | code | VARCHAR | EQUIVALENTE | |
|
|
| active | Boolean | active | BOOLEAN | EQUIVALENTE | |
|
|
| type | Selection | journal_type | ENUM | EQUIVALENTE | |
|
|
| autocheck_on_post | Boolean | - | - | **FALTANTE** | |
|
|
| account_control_ids | Many2many | - | - | **FALTANTE** | |
|
|
| default_account_type | Char | - | - | N/A | Computed |
|
|
| default_account_id | Many2one | default_account_id | UUID FK | EQUIVALENTE | |
|
|
| suspense_account_id | Many2one | - | - | **FALTANTE** | |
|
|
| restrict_mode_hash_table | Boolean | - | - | **FALTANTE** | Hash |
|
|
| sequence | Integer | - | - | **FALTANTE** | |
|
|
| invoice_reference_type | Selection | - | - | **FALTANTE** | |
|
|
| invoice_reference_model | Selection | - | - | **FALTANTE** | |
|
|
| currency_id | Many2one | currency_id | UUID FK | EQUIVALENTE | |
|
|
| company_id | Many2one | company_id | UUID FK | EQUIVALENTE | |
|
|
| country_code | Char | - | - | N/A | Related |
|
|
| refund_sequence | Boolean | - | - | **FALTANTE** | |
|
|
| payment_sequence | Boolean | - | - | **FALTANTE** | |
|
|
| sequence_override_regex | Text | - | - | **FALTANTE** | |
|
|
| inbound_payment_method_line_ids | One2many | - | - | **FALTANTE** | |
|
|
| outbound_payment_method_line_ids | One2many | - | - | **FALTANTE** | |
|
|
| profit_account_id | Many2one | - | - | **FALTANTE** | |
|
|
| loss_account_id | Many2one | - | - | **FALTANTE** | |
|
|
| bank_account_id | Many2one | - | - | **FALTANTE** | |
|
|
| bank_statements_source | Selection | - | - | **FALTANTE** | |
|
|
| bank_acc_number | Char | - | - | N/A | Related |
|
|
| bank_id | Many2one | - | - | N/A | Related |
|
|
| alias_id | Many2one | - | - | **FALTANTE** | Email |
|
|
| journal_group_ids | Many2many | - | - | **FALTANTE** | |
|
|
| available_payment_method_ids | Many2many | - | - | N/A | Computed |
|
|
| selected_payment_method_codes | Char | - | - | N/A | Computed |
|
|
| accounting_date | Date | - | - | N/A | Computed |
|
|
| sequence_id | - | sequence_id | UUID FK | SOLO ERP | |
|
|
| tenant_id | - | tenant_id | UUID FK | SOLO ERP | Multi-tenant |
|
|
|
|
### Journal Type Odoo:
|
|
```python
|
|
[
|
|
('sale', 'Sales'),
|
|
('purchase', 'Purchase'),
|
|
('cash', 'Cash'),
|
|
('bank', 'Bank'),
|
|
('credit', 'Credit Card'),
|
|
('general', 'Miscellaneous'),
|
|
]
|
|
```
|
|
|
|
### Journal Type ERP-Core:
|
|
```sql
|
|
CREATE TYPE financial.journal_type AS ENUM (
|
|
'sale',
|
|
'purchase',
|
|
'bank',
|
|
'cash',
|
|
'general'
|
|
);
|
|
```
|
|
**GAP:** ERP-Core no tiene 'credit' (Credit Card).
|
|
|
|
---
|
|
|
|
## 2.4 account.account (Odoo) vs accounts (ERP-Core)
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | |
|
|
| name | Char | name | VARCHAR | EQUIVALENTE | |
|
|
| code | Char | code | VARCHAR | EQUIVALENTE | |
|
|
| currency_id | Many2one | currency_id | UUID FK | EQUIVALENTE | |
|
|
| deprecated | Boolean | is_deprecated | BOOLEAN | EQUIVALENTE | |
|
|
| used | Boolean | - | - | N/A | Computed |
|
|
| account_type | Selection | account_type_id | UUID FK | DIFERENTE | Odoo usa Selection, ERP usa FK |
|
|
| include_initial_balance | Boolean | - | - | N/A | Computed |
|
|
| internal_group | Selection | - | - | N/A | Computed |
|
|
| reconcile | Boolean | is_reconcilable | BOOLEAN | EQUIVALENTE | |
|
|
| tax_ids | Many2many | - | - | **FALTANTE** | Default taxes |
|
|
| note | Text | notes | TEXT | EQUIVALENTE | |
|
|
| company_ids | Many2many | company_id | UUID FK | DIFERENTE | Odoo multi-company |
|
|
| tag_ids | Many2many | - | - | **FALTANTE** | |
|
|
| group_id | Many2one | - | - | N/A | Computed |
|
|
| root_id | Many2one | - | - | N/A | Computed |
|
|
| allowed_journal_ids | Many2many | - | - | **FALTANTE** | |
|
|
| opening_debit | Monetary | - | - | **FALTANTE** | |
|
|
| opening_credit | Monetary | - | - | **FALTANTE** | |
|
|
| opening_balance | Monetary | - | - | **FALTANTE** | |
|
|
| current_balance | Float | - | - | N/A | Computed |
|
|
| related_taxes_amount | Integer | - | - | N/A | Computed |
|
|
| non_trade | Boolean | - | - | **FALTANTE** | |
|
|
| parent_id | - | parent_id | UUID FK | SOLO ERP | Jerarquia |
|
|
| tenant_id | - | tenant_id | UUID FK | SOLO ERP | Multi-tenant |
|
|
|
|
### Account Type Odoo (Selection):
|
|
```python
|
|
[
|
|
("asset_receivable", "Receivable"),
|
|
("asset_cash", "Bank and Cash"),
|
|
("asset_current", "Current Assets"),
|
|
("asset_non_current", "Non-current Assets"),
|
|
("asset_prepayments", "Prepayments"),
|
|
("asset_fixed", "Fixed Assets"),
|
|
("liability_payable", "Payable"),
|
|
("liability_credit_card", "Credit Card"),
|
|
("liability_current", "Current Liabilities"),
|
|
("liability_non_current", "Non-current Liabilities"),
|
|
("equity", "Equity"),
|
|
("equity_unaffected", "Current Year Earnings"),
|
|
("income", "Income"),
|
|
("income_other", "Other Income"),
|
|
("expense", "Expenses"),
|
|
("expense_depreciation", "Depreciation"),
|
|
("expense_direct_cost", "Cost of Revenue"),
|
|
("off_balance", "Off-Balance Sheet"),
|
|
]
|
|
```
|
|
|
|
### Account Type ERP-Core (ENUM + Tabla):
|
|
```sql
|
|
CREATE TYPE financial.account_type AS ENUM (
|
|
'asset',
|
|
'liability',
|
|
'equity',
|
|
'revenue',
|
|
'expense'
|
|
);
|
|
-- Mas seed data con tipos especificos
|
|
```
|
|
**GAP:** ERP-Core tiene solo 5 tipos generales vs 18 tipos especificos de Odoo.
|
|
|
|
---
|
|
|
|
## 2.5 account.tax (Odoo) vs taxes (ERP-Core)
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | |
|
|
| name | Char | name | VARCHAR | EQUIVALENTE | |
|
|
| type_tax_use | Selection | tax_type | ENUM | EQUIVALENTE | |
|
|
| tax_scope | Selection | - | - | **FALTANTE** | service/consu |
|
|
| amount_type | Selection | amount_type | VARCHAR | EQUIVALENTE | |
|
|
| active | Boolean | active | BOOLEAN | EQUIVALENTE | |
|
|
| company_id | Many2one | company_id | UUID FK | EQUIVALENTE | |
|
|
| children_tax_ids | Many2many | children_tax_ids | UUID[] | EQUIVALENTE | |
|
|
| sequence | Integer | - | - | **FALTANTE** | |
|
|
| amount | Float | rate | DECIMAL | EQUIVALENTE | |
|
|
| description | Html | - | - | **FALTANTE** | |
|
|
| invoice_label | Char | - | - | **FALTANTE** | |
|
|
| price_include | Boolean | price_include | BOOLEAN | EQUIVALENTE | |
|
|
| price_include_override | Selection | - | - | **FALTANTE** | |
|
|
| include_base_amount | Boolean | include_base_amount | BOOLEAN | EQUIVALENTE | |
|
|
| is_base_affected | Boolean | - | - | **FALTANTE** | |
|
|
| analytic | Boolean | - | - | **FALTANTE** | |
|
|
| tax_group_id | Many2one | tax_group_id | UUID FK | EQUIVALENTE | |
|
|
| hide_tax_exigibility | Boolean | - | - | N/A | Related |
|
|
| tax_exigibility | Selection | - | - | **FALTANTE** | on_invoice/on_payment |
|
|
| cash_basis_transition_account_id | Many2one | - | - | **FALTANTE** | |
|
|
| invoice_repartition_line_ids | One2many | - | - | **FALTANTE** | Tax distribution |
|
|
| refund_repartition_line_ids | One2many | - | - | **FALTANTE** | |
|
|
| repartition_line_ids | One2many | - | - | **FALTANTE** | |
|
|
| country_id | Many2one | - | - | **FALTANTE** | |
|
|
| country_code | Char | - | - | N/A | Related |
|
|
| is_used | Boolean | - | - | N/A | Computed |
|
|
| invoice_legal_notes | Html | - | - | **FALTANTE** | |
|
|
| has_negative_factor | Boolean | - | - | N/A | Computed |
|
|
| code | - | code | VARCHAR | SOLO ERP | |
|
|
| account_id | - | account_id | UUID FK | PARCIAL | En Odoo es repartition_line |
|
|
| refund_account_id | - | refund_account_id | UUID FK | PARCIAL | En Odoo es repartition_line |
|
|
|
|
### Tax Type Odoo:
|
|
```python
|
|
TYPE_TAX_USE = [
|
|
('sale', 'Sales'),
|
|
('purchase', 'Purchases'),
|
|
('none', 'None'),
|
|
]
|
|
```
|
|
|
|
### Tax Type ERP-Core:
|
|
```sql
|
|
CREATE TYPE financial.tax_type AS ENUM (
|
|
'sales',
|
|
'purchase',
|
|
'all'
|
|
);
|
|
```
|
|
**GAP:** Diferente nomenclatura (sale vs sales, none vs all).
|
|
|
|
---
|
|
|
|
## 2.6 account.payment (Odoo) vs payments (ERP-Core)
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | |
|
|
| name | Char | - | - | **FALTANTE** | Numero de pago |
|
|
| date | Date | payment_date | DATE | EQUIVALENTE | |
|
|
| move_id | Many2one | journal_entry_id | UUID FK | EQUIVALENTE | |
|
|
| journal_id | Many2one | journal_id | UUID FK | EQUIVALENTE | |
|
|
| company_id | Many2one | company_id | UUID FK | EQUIVALENTE | |
|
|
| state | Selection | status | ENUM | DIFERENTE | Estados diferentes |
|
|
| is_reconciled | Boolean | - | - | N/A | Computed |
|
|
| is_matched | Boolean | - | - | N/A | Computed |
|
|
| is_sent | Boolean | - | - | **FALTANTE** | |
|
|
| available_partner_bank_ids | Many2many | - | - | N/A | Computed |
|
|
| partner_bank_id | Many2one | - | - | **FALTANTE** | |
|
|
| qr_code | Html | - | - | N/A | Computed |
|
|
| paired_internal_transfer_payment_id | Many2one | - | - | **FALTANTE** | Transferencias |
|
|
| payment_method_line_id | Many2one | - | - | **FALTANTE** | |
|
|
| payment_method_id | Many2one | payment_method | ENUM | DIFERENTE | |
|
|
| amount | Monetary | amount | DECIMAL | EQUIVALENTE | |
|
|
| payment_type | Selection | payment_type | ENUM | EQUIVALENTE | |
|
|
| partner_type | Selection | - | - | **FALTANTE** | customer/supplier |
|
|
| memo | Char | - | - | **FALTANTE** | |
|
|
| payment_reference | Char | ref | VARCHAR | EQUIVALENTE | |
|
|
| currency_id | Many2one | currency_id | UUID FK | EQUIVALENTE | |
|
|
| partner_id | Many2one | partner_id | UUID FK | EQUIVALENTE | |
|
|
| outstanding_account_id | Many2one | - | - | **FALTANTE** | |
|
|
| destination_account_id | Many2one | - | - | **FALTANTE** | |
|
|
| invoice_ids | Many2many | - | - | N/A | Relacion via payment_invoice |
|
|
| reconciled_invoice_ids | Many2many | - | - | N/A | Computed |
|
|
| amount_signed | Monetary | - | - | N/A | Computed |
|
|
| amount_company_currency_signed | Monetary | - | - | N/A | Computed |
|
|
| duplicate_payment_ids | Many2many | - | - | N/A | Computed |
|
|
| notes | - | notes | TEXT | SOLO ERP | |
|
|
|
|
### Payment State Odoo:
|
|
```python
|
|
[
|
|
('draft', "Draft"),
|
|
('in_process', "In Process"),
|
|
('paid', "Paid"),
|
|
('canceled', "Canceled"),
|
|
('rejected', "Rejected"),
|
|
]
|
|
```
|
|
|
|
### Payment Status ERP-Core:
|
|
```sql
|
|
CREATE TYPE financial.payment_status AS ENUM (
|
|
'draft',
|
|
'posted',
|
|
'reconciled',
|
|
'cancelled'
|
|
);
|
|
```
|
|
**GAP:** Estados diferentes - Odoo tiene in_process, paid, rejected. ERP tiene posted, reconciled.
|
|
|
|
---
|
|
|
|
## 2.7 account.payment.term (Odoo) vs payment_terms (ERP-Core)
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | |
|
|
| name | Char | name | VARCHAR | EQUIVALENTE | |
|
|
| active | Boolean | active | BOOLEAN | EQUIVALENTE | |
|
|
| note | Html | - | - | **FALTANTE** | |
|
|
| line_ids | One2many | terms | JSONB | DIFERENTE | Odoo usa tabla, ERP usa JSON |
|
|
| company_id | Many2one | company_id | UUID FK | EQUIVALENTE | |
|
|
| sequence | Integer | - | - | **FALTANTE** | |
|
|
| display_on_invoice | Boolean | - | - | **FALTANTE** | |
|
|
| discount_percentage | Float | - | - | **FALTANTE** | Early payment |
|
|
| discount_days | Integer | - | - | **FALTANTE** | Early payment |
|
|
| early_pay_discount_computation | Selection | - | - | **FALTANTE** | |
|
|
| early_discount | Boolean | - | - | **FALTANTE** | |
|
|
| code | - | code | VARCHAR | SOLO ERP | |
|
|
|
|
### Payment Term Line (Odoo vs ERP-Core JSON):
|
|
|
|
**Odoo tiene tabla account.payment.term.line:**
|
|
```python
|
|
fields:
|
|
- value: Selection [('percent', 'Percent'), ('fixed', 'Fixed')]
|
|
- value_amount: Float
|
|
- delay_type: Selection [días después, fin de mes, etc.]
|
|
- nb_days: Integer
|
|
- days_next_month: Char
|
|
- payment_id: Many2one
|
|
```
|
|
|
|
**ERP-Core usa JSONB:**
|
|
```sql
|
|
-- Ejemplo: [{"days": 30, "percent": 100}]
|
|
terms JSONB NOT NULL DEFAULT '[]'
|
|
```
|
|
**GAP:** ERP-Core pierde la flexibilidad de delay_type (fin de mes, etc.).
|
|
|
|
---
|
|
|
|
## 2.8 account.tax.group (Odoo) vs tax_groups (ERP-Core)
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | |
|
|
| name | Char | name | VARCHAR | EQUIVALENTE | |
|
|
| sequence | Integer | sequence | INTEGER | EQUIVALENTE | |
|
|
| company_id | Many2one | - | - | **FALTANTE** | |
|
|
| tax_payable_account_id | Many2one | - | - | **FALTANTE** | |
|
|
| tax_receivable_account_id | Many2one | - | - | **FALTANTE** | |
|
|
| advance_tax_payment_account_id | Many2one | - | - | **FALTANTE** | |
|
|
| country_id | Many2one | country_id | UUID | EQUIVALENTE | |
|
|
| country_code | Char | - | - | N/A | Related |
|
|
| preceding_subtotal | Char | - | - | **FALTANTE** | |
|
|
| pos_receipt_label | Char | - | - | **FALTANTE** | |
|
|
| tenant_id | - | tenant_id | UUID FK | SOLO ERP | |
|
|
|
|
---
|
|
|
|
## 2.9 account.bank.statement (Odoo) vs reconciliations (ERP-Core)
|
|
|
|
**Nota:** ERP-Core tiene una implementacion muy simplificada de conciliaciones bancarias.
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | |
|
|
| name | Char | - | - | **FALTANTE** | |
|
|
| reference | Char | - | - | **FALTANTE** | |
|
|
| date | Date | - | - | **FALTANTE** | Usa start_date/end_date |
|
|
| first_line_index | Char | - | - | **FALTANTE** | |
|
|
| balance_start | Monetary | balance_start | DECIMAL | EQUIVALENTE | |
|
|
| balance_end | Monetary | balance_end_computed | DECIMAL | EQUIVALENTE | |
|
|
| balance_end_real | Monetary | balance_end_real | DECIMAL | EQUIVALENTE | |
|
|
| company_id | Many2one | company_id | UUID FK | EQUIVALENTE | |
|
|
| currency_id | Many2one | - | - | N/A | Computed |
|
|
| journal_id | Many2one | - | - | **FALTANTE** | |
|
|
| line_ids | One2many | reconciled_line_ids | UUID[] | DIFERENTE | Array vs relacion |
|
|
| is_complete | Boolean | - | - | N/A | Computed |
|
|
| is_valid | Boolean | - | - | N/A | Computed |
|
|
| problem_description | Text | - | - | N/A | Computed |
|
|
| attachment_ids | Many2many | - | - | **FALTANTE** | |
|
|
| bank_account_id | - | bank_account_id | UUID FK | EQUIVALENTE | |
|
|
| start_date | - | start_date | DATE | SOLO ERP | |
|
|
| end_date | - | end_date | DATE | SOLO ERP | |
|
|
| status | - | status | ENUM | SOLO ERP | |
|
|
|
|
**GAP CRITICO:** Odoo tiene account.bank.statement.line como modelo separado. ERP-Core no tiene lineas de extracto.
|
|
|
|
---
|
|
|
|
## 2.10 account.partial.reconcile (Odoo) vs account_partial_reconcile (ERP-Core)
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | |
|
|
| debit_move_id | Many2one | debit_move_id | UUID FK | EQUIVALENTE | |
|
|
| credit_move_id | Many2one | credit_move_id | UUID FK | EQUIVALENTE | |
|
|
| full_reconcile_id | Many2one | full_reconcile_id | UUID FK | EQUIVALENTE | |
|
|
| exchange_move_id | Many2one | - | - | **FALTANTE** | Diferencia cambio |
|
|
| company_currency_id | Many2one | company_currency_id | UUID FK | EQUIVALENTE | |
|
|
| debit_currency_id | Many2one | debit_currency_id | UUID FK | EQUIVALENTE | |
|
|
| credit_currency_id | Many2one | credit_currency_id | UUID FK | EQUIVALENTE | |
|
|
| amount | Monetary | amount | DECIMAL | EQUIVALENTE | |
|
|
| debit_amount_currency | Monetary | debit_amount_currency | DECIMAL | EQUIVALENTE | |
|
|
| credit_amount_currency | Monetary | credit_amount_currency | DECIMAL | EQUIVALENTE | |
|
|
| company_id | Many2one | - | - | **FALTANTE** | |
|
|
| max_date | Date | max_date | DATE | EQUIVALENTE | |
|
|
|
|
---
|
|
|
|
## 2.11 account.full.reconcile (Odoo) vs account_full_reconcile (ERP-Core)
|
|
|
|
| Campo Odoo | Tipo Odoo | Campo ERP-Core | Tipo ERP | Estado | Notas |
|
|
|------------|-----------|----------------|----------|--------|-------|
|
|
| id | Integer | id | UUID | EQUIVALENTE | |
|
|
| name | - | name | VARCHAR | SOLO ERP | |
|
|
| partial_reconcile_ids | One2many | - | - | **FALTANTE** | Relacion inversa |
|
|
| reconciled_line_ids | One2many | - | - | **FALTANTE** | Relacion inversa |
|
|
| exchange_move_id | Many2one | exchange_move_id | UUID FK | EQUIVALENTE | |
|
|
|
|
---
|
|
|
|
# 3. ENUMS/SELECTIONS COMPARATIVA
|
|
|
|
## 3.1 Estados de Factura
|
|
|
|
### Odoo (state en account.move):
|
|
```python
|
|
[
|
|
('draft', 'Draft'),
|
|
('posted', 'Posted'),
|
|
('cancel', 'Cancelled'),
|
|
]
|
|
```
|
|
|
|
### ERP-Core (invoice_status):
|
|
```sql
|
|
CREATE TYPE financial.invoice_status AS ENUM (
|
|
'draft',
|
|
'open',
|
|
'paid',
|
|
'cancelled'
|
|
);
|
|
```
|
|
**GAP:** Odoo no tiene 'open'. Odoo usa payment_state para indicar si esta pagado.
|
|
|
|
## 3.2 Estado de Pago
|
|
|
|
### Odoo (PAYMENT_STATE_SELECTION):
|
|
```python
|
|
[
|
|
('not_paid', 'Not Paid'),
|
|
('in_payment', 'In Payment'),
|
|
('paid', 'Paid'),
|
|
('partial', 'Partially Paid'),
|
|
('reversed', 'Reversed'),
|
|
('blocked', 'Blocked'),
|
|
('invoicing_legacy', 'Invoicing App Legacy'),
|
|
]
|
|
```
|
|
|
|
### ERP-Core (payment_state):
|
|
```sql
|
|
CREATE TYPE financial.payment_state AS ENUM (
|
|
'not_paid',
|
|
'in_payment',
|
|
'paid',
|
|
'partial',
|
|
'reversed'
|
|
);
|
|
```
|
|
**GAP:** ERP-Core no tiene 'blocked' ni 'invoicing_legacy'.
|
|
|
|
## 3.3 Tipo de Asiento/Factura
|
|
|
|
### Odoo (move_type):
|
|
```python
|
|
[
|
|
('entry', 'Journal Entry'),
|
|
('out_invoice', 'Customer Invoice'),
|
|
('out_refund', 'Customer Credit Note'),
|
|
('in_invoice', 'Vendor Bill'),
|
|
('in_refund', 'Vendor Credit Note'),
|
|
('out_receipt', 'Sales Receipt'),
|
|
('in_receipt', 'Purchase Receipt'),
|
|
]
|
|
```
|
|
|
|
### ERP-Core (invoice_type):
|
|
```sql
|
|
CREATE TYPE financial.invoice_type AS ENUM (
|
|
'customer',
|
|
'supplier'
|
|
);
|
|
```
|
|
**GAP CRITICO:** ERP-Core no distingue entre:
|
|
- Facturas vs Notas de Credito (refund)
|
|
- Facturas vs Recibos (receipt)
|
|
|
|
## 3.4 Tipo de Cuenta
|
|
|
|
### Odoo (account_type):
|
|
```python
|
|
[
|
|
("asset_receivable", "Receivable"),
|
|
("asset_cash", "Bank and Cash"),
|
|
("asset_current", "Current Assets"),
|
|
("asset_non_current", "Non-current Assets"),
|
|
("asset_prepayments", "Prepayments"),
|
|
("asset_fixed", "Fixed Assets"),
|
|
("liability_payable", "Payable"),
|
|
("liability_credit_card", "Credit Card"),
|
|
("liability_current", "Current Liabilities"),
|
|
("liability_non_current", "Non-current Liabilities"),
|
|
("equity", "Equity"),
|
|
("equity_unaffected", "Current Year Earnings"),
|
|
("income", "Income"),
|
|
("income_other", "Other Income"),
|
|
("expense", "Expenses"),
|
|
("expense_depreciation", "Depreciation"),
|
|
("expense_direct_cost", "Cost of Revenue"),
|
|
("off_balance", "Off-Balance Sheet"),
|
|
]
|
|
```
|
|
|
|
### ERP-Core (account_type ENUM):
|
|
```sql
|
|
CREATE TYPE financial.account_type AS ENUM (
|
|
'asset',
|
|
'liability',
|
|
'equity',
|
|
'revenue',
|
|
'expense'
|
|
);
|
|
```
|
|
**GAP CRITICO:** 18 tipos Odoo vs 5 tipos ERP-Core. Pierdes:
|
|
- Distincion receivable/payable para reportes
|
|
- Distincion cash/current/non-current
|
|
- Tipos especiales como off_balance
|
|
|
|
---
|
|
|
|
# 4. FUNCIONES/METODOS COMPARATIVA
|
|
|
|
## 4.1 Funciones ERP-Core Existentes
|
|
|
|
| Funcion | Descripcion | Equivalente Odoo |
|
|
|---------|-------------|------------------|
|
|
| financial.validate_entry_balance(p_entry_id) | Valida balance debit=credit | account.move._check_balanced() |
|
|
| financial.post_journal_entry(p_entry_id) | Contabiliza asiento | account.move.action_post() |
|
|
| financial.calculate_invoice_totals(p_invoice_id) | Calcula totales factura | account.move._compute_amount() |
|
|
| financial.update_invoice_paid_amount(p_invoice_id) | Actualiza monto pagado | account.move._compute_payment_state() |
|
|
|
|
## 4.2 Funciones Odoo FALTANTES en ERP-Core
|
|
|
|
| Metodo Odoo | Modelo | Descripcion |
|
|
|-------------|--------|-------------|
|
|
| _recompute_tax_lines() | account.move | Recalcula lineas de impuestos |
|
|
| _compute_payments_widget_reconciled_info() | account.move | Widget de pagos reconciliados |
|
|
| _compute_amount_residual() | account.move.line | Calcula monto residual |
|
|
| _reconcile_plan() | account.move.line | Plan de reconciliacion |
|
|
| _create_tax_cash_basis_moves() | account.partial.reconcile | Crea asientos cash basis |
|
|
| _compute_terms() | account.payment.term | Calcula terminos de pago |
|
|
| _get_due_date() | account.payment.term.line | Calcula fecha vencimiento |
|
|
| _get_journal_bank_account_balance() | account.journal | Balance cuenta bancaria |
|
|
| _check_repartition_lines() | account.tax | Valida lineas de distribucion |
|
|
| _compute_is_valid() | account.bank.statement | Valida extracto bancario |
|
|
|
|
---
|
|
|
|
# 5. GAPS IDENTIFICADOS
|
|
|
|
## 5.1 Tablas/Modelos Faltantes (CRITICO)
|
|
|
|
| GAP ID | Modelo Odoo | Descripcion | Impacto |
|
|
|--------|-------------|-------------|---------|
|
|
| GAP-TBL-001 | account.bank.statement.line | Lineas de extracto bancario | Conciliacion bancaria incompleta |
|
|
| GAP-TBL-002 | account.tax.repartition.line | Distribucion de impuestos | Reportes fiscales limitados |
|
|
| GAP-TBL-003 | account.fiscal.position | Posiciones fiscales | No hay mapeo de impuestos/cuentas por cliente |
|
|
| GAP-TBL-004 | account.fiscal.position.tax | Mapeo fiscal de impuestos | |
|
|
| GAP-TBL-005 | account.fiscal.position.account | Mapeo fiscal de cuentas | |
|
|
| GAP-TBL-006 | account.reconcile.model | Modelos de conciliacion automatica | |
|
|
| GAP-TBL-007 | account.journal.group | Grupos de diarios | Multi-ledger |
|
|
| GAP-TBL-008 | account.account.tag | Etiquetas de cuentas | Reportes personalizados |
|
|
| GAP-TBL-009 | account.group | Grupos de cuentas | Jerarquia de plan de cuentas |
|
|
| GAP-TBL-010 | account.cash.rounding | Redondeo de efectivo | |
|
|
| GAP-TBL-011 | account.incoterms | Incoterms | Comercio internacional |
|
|
| GAP-TBL-012 | account.payment.method | Metodos de pago | Flexibilidad en pagos |
|
|
| GAP-TBL-013 | account.payment.method.line | Config de metodos por diario | |
|
|
| GAP-TBL-014 | account.analytic.plan | Planes analiticos | Contabilidad analitica multi-dimension |
|
|
| GAP-TBL-015 | account.payment.term.line | Lineas de terminos de pago | ERP usa JSONB |
|
|
|
|
## 5.2 Campos Faltantes en Tablas Existentes (ALTO)
|
|
|
|
### account.move / invoices
|
|
| GAP ID | Campo | Tipo | Impacto |
|
|
|--------|-------|------|---------|
|
|
| GAP-FLD-001 | is_storno | Boolean | Contabilidad de reversiones |
|
|
| GAP-FLD-002 | auto_post | Selection | Facturacion recurrente |
|
|
| GAP-FLD-003 | delivery_date | Date | Fecha de entrega |
|
|
| GAP-FLD-004 | fiscal_position_id | FK | Posiciones fiscales |
|
|
| GAP-FLD-005 | payment_reference | Char | Referencia de pago |
|
|
| GAP-FLD-006 | reversed_entry_id | FK | Reversiones |
|
|
| GAP-FLD-007 | inalterable_hash | Char | Integridad/Auditoria |
|
|
| GAP-FLD-008 | amount_*_signed | Monetary | Montos con signo |
|
|
| GAP-FLD-009 | invoice_currency_rate | Float | Tasa de cambio |
|
|
| GAP-FLD-010 | commercial_partner_id | FK | Partner comercial |
|
|
|
|
### account.move.line / journal_entry_lines
|
|
| GAP ID | Campo | Tipo | Impacto |
|
|
|--------|-------|------|---------|
|
|
| GAP-FLD-011 | sequence | Integer | Orden de lineas |
|
|
| GAP-FLD-012 | balance | Monetary | Balance (debit-credit) |
|
|
| GAP-FLD-013 | display_type | Selection | Tipo de linea |
|
|
| GAP-FLD-014 | tax_base_amount | Monetary | Base imponible |
|
|
| GAP-FLD-015 | tax_repartition_line_id | FK | Distribucion impuesto |
|
|
| GAP-FLD-016 | amount_residual | Monetary | Monto residual |
|
|
| GAP-FLD-017 | amount_residual_currency | Monetary | Residual en moneda |
|
|
| GAP-FLD-018 | reconciled | Boolean | Estado reconciliacion |
|
|
| GAP-FLD-019 | matching_number | Char | Numero matching |
|
|
| GAP-FLD-020 | date_maturity | Date | Fecha vencimiento |
|
|
| GAP-FLD-021 | discount | Float | Descuento por linea |
|
|
| GAP-FLD-022 | discount_date | Date | Fecha descuento pronto pago |
|
|
|
|
### account.journal / journals
|
|
| GAP ID | Campo | Tipo | Impacto |
|
|
|--------|-------|------|---------|
|
|
| GAP-FLD-023 | suspense_account_id | FK | Cuenta de suspension |
|
|
| GAP-FLD-024 | profit_account_id | FK | Cuenta de ganancia |
|
|
| GAP-FLD-025 | loss_account_id | FK | Cuenta de perdida |
|
|
| GAP-FLD-026 | bank_account_id | FK | Cuenta bancaria |
|
|
| GAP-FLD-027 | sequence | Integer | Orden |
|
|
| GAP-FLD-028 | restrict_mode_hash_table | Boolean | Hash de seguridad |
|
|
|
|
### account.tax / taxes
|
|
| GAP ID | Campo | Tipo | Impacto |
|
|
|--------|-------|------|---------|
|
|
| GAP-FLD-029 | tax_scope | Selection | Alcance (service/consu) |
|
|
| GAP-FLD-030 | sequence | Integer | Orden de aplicacion |
|
|
| GAP-FLD-031 | description | Html | Descripcion |
|
|
| GAP-FLD-032 | invoice_label | Char | Etiqueta en factura |
|
|
| GAP-FLD-033 | tax_exigibility | Selection | Exigibilidad (on_invoice/on_payment) |
|
|
| GAP-FLD-034 | cash_basis_transition_account_id | FK | Cash basis |
|
|
| GAP-FLD-035 | is_base_affected | Boolean | Impuestos en cascada |
|
|
| GAP-FLD-036 | analytic | Boolean | Incluir en analitica |
|
|
| GAP-FLD-037 | country_id | FK | Pais |
|
|
|
|
### account.payment / payments
|
|
| GAP ID | Campo | Tipo | Impacto |
|
|
|--------|-------|------|---------|
|
|
| GAP-FLD-038 | name | Char | Numero de pago |
|
|
| GAP-FLD-039 | is_sent | Boolean | Enviado |
|
|
| GAP-FLD-040 | partner_bank_id | FK | Cuenta bancaria destino |
|
|
| GAP-FLD-041 | paired_internal_transfer_payment_id | FK | Transferencias internas |
|
|
| GAP-FLD-042 | memo | Char | Memo |
|
|
| GAP-FLD-043 | outstanding_account_id | FK | Cuenta outstanding |
|
|
| GAP-FLD-044 | destination_account_id | FK | Cuenta destino |
|
|
| GAP-FLD-045 | partner_type | Selection | customer/supplier |
|
|
|
|
## 5.3 ENUMs Incompletos (MEDIO)
|
|
|
|
| GAP ID | ENUM | Valores Faltantes |
|
|
|--------|------|-------------------|
|
|
| GAP-ENM-001 | invoice_type | out_refund, in_refund, out_receipt, in_receipt, entry |
|
|
| GAP-ENM-002 | account_type | 13 subtipos especificos |
|
|
| GAP-ENM-003 | journal_type | credit (Credit Card) |
|
|
| GAP-ENM-004 | payment_state | blocked, invoicing_legacy |
|
|
| GAP-ENM-005 | tax_type | Diferencia nomenclatura (sale vs sales) |
|
|
|
|
## 5.4 Funcionalidades Faltantes (CRITICO)
|
|
|
|
| GAP ID | Funcionalidad | Descripcion |
|
|
|--------|---------------|-------------|
|
|
| GAP-FUN-001 | Tax Repartition | Sistema de distribucion de impuestos |
|
|
| GAP-FUN-002 | Cash Basis Accounting | Contabilidad base efectivo |
|
|
| GAP-FUN-003 | Fiscal Positions | Posiciones fiscales para impuestos/cuentas |
|
|
| GAP-FUN-004 | Bank Statement Lines | Lineas de extracto bancario |
|
|
| GAP-FUN-005 | Auto-Post Entries | Asientos automaticos recurrentes |
|
|
| GAP-FUN-006 | Invoice Reversal | Sistema completo de reversiones |
|
|
| GAP-FUN-007 | Multi-currency Reconciliation | Reconciliacion multi-moneda avanzada |
|
|
| GAP-FUN-008 | Hash Security | Inalterabilidad de asientos |
|
|
| GAP-FUN-009 | Early Payment Discount | Descuento por pronto pago |
|
|
| GAP-FUN-010 | Reconcile Models | Modelos de reconciliacion automatica |
|
|
| GAP-FUN-011 | Payment Terms Lines | Lineas de terminos de pago (multi-vencimiento) |
|
|
| GAP-FUN-012 | Account Tags | Sistema de etiquetas para reportes |
|
|
|
|
---
|
|
|
|
# 6. PORCENTAJE DE COBERTURA
|
|
|
|
## 6.1 Por Tablas/Modelos
|
|
|
|
| Categoria | Odoo | ERP-Core | Cobertura |
|
|
|-----------|------|----------|-----------|
|
|
| Modelos Core | 30 | 18 | 60% |
|
|
|
|
## 6.2 Por Campos (Modelos Core)
|
|
|
|
| Modelo | Campos Odoo | Campos ERP | Campos Equivalentes | Cobertura |
|
|
|--------|-------------|------------|---------------------|-----------|
|
|
| account.move | ~70 | ~25 | 18 | 26% |
|
|
| account.move.line | ~55 | ~18 | 14 | 25% |
|
|
| account.journal | ~45 | ~12 | 8 | 18% |
|
|
| account.account | ~25 | ~12 | 8 | 32% |
|
|
| account.tax | ~30 | ~15 | 10 | 33% |
|
|
| account.payment | ~45 | ~15 | 9 | 20% |
|
|
| account.payment.term | ~15 | ~8 | 5 | 33% |
|
|
| account.tax.group | ~10 | ~5 | 3 | 30% |
|
|
| account.partial.reconcile | ~12 | ~11 | 9 | 75% |
|
|
| account.full.reconcile | ~4 | ~3 | 2 | 50% |
|
|
|
|
## 6.3 Por ENUMs
|
|
|
|
| ENUM | Valores Odoo | Valores ERP | Cobertura |
|
|
|------|--------------|-------------|-----------|
|
|
| move_type/invoice_type | 7 | 2 | 29% |
|
|
| account_type | 18 | 5 | 28% |
|
|
| journal_type | 6 | 5 | 83% |
|
|
| payment_state | 7 | 5 | 71% |
|
|
| tax_type_use | 3 | 3 | 100% (nomenclatura diferente) |
|
|
|
|
## 6.4 Por Funciones
|
|
|
|
| Categoria | Funciones Odoo | Funciones ERP | Cobertura |
|
|
|-----------|----------------|---------------|-----------|
|
|
| Validacion | ~15 | 2 | 13% |
|
|
| Computo | ~50 | 2 | 4% |
|
|
| Acciones | ~30 | 2 | 7% |
|
|
| Reconciliacion | ~20 | 0 | 0% |
|
|
|
|
## 6.5 Cobertura General Estimada
|
|
|
|
| Aspecto | Cobertura |
|
|
|---------|-----------|
|
|
| Estructura de Datos | 35% |
|
|
| Logica de Negocio | 15% |
|
|
| Funcionalidad Completa | 25% |
|
|
|
|
---
|
|
|
|
# 7. RECOMENDACIONES PRIORITARIAS
|
|
|
|
## 7.1 Prioridad CRITICA (Bloqueante)
|
|
|
|
1. **Agregar move_type/invoice_subtype**: Distinguir facturas, notas de credito y recibos
|
|
2. **Crear account_types expandido**: Los 18 tipos de Odoo vs 5 genericos
|
|
3. **Agregar amount_residual a journal_entry_lines**: Fundamental para reconciliacion
|
|
4. **Crear bank_statement_lines**: Completar flujo de conciliacion bancaria
|
|
5. **Agregar campos de reconciliacion**: reconciled, matching_number, full_reconcile_id
|
|
|
|
## 7.2 Prioridad ALTA (Importante)
|
|
|
|
6. **Crear tax_repartition_lines**: Distribucion de impuestos
|
|
7. **Agregar fiscal_position**: Mapeo fiscal por cliente
|
|
8. **Agregar date_maturity a lineas**: Vencimiento por linea
|
|
9. **Agregar display_type a lineas**: Tipo de linea (product, tax, payment_term, etc.)
|
|
10. **Expandir payment_terms con lineas**: Soportar multiples vencimientos
|
|
|
|
## 7.3 Prioridad MEDIA (Mejora)
|
|
|
|
11. **Agregar cash_basis a taxes**: Contabilidad base efectivo
|
|
12. **Agregar reversiones**: reversed_entry_id, reversal_move_ids
|
|
13. **Agregar hash de seguridad**: inalterable_hash
|
|
14. **Crear reconcile_models**: Reconciliacion automatica
|
|
15. **Agregar account_tags**: Reportes personalizados
|
|
|
|
---
|
|
|
|
# 8. RESUMEN EJECUTIVO
|
|
|
|
## Fortalezas de ERP-Core:
|
|
- Arquitectura multi-tenant nativa
|
|
- Sistema de auditoria robusto (created_by, updated_by, etc.)
|
|
- Estructura de fiscal_years y fiscal_periods
|
|
- RLS (Row Level Security) implementado
|
|
- Triggers automaticos para tracking
|
|
|
|
## Debilidades vs Odoo:
|
|
- **Modelo unificado de facturas**: Odoo usa account.move para todo (asientos, facturas, pagos). ERP-Core separa en tablas.
|
|
- **Sistema de tipos de cuenta**: Odoo tiene 18 tipos especificos vs 5 genericos en ERP-Core.
|
|
- **Reconciliacion**: Faltan campos criticos para reconciliacion avanzada.
|
|
- **Distribucion de impuestos**: Falta tax_repartition_lines para reportes fiscales.
|
|
- **Extractos bancarios**: Implementacion muy basica.
|
|
|
|
## Cobertura General: ~25-30%
|
|
|
|
Para alcanzar paridad funcional con Odoo Account, se requiere:
|
|
1. Expandir ENUMs con subtipos
|
|
2. Agregar ~45 campos a tablas existentes
|
|
3. Crear ~10 tablas adicionales
|
|
4. Implementar ~30+ funciones de negocio
|