1
📜

Statutory Data — Forms

Registration, certificates, document custody, bank loans, asset acquisition

Statutory Data — Forms & Input Specification

Reference technical blueprint: statutory.md 7 sub-modules · 13 forms · the legal-records vault of the Trust — every form here carries legal weight and most edits route through two-key cosign.

The Statutory module is where the institution's paper-and-PDF facts are captured: the Trust Deed, every tax registration, every safety/food/professional certificate, the chain of physical custody for originals, secured loans, and the chain-of-title for land and other assets. Forms are deliberately rich in metadata (custody, hashes, link-document chain) and intentionally narrow in workflow — Statutory stores and surfaces; it does not transact.

Every legal-weight edit form in this module presents a mandatory Reason textarea at the bottom. On submit the service layer routes the change through submit_two_key_change; the user receives a "Submitted for cosign" confirmation linking to the pending queue. Direct (non-two-key) writes still emit an AuditEvent automatically via the audit bridge.


Sub-module 1: Trust Registration Profile

Form 1.1 — Trust Registration Profile (the Deed)

Purpose: Captures the founding Trust Deed metadata — the single anchor record that establishes the legal personality of the institution. Exactly one row is normally is_active=true per tenant; older deeds remain queryable as superseded history. Who fills: Tenant-admin, once at onboarding. Edits are rare (deed amendment, court-ordered correction) and are always two-key.

Field Type Required Options / Validation Default Help
Registered Trust Name Text (255) Yes Free text; min 3 chars — As it appears in the Trust Deed (e.g. Sri Datta Gnana Bodha Sabha)
Deed Number Text (127) Yes Free text; alphanumeric + slashes — Document/Deed/Registration number assigned by the Sub-Registrar
Registration Date Date Yes Past date only; not after today — Date the deed was registered
Registering Authority Text (255) No — — e.g. Sub-Registrar, Mysuru District
Place of Registration Text (127) No — — City / district where registration was effected
Sub-Registrar Office Text (255) No — — Specific SRO branch — useful for record retrieval
Trust Type Dropdown Yes Public Charitable / Religious / Public Religious / Section 8 Company / Specific Endowment / Other Public Religious Statutory classification — drives downstream compliance defaults
Parampara Text (127) No — inherited from organisations.parampara Lineage tradition (e.g. Sringeri Sharada)
Sampradaya Text (127) No — inherited from organisations.sampradaya Doctrinal school (e.g. Smarta, Sri Vaishnava)
Custody Pointer FK (Document Custody) No Link to existing custody record holding the original — Where the physical original is kept
Notes Textarea No — — Any context — e.g. "founding trustees deceased; new board sworn 2018"
Reason Textarea Yes (on edit) min 20 chars — Required for every edit; visible to cosigner

Submit action: Creates trust_registrations row with is_active=true. On edit, routes through two-key (audit coverage marks update and delete as two-key for this entity). A successful cosign deactivates the prior row by setting superseded_by_id and superseded_reason. Related forms: Document Custody Locator (1.2 of Sub-module 4) is usually created first so the deed can point to it; Tax Registration entries (Sub-module 2) follow.

(Workflow note: First-time tenant onboarding goes Custody first → Trust Registration → Tax Registrations → Certificates → Loans → Acquisitions. Once active, the Trust Registration card sits read-only on the module landing page; the only edit path is via a deed amendment, which creates a new row referencing the prior via superseded_by_id.)


Sub-module 2: Tax Registrations

Form 2.1 — Tax Registration Entry (12A · 80G · FCRA · PAN · TAN · GSTIN · PT)

Purpose: Records each tax-side statutory registration the trust holds. One unified form with a kind selector that progressively reveals kind-specific extras (FCRA bank fields, GSTIN state code, etc.). Who fills: Tenant-admin. Once per registration; renewal goes via Form 2.2.

