Commit Graph

7 Commits

Author SHA1 Message Date
tocmo0nlord
82f9d3c0e8 Step 5: mandatory disclosure (Rule 12.285) — checklist + financial affidavit
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>
2026-06-02 04:04:57 +00:00
tocmo0nlord
a6f8d31316 Step 4: deadline engine (per-proceeding clocks, weekend roll, overdue cron, calendar mirror)
familylaw.deadline — a procedural clock attached to a PROCEEDING:
- Deterministic due_date: trigger_date + days, with Rule-2.514-style weekend
  roll-forward (_roll_forward); _holiday_dates() hook left empty by design
  (holidays are jurisdiction/year-specific — content-maintenance concern)
- STANDARD_OFFSETS (answer 20 / disclosure 45 / discovery 30 / objection 10) as
  defaults; per-record `days` override. Flagged "verify current rule".
- state pending/done/waived/overdue; is_overdue computed + searchable
- _cron_flag_overdue daily ir.cron flips pending+past -> overdue, audited
- calendar.event mirror auto-created/updated on date changes (allday)
- proceeding.deadline_ids + action_seed_standard_deadlines (idempotent)

Adds 'calendar' dependency, data/familylaw_cron.xml, deadline views + menu,
Deadlines tab + Seed button on proceeding form, security rules.

Tests (familylaw_step4): 20 tests with FIXED dates — 20/45/30-day math, weekend
roll (Sat/Sun -> Mon), type-default vs explicit days, overdue detect, cron flag,
is_overdue search, calendar mirror create+update, per-proceeding isolation,
idempotent seeding.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 04:02:20 +00:00
tocmo0nlord
979bbfa14a Step 3: documents + the attorney review gate (Gate 1)
familylaw.document — every piece of work product, attached to a PROCEEDING:
- States: ai_draft -> attorney_review -> approved (+ rejected, filed, sent)
- AI-sourced documents born in ai_draft
- Gate 1 enforced in code: _ensure_approved() blocks file/send unless approved;
  _ensure_attorney() restricts approve/reject/file/send to the attorney group
- approved_by_id / approved_date stamped on approval; cleared on reject
- mail.thread audit on every transition
- proceeding.document_ids One2many; case_id derived (stored) from proceeding

Views: document list/form/search + menu; inline documents tab on proceeding form.
Security + manifest + menu updated.

Also folds in a correctness fix for Steps 2-3 view bindings: replaced the invalid
`view_id="..."` attribute on x2many fields with canonical inline <list> subviews
(case notebook tabs + proceeding documents tab). Avoids load-order/attr issues.

Added scripts/validate_module.py: static gate (py compile, xml well-formed,
forbidden-construct scan, button->method mapping, manifest+ACL integrity).

Tests (familylaw_step3): 16 tests — born-draft, Gate 1 (no file/send unapproved
from draft or review), attorney-only approve/reject/file/send, full happy path,
reject clears approval + resubmit, audit, proceeding linkage.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 03:58:48 +00:00
tocmo0nlord
8bbae06b06 Step 2: parties, children, issues, proceeding layer, conflict screening, intake wizard
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>
2026-06-02 03:43:10 +00:00
tocmo0nlord
8c716d6ba0 Merge remote-tracking branch 'origin/main' 2026-06-02 03:14:59 +00:00
tocmo0nlord
0d53967422 Initial commit — Step 1 complete: case spine, lifecycle, attorney gates
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>
2026-06-02 03:14:33 +00:00
8f4e664360 Upload files to "/" 2026-06-02 03:06:02 +00:00