- Shipped
- November 7, 2026 at 8:32 PM UTC
- Author
- Kamo
- Commit
- fdbcf3c
Members can now be asked to UPLOAD documents in a Legal & Compliance package, and a package can require an HR review before it is executed. Authoring (/api/docs/legal/packages): reviewRequired, reviewerAnyRight, reviewerManager, reviewerMemberIds[], reviewDueBusinessDays and requests[] (full replace) on create/patch and GET. Publish freezes requests + the review switch into the version (fingerprint unchanged for packages that use neither, so no spurious Redeliver). A request-only package publishes and delivers. Member (/api/docs/legal/member): upload one file per call (ImageService content- addressed store; images -> PDF in-process, Office/HEIC via ConversionService; native PDFs serve the original), remove a draft file (soft, never deleted), set an expiration date, read own files, request sample image. Detail gains requests[], reviewRequired, reviewRound, latestReview, message; documents gain **************** Finish enforces required uploads, attests per round (supersedes link) and moves a reviewed package to AWAITING_REVIEW. Review (/api/docs/legal): reviews/queue + count, review-workspace, file and per-round document PDFs (one audit row per open), draft save, and the decision. Approve -> EXECUTED and files the merged PDF (signed docs + approved uploads + a Review Certificate page). Return -> RETURNED, flagged items reopen, returned signed documents get a fresh envelope (old one kept as history). Routing: REVIEW_LEGAL_SUBMISSIONS holders, named reviewers, or the member's manager by reporting line; never one's own assignment. Quick Requests: POST /quick-requests builds an ad-hoc package for one member, publishes and delivers it synchronously and answers the assignment. Notifications: hr.package_needs_review / returned / approved, reviewer SLA nudges in the daily sweep (business-day due dates); RETURNED is remindable. SI pre-check: OCR suggestions for reviewers, ONLY when the org has the SI app (ServiceType.AI_SUPPORT via FeatureService); otherwise siPrecheck is null and nothing runs. LIVE_STATES (open + in review) now drives delivery de-dup, void and redeliver; k8s: multipart limits (Spring's 1 MB default refused phone photos) and the optional OCR secret.