Field Type Required Options / Validation Default Help
Kind Dropdown Yes 12A / 80G / FCRA / PAN / TAN / GSTIN / PT (Professional Tax) / Other — Drives validation and which extra fields appear
Certificate Number Text (127) Yes Format-checked per kind: PAN = [A-Z]{5}\d{4}[A-Z]; TAN = [A-Z]{4}\d{5}[A-Z]; GSTIN = 15-char regex; FCRA = 9 digits — The number printed on the certificate
Issued On Date No Past date only — Date of issue. Leave blank for perpetual registrations where unknown
Expires On Date No After Issued On if both set — Leave blank for perpetual (PAN, TAN). 12A/80G/FCRA = 5 years; FSSAI tied here too if PT renewable
Issuing Authority Text (255) No — — e.g. Commissioner of Income Tax (Exemption), Bengaluru
Jurisdiction Text (127) No — central for FCRA/PAN/TAN; state for PT/GSTIN Helps filtering reports
Is Active Toggle Yes true / false true Set false only when explicitly superseded
(if FCRA) FCRA Bank Account Number Text (40) Yes when kind=FCRA Numeric; FCRA mandates SBI Main Branch, New Delhi from 2020 — The dedicated FCRA bank account
(if FCRA) FCRA Bank Name Text (127) Yes when kind=FCRA — State Bank of India Should always be SBI Main NDMB post-2020
(if FCRA) FCRA Branch Address Text (511) No — New Delhi Main Branch, Sansad Marg Full branch address as on the FCRA portal
(if GSTIN) GST State Code Text (4) Yes when kind=GSTIN First two digits of GSTIN; numeric 01-37 — Auto-extracted from GSTIN if possible
(if GSTIN) GST Filing Frequency Dropdown Yes when kind=GSTIN monthly / quarterly monthly Determines whether GSTR-1/3B obligations materialise monthly or quarterly
Custody Pointer FK (Document Custody) No — — Where the original certificate is held
Notes Textarea No — — Any quirks — e.g. "renewal in process; ack number XYZ"
Reason Textarea Yes on edit min 20 chars — For two-key cosign

Submit action: Creates tax_registrations row. Tenant-scoped uniqueness on (kind, certificate_number). On creation, the Compliance module's materialise_obligations_for_tenant is invoked so applicable obligations (e.g. FC-4 for new FCRA, GSTR-3B for new GSTIN) get seeded automatically. Related forms: Form 2.2 (Renewal) creates a successor row; Compliance Renewal Calendar Entry (compliance Form 3.1) auto-materialises if expires_on is set.

Form 2.2 — Tax Registration Renewal

Purpose: Captures a renewed certificate (typically 12A / 80G / FCRA on 5-year cycles) without losing the prior row's history. Who fills: Tenant-admin, when a renewal is issued.

Field Type Required Options / Validation Default Help
Replaces (Old Registration) FK (Tax Registration) Yes Must be an existing is_active=true row of same kind auto-selected from context The certificate being renewed
New Certificate Number Text (127) Yes Format per kind — The new number on the renewed certificate
New Issued On Date Yes Past or today; not before old issued_on today Date of renewal issuance
New Expires On Date Yes for renewable kinds After New Issued On New Issued On + 5 years Auto-suggested per kind cycle
New Issuing Authority Text (255) No — copied from old row Often unchanged across renewals
New Custody Pointer FK (Document Custody) No — — Where the new original is held; usually the same custody record gets updated
Reason Textarea Yes min 20 chars "Renewal of [kind] for [period]" Cosign-visible

Submit action: Creates a new tax_registrations row with replaces_id linking back to old row; flips old row to is_active=false. Closes the corresponding RenewalCalendar entry if one exists. Two-key. Related forms: Closes Compliance Renewal Calendar Entry (Form 3.x).


Sub-module 3: Statutory Certificates

Form 3.1 — Certificate Entry (Fire-Safety · FSSAI · PT · Lift · Pollution · Building Plan)

Purpose: Captures non-tax statutory certificates that authorise the institution to operate. Often per-branch (fire safety per ashrama building, FSSAI per kitchen). Who fills: Tenant-admin or branch-admin (only for own branch). Each certificate, once.

