VECTIQ
← All projects
EducationRUNNING

ECMS Finance & VietQR

Tuition, invoices, wallets and subscription plans, with VietQR payment codes and a reconciliation webhook that refuses to run unsigned

ECMS Finance & VietQR

Overview

Tuition is where an education centre actually loses money, and almost always in the same way: a parent transfers, nobody matches the transfer to the student, and three weeks later the class list and the bank statement disagree.

The finance module carries fee schedules, invoices, per-student wallets, transactions and subscription plans, and closes the loop with VietQR - a payment code carries the reference that identifies the invoice, and the bank's webhook writes the payment back against it automatically.

The webhook is the part worth being strict about: without VIETQR_WEBHOOK_SECRET configured it is rejected outright rather than processed blindly, because a payment endpoint that anyone can POST to is a way to mark invoices paid for free.

Key features

Fee schedules and per-class tuition rules
Invoices with partial payment and adjustment history
Per-student wallet and transaction ledger
VietQR code generation carrying the invoice reference
Signed reconciliation webhook, rejected when unsigned
Subscription plans for recurring programmes
Revenue and churn forecasting from real transactions
Outstanding-fee reminders to parents

Tech stack

NestJS · backendPostgreSQL · databaseVietQR · otherRedis · database

Solutions