Pre-Sales
Sending Initial Fee Invoice
Use Postman:
Authorization: Bearer {token}
Headers:
- Content-Type:
application/json
Body: raw JSON. Example:
{
"external_id": "{NISN, e.g. 31750123456012345}",
"amount": 20000000,
"payer_email": "[email protected]",
"description": "NAME_OF_CHILD - Homeschooling Intensif {grade, e.g. 1 SMA IPA} - Uang Pangkal",
"invoice_duration": 2592000,
"should_send_email": true,
"success_redirect_url": "https://lovia.life/id/edu/homeschooling/",
"failure_redirect_url": "https://lovia.life/id/edu/homeschooling/"
}
Sending Monthly Fee Invoice
Use Postman:
Authorization: Bearer {token}
Headers:
- Content-Type: application/json
Body: raw JSON. Example:
{
"external_id": "{NISN, e.g. 31750123456012345}",
"amount": 1500000,
"payer_email": "[email protected]",
"description": "NAME_OF_CHILD - Homeschooling Intensif {grade, e.g. 1 SMA IPA} - {month, e.g. Juli 2020}",
"invoice_duration": 2592000,
"should_send_email": true,
"success_redirect_url": "https://lovia.life/id/edu/homeschooling/",
"failure_redirect_url": "https://lovia.life/id/edu/homeschooling/"
}
Education Program Operations
1. Fee Structure
Before creating a Fee Structure, it is advisable to create the following first:
- Academic Year : 2020-21
- Academic Term : 2020-21 -> Semester 1, 2020-21 -> Semester 2
- Program (and logo) & Courses for each program
- Student Category
Student Category allows you to classify the students based on various categories.
In Institutions, there may be fee concession for some categories such as Handicapped Students, Foreign Nationals, Reserved Categories by the government, etc.
When a Student is enrolled for a Program, you can select the select the Category for the Student. - Fee Categories
For accounting purposes, you will also need to first set up:
- Receivable Account, e.g. Piutang Dagang – L > Piutang Homeschooling – L
- Income Account, e.g. Pendapatan Service/Jasa – L > Pendapatan Homeschooling – L
- Cost Center, e.g. Lovia – L > Education – L > Homeschooling – L
Fee structure depends on Program, Academic Year & Term, and Student Category. Fee Structure Components:
- Entry Tuition Fee (Uang Pangkal). For Sekolah Virtual Megana Homeschooling Intensive, this is currently IDR 20,000,000.
- Registration Fee (Uang Pendaftaran). For Sekolah Virtual Megana Homeschooling Intensive, this is either IDR 2,000,000 or none, depending on Student Category and admission date.
- Tuition Fee (Biaya Bulanan/Semester). For Sekolah Virtual Megana Homeschooling Intensive, this is currently IDR 1,500,000 monthly or IDR 9,000,000 per semester.
2. Student Batch & Program Enrollment
- Create a Student Batch. “A Student batch is a collection of students from within Student Groups.”
- Create Program Enrollment for that student and using the batch.
- Set the Fees, if it’s paid in 6 months, then put the fees there in the enrollment.
- When you Submit the Program Enrollment, it will create the fees. Later you can make payment for these fees.
3. Student Groups
Before creating a Fee Schedule, you need to:
- Create a Student Group based on the Batch
- In that Student Group, click “Get Students” which will programmatically add the student(s) into that group.
Customer Operations
Education Operations Documents
- Customer: payor for invoice purposes
- Guardian: for both father and mother
- Student: create student.
Make Fee Payment
- To make a payment, go to the Fee (that should have been already created by Program Enrollment), then click Create > Payment.
- Make sure to fill the Deductions or Loss: 5510.001 – Beban Adm Bank – L, and 4210.001 – HPP Homeschooling – L. So the final profit/loss are accounted correctly.
Bug: As of ERPNext v13.beta4 Create Payment failed with: Server Error: AttributeError: ‘Fees’ object has no attribute ‘base_grand_total’. To fix this, apply PR #22921.
Failed to load resource: the server responded with a status of 500 ()
request.js:356 Traceback (most recent call last):
File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 64, in application
response = frappe.api.handle()
File "/home/frappe/frappe-bench/apps/frappe/frappe/api.py", line 58, in handle
return frappe.handler.handle()
File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 30, in handle
data = execute_cmd(cmd)
File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 69, in execute_cmd
return frappe.call(method, **frappe.form_dict)
File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 1086, in call
return fn(*args, **newargs)
File "/home/frappe/frappe-bench/apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py", line 1116, in get_payment_entry
pe.set_missing_values()
File "/home/frappe/frappe-bench/apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py", line 168, in set_missing_values
self.set_missing_ref_details()
File "/home/frappe/frappe-bench/apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py", line 173, in set_missing_ref_details
ref_details = get_reference_details(d.reference_doctype,
File "/home/frappe/frappe-bench/apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py", line 918, in get_reference_details
total_amount = ref_doc.base_grand_total
AttributeError: 'Fees' object has no attribute 'base_grand_total'