Field Type Required Options / Validation Default Help
Kind Dropdown Yes fire-safety / fssai / professional-tax / pollution-noc / environmental / building-plan / lift-safety / lightning-arrester / noc / other — What kind of certificate
Title Text (255) Yes min 5 chars — Free-text label e.g. Fire NOC — Mysuru Ashrama Main Block
Certificate Number Text (127) No — — Some certificates (Pollution NOC) lack numbers; allow blank
Issuing Authority Text (255) No — — e.g. Karnataka State Fire & Emergency Services
Issued On Date No Past or today — Date of issue
Expires On Date Yes for renewable kinds After Issued On Issued On + 1 year (FSSAI: 1y/3y/5y per slab) Most certs are annual; FSSAI varies
Branch FK (Branches) No Tenant's branches inherited from logged-in branch context Leave blank only for tenant-level certs
Custody Pointer FK (Document Custody) No — — Where the original is held
Is Active Toggle Yes true / false true —
Notes Textarea No — — e.g. "conditional NOC — fire-extinguisher inspection due Q3"
Reason Textarea Yes on delete min 20 chars — Two-key on delete only

Submit action: Creates certificates row. Triggers compliance.plan_renewals if expires_on is set, materialising a RenewalCalendar entry. Audit-logged on every change; two-key only on delete (the assumption being that a certificate edit is correcting a typo, while a delete is removing a legal record). Related forms: Renewal flow mirrors Tax Registration Renewal (Form 2.2) but at /api/statutory/certificates/{id}/renew. Custody (4.1) usually pre-exists.

Form 3.2 — Certificate Renewal

Purpose: Records a renewed certificate, preserving the chain. Who fills: Tenant-admin or branch-admin (own branch).

Field Type Required Options / Validation Default Help
Replaces (Old Certificate) FK (Certificate) Yes Existing is_active=true of same kind & branch auto-selected The one being renewed
New Certificate Number Text (127) No — — New number if any
New Issued On Date Yes Past or today today —
New Expires On Date Yes After New Issued On per kind —
New Custody Pointer FK (Document Custody) No — inherits from old row —
Inspection Conditions Textarea No — — Any conditional clauses (common in fire NOC)
Reason Textarea Yes min 10 chars "Annual renewal" —

Submit action: Creates successor with replaces_id; deactivates old. Closes the matching RenewalCalendar entry. Related forms: Compliance Renewal Calendar Entry closes.


Sub-module 4: Document Custody

Form 4.1 — Document Custody Locator

Purpose: Records where the physical original of a legal document lives: which branch, which building, which room, which locker, which shelf. One custody record may anchor multiple legal documents (locker holds Trust Deed + 12A + 80G together). Who fills: Tenant-admin during onboarding; tenant-admin or designated archivist on changes.

Field Type Required Options / Validation Default Help
Title Text (255) Yes min 5 chars — Free-text label e.g. Trust Deed Original (1985) or Mysuru Ashrama Main Locker
Branch FK (Branches) No — logged-in branch Where the locker physically is
Building Code Text (20) No Asset Mgmt building masters: RSK / GK / BK / NM / OFC — Soft-validates against Asset Mgmt; warns if unknown but does not block
Room or Office Text (127) No — — e.g. Trustee Office, Strong Room
Locker ID Text (64) No — — e.g. SBI Locker A-117, Internal Safe-3
Shelf or Drawer Text (64) No — — Granular within the locker
Physical Location (free text) Text (511) No — — Fallback narrative if structured fields don't cover it
Custodian (User) FK (Users) No Active tenant users — Pick if the custodian has an Aayojana login
Custodian (Free Text Name) Text (255) No Required if Custodian (User) blank — For custodians not yet in Aayojana — e.g. Sri Ramanatha Bhattaru, Trustee
Is PII-Bearing Checkbox No — unchecked Tick if scan contains Aadhaar, bank account, signatures — triggers stricter download audit
Verification Cadence (months) Number No 1–60 12 How often a sight-verification is required
Last Verified On Date No Past or today — Auto-set by Verify-Now action
Next Verification Due Date No Auto-computed = Last Verified + Cadence auto Read-only when cadence and last-verified are set
Notes Textarea No — — Access instructions, locker keyholders, etc.
Reason Textarea Yes on locker / custodian change min 20 chars — Two-key triggers when locker_id or custodian_user_id changes

Submit action: Creates document_custody row. On edit, two-key only triggers if the changed columns include locker_id, custodian_user_id, or physical_location — moving an original is a legally significant event. Other field edits log passively. Related forms: Used as a custody pointer by Trust Registration (1.1), Tax Registration (2.1), Certificate (3.1), Bank Loan (5.1), Asset Acquisition (6.1), and Compliance Filing acknowledgement scans.

Form 4.2 — Custody Verification (Verify-Now)

Purpose: Record a periodic sight-check that the physical original is still where the custody record says it is. Who fills: Custodian, archivist, or tenant-admin — typically annually.

Field Type Required Options / Validation Default Help
Custody Record FK (Document Custody) Yes — from page context —
Verifier (User) FK (Users) Yes Logged-in user (locked) current user Cannot verify on behalf of another
Verified On Date Yes Today only today Cannot back-date a verification
Cadence Months Number No 1–60 inherits from custody row Bumps next-due
Sight-Check Outcome Dropdown Yes Original sighted intact / Original sighted with damage / Original NOT found Original sighted intact If "NOT found", flags suspicious activity for audit review
Notes Textarea No — — Damage description, missing-item context

Submit action: Updates custody row's last_verified_on=today, last_verified_by_user_id=verifier, next_verification_due=today + cadence. If outcome is "NOT found", emits a high-priority AuditEvent and dispatches an alert to all tenant-admins. Related forms: Surfaces back into the Custody-Verification-Overdue dashboard.

Form 4.3 — Document Scan Upload

Purpose: Attach a soft-copy PDF/image to a custody record, with content hash for tamper detection. Who fills: Tenant-admin; sometimes module-admin with explicit grant.

Field Type Required Options / Validation Default Help
Custody Record FK (Document Custody) Yes — from page context —
File File upload Yes PDF, JPG, PNG, TIFF; max 25 MB; multi-page must be merged into single PDF — Hard cap at 25 MB
Document Type Hint Dropdown No Trust Deed / Tax Cert / Renewal Ack / Sale Deed / Certificate / Other — Used for filename templating in GCS
Page Count Number No Auto-extracted auto Read-only after upload
Is PII-Bearing Checkbox No — inherits from custody row If new scan reveals PII not previously marked, tick to upgrade
Notes Textarea No — — e.g. "scan post-restoration; original water-damaged"
Reason (if replacing existing scan) Textarea Conditional min 20 chars when replacing — Two-key when overwriting an existing scan

Submit action: Streams file to GCS at gs://aayojana-statutory/{tenant_id}/{custody_id}/{sha256}.{ext}. Computes SHA-256, stores scan_gcs_path, scan_sha256, scan_uploaded_at, scan_size_bytes on the custody row. Audit-logs the upload. Related forms: Available from any Statutory detail page that has a custody pointer.


Sub-module 5: Bank Loans

Form 5.1 — Bank Loan Record

Purpose: Captures the legal record of a loan agreement — distinct from Vitta's payable ledger which tracks balance and EMI postings. This form holds the deed-level facts: lender, principal, security pledged. Who fills: Tenant-admin only. Always two-key (create, update, and delete).

