Salary structures, spreadsheets नहीं। structures.
एक PGT structure, एक TGT structure, एक PRT structure, एक non-teaching structure define करें — CTC bands, dependency-ordered components, statutory caps, और एक flexible-pay component के साथ जो residual को absorb करके CTC पर exactly land करता है। 5 minutes में 50 teachers को assign करें, April payroll 90 seconds में चलाएं।

Indian schools आज payroll कैसे assemble करते हैं
Indore CBSE school के HR head के पास 45 teaching staff हैं: 12 PGTs, 18 TGTs, 9 PRTs, 4 office staff, 2 lab assistants। हर March, वो पिछले साल का salary master खोलती है, new senior PGT में PGT row का formula structure copy करती है, PF cap break करती है, gratuity flag break करती है, और increment re-enter करती है। New TGT का HRA गलत आता है क्योंकि वो PGT का HRA percentage copy कर लेती है। April CTCs assign करते-करते, हर persona का structure official policy से drift कर जाता है।
October में जब state-aided staff के लिए Pay Commission revisions announce होती हैं (school में 6 grant-in-aid teachers UP government scale पर), उसे हर affected employee find करना पड़ता है, BASIC re-do करना पड़ता है, DA percentage re-do करना पड़ता है, और difference को arrears में reconcile करना पड़ता है। Structure एक copy-paste artefact था, template नहीं। अगले साल May में Form 16 4-day reconciliation exercise है।
एक salary structure एक template होना चाहिए — एक PGT structure, एक TGT structure, एक PRT structure, एक non-teaching structure, optionally एक transport staff या part-time visiting faculty के लिए। हर template आपके पहले से defined salary components को plug करता है, right calculation order में, right caps और statutory mappings के साथ। एक teacher को structure assign करें, उसकी CTC set करें, और system BASIC, DA, HRA, PF, ESI, PT, gratuity, TDS, और special allowance compute करता है — रुपए तक। Inkwelly के salary structures feature इसे declarative बनाते हैं।

Inkwelly का structure system कैसे काम करता है
एक salary structure 8 fields और attached components set से defined होता है। Employee Payroll → Settings → Salary Structures → New Structure खोलें।
1. Identity. Name ('Senior Teacher', 'TGT Standard'), code (STR-PGT-SR, STR-TGT), और optional description दें। Code uppercase, 2–50 chars, salary slips और audit logs में used।
2. Category. TEACHING, NON_TEACHING, ADMIN, SUPPORT, TRANSPORT, या PART_TIME में से pick करें। Categories default-structure resolution drive करती हैं: जब एक new TGT join करता है, system override न होने पर default TEACHING structure suggest करता है।
3. Pay grade (optional). State-aided schools में 6th/7th Pay Commission alignment के लिए एक Salary Grade (PGT-Senior, TGT-Standard, PRT, etc.) को link करें। Grade pay-level matrix carry करता है; structure component composition carry करता है।
4. CTC band. Optional ctcRangeMin और ctcRangeMax employee की offered CTC को fit करने वाली band enforce करते हैं। ₹7L पर TGT assign करने की कोशिश करें जब structure ₹4L–₹6L कहता है, और system warn करता है। यह mis-fitments को offer letter जाने से पहले catch करता है।
5. Effective dates. effectiveFrom required है (typically FY के लिए 1 April); effectiveTo ongoing validity के लिए empty रखा जाता है। जब आप structure revise करते हैं, आप old version पर effectiveTo set करते हैं और revision date से एक new structure create करते हैं।
6. Default + active flags. Per category एक structure isDefault के रूप में marked हो सकता है — जब आप एक new employee assign करते हैं तो auto-selected appear होता है। isActive historical payslips break किए बिना structures retire करता है।
7. Components attach करें. Structure में drill करें और 'Add Component' click करें। अपनी component library से pick करें, इस structure के लिए calculationType / base / value / caps override करें, calculationOrder set करें (BASIC के लिए 1, DA के लिए 2, HRA के लिए 3, PF के लिए 10, TDS के लिए 20), dependsOn declare करें (HRA BASIC पर depend करता है), isBase mark करें (per structure एक, typically BASIC) और optionally isFlexible (per structure एक, EARNING type होना चाहिए — typically Special Allowance)।
8. Flexible-pay closer. यह magic है। एक component (Special Allowance, Flexi Pay) को isFlexible: true से mark करें। Payrun पर, हर दूसरे earning को compute करने के बाद, engine gross को CTC से subtract करता है और residual को इस component को assign करता है। Total earnings हमेशा exactly CTC के साथ sum होता है — कोई off-by-one नहीं, कोई rounding drift नहीं, कोई manual reconciliation नहीं।
Structure में क्या-क्या होता है (building blocks)
- Category enum — TEACHING, NON_TEACHING, ADMIN, SUPPORT, TRANSPORT, PART_TIME (6 values, per persona default-structure resolution drive करते हैं)
- CTC range — fitment band enforce करता है; PGT ₹6L–₹9L, TGT ₹4L–₹6L, PRT ₹3L–₹4.5L, non-teaching ₹2.4L–₹3.6L
- Pay grade link — state-aided schools में 6th/7th Pay Commission pay-matrix alignment के लिए Salary Grade को optional FK
- Calculation order — positive integer; lower number = pehle compute। BASIC=1, DA=2, HRA=3 (BASIC+DA के बाद), PF=10, ESI=11, PT=12, TDS=20, NET-residual=99
- Dependency declaration —
dependsOncomponent codes का एक string array है; HRA का dependsOn=['BASIC'], PF का dependsOn=['BASIC','DA']। Validator save time पर CIRCULAR_DEPENDENCY catch करता है - isBase — per structure एक component base के रूप में marked (typically BASIC);
BASICreference करने वाले formula expressions इस component की value पर resolve होते हैं - isFlexible — per structure एक component flexible के रूप में marked (typically Special Allowance); CTC residual absorb करता है ताकि total earnings = CTC exactly। EARNING type होना चाहिए
- Min / max caps per component — PF ₹1,800/month पर capped (EPFO ceiling ₹15,000 का 12%), HRA metro 50% of Basic पर capped, gratuity formula सिर्फ Basic+DA respect करता है
- Effective-date versioning — structure revise करने पर revision date से एक new version create होता है; old payruns old version के साथ re-run होते हैं, new payruns new version use करते हैं
- Used होने पर audit-locked — एक भी employee को assigned structure hard-delete नहीं हो सकता; soft-delete historical payslip integrity preserve करता है
- Per category default — per category एक structure default mark हो सकता है; new TEACHING hires auto-suggest default teaching structure
इसे action में देखें




