Operations & Compliance package

Contract and policy review with internal e-sign

Submit a policy, contract or procedure as a PDF; reviewers read it in a PDF viewer and redline it, legal checks it when needed, and the owner e-signs. Every step is audit-logged.

OfficialNo integrations neededStarts from a formIntermediate~10 min setupv1.0.0

About this package

What it does

Contract and policy review with internal e-sign takes a policy, contract or procedure from draft to published version using only UserTasks features and the official form controls. The submission page has three steps and a review step: the title, the document type (looked up in the Document types table, which shows its review route on an Info card), the effective date, the PDF itself (an Attachments field limited to PDF, previewed in a PDF viewer), the owner, reviewers and a Rich text summary of the changes.

The Document review and sign-off workflow gives the document a reference number, takes its review route from a decision table (one or two reviewers, legal review or not, days per review) and adds it to the Documents register. Each reviewer gets a task that shows the uploaded PDF in the PDF viewer, an Info card with the reference, type, version and owner, and a Rich text box for redline comments, with Approve or Request changes. Requested changes go back to the submitter with an SLA to upload a revised PDF, which then starts again at the first reviewer as the next version. Contracts and major policy changes also get a legal review.

Finally the document owner signs it off: they read the final PDF, confirm "I approve this version for publication" and sign with the Signature control. The workflow records the signer, time, file name and SHA-256 checksum, generates a sign-off certificate PDF (also merged with the document into a signed pack) and emails it. Every step writes a row to the Audit log data table with the 7-year retention policy applied, and the register row gets the same policy.

The Document register page is the dashboard: Chart controls of documents by status and by type from the register, the review cycle time and open review tasks as Saved reports, and a button that emails the published documents due for review in the next 30 days.

Starts from a form

Starts from a form page: share the Document review request page (/f/<id>) with the people who own policies, contracts and procedures, or submit it through the forms API.

Someone fills in a form to start it: the workflow start form (Run dialog in the app, or your own portal posting to the API) or a standalone form page (/f/<id>) whose Form submitted trigger starts the workflow. People complete User Task forms along the way.

How forms work

The flow

Step by step

  1. 1

    Submit

    The owner of a document fills in three steps: title and type (its review route shows on an Info card), the PDF with a live preview, then the owner, reviewers and a rich-text summary of changes.

  2. 2

    Route and register

    A reference number, the review route from a decision table, a Documents register row and the first Audit log row.

  3. 3

    Review

    Each reviewer reads the PDF in the PDF viewer, writes redline comments in Rich text and approves or requests changes; a second reviewer and legal review follow when the route says so.

  4. 4

    Revise

    Requested changes go back to the submitter with an SLA to upload a revised PDF; the new version starts again at the first reviewer.

  5. 5

    E-sign

    The document owner confirms "I approve this version for publication" and signs with the Signature control; signer, time, file name and SHA-256 go into the Audit log.

  6. 6

    Certificate and register

    A sign-off certificate PDF is generated, merged with the document and emailed; the register shows the document as Published with its next review date, and both records get the 7-year retention policy.

  7. 7

    Track

    The Document register page charts documents by status and type, shows the review cycle time and open review tasks, and emails the reviews due in the next 30 days.

Document review and sign-off — A policy, contract or procedure from submission to publication: reference number, review route from a decision table, reviewer tasks with the PDF in a viewer and rich-text redlines, a revision loop back to the submitter with an SLA, optional legal review, owner e-sign, a sign-off certificate PDF, the Documents register and a step-by-step Audit log with 7-year retention. The same canvas you get in the designer after installing.

Sub-workflow: Reviews due summary

From the Document register page: lists the published documents whose next review falls within the chosen number of days (and those already overdue) and emails the list to whoever asked.

Forms

The start form and the task forms

People start it from a form page (/f/<id>) with its own header, theme and buttons; submitting it starts the workflow. User Tasks show their fields and outcome buttons to the assignee.

Form page · /f/<id>

Document register

2-column grid · own header and theme · Its own page: share the link or open it on a tablet

About this page about · ut-info-card
Register by status by_status · ut-chart
Register by type by_type · ut-chart
Review cycle time cycle · ut-saved-report
Open review tasks open_tasks · ut-saved-report
Email me the reviews due in the next … days * days_ahead · numberPrefilled: 30
Email me the reviews due

Form page · /f/<id>

Document review request

Submit a document for review · own header and theme · Its own page: share the link or open it on a tablet

