For Florida law firms
Document requests: the firm asks, the client answers one of three honest ways, and every upload says where it stands
firm lane · Deterministic — no model call
Current availability
ShippedConfigured and enabled: a firm's matter — the firm's staff with the second factor on the firm side; the matter's own people in the client room.
- Where it lives
- The firm's matter (/admin/matter/[id]) → Document requests · the client's matter (/matter/[id]) → Documents your firm asked for · a helper's documents page (/matter/[id]/documents) · /api/admin/client-requests · /api/client-requests · /api/admin/documents/reviewed
- What unlocks it
- the firm's staff ask and close a request; an attorney accepts or returns an answer and marks an upload reviewed; the matter's client and co-principals answer; a helper answers only a request the client let them answer
Status is evaluated against this deployment's configuration by the capability-status service at build time; the catalogue's facts were last reviewed on the date shown.
Capabilities
- ShippedThe firm asks in a request: what each item is, why (in neutral, plain words), whether it takes a file, words or both, and what any date rests on — a court rule the request names, the attorney's own date, or no deadline.
- ShippedThe client answers each item one of three ways: send it (a file — a phone's camera included — or words, as the item takes them); say it cannot be obtained, with words to the attorney (the item is then shown as blocked, never hidden); or ask what it means — a question that changes nothing on the item. In five languages.
- ShippedAn answer is kept in the client's browser first, bound to their account and the item, offered back after a reload or a failed send, and discarded the moment the server records it.
- ShippedA helper answers only a request the client let their helpers answer; the client turns that on and off per request, and every helper's answer is marked as a helper's.
- ShippedEvery recorded answer reaches the firm's attorneys through one outbox notice — the matter's assigned attorney when they can open it, otherwise every attorney of the firm who can (the matter's walls decide) — and its delivery writes the answer's routing receipt, which the firm sees beside it.
- ShippedAn attorney accepts an answer, or returns it with a note the client reads and answers again; accepting an answer that carried a file records that file reviewed. The firm closes a request as done or withdraws it, once; every step is a new record, never an edit, and each is audited.
- ShippedEvery upload from the client's side of a firm's matter says where it stands, on the client's list, the helper's page and the firm's list: received (on the record), under review (its notice reached an attorney — the routing receipt), or reviewed (an attorney advanced it, with who and when). A matter with no firm says saved, never under review.
Limits
- Requests are a firm's: a matter on the direct service has no one to ask, and its uploads are kept on the person's record without a review step.
- Only an attorney accepts or returns an answer and marks an upload reviewed — administration confers no such authority; the rest of the staff ask, read and close.
- The client and the firm hear of a new request, a returned answer and a reviewed upload in the app; no e-mail is sent for them.
- A notice that cannot reach any attorney (none of the firm's attorneys can open the matter) routes nothing: the answer stands, the upload stays received, and the outbox shows the reason until an attorney can.
What EstateDraftFL refuses
| Reason code | HTTP | What it means |
|---|---|---|
| invalid | 400 | The request, the answer or the decision is not complete — the field is named (an answer's file must be the matter's own, cleared by the safety scan). |
| forbidden | 403 | The session is not the firm's staff. |
| not-authorized | 403 | The firm's staff able to open the matter ask and close; an attorney of the firm accepts or returns an answer and marks an upload reviewed. |
| not-a-firm | 409 | The matter has no firm to ask or to answer. |
| unknown-item | 404 | The item was not found — or it is not the caller's to answer. |
| unknown-request | 404 | The request was not found. |
| already | 409 | The item is already answered; the firm decides it, or returns it for another answer. |
| accepted | 409 | The firm already accepted the item. |
| not-answered | 409 | The item has no answer to accept or return yet. |
| closed | 409 | The request is closed. |
| matter_archived | 409 | The matter is archived — its record reads, and nothing is added. |
| not-a-client-upload | 409 | The firm's own files carry no upload state — only a file from the client's side is routed or marked reviewed. |
| unavailable | 503 | The request, the answer or the decision could not be read or recorded just now — nothing was changed. |
Evidence
- supabase/migrations/20260929200000_phase11_client_requests.sql
- src/lib/client-requests/policy.ts
- src/lib/client-requests/server.ts
- src/lib/client-requests/routing.ts
- src/lib/client-requests/draft-store.ts
- src/lib/uploads/progress.ts
- src/lib/actions/handlers.ts
- src/app/api/admin/client-requests/route.ts
- src/app/api/client-requests/route.ts
- src/app/api/admin/documents/reviewed/route.ts
- src/app/api/documents/register/route.ts
- src/components/ClientRequestsPanel.tsx
- src/components/UploadStateChip.tsx
- src/components/client-requests/FirmRequestsPanel.tsx
- src/components/client-requests/AdminDocumentsList.tsx
- docs/security/MASTER-PLAN-PHASE11-PART1-2026-09-29.md
Last reviewed 2026-09-29