Payroll that holds up
to Pakistan's rulebook.
PrimeForce runs the employee lifecycle end to end and calculates pay against FBR slabs, EOBI, PESSI and SESSI, gratuity, provident fund and Zakat — from effective-dated rate tables, not hand-maintained spreadsheet formulas. Then it posts the journal entries into SAP Business One.
Multi-tenant · Hosted · SQL Server
Every rate table effective-dated. Every run auditable. Every posting traceable.
MAR-2026
One system, from the employee record to the journal entry.
Nine modules on a shared multi-tenant core. Sub-modules are licensed individually, so a company only sees and pays for what its plan includes.
Human Resources
The employee master is the spine of the product. Create and maintain employee records, attach the salary card that drives payroll, and action confirmations, transfers and exits from the Lifecycle Dashboard rather than burying them in a form.
- Effective-dated salary card — a raise is a new row
- Around 20 employee sub-records: documents, dependents, education, skills
- CNIC uniqueness enforced per company
- Separation types carry gratuity and notice rules
- Final settlement closes the loop
Organization
Build the company tree, then the job architecture that grades and designations hang off, then the individual positions employees occupy — structure, job architecture and position management as three connected sections.
- Self-referencing org units, departments, cost centres
- Versioned job descriptions
- Pay bands per profile, grade and country
- Vacancy dashboard — positions with no incumbent
Payroll
Configure pay components and the formulas that value them, group employees into pay groups with their own policies, then execute a run plan period by period. The largest module in the product.
- Multi-step formula engine with bound variables
- Simulate a run, then compare Sim vs Actual
- Input staging and immutable input snapshots
- Numbered recalculation history per run
- Cost-centre splitting at pay-line level
Tax & Statutory
Maintain the rate tables Pakistan's regime runs on, register employees with EOBI, administer gratuity and provident fund schemes, and produce the monthly FBR challan and annual tax certificates.
- Every rate table versioned by effective date
- Gratuity withdrawal availability calculator
- Withdrawals net against final settlement
- YTD override for mid-year joiners
- Exemption certificates and withholding agents
Leave Management
Define leave types and the policies that grant them, publish holiday calendars and the working week, then process applications against live balances. Accrual runs monthly without anyone touching it.
- Policy resolution by grade and tenure band
- Automatic monthly accrual
- Day-level applications — half-days are exact
- Year-end carry forward with its own log
- Encashment protected against double submission
Workflow
A generic approval engine the other modules delegate to. Define steps, participants, triggers and applicability once; any document type that opts in routes through it. People action their queue from My Tasks.
- Definitions you author, not hard-coded chains
- Escalation on a timer, every 15 minutes
- Delegation with automatic expiry
- Full transition and step-evaluation logs
- Standalone tasks with progress milestones
Service Calls
Field technicians log service calls that post into SAP Business One as service call documents. The only part of the product that captures offline — drafts queue on the device and upload when the connection returns.
- Offline capture, keyed so nothing duplicates
- Server-side queue, drained to SAP every 60s
- Progress re-sync, because SAP users edit remarks
- Location captured at submit
- Posting Monitor reads without calling SAP
Reports
Twenty-two built reports across payroll, pay run and leave — including the two that exist for finance rather than HR: Leave Liability and Pay Variance.
- Pay Register, Pay Summary by Dept, Bank Disbursement
- Overtime, Deduction Register, YTD Earnings
- Run Exceptions and Sim vs Actual
- Leave balance, utilisation, liability, carry forward
- PDF and Excel export on every report
Administration
Company admins manage their own users and role grants and configure the SAP connection. Platform staff provision new companies, manage plans and maintain global reference data.
- Permission catalogue grouped module → sub-module → verb
- New companies cloned from a complete blueprint
- SAP B1 config, GL mapping, credit accounts
- Reference data: countries, provinces, cities, banks
Six stages. Nothing skipped,
nothing overwritten.
A run plan sets the schedule; a payroll run is one execution against one period and scope. Every stage leaves a record behind, which is what makes the result defensible six months later.
Stage inputs
Attendance, calendar days, leave, overtime and performance land in separate staging tables — one row per employee per run.
Simulate
Run the calculation without committing it. The simulation mirrors the real model line for line, so Sim vs Actual is a true comparison.
Execute
Inputs are snapshotted immutably. Each employee gets one pay line, each pay line its component lines, each component line its cost-centre split.
Review exceptions
Failures surface as run exceptions instead of silently zeroing a figure. Fix and recalculate — every recalculation is numbered and kept.
Approve
Multi-level approval with a compliance checklist per run. Mid-period changes are handled as salary slices, not a retroactive overwrite.
Disburse & post
Payslips issue, a bank file exports in your bank's format, and the GL journal entry posts to SAP Business One against your account map.
A rate change is a new row, not an edit.
Minimum wage history, EOBI rates, FBR slabs and tax rules are all versioned by effective date. Change a rate today and last quarter still computes on last quarter's numbers — which is the only way a correction or an audit ever comes out right.
- PESSI and SESSI held as separate contribution tables, with province mapped per payroll configuration
- Gratuity withdrawal availability returns completed years, years already withdrawn, years retained for settlement and the resolved monthly basis
- Withdrawals net against final settlement and refuse deletion once netted
- Provident fund runs its own chain: policy, challan, balance, withdrawal, append-only ledger
- Opening entries and YTD overrides absorb balances from whatever you used before
Policy GRAT-STD-2024
Completed years 7.42
Years withdrawn 2.00
Retained for settlement 1.00
Available years 4.42
Monthly basis (resolved) 180,000.00
Available amount 795,600.00
Effective 09-Mar-2026
Status DRAFT → SUBMITTED → APPROVED
JE 4471 Date 09-Apr-2026
Dr Salaries & Wages CC-HO-001 297,000.00
Dr EOBI Employer CC-HO-001 1,850.00
Dr Gratuity Expense CC-HO-001 15,000.00
Cr Income Tax Payable 21,916.67
Cr EOBI Payable 2,220.00
Cr PF Payable 18,000.00
Cr Gratuity Provision 15,000.00
Cr Net Salary Payable 256,713.33
Your ledger already exists.
Payroll should post into it.
PrimeForce talks to SAP Business One over the Service Layer. Payroll runs post GL journal entries against account maps you configure per pay component — including SAP's segmented account numbers — and cost-centre splits at pay-line level are what make those entries mean anything to finance.
- GL account mapping and credit account mapping, per company
- Field service calls post as SAP service call documents, queued and drained rather than posted synchronously
- Posting Monitor tracks each document's state and re-syncs SAP progress notes
- SAP credentials encrypted at rest with AES-256
Running payroll and SAP Business One posting for Sayeed International.
Authorization that fails closed.
Payroll data is salary data, CNICs and bank accounts. The permission model is the part of this system we would point at first in a security review.
256 permissions, four checks deep
Permissions read Module.SubModule.Verb. After the permission check, three more filters run: is this sub-module in the company’s plan, is this the caller’s own record, and does the payload validate.
Unguarded endpoints are denied
An endpoint nobody remembered to annotate returns 403 and logs a misconfiguration warning. Forgetting to guard something denies access instead of granting it.
Verified at every boot
Startup scans every action for unguarded employee parameters and logs each as a security error, then pushes any newly added permission to every existing company administrator.
Row-level security in the database
SQL Server row-level security with filter and block predicates on 23 leave and payroll-run tables, evaluated against the session's company — below the application, not inside it.
An audit log that can't be rolled back
Audit rows are written on their own transaction, so a failure in the audit sink can never roll back the operation it was recording. Blocked actions leave a row too.
Sessions you can see and revoke
Access tokens last 15 minutes and refresh rotates. Each device holds its own session, listed and individually revocable. Accounts lock after five failed sign-ins.
Multi-factor authentication, single sign-on, and email delivery of payslips and approval notifications are not in the product today — notifications are in-app, and password resets are administrator-initiated. We would rather tell you here than have you find it in a security questionnaire. The mobile app is Android, distributed as a signed APK.
Scoped per company,
enforced by the software.
Headcount, user seats, branches and the module set are agreed per company — and entitlement is enforced twice over: the navigation hides what your plan does not include, and the API refuses it.
Enforcement is not a billing exercise. Every request is checked against your plan before it reaches any data, and a module you are not entitled to is refused by the API — not merely hidden from the menu.
2 Password change due? middleware
3 Has permission? Module.Sub.Verb
4 Module in your plan? entitlement
5 Own record? ownership
6 Payload valid? validation
any failure → 403, logged
Scoped per company
Headcount, user seats, branches and the module set are agreed per company and written into your plan. Nothing is bundled that you will not use.
Two independent checks
Permission asks whether a user may do something. Entitlement asks whether your plan includes it at all. Both must pass — an administrator with every permission still cannot reach a module the plan does not cover.
Caps are counted, not trusted
Creating a user or an employee counts your current total against the plan limit first and refuses at the ceiling. No limit means unlimited.
For the person in the room who asks what it's built on.
Bring one real
payroll period.
The fastest way to judge this is to watch it calculate a month you already know the answer to. Bring a period you've closed, and we'll configure the components, run it, and show you the variance against your own figures.
- Your pay components and formulas, configured live in the session
- The statutory stack applied — FBR, EOBI, provincial social security, gratuity, PF
- A journal entry against a sample SAP Business One account map
- An honest scope conversation about what we don't do yet