"Knowledge and Integrity"
⬢ Powered by MathsDr SmartSuite
"Knowledge and Integrity"
Applications are now open for the Current Academic Year.
Fields marked * are required. Your application is saved once you tap Submit at the bottom.
Thank you — your application has been received.
Paste the tracking link or code you were given when you submitted your application.
"Knowledge and Integrity"
Available Examinations
Enter your account email and we'll send a password reset link.
This creates the very first staff account (Super Admin, full access). It only works once — as soon as any staff account exists, this option stops working for everyone, by design, so it can never be used to bypass normal access control later.
Use your child's admission number and the phone number the school has on file for you.
If this doesn't work, the phone number on file may not match yours yet — ask the school office to update your child's record with your current number.
Use your admission number and your Practice Mode password. If you've never logged in before, your password is your parent's phone number on file — ask your teacher if you're not sure.
No account yet, or forgot your password? Ask your teacher — only the school can create or reset a Practice Mode login.
For your security, you need to set your own password before continuing.
This step can't be skipped — it only ever appears once per reset, right after a new account is created or a password reset is requested for you.
| Collection | Status | Detail |
|---|
Every check below shows the real error returned by Firebase, not a generic message — this is the same information a developer would see in the browser console, surfaced here so it's visible on any device.
Hi there — practice is separate from your exams. It never affects your real results, and you can try as many times as you like.
Learn Mode shows you the correct answer right after each question, so you can learn as you go. No timer.
Subject | Topic | Mode
Adm No: 0000 | Class: JHS 2 | Subject: Integrated Science
● Answers saved locally
Are you sure you want to submit your examination? You will not be able to change your answers after submission.
The parent can view Attendance, CA scores, and Exam Results with just the admission number and phone number above — no account needed for those. Finance (balance, receipts, statements) now requires a real, secure account — create one below, linked to the phone number above.
Charging:
For:
This is an advance payment, not tied to any specific charge — it tops up the wallet, which Daily Charges (Feeding, Transport, Class Fee) draw from automatically before any outstanding debt is created.
For:
Only available while this payroll run is still a draft — once finalized, nothing can be changed here. SSNIT, PAYE, and Net Salary recalculate automatically as you edit.
Editing here changes the TOTALS only for this run's correction — it does not rewrite the employee's itemized allowance/deduction records, which stay as originally assigned.
Paying for:
Adjusting:
For:
Against:
For questions that need a diagram — a number line, a shape with labeled dimensions, a pie chart, etc. Shown to the candidate above the question text during the exam. Leave empty for ordinary text-only questions. Max 2 MB.
Whether a learner can see which questions they got right/wrong and the correct answers, immediately after submitting. Keep this disabled for exams whose questions might be reused for another class or a later sitting.
Each row shows the question text and correct answer. Reorder with the arrows, or remove a question entirely — both disabled once this exam has results.
Enter the password the account was created with below. This app will briefly sign in as that account (in the background, without affecting your own session) to confirm it and link its existing Firebase Auth login to a new staff profile here — it does not change or reset that password.
The user can change this later from their own Settings, or use "Forgot password?" on the login screen.
"Knowledge and Integrity" — Examination Result Slip
Every section below is live on the public prospectus. Nothing here is hardcoded — edits save straight to Firestore and appear immediately for prospective parents.
These figures drive the public Fee display, the Cost Calculator, and the Finance module's automated billing. Nothing here is hardcoded in the app itself.
| Item | Amount | Category | Class | Year / Term | Frequency | Due Date | Status | Action |
|---|
| Route | Pickup | Drop-off | Fee | Status | Action |
|---|
Linking to a real Academic Year/Term (not just a text label) is what lets Finance compute Expected Revenue correctly for daily/weekly/monthly fees — see the School Days/Weeks/Months figures below, computed automatically from the dates you enter.
| Term | Opening | Closing | Mid-Term Break | School Days | Vacation | Action |
|---|
| App # | Student | Class | Status | Submitted |
|---|
| App # | Student | Class | Parent | Status | Submitted | Action |
|---|
| Learner | Class | Outstanding |
|---|
| Date | Learner | Amount | Method | Receipt |
|---|
| Learner | Class | Wallet | Est. Days Left |
|---|
| Learner | Class | Wallet | Est. Days Left |
|---|
| Class | Meals to Prepare |
|---|
| Route | Assigned | Rode Today | Attendance Rate |
|---|
Search for a learner to view their full transaction history and current balance. The ledger is a permanent record — entries are never edited or deleted; corrections are made as separate reversing transactions.
Generate charges in bulk from active Fee Structure items (School Fees, Books, PTA, etc.) for a chosen billing period. Re-running for the same Academic Year + Term never double-charges — already-charged learner/item combinations are automatically skipped. This is separate from the automatic daily Class/Feeding/Transport Fee automation, which fires per attendance mark.
| Date | Operator | Scope | Learners | New Charges | Amount | Skipped | Status | Duration | Action |
|---|
Catches up Class Fee, Feeding, and Transport charges for any school day where attendance or the bus register was never recorded at all — not days where a learner was correctly marked absent. Every catch-up charge is clearly labeled in the ledger as assumption-based ("attendance was not recorded"), distinct from a normal attendance-confirmed charge, and can be individually reviewed or reversed like any other ledger entry.
Automatically skips weekends and anything in the Holiday Calendar above. Days already covered by real attendance/bus register records are left untouched.
| Date Range | Run By | Charges Posted | Total Amount | When |
|---|
Generates a wallet summary (opening balance, top-ups, deductions, closing balance) for every active learner with wallet activity in the selected month, and notifies each linked parent that it's available.
Every outstanding balance in the system, grouped however you need — not just a top-10 snapshot. Click a column header to sort.
Queues an in-app notification (shown to parents next time they log in) for every charge past its due date, for the Academic Year/Term selected above. SMS/Email notifications are also queued but require a connected messaging provider to actually send — see the note in the code for why that can't be embedded directly in this file.
| Learner | Charges | Outstanding | Action |
|---|
All reports are computed live from the real Student Ledger and Payment records — nothing here is a separate, duplicated data source.
Define routes and pickup points once — each pickup point has its own morning/afternoon fare. Then assign learners to a route/pickup point below.
| Route | Status | Action |
|---|
| Route | Pickup Point | Morning Fare | Afternoon Fare | Status | Action |
|---|
Mark bus attendance for each route. Marking a learner PRESENT here automatically marks them present in Class Attendance (if not already marked) and generates the Transport Fee — see the automation log below after saving.
A genuinely separate, real double-entry accounting layer — runs alongside the Student Ledger, Wallet, and Inventory Expenses you already use, not replacing or migrating any of it. Every real fee payment, charge, wallet top-up, and expense automatically posts a balanced journal entry here too.
A separate concept from Academic Year — a school's financial year doesn't always match its academic calendar. Reports can filter by whichever Financial Year is marked active.
| Financial Year | Start | End | Status | Action |
|---|
| Code | Account Name | Type | Department | Balance |
|---|
Every line here must balance — total debits must equal total credits — before this can be saved. Most journal entries post automatically from real transactions elsewhere in Finance/Inventory/HR; this form is for manual entries only (corrections, opening balances, etc.).
| Entry # | Date | Description | Amount | Source |
|---|
| Code | Bank | Account Number | Balance |
|---|
Money physically moved from Cash in Hand into a bank account — e.g. taking today's cash collections to deposit. Decreases Cash in Hand, increases the selected Bank Account.
| Deposit # | Date | Bank | Amount | Source | Cashier |
|---|
Money moved OUT of a bank account — either withdrawn as cash (Cash in Hand increases to match), or spent directly from the bank on an expense (posts straight to that expense category, never touching Cash in Hand at all).
| Withdrawal # | Date | Bank | Amount | Type | Purpose |
|---|
| Date | Type | Description | Amount | Balance After |
|---|
Compares what this system shows for a bank account against the real bank statement — enter the statement balance and any items the statement shows that this system doesn't yet (or vice versa) to find and explain the difference.
Enroll a whole class at once, or select specific learners — available here so Headteacher and Finance staff can manage feeding directly, without needing Learners tab access. Controls the exact same fields the full learner record uses, so nothing here conflicts with editing a learner directly.
| Adm No | Name | Class | Status | Meal Plan |
|---|
Supplier is a free-text field for now — it becomes a real linked dropdown once the Suppliers module exists.
| Code | Item | Category | Stock | Reorder Level | Cost Price | Status | Action |
|---|
The 21 categories below are always available. Add your own for anything not covered — custom categories can be removed later; the built-in list cannot.
| Company | Contact | Phone | Products | Rating | Orders | Total Value | Status | Action |
|---|
Raise a request for items to be purchased. An approved requisition can then be turned into a Purchase Order.
| Date | Requested By | Items | Notes | Status | Action |
|---|
Create directly, or convert an approved Requisition below into a Purchase Order.
| PO Number | Supplier | Items | Total | Expected | Status | Action |
|---|
Receiving happens from a specific Purchase Order (see the "Receive Goods" button on the Purchase Orders tab) — this is the history of everything received so far.
| Date | PO Number | Supplier | Invoice # | Items | Total Cost | Received By |
|---|
Issue items out of the store — stock decreases immediately and cannot go below zero.
| Date | Issued To | Type | Items | Purpose | Issued By |
|---|
Every sale is charged to the learner's real Finance ledger and paid off immediately — same transaction-safe ledger writes as the rest of Finance, with a real receipt. Only items with a Selling Price set can be sold here.
| Date | Learner | Items | Total | Method | Receipt # |
|---|
Individually-tracked equipment (computers, projectors, furniture, the school bus, etc.) — distinct from the consumable Item Catalogue, which tracks quantities of interchangeable stock.
| Asset # | Name | Category | Location | Custodian | Condition | Current Value | Status | Action |
|---|
| Asset | Borrower | Checked Out | Expected Return | Status | Action |
|---|
Completed maintenance with a cost is also logged as a real expense transaction, the same way Goods Received already is.
| Date | Asset | Type | Description | Cost | Technician | Next Service | Status |
|---|
For damaged, expired, or lost stock noticed day-to-day — applies immediately, no approval needed.
Count actual stock and compare against the system — variances need approval before they update inventory.
| Date | Conducted By | Items Counted | Variances | Notes | Status | Action |
|---|
| Date | Item | Change | Reason | Notes | By |
|---|
All reports are computed live from the real Inventory data — nothing here is a separate, duplicated data source.
Request items already in stock for your class — separate from Purchase Requisitions above, which is for buying more stock from a supplier.
Confirm once you've actually received these — a real, timestamped record, not just a checkbox.
Confirmed vouchers still awaiting distribution to individual learners.
| Request # | Class | Date | Items | Status |
|---|
| Request # | Teacher | Class | Date | Status | Action |
|---|
| Voucher # | Request # | Class | Items | Issued By | Teacher Confirmed |
|---|
Employee photos aren't available yet — this project's Firebase plan (Spark, free tier) doesn't include Cloud Storage, the same limitation as the Admissions Gallery. A Photo URL field is provided for anyone already hosting a photo elsewhere. Upgrading to the Blaze plan will enable real uploads automatically.
| Staff # | Name | Department | Position | Employment Type | Contract | Status | Action |
|---|
The 11 departments below are always available. Add your own for anything not covered.
The 16 positions below are always available. Add your own for anything not covered.
Late/Early Departure minutes are computed against standard hours of (adjustable in code) whenever a clock time is entered.
| Staff # | Name | Status | Clock In | Clock Out |
|---|
Two-stage approval workflow (Supervisor → HR) — both stages are currently performable by anyone with HR tab access, since dedicated Supervisor/HR Manager roles don't exist yet (see the Security phase). Annual/Sick/Maternity/Paternity Leave count against a real per-employee balance; Study/Compassionate/Unpaid Leave are logged but don't deduct from any balance.
| Employee | Type | Dates | Days | Reason | Status | Action |
|---|
Optional, structured pay scales with steps — an employee linked to a scale+step has their basic salary computed from here for payroll, overriding their plain Basic Salary field. Employees without a linked scale keep using their plain Basic Salary field exactly as before — nothing is forced.
| Scale Name | Steps | Range | Action |
|---|
⚠️ These figures are starting defaults, not verified current law. Ghana's PAYE tax bands and SSNIT contribution rates are set by the Ghana Revenue Authority and SSNIT respectively, and change periodically. Verify every figure below against the current official publication before running real payroll — editing them here takes effect immediately for every future payroll run.
| Order | Cumulative Ceiling | Rate | Action |
|---|
| Employee | Allowance | Amount | Action |
|---|
Non-statutory deductions only (e.g. union dues) — SSNIT and PAYE are computed automatically at payroll time, not entered here.
| Employee | Deduction | Amount | Action |
|---|
| Employee | Principal | Monthly Repayment | Balance Remaining | Status |
|---|
| Period | Employees | Gross Pay | SSNIT (Employee) | PAYE | Net Pay | Status | Action |
|---|
Attendance and Punctuality are shown as real, computed reference stats from the Attendance tab for the review period — genuine context for the reviewer, not a replacement for their judgment. All 8 criteria are still rated by the reviewer, including those two.
| Employee | Period | Average Score | Reviewed By | Action |
|---|
| Title | Department | Applications | Status | Action |
|---|
| Applicant | Vacancy | Contact | Interview | Score | Status | Action |
|---|
| Date | Employee | Title | Type | Provider | Certificate | Status |
|---|
Document uploads aren't available yet — this project's Firebase plan (Spark, free tier) doesn't include Cloud Storage, the same limitation as Employee photos and the Admissions Gallery. A Document URL field is provided for anyone already hosting files elsewhere (e.g. Google Drive). Upgrading to Blaze will enable real uploads automatically.
| Employee | Type | Title | Issue Date | Expiry Date | Link | Action |
|---|
All reports are computed live from the real HR data — nothing here is a separate, duplicated data source.
Standard structure: Test 1 (30) + Test 2 (30) + Project Work (20) + Group Work (20) = 100 marks, automatically converted to 50% of the final result. The examination score is converted to the other 50%.
| Adm No | Name | Test 1 (30) | Test 2 (30) | Project (20) | Group (20) | CA Total (50%) |
|---|
| Adm No | Name | Score (out of 10) |
|---|
| Adm No | Name | Assessments Counted | Raw CA Avg | CA Total (/40) |
|---|
| Adm No | Name | Status | Bus |
|---|
Permanently deletes every learner's result from every exam, across every class and subject. The exam definitions themselves are NOT affected — learners can retake them, and any new results will still count once deleted. This cannot be undone.
Waiting for live data…
| Rank | Name | Adm No | Score | % | Grade | Action |
|---|
| Rank | Name | Adm No | Score | % | Grade | Action |
|---|
| Pos. | Name | Adm No | Class | Subject | Score | % | Grade | Date | Action |
|---|
Creates a Practice Mode login for every learner who doesn't already have one — admission number as the username, the parent's phone number on file as the starting password. Safe to run again at any time; existing accounts are never touched.
Fixes the "account already exists but wasn't linked" case — a real, recoverable situation where a login account was created (usually by Bulk Create being interrupted partway through) but never got connected back to the learner's record.
These learners can't get a Practice Mode account until a phone number is added to their record — give this list to each class teacher to collect from parents, then re-run Bulk Create Learner Accounts.
| Adm No | Name | Gender | DOB | Class | Parent | Contact | Status | Action |
|---|
Since Subject is free text, it's easy for something that's really a topic or exam-series label (like "BECE 2026") to get typed there by mistake instead of the actual subject. Use this to bulk-correct it — the mistyped value can optionally be kept as the Topic instead of discarded.
Comparing question wording within each class only — the same question can legitimately appear in two different classes. Flagged pairs are similar enough to be worth a quick look, not automatically deleted; review each one and decide.
| Question | Options / Answer | Subject | Class | Topic | Difficulty | Owner | Status | Created | Action |
|---|
Choose filters above, e.g. "Basic 6 Mid-Term Mathematics Results" or "JHS 2 Weekly Test Results".
| Rank | Name | Adm No | Class | Exam | Score | % | Grade |
|---|
| Rank | Name | Adm No | Class | Exam | Score | % | Grade |
|---|
The destination class is the next class in the standard Ghanaian Basic Education sequence (e.g. Basic 1 → Basic 2, JHS 2 → JHS 3). JHS 3 learners are graduated and archived instead of promoted further.
| Adm No | Name | Action |
|---|
| Date | Action | From | To | Learners Affected |
|---|---|---|---|---|
| No promotions recorded yet | ||||
Combines each learner's Continuous Assessment Total (40%) with their best matching examination score (60%) for the chosen class, subject, term, and year, then computes total score, percentage, grade, class position, class average, and an automatic remark.
For classes/subjects without a CBT exam on record — enter each learner's Class Score and Exam Score directly (both as a percentage out of 100), and the system scales and combines them using the exact same 40/60 split, grading scale, remarks, and ranking as CBT-based results above. Uses the Class/Subject/Term/Year selected above. Starts as a draft the moment either score is entered for any learner — keep editing freely until you Finalize.
| Adm No | Name | Class Score (40%) | Exam Score (60%) |
|---|
| Pos. | Adm No | Name | Report Card | CA (40) | Exam (60) | Total (100) | Grade | Remark |
|---|
Finds every Manual Score Entry that was Finalized (locked for editing) but never actually became an official published report — usually leftover test data, or a class/subject that was finalized and then abandoned in favor of a fresh computation. Does NOT touch anything that ever got published, and does NOT touch drafts still in progress. This cannot be undone.
Every result you've ever submitted for approval, and what happened to it — still waiting, approved and published, or sent back with a reason to fix.
| Class | Term | Year | Status | Submitted | Details |
|---|
Results a teacher submitted for review — nothing here is official yet. Review each one before approving; approving publishes it as the official record, exactly as if you'd published it directly.
| Class | Term | Year | Submitted By | Submitted | Learners | Actions |
|---|
Once results are published, this becomes the permanent, official record — unaffected by later changes to CA scores, exam data, or grading rules. Browse by class/term/year, or search directly for a learner.
| Pos. | Adm No | Name | Overall Average | Grade | Report Card |
|---|
PREDICTED BECE STANINE — this is an institutional estimate based on this school's own mock exam performance, standardized against this cohort. It is not an official WAEC grade and should never be presented to anyone as one.
Checks for mock exams with the exact same name, class, and academic year — the kind that could happen from tapping "Create" more than once (now fixed, but existing duplicates need manual cleanup). Shows any scores already entered under each duplicate before you choose which one to keep.
Enter each learner's raw score and the maximum possible for this subject (e.g. 76 out of 100). Saves per subject — pick a subject, enter scores, save, then move to the next subject.
| Adm No | Name | Raw Score |
|---|
| Stanine | Learners |
|---|
| Adm No | Name | Subject | Score | Predicted Stanine | Confidence |
|---|
Use {name} in your message to insert each learner's name automatically.
Kept on this device. Each entry opens WhatsApp with the message pre-filled for that recipient — actual delivery and read receipts happen inside WhatsApp itself, not in this app.
Not available on this browser/device right now, or already installed.
Your deployed Cloud Function that calls the WhatsApp Business API. Leave blank to fall back to opening WhatsApp directly on this device for each message instead.
| Grade | Min % | Max % | Remark |
|---|
The grading bands above (A1–F9, WAEC/BECE style) are the system default. Editing individual bands is not yet supported in this version — they're shown here for transparency and will become editable in a future update.
Password management is now handled per staff account under Users — each account's password is changed via "Reset PW" (sends a reset link to that account's email), rather than a single shared password here.
Records admin logins, logouts, and key actions taken on this device. Kept locally and is not a substitute for Firestore-level audit logging.
| Class | Present | Absent | Late | Excused | Sick | Unmarked | Rate |
|---|
| Date | Present | Absent | Late | Excused | Sick | Rate |
|---|
Learners actually billed for each daily service on the selected day — whether the charge was covered by their Wallet or is still outstanding, this counts everyone who genuinely used and was charged for that service, not just cash collected.
Loading…
Loading…
| Title | Type | Class | Subject | Status | Results | Action |
|---|
| Item | Stock | Reorder Level |
|---|
| Item | Category |
|---|
| Name | Role | Classes | Subjects | Status | Action |
|---|
Every significant action across the system — score edits, question deletions, result changes, promotions — recorded permanently in Firestore with who did it and when, for accountability across every device and every staff member, not just this one.
| User | Role | Action | Date | Time |
|---|
Your Teacher Workbench
Academic Year → Term → Class → Day → Period → Subject → Teacher. Drives Today's Lesson and the Weekly Planner.
Choose a class above to view or build its timetable.
Every timetabled period this week, and whether a lesson plan exists for it. For curriculum-indicator-level progress, see Curriculum Coverage below.
Indicators taught vs planned, computed from approved Termly Scheme rows against lessons marked Taught.
Classroom visits, instructional coaching, mentoring, and follow-up actions.
Record classroom visits and coaching sessions here.
Week · Strand · Sub-Strand · Content Standards · Indicators · Resources — the source for the Yearly Scheme view below.
Choose the above to view or build the Termly Scheme of Learning.
Built from approved Termly Scheme rows for one week. Approve a Weekly Scheme to generate its Daily Lesson Plan drafts.
Choose the above to view existing Weekly Schemes, or generate a new one from the Termly Scheme.
Auto-generated from approved Termly Scheme rows across all 3 terms. Read-only — edit via Termly Scheme.
NaCCA standards-based format · not yet saved
For each resource, mark how it's sourced: NC=No Cost, LC=Low Cost/Improvised, PS=Purchased by School, PP=Provided by Parents.
All your plans
Mon–Fri grid · each day is a full NaCCA Daily Lesson Plan
Lesson plans waiting for review
Search and browse strands, sub-strands & indicators.
Reusable resources you can attach to any lesson instead of retyping.
Assigned for your classes, with due dates the Workbench tracks automatically.
Remediation, enrichment, behaviour, attendance, counselling, health, SEN, and parent conference tracking.
Teachers post to their own classes/subjects; Headteachers can reach the whole school.
Bulk import or update NaCCA curriculum data from CSV or JSON — no code changes required.
Upload a .csv or .json file. Expected columns (header names are flexible — e.g. "Class" or "ClassLevel" both work):
Subject, ClassLevel, Strand, SubStrand, ContentStandard, Indicator, LearningIndicator, CoreCompetencies, Values, SuggestedResources
For Excel files (.xlsx), please export/save as CSV first — this importer reads CSV and JSON directly without extra libraries.
Choose a file above to preview rows before importing.
Imported rows are tagged OFFICIAL and are kept separate from the SAMPLE development data, which can be removed at any time using "Clear Sample Data" without affecting official content.
Pulls Strand, Sub-Strand, Content Standard, and Indicators directly from approved Termly Scheme rows for the chosen week — nothing is retyped.