test: Do Not Bill Patient Encounters for Inpatients
diff --git a/erpnext/healthcare/doctype/inpatient_record/test_inpatient_record.py b/erpnext/healthcare/doctype/inpatient_record/test_inpatient_record.py
index e8a9444..10990d4 100644
--- a/erpnext/healthcare/doctype/inpatient_record/test_inpatient_record.py
+++ b/erpnext/healthcare/doctype/inpatient_record/test_inpatient_record.py
@@ -8,6 +8,8 @@
from frappe.utils import now_datetime, today
from frappe.utils.make_random import get_random
from erpnext.healthcare.doctype.inpatient_record.inpatient_record import admit_patient, discharge_patient, schedule_discharge
+from erpnext.healthcare.doctype.lab_test.test_lab_test import create_patient_encounter
+from erpnext.healthcare.utils import get_encounters_to_invoice
class TestInpatientRecord(unittest.TestCase):
def test_admit_and_discharge(self):
@@ -42,7 +44,7 @@
def test_allow_discharge_despite_unbilled_services(self):
frappe.db.sql("""delete from `tabInpatient Record`""")
- setup_inpatient_settings()
+ setup_inpatient_settings(key="allow_discharge_despite_unbilled_services", value=1)
patient = create_patient()
# Schedule Admission
ip_record = create_inpatient(patient)
@@ -64,6 +66,35 @@
self.assertEqual(None, frappe.db.get_value("Patient", patient, "inpatient_record"))
self.assertEqual(None, frappe.db.get_value("Patient", patient, "inpatient_status"))
+ setup_inpatient_settings(key="allow_discharge_despite_unbilled_services", value=0)
+
+ def test_do_not_bill_patient_encounters_for_inpatients(self):
+ frappe.db.sql("""delete from `tabInpatient Record`""")
+ setup_inpatient_settings(key="do_not_bill_inpatient_encounters", value=1)
+ patient = create_patient()
+ # Schedule Admission
+ ip_record = create_inpatient(patient)
+ ip_record.expected_length_of_stay = 0
+ ip_record.save(ignore_permissions = True)
+
+ # Admit
+ service_unit = get_healthcare_service_unit()
+ admit_patient(ip_record, service_unit, now_datetime())
+
+ # Patient Encounter
+ patient_encounter = create_patient_encounter()
+ encounters = get_encounters_to_invoice(patient, "_Test Company")
+ encounter_ids = [entry.reference_name for entry in encounters]
+ self.assertFalse(patient_encounter.name in encounter_ids)
+
+ # Discharge
+ schedule_discharge(frappe.as_json({"patient": patient}))
+ self.assertEqual("Vacant", frappe.db.get_value("Healthcare Service Unit", service_unit, "occupancy_status"))
+
+ ip_record = frappe.get_doc("Inpatient Record", ip_record.name)
+ mark_invoiced_inpatient_occupancy(ip_record)
+ discharge_patient(ip_record)
+ setup_inpatient_settings(key="do_not_bill_inpatient_encounters", value=0)
def test_validate_overlap_admission(self):
frappe.db.sql("""delete from `tabInpatient Record`""")
@@ -89,9 +120,9 @@
ip_record.save(ignore_permissions = True)
-def setup_inpatient_settings():
+def setup_inpatient_settings(key, value):
settings = frappe.get_single("Healthcare Settings")
- settings.allow_discharge_despite_unbilled_services = 1
+ settings.set(key, value)
settings.save()
diff --git a/erpnext/healthcare/utils.py b/erpnext/healthcare/utils.py
index 50f6f47..6a499aa 100644
--- a/erpnext/healthcare/utils.py
+++ b/erpnext/healthcare/utils.py
@@ -77,11 +77,13 @@
def get_encounters_to_invoice(patient, company):
+ if not isinstance(patient, str):
+ patient = patient.name
encounters_to_invoice = []
encounters = frappe.get_list(
'Patient Encounter',
fields=['*'],
- filters={'patient': patient.name, 'company': company, 'invoiced': False, 'docstatus': 1}
+ filters={'patient': patient, 'company': company, 'invoiced': False, 'docstatus': 1}
)
if encounters:
for encounter in encounters: