Spyrl — Business Requirements Document (BRD)
Version: 1.0 · Date: 2026-10-31 · Status: Draft for founder review
Related: summary.md · prd.md · project-plan.md · architecture.md · research/spryple-analysis.md · CONVENTIONS.md
Labels follow CONVENTIONS.md: [Observed] = documented in the Spryple Help Center (cited by role page or SP- finding ID), [Observed-SS] = seen in a Help Center screenshot (research §21), [Inferred] = follows from documented behaviour, [Proposed] = our decision. D1–D16 are research documentation defects (§17), and "gap §N" points to a research section. All statutory rates and thresholds are examples to verify. Values in italics are tenant-configurable defaults.
1. Document control
| Item | Value |
|---|
| Owner | Product (founding PM) |
| Approvers | Founders (business), Engineering lead (feasibility), compliance/legal adviser (§9, §14) |
| Consumers | prd.md turns BR- items into FR-/NFR-/US-; project-plan.md turns them into epics and risks; architecture.md takes the operational drivers |
| Precedence | CONVENTIONS.md wins on names, codes, roles and release scope. This BRD wins on business intent and rules. The PRD wins on functional detail. |
| Change control | Any change to the meaning, priority or release of an ID needs a decision-log entry. IDs are never reused; a retired ID is marked Withdrawn. |
| Version | Date | Change |
|---|
| 0.1 | 2026-10-31 | Skeleton from research baseline v1.0 |
| 1.0 | 2026-10-31 | Full draft: 10 BOs, 125 BRs, 94 rules, 8 workflows |
2. Business objectives
Targets run from R1 GA unless a row says otherwise. RPT and the platform console produce every KPI (architecture.md §15).
| ID | Objective | KPI → target |
|---|
| BO-01 | Fast, low-touch go-live, so price-sensitive SMEs can be served profitably | Trial provisioned in ≤ 2 min · median days from order to first live payroll: ≤ 21 (Standard/Professional), ≤ 45 (Enterprise) · implementation effort ≤ 16 staff-hours for a tenant with ≤ 200 employees |
| BO-02 | Accurate, on-time payroll | ≤ 0.1% of payslips corrected after lock · attendance lock → payslips published in ≤ 1 business day (≤ 500 employees) · 100% of runs finished before the tenant's pay date |
| BO-03 | Adoption | ≥ 70% of employees active monthly on ESS by month 3 after go-live · ≥ 95% of leave/attendance requests raised digitally · median approval time ≤ 24 h |
| BO-04 | Healthy unit economics | Gross margin ≥ 75% on pooled tenants by month 12 and ≥ 60% on dedicated tenants · platform cost ≤ ₹8 per billed employee per month · CAC payback ≤ 12 months |
| BO-05 | Serve many clients with a small team | Zero tenant-specific code branches · ≤ 2 support tickets per 100 billed employees per month · zero S1 incidents in the payroll window per quarter · ≥ 95% of pooled tenants on the latest version within 7 days of a release |
| BO-06 | Statutory compliance | ≥ 98% of statutory files accepted on first upload · statutory pack published ≥ 7 days before the effective date (≤ 5 business days after notification if the change is retrospective) · zero penalties caused by Spyrl |
| BO-07 | Growth | 150 paying tenants and 25,000 billed employees by GA + 18 months · trial-to-paid conversion ≥ 20% |
| BO-08 | Retention | Monthly logo churn ≤ 1.5% · net revenue retention ≥ 105% · admin NPS ≥ 40 |
| BO-09 | Trust with personal data | Zero cross-tenant exposures · 100% of face/GPS processing backed by a consent record · data-principal requests closed in ≤ 15 days (internal target) |
| BO-10 | Productive, fairly reimbursed field teams (R3) | Median travel-to-reimbursement ≤ 10 days · ≥ 90% of visits geo-verified · ≤ 5% of km revisions disputed |
3. Problem statement and context
3.1 Indian SME pain points
| # | Pain point | Consequence today |
|---|
| P1 | Payroll compliance is fragmented: EPF, ESI, state PT and LWF, TDS, gratuity, bonus and minimum wages each have their own ceilings, slabs, dates and file formats. The Labour Codes and the Income-tax Act, 2025 are now changing them too. | Spreadsheets, Tally and a consultant; late filings; rework every month |
| P2 | Attendance is diverse: biometric devices, night and rotating shifts, field staff, branches with different holidays | Reconciling punches to payable days by hand; LOP disputes |
| P3 | HR maturity is low: no HRIS admin, and policies live in people's heads | Inconsistent decisions; no audit trail |
| P4 | The workforce is mobile-first, often on low-end Android phones | Leave requests on paper or WhatsApp; HR asked for payslips |
| P5 | Field staff are hard to supervise and reimburse fairly | Fake visits, padded km, slow claims |
| P6 | SMEs are price-sensitive and churn when cost or effort rises | Tools abandoned after a painful setup |
| P7 | DPDP Act 2023 and its Rules cover employee, biometric and location data | Unclear consent and retention; risk from tracking apps |
3.2 Why we are not cloning Spryple
Spryple proves there is a market, and it proves the attendance → leave → payroll chain [Observed] (research §1, §16). Its depth on Indian rules is worth matching: sandwich leave, lates-to-leave, extra days, week-off penalties and split payroll/leave windows. We never copy its UI, text or assets. Several of its design choices are ones we reject:
| Spryple behaviour | Evidence | Our position and why |
|---|
| Policy changes apply only to new employees | [Observed] SP-X-08, SP-LVE-07 | Disagree. Payroll becomes unexplainable. We use effective-dated policies instead (RULE-ORG-04). |
| The same rule lives in two places (probation, notice, lates, default shift) | [Observed] D4, D5 | Disagree. Each rule gets one home (RULE-ORG-05). |
| Default password "Welcome1!", emailed in plain text | [Observed] SP-IAM-01; [Observed-SS] §21.2 | Disagree. This is a security defect. We use invite links (RULE-IAM-01). |
| Ten fixed leave types; maternity/paternity/wedding eligibility set by gender and marital status | [Observed] SP-LVE-02, SP-LVE-04 | Disagree. Maternity benefit does not depend on marriage. We provide a type builder with inclusive eligibility (RULE-LVE-11). |
| Pay group chosen by CTC range | [Observed] SP-PAY-05 | Disagree. Salary band and structure are different things. Structures are assigned explicitly (RULE-PAY-17). |
| TDS typed in by hand; IT Declaration and Form 16 menus exist but are undocumented | [Observed] SP-PAY-16; [Observed-SS] §21.5 | Extend. A TDS engine ships in R1 (BR-PAY-04). |
| Statutory "reports"; a PDF for the bank | [Observed] SP-PAY-13, SP-PAY-15 | Extend. We produce portal-ready files and bank transfer files. |
| No F&F, letters, payroll lock or off-cycle runs | Gaps in §7.3, §8 and §18 | Add. Must-have in R1/R2. |
| Four mobile apps; Lite sold as a separate product | [Observed] research §15, D10 | Disagree. One app; Lite becomes a plan. |
| GPS with no documented consent, hours limit or retention; the store listing says "No data collected" yet also "Shares location" | [Observed] research §11; [Observed-SS] §21.1 | Disagree. Tracking is consent-based, limited to work hours and retention-bound (RULE-FFM-01..03). |
| Shift swaps happen without the counterpart's consent | [Observed] SP-ATT-09 | Change. The counterpart accepts first (RULE-ATT-15). |
4. Scope by release
| Release | Theme | In scope | Business outcome |
|---|
| R0 | Foundations | PLT (provisioning, plans, flags, support access, console), IAM, ORG, NTF core, audit | Tenants can be created, configured, secured and operated |
| R1 — MVP | Attend-to-Pay | EMP, ATT, LVE, PAY (EPF, ESI, PT, LWF, TDS with IT declarations, ECR/ESI/PT files, bank files), RPT standard, MOB (ESS + MSS), PLT billing | A Standard-plan SME replaces its spreadsheets |
| R2 | Full HR lifecycle | CLM, EXT + F&F, ENG, kiosk + face, biometric gateway, Form 16/24Q, public API/webhooks, first dedicated cell | Professional and Enterprise plans can be sold |
| R3 | Field & projects | FFM, TSM | Field Force and Timesheet add-ons |
| R4 | Learning & scale | LMS, advanced analytics, dedicated-cell automation, ERP integrations | Enterprise expansion; lower ops cost |
Out of scope for R0–R4:
- Recruitment/ATS
- Performance management
- Surveys
- Asset management (listed in Spryple's footer [Observed-SS] §21.1)
- Employee helpdesk
- On-premise installs
- Non-India payroll and multi-currency
- Automated filing on government portals (the client uploads the files we generate)
- Timesheet invoicing
- CRM quotes, orders and inventory
- Per-client code
5. Stakeholders
5.1 Register
| Stakeholder | Interest | Influence |
|---|
| Internal | | |
| Founders | Viability, margin, positioning | Very high: approve the BRD, pricing and release gates |
| Product | Scope, rules, roadmap; owns the statutory-pack content process | High |
Engineering (platform_admin, release_manager) | Feasibility, reliability, isolation, payroll engine correctness | High |
| Implementation / Customer Success | Go-live speed, adoption, renewals | High |
Support (support_engineer) | Ticket volume, clarity of rules | Medium |
| Sales | Plans, trials, Enterprise scoping | Medium |
Finance (billing_admin) | Billing, GST invoices, collections | Medium |
| Legal / compliance adviser | DPDP, labour and tax law, contracts | High on §9 and §14 |
| External | | |
Client owner (org_owner) | Cost, compliance, control | Very high (buyer) |
Client HR (hr_admin, hr_manager) | Less admin, fewer disputes | High (champion) |
Client finance/payroll (finance_admin, payroll_manager) | Correct pay, files on time | High |
Line managers (line_manager, sales_manager) | Fast approvals, team visibility | Medium |
Employees, field executives (employee, field_executive) | Correct pay, easy requests, privacy, battery life | Medium (drive adoption) |
Kiosk operators (kiosk_operator) | Fast front-desk check-in | Low |
Auditors (auditor) | Registers, evidence, audit trail | Medium |
| Statutory bodies (EPFO, ESIC, Income Tax Dept, state PT/LWF/labour departments) | Correct filings; they interact with us only through file formats and due dates | Indirect, high |
| Banks | Valid transfer files; later H2H APIs | Medium |
| Integration partners (biometric vendors, SMS/WhatsApp BSPs, maps, face provider, Razorpay, Tally/Zoho) | Correct API use; they are listed as sub-processors | Medium |
5.2 RACI: Spyrl internal
| Activity | Founders | Product | Eng | Impl/CS | Support | Sales | Finance | Legal |
|---|
| Scope and roadmap | A | R | C | C | I | C | I | C |
| Statutory pack content | I | A | R | I | I | – | C | R |
| Payroll engine correctness | I | C | A/R | C | I | – | – | – |
| Pricing and plans | A | R | C | C | – | R | R | C |
| Tenant implementation | I | C | C | A/R | C | I | I | – |
| Billing and dunning | I | C | C | I | I | I | A/R | C |
| DPDP, DPA, sub-processors | A | C | R | I | I | I | – | R |
| Releases and payroll freeze | I | C | A/R | I | I | – | – | – |
| Incidents and client comms | I | I | A/R | C | R | I | – | C |
| L1/L2 support | – | C | C | C | A/R | – | – | – |
| Contracts and SLAs | A | C | C | C | – | R | C | R |
5.3 RACI: client side (per tenant)
| Activity | org_owner | hr_admin | hr_manager | finance_admin | payroll_manager | line_manager | employee | Spyrl CS |
|---|
| Masters and policies | A | R | C | C | C | – | – | C |
| Employee data accuracy | A | C | R | – | C | C | R (own) | I |
| Approvals before cut-off | I | – | A | – | I | R | R | – |
| Pay structures, statutory setup | A | – | – | R | C | – | – | C |
| Payroll approval and payment | A | – | I | R | R | – | I | – |
| Statutory upload and deposit | A | – | – | R | R | – | – | I |
| Privacy notices and consents | A | R | R | – | – | I | R | C |
| Go-live sign-off | A | R | C | R | R | – | – | R |
The client is the employer and the Data Fiduciary. Spyrl computes and generates files. It does not file returns or pay dues for the client.
6. User types and roles
A role is a set of permissions plus a data scope (CONVENTIONS.md §4). Tenants can clone the seeded roles [Proposed]. Spryple's own role model is undocumented: its "Roles & Permissions" page copies "Users Login" [Observed] D1.
| Role key | Responsibilities | Data scope | MFA |
|---|
org_owner | Subscription, role assignment, optional final payroll approval | ORG | Required |
hr_admin | Masters, policies, roles, templates, calendars, imports | ORG | Required |
hr_manager | Hires, documents, checklists, exceptions, attendance lock, separations | ORG or LOCATION | Optional |
finance_admin | Salary structures, statutory registrations, payroll policies, run approval, F&F approval | ORG | Required |
payroll_manager | Compensation, inputs, runs, files, declaration review, claim final approval, advances | ORG or LOCATION | Required |
line_manager | Approves attendance, leave, OT and timesheets; verifies claims; raises on-behalf requests; manages rosters | TEAM | Optional |
sales_admin | CRM masters: stages, activity and associate types, territories | ORG | Optional |
sales_manager | Team map, pipeline, visit and travel verification, device approvals | TEAM or LOCATION | Optional |
employee | Own profile, punches, requests, payslips, declarations, claims, consents | SELF | Optional |
field_executive | Everything an employee does, plus tracked punches, visits, clients and collections | SELF | Optional |
kiosk_operator | Front-desk punches at one location; nothing else | LOCATION (punch-only) | Device-enrolled |
instructor | Own courses, assessments, completion reports | Own courses | Optional |
auditor | Read-only registers, reports and audit log | ORG (read) | Required |
Platform roles [Proposed]: platform_admin, support_engineer, billing_admin and release_manager. None has standing access to tenant data (RULE-IAM-05). Statutory bodies, banks and partners hold no Spyrl roles.
7. Business workflows
7.1 Hire-to-retire
| # | Step | Actor | Rule / output |
|---|
| 1–2 | Create the new hire; the system sends a pre-joining link | hr_manager, System | RULE-EMP-01, RULE-EMP-02 |
| 3 | Candidate submits personal, family, education, bank and documents, and accepts the privacy notice | Candidate | Submission |
| 4 | Each document is approved or rejected with a reason | hr_manager | RULE-EMP-03 |
| 5 | Joining is confirmed: location, job, manager; policies attach by applicability | hr_manager | ID issued (RULE-ORG-01) |
| 6 | Structure and CTC assigned from the joining date | payroll_manager | RULE-PAY-17 |
| 7 | Employee accepts the invite, sets a password and binds a device | employee | RULE-IAM-01, RULE-IAM-03 |
| 8 | Checklist items closed by their owners; induction held | Item owners | RULE-EMP-04 |
| 9 | Probation confirmed, extended or ended | line_manager → hr_manager | RULE-EMP-06 |
| 10 | Effective-dated transfers, promotions and pay revisions | hr_manager, payroll_manager | RULE-EMP-07 |
7.2 Attend-to-pay (monthly cycle)
Example calendar: attendance window from the 26th to the 25th, payroll period = calendar month, pay on the last working day. Spryple supports split windows [Observed] SP-PAY-04.
| # | Step | Actor | Rule / output |
|---|
| 1 | Punch by mobile (selfie + geo-fence), web, biometric import or kiosk | employee, field_executive, kiosk_operator | RULE-ATT-12..14 |
| 2 | Day status, lates, OT, extra days and penalties computed | System | RULE-ATT-01..11 |
| 3 | Leave, regularization, permission, OT and on-duty requests raised and approved | employee, line_manager | RULE-NTF-01..04 |
| 4 | Reminders sent; exceptions resolved | System, hr_manager | Exception list cleared |
| 5 | Attendance window locked | hr_manager | RULE-ATT-16 |
| 6 | Variable pay, one-time items and arrears entered; declarations verified; approved claims and advances pulled in | payroll_manager | RULE-PAY-11, RULE-PAY-12, RULE-PAY-18 |
| 7–8 | Run calculated; validations and variance checked | payroll_manager, System | RULE-PAY-01..10, RULE-PAY-14 |
| 9 | Run approved by someone who did not edit the inputs | finance_admin or org_owner | RULE-IAM-04 |
| 10–11 | Run locked; payslips published; bank, ECR, ESI, PT, LWF and TDS outputs generated | payroll_manager | RULE-PAY-13 |
| 12 | Bank file uploaded and run marked Paid; client uploads statutory files and deposits dues | payroll_manager (portals sit outside Spyrl) | Filing tracker |
7.3 Leave lifecycle
| # | Step | Actor | Rule |
|---|
| 1 | Balances credited by frequency; joiners prorated | System | RULE-LVE-02, RULE-LVE-03 |
| 2 | Leave applied for (or raised on behalf); days counted, sandwich included | employee / line_manager | RULE-LVE-04, RULE-LVE-07, RULE-NTF-01 |
| 3 | Approved or rejected, multi-level where configured | line_manager, hr_manager | RULE-LVE-14 |
| 4 | Future leave cancelled through approval | employee → line_manager | RULE-LVE-09 |
| 5 | Day marked as leave; LOP flows to payroll | System | RULE-PAY-03 |
| 6 | Year end: carry forward, lapse or encash | System, hr_manager | RULE-LVE-05 |
7.4 Claim-to-reimburse (R2)
| # | Step | Actor | Rule |
|---|
| 1 | One or more bills submitted (category, number, date, amount, file); policy checked | employee | RULE-CLM-02, RULE-CLM-03 |
| 2 | Each bill accepted, reduced or rejected | line_manager | RULE-CLM-01 [Observed] research §9 |
| 3 | Verified claim approved | payroll_manager | RULE-CLM-01 |
| 4–5 | Paid in the next run or by an off-cycle bank file | System, payroll_manager | RULE-PAY-18 |
7.5 Separation and F&F (R2)
| # | Step | Actor | Rule |
|---|
| 1 | Resignation submitted, or termination raised with a category | employee / hr_manager | RULE-EXT-01, RULE-EXT-06 |
| 2–3 | Manager recommends; HR approves the LWD; notice shortfall computed or waived | line_manager, hr_manager | RULE-EXT-02 |
| 4 | IT, admin, finance and manager clearance items signed off | Item owners | RULE-EXT-05 |
| 5 | Access revoked at LWD; ex-employee access opens | System | RULE-EXT-07 |
| 6–7 | F&F computed as an off-cycle run, approved and paid | payroll_manager, finance_admin | RULE-EXT-03, RULE-EXT-04 |
| 8 | Relieving and experience letters issued | hr_manager | BR-EXT-05 |
7.6 Field visit to travel reimbursement (R3)
| # | Step | Actor | Rule |
|---|
| 1 | Beat or assignments planned | sales_manager | BR-FFM-06 |
| 2 | Punch in starts tracking (consent required) | field_executive | RULE-FFM-01, RULE-FFM-02 |
| 3 | Visit check-in geo-verified; activity and collection logged | field_executive | RULE-FFM-04 |
| 4 | Punch out; day summary of visits and km | System | RULE-FFM-05 |
| 5 | Travel verified; km revised with a reason | sales_manager | [Observed-SS] KM Revised §21.7 |
| 6–7 | Mileage claim enters CLM at Verified, is approved and paid | System, payroll_manager | RULE-CLM-04 |
Spryple keeps a separate travel path (Pending → Verified → Approved → Claimed) [Observed] research §9. We merge it into CLM so there is one reimbursement pipeline.
7.7 Timesheet cycle (R3)
| # | Step | Actor | Rule |
|---|
| 1 | Account, project, tasks and team set up | hr_admin / project line_manager | BR-TSM-01 |
| 2–3 | Hours entered in a weekly grid and submitted; defaulters reminded | employee, System | RULE-TSM-01, RULE-TSM-02 |
| 4–5 | Bulk approval; the week locks | line_manager | RULE-TSM-02 |
| 6 | Variance, bench and billable reports | line_manager, org_owner | RULE-TSM-02 |
7.8 Client (tenant) lifecycle
| # | Step | Actor | Rule |
|---|
| 1 | Sign-up; tenant provisioned with seeded data | Prospect or Sales; System | BR-PLT-01, RULE-PLT-04 |
| 2 | Owner activates, sets up MFA and runs the setup wizard | org_owner | BR-ORG-07 |
| 3 | Order placed; subscription created | Sales, billing_admin | BR-PLT-03 |
| 4–5 | Configuration, imports and devices; at least one parallel payroll run | Impl/CS, hr_admin, payroll_manager | §12.2 go-live gate |
| 6 | Go-live sign-off; metering starts | org_owner, Impl/CS | RULE-PLT-02 |
| 7 | Non-payment: grace period, then read-only | System, billing_admin | RULE-PLT-01 |
| 8 | Cancellation, full export, deletion certificate | org_owner, platform_admin | RULE-PLT-05 |
8. Business requirements
Each priority (MoSCoW) is relative to its target release. Functional detail is in prd.md.
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-PLT-01 | Self-serve trial provisions a seeded tenant (roles, leave templates, statutory pack, optional sample data) in ≤ 2 min | Must | R0 | BO-01; Spryple has a self-serve trial [Observed-SS] §21.1 |
| BR-PLT-02 | Plans and add-ons enable modules and set limits without code changes | Must | R0 | BO-05; Lite as a separate product [Observed] research §15 |
| BR-PLT-03 | PEPM subscription billing: metering, GST invoices, online payment, dunning, suspension | Must | R1 | BO-04; architecture.md §14 |
| BR-PLT-04 | Central console: tenant search, plan change, trial extension, suspend, usage and health scores, in-app announcements | Must | R0 | BO-05; Spryple exposes no platform layer [Inferred] |
| BR-PLT-05 | Dedicated deployment option (own DB, optionally own stack) for Enterprise, on the same release train; automated in R4 | Should | R2 | Isolation demand; architecture.md §3 |
| BR-PLT-06 | Support access is time-boxed, reason-coded, audited and visible to the tenant | Must | R0 | BO-09; security gap §18 |
| BR-PLT-07 | Versioned statutory packs (EPF/ESI ceilings, PT/LWF slabs, TDS slabs) published centrally with effective dates | Must | R1 | BO-06; Spryple shows PT slabs [Observed] SP-PAY-13, unversioned |
| BR-PLT-08 | Full tenant data export at any time; scheduled deletion with a certificate | Must | R1 | BO-09; DPDP |
| BR-PLT-09 | Branding (logo, colours, sender name); custom domain on Enterprise | Should | R1 (domain R2) | Spryple supports a logo [Observed] SP-ORG-05 |
| BR-PLT-10 | Rollout waves, maintenance windows, payroll-window freeze, per-tenant release notes | Must | R0 | BO-02, BO-05 |
| BR-PLT-11 | Enterprise sandbox tenant (copied configuration, masked data) | Could | R2 | Enterprise UAT |
8.2 ORG — Organisation & masters
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-ORG-01 | Company, locations (geo, PF code, ESI code per state, PT/LWF registration), departments, designations, grades, employment types | Must | R0 | [Observed] SP-ORG-01..04, SP-PAY-03; no grades in Spryple |
| BR-ORG-02 | Employee IDs per location prefix and sequence | Must | R1 | [Observed] SP-ORG-04 |
| BR-ORG-03 | Holiday calendars per location (public and optional) | Must | R1 | [Observed] SP-ORG-06 |
| BR-ORG-04 | Typed, versioned, effective-dated policies assigned by applicability | Must | R0 | Disagree with SP-X-07/08 [Observed]; D2–D5 |
| BR-ORG-05 | Reporting hierarchy, org chart, department–designation mapping | Should | R1 | [Observed] SP-ORG-07; org chart gap §4.5 |
| BR-ORG-06 | Custom fields on employee, client and claim, usable in reports and imports | Should | R2 | Config gap §18 |
| BR-ORG-07 | Setup wizard with a go-live readiness score | Must | R1 | BO-01; Spryple relies on its implementation team [Observed] (M: Attendance) |
| BR-ORG-08 | Several legal entities (PAN/TAN, PF/ESI codes) under one tenant | Should | R2 | Open question §20.8 |
| BR-ORG-09 | Master hygiene: unique names, active flag, deactivation blocked while in use, bulk reassignment | Must | R1 | [Observed] SP-X-01, SP-ORG-02 |
8.3 IAM — Identity & access
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-IAM-01 | Invite-link activation; no default or emailed passwords | Must | R0 | Disagree with SP-IAM-01 [Observed] |
| BR-IAM-02 | Role builder (permission × scope) with seeded templates | Must | R0 | D1 [Observed]; §20.1 |
| BR-IAM-03 | MFA for admin and payroll roles; OIDC SSO on Standard+; SAML on Enterprise | Must | R0 (SSO R1, SAML R2) | Security gap §18 |
| BR-IAM-04 | Mobile device binding, optional approval of new devices, remote sign-out | Must | R1 | [Observed] Device Approvals (M: CRM) |
| BR-IAM-05 | Append-only, exportable audit log of changes and sensitive reads | Must | R0 | Gap §4.5 |
| BR-IAM-06 | Masking of salary, bank, Aadhaar, PAN and biometric fields without a field permission | Must | R1 | Aadhaar on profiles [Observed-SS] §21.2 |
| BR-IAM-07 | Segregation of duties between compensation edits and payroll approval | Must | R1 | BO-02; lock gap §7.3 |
| BR-IAM-08 | Password floor that tenants can tighten; session list and revoke | Must | R0 | [Observed] HR Rules 1–9; D2 |
8.4 EMP — Core HR & onboarding
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-EMP-01 | New hire → self-service pre-joining → HR review → employee record | Must | R1 | [Observed] SP-EMP-04..06 |
| BR-EMP-02 | Document collection and approval with reasons, re-upload and expiry alerts | Must | R1 | [Observed] SP-EMP-08 |
| BR-EMP-03 | Onboarding and offboarding checklists with an owner per item | Must | R1 | [Observed] SP-EMP-07; [Observed-SS] §21.2 |
| BR-EMP-04 | Effective-dated job history (transfer, promotion, manager, employment type) | Must | R1 | Only a Contract/Promotions tab [Inferred] §4.5 |
| BR-EMP-05 | Bulk import with dry-run, error report and idempotent commit (employees, balances, YTD, bank) | Must | R1 | [Observed] SP-EMP-10, SP-ATT-14 |
| BR-EMP-06 | Profile self-service with approval for sensitive changes | Must | R1 | Rule 34 is a single toggle [Observed] SP-IAM-03 |
| BR-EMP-07 | Letter templates (offer, appointment, confirmation, revision, relieving, experience) | Should | R2 | Lifecycle gap §18 |
| BR-EMP-08 | Probation tracking and confirmation from one setting | Should | R1 | D4 [Observed] |
| BR-EMP-09 | Induction programmes | Could | R2 | [Observed] SP-EMP-09 |
8.5 ATT — Attendance & time
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-ATT-01 | Punch capture by mobile (selfie + geo-fence), web, biometric CSV/API and Excel; kiosk in R2 | Must | R1 | [Observed] SP-ATT-13, -14, -19, -20 |
| BR-ATT-02 | Shifts (night, flexible), rotations, week-off patterns, default shift | Must | R1 | [Observed] SP-ATT-01, -06..08 |
| BR-ATT-03 | One attendance policy for graces, thresholds, lates-to-leave, breaks, OT, extra days and penalties | Must | R1 | Rules scattered in Spryple [Observed] research §5.4 |
| BR-ATT-04 | Requests: WFH/on-duty/remote, regularization, permission, shift change and swap | Must | R1 | [Observed] SP-ATT-02, -09..12 |
| BR-ATT-05 | Deterministic day computation, re-run whenever an input changes in an open window | Must | R1 | [Inferred] research §5.3; [Observed-SS] §21.3 |
| BR-ATT-06 | OT policy covering eligibility, approval, caps, and pay vs comp-off | Must | R1 | OT is only "hours beyond shift" [Observed] SP-ATT-16 |
| BR-ATT-07 | Attendance lock tied to the payroll run | Must | R1 | Gap §5.4 |
| BR-ATT-08 | Several geo-fences per location; Wi-Fi/QR fallback | Should | R1 | Single radius per branch [Observed-SS] §21.3 |
| BR-ATT-09 | Biometric push gateway with device health monitoring | Should | R2 | §20.4 |
| BR-ATT-10 | Roster planner with coverage view | Could | R3 | Gap §5.4 |
8.6 LVE — Leave & holidays
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-LVE-01 | Leave-type builder with Indian templates and unlimited custom types | Must | R1 | Ten fixed types [Observed] SP-LVE-02 |
| BR-LVE-02 | Accrual: frequency, proration, carry-forward cap, lapse, encashment, advance leave | Must | R1 | [Observed] SP-LVE-03 |
| BR-LVE-03 | Sandwich rules per type, applied to each employee's own calendar | Must | R1 | [Observed] SP-LVE-01 |
| BR-LVE-04 | Comp-off earning, request, expiry and consumption | Must | R1 | [Observed] SP-LVE-03, -05 |
| BR-LVE-05 | Leave ledger and opening-balance import | Must | R1 | Gap §6.3 |
| BR-LVE-06 | Inclusive eligibility; maternity never depends on marital status | Must | R1 | Disagree with SP-LVE-04 [Observed] |
| BR-LVE-07 | Team calendar with conflict warnings | Should | R1 | Gap §6.3 |
| BR-LVE-08 | Optional holidays with an annual maximum | Must | R1 | [Observed] SP-LVE-01 |
| BR-LVE-09 | State statutory leave templates (Shops & Establishments, OSH Code) | Should | R2 | Gap §6.3 |
8.7 PAY — Payroll & statutory
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-PAY-01 | Salary-structure templates with formula components, kept separate from effective-dated compensation | Must | R1 | Disagree with SP-PAY-05 [Observed] |
| BR-PAY-02 | Run lifecycle with validations, variance report and immutable snapshots | Must | R1 | Gap §7.3; RSK-01 |
| BR-PAY-03 | EPF (with EDLI and admin charges), ESI (state codes), PT, LWF from statutory packs | Must | R1 | [Observed] SP-PAY-02, -03, -13; LWF missing §7.3 |
| BR-PAY-04 | TDS engine: both regimes, declarations, proofs, projection | Must | R1 | [Observed] SP-PAY-16; [Observed-SS] §21.5 |
| BR-PAY-05 | Portal-ready ECR, ESIC, PT and LWF files | Must | R1 | Spryple has "reports", not files [Inferred] §7.3 |
| BR-PAY-06 | Bank transfer files (generic and major-bank formats) and a bank-wise summary | Must | R1 | Spryple produces a PDF only [Observed] SP-PAY-15 |
| BR-PAY-07 | Payslips in ESS and as password-protected email PDFs | Must | R1 | [Observed] (E: Payroll) |
| BR-PAY-08 | Inputs: auto-arrears, variable pay, OT, extra days, penalties, one-time items | Must | R1 | [Observed] SP-PAY-09, -17 |
| BR-PAY-09 | Advance salary with recovery ledger; loans in R2 | Should | R1 | [Observed] research §7.1; D9 |
| BR-PAY-10 | Off-cycle runs (F&F, bonus, corrections) | Must | R2 | Gap §7.3 |
| BR-PAY-11 | Form 16 and 24Q data, or their Income-tax Act, 2025 successors | Must | R2 | Gap §18 |
| BR-PAY-12 | Payroll journal export (Tally XML, CSV); Zoho Books/ERP API integration in R4 | Should | R2 | Gap §18; CONVENTIONS.md §7 |
| BR-PAY-13 | Parallel-run comparison against legacy payroll | Must | R1 | BO-01, BO-02 |
| BR-PAY-14 | Variable DA from CPI notifications | Could | R2 | [Observed] SP-PAY-08 |
| BR-PAY-15 | Statutory bonus and minimum-wage checks | Should | R2 | Gap §7.3 |
| BR-PAY-16 | Gratuity and leave-encashment liability reports | Should | R2 | Gratuity shown as a deduction [Observed-SS] §21.5 |
| BR-PAY-17 | Two pay-schedule bases; separate attendance and payroll windows | Must | R1 | [Observed] SP-PAY-04; D6 |
8.8 NTF — Notifications & approvals
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-NTF-01 | One approval engine: levels, conditions, delegation, escalation | Must | R1 (2 levels + delegation) | [Observed] SP-X-03; §20.2 |
| BR-NTF-02 | On-behalf requests auto-approved and audited | Must | R1 | [Observed] SP-X-04 |
| BR-NTF-03 | In-app, email and push channels; metered SMS and WhatsApp | Must | R1 | [Observed] SP-X-09 |
| BR-NTF-04 | Unified approvals inbox on web and mobile with bulk actions | Must | R1 | Three entry points [Observed] SP-ATT-05 |
| BR-NTF-05 | Scheduled reminders (onboarding, regularization, declarations, cut-off, timesheets) | Must | R1 | [Observed] SP-EMP-03 |
| BR-NTF-06 | Tenant-editable templates with language bundles | Should | R1 | Messages Master [Observed] SP-X-02 |
8.9 RPT — Reporting
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-RPT-01 | Each report defined once and filtered by the viewer's scope | Must | R1 | Reports duplicated per role [Observed] research §14 |
| BR-RPT-02 | Persona dashboards | Must | R1 | [Observed] SA: Dashboard |
| BR-RPT-03 | Excel/CSV/PDF export that honours masking | Must | R1 | [Observed] SP-X-05 |
| BR-RPT-04 | Saved filters and scheduled email delivery | Should | R2 | Gap §14 |
| BR-RPT-05 | Custom report builder and trend analytics | Could | R4 | Gap §14 |
| BR-RPT-06 | Statutory registers in prescribed formats | Should | R2 | §14 |
8.10 MOB — Mobile & kiosk
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-MOB-01 | One Android + iOS app with role- and entitlement-based navigation | Must | R1 | Four apps [Observed] research §15; D10 |
| BR-MOB-02 | Offline punch queue with trusted time | Must | R1 | Gap §5.4 |
| BR-MOB-03 | Kiosk mode (location-scoped, punch-only) with face verification and liveness | Should | R2 | [Observed] SP-ATT-19; no liveness [Observed-SS] §21.3 |
| BR-MOB-04 | Runs on low-end Android and weak networks; Indian languages later | Should | R1 (languages R3) | P4 |
| BR-MOB-05 | Company-code login, then PIN/biometric unlock on the bound device | Must | R1 | [Observed] SP-X-10 |
8.11 CLM — Claims
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-CLM-01 | Multi-bill claims with two-stage approval and decisions per bill | Must | R2 | [Observed] research §9 |
| BR-CLM-02 | Expense policy: categories, limits by grade/city tier, receipt thresholds, per-diem, mileage | Must | R2 | No limits in Spryple [Observed] research §9 |
| BR-CLM-03 | Duplicate-bill detection | Should | R2 | Gap §9 |
| BR-CLM-04 | Payout via payroll or off-cycle bank file | Must | R2 | CLM → PAY missing §16 |
| BR-CLM-05 | Mileage claims generated from verified FFM travel | Should | R3 | Two reimbursement paths [Observed] §9 |
| BR-CLM-06 | One status vocabulary across roles | Must | R2 | Statuses differ by role [Observed] §9 |
| BR-CLM-07 | GSTIN and tax fields on bills | Could | R2 | Gap §9 |
| BR-CLM-08 | Receipt OCR | Could | R4 | Gap §9 |
8.12 EXT — Exit & F&F
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-EXT-01 | Resignation chain (employee → manager → HR) with LWD negotiation | Must | R2 | HR-only approval [Observed] (M: Exit); D7 |
| BR-EXT-02 | Termination with categories and reasons | Must | R2 | [Observed] (A: Exit) |
| BR-EXT-03 | Clearance with sign-off by the owner of each item | Must | R2 | [Observed] offboarding checklist |
| BR-EXT-04 | F&F as an off-cycle run, with a statement | Must | R2 | Gap §8 |
| BR-EXT-05 | Relieving and experience letters | Should | R2 | Gap §8 |
| BR-EXT-06 | Access revoked at LWD; ex-employee access to payslips and tax documents | Must | R2 | Gap §8 |
| BR-EXT-07 | Exit interview, rehire flag, attrition analytics | Could | R3 | Gap §8 |
8.13 ENG, FFM, TSM, LMS
| ID | Requirement | Pri | Rel | Rationale |
|---|
| BR-ENG-01 | Announcements with audience targeting, scheduling and read receipts | Should | R2 | [Observed] SP-ENG-01; targeting gap §13 |
| BR-ENG-02 | Peer recognition with tenant-defined types | Could | R2 | [Observed] (MOB: HCM); [Observed-SS] §21.9 |
| BR-ENG-03 | Birthday and anniversary feed (employees can opt out) | Could | R2 | [Proposed] |
| BR-FFM-01 | Consent-based tracking in work hours only; point-to-point or continuous mode | Must | R3 | [Observed-SS] two modes §21.7; consent gap §11 |
| BR-FFM-02 | Team map (live and past), battery, km, tracking log | Must | R3 | [Observed] (M: CRM) |
| BR-FFM-03 | Configurable pipeline stages and activity types with templates | Must | R3 | Hard-coded demo pipeline [Observed] §11 |
| BR-FFM-04 | Client accounts, contacts and associates shared with TSM | Must | R3 | [Observed] associates; duplicate masters §10 |
| BR-FFM-05 | Geo-verified visits with configurable enforcement | Must | R3 | Indicator only [Observed-SS] §21.7 |
| BR-FFM-06 | Beat/route plans and assignments | Should | R3 | [Observed] assignments (M: CRM) |
| BR-FFM-07 | Payment collection in the field | Should | R3 | [Observed] Client Payments |
| BR-FFM-08 | Manager-verified travel converted into reimbursement | Must | R3 | [Observed] Team Travel Approvals |
| BR-FFM-09 | Lead ageing and overdue follow-up alerts | Should | R3 | [Observed-SS] §21.7 |
| BR-TSM-01 | Projects, tasks, roles and team on shared client accounts | Must | R3 | [Observed] (A: Time Sheet) |
| BR-TSM-02 | Weekly grid, submission, bulk approval, period lock | Must | R3 | [Observed] (M: Time Sheet); gap §10 |
| BR-TSM-03 | Defaulter reminders | Should | R3 | [Observed] Defaulters |
| BR-TSM-04 | Billable flag and rate, export only | Should | R3 | Gap §10 |
| BR-TSM-05 | Bench, effort-variance and estimate-vs-actual dashboards | Should | R3 | [Observed] (M, SA: Time Sheet) |
| BR-LMS-01 | Mandatory compliance courses (POSH, safety, induction) by applicability, linked to onboarding | Must | R4 | Gap §12 |
| BR-LMS-02 | SCORM import instead of a rich course builder | Should | R4 | Research §12 |
| BR-LMS-03 | Assessments, verifiable certificates, badges | Could | R4 | [Observed] (I, E: LMS); [Observed-SS] §21.10 |
9. Business rules
"Window" means the attendance window and "period" means the payroll period.
9.1 ORG and IAM
| ID | Rule | Label |
|---|
| RULE-ORG-01 | Employee ID per location. ID = location prefix + zero-padded sequence starting at the location seed. Locations sharing a prefix and seed share one sequence. A duplicate location with a different prefix is rejected. IDs are issued at joining confirmation, are gap-free and never reused, and do not change on transfer. | [Observed] SP-ORG-04 (A: Employee Mgmt); timing and immutability [Proposed] |
| RULE-ORG-02 | Master names are unique per tenant, case-insensitive. A master in use by active employees cannot be deactivated until they are reassigned; bulk reassignment is offered. | [Observed] SP-X-01, SP-ORG-02; bulk [Proposed] |
| RULE-ORG-03 | Each location has at most one holiday per date. A holiday edit recomputes open windows only; for locked windows the differences flow as adjustments. | [Observed] SP-ORG-06; recompute [Proposed] |
| RULE-ORG-04 | Policy effective dating. Each policy version has a valid_from, ends the day before the next version starts, and never overlaps another version. A version applies to every employee whose applicability matches, from valid_from. valid_from must fall in an open window/period. An earlier date needs finance_admin approval and creates arrears or recoveries in the next run. Named employees may be pinned to the old version (grandfathered), with a reason. | [Proposed]; disagrees with SP-X-08 [Observed] |
| RULE-ORG-05 | Applicability and single home. The most specific match wins: employee override > grade > designation > department > location > employment type > tenant default. Two matches at the same level are blocked at save. Each rule lives in exactly one policy type: probation and notice in Probation/Notice, lateness in Attendance, default shift in Shift. | [Proposed]; fixes D4, D5 [Observed] |
| RULE-IAM-01 | No default passwords. Activation uses a single-use link valid for 72 h, and resending it invalidates earlier links. Password floor: ≥ 10 characters, breached-password check, 15-minute lockout after 5 failures. Tenants can tighten the floor, not loosen it. | [Proposed]; disagrees with SP-IAM-01, Rules 1–9 [Observed] |
| RULE-IAM-02 | MFA is mandatory for org_owner, hr_admin, finance_admin, payroll_manager, auditor and all platform roles. | [Proposed] |
| RULE-IAM-03 | The first mobile login binds the device. If device approval is on, a new device stays pending until the line_manager or sales_manager approves it; approval signs out the old device. | [Observed] Device Approvals (M: CRM); sign-out [Proposed] |
| RULE-IAM-04 | Segregation of duties (on). Whoever edited compensation, one-time inputs or arrears for a period cannot approve that period's run. A tenant with a single finance user can turn this off; the change is audited. | [Proposed] |
| RULE-IAM-05 | Support access needs a reason and a ticket, lasts ≤ 4 h, is read-only unless the tenant grants write, and appears in the tenant's access log. Enterprise tenants approve each session in advance. | [Proposed] |
9.2 EMP
| ID | Rule | Label |
|---|
| RULE-EMP-01 | New-hire mandatory fields: first and last name, hired-on date, joining date, designation, mobile, emergency contact, and location. Personal email is optional; without one, the link is sent by SMS/WhatsApp. | [Observed-SS] §21.2; location [Proposed] |
| RULE-EMP-02 | The pre-joining link is single-use and valid for 7 days. A resend invalidates the old link. Spryple's 24 h is too short for candidates who are still gathering documents. | [Observed-SS] 24 h §21.2; 7 days [Proposed] |
| RULE-EMP-03 | Document approval. Employee uploads stay Pending until hr_manager approves or rejects them. A rejection needs a reason and reopens the upload. HR uploads are auto-approved. Allowed files: PDF/JPG/PNG ≤ 5 MB. Documents mandatory for joining block joining confirmation until approved. Expiring documents alert 30 days ahead. | [Observed] SP-EMP-08; mandatory, size, expiry [Proposed] |
| RULE-EMP-04 | Onboarding is Completed only when the owner of every mandatory checklist item has marked it No Due. | [Observed] SP-EMP-07; owners [Observed-SS] §21.2 |
| RULE-EMP-05 | Profile fields are self-editable, approval-required (bank, legal name, PAN, address) or HR-only. A bank change reaches payroll only if it is approved before the period lock; otherwise it applies from the next period. | [Proposed]; Rule 34 toggle [Observed] |
| RULE-EMP-06 | Probation is set in days, in one place. A confirmation task is raised 15 days before the end. If nobody acts, the employee stays on probation and the task escalates; nobody is ever auto-confirmed. | [Proposed]; resolves months-vs-days D4 [Observed] |
| RULE-EMP-07 | Job and pay changes are effective-dated. A mid-period change splits the attendance policy and pay at the effective date. Imports commit only after a dry-run with zero blocking errors, and are idempotent by employee ID. | [Proposed] |
9.3 ATT
| ID | Rule | Label |
|---|
| RULE-ATT-01 | Day-status precedence: (1) holiday or week-off from the employee's calendar; (2) approved full-day leave or attendance request; (3) punches; (4) thresholds. Statuses: P, A, HD, L, HL, W, H, WP, HP, OD, WFH. A half-day leave combines with a half-day worked. | [Observed-SS] legend §21.3; precedence [Inferred] §5.3 |
| RULE-ATT-02 | Half/full-day thresholds. Worked hours ≥ full-day threshold (8 h) → P; ≥ half-day threshold (4 h) → HD; otherwise A. Approved permission minutes count as worked. | [Observed] HR Rules 27–28 |
| RULE-ATT-03 | Worked hours = last out − first in − unpaid break, where break time beyond the allowed lunch/tea duration plus grace is unpaid. Punches from different sources within 2 min of each other are de-duplicated first, so breaks are always applied. Spryple ignores breaks when sources mix. | [Observed] Rules 38–42; [Observed-SS] §21.3; de-dup [Proposed] |
| RULE-ATT-04 | Late / early. Late if first in > shift start + grace-in. Early-out if last out < shift end − grace-out. A night shift belongs to the date it starts. | [Observed] SP-ATT-01; night shift [Proposed] |
| RULE-ATT-05 | Lates-to-leave. With L = late days in the window, deduction = floor(max(0, L − A) ÷ N) × X, where A = free lates (2), N = block size (3) and X = days per block (0.5). Example: 8 lates → floor(6 ÷ 3) × 0.5 = 1 day. The deduction is debited from leave types in order (CL, then EL), then LOP. It posts on the last day of the window and is recomputed if a late is regularized before lock. | [Observed] SP-ATT-01, Rules 22–24; formula, order [Proposed] |
| RULE-ATT-06 | Missed punch. A day with an in-punch and no out-punch is "Missed punch" until regularized. With default punch-out on, out = shift end and the day is flagged. A day still unresolved at lock takes the policy status (HD). | [Observed] Rule 35, SP-ATT-11; lock outcome [Proposed] |
| RULE-ATT-07 | Regularization is allowed within the lookback (7 days), only in an open window, at most 4 per month, with line_manager approval. The employee may convert the day to leave instead; it becomes LOP only if no balance is left. | [Observed] Rules 32–33, SP-ATT-11/12; cap [Proposed] |
| RULE-ATT-08 | Permission (short leave): one per day, ≤ 120 min each, ≤ 4 per month, paid or unpaid per policy. | [Observed] SP-ATT-10, Rule 29; caps [Proposed] |
| RULE-ATT-09 | OT eligibility. OT = worked minutes − shift minutes, counted only if ≥ the minimum (60 min). It is payable only if the policy is OT-eligible, the line_manager approved it, and it stays within caps (4 h/day, 50 h/quarter; verify under the OSH Code). Pay = OT hours × hourly ordinary wage × 2 (statutory for covered workers; verify). A day earns OT pay or comp-off, never both. | [Observed] SP-PAY-07, SP-ATT-16; rest [Proposed] |
| RULE-ATT-10 | Extra-day slabs. Slabs are set per designation: min–max days worked → E extra days. "Days worked" counts the configured day types (WP, HP). If the count falls inside a slab, E days are paid at the RULE-PAY-01 per-day rate. A day paid as extra earns neither comp-off nor OT. | [Observed] SP-ATT-17, Rules 43–45; computation [Inferred]; exclusivity [Proposed] |
| RULE-ATT-11 | Week-off penalty. For penalty designations, a week-off is unpaid if the employee is Absent (no approved leave or request) on the counting days (both the working day before and the one after; option: either). Separately, if LOP days in the window ≥ T (10), penalty week-offs = week-offs in window × LOP days ÷ scheduled working days, rounded down to 0.5. No week-off is penalised twice. | [Observed] SP-ATT-18, Rules 46–48, SP-PAY-07; formula [Proposed] |
| RULE-ATT-12 | Geo-fence. A punch is inside if it falls within the radius (200 m) of any fence assigned to the employee, or comes from an allowed Wi-Fi/QR. Outside punches are flagged (or blocked, per policy). GPS accuracy worse than 100 m is flagged. | [Observed-SS] 200 m §21.3; rest [Proposed] |
| RULE-ATT-13 | Selfie and face. Selfies are taken per policy. A low face-match score is flagged for review, never silently rejected. Kiosk face punches need liveness. Face enrolment needs recorded consent; without it the employee uses PIN or selfie. | [Observed] SP-ATT-19; liveness, consent [Proposed] |
| RULE-ATT-14 | Offline punches keep device time if drift at sync is ≤ 5 min and the sync happens within 72 h. Otherwise they need approval. | [Proposed] |
| RULE-ATT-15 | Shifts. Rotations advance through their sequence; a reassignment applies from its effective date. New joiners get the default shift and week-offs of their Shift policy. A shift change needs an assigned shift and manager approval. A swap also needs the counterpart's acceptance first. | [Observed] SP-ATT-07, SP-ATT-09, Rules 16–21; consent [Proposed] |
| RULE-ATT-16 | Attendance lock. A locked window is read-only. Corrections approved by hr_manager become adjustment lines in the next run, quoting the original date. | [Proposed]; gap §5.4 |
9.4 LVE
| ID | Rule | Label |
|---|
| RULE-LVE-01 | The leave cycle is Apr–Mar or Jan–Dec. It can change only from the start of the next cycle. | [Observed] SP-LVE-01; timing [Proposed] |
| RULE-LVE-02 | Accrual. Credit per period = annual quota ÷ periods per year (12, 4, 2 or 1), posted on the first day of the period. | [Observed] SP-LVE-03; posting day [Inferred] |
| RULE-LVE-03 | Proration. A joiner's first credit = period credit × (days from joining to period end, inclusive) ÷ days in the period. For yearly types, the credit is the annual quota × months remaining ÷ 12, where the joining month counts if joining falls on or before the 15th. Credits round down to 0.5. Leavers get no credit for periods that start after the LWD. For yearly types, leave taken beyond the pro-rata entitlement is recovered in F&F. | [Proposed] |
| RULE-LVE-04 | Sandwich. Suppose a sandwich-enabled type (or LOP) covers the full working day before and the full working day after a continuous block of week-offs (weekend flag) and/or holidays (holiday flag). Then every day in the block counts as that leave; if the two sides differ, the later-dated type is used. A half-day on either side does not trigger it. The employee's own calendar applies. Example: Friday + Monday leave = 4 days. | [Observed] SP-LVE-01/03; tie-breaks [Proposed] |
| RULE-LVE-05 | Year end. Balances up to the carry-forward cap carry over. The excess lapses or is encashed per type: days × (basic + DA) ÷ 26, paid in the first run of the new cycle. | [Observed] cap and lapse → perks SP-LVE-03; formula [Proposed] |
| RULE-LVE-06 | Comp-off eligibility and expiry. Earned by work on a week-off or holiday: ≥ full-day threshold → 1 day, ≥ half-day threshold → 0.5 day, and only if no OT or extra-day pay is claimed for that date. It must be requested within 30 days, needs line_manager approval, expires 60 days after the worked date, is consumed oldest first and cannot be encashed. | [Observed] SP-LVE-03/05; FIFO, exclusivity [Proposed] |
| RULE-LVE-07 | Request checks: minimum service (months), eligibility conditions, advance notice (days; managers may override with a reason), maximum days per instance, and balance. Only advance-leave types may go negative; any excess must be applied as LOP. | [Observed] SP-LVE-03, SP-LVE-05; override [Proposed] |
| RULE-LVE-08 | Sick leave longer than 2 consecutive days needs a medical document within 3 working days of return. Without it, the leave stays approved but is flagged, and hr_manager may convert it to LOP before lock. | [Observed] threshold SP-LVE-03; handling [Proposed] |
| RULE-LVE-09 | Past-dated leave is allowed within 7 days, in open windows only. Employees can cancel approved leave only for future dates, through cancellation approval. Only hr_manager can reverse past leave, with a reason. | [Observed] SP-LVE-01, SP-LVE-05/06; reversal [Proposed] |
| RULE-LVE-10 | Advance leave: up to N days borrowed against the future accrual of one monthly type, repaid from the next credits; anything outstanding at exit is recovered in F&F. | [Observed] SP-LVE-03; F&F [Proposed] |
| RULE-LVE-11 | Parental eligibility never depends on marital status or binary gender. Maternity: 26 weeks for the first two children, 12 weeks after that; 12 weeks for adopting mothers (child under 3 months) and commissioning mothers; eligibility = ≥ 80 days worked in the preceding 12 months (verify all values). Paternity/partner and adoption leave can be configured for any parent. | [Proposed]; disagrees with SP-LVE-04 [Observed] |
| RULE-LVE-12 | Optional holidays: at most N per cycle, chosen from the location's list, approved by line_manager. | [Observed] SP-LVE-01/06 |
| RULE-LVE-13 | Every balance change is a ledger entry (credit, debit, lapse, encash, adjust, reverse) with its source and reason. Balance = sum of entries. Balances are never edited directly. | [Proposed] |
| RULE-LVE-14 | Default approver: line_manager. Leave longer than 5 days adds hr_manager as a second level. | [Proposed]; §20.2 |
9.5 PAY
| ID | Rule | Label |
|---|
| RULE-PAY-01 | Payable days, two bases. G = monthly amount of a prorated component. Actual days: D = calendar days in the period; PD = D − LOP − penalty week-offs − days before joining − days after LWD; earned = G × PD ÷ D. Organisation working days: W = the employee's scheduled working days in the period (excluding their week-offs and location holidays); PD = working days employed − LOP − penalty week-offs; earned = G × PD ÷ W. PD ≥ 0. Components marked non-prorated pay in full when PD > 0. A fixed 30-day basis is a third option. | [Observed] two bases SP-PAY-04 (D6); formulas [Inferred]; 30-day [Proposed] |
| RULE-PAY-02 | Split windows. LOP and penalties counted in the window apply to the period. Days between window end and period end are treated as present and corrected in the next period. F&F uses actual attendance up to the LWD. | [Observed] SP-PAY-04; carry-over [Proposed] |
| RULE-PAY-03 | Absent days are LOP when the policy says so (on). LOP = absent days + LOP leave + lates-to-leave that fell to LOP + missed punches unresolved at lock. | [Observed] SP-PAY-07 |
| RULE-PAY-04 | A mid-period revision prorates each component by calendar days at the old and new rates. | [Proposed] |
| RULE-PAY-05 | EPF applicability. Mandatory at ≥ 20 employees (voluntary below that). PF wages = basic + DA + retaining allowance; check the Code on Wages 50% "wages" add-back. Employee pays 12%. The employer's 12% splits into 8.33% EPS (on wages capped at ₹15,000) and 3.67% EPF, plus EDLI 0.5% and admin 0.5%. New joiners above the ceiling who were never members may opt out. Contribution on actual wages above the ceiling is a per-structure choice. (All values to verify.) | [Observed] SP-PAY-02; values [Proposed, verify] |
| RULE-PAY-06 | ESI applicability. An employee is covered if gross wages ≤ ₹21,000/month (₹25,000 for persons with disability) at the start of a contribution period (Apr–Sep, Oct–Mar), and stays covered to the end of that period. Employee 0.75%, employer 3.25% (verify). The work-location state's ESI code is used. | [Observed] SP-PAY-03; values [Proposed, verify] |
| RULE-PAY-07 | Statutory contributions are computed on earned wages after LOP by default. Spryple's "independent of LOP" option is offered as a per-structure setting. | [Observed] SP-PAY-07; default [Proposed] |
| RULE-PAY-08 | PT follows the work-location state's slab as of the period end date, with that state's wage base and frequency, including special months (e.g. a higher February deduction in some states). Annual PT never exceeds ₹2,500 (verify). | [Observed] SP-PAY-13; mechanics [Proposed, verify] |
| RULE-PAY-09 | LWF applies the state's employee and employer amounts in the state's deduction months to employees who meet its wage criteria. | [Proposed]; missing in Spryple [Observed] §7.3 |
| RULE-PAY-10 | TDS (salary). Monthly TDS = (annual tax plus cess on projected taxable salary under the chosen regime − TDS already deducted this year, including by a previous employer) ÷ remaining months including the current one. The new regime is the default unless the employee opts out by the cutoff. Declarations count until the proof cutoff (January); after that, only verified proofs. One-time payments are taxed in the month they are paid. Without a PAN, the higher rate applies (verify). | [Proposed]; replaces SP-PAY-16 [Observed] |
| RULE-PAY-11 | Advance salary. Available after ≥ 1 payslip, up to one month's gross, one open advance at a time. Instalment = ceil(amount ÷ n), with the last one adjusting; n ≤ the policy maximum; recovery starts in the run after disbursement. A new request is allowed only after the cooling-off months that follow full recovery. Total deductions in a month are capped at 50% of wages (verify), and any excess instalment is deferred. The balance at exit is recovered in F&F. | [Observed] research §7.1, SP-PAY-07; cap, exit [Proposed] |
| RULE-PAY-12 | Arrears. A change back-dated into a locked period is computed as the difference per month and component, and paid or recovered in the next run. The payslip shows it by month. | [Observed] SP-PAY-09 (manual); automatic [Proposed] |
| RULE-PAY-13 | Run lifecycle: Draft → Calculated → Approved (per RULE-IAM-04) → Locked → Paid. A locked run is immutable, and payslips and files are published only after lock. Corrections go through an off-cycle run or the next run. Unlocking is possible only before Paid, by finance_admin with a reason, and it voids the files. Emailed payslips are password-protected (first 5 characters of PAN + DOB as DDMM). | [Proposed]; gap §7.3 |
| RULE-PAY-14 | Pre-run validation. Blocking errors: no structure, no bank account (for bank-paid staff), negative net pay, no PAN when TDS > 0, no UAN for PF members after their first month. Warnings: net pay changed > 20%, joiners or leavers, zero attendance. | [Proposed] |
| RULE-PAY-15 | Parameters come from the statutory-pack version effective on the period end date (or the payment date where the law says so). Tenants cannot edit a pack but can apply audited overrides. Components and net pay round to the rupee; statutory amounts follow the pack's rounding (e.g. ESI rounds up; verify). | [Proposed] |
| RULE-PAY-16 | Gratuity is an employer cost. It may appear in CTC and liability reports but is never deducted from net pay. | [Proposed]; disagrees with [Observed-SS] §21.5 |
| RULE-PAY-17 | Structures are assigned explicitly and effective-dated. A CTC band may suggest a structure but never decides it. | [Proposed]; disagrees with SP-PAY-05 [Observed] |
| RULE-PAY-18 | Claims approved by the period's input cut-off are paid in that run as reimbursement lines, taxable or exempt by category. Later approvals go to the next run or an off-cycle bank file. | [Proposed] |
9.6 NTF and CLM
| ID | Rule | Label |
|---|
| RULE-NTF-01 | On-behalf auto-approval. A request raised for an employee is auto-approved when the actor holds the approve permission at a scope covering that employee and the request passes policy checks (balance, windows). Otherwise it goes to the approver above the actor. Nobody can raise an on-behalf request for themselves. The record says "by X on behalf of Y", and the employee is notified. | [Observed] SP-X-04, SP-ATT-04, SP-LVE-06; checks [Proposed] |
| RULE-NTF-02 | Nobody approves their own request: if the resolved approver is the requester, the step moves up a level (to hr_manager at the top). Approvers can delegate for a date range. An approver on leave with no delegate routes to their own manager. | [Proposed] |
| RULE-NTF-03 | A reminder goes out after 24 business hours; the step escalates after 48. Requests touching an open window appear on the cut-off dashboard. Nothing auto-approves on timeout unless enabled per request type. Non-urgent push/SMS is held between 21:00 and 08:00. | [Proposed] |
| RULE-NTF-04 | The requester can edit or withdraw while the request is Submitted. A rejection needs a reason. Approved future items are cancelled only through cancellation approval. | [Observed] SP-X-03 |
| RULE-CLM-01 | Two-stage approval: Submitted → Verified by line_manager (per bill: accept, reject, or reduce up to the claimed amount) → Approved by payroll_manager → Paid. The same person never verifies and approves one claim. If every bill is rejected, the claim is Rejected. | [Observed] research §9 (M, A, MOB: Claims); SoD [Proposed] |
| RULE-CLM-02 | Policy checks per category: limits per bill, day or month by grade and city tier; receipt needed above ₹500; bills older than 60 days are blocked. An over-limit bill needs a justification and is flagged to the verifier. Attachments are image/PDF ≤ 5 MB (Spryple allows 2 MB). | [Observed-SS] 2 MB §21.6; rest [Proposed] |
| RULE-CLM-03 | The same bill number, amount, date and vendor already claimed by the same employee is blocked; across employees it is flagged. | [Proposed] |
| RULE-CLM-04 | Mileage = verified km × rate per vehicle type (₹/km by grade). The claim is created from verified travel and enters at Verified. A claim is Paid when its run is Paid or its bank file is confirmed. | [Proposed]; manual "mark Paid" [Observed] §9 |
9.7 EXT
| ID | Rule | Label |
|---|
| RULE-EXT-01 | Separation chain: employee → line_manager (recommends) → hr_manager (decides). Proposed LWD = resignation date + notice days. HR may set another LWD, with a reason. The employee can withdraw before approval; after approval, only with HR's consent. | [Observed] request, approved exit date (E, M: Exit); chain [Proposed] |
| RULE-EXT-02 | Notice shortfall = notice days − (LWD − resignation date + 1), when positive. Recovery = shortfall days × the RULE-PAY-01 per-day rate on gross (or basic, per policy). hr_manager may waive it in full or in part, with a reason. When the employer relieves someone early, the policy decides whether pay in lieu of notice is due. | [Proposed]; gap §8 |
| RULE-EXT-03 | Gratuity eligibility: ≥ 5 years of continuous service, waived on death or disablement; fixed-term employees qualify pro-rata after 1 year under the Code on Social Security (verify). Amount = last basic + DA × 15 ÷ 26 × completed years; a final part-year over 6 months counts as a full year; capped at ₹20 lakh (verify). Whether 4 years 240 days counts as 5 is a tenant setting pending counsel. | [Proposed]; Spryple has only a coverage toggle [Observed] SP-PAY-07 |
| RULE-EXT-04 | F&F components: earned salary to the LWD, encashable leave, gratuity, notice pay or recovery, pending reimbursements, variable pay/bonus/arrears due; minus advances and loans, excess leave, unreturned assets and notice recovery. TDS is recomputed for the year. A negative net is shown as recoverable. F&F is due 2 working days after the LWD (Code on Wages; verify), and overdue cases are flagged. | [Proposed] |
| RULE-EXT-05 | F&F cannot be approved until every mandatory clearance item has been signed off by its owner. | [Observed] No Due (M: Exit); owners [Observed-SS] §21.2 |
| RULE-EXT-06 | A termination can be back-dated within the policy limit (0–60 days). If the date falls in a locked period, the difference is settled in F&F. | [Observed] Rule 37; locked handling [Proposed] |
| RULE-EXT-07 | Login is disabled at 23:59 on the LWD, local time. Ex-employees get read-only access to their payslips and tax documents for 12 months, via mobile OTP. | [Proposed] |
9.8 FFM and TSM
| ID | Rule | Label |
|---|
| RULE-FFM-01 | Tracking consent. Tracking starts only after the employee accepts a versioned notice covering purpose, hours, retention and viewers. Withdrawal stops continuous tracking immediately; punches and visits still work in point-to-point mode. Consent events are stored with the time and the notice version. | [Proposed]; in-app disclosure [Observed-SS] §21.7 |
| RULE-FFM-02 | Work-hours limit. Points are collected only between punch-in and punch-out, never on leave, week-offs or holidays unless the employee is on approved on-duty. Tracking stops automatically after 12 h or at shift end + 2 h, whichever comes first. An on-screen indicator shows when tracking is on. Each user has one mode: point-to-point or continuous. | [Observed-SS] modes §21.7; limits [Proposed] |
| RULE-FFM-03 | Raw points are kept for 90 days. After that only daily aggregates (km, visits, durations) remain, kept as long as the related claim and payroll records. | [Proposed] |
| RULE-FFM-04 | Geo-verified visit: a check-in within 150 m of the client location counts as Verified. Outside that, policy decides (flag, block or allow). A client with no location takes the location of its first visit, pending sales_manager confirmation. | [Observed-SS] matched indicator, first-visit location §21.7; enforcement [Proposed] |
| RULE-FFM-05 | Day km = snap-to-road distance over filtered points (jumps above 150 km/h are dropped). A manager's revision needs a reason and keeps both values; claims use the revised value. | [Observed-SS] KM Revised §21.7; method [Proposed] |
| RULE-FFM-06 | Lead-age bands (days since last activity): green 0–7, amber 8–14, red 15+. Overdue follow-ups show as Exceeded. | [Observed-SS] §21.7 |
| RULE-TSM-01 | When the policy is on, a day's timesheet hours cannot exceed that day's attendance worked hours. | [Observed] (E: Time Sheet); missing from HR rules, D11 |
| RULE-TSM-02 | Weekly timesheets are due by Monday 12:00 for the previous week. Defaulters are reminded, and approved weeks lock. Effort variance % = (actual − planned) ÷ planned × 100. | [Observed] Defaulters (M: Time Sheet); [Observed-SS] variance §21.8; deadline and lock [Proposed] |
9.9 PLT and RPT
| ID | Rule | Label |
|---|
| RULE-PLT-01 | Tenant states: Trial (14 days, extendable once to 30) → Onboarding → Active → Past due (7-day grace, with a banner) → Suspended (read-only, but payroll and data export still work) → Churned (30-day export window) → Deleted. Expired trials are deleted 30 days after expiry. | [Proposed]; architecture.md §14 |
| RULE-PLT-02 | Billing count = the highest number of active employees on any day of the month; an employee whose LWD falls in the month counts. A plan minimum fee applies. Above 105% of the plan limit, the tenant sees warnings. At 110%, adding employees is blocked. Payroll is never blocked between the 25th and the 5th for billing reasons without founder approval. | [Proposed]; architecture.md §14 |
| RULE-PLT-03 | Payroll-window freeze, 25th to 5th IST: no release may change PAY/ATT/LVE computation or a statutory pack. The only exceptions are S1/S2 fixes that pass two-person review and the payroll golden tests, and legally mandated changes announced to tenants. | [Proposed]; architecture.md §11 |
| RULE-PLT-04 | Trial limits: ≤ 50 employees. Payroll can be calculated and payslips previewed (watermarked). Bank files, statutory files and payslip publishing stay disabled until conversion. The tenant slug is immutable after activation; renames add an alias. | [Proposed] |
| RULE-PLT-05 | Offboarding. A full export (CSV/JSON + documents) is available until deletion. Deletion happens 30 days after churn, or 90 under an Enterprise contract. Records under legal hold or contracted statutory retention are excepted. A deletion certificate is issued. | [Proposed]; architecture.md §9 |
| RULE-RPT-01 | Report rows are filtered by the viewer's data scope. Sensitive columns are masked unless the viewer holds the field permission. Every export is written to the audit log. | [Proposed] |
10. Assumptions, constraints and dependencies
10.1 Assumptions (including research §20 open questions)
| # | Question → working assumption | If wrong |
|---|
| A1 | §20.1 Spryple's permission granularity → irrelevant, because we build permission × scope roles | No impact |
| A2 | §20.2 Spryple multi-level approvals → assume none; we ship 2 levels + delegation in R1 | Affects parity claims only |
| A3 | §20.3 Spryple's TDS computation → assume external; our engine ships in R1 | Already in scope |
| A4 | §20.4 Biometric protocols → ZKTeco/eSSL-class devices; CSV/API in R1, push gateway in R2 | More gateway work (RSK-07) |
| A5 | §20.5 Face provider and liveness → no evidence Spryple has liveness; ours requires it for kiosks | Cost per verification (RSK-09) |
| A6 | §20.6 GPS frequency, offline behaviour, retention → we set our own limits (RULE-FFM-02/03) | Battery complaints (RSK-08) |
| A7 | §20.7 Spryple pricing → not analysed; our prices (§15) are indicative | Margin or conversion miss (RSK-14) |
| A8 | §20.8 Multi-company groups → common enough for R2 (BR-ORG-08) | Statutory setup rework if it comes late |
| A9 | §20.9 Payroll lock/reversal → assume absent in Spryple; ours is a Must | No impact |
| A10 | §20.10 Customer API → assume absent in Spryple; ours ships in R2 | No impact |
| A11 | Clients have 10–1,000 employees and work in one or a few states | Enterprise demand arrives early |
| A12 | Clients upload statutory files themselves | Demand for a filing service |
| A13 | Most employees have smartphones; kiosks cover the rest | Lower adoption (BO-03) |
10.2 Constraints
- Data stays in India, and payroll is India/INR only.
- A small team on one release train, with no per-client code (architecture.md §8).
- Nothing statutory is hard-coded (CONVENTIONS.md §6).
- We learn from Spryple's documented behaviour but never copy its UI, text or assets.
- Releases freeze during the payroll window (25th–5th).
- Mobile OS background limits constrain tracking.
10.3 Dependencies
| Dependency | For | Release |
|---|
| Statutory content source plus legal review | PAY, statutory packs | R1 |
| File specifications: EPFO ECR, ESIC, state PT/LWF, TDS returns | BR-PAY-05, BR-PAY-11 | R1/R2 |
| Formats from 4–6 major banks | BR-PAY-06 | R1 |
| Email, SMS/WhatsApp BSP, push | NTF | R1 |
| Razorpay Subscriptions; GST invoicing | BR-PLT-03 | R1 |
| Maps/geocoding provider | ATT (R1), FFM (R3) | R1/R3 |
| Face provider with liveness, hosted in India | BR-MOB-03 | R2 |
| Pilot clients willing to do a parallel run | BO-02 go-live gate | R1 |
| Store approval of location declarations | MOB, FFM | R1/R3 |
11. Functional business expectations
| Persona | Success looks like |
|---|
org_owner | One dashboard for headcount, attendance, payroll cost and filing status; payroll approved in minutes; no penalties caused by the tool |
hr_admin | Sets up a new location or policy in under 30 minutes without vendor help; a change applies to everyone from a chosen date |
hr_manager | Onboards without re-typing data; clears month-end exceptions within a day |
finance_admin, payroll_manager | Gets from lock to published payslips in one business day; files accepted on first upload; every variance explained before approval |
line_manager | Each approval takes under a minute on the phone; sees who is in today |
employee | Handles leave, balances, payslips, Form 16 and declarations without contacting HR |
field_executive | Tracked only during work hours, with little battery drain; travel paid within 10 days |
sales_manager | Sees the team's whereabouts in work hours and spots ageing leads; verifies travel in bulk |
kiosk_operator | About 5 seconds per check-in; sees no other data |
auditor | Pulls any period's registers and audit trail without asking HR |
| Spyrl CS / Support | Takes a 200-employee client live in ≤ 16 staff-hours; diagnoses issues through consented, audited access |
12. Operational requirements
12.1 Support model and SLAs
Severities:
- S1: outage; payroll blocked in the payroll window; or suspected data exposure.
- S2: core function degraded with a workaround, or a wrong statutory/bank file.
- S3: minor defect.
- S4: question or request.
| First response | Lite | Standard | Professional | Enterprise |
|---|
| S1 | 4 business h | 2 business h | 1 h | 30 min, 24×7 |
| S2 | 1 business day | 8 business h | 4 business h | 2 h |
| S3 / S4 | 3 / 5 business days | 2 / 3 business days | 1 / 2 business days | 1 / 1 business day |
| S1 workaround | Best effort | 8 h | 4 h | 4 h |
| Channels | Help centre, email | + in-app chat | + phone | + named CSM, quarterly review |
Business hours are Mon–Sat, 09:00–19:00 IST. From the 25th to the 5th, Standard and above get extended hours (08:00–22:00, Sundays included). For an incident affecting several tenants, the status page is updated within 30 minutes. Professional and Enterprise tenants get a post-incident report within 5 business days.
12.2 Implementation service
| Package | Plans | Includes | Target |
|---|
| Self-serve | Lite, Standard | Wizard, templates, videos | ≤ 7 days |
| Assisted | Standard, Professional | Configuration review, imports, 1 parallel run, 2 training sessions | ≤ 21 days |
| Managed | Enterprise | Project manager, policy workshop, SSO/devices, YTD migration, 2 parallel runs, sandbox UAT, one cycle of hypercare | ≤ 45 days |
Go-live gate: readiness score ≥ 90%, a parallel run in which every employee's net-pay variance is explained, statutory registrations entered, approvers mapped, and the owner's sign-off.
12.3 Data migration
- Scope: employee master and job data; UAN, ESI number, PAN and bank details; compensation; opening leave balances at cut-over; YTD earnings, deductions and TDS; open advances; documents (as a zip mapped by employee ID).
- Rules: cut-over at the start of a period; dry-run before commit; a reconciliation report signed by the client; migrated history is read-only.
- Out of scope: punch history before the current window, and regenerating old payslips (legacy PDFs can be uploaded as documents instead).
12.4 Training
Each role (owner, HR, payroll, manager, employee, field) gets a learning path: short videos, a checklist and in-app tours. Help text is generated from the policy schema, so the docs cannot drift from the product (research §17). Every statutory-pack change comes with a release note for payroll users.
12.5 Change freeze and maintenance
The payroll-window freeze follows RULE-PLT-03. Maintenance runs outside the freeze, on Sundays 23:00–03:00 IST, is announced ≥ 72 h ahead and is limited to ≤ 4 h a month. Dedicated cells upgrade in the client's agreed window, at most one wave behind.
12.6 Uptime by plan
| Plan | Target | Contractual | Service credits |
|---|
| Lite / Standard | 99.5% | No | – |
| Professional | 99.5% (rising to 99.9% after hosting Stage B) | Yes, at 99.5% | 5% of the monthly fee per 0.5% below target |
| Enterprise | 99.9% | Yes, once Stage B is live (architecture.md §10) | 10% below 99.9%; 25% below 99.0% |
Announced maintenance is excluded. Uptime covers web, API and punch acceptance.
12.7 Backups and retention
| Item | Commitment |
|---|
| Point-in-time recovery | 35 days; RPO ≤ 5 min; RTO ≤ 1 h after a zone failure |
| Regional disaster | Encrypted copies in a second Indian region; RPO ≤ 24 h, RTO ≤ 8 h |
| Single-tenant restore | On request; ≤ 2 h for Enterprise |
| Locked payroll artefacts | Write-once storage; quarterly DR drills |
| Data class | Default retention (verify with counsel) |
|---|
| Payroll, statutory and tax records; audit log | 8 years |
| Punch selfies | 180 days |
| Raw GPS | 90 days |
| Face templates | Until consent is withdrawn, or exit + 30 days |
| Ex-employee master | Statutory minimum, then erased or anonymised |
12.8 Data residency
All tenant data is stored and processed in India (architecture.md §7). The sub-processor list is published, and clients get 30 days' notice before a new sub-processor is added. Processing outside India needs the client's written agreement.
13. Reporting requirements
| # | Report | Audience | Frequency | Format | Rel |
|---|
| 1 | Headcount and movement | org_owner, hr_manager | Monthly | Dash, XLSX | R1 |
| 2 | Employee master (choose columns) | hr_manager | On demand | XLSX/CSV | R1 [Observed] SP-RPT-01 |
| 3 | Today's attendance | line_manager, hr_manager | Daily | Dash | R1 [Observed] SP-ATT-16 |
| 4 | Monthly attendance register | hr_manager, auditor | Monthly | XLSX, PDF | R1 [Observed-SS] §21.3 |
| 5 | Late, missed-punch and regularization | line_manager | Weekly | XLSX | R1 |
| 6 | OT, extra days, penalties | hr_manager, payroll_manager | Monthly | XLSX | R1 |
| 7 | Leave balance and ledger | employee, hr_manager | On demand | Dash, XLSX | R1 |
| 8 | Payable days and LOP bridge | payroll_manager | Per run | XLSX | R1 [Observed] SP-PAY-13 |
| 9 | Payroll register; variance vs last run | payroll_manager, finance_admin, auditor | Per run | XLSX, PDF | R1 |
| 10 | Bank file and bank-wise summary | payroll_manager | Per run | Bank CSV/TXT | R1 |
| 11 | EPF ECR; ESI contribution | payroll_manager | Monthly | Portal format | R1 |
| 12 | PT and LWF return data by state | payroll_manager | Per state | XLSX | R1 |
| 13 | TDS computation (own sheet for employees) | payroll_manager, employee | Monthly | XLSX, PDF | R1 |
| 14 | Payslip | employee | Monthly | PDF (protected) | R1 |
| 15 | Audit log | auditor, org_owner | On demand | CSV | R1 |
| 16 | Platform health, usage, MRR, trial funnel | Founders, platform_admin, CS | Weekly | Console | R1 |
| 17 | Quarterly TDS return data; Form 16 (or successors) | finance_admin; employee | Quarterly; annual | Portal format; PDF | R2 |
| 18 | Statutory registers (wages, attendance, leave, OT) | auditor, hr_manager | Monthly | PDF | R2 |
| 19 | Payroll journal | finance_admin | Per run | Tally XML, CSV | R2 |
| 20 | Claims status, settlement ratio, paid by category | payroll_manager | Monthly | Dash | R2 [Observed] §9 |
| 21 | Separation register; F&F statement | hr_manager, employee | Per event | PDF, XLSX | R2 |
| 22 | Gratuity and leave-encashment liability | finance_admin | Quarterly | XLSX | R2 |
| 23 | Consent register (face, GPS) | hr_admin, auditor | On demand | CSV | R2/R3 |
| 24 | Field activity, tracking log, km | sales_manager | Daily | Dash, XLSX | R3 [Observed] (M: CRM) |
| 25 | Pipeline, lead ageing, collections | sales_manager | Weekly | Dash | R3 |
| 26 | Timesheet defaulters, effort variance, bench | line_manager, org_owner | Weekly | Dash, XLSX | R3 [Observed] (M, SA: Time Sheet) |
| 27 | Mandatory-training compliance | hr_manager | Monthly | XLSX | R4 |
| 28 | Attrition, absenteeism, OT and payroll cost trends | org_owner | Monthly | Dash | R4 |
Scheduled delivery of any report arrives in R2 (BR-RPT-04).
14. Compliance and legal requirements
Verify with counsel. This is a business summary, not legal advice. Central and state Labour Code rules, DPDP Rules timelines and the mapping to the Income-tax Act, 2025 were still settling when this was drafted. The adviser must confirm every rate, threshold, form name and due date before a statutory pack is published, and review them every quarter.
| Law | What Spyrl must enable | Refs | Rel |
|---|
| DPDP Act 2023 and DPDP Rules. The client is the Data Fiduciary; Spyrl is the Data Processor. | A DPA with each client; notices; purpose tags; consent records for face and GPS, which policy keeps consent-gated even where employment is a legitimate use; access, correction and erasure requests; retention schedules; breach notice to the client within 24 h (internal target) so the client can notify the Board and data principals; safeguards; sub-processor list; India residency | BR-PLT-08, BR-IAM-05/06, RULE-FFM-01, RULE-ATT-13 | R0–R3 |
| Labour Codes (Wages 2019, Social Security 2020, Industrial Relations 2020, OSH 2020), as their rules are notified | Configurable "wages" definition (the 50% test); payment and F&F timing; deduction cap; OT limits; leave with wages; registers and returns; gratuity for fixed-term staff | RULE-PAY-05, -11, RULE-ATT-09, RULE-EXT-03/04, BR-RPT-06 | R1–R2 |
| EPF & MP Act 1952 (moving under the Social Security Code) | Contributions, EDLI and admin charges; UAN; ECR; opt-outs | RULE-PAY-05, BR-PAY-05 | R1 |
| ESI Act 1948 | Coverage by contribution period; state codes; monthly file | RULE-PAY-06 | R1 |
| State Professional Tax | State slabs, frequency, special months, registration per state | RULE-PAY-08 | R1 |
| State Labour Welfare Fund | Amounts and deduction months per state | RULE-PAY-09 | R1 |
| Income-tax Act: salary TDS (Sec 192 of the 1961 Act; its successor provision in the Income-tax Act, 2025 from 1 April 2026) | Regime choice, declarations and proofs, monthly TDS, quarterly return data, annual certificate. Section numbers and form names live in the statutory pack, not in code | RULE-PAY-10, BR-PAY-04, BR-PAY-11 | R1–R2 |
| Payment of Gratuity Act 1972 | Eligibility, formula and ceiling; F&F payout; liability reports; never deducted from employees | RULE-EXT-03, RULE-PAY-16 | R2 |
| Maternity Benefit Act 1961 (moving under the Social Security Code) | Leave weeks by child count; adopting and commissioning mothers; the 80-day eligibility test. Eligibility must not depend on marital status. | RULE-LVE-11, BR-LVE-06 | R1 |
| Payment of Bonus Act 1965; minimum wages (both under the Code on Wages) | Bonus within the statutory band; warnings when pay falls below the minimum | BR-PAY-15 | R2 |
| State Shops & Establishments Acts | Registration per location; weekly holiday, hours and OT limits by state; state leave templates; registers | BR-ORG-01, BR-LVE-09, BR-RPT-06 | R1–R2 |
| IT Act 2000 and SPDI Rules | Reasonable security practices | BR-IAM-05/06 | R0 |
| GST (Spyrl's own invoices) | Compliant invoices that show the client's GSTIN | BR-PLT-03 | R1 |
15. Commercial model
This is the business view. The mechanics are in architecture.md §14, where ADR-013 is still Proposed. Prices are indicative and exclude GST; they must be validated before launch (A7).
| Plan | Modules | Indicative PEPM | Min / month | Limit | Support · uptime |
|---|
| Lite | Attendance, basic leave, simple payroll with EPF/ESI/PT, payslips | ₹39 | ₹999 | ≤ 50 employees | Lite · 99.5% target |
| Standard | EMP, ATT, LVE, full PAY + TDS, ESS/MSS app, standard reports, OIDC SSO | ₹69 | ₹2,999 | ≤ 1,000 | Standard · 99.5% target |
| Professional | Standard + CLM, EXT/F&F, ENG, kiosk, API/webhooks, scheduled reports, multi-entity, custom fields | ₹109 | ₹7,999 | ≤ 2,500 | Professional · 99.5% SLA |
| Enterprise | Professional + dedicated cell option, custom domain, SAML, sandbox, audit export, managed implementation | From ₹149 (annual contract) | Quoted | Custom | Enterprise · 99.9% SLA |
| Add-on | Unit | Indicative price |
|---|
| Field Force | Per tracked user per month | ₹199 |
| Timesheets / LMS | PEPM | ₹29 / ₹39 |
| Face verification | Per enrolled employee per month | ₹15 |
| SMS / WhatsApp | Per message | Pass-through + margin |
| Storage | Per 10 GB per month | ₹299 |
| Dedicated cell; Managed implementation | Per month; one-time | Quoted |
| Assisted implementation | One-time | ₹15,000–50,000 |
Rules:
- Billing: follows RULE-PLT-02. Annual prepayment gets 15% off.
- Plan changes: upgrades apply immediately, pro-rated; downgrades apply at the next term.
- Add-ons: need Standard or above (face verification is also available on Lite).
- Trial: 14 days of Professional plus Field Force (a "reverse trial"), limited per RULE-PLT-04. Configuration and data carry over on conversion.
- Implementation fees: must at least cover their delivery cost, so they never erode BO-04.
16. Risks (business level)
IDs RSK-01 to RSK-15 follow the register in project-plan.md, which owns risks. RSK-16 to RSK-18 are business risks this BRD proposes adding to that register. The table shows only the risks with a business-level impact.
| ID | Risk | L | I | Business mitigation | BO |
|---|
| RSK-01 | Payroll errors reach employees | M | Critical | Deterministic engine, golden tests, parallel runs, variance checks, lock, SoD | BO-02 |
| RSK-02 | Cross-tenant data leak | L | Critical | RLS + app checks + isolation tests; pen tests | BO-09 |
| RSK-04 | Statutory change (Labour Code rules, Income-tax Act 2025 forms, state slabs) outpaces our updates | H | M | Effective-dated packs; retained adviser; quarterly review | BO-06 |
| RSK-05 | Pilot clients will not share legacy payroll for parallel runs | M | H | Recruit 6–8 pilots to land 3–5; incentives; anonymised data agreements | BO-02 |
| RSK-06 | Scope creep and demands for custom code | H | M | Configuration first; productise behind flags | BO-05 |
| RSK-07 | Biometric device diversity slows go-lives | H | M | CSV/API first, gateway in R2, certified-device list | BO-01 |
| RSK-08 | OS background limits break tracking or drain batteries | H | M | Point-to-point mode, OS-sanctioned modes | BO-10 |
| RSK-09 | Face verification accuracy, spoofing or privacy complaints | M | H | Liveness, consent, templates not images, PIN fallback | BO-09 |
| RSK-10 | DPDP obligations under-estimated | M | H | Legal review; consent and retention built into the MVP | BO-09 |
| RSK-13 | Payroll and ops knowledge concentrated in a few people | M | H | Rules documented here, pairing, golden tests | BO-05 |
| RSK-14 | Price pressure from established Indian HRMS vendors | H | M | Lite plan, field-force niche, fast onboarding | BO-07 |
| RSK-16 | Implementation effort per tenant erodes margin | M | H | Wizard, templates, import toolkit, paid implementation packages | BO-01, BO-04 |
| RSK-17 | Incident in the payroll window | M | H | Freeze (RULE-PLT-03), extended support hours, canary waves | BO-02, BO-05 |
| RSK-18 | Low ESS or field adoption | M | M | One app, low-end device support, nudges, training | BO-03 |
17. Glossary
| Term | Meaning |
|---|
| Applicability | The conditions (location, department, designation, grade, employment type) that decide which policy version applies to an employee |
| Attendance window | The dates whose attendance feeds a payroll period (e.g. 26th–25th) |
| Cell | A deployable unit of the application, either pooled or dedicated |
| Comp-off | Leave earned by working on a week-off or holiday |
| CTC | Cost to company, including the employer's statutory contributions |
| DA / VDA | Dearness allowance / variable DA linked to the CPI |
| Data Fiduciary / Processor | DPDP roles: the client decides the purposes; Spyrl processes for the client |
| ECR | Electronic Challan cum Return, the monthly EPF file |
| Effective dating | Giving every record or policy version a start date so history can be reproduced |
| ESS / MSS | Employee / manager self-service |
| Extra day | A paid day earned under a designation's days-worked slab |
| F&F | Full-and-final settlement |
| LOP / LWD | Loss of pay / last working day |
| LWF / PT | Labour Welfare Fund / Professional Tax (state levies) |
| Payable days | The days salary is paid for in a period (RULE-PAY-01) |
| PEPM | Per employee per month |
| Permission | Short leave measured in minutes |
| Regularization | An approved correction of a missing or wrong punch |
| Sandwich leave | Counting the week-offs and holidays between two leave days as leave |
| Statutory pack | Centrally published, versioned statutory rates, slabs and formats |
| TDS | Tax deducted at source |
| UAN | EPF Universal Account Number |
| Week-off penalty | An unpaid week-off caused by absence on the working days next to it |
18. Traceability (BO → BR)
| BO | Business requirements |
|---|
| BO-01 | BR-PLT-01, BR-ORG-02, BR-ORG-03, BR-ORG-07, BR-EMP-01, BR-EMP-05, BR-ATT-01, BR-ATT-09, BR-LVE-01, BR-LVE-05, BR-PAY-13, BR-MOB-05 |
| BO-02 | BR-PAY-01, BR-PAY-02, BR-PAY-07, BR-PAY-08, BR-PAY-09, BR-PAY-10, BR-PAY-17, BR-ATT-02, BR-ATT-03, BR-ATT-05, BR-ATT-06, BR-ATT-07, BR-LVE-02, BR-LVE-03, BR-LVE-04, BR-IAM-07, BR-ORG-04, BR-EMP-04, BR-NTF-05, BR-PLT-10 |
| BO-03 | BR-MOB-02, BR-MOB-03, BR-MOB-04, BR-NTF-02, BR-NTF-03, BR-NTF-04, BR-ATT-04, BR-ATT-08, BR-LVE-07, BR-LVE-08, BR-EMP-06, BR-ENG-01, BR-ENG-02, BR-ENG-03, BR-RPT-02 |
| BO-04 | BR-PLT-02, BR-PLT-03, BR-PLT-05, BR-PLT-11, BR-MOB-01 |
| BO-05 | BR-PLT-04, BR-PLT-06, BR-ORG-06, BR-NTF-01, BR-NTF-06, BR-RPT-01 |
| BO-06 | BR-PLT-07, BR-PAY-03, BR-PAY-04, BR-PAY-05, BR-PAY-06, BR-PAY-11, BR-PAY-14, BR-PAY-15, BR-PAY-16, BR-LVE-06, BR-LVE-09, BR-RPT-06, BR-ORG-01, BR-ORG-08, BR-EXT-04, BR-LMS-01 |
| BO-07 | BR-PLT-09, BR-FFM-03, BR-TSM-01, BR-LMS-02, BR-RPT-05, BR-PAY-12, BR-PAY-14, BR-ATT-10 |
| BO-08 | BR-RPT-03, BR-RPT-04, BR-ORG-05, BR-EMP-02, BR-EMP-03, BR-EMP-07, BR-EMP-08, BR-EMP-09, BR-EXT-01, BR-EXT-02, BR-EXT-03, BR-EXT-05, BR-EXT-06, BR-EXT-07, BR-CLM-06, BR-TSM-02, BR-TSM-03, BR-TSM-04, BR-TSM-05, BR-LMS-03 |
| BO-09 | BR-PLT-08, BR-IAM-01, BR-IAM-02, BR-IAM-03, BR-IAM-04, BR-IAM-05, BR-IAM-06, BR-IAM-08, BR-FFM-01, BR-ORG-09 |
| BO-10 | BR-FFM-02, BR-FFM-04, BR-FFM-05, BR-FFM-06, BR-FFM-07, BR-FFM-08, BR-FFM-09, BR-CLM-01, BR-CLM-02, BR-CLM-03, BR-CLM-04, BR-CLM-05, BR-CLM-07, BR-CLM-08 |
Synced from /brd.md in the repository root. Edit the root file, not this page.