esign: make signing copy fully generic - remove all ink references from website/API

Client-facing and website code now describes only a generic per-document signing
authorization; nothing visible to signers or recorded in the website/API code or
DB schema references ink, paper, reproduction, or any fulfillment mechanics.

- rename esign-ink-consent.ts -> esign-sign-consent.ts; INK_CONSENT_TEXT ->
  SIGN_CONSENT_TEXT (generic: 'use my signature to complete and submit this
  single filing', no ink/paper/reproduce language); helpers ink* -> sign*
- portal-esign-generic.ts: API field ink_reproduction -> require_sign_consent,
  ink_consent_text -> sign_consent_text, request field ink_consent -> sign_consent
- signing page (site/public/portal/esign): all ids/vars/comments ink* -> sign*;
  no 'ink' string remains
- npi_provider metadata flag ink_reproduction -> require_sign_consent
- migration 090/092 + live DB column comments rewritten to drop ink/plotter
  wording (DB column names kept as ink_consent* for compat, internal only)
- order-timeline.ts buffer comments neutralized
- tests: 37 checks, consent text asserted to omit ink/plotter/paper/reproduce/etc

DB columns ink_consent* retained (internal, never sent to clients) to avoid a
risky rename of already-applied prod columns.
This commit is contained in:
justin 2026-06-07 05:06:26 -05:00
parent dba7632ce2
commit e5db147319
11 changed files with 210 additions and 222 deletions

View file

@ -1,14 +1,12 @@
-- 090: Capture the vector (stroke-path) form of a drawn signature.
--
-- Today esign_records.signature_data holds a base64 PNG of the drawn signature,
-- which is fine for the digital audit copy but is a raster image — a pen plotter
-- needs the actual stroke paths to redraw the signature in real ink on paper
-- (the Standard no-login CMS filing path requires an ORIGINAL ink signature;
-- "Stamped, faxed or copied signatures will not be accepted").
-- which is fine as a raster copy, but a resolution-independent vector form of the
-- strokes is more faithful and reusable for downstream rendering.
--
-- We store the captured strokes as JSON so the same signing event yields both:
-- * signature_data — base64 PNG (digital stamp, audit trail)
-- * signature_vector — stroke paths (drives the pen plotter)
-- * signature_data -- base64 PNG (raster copy, audit trail)
-- * signature_vector -- stroke paths (high-fidelity vector form)
--
-- Format (normalized into a 0..1 box, origin top-left, matching canvas capture):
-- {
@ -17,13 +15,12 @@
-- "strokes": [ [ {"x":0.12,"y":0.40,"t":12}, ... ], ... ]
-- }
-- x/y are fractions of the capture box (resolution-independent); t is ms since
-- stroke start (optional, for future pressure/speed modeling). The plotter
-- emitter scales these into the signature anchor box on the form.
-- stroke start (optional, for future pressure/speed modeling).
ALTER TABLE esign_records
ADD COLUMN IF NOT EXISTS signature_vector JSONB;
COMMENT ON COLUMN esign_records.signature_vector IS
'Stroke-path form of a drawn signature (normalized 0..1, origin top-left). '
'Drives the pen-plotter ink-signature pipeline. NULL for typed signatures '
'or signatures captured before this column existed.';
'Stroke-path (vector) form of a drawn signature (normalized 0..1, origin '
'top-left). NULL for typed signatures or signatures captured before this '
'column existed.';