"""Audit record of one follow-up execution (per partner per level).""" from odoo import _, api, fields, models STATE_SELECTION = [ ('draft', 'Draft'), ('sent', 'Sent'), ('manual_review', 'Manual Review'), ('skipped', 'Skipped'), ('failed', 'Failed'), ] class FusionFollowupRun(models.Model): _name = "fusion.followup.run" _description = "Fusion Follow-up Run (Per-Partner Audit)" _order = "execution_date desc, id desc" partner_id = fields.Many2one('res.partner', required=True, ondelete='cascade') company_id = fields.Many2one('res.company', required=True, default=lambda self: self.env.company) level_id = fields.Many2one('fusion.followup.level', ondelete='restrict') execution_date = fields.Datetime(default=fields.Datetime.now, required=True) state = fields.Selection(STATE_SELECTION, default='draft', required=True) overdue_amount = fields.Float() longest_overdue_days = fields.Integer() risk_score = fields.Integer() risk_band = fields.Selection([ ('low', 'Low'), ('medium', 'Medium'), ('high', 'High'), ('critical', 'Critical'), ]) subject = fields.Char() body = fields.Text() tone_used = fields.Selection([ ('gentle', 'Gentle'), ('firm', 'Firm'), ('legal', 'Legal'), ]) sent_to_email = fields.Char() text_was_ai_generated = fields.Boolean(default=False) ai_provider = fields.Char(help="LLM provider name (openai, claude, etc.) if AI was used.") notes = fields.Text() error_message = fields.Text() def action_mark_sent(self): self.write({'state': 'sent'}) def action_mark_failed(self, error: str = ''): self.write({'state': 'failed', 'error_message': error})