Field Type Required Options / Validation Default Help
Lender Name Text (255) Yes — — e.g. State Bank of India
Lender Branch Text (255) No — — Specific branch that holds the agreement
Loan Account Number Text (64) Yes — — As assigned by the lender
Loan Kind Dropdown Yes building / vehicle / working-capital / equipment / mortgage / other — Drives downstream reporting
Purpose Textarea No — — What the funds are for — e.g. Construction of Annadana Hall, Mysuru Ashrama
Principal Amount (INR) Decimal Yes > 0; up to 18 digits with 2 decimals — Sanctioned principal
Interest Rate (%) Decimal No 0 – 100; 4 decimals — Annualised rate
Interest Type Dropdown No fixed / floating fixed —
Tenure (months) Number No 1 – 360 — —
EMI Amount (INR) Decimal No ≥ 0 auto-calc if principal/rate/tenure all set —
EMI Due Day Number No 1–31 — Day of month EMI is debited
Sanctioned On Date No Past or today — —
Disbursed On Date No After Sanctioned On — —
First EMI On Date No After Disbursed On — —
Status Dropdown Yes sanctioned / active / restructured / closed / defaulted active —
Security Kind Dropdown No mortgage-property / hypothecation / pledge / unsecured / guarantee — What backs the loan
Security Description Textarea No — — Free-text: which property, what value, etc.
Linked Asset Acquisition FK (Asset Acquisition Records) No — — If a specific land/building is the mortgaged security
Custody Pointer FK (Document Custody) No — — Where the loan agreement original is filed
Notes Textarea No — — —
Reason Textarea Yes min 20 chars — Two-key on every create/update/delete

Submit action: Routes through submit_two_key_change; creates PendingWrite. On cosign, the bank_loans row is created. Vitta is notified via service-layer hook so it can pre-populate the loan ledger. Related forms: Bank Loan Closure (5.2); Asset Acquisition Record (6.1) is often referenced for security.

Form 5.2 — Bank Loan Closure

Purpose: Records that a loan has been fully repaid and the mortgage/hypothecation released. Who fills: Tenant-admin. Two-key.

Field Type Required Options / Validation Default Help
Loan Record FK (Bank Loan) Yes Loans with status='active' from page context —
Closed On Date Yes Past or today; ≥ first EMI date today Date of final payment / closure letter
Closure Letter Custody FK (Document Custody) No — — Where the no-dues letter is filed
Security Released Checkbox Yes — unchecked Confirm mortgage discharge / lien release
Closure Reason Textarea Yes min 30 chars — "Loan fully repaid" / "Restructured into new account #X" / etc.

Submit action: Two-key. On cosign, sets status='closed', closed_on. Audit-logs the closure with the reason text. Related forms: None downstream; Vitta updates its own loan ledger separately.


Sub-module 6: Asset Acquisitions (Chain of Title)

Form 6.1 — Asset Acquisition Record

Purpose: Captures the legal record of how an asset entered the trust — sale deed, gift deed, dedication, court order, allotment. Distinct from the operational asset register: this table is the chain-of-title. Who fills: Tenant-admin only. Always two-key (create, update, delete).

Field Type Required Options / Validation Default Help
Asset Kind Dropdown Yes land / building / vehicle / movable / mixed land Drives which extra fields appear
Title Text (255) Yes min 5 chars — Human label — e.g. Sy. No. 234/2 Mysuru — 2.5 acres
Acquisition Mode Dropdown Yes purchase / gift / dedication / inheritance / court-order / lease / allotment / exchange purchase How the asset was acquired
Acquired On Date No Past only — Date of transfer
Transferor Name Text (255) No — — Vendor / donor / dedicator name
Transferor Address Textarea No — — —
(if land) Survey Number Text (127) Yes when asset_kind=land Free-text (state-specific format) — e.g. 234/2A (Karnataka), S.F. No. 234/2 (Tamil Nadu)
(if land) Extent (Acres) Decimal No > 0; 6 decimals — Numeric area
(if land) Extent Description Text (255) No — — e.g. Wet 2.10 ac + Dry 1.50 ac
(if land) Nature of Land Dropdown No Agricultural / Converted Non-Agri / Garden (Thota) / Wet / Dry / Inam / Devasthanam Agricultural —
(if land) Village or Locality Text (255) No — — —
(if land) Taluk Text (127) No — — —
(if land) District Text (127) No — — —
(if land) State Text (127) No — — —
Consideration Amount (INR) Decimal No ≥ 0 — Sale price; 0 for gifts/dedications
Stamp Duty Paid (INR) Decimal No ≥ 0 — —
Registration Fee Paid (INR) Decimal No ≥ 0 — —
Registration Office (SRO) Text (255) No — — Sub-Registrar Office
Deed Book Number Text (64) No — — —
Deed Volume Text (40) No — — —
Deed Page Text (40) No — — —
Deed Serial Number Text (40) No — — —
Deed Date Date No Past only — Date of registration
(if land) Mutation Status Dropdown No pending / in-process / mutated / objection / na mutated RTC / khata mutation status
(if land) Mutation Date Date No After Acquired On — —
(if land) Last EC On Date No Past or today — Encumbrance Certificate last fetched
(if land) Next EC Due Date No After Last EC Last EC + 12 months —
Operational Asset Ref Text (64) No — — Soft FK to Asset Mgmt module's lands/buildings/vehicles record
Custody Pointer FK (Document Custody) No — — Where the deed original is held
Notes Textarea No — — —
Reason Textarea Yes min 30 chars — Two-key on every create/update/delete

