Start with compliance, because everyone asks
Let’s get this out of the way. erpfly writes code for ERPNext and Odoo. It doesn’t make your practice compliant with HIPAA, GDPR or any health data regulation, and no code generator can.
Compliance depends on where the system is hosted and under what agreements, how access is granted and reviewed, whether data is encrypted in transit and at rest, how backups are handled, what your staff are trained to do, and what happens when something goes wrong. A generated module can help at the edges. Frappe’s field-level permission levels can hide diagnosis fields from billing staff. Track Changes on a DocType records who edited what. Odoo record rules can limit a practitioner to their own patients. Those are good controls. They aren’t a compliance programme, and anyone who says otherwise is selling you something.
What exists already for Frappe and Odoo
On the Frappe side there’s a real starting point. Healthcare was split out of ERPNext core into its own app, now maintained as Marley Health. It has Patient, Healthcare Practitioner, Patient Appointment, Patient Encounter, Clinical Procedure and Lab Test, among others. It links to ERPNext for invoicing and stock.
Odoo has no official equivalent. Clinics on Odoo tend to combine Appointments, Sales, Invoicing and Inventory, then add a patient model through an addon. Either route works. What matters is being clear about which parts of your operation belong in the ERP at all.
Package billing at a physio practice, worked through
Take a physiotherapy practice selling a 10-session package for $600, so $60 a session. Anika buys one in March.
Over the next two months she attends 4 sessions and cancels one with only 3 hours’ notice. Under the practice’s policy that counts as used, so 5 sessions are consumed. The module marks $300 as earned and leaves $300 as a liability for sessions still owed. When the front desk opens the booking screen, it shows “5 of 10 remaining, expires 14 September”.
By September she’s used 8. The remaining 2 expire. The module flags them to finance with a value of $120. Whether that becomes revenue, a credit or a goodwill extension is your accountant’s call, not the software’s, so the module takes the treatment as a setting.
ERPNext’s deferred revenue works on time periods, not sessions, which is why this needs a small custom app. That means a Package Balance DocType, a hook on appointment status changes, and a scheduled job that posts journal entries for sessions consumed. Our page on ERPNext custom module development shows how such an app is laid out.
Where clinics usually need custom work
Once the basics are in, the requests from healthcare providers are fairly consistent:
- Packages and memberships. Covered above, and closely related to subscription billing.
- Procedure kits. A defined list of consumables that deducts from stock and adds to the bill when a procedure is marked complete, using the inventory management module.
- Revenue share for visiting practitioners. Percentage of fees, minus room rent, with a monthly statement.
- Split billing. Insurer share and patient co-pay on separate invoices from one visit, handled through invoice management.
- Recall reminders. Patients due a six-month review get a message, with opt-out respected.
What we’d keep out of the ERP
Clinical decision support, dosage calculations and anything that could count as a medical device. Those are regulated in their own right and don’t belong in a generated ERP module. We’ll also question requests to store imaging or large clinical documents in the ERP database. Use a proper document store and link to it. If you’re unsure whether to extend an ERP or build something separate, our ERPNext vs Odoo comparison and the custom ERP development page are sensible next reads.