Files
Odoo-Modules/fusion_accounting_bank_rec/__manifest__.py
gsinghpal ffc029a875 test(fusion_accounting_bank_rec): migration round-trip for bootstrap step
Verifies the bank_rec_bootstrap migration step (a) creates precedents
from existing partial.reconcile rows, (b) is idempotent on re-run, and
(c) refreshes the MV without erroring.

Three TransactionCase tests:
- test_bootstrap_creates_precedents_from_existing_reconciles seeds two
  reconciles via the engine, wipes the auto-recorded precedents, then
  asserts the bootstrap produces source='backfill' precedents.
- test_bootstrap_step_idempotent runs the bootstrap twice and asserts
  the second pass creates zero new precedents.
- test_bootstrap_refreshes_mv_without_error runs the bootstrap on a
  clean partner and asserts no exception is raised and the result dict
  reports MV + pattern refresh outcomes.

Implementation fixes uncovered by these tests:
- precedent_backfill.backfill_precedents now pre-filters
  account.partial.reconcile to rows that touch a bank statement line on
  either side. Previously it walked every partial in the DB; on the
  westin-v19 dev DB that's 16k rows and the default limit=10000 missed
  the newest test fixtures (highest IDs).
- backfill skips the periodic env.cr.commit() when running under a
  TestCursor, since committing inside a test breaks the rollback.

Test count: 139 -> 142.

Made-with: Cursor
2026-04-19 13:33:29 -04:00

110 lines
8.2 KiB
Python

{
'name': 'Fusion Accounting — Bank Reconciliation',
'version': '19.0.1.0.23',
'category': 'Accounting/Accounting',
'sequence': 28,
'summary': 'Native V19 bank reconciliation widget with AI confidence scoring + behavioural learning.',
'description': """
Fusion Accounting — Bank Reconciliation
========================================
Replaces Odoo Enterprise's account_accountant bank-rec widget with a
native V19 OWL implementation reading/writing Community's
account.partial.reconcile tables.
Features:
- Strict mirror of all Enterprise UI components (zero functional loss)
- AI confidence badges with one-click Accept and ranked alternatives
- Behavioural learning from historical reconciliations
- Local LLM ready (Ollama, LM Studio) via OpenAI-compatible adapter
- Coexists with account_accountant (Enterprise wins by default)
Built by Nexa Systems Inc.
""",
'icon': '/fusion_accounting_bank_rec/static/description/icon.png',
'author': 'Nexa Systems Inc.',
'website': 'https://nexasystems.ca',
'maintainer': 'Nexa Systems Inc.',
'depends': ['fusion_accounting_core', 'fusion_accounting_migration'],
'external_dependencies': {
'python': ['hypothesis'],
},
'data': [
'security/ir.model.access.csv',
'data/cron.xml',
'wizards/auto_reconcile_wizard_views.xml',
'wizards/bulk_reconcile_wizard_views.xml',
'reports/migration_audit_report_views.xml',
'reports/migration_audit_report_action.xml',
],
'assets': {
'web.assets_backend': [
'fusion_accounting_bank_rec/static/src/scss/_variables.scss',
'fusion_accounting_bank_rec/static/src/scss/bank_reconciliation.scss',
'fusion_accounting_bank_rec/static/src/scss/ai_suggestion.scss',
'fusion_accounting_bank_rec/static/src/scss/dark_mode.scss',
'fusion_accounting_bank_rec/static/src/services/bank_reconciliation_service.js',
'fusion_accounting_bank_rec/static/src/views/kanban/bank_rec_kanban_controller.js',
'fusion_accounting_bank_rec/static/src/views/kanban/bank_rec_kanban_renderer.js',
'fusion_accounting_bank_rec/static/src/views/kanban/bank_rec_kanban_view.js',
'fusion_accounting_bank_rec/static/src/views/kanban/bank_rec_kanban.xml',
# OWL component mirror — Enterprise account_accountant bank-rec.
# Re-export shim so mirrored components can use the relative
# `../bank_reconciliation_service` import unchanged.
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/bank_reconciliation_service.js',
# Batch 1 (Task 30) — display components
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/statement_line/statement_line.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/statement_line/statement_line.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/statement_summary/statement_summary.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/statement_summary/statement_summary.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/line_info_pop_over/line_info_pop_over.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/line_info_pop_over/line_info_pop_over.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/reconciled_line_name/reconciled_line_name.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/reconciled_line_name/reconciled_line_name.xml',
# Batch 2 (Task 31) — action + edit components
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/button/button.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/button/button.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/button_list/button_list.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/button_list/button_list.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/line_to_reconcile/line_to_reconcile.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/line_to_reconcile/line_to_reconcile.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/list_view/list.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/list_view/list_view_many2one_multi_edit.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/list_view/list_view_many2one_multi_edit.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/apply_amount/apply_amount.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/apply_amount/apply_amount.xml',
# Batch 3 (Task 32) — dialog components
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/bankrec_form_dialog/bankrec_form_dialog.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/bankrec_form_dialog/bankrec_form_dialog.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/search_dialog/search_dialog.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/search_dialog/search_dialog.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/search_dialog/search_dialog_list.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/search_dialog/search_dialog_list.xml',
# Batch 4 (Task 33) — auxiliary components
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/quick_create/quick_create.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/quick_create/quick_create.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/chatter/chatter.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/file_uploader/file_uploader.js',
# Fusion-only (Task 34) — AI suggestion UI
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/ai_suggestion/ai_suggestion_strip.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/ai_suggestion/ai_suggestion_strip.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/ai_suggestion/ai_alternatives_panel.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/ai_suggestion/ai_alternatives_panel.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/ai_suggestion/ai_reasoning_tooltip.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/ai_suggestion/ai_reasoning_tooltip.xml',
# Fusion-only (Task 35) — batch action bar + reconcile model picker
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/batch_action_bar/batch_action_bar.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/batch_action_bar/batch_action_bar.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/reconcile_model_picker/reconcile_model_picker.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/reconcile_model_picker/reconcile_model_picker.xml',
# Fusion-only (Task 36) — attachment strip + partner history panel
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/attachment_strip/attachment_strip.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/attachment_strip/attachment_strip.xml',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/partner_history_panel/partner_history_panel.js',
'fusion_accounting_bank_rec/static/src/components/bank_reconciliation/partner_history_panel/partner_history_panel.xml',
],
},
'installable': True,
'application': False,
'license': 'OPL-1',
}