Files
Odoo-Modules/fusion_claims/__manifest__.py
gsinghpal d60a75a391 fusion_claims: cap MOD follow-up email flood with rolling 30-day window
Two daily MOD crons were fighting each other. _cron_mod_schedule_followups
created a mail.activity on every MOD order in quote_submitted/awaiting_funding;
_cron_mod_escalate_followups unconditionally deleted the activity after
sending its one-time reminder email. The activity was recreated every day
in a tight loop with no per-period cap — a legitimate 2-4 month wait for
a MOD funding decision would generate dozens of activity churn events and
a bulk email burst the first time the escalate cron ran against a backlog.

Fix:
- New fields x_fc_mod_followup_month_count / _month_start / _cap_notified
  (copy=False) track a rolling window per order.
- New config params mod_followup_max_per_month (default 2),
  mod_followup_window_days (30), mod_followup_max_per_cron_run (10).
- _send_mod_followup_email resets the window after 30 days, refuses to
  send past the cap, and posts a one-shot chatter note explaining why.
- _cron_mod_schedule_followups no longer recreates the activity when the
  cap has been hit and stops daily-bumping x_fc_mod_next_followup_date.
- _cron_mod_escalate_followups processes oldest-deadline-first with a
  per-run throttle, only unlinks the activity on a successful send so
  humans can still action capped cases manually.
- write() resets the rolling counters on any real MOD status change.

Deployed to fusion_claims v19.0.8.0.1 on odoo-westin (westin-v19,
36 affected orders) and odoo-mobility (mobility, 2 affected orders).
2026-04-08 00:01:19 -04:00