CTC fitment, structure पर enforced
अधिकतर ERPs CTC fitment enforce नहीं करते — आप ₹4L–₹6L के लिए बनाए गए TGT structure पर ₹7L का TGT offer कर सकते हैं, और system happily एक structure compute करता है जो school की policy reflect नहीं करता। तीन महीने बाद, auditor outlier flag करता है और principal explain नहीं कर सकता कि TGT PGT structure पर क्यों है।
Inkwelly का ctcRangeMin और ctcRangeMax assignment से पहले band enforce करता है। TGT structure पर ₹7L पर teacher onboard करने की कोशिश करें और form warn करता है: 'CTC outside structure band (₹4L–₹6L)। Pick a different structure, override with explicit reason, or escalate.' Override user, timestamp, और reason के साथ logged होता है। 'यह TGT ₹7L पर क्यों है?' का audit answer structure history में वहीं है।


Calculation order + dependsOn = हर बार correct payroll
Real payroll में dependencies होती हैं। HRA BASIC पर depend करता है (BASIC का 40%)। PF BASIC+DA पर depend करता है। ESI GROSS पर depend करता है (जो हर earning पर depend करता है)। TDS YTD taxable income पर depend करता है (जो हर taxable earning पर depend करता है)। Excel इसे row order से handle करता है; re-order करने पर spreadsheets break होते हैं।
Inkwelly structure level पर calculation order enforce करता है। BASIC को calcOrder=1 मिलता है, DA=2, HRA=3 (dependsOn: ['BASIC'] के साथ), PF=10 (dependsOn: ['BASIC', 'DA'] के साथ), TDS=20। Validator save पर errors catch करता है: HRA को calcOrder=1 और dependsOn: ['BASIC'] के साथ set करने की कोशिश करें, और INVALID_CALCULATION_ORDER मिलता है। Circular reference कोशिश करें (HRA → DA → HRA) और CIRCULAR_DEPENDENCY मिलता है। Payroll math audits survive करता है।
Flexible pay — magic जो CTC पर exactly land करती है
Indian payroll में एक peculiar requirement है: सभी earnings का total CTC के बराबर होना चाहिए। Basic + DA + HRA + PF (employer share) + medical + LTA + special allowance = CTC, रुपए तक। 50 teachers के लिए manually special allowance compute करना मतलब हर एक के लिए CTC से छह numbers subtract करना — एक exhausting, error-prone routine।
Inkwelly का isFlexible: true flag (per structure exactly एक EARNING component पर allowed) इसे automate करता है। Payrun engine BASIC, DA, HRA, employer PF, medical, LTA compute करता है — sums करता है — और residual (CTC − sum) flexible component को assign करता है। दूसरा component flexible mark करने की कोशिश करें और DUPLICATE_FLEXIBLE_COMPONENT मिलता है। DEDUCTION को flexible mark करने की कोशिश करें और INVALID_FLEXIBLE_COMPONENT_TYPE मिलता है। Math हर बार exactly close होता है।


