familylaw.support.modification — wires Steps 1-8 for a support modification:
- open_for_case() opens a NEW modification proceeding under the same case (locked
decision) and sets a 20-day answer deadline on it
- 15%/$50 substantial-change PRESUMPTION: threshold = max($50, 15% of current);
meets_threshold computed. Explicitly a deterministic test, NOT a prediction of
whether the court grants it (no outcome/probability — EXCLUDED capability honored)
- DOR / Title IV-D flag; retroactivity to filing date + note
- prior-judgment handling: action_extract_prior_judgment produces a plain summary +
FLAGGED interpretation QUESTIONS (carries a not-a-conclusion disclaimer); the model
has no conclusion/ruling field by design. AI call mocked.
Wizard + views + menu; "Open Support Modification" button on the case form (shown
for support_modification matters). ACL added.
Tests (familylaw_step9): new proceeding created + distinct from original; threshold
15% prong, $50 prong (met/not), change %, no-change; 20-day answer deadline + date
math; DOR flag; retroactivity date; extraction summarizes + flags (not concluded,
no conclusion field); extraction logs a done ai.task.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
familylaw.discovery.request (per proceeding):
- discovery_type incl. nonparty_production (Rule 12.351)
- HARD objection-window gate: a non-party subpoena cannot issue before notice is
served + the 10-day objection window elapses, or while an objection is pending
(_ensure_objection_window_elapsed). Party discovery is not gated.
- issuance_route computed from representation: attorney issues directly, pro se via
the clerk (Forms & Playbook Part C)
- on issue: Notice of Issuance served the SAME DAY; response due +30 days
- objection_deadline (+10, weekend roll) and response_due (+30, roll) computed
- VERIFY note: Rule 12.410 subpoena amendment eff. Oct 1 2025
Proceeding gets a Discovery tab; discovery views + menu + ACL.
Tests (familylaw_step8, fixed dates): cannot issue before notice / before window /
with pending objection; can issue after window; 10-day deadline math with weekend
roll; same-day notice of issuance; attorney vs clerk routing; party production not
gated; serve-notice transition; proceeding linkage.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
TIER 3 scaffolding — structure built, legal CONTENT born unapproved/unverified and
NOT authoritative until attorney validation. External calls mocked in all tests.
familylaw.ai.client (AbstractModel service):
- _route_model() pluggable provider seam (Ollama = future config flip)
- BLOCKED_TASK_TYPES (trust_billing/reconciliation/iota) RAISE before any call —
trust/billing never reaches a model (Bar Rule 5-1.1, IOTA)
- per-task token ceiling caps max_tokens; config via ir.config_parameter
- _call_provider isolates the real HTTPS call (the single mock point)
- generate() routes, calls, and logs an ai.task; returns (result, task)
familylaw.ai.task — the audit/economics ledger: model_used, prompt/completion/total
tokens, estimated cost_usd (per-model price table, flagged estimate), latency_ms,
request/response summaries, error, links to case/proceeding/document.
familylaw.citation — born 'unverified' (Gate 2 verification + filing block come in
Step 7); is_verified computed; linked to document + source ai.task.
familylaw.document.ai_assemble(): single-shot drafting agent — doc born ai_draft
(source ai), proposed citations born unverified, task linked. NOT auto-approved.
Plus familylaw.ai.draft.wizard for the UI walkthrough; Citations tab on document;
AI Draft button on proceeding; AI Tasks + Citations menus.
Tests (familylaw_step6, mocked _call_provider): doc born ai_draft, ai.task logged
with model+tokens+cost+latency, citations born unverified, token ceiling caps
max_tokens, trust/billing blocked before any provider call, provider error marks
task failed, deterministic cost estimate, missing-key raises, AI draft cannot be
filed even by an attorney (Gate 1 intact).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Three per-proceeding models:
- familylaw.disclosure.item: Rule 12.285 checklist; is_mandatory items refuse
waiver in code (action_waive raises); non-mandatory can be waived
- familylaw.financial.affidavit: form-by-income selection — short 12.902(b) below
the $50,000 gross-annual threshold, long 12.902(c) at/above it; 45-day due date
(Rule 12.285(e)) with weekend roll; line totals + net worth
- familylaw.fin.line: income/expense/asset/liability line items
All thresholds/counts flagged "verify current rule" (volatile FL law).
proceeding gets disclosure_item_ids + affidavit_ids, Seed Disclosure Checklist
button, and Disclosure / Financial Affidavits notebook tabs. Views + menu + ACL.
Tests (familylaw_step5): 15 tests — form selection across the threshold boundary
(49999 short / 50000 long / 80000 long), recompute on income change, 45-day due
with/without weekend roll (fixed dates), mandatory-cannot-waive, non-mandatory
waive, totals + net worth, idempotent seeding, per-proceeding isolation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Models:
- familylaw.party — party to a matter (client/opposing/opposing counsel/other)
- familylaw.child — minor child with DOB constraint (rejects future + >25 years)
- familylaw.issue — contested issue (time-sharing, support, equitable distribution, etc.)
- familylaw.proceeding — unit of legal action; auto-created on every case create()
- familylaw.conflict.hit — records of conflict screening hits for attorney review
- familylaw.intake.wizard — multi-step intake questionnaire (TransientModel)
familylaw.case updates:
- case_number (indexed, unique, searchable), county, is_emergency, urgency_notes
- One2many to party/child/issue/proceeding/conflict_hit
- create() override: auto-opens an initial proceeding typed by case_type
- action_run_conflict_screening(): full-DB party + client name search; never auto-clears gate
Intake wizard (conditional strictness):
- Triage step first; urgency screen selects emergency vs. standard path
- Emergency fast-path: create on minimum facts (who + urgency flags), defer rest
- Standard strict path: matter name + client + case type + county required
- Modification branch (step 3) for support/parenting/alimony modifications
- Caller concern logged on case as attorney question; software never answers it
- Runs conflict screening on completion
Views: party/child/issue/proceeding/intake form+list+inline views; case form now
shows emergency banner, conflict warning, notebook tabs for all related records;
search extended to find by party name, child name, case_number (filter_domain).
Menu: "New Intake" entry launches the wizard.
Security: access rules for all 5 new models + intake wizard (base.group_user).
Tests (familylaw_step2): 34 tests across 4 classes covering:
- Initial proceeding creation and type mapping
- Multiple independent proceedings per case
- DOB validation (future + implausible age)
- Search by party name / child name / case_number
- Conflict screening (finds client match, does not auto-clear, hit count, no false
positives for unrelated parties)
- Standard path strict validation (missing name/type/county/client each rejected)
- Emergency path (creates case on caller name alone, sets is_emergency, captures notes)
- Caller concern logged on chatter, never answered by software
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Delivers the validated Step 1 slice of the Active Blue Family Law platform
(Odoo 18 Community module `activeblue_familylaw`):
- familylaw.case model: identity, team, representation flag, conflict_check_cleared gate
- Full lifecycle state machine (intake→engaged→disclosure→discovery→mediation→hearing→closed)
- Attorney-only guards enforced in Python + view groups=
- Security groups (Family Law/Staff, Family Law/Attorney), model access rules
- List, form, and search views (Odoo 18 <list> syntax; no attrs=/states=)
- Family Law app menu with Configuration placeholder
- 10 tagged unit tests (familylaw_step1): transitions, conflict gate, attorney-only, audit
- CLAUDE.md, BUILD_PLAN.md, START_HERE.md: full design brief and step contract
Step 2 (parties, children, issues, proceeding model, conflict screening,
intake questionnaire) is the next build target.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>