182 lines
7.6 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2024-2025 Nexa Systems Inc.
# License OPL-1 (Odoo Proprietary License v1.0)
# Part of the Fusion Claim Assistant product family.
{
'name': 'Fusion Claims',
'version': '19.0.8.0.1',
'category': 'Sales',
'summary': 'Complete ADP Claims Management with Dashboard, Sales Integration, Billing Automation, and Two-Stage Verification.',
'description': """
Fusion Claims
=============
Part of the Fusion Claim Assistant product family by Nexa Systems Inc.
Fusion Claims is a comprehensive standalone application for managing ADP (Assistive Devices Program)
claims in Odoo. It provides its own sales management views, dashboard, claim workflow management,
automatic calculation of ADP and client portions, and professional PDF reports.
Key Features:
-------------
• Standalone application with its own menu and views
• Dashboard for claims overview and KPIs
• Integrated sales management (custom views separate from standard Sales app)
• Complete ADP claim workflow (Quotation → Ready for Submission → Application Submitted →
Application Approved → Ready to Bill → Billed to ADP → Case Closed)
• Automatic ADP/Client portion calculations with deductions (PCT/AMT)
• Support for multiple client types (REG=75%/25%, ODS/OWP/ACS=100%/0%)
• Split invoicing (Client Invoice + ADP Invoice)
• ADP Device Codes reference from Mobility Manual (JSON/CSV import)
• Device Approval Verification wizard - confirm which devices were approved by ADP
• Approval status tracking on order lines and invoices with visual indicators
• Professional PDF reports in Portrait and Landscape orientations
• ADP claim export to TXT format for billing
• Kanban board for ADP claim status tracking
• Field mapping for existing Odoo Studio fields
• Data persistence - fields survive module uninstall
Sales Management:
-----------------
• Custom quotation and order views with ADP fields
• ADP portion and client portion columns
• Serial number tracking per line item
• Device placement (Left/Right/N/A)
• Client type selection and automatic calculations
Claim Fields:
-------------
• Claim Number, Client Reference 1 & 2
• ADP Delivery Date, Service Start/End Dates
• Authorizer tracking
• Deduction Type (Percentage or Amount)
Report Features:
----------------
• Company logo and multi-store addresses
• Billing and delivery address boxes
• Authorizer and sales rep information
• Per-line ADP portion, client portion, taxes, and totals
• ADP device codes from products
• Serial numbers section
• Customizable payment terms
• Optional refund policy page
Copyright © 2024-2025 Nexa Systems Inc. All rights reserved.
""",
'author': 'Nexa Systems Inc.',
'website': 'https://www.nexasystems.ca',
'maintainer': 'Nexa Systems Inc.',
'support': 'support@nexasystems.ca',
'license': 'OPL-1',
'price': 0.00,
'currency': 'CAD',
'depends': [
'base',
'sale',
'sale_management',
'sale_margin',
'purchase',
'account',
'sales_team',
'stock',
'calendar',
'ai',
'fusion_ringcentral',
'fusion_tasks',
],
'external_dependencies': {
'python': ['pdf2image', 'PIL'],
},
'data': [
'security/security.xml',
'security/ir.model.access.csv',
'data/ir_config_parameter_data.xml',
'data/pdf_template_data.xml',
'data/mail_activity_type_data.xml',
'data/ir_cron_data.xml',
'data/ir_actions_server_data.xml',
'data/product_labor_data.xml',
'wizard/status_change_reason_wizard_views.xml',
'views/res_company_views.xml',
'views/res_config_settings_views.xml',
'views/sale_order_views.xml',
'views/account_move_views.xml',
'views/account_journal_views.xml',
'wizard/adp_export_wizard_views.xml',
'wizard/device_import_wizard_views.xml',
'wizard/device_approval_wizard_views.xml',
'wizard/submission_verification_wizard_views.xml',
'wizard/account_payment_register_views.xml',
'wizard/case_close_verification_wizard_views.xml',
'wizard/schedule_assessment_wizard_views.xml',
'wizard/assessment_completed_wizard_views.xml',
'wizard/application_received_wizard_views.xml',
'wizard/ready_for_submission_wizard_views.xml',
'wizard/ready_to_bill_wizard_views.xml',
'wizard/field_mapping_config_wizard_views.xml',
'wizard/ready_for_delivery_wizard_views.xml',
'wizard/send_to_mod_wizard_views.xml',
'wizard/mod_awaiting_funding_wizard_views.xml',
'wizard/mod_funding_approved_wizard_views.xml',
'wizard/mod_pca_received_wizard_views.xml',
'wizard/odsp_sa_mobility_wizard_views.xml',
'wizard/odsp_discretionary_wizard_views.xml',
'wizard/odsp_submit_to_odsp_wizard_views.xml',
'wizard/odsp_pre_approved_wizard_views.xml',
'wizard/odsp_ready_delivery_wizard_views.xml',
'wizard/send_page11_wizard_views.xml',
'wizard/adp_import_wizard_views.xml',
'views/res_partner_views.xml',
'views/pdf_template_inherit_views.xml',
'views/dashboard_views.xml',
'views/client_profile_views.xml',
'wizard/xml_import_wizard_views.xml',
'views/adp_export_record_views.xml',
'views/adp_claims_views.xml',
'views/submission_history_views.xml',
'views/product_template_adp_views.xml',
'views/page11_sign_request_views.xml',
'views/technician_task_views.xml',
'report/report_actions.xml',
'report/report_templates.xml',
'report/sale_report_portrait.xml',
'report/sale_report_landscape.xml',
'report/invoice_report_portrait.xml',
'report/invoice_report_landscape.xml',
'report/report_proof_of_delivery.xml',
'report/report_proof_of_delivery_standard.xml',
'report/report_proof_of_pickup.xml',
'report/report_approved_items.xml',
'report/report_grab_bar_waiver.xml',
'report/report_accessibility_contract.xml',
'report/report_mod_quotation.xml',
'report/report_mod_invoice.xml',
'data/mail_template_data.xml',
'data/ai_agent_data.xml',
],
'assets': {
'web.assets_backend': [
'fusion_claims/static/src/scss/fusion_claims.scss',
'fusion_claims/static/src/js/document_preview.js',
'fusion_claims/static/src/js/preview_button_widget.js',
'fusion_claims/static/src/js/status_selection_filter.js',
'fusion_claims/static/src/js/gallery_preview.js',
'fusion_claims/static/src/js/tax_totals_patch.js',
'fusion_claims/static/src/js/google_address_autocomplete.js',
'fusion_claims/static/src/js/calendar_store_hours.js',
'fusion_claims/static/src/js/attachment_image_compress.js',
'fusion_claims/static/src/js/debug_required_fields.js',
'fusion_claims/static/src/xml/document_preview.xml',
],
},
'images': ['static/description/icon.png'],
'installable': True,
'auto_install': False,
'application': True,
'post_init_hook': '_load_adp_device_codes',
}