Add FL e-Filing Portal integration (assisted submission, Phase 1)

- fl.efiling.submission: generates the 11th Circuit court filename
  ({LastName}_{CaseNumber}_{DocumentType}_{YYYYMMDD}.pdf), validates PDF/A via
  pikepdf (XMP pdfaid + OutputIntents, graceful if pikepdf missing), and tracks
  status (draft → validated → pending_manual → submitted → accepted/rejected/failed)
- Assisted flow: "Open e-Filing Portal" deep-links to eportal.flcourts.org
  (?caseNumber=… when available; base overridable via ir.config_parameter
  fl_efiling.portal_url); confirmation # capture; accepted/rejected mark the
  linked fl.document filed and log to chatter
- Phase 2 API stub (action_submit_api) reads creds/endpoint from ir.config_parameter
  and refuses to call an unconfirmed endpoint — no guessed URLs, no silent failure
- fl.efiling.wizard: pick document/attachment/filing_type, preview the filename,
  create + auto-validate the submission
- Wiring: model + wizard registered, ACL (admin/paralegal), e-filing views, Cases
  menu item, fl.case.efiling_submission_ids + Filings tab + Prepare e-Filing button

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-29 00:42:28 +00:00
parent 70c951a7ef
commit 6f6129550e
10 changed files with 589 additions and 1 deletions

View File

@@ -24,6 +24,9 @@
<button name="action_run_paralegal" string="Paralegal Review"
type="object"
groups="activeblue_familylaw.group_admin,activeblue_familylaw.group_paralegal"/>
<button name="action_prepare_efiling" string="Prepare e-Filing"
type="object"
groups="activeblue_familylaw.group_admin,activeblue_familylaw.group_paralegal"/>
</header>
<!-- Attorney Referral Banner -->
@@ -310,7 +313,37 @@
<field name="total_expenses" readonly="1"/>
</page>
<!-- TAB 9: Time & Billing -->
<!-- TAB 9: Court Filings -->
<page string="Filings" name="filings">
<button name="action_prepare_efiling" string="Prepare e-Filing"
type="object" class="btn-primary"
groups="activeblue_familylaw.group_admin,activeblue_familylaw.group_paralegal"/>
<separator string="Case Documents"/>
<field name="document_ids">
<tree string="Documents">
<field name="name"/>
<field name="document_type"/>
<field name="state"/>
<field name="filed_date"/>
</tree>
</field>
<separator string="e-Filing Submissions"/>
<field name="efiling_submission_ids">
<tree string="e-Filing Submissions"
decoration-success="status == 'accepted'"
decoration-danger="status in ('rejected','failed')"
decoration-info="status == 'submitted'">
<field name="court_filename"/>
<field name="filing_type"/>
<field name="filing_date"/>
<field name="pdfa_valid"/>
<field name="confirmation_number"/>
<field name="status"/>
</tree>
</field>
</page>
<!-- TAB 10: Time & Billing -->
<page string="Time &amp; Billing" name="timesheets">
<group>
<group>