Document title * title · text
Document type * doc_type · lookup
What kind of change is this? * change_size · choice
New documentMajor changeMinor change
Review route route_summary · textarea
Review route route_card · ut-info-card
Document owner (signs it off) * doc_owner · user
Owner name (for the certificate) * doc_owner_name · text
Owner email (receives the signed pack) * doc_owner_email · emailname@company.com
Reviewer * reviewer · user
Second reviewer (major changes) second_reviewer · user
Effective date * effective_date · dateYYYY-MM-DD
Version label version_label · text
The document (PDF) * document · attachments
Preview preview · ut-pdf-viewer
Summary of changes * change_summary · ut-rich-text
Submit for review

User Task

Review

Review: {{form.title}} v{{version}} ({{reference}}) · 2-column grid · own header and theme

Document t_title · textPrefilled: {{form.title}}
Reference t_ref · textPrefilled: {{reference}}
Type t_type · textPrefilled: {{form.doc_type}} · {{form.change_size}}
Version t_version · textPrefilled: v{{version}} · effective {{form.effective_date}}
Owner t_owner · textPrefilled: {{form.doc_owner_name}}
The document t_card · ut-info-card
Document doc_view · ut-pdf-viewerPrefilled: {{current_document}}
Summary of changes t_changes · textareaPrefilled: {{form.change_summary.text}}
Redline comments redline · ut-rich-text
ApproveRequest changes

User Task

Second review

Second review: {{form.title}} v{{version}} ({{reference}}) · 2-column grid · own header and theme

Document t_title · textPrefilled: {{form.title}}
Reference t_ref · textPrefilled: {{reference}}
Type t_type · textPrefilled: {{form.doc_type}} · {{form.change_size}}
Version t_version · textPrefilled: v{{version}} · effective {{form.effective_date}}
Owner t_owner · textPrefilled: {{form.doc_owner_name}}
The document t_card · ut-info-card
Document doc_view · ut-pdf-viewerPrefilled: {{current_document}}
Summary of changes t_changes · textareaPrefilled: {{form.change_summary.text}}
Redline comments redline · ut-rich-text
ApproveRequest changes

User Task

Legal review

Legal review: {{form.title}} v{{version}} ({{reference}}) · 2-column grid · own header and theme

Document t_title · textPrefilled: {{form.title}}
Reference t_ref · textPrefilled: {{reference}}
Type t_type · textPrefilled: {{form.doc_type}} · {{form.change_size}}
Version t_version · textPrefilled: v{{version}} · effective {{form.effective_date}}
Owner t_owner · textPrefilled: {{form.doc_owner_name}}
The document t_card · ut-info-card
Document doc_view · ut-pdf-viewerPrefilled: {{current_document}}
Summary of changes t_changes · textareaPrefilled: {{form.change_summary.text}}
Legal risk * legal_risk · choice
LowMediumHigh
Legal comments redline · ut-rich-text
ApproveRequest changes

User Task

Owner sign-off (e-sign)

Sign off: {{form.title}} v{{version}} ({{reference}}) · 2-column grid · own header and theme

Document t_title · textPrefilled: {{form.title}}
Reference t_ref · textPrefilled: {{reference}}
Type t_type · textPrefilled: {{form.doc_type}} · {{form.change_size}}
Version t_version · textPrefilled: v{{version}} · effective {{form.effective_date}}
Owner t_owner · textPrefilled: {{form.doc_owner_name}}
The document t_card · ut-info-card
Document doc_view · ut-pdf-viewerPrefilled: {{current_document}}
Summary of changes t_changes · textareaPrefilled: {{form.change_summary.text}}
SHA-256 of this file t_checksum · textPrefilled: {{doc_check.checksums.sha256}}
I approve this version for publication * approve_statement · boolean
Signature * signature · ut-signature
Comments (if you request changes) redline · ut-rich-text
Sign offRequest changes

User Task

Upload a revised version

Revise: {{form.title}} v{{version}} ({{reference}}) · 2-column grid · own header and theme

Changes requested t_request · textareaPrefilled: {{change_request}}
Current version doc_view · ut-pdf-viewerPrefilled: {{current_document}}
Revised document (PDF) revised_document · attachments
Preview of the revision revised_preview · ut-pdf-viewer
What you changed response · ut-rich-text
Send the revisionWithdraw

Form controls

6 official form controls, installed with it

The forms use these controls from the gallery. They come inside the package and install into Extensibility → Form controls, sandboxed and signed like every official control: nothing else to download.

