Stakeholder dashboard. Enter password to continue.
Gopal Ji Memorial School
Stakeholder Dashboard · finance live · student data snapshot
Loading…—
—
live roster
—
—
—
this session, unpaid
—
—
—
—
—
—
—
—
Needs Attention
Loading…
—
—
—
—
—
—
—
period total
—
cash + UPI
—
manual entries
—
period total
—
UPI / BharatPe
Last 30 Days · Income vs Expense
Income Sources
Target ₹72L tracker — waiting for live data
Sign in with the dashboard password (top right) to load the FY2026-27 profit-plan numbers from D1.
Projected FY2026-27 net
—
—
—
—
—
—
—
—
—
—
—
to still hit ₹72L
Cumulative Net — Plan vs Actual
Monthly Plan vs Actual
Month
Income target
Income actual
Expense target
Opex actual
Net target
Net actual
Δ net
Values in ₹ lakh (÷1,00,000), 1 decimal. Current month tagged MTD; future months show — for actuals.
Where it's leaking
Top operating heads FY-to-date. Flagged when a head has already outrun ~⅓ of its fair share of the ₹46L/yr non-salary budget.
Excluded from operating (CA reclass pending)
Shown separately; ledger as-booked — not netted out of the income/opex numbers above until the CA confirms the reclass.
What moves the needle
↓ Below this point: a point-in-time ERP ledger snapshot (see the freshness bar above for its age) — not live. For always-current figures use the "LIVE" card above and the Collections tab.
—
—
—
—
—
surplus / deficit
—
period total
Daily Income vs Expense
Top Expense Categories
—
period total
—
—
—
—
—
notes & coins
—
digital
Daily Cash vs UPI
Payment Mode Mix
Income by Source
Collections by Date Range
—
—
—
—
—
—
—
—
—
—
income − expense
—
days with activity
Date
Income
Expense
Tuition
Transport
All Students — Fees · Marks · Attendance · App Activity
—
Class
Adm No
Name
Payable Now
Full-Session Due
Marks Avg %
Failing Subjects
RFID Tap Coverage (30d)
App Last Login
—
all classes
—
—
—
distinct
—
students
Students per Class
Class Strength Table
Class
Students
Dues data not yet available. The school ERP's dues report uses an interactive form that needs more setup before it can be auto-scraped. For now, please use the ERP's Fees → Balance Details page directly. Or click "Manual Update" below to push the latest dues snapshot.
—
—
—
2025-26 carry-forward
—
2026-27 unpaid
—
prev + current, WHOLE 2026-27 year — budget context, not a call-list number
—
what's actually due today — quote THIS on calls
—
—
—
2026-27 budget (full year, context only)
—
enrolled vs left split
By Fee Category
Source: dues-by-category.json · —
—
across all categories
—
distinct fee groups
—
RTE + Staff
—
3rd child & bhatta
Category
Students
Annual Fee
Paid
Current Dues
Discount
Student Dues
—
Class
Adm No
Student
Father
Phone
Prev (₹)
Current (₹)
Total (₹)
Monthly fee data not yet available. The scraper will populate it on the next GitHub Actions run (every 30 min). Until then, this view shows placeholder rows seeded from the dues snapshot.
—
—
—
—
—
—
—
—
—
—
—
expected this month
—
—
—
incl. carryover + prev year
Student Payment Status
For the selected month: Month Fee = annual fee ÷ 12. Paid is allocated sequentially — April first, then May. Prior months pending = unpaid balance from earlier months in this session (April unpaid carries into May, etc.). Total Due = this month's remaining + prior months pending + previous year dues — the full amount the parent owes when you call them.
—
Class
Adm No
Student
Father
Phone
Month Fee (₹)
Paid (₹)
Remaining (₹)
Status
Prior Months Pending (₹)
Prev Year Dues (₹)
Total Due (₹)
Village data not loaded. Make sure /villages.json deployed.
—
within 22 km of Reoti
—
Census 2011
—
@22% of pop
—
—
—
of school-age kids
—
market opportunity
By Corridor
Direction-grouped to plan transport routes. South + SE + West/SW are mostly unexplored.
Corridor
Villages
Population
School-age kids
GJMS students
Capture %
Untapped kids
Map
Click any village in the table or on the map — draws a red line from school to village with straight-line distance.
No village selected.
Village Detail
—
#
Village
Block
Corridor
Distance (km)
Population
School-age
GJMS
Capture %
Untapped
Notes
Recent Transactions (latest 50)
Date
Source
Name
Type
Mode
Amount
Remark
—
impossible age vs class
—
age off by 1–3 yrs
—
01-01-XXXX entries
—
bad length / placeholder
—
students needing review
Data Health — Live Coverage (D1)
Field-completeness of the live roster, computed straight from the gjms D1 database on every /api/live refresh. Green = well covered, amber/red = needs office follow-up.
Sign in to load live coverage…
Flagged Students
Data-quality flags from the Simption scrape . Send this list to the office to verify against admission forms / Aadhaar.
Name
Father
Class
Phone
DOB
Age
Issue
—
payable now > ₹0
—
quote THIS on calls — not the full year
—
valid phone number
⚠ Live "payable now" figures are unavailable right now — this list is showing full-session (whole-year) amounts as a fallback. Do not quote these over the phone; wait for a live refresh.
Fee Reminder Message
Edit the template — placeholders {name} {father} {class} {amount} {adm} {paylink} fill in per student. {paylink} becomes a one-tap UPI payment link with the exact amount pre-filled. Click a row's WhatsApp button to open WhatsApp with the parent's number and this message ready to send.
Defaulter List
Outstanding as of — — verify payment status in Simption before sending, the snapshot may be a few days old.
Name
Father
Class
Phone
Payable Now
Full-Session (context)
Send
—
tracker students, 2 callers
—
arrears balance drop
—
at 3%
—
tracker ↔ live data
—
of live students with dues
Per-Caller Recovery
Commission rate
% ·
Recovered = assigned arrear − payable-now (elapsed+current month + prev dues), from live snapshot —.
⚠ A balance drop is not proof a caller caused it — a parent may have paid at the office on their own.
Caller
Students
Assigned Arrears
Recovered
Recovery %
Commission
Student-Level Detail
Name
Father
Class
Caller
Assigned ₹
Payable Now ₹
Recovered ₹
Match
Sample data shown. The live FleetTrack feed is not connected yet — see "Connect live tracking" at the bottom of this tab.
—
—
—
ignition on, in motion
—
stopped
—
GPS device not reporting
Fleet
Vehicle
Number
Status
Speed
Last Location
Last Update
Today KM
Map
Fleet Status
Today's KM by Vehicle
Optimization Insights
Connect live tracking
This tab renders vehicles.json. New vehicles appear here automatically once the live feed is wired up — no code change needed. To go live: the GitHub Actions scraper needs to log into FleetTrack's tracking platform (the in.gpstrack.lite app's web portal — not the account.fleettrack.in store page) and write the vehicle list to vehicles.json. A scaffold is ready at scraper/fleettrack-scrape.js — it needs the FleetTrack tracking-platform URL + login added as the FLEETTRACK_USER / FLEETTRACK_PASS GitHub secrets. Until then you can edit vehicles.json by hand with your real vehicle numbers and it works the same way.
—
fleet, selected month
—
km ÷ mileage × diesel ₹
—
what you entered
—
paid − expected
Settings
Mileage (km/litre) is pre-filled with conservative real-world defaults per vehicle — edit any cell to your true figure and it's remembered. Enter what the card actually paid per bus for the month; the variance and the checklist below help you spot leakage, idling or a wrong mileage assumption. Distance is measured by GPS (sum of each day's km), bucketed in IST.
Per-vehicle — this month
Vehicle
Monthly KM
Days run
Mileage (km/L)
Litres
Expected ₹
Actual paid ₹
Variance ₹
Var %
Flag
Expected fuel-cost share
Variance by vehicle (paid − expected)
Reading the numbers
—
with papers on file
—
critical or warning window
—
expired docs + blocking flags
—
no date on file yet
Document Status
Vehicle
Insurance
PUC
Fitness
Permit
Registration (RC)
Road Tax
Valid
Issues & Open Checks
—
on RFID
—
tapped in
—
didn't tap
—
after 08:30
—
of recorded days
Daily Present — this month
Present vs Not-marked
Late Arrivals
—
Staff
Name
Type
Latest day
In-time
Present days
Attendance %
Insights
Payroll & PF — waiting for live data
Sign in to load payroll from D1.
—
—
—
—
₹0
across every payslip ingested
—
employer 12% only, estimate
—
31-Oct-2026
—
could not be matched to current staff
Payroll Cost Trend — total net paid per month, matched staff (blue) + people who've since left (purple) stacked so nothing is hidden; the Jan–Mar 2026 gap is a missing source file, not zero spend
The per-staff table below can only attribute pay to a real name on today's roster, so it stays matched-only. This chart does not: it includes every rupee paid, including the 264 rows for 49 people who left before the current roster snapshot — otherwise early months would understate spend and look like payroll "grew" simply because leavers drop out of a matched-only count.
Per-Staff Pay — click a row for that person's month-by-month history
—
Name
Designation
Current Salary
Months Paid
Total Paid
Last Paid Month
Month-by-Month History
Month
Gross
Advance
Arrears
Net
Source File
Match
PF Liability — Two Scenarios, Both Estimates
If filed under the EPFO amnesty (by 31-Oct-2026)
—
Employer's 12% share only — the employee's 12% is waived where PF was never deducted from wages, which this payroll confirms (0 of 468 rows show a deduction). Interest at 12% p.a. (s.7Q/127), admin charges, and a flat ₹100 damages figure are additional and not yet computed here.
If the window is missed
—
Full 24% (employee 12% + employer 12%), the no-relief statutory ceiling. Section 14B damages can run up to 100% of arrears on top of this — also not included in the figure shown.
Combined estimate — ALL payroll (matched + unmatched)
—
—
The unmatched-row PF figures use each row's net paid amount as a proxy for gross earned, because gross wasn't retained for rows that couldn't be matched to a staff record — so even the "ALL payroll" figures likely still understate true exposure slightly.
All figures on this panel are estimates, not filings. The wage basis uses MIN(gross,15,000) as a proxy for basic+DA — the actual PF-eligible wage is basic+DA specifically, which isn't reliably split out in the ingested payroll sheets, so this may over- or understate the true basis.
The relief structure above (employer-only 12%, flat ₹100 damages in place of s.14B) is verified against primary gazette text (G.S.R. 749(E), 10-Oct-2025, EPF Scheme 1952 para 82B). The widely-cited "EEC-2026" successor campaign's specific eligibility dates are corroborated only by secondary sources as of this writing, not yet confirmed in a primary EPFO notification — treat the 31-Oct-2026 deadline as the best available estimate, not a confirmed statutory date.
Unmatched Payroll Rows
Name (as on payslip)
Designation
Rows
Months
Total Paid
Mostly 2025 staff who left before the current 59-person roster snapshot. Not dropped silently — every row is accounted for here.
—
on roster
—
tapped in
—
marked absent
—
no tap recorded
Class-wise
Class
Total
Present
Absent
Not Marked
Present %
Present by Class
Insights
Marketing & Leads. One funnel for every admission enquiry — Meta/Facebook & Instagram ads, WhatsApp, YouTube and Google.
Import your GJMS-Lead-Tracker.xlsx to load leads & conversions, then add each platform's numbers under Channel Connections.
Data is saved in this browser — use Export backup to keep a copy.
How it works
How the Marketing tab works
Leads & funnel come from the GJMS-Lead-Tracker.xlsx spreadsheet your team fills in. Click Import Lead Tracker and pick the file — re-import any time to refresh.
Conversion (Lead → Contacted → Visit → Admission) and cost per admission are calculated from that sheet plus the media spend.
Channel Connections show each platform side by side. YouTube connects live with a free API key. For Meta, Instagram & Google, type the figures from each platform's own dashboard — the setup guide for full auto-sync is gjms-ads/Dashboard-Connections-Guide.md.
Nothing here touches your spreadsheet or the ERP — it only reads and visualises.
No data imported yet.
No leads loaded yet. Click Import Lead Tracker (.xlsx) above and choose your
GJMS-Lead-Tracker.xlsx. The ad campaign launches 23 May 2026 — once enquiries arrive and your team logs them in the tracker, re-import here to see the funnel fill up.
Auto-Sync · Facebook + Instagram + Inbox
Checking…
Loading server-side Meta connector…
Why WhatsApp messages aren't auto-counted: the consumer WhatsApp Business app on your phone has no public data API — Meta doesn't expose one. To auto-count chats received, you'd need to migrate the school number (+91 78003 04174) to the WhatsApp Business Platform (Meta Cloud API, free for first 1,000 conversations/mo). Until then, paste the "messaging conversations started" number from Meta Ads Manager into the WhatsApp card below.
Setup Status
One row per integration — green check = live and refreshing, grey dot = action needed (deep link provided).
—
all channels
—
—
—
speed wins admissions
—
—
—
converted
—
not converted
—
overall conversion
—
closing rate
—
campaign ad spend
—
spend ÷ leads
—
spend ÷ admissions
—
admissions × annual fee
—
(value − spend) ÷ spend
Conversion Funnel
Leads by Channel / Source
Leads by Channel / Source
Channel / Source
Leads
Contacted
Visits
Admissions
Conv.
Leads by Village / Town
Where the ads are pulling enquiries from — cross-check against the Geo / Market tab.
Village / Town
Leads
Admissions
Leads Over Time
Channel Connections
Each platform's reach & engagement, side by side. YouTube connects live with a free API key.
For Meta, Instagram & Google Business, type the numbers from each platform's own dashboard, then Save.
Full auto-sync setup is documented in gjms-ads/Dashboard-Connections-Guide.md.
Meta Ads · FacebookNot connected
Reach, link clicks & results from Meta Ads Manager. This is where most leads originate.
Live connect (Facebook Graph API — one token unlocks Instagram too)
Or enter manually from Meta Ads Manager:
InstagramNot connected
Followers, reach & profile visits — runs on the same Meta ad campaign.
Live connect (uses the Meta token above — Instagram business account auto-discovered)
Make sure your Instagram business account is linked to the Facebook Page above. Then click below — the same Page Access Token unlocks IG insights.
Or enter manually from Instagram Insights:
WhatsApp BusinessNot connected
The standalone WhatsApp Business app has no public data API — Meta intentionally doesn't expose one. What we CAN do is the school's outbound channel: wa.me click-to-chat links work without any API and don't risk a ban.
School WhatsApp:
Conversation count (from Meta Ads → "messaging conversations started"):
YouTubeNot connected
Connects live with a free YouTube Data API key. Use your @handle (easy) or paste the Channel ID directly.
Not connected yet.
Google Business ProfileNot connected
Public listing data (rating, reviews, photos, hours) loads automatically using the dashboard's existing Google Maps key — no extra setup. Performance metrics (views/calls/directions) still need manual entry: they require OAuth + verified Business ownership, which is overkill for now.
Live: public listing (rating + reviews + photos)
Manual (from your Google Business Profile dashboard at business.google.com):
Recent Post Performance
Last 10 posts on each connected channel — reach + engagement so you can see what's working. Pulled automatically when Meta/Instagram connect.
Facebook
Connect Meta above to load.
Instagram
Connect Instagram above to load.
Settings
Media spend auto-fills from the Lead Tracker's Daily Spend sheet on import; override it here if needed. Annual fee drives the Year-1 fee-value estimate.
Analytics — waiting for live data
Sign in with the dashboard password (top right) to load the cross-tab FY2026-27 numbers from D1.
—
—
—
—
—
—
—
—
—
to still hit ₹72L
Where the Cash Actually Went
Operating profit is not money in the bank. This follows the FY-to-date surplus through asset purchases and owner drawings, then through borrowing, to the real change in cash.
—
—
—
—
—
—
—
Cumulative Income, Expense & Net — Plan vs Actual
—
Monthly Income vs Expense
Bars are actual income/expense per month (₹L, left axis); the line is net (₹L, right axis). Future months are left blank, not zero.
Where the Money Goes
—
Excluded from P&L (not hidden, just not operating)
Capex, owner drawings and inter-account loan-ins are deliberately kept out of the income/opex numbers above so a big equipment buy or a personal draw never masquerades as an operating loss (or gain) — the amounts are shown here so nothing is hidden. See "Where the Cash Actually Went" near the top of this tab for how they flow into the real change in cash.
Fee Funnel — This Session
—
Cash vs Bank Split (Expenses)
No payment-mode field on expense entries in /api/live yet, so a real cash-vs-bank split can't be shown here without guessing. This matters — a recent audit found one expense head paid 80% in cash across 24 entries above ₹10,000, which is an Income-Tax s.40A(3) exposure. Add a mode column to the expenses table and this card will populate automatically.
—
Collection Velocity
No daily metrics history yet (metricsDaily is empty) — the collection-velocity trend needs at least a few days of the ERP metrics engine running.
—
Attendance Trend
No daily attendance history yet in metricsDaily.
—
Student Strength by Class
No live roster (strength.byClass) yet.
—
New Admissions Trend
No daily admissions history yet in metricsDaily.
—
Academics — waiting for live data
Sign in to load marks from D1.
—
—
—
of enrolled roll
—
below 33% pass mark
—
distinct exams
—
distinct subjects
—
rows in D1
Score Distribution
Per-Subject Average (worst first)
Per-Class Average
Failing Students < 33% — click a row to jump to their record in the Students table
—
Class
Student
Failing Subjects
Avg % (failing subjects)
Subjects
App Usage — waiting for live data
Sign in to load activity from D1.
—
—
—
—
—
—
—
—
—
all-time, robot excluded
—
all-time, robot excluded
—
browser notification reach
—
—
"sync" role (hourly Simption reconciliation robot) is excluded from every number on this tab — it otherwise accounts for the large majority of all activity rows and would make "active users" meaningless. Every adoption figure (active / ever / never) counts against the same population — students and staff currently on the roll — so "ever logged in" and "never logged in" always add up to the full roll.
Active Users — Last 30 Days
Events by Role (30d, sync excluded)
Role
Events
Distinct Users
Students Never Logged In
—
Adm No
Name
Class
Staff Never Logged In
Staff Code
Name
Ask the dashboard
Answered from live D1 data — the query is shown under each answer.