ec09f96943d51a5b179722a20ea829404e40bd95
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>
Description
No description provided
Languages
Python
100%