From your code

Start a run over the API

Every workflow can be started over REST, MCP or the CLI, whatever its trigger, with the sample input below. Runs start straight away on the published version; replace <workflow id> with the id the install created.

REST

shell
curl -X POST "$USERTASKS_URL/api/v1/workflows/start" \
  -H "Authorization: Bearer $USERTASKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workflow_id":"<workflow id>","variables":{"title":"Information security policy","doc_type":"Policy","change_size":"Major change","route_summary":"Policy: 1 reviewer for a minor change, 2 reviewers and legal review for a major one; signed off by the document owner; reviewed every 12 months.","doc_owner":"$owner","doc_owner_name":"Avery Example","doc_owner_email":"avery.example@example.com","reviewer":"$owner","effective_date":"2026-12-01","version_label":"2026.2","change_summary":{"html":"<p>Adds a section on personal devices and shortens the password rotation rule to match current guidance.</p>","text":"Adds a section on personal devices and shortens the password rotation rule to match current guidance."}}}'

CLI

shell
usertasks workflows inputs <workflow id>          # the start form: keys, types, required
usertasks workflows run <workflow id> --input title="Information security policy" --input doc_type=Policy --input change_size="Major change" --input route_summary="Policy: 1 reviewer for a minor change, 2 reviewers and legal review for a major one; signed off by the document owner; reviewed every 12 months." … --wait

What's included

22 assets, ready to adapt