Versioning — September policy revision, no rebuild
Government-aided schools हर 2–3 साल में structure revisions देखते हैं — 6th से 7th Pay Commission, हर 6 महीने DA revisions, gratuity ceiling changes (₹20L से ₹25L table पर है)। एक school जो अपने structures version नहीं कर सकता — उसे हर employee, हर payslip, हर Form 16 manually migrate करना पड़ता है।
Inkwelly का effectiveFrom और effectiveTo dates इसे declarative बनाते हैं। जब September में DA revise होता है, आप old TGT structure पर effectiveTo: 2026-08-31 set करते हैं और 2026-09-01 से एक new TGT structure create करते हैं। August तक के payruns old version use करते हैं (5% DA); September से new (7% DA)। May में next year Form 16 dono phases automatically aggregate करता है। August का payrun re-run करने पर August के numbers reproduce होते हैं; September चलाने पर September के। कोई retroactive edits नहीं, कोई audit drift नहीं, कोई consultant call नहीं।
“PGT, TGT, PRT, non-teaching — char structure banaye, ek baar. Ab naye TGT ka April CTC enter kiya, structure assign kiya, payroll khud chal gayi. Pichle saal yeh kaam mein 3 din lagte the.”
Real-world use cases — पांच scenarios जो वाकई होते हैं
1. नया school 4 personas के साथ Excel से onboard होता है। Indore CBSE school March-2026 में 45 staff के साथ onboard करता है: 12 PGTs, 18 TGTs, 9 PRTs, 6 non-teaching। HR head 25 minutes में 4 structures create करता है: STR-PGT-SR (TEACHING, CTC ₹6L–₹9L), STR-TGT (TEACHING, default, ₹4L–₹6L), STR-PRT (TEACHING, ₹3L–₹4.5L), STR-NTS (NON_TEACHING, ₹2.4L–₹3.6L)। हर teacher को उसकी structure assign करता है, CTC enter करता है। April payrun 90 seconds में चलता है, सभी 45 payslips CTC पर reconciled।
2. नया TGT ₹5.4L पर mid-year में join करता है। November intake — एक new TGT ₹5.4L पर join करता है। Payroll STR-TGT pick करता है (TEACHING category के लिए default), CTC को ₹4L–₹6L band के अंदर देखता है, November payslip 2 seconds में compute करता है। BASIC=CTC का 40%, DA=BASIC का 10%, HRA=BASIC का 40%, PF ₹1,800 पर capped, special allowance residual को ₹45,000 monthly पर absorb करता है। कोई Excel नहीं, कोई template-copy नहीं।
3. State-aided school 7th Pay Commission revision apply करता है।
UP state-aided school जिसमें 8 grant-in-aid teachers हैं, उन 8 staff के लिए UP-government 2026 DA revision 36% से 38% apply करना है। HR head STR-AIDED-PGT खोलता है, effectiveTo: 2026-06-30 set करता है, और 2026-07-01 effective DA 38% के साथ STR-AIDED-PGT-V2 create करता है। July payroll re-run — 8 affected staff को new DA मिलता है। arrears module के through April–June के लिए arrears generate होते हैं।
4. School chain expand करता है और structures inherit करता है। October में school chain Bengaluru में branch खोलता है। Pune HQ में पहले से 4 structures हैं। Bengaluru Karnataka-specific PT, ESI, और थोड़ा different HRA percentage add करता है। HR head STR-TGT को STR-TGT-BLR में duplicate करता है, HRA 40% (Pune metro) से 50% (Bengaluru भी metro) पर edit करता है, और Bengaluru staff को assign करता है। Pune structures untouched रहती हैं। दो cities, एक consistent payroll engine।
5. Structure decommission — audit lockdown।
2024 में since-departed visiting faculty cohort के लिए used एक structure को retire करना है। HR head isActive: false set करता है। Newly assigned employees dropdowns में इस structure को नहीं देखते। 2024 के payslips अभी भी इसे reference करते हैं (audit-correct)। FK references के कारण hard-delete blocked है। 2027 में auditor अभी भी 2024 payslip से उस structure में drill कर सकता है जिसने इसे produce किया।
Common operations जो HR office चलाता है
- एक new structure create करें — dialog name, code, category, grade, CTC band, dates, default/active toggles के साथ
- Structure detail में drill करें — calculation order में attached components, caps, dependsOn, formulas के साथ
- Structure में एक component add करें — library से pick करें, calc type / base / value / caps / order / dependsOn / isBase / isFlexible override करें
calculationOrderसे components reorder करें — update करने के लिए drag करें; validator dependency conflicts catch करता है- Structure duplicate करें — right-click → Duplicate → differences edit करें (state-specific variants के लिए perfect)
- Category के लिए
isDefault: truemark करें — new hires इस structure पर auto-resolve होते हैं - Structure soft-delete करें (
isActive: false) — new assignments से retire करता है, historical payslips preserve करता है - Structure name (
'Senior Teacher') या code (STR-PGT-SR) से search करें - Category (TEACHING / NON_TEACHING / ADMIN / SUPPORT / TRANSPORT / PART_TIME) से filter करें
- हर structure पर 'Used by N employees' देखें — assignment list देखने के लिए click करें
- Backup या किसी दूसरे org में migration के लिए structure + components को JSON के रूप में export करें
- एक structure की version history देखें — किसने क्या edit किया, कब देखें
30 minutes में अपने school के structures built देखें
हम demo में PGT, TGT, PRT, non-teaching, और (अगर state-aided हैं) एक 7th Pay Commission grade-aligned structure pre-build करते हैं। आप 50 staff के लिए April payroll 90 seconds में देखते हैं।
Limits, safety, और small print
Structures definitions के लिए org-scoped हैं लेकिन payrun time पर school-resolved हैं। 4 branches वाला school chain same structure library use करता है; हर branch का payrun school के registered state को read करता है, right PT slab apply करता है, और हर employee को assigned structure use करता है। Per-school structure variations (Bengaluru-specific HRA, Mumbai-specific LWF) same structure पर per-school overrides की जगह separate structures (STR-TGT-BLR, STR-TGT-MUM) create करके handle होते हैं।
Structures strict effective-date versioning use करते हैं। जब structure revise होता है, आप existing record edit नहीं करते — आप effectiveTo set करते हैं और एक new version create करते हैं। Payruns हमेशा वो structure version read करते हैं जिसका effective period payrun के payDate को contain करता है। यह audit-correctness contract है: पिछले June का payrun re-run करने पर पिछले June के numbers reproduce होने चाहिए, आज के नहीं।
isBase flag per structure unique है, per org नहीं। हर structure में exactly एक base component है (typically BASIC), और उस structure के अंदर BASIC reference करने वाले formula expressions structure के base पर resolve होते हैं। System दूसरा try करने पर DUPLICATE_BASE_COMPONENT enforce करता है।
isFlexible flag per structure unique है, type EARNING वाले component पर होना चाहिए, और payrun time पर 'CTC पर land करने के लिए residual absorb' logic trigger करता है। DEDUCTION को flexible mark करने की कोशिश करें और INVALID_FLEXIBLE_COMPONENT_TYPE मिलता है। दूसरा component flexible mark करने की कोशिश करें और DUPLICATE_FLEXIBLE_COMPONENT मिलता है। Flexible component के बिना, structure को CTC पर hand-balance करना पड़ता है, जो brittle है — हमेशा एक include करें।
हर structure component पर dependsOn array save time पर enforce होता है। Components structure में exist होने चाहिए (नहीं तो INVALID_DEPENDS_ON)। Calculation order हर dependency के order से greater होना चाहिए (नहीं तो INVALID_CALCULATION_ORDER)। Circular dependencies immediately reject होती हैं (CIRCULAR_DEPENDENCY)। यह intentionally aggressive validation है — silent dependency bugs payroll को किसी भी दूसरे class of error से faster ruin करते हैं।
एक भी employee को कभी assign होने वाला structure hard-delete नहीं हो सकता। Backend soft-delete return करता है (isActive: false) और history preserve करता है। यह payroll.employeeSalary.structureId और payslip.structureVersionSnapshot पर FK constraints से enforced है। 2027 में auditor 2024 का payslip देखकर हमेशा वो exact structure देखेगा जिसने इसे produce किया।
10 से कम employees वाले schools के लिए, एक single structure काफी हो सकता है। 4-structure model (PGT/TGT/PRT/non-teaching) 30–300 staff वाले schools के लिए optimum है। 300 से ऊपर, 6–8 structures consider करें (TEACHING को class group से split करें, ADMIN को function से) ताकि हर एक genuinely band-of-band हो, one-size-fits-all नहीं।
किस मॉड्यूल का हिस्सा
1 moduleअक्सर पूछे गए सवाल
8 सवालएक typical Indian school को कितने salary structures चाहिए?
अधिकतर schools 4 structures पर land करते हैं: PGT (Senior Teaching), TGT (Trained Graduate Teaching), PRT (Primary Teaching), और Non-Teaching। अगर buses हैं तो transport staff के लिए 5वां add करें, अगर part-time visiting faculty हैं तो 6वां। Grant-in-aid staff वाले state-aided schools government pay-matrix के लिए 1–2 और add करते हैं।
'flexible component' क्या है और मुझे चाहिए क्यों?
Indian payroll को total earnings CTC के बराबर चाहिए, रुपए तक। एक flexible component (typically Special Allowance) हर दूसरे earning के compute होने के बाद residual absorb करता है, ताकि math exactly close हो। हर structure में exactly एक component `isFlexible: true` marked हो सकता है, और वो EARNING type होना चाहिए। इसके बिना, आप हर payslip को CTC पर hand-balance करते — brittle, error-prone, audit-vulnerable।
Inkwelly calculation order और dependencies कैसे enforce करता है?
हर structure component में एक `calculationOrder` (positive integer) और component codes का एक optional `dependsOn` array है। Validator save time पर तीन rules enforce करता है: हर dependency structure में exist होनी चाहिए (`INVALID_DEPENDS_ON`), order हर dependency के order से greater होना चाहिए (`INVALID_CALCULATION_ORDER`), और dependency graph acyclic होना चाहिए (`CIRCULAR_DEPENDENCY`)। Payrun time पर, engine components को topologically sort करता है और right order में evaluate करता है।
क्या Pay Commission update के लिए structure mid-year revise हो सकता है?
हां, effective-date versioning के through। Old structure पर `effectiveTo` को revision से एक day पहले set करें, और revision date से एक new structure create करें। Payruns हमेशा वो structure version read करते हैं जिसका effective period payrun के payDate को contain करता है। Old payrun re-run old numbers reproduce करता है; new payruns new numbers use करते हैं। कोई retroactive edits नहीं।
क्या मैं अपने organisation के एकाधिक schools across salary structures share कर सकता हूं?
Structures org-scoped हैं — library shared है। हर school का payrun हर employee को assigned structure read करता है। State-specific variations (Bengaluru HRA percentage, Mumbai LWF) same structure पर per-school overrides की जगह separate structures (STR-TGT-BLR, STR-TGT-MUM) create करके handle होते हैं।
Salary Grade क्या है और मुझे एक से link कब करना चाहिए?
Salary Grades 6th/7th Pay Commission alignment में used pay-matrix levels (PGT-Senior Level 9, TGT-Standard Level 7) carry करती हैं। Grant-in-aid teachers वाले state-aided schools को अपनी structures को right grade से link करना चाहिए ताकि pay-matrix progression auto-applied हो। शुद्ध private schools grade field ignore कर सकते हैं।
अगर मैं payroll में पहले से used structure delete करने की कोशिश करूं तो क्या होता है?
Backend hard-delete block करता है और soft-delete (`isActive: false`) perform करता है। Structure new assignment dropdowns में appear होना बंद होजाता है, लेकिन हर उस payslip पर visible रहता है जिसने इसे reference किया। Audit trail preserved है — 2027 का auditor 2024 का payslip देखकर अभी भी उस exact structure में drill कर सकता है जिसने इसे produce किया।
System structure की band के outside CTC fitment को कैसे handle करता है?
Form warn करता है: *'CTC outside structure band'*। आप explicit reason (logged) के साथ override कर सकते हैं, एक different structure pick कर सकते हैं, या escalate कर सकते हैं। Soft-blocking hard-blocking की जगह intentional है — schools कभी-कभी star teachers के लिए exceptions बनाते हैं — लेकिन हर override timestamped और attributable है।
आपको ये भी पसंद आ सकता है
2 लेखInkwelly आपके स्कूल पर — खुद देखें
30 मिनट का डेमो। आपके मौजूदा ERP को आपके साथ खोलकर, कॉल पर ही आपका डेटा Inkwelly में लोड करते हैं। कॉल ख़त्म होते-होते एक तय तारीख़ का गो-लाइव प्लान आपके हाथ में।