Sign

E-signatures

MarketplaceContent and documentsVersion 0.1.0manifest

What it is for ​

Manage templates and signature requests through draft, sent, signed, declined and expired, and record the document hash that was signed. The platform cannot yet lock a record, so a signed request is immutable by convention only.

What the package does and does not do ​

Document templates and signature requests with a draft, sent, signed, declined, expired flow. A request names the signer (personal data) and keeps the signature evidence as references. A signed request is immutable by convention only: the platform cannot yet lock a record, so nobody should edit a request once it is signed, and the document_hash records what was signed. Sending and recording a signature need a human approval; agents may only propose them.

Models ​

sign_template ​

A document that can be sent out for signature

Read group: sign.user. Write group: sign.manager.

FieldKindData classPersonal dataGroupAgents seeDescription
nametextnonenosign.userin clearTemplate name, for example Employment contract
descriptionlongtextnonenosign.userin clearWhat the document is for and who signs it
bodylongtextnonenosign.userin clearThe document text, or a reference to where the file is kept
signer_roletextnonenosign.userin clearRole of the person who signs, for example Customer
activeboolnonenosign.userin clearWhether new requests can use the template

sign_request ​

A request for one person to sign one document

Read group: sign.user. Write group: sign.user.

FieldKindData classPersonal dataGroupAgents seeDescription
template_idref → sign_templatenonenosign.userin clearThe document to sign
titletextnonenosign.userin clearSubject shown to the signer
messagelongtextnonenosign.userin clearMessage shown to the signer in the request
signer_nametextinternalyessign.usermaskedName of the person who must sign
signer_emailtextinternalyessign.usermaskedEmail address the request is sent to
sent_ondatenonenosign.userin clearDay the request was sent (YYYY-MM-DD)
expires_ondatenonenosign.userin clearLast day the request can be signed (YYYY-MM-DD)
signed_ondatenonenosign.userin clearDay the document was signed (YYYY-MM-DD)
signer_iptextinternalyessign.managermaskedIP address the signature came from (evidence)
signer_user_agenttextinternalyessign.managermaskedBrowser the signature was made with (evidence)
signature_referencetextnonenosign.managerin clearWhere the signature image or certificate is stored
document_hashtextnonenosign.managerin clearSHA-256 hash (hex) of the signed document, to prove it was not changed afterwards
stateselect (draft, sent, signed, declined, expired)nonenosign.userin clearRequest status: draft, sent, signed, declined, expired

Workflows ​

sign_request ​

ActionMovesWho may run itApproval
sign_request.sendstate: draft → sentsign.useryes
sign_request.signstate: sent → signedsign.manageryes
sign_request.declinestate: sent → declinedsign.userno
sign_request.expirestate: sent → expiredsign.userno

Permission groups ​

Groups used by this app:

  • sign.manager
  • sign.user

Approval steps ​

Steps an agent can only propose:

  • sign_request.send
  • sign_request.sign

What agents can and cannot do ​

An agent can read, search, create and update records of this app, and run the actions that need no approval, within the permission groups of its token.

It can only propose these steps, and a person must approve them: sign_request.send, sign_request.sign, sign_template.delete, sign_request.delete.

Personal data is masked as placeholder tokens: sign_request.signer_name, sign_request.signer_email, sign_request.signer_ip, sign_request.signer_user_agent.

Dependencies ​

None.

Install ​

Install it from the Customize app (Marketplace), or from the command line:

bash
obop modules install-from sign

Needs a database and administrator rights.

Build your own ​

The module guide shows how apps like this one are written