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):
[
('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):
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:
[
('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:
[
('sale', 'Sales'),
('purchase', 'Purchase'),
('cash', 'Cash'),
('bank', 'Bank'),
('credit', 'Credit Card'),
('general', 'Miscellaneous'),
]
Journal Type ERP-Core:
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):
[
("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):
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:
TYPE_TAX_USE = [
('sale', 'Sales'),
('purchase', 'Purchases'),
('none', 'None'),
]
Tax Type ERP-Core:
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:
[
('draft', "Draft"),
('in_process', "In Process"),
('paid', "Paid"),
('canceled', "Canceled"),
('rejected', "Rejected"),
]
Payment Status ERP-Core:
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:
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:
-- 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):
[
('draft', 'Draft'),
('posted', 'Posted'),
('cancel', 'Cancelled'),
]
ERP-Core (invoice_status):
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):
[
('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):
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):
[
('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):
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):
[
("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):
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)
- Agregar move_type/invoice_subtype: Distinguir facturas, notas de credito y recibos
- Crear account_types expandido: Los 18 tipos de Odoo vs 5 genericos
- Agregar amount_residual a journal_entry_lines: Fundamental para reconciliacion
- Crear bank_statement_lines: Completar flujo de conciliacion bancaria
- Agregar campos de reconciliacion: reconciled, matching_number, full_reconcile_id
7.2 Prioridad ALTA (Importante)
- Crear tax_repartition_lines: Distribucion de impuestos
- Agregar fiscal_position: Mapeo fiscal por cliente
- Agregar date_maturity a lineas: Vencimiento por linea
- Agregar display_type a lineas: Tipo de linea (product, tax, payment_term, etc.)
- Expandir payment_terms con lineas: Soportar multiples vencimientos
7.3 Prioridad MEDIA (Mejora)
- Agregar cash_basis a taxes: Contabilidad base efectivo
- Agregar reversiones: reversed_entry_id, reversal_move_ids
- Agregar hash de seguridad: inalterable_hash
- Crear reconcile_models: Reconciliacion automatica
- 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:
- Expandir ENUMs con subtipos
- Agregar ~45 campos a tablas existentes
- Crear ~10 tablas adicionales
- Implementar ~30+ funciones de negocio