Migrate AI engine to Claude API; convert stage field to Many2one Kanban model

- Replace fl.case.stage Selection field with Many2one → fl.case.stage model,
  enabling Kanban grouping and dynamic stage management
- Add FlCaseStage model (sequence, fold, description) and fl_stage_data.xml
  with all 11 procedural stages seeded with noupdate=1
- Migrate fl_ai_engine.py from Ollama/llama3.1 to Claude API
  (claude-sonnet-4-20250514); key from ir.config_parameter fl_ai.claude_api_key
- Fix stale field references in _rule_based_tagging and _build_case_context:
  employment/income now read from party_ids, timesharing fields corrected
- Add _fallback_complexity() for graceful degradation when API unavailable
- Add Kanban view to fl_case_views.xml; update action view_mode to kanban,tree,form
- Add fl.case.stage ACL entries to ir.model.access.csv

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-28 17:45:26 +00:00
parent c937282091
commit b8ab8494c7
6 changed files with 313 additions and 163 deletions

View File

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="fl_stage_intake" model="fl.case.stage">
<field name="name">Intake &amp; Qualification</field>
<field name="sequence">10</field>
<field name="fold">False</field>
</record>
<record id="fl_stage_preparation" model="fl.case.stage">
<field name="name">Document Preparation</field>
<field name="sequence">20</field>
<field name="fold">False</field>
</record>
<record id="fl_stage_filed" model="fl.case.stage">
<field name="name">Filed — Awaiting Service</field>
<field name="sequence">30</field>
<field name="fold">False</field>
</record>
<record id="fl_stage_service_complete" model="fl.case.stage">
<field name="name">Service Complete</field>
<field name="sequence">40</field>
<field name="fold">False</field>
</record>
<record id="fl_stage_discovery" model="fl.case.stage">
<field name="name">Discovery</field>
<field name="sequence">50</field>
<field name="fold">False</field>
</record>
<record id="fl_stage_deposition" model="fl.case.stage">
<field name="name">Deposition Stage</field>
<field name="sequence">60</field>
<field name="fold">False</field>
</record>
<record id="fl_stage_mediation" model="fl.case.stage">
<field name="name">Mediation</field>
<field name="sequence">70</field>
<field name="fold">False</field>
</record>
<record id="fl_stage_hearing_scheduled" model="fl.case.stage">
<field name="name">Hearing Scheduled</field>
<field name="sequence">80</field>
<field name="fold">False</field>
</record>
<record id="fl_stage_order_entered" model="fl.case.stage">
<field name="name">Order Entered</field>
<field name="sequence">90</field>
<field name="fold">False</field>
</record>
<record id="fl_stage_closed" model="fl.case.stage">
<field name="name">Closed</field>
<field name="sequence">100</field>
<field name="fold">True</field>
</record>
<record id="fl_stage_referred_out" model="fl.case.stage">
<field name="name">Referred to Attorney</field>
<field name="sequence">110</field>
<field name="fold">True</field>
</record>
</data>
</odoo>