Electronic Signature & Document Integrity

SHA-256 document hashing, role-based signing order enforcement, a unique signing link for every signer, and a 17-action audit trail whose hash is sealed in the certificate of completion.

5 min read Compliance & Disclosure Published Mar 27, 2025

Overview

CommunityPay's electronic signature system (SimpleSign) provides signature workflows for governance documents — board resolutions, vendor contracts, compliance notices, and financial documents. Every document is protected by SHA-256 content hashing, and every action in the signing lifecycle is recorded in an audit trail whose hash is sealed in the certificate of completion.


Document Integrity

SHA-256 File Hashing

Every document uploaded to the system receives a SHA-256 hash computed from the raw file content. This hash is stored on the Document record and serves two purposes:

  1. Tamper detection: Any modification to the document after upload will produce a different hash
  2. Chain of custody: The hash links the signed version to the exact content that was presented to signers

Document Types

The system supports 11 document types for association governance:

Type Purpose
Contract Vendor and service agreements
Resolution Board resolutions requiring formal vote
Agreement General agreements between parties
Form Standardized forms
Notice Official notices to owners
Violation Violation notices requiring acknowledgment
ARC Request Architectural review committee requests
Meeting Minutes Board meeting minutes requiring attestation
Budget Budget documents requiring board approval
Policy Policy documents requiring adoption
Other Any other document

Signature Request Workflow

Document Lifecycle

Draft -> Pending Signatures -> Partially Signed -> Completed
                                                -> Declined
                                                -> Expired
                                                -> Voided

Role-Based Signing

Each signature request specifies a signer role from 11 roles:

  • Board President, Board Member, Board Secretary, Board Treasurer
  • Property Manager, Homeowner, Vendor, Contractor
  • Witness, Notary, Other

Signing Order Enforcement

When enforce_signing_order is enabled on a document, the system prevents out-of-sequence signing:

  • Each SignatureRequest has a signing_order integer
  • The can_sign property checks that all previous signers (lower order numbers) have status signed
  • If any predecessor has not signed, the current signer cannot proceed

This is essential for governance documents where the board president must sign before the secretary certifies, or where a vendor must countersign after the board approves.


Signer Authentication

Each signature request carries a unique access link, sent to the signer's email address. The link is the credential: a request is found by its token, and a link that is invalid, expired, declined, or voided never reaches the signing page.

The request records an authentication method, and the signing flow uses email. The setting also names SMS code, access code, knowledge-based authentication, ID verification, and none; those values are recorded on the request and the signing flow does not enforce them. Only the email link is enforced at signing today.


Signature Capture

The Signature model records each signature and the metadata around it.

Signature Types

  • Hand drawn (canvas capture)
  • Typed (the signer's typed name, affirmed at signing)

The signing page accepts those two types. The record also has room for an uploaded image, a digital certificate, and an organizational stamp; the signing page does not accept them.

Recorded With Every Signature

  • IP address: Network origin of the signing event
  • User agent: Browser and device identification
  • Typed name: The full legal name the signer types and affirms, stored for drawn signatures as well as typed ones
  • Consent and intent to sign: Recorded as affirmed when the signature is submitted
  • Timestamp: Server-side timestamp

The record also carries fields for geographic location, signature biometrics, and an external time-stamping authority. The signing page does not populate them, and the browser's geolocation is disabled by policy.


Audit Trail

The AuditLog model records 17 distinct action types across the document lifecycle:

Action Description
created Document created in system
uploaded Document file uploaded
sent Signature requests dispatched
viewed Document viewed by signer
signed Signature completed
completed All signatures collected
declined Signer declined to sign
voided Document voided by creator
expired Document reached expiration
downloaded Document downloaded
reminder_sent Signing reminder dispatched
field_filled Form field completed
authentication Authentication attempt
access_granted Access verified
access_denied Access rejected
modified Document metadata changed
deleted Document removed

Every audit entry records the user, signature request (if applicable), action details (JSON), IP address, user agent, and server timestamp.


Certificate of Completion

When all signatures are collected, the system generates a CertificateOfCompletion:

  • Certificate number: Unique identifier for the certified document
  • Summary: Human-readable summary of the signing events
  • Signatures data: JSON snapshot of all signature metadata
  • Audit trail hash: SHA-256 hash of the audit trail at the time of certification. It covers each entry's action, timestamp, signer email, and IP address, in time order, so a later change to any of those four fields no longer matches the sealed hash. Other fields of an entry, such as the user agent and the action details, are not in the hash
  • Certificate PDF: Generated document stored alongside the original

Document Templates

The DocumentTemplate system provides reusable templates across 8 categories (Board, Vendor, Homeowner, Compliance, Financial, Maintenance, Legal, Other) with:

  • Pre-defined signature field placements
  • Merge field mappings for dynamic content
  • Per-community or public availability
  • Usage tracking for template analytics
How CommunityPay Enforces This
  • Every document receives a SHA-256 file hash at upload for tamper detection
  • Signing order enforcement prevents out-of-sequence signatures when enabled
  • Each signer is identified by a unique signing link sent to their email address, and the method is recorded on every request
  • Certificate of Completion includes audit trail hash for integrity verification
Login