Submit action: Two-key. On cosign, creates asset_acquisition_records row. If operational_asset_ref is set, the Asset Management module gets a notification to link back. Compliance auto-schedules an EC-renewal entry if next_ec_due is set. Related forms: Link Document Append (6.2) for adding prior 30-year deeds; Bank Loan (5.1) may reference this as security.

Purpose: Adds an entry to the chain of prior deeds for a land record — typically required to demonstrate clear title back 30 years for due-diligence purposes. Who fills: Tenant-admin or designated land-records officer. Audit-logged but NOT two-key (it's an append; the parent acquisition record is the legal anchor).

Field Type Required Options / Validation Default Help
Acquisition Record FK (Asset Acquisition) Yes Land-kind only from page context The parent acquisition
Deed Reference Text (127) Yes — — e.g. SRO Mysuru Doc 1234/1995
Year Number Yes 1900 – current year — —
Counterparties (free text) Text (511) No — — "From X to Y" narrative
Custody Pointer FK (Document Custody) No — — Where this prior deed copy is filed
Notes Textarea No — — —

Submit action: Appends a JSON object to the parent's link_document_chain array. Audit-logged. Related forms: Surfaces in the 30-year link-document timeline UI on the Acquisition detail page.


Sub-module 7: Cross-cutting Dashboards & Bulk Tools

Form 7.1 — Expiring-Soon Watchlist Filter

Purpose: Configures the cross-table "what's expiring" dashboard — a read-only filter form, but worth specifying because it's the daily entry point for compliance work. Who fills: Anyone with module-admin or higher. Used continuously.

Field Type Required Options / Validation Default Help
Within (days) Number Yes 7 / 30 / 60 / 90 / 180 / 365 90 How far ahead to look
Include Tax Registrations Checkbox No — checked —
Include Certificates Checkbox No — checked —
Include Custody Verifications Overdue Checkbox No — checked —
Filter by Branch FK (Branches) No Multi-select all —
Filter by Kind Multi-select No All kinds across tax + certificate domains all —
Sort By Dropdown Yes Soonest first / Latest first / By kind / By branch Soonest first —

Submit action: Reloads the dashboard with filtered rows (no DB write). Related forms: Each row deep-links to the relevant entity's detail page.


(Module-wide workflow note: Statutory forms cluster around three life-events — onboarding (1.1 → 4.1 → all the way through 6.1), recurring upkeep (4.2, 7.1 daily checks; 2.2 / 3.2 on renewals), and exception handling (5.2 closures, 6.2 historical link-doc append). Every legal-weight write produces a PendingWrite that surfaces in the Audit Trail's /audit/pending queue — see audit forms for the cosigner-side flow. Statutory feeds Compliance: every expires_on on a tax registration or certificate is what generates Compliance's renewal calendar entries via the daily cron_plan job.)