TypeNameDetails
Email templateChanges requested on your documentSent to the submitter when a reviewer, legal or the signer asks for changes; the revision task is waiting for them.
Email templateDocument signed offSent to the submitter and the document owner when the document is signed off, with the sign-off certificate attached.
Email templateDocument submitted for reviewSent to the person who submitted a document: its reference and the review route.
Email templateReviews due soonThe summary someone asks for from the Document register page: published documents whose next review falls within the chosen number of days.
Data tableAudit logOne row per step of every document review: who did what, when, on which version, and the outcome. The sign-off row records the signer, the time, the file name and its SHA-256 checksum. Rows get the 7-year retention policy as they are written.
Data tableDocument typesThe kinds of document that go through review, with what each one needs: how long its records are kept, who signs it off and how often it is reviewed again. The submission form looks the type up here; the workflow reads the row.
Data tableDocuments registerEvery controlled document: its current version, status (In review, Changes requested, Awaiting sign-off, Published, Withdrawn), effective date, who signed it off and when it is next reviewed.
Decision tableReview route5 rules — Decides how many reviewers a document needs, whether legal reviews it and how many days reviewers get, from the document type and the size of the change. Edit the rows to match your governance.
Retention policyDocument records: 7 yearsReview audit rows and document register rows are kept for 7 years after they are written, then reviewed before anything is deleted. The workflow applies it to every Audit log row and to the register row it signs off; change the period to your records schedule.
ReportDocuments by statusDocument review runs by their current status (In review, Changes requested, Awaiting sign-off, Published, Withdrawn), from the run variables.
ReportOpen review tasksReviews, legal checks, revisions and sign-offs that are not done yet, with their due dates (the Document review and sign-off workflow's tasks).
ReportReview cycle time by document typeAverage days from submission to sign-off and average review rounds, per document type (workflow variables of signed-off runs).
Form controlChartBar, line, area, pie or doughnut chart of static data, another field's rows, lookup results or a saved report. Keyboard-navigable points, a data table view, and optional point selection.
Form controlInfo cardA callout or key / value card: an info, success, warning, error or neutral message that can show up to six other form values ({{field1}} … {{field6}}), formatted for the reader.
Form controlPDF viewerShows a PDF inside the form (a contract, a quote, a policy) from an Attachments field or an upload: page by page, with zoom, rotation and the page text for screen readers.
Form controlRich textA rich-text editor with bold, italic, underline, headings, lists, quotes and links, a character counter and strict sanitising of everything typed, pasted or dropped.
Form controlSaved reportShows a saved report as a sortable, paginated table or a chart, run with the permissions of the person filling in the form. Optionally pick a row as the field's value.
Form controlSignatureDraw a signature with a finger, pen or mouse, or type a name. Saved as a trimmed PNG in the form's attachments.
FormDocument registerThe document control dashboard: register by status and type (charts from the Documents register table), review cycle time and open review tasks (saved reports), and a button that emails the reviews due soon.
FormDocument review requestSubmit a policy, contract or procedure for review and internal e-sign: title, type (its review route comes from the Document types table), owner, the PDF (previewed in a PDF viewer), effective date, reviewers and a rich-text summary of what changed.
WorkflowDocument review and sign-off63 steps — A policy, contract or procedure from submission to publication: reference number, review route from a decision table, reviewer tasks with the PDF in a viewer and rich-text redlines, a revision loop back to the submitter with an SLA, optional legal review, owner e-sign, a sign-off certificate PDF, the Documents register and a step-by-step Audit log with 7-year retention.
WorkflowReviews due summary8 steps — From the Document register page: lists the published documents whose next review falls within the chosen number of days (and those already overdue) and emails the list to whoever asked.

Audit log · 4 sample rows

ReferenceWhenStepWhoOutcomeVersionDocumentDetail

Document types · 3 sample rows

TypeDescriptionReview route (shown on the form)Signed off byKeep records (years)Review again after (months)Active

Documents register · 11 sample rows

ReferenceTitleTypeOwnerStatusVersionEffectiveNext reviewSigned off bySignedReview cycle (days)FileSHA-256

Requirements

What you connect it to

Credentials never travel in a package. The install wizard asks for what your environment must provide, or installs it incomplete until you finish setup.

Needs

  • Email (optional) — Email delivery configured for the instance (EMAIL_PROVIDER), used for notifications.

After installing

  1. Nothing to configure: install it, open Forms → Document review request (share its /f/ link) and Forms → Document register.
  2. The PDF viewer, Signature, Rich text, Info card, Chart and Saved report controls install with the package (Extensibility → Form controls).
  3. Reviewers and the document owner are Person fields on the submission page; legal review and a missing second reviewer go to the person who installed the package. Change the Legal review step's assignee in the designer to your legal team.
  4. Edit the Review route decision table and the Document types table to match your governance (reviewers, legal review, sign-off role, review cycle). Delete the sample rows in Documents register and Audit log when you go live.
  5. The "Document records: 7 years" retention policy is applied to every Audit log row and to signed-off register rows by the workflow; change its period to your records schedule. Set EMAIL_PROVIDER so the confirmation, change request and certificate emails are delivered (the console provider logs them).
  6. Reviewers open the PDF through the submission: give reviewers who are not the submitter a role that can see form submissions (forms.edit) or tasks (tasks.view_all).

Asked for on install

Nothing: it installs complete.

Install

Install it in your workspace

Works on UserTasks cloud and on any self-hosted instance. Installing creates the assets above; nothing runs until you complete setup and start it.

In the app

  1. Download contract-policy-review-esign-1.0.0.utpkg.
  2. Open Automations → Packages and drag the file onto the page (or choose Import package). Browse gallery there lists every gallery package without downloading by hand.
  3. Pick the file. The wizard verifies the checksum, every file hash and the signature, and shows the readme.
  4. Review the changes (what is created) and the data rows.
  5. Fill in the requirements, or tick Keep incomplete and finish later with Complete setup.
  6. Done: the workflow is published and active once setup is complete.

With the CLI

shell
curl -fLO https://usertasks.com/gallery/contract-policy-review-esign-1.0.0.utpkg
usertasks packages inspect contract-policy-review-esign-1.0.0.utpkg       # offline: checksum, hashes, signature
usertasks packages install contract-policy-review-esign-1.0.0.utpkg --dry-run
usertasks packages install contract-policy-review-esign-1.0.0.utpkg       # prompts for each requirement
usertasks packages install contract-policy-review-esign-1.0.0.utpkg --keep-incomplete --yes   # in CI; finish with:
usertasks packages complete contract-policy-review-esign -f values.yaml

Verify the download

File SHA-256
2f36ef635e38dca032ae25296480416cca4550ae1ceebe4e6a4c9ea14ef4dde9
Package checksum (what is signed)
sha256:ddfdbdedf52067b9e520895dc2cd5a1f95868b019ab5a0b454c2d68a9de3e58e
Signer
UserTasks Gallery · 49:f3:04:90:47:02:4d:07:28:61:3d:dc:bb:aa:db:11

shasum -a 256 contract-policy-review-esign-1.0.0.utpkg should print the file SHA-256. How gallery packages are signed.

Versions

Version 1.0.0

  1. v1.0.02026-10-31First release.

Installing a newer version upgrades in place: local credentials and requirement values are kept, and changes you made are flagged first. How packages work

More packages

Related

Browse the whole gallery