tocmo0nlord ec09f96943 Step 12: file archive (SHA-256) + retention lifecycle + calendar layers
familylaw.retention.class — attorney-configured retention periods (years).
familylaw.archive — metadata over ir.attachment:
- SHA-256 checksum computed from the attachment bytes (kept as PROOF after destruction)
- destruction_eligible_date = archived + retention years; is_destruction_eligible
- lifecycle retained -> eligible -> destroyed; _cron_flag_eligible daily
- action_destroy (attorney-only): logs THAT destruction happened + checksum proof,
  unlinks the content (not retained), stamps destroyed_by/date

familylaw.case (_inherit): archive_ids; action_return_client_file (attorney-only,
only at matter close) records client-file return.
familylaw.deadline (_inherit): calendar `layer` (statutory/hearing/internal) with
per-layer search filter toggles.

Archive views + Retention Classes config menu; Return Client File button on closed
cases; retention cron; ACL (staff read-only on retention classes).

Tests (familylaw_step12): SHA-256 from bytes; eligible-date math; eligible now/not;
cron flags eligible; destroy removes content + keeps checksum + audited + attorney-
only; client-file return blocked when open / works when closed; deadline layer;
archive on case.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 05:01:12 +00:00
Description
No description provided
3.2 MiB
Languages
Python 100%