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_invalid_healthcare_service_unit_validation(self): from erpnext.healthcare.doctype.inpatient_record.inpatient_record import admit_patient, discharge_patient, schedule_discharge from erpnext.healthcare.doctype.inpatient_record.test_inpatient_record import \ create_inpatient, get_healthcare_service_unit, mark_invoiced_inpatient_occupancy frappe.db.sql("""delete from `tabInpatient Record`""") patient, medical_department, practitioner = create_healthcare_docs() 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( 'Test Service Unit Ip Occupancy') admit_patient(ip_record, service_unit, now_datetime()) appointment_service_unit = get_healthcare_service_unit( 'Test Service Unit Ip Occupancy for Appointment') appointment = create_appointment(patient, practitioner, nowdate(), service_unit=appointment_service_unit, save=0) self.assertRaises(frappe.exceptions.ValidationError, appointment.save) # Discharge schedule_discharge(frappe.as_json({'patient': patient})) ip_record1 = frappe.get_doc("Inpatient Record", ip_record.name) mark_invoiced_inpatient_occupancy(ip_record1) discharge_patient(ip_record1)
def test_allow_discharge_despite_unbilled_services(self): frappe.db.sql("""delete from `tabInpatient Record`""") setup_inpatient_settings( key="allow_discharge_despite_unbilled_services", 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()) # 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) # Should not validate Pending Invoices ip_record.discharge() 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_admit_and_discharge(self): frappe.db.sql("""delete from `tabInpatient Record`""") patient = get_patient() # Schedule Admission ip_record = create_inpatient(patient) ip_record.save(ignore_permissions = True) self.assertEqual(ip_record.name, frappe.db.get_value("Patient", patient, "inpatient_record")) self.assertEqual(ip_record.status, frappe.db.get_value("Patient", patient, "inpatient_status")) # Admit service_unit = get_healthcare_service_unit() admit_patient(ip_record, service_unit, now_datetime()) self.assertEqual("Admitted", frappe.db.get_value("Patient", patient, "inpatient_status")) self.assertEqual("Occupied", frappe.db.get_value("Healthcare Service Unit", service_unit, "occupancy_status")) # Discharge schedule_discharge(patient=patient) self.assertEqual("Vacant", frappe.db.get_value("Healthcare Service Unit", service_unit, "occupancy_status")) ip_record1 = frappe.get_doc("Inpatient Record", ip_record.name) # Validate Pending Invoices self.assertRaises(frappe.ValidationError, ip_record.discharge) mark_invoiced_inpatient_occupancy(ip_record1) discharge_patient(ip_record1) self.assertEqual(None, frappe.db.get_value("Patient", patient, "inpatient_record")) self.assertEqual(None, frappe.db.get_value("Patient", patient, "inpatient_status"))
def test_inpatient_validation(self): # Discharge schedule_discharge(frappe.as_json({'patient': self.patient})) self.ip_record.reload() mark_invoiced_inpatient_occupancy(self.ip_record) self.ip_record.reload() discharge_patient(self.ip_record) ipmo = create_ipmo(self.patient) # inpatient validation self.assertRaises(frappe.ValidationError, ipmo.insert)
def tearDown(self): if frappe.db.get_value('Patient', self.patient, 'inpatient_record'): # cleanup - Discharge schedule_discharge(frappe.as_json({'patient': self.patient})) self.ip_record.reload() mark_invoiced_inpatient_occupancy(self.ip_record) self.ip_record.reload() discharge_patient(self.ip_record) for doctype in [ "Inpatient Medication Entry", "Inpatient Medication Order" ]: frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype))
def tearDown(self): # cleanup - Discharge schedule_discharge(frappe.as_json({'patient': self.patient})) self.ip_record.reload() mark_invoiced_inpatient_occupancy(self.ip_record) self.ip_record.reload() discharge_patient(self.ip_record) for entry in frappe.get_all('Inpatient Medication Entry'): doc = frappe.get_doc('Inpatient Medication Entry', entry.name) doc.cancel() for entry in frappe.get_all('Inpatient Medication Order'): doc = frappe.get_doc('Inpatient Medication Order', entry.name) doc.cancel()
def test_inpatient_validation(self): # Discharge schedule_discharge( frappe.as_json({ "patient": self.patient, "discharge_ordered_datetime": now_datetime() })) self.ip_record.reload() mark_invoiced_inpatient_occupancy(self.ip_record) self.ip_record.reload() discharge_patient(self.ip_record, now_datetime()) ipmo = create_ipmo(self.patient) # inpatient validation self.assertRaises(frappe.ValidationError, ipmo.insert)
def tearDown(self): if frappe.db.get_value("Patient", self.patient, "inpatient_record"): # cleanup - Discharge schedule_discharge( frappe.as_json({ "patient": self.patient, "discharge_ordered_datetime": now_datetime() })) self.ip_record.reload() mark_invoiced_inpatient_occupancy(self.ip_record) self.ip_record.reload() discharge_patient(self.ip_record, now_datetime()) for doctype in [ "Inpatient Medication Entry", "Inpatient Medication Order" ]: frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype))
def test_admit_and_discharge(self): frappe.db.sql("""delete from `tabInpatient Record`""") patient = get_patient() # Schedule Admission ip_record = create_inpatient(patient) ip_record.save(ignore_permissions = True) self.assertEqual(ip_record.name, frappe.db.get_value("Patient", patient, "inpatient_record")) self.assertEqual(ip_record.status, frappe.db.get_value("Patient", patient, "inpatient_status")) # Admit service_unit = get_healthcare_service_unit() admit_patient(ip_record, service_unit, now_datetime()) self.assertEqual("Admitted", frappe.db.get_value("Patient", patient, "inpatient_status")) self.assertEqual("Occupied", frappe.db.get_value("Healthcare Service Unit", service_unit, "status")) # Discharge args = { "patient": patient, "encounter_id": "", "discharge_practitioner": "", "discharge_ordered": "", "followup_date": "", "discharge_instruction": "", "discharge_note": "", "include_chief_complaint": "", "include_diagnosis": "", "include_medication": "", "include_investigations": "", "include_procedures": "", "include_occupancy_details": "" } schedule_discharge(args=json.dumps(args)) self.assertEqual(get_check_out_stats(), frappe.db.get_value("Healthcare Service Unit", service_unit, "status")) ip_record1 = frappe.get_doc("Inpatient Record", ip_record.name) # Validate Pending Invoices self.assertRaises(frappe.ValidationError, ip_record.discharge) mark_invoiced_inpatient_occupancy(ip_record1) discharge_patient(ip_record1) self.assertEqual(None, frappe.db.get_value("Patient", patient, "inpatient_record")) self.assertEqual(None, frappe.db.get_value("Patient", patient, "inpatient_status"))
def tearDown(self): # cleanup - Discharge schedule_discharge( frappe.as_json({ "patient": self.patient, "discharge_ordered_datetime": now_datetime() })) self.ip_record.reload() mark_invoiced_inpatient_occupancy(self.ip_record) self.ip_record.reload() discharge_patient(self.ip_record, now_datetime()) for entry in frappe.get_all("Inpatient Medication Entry"): doc = frappe.get_doc("Inpatient Medication Entry", entry.name) doc.cancel() for entry in frappe.get_all("Inpatient Medication Order"): doc = frappe.get_doc("Inpatient Medication Order", entry.name) doc.cancel()
def test_appointment_booking_for_admission_service_unit(self): from erpnext.healthcare.doctype.inpatient_record.inpatient_record import ( admit_patient, discharge_patient, schedule_discharge, ) from erpnext.healthcare.doctype.inpatient_record.test_inpatient_record import ( create_inpatient, get_healthcare_service_unit, mark_invoiced_inpatient_occupancy, ) frappe.db.sql("""delete from `tabInpatient Record`""") patient, practitioner = create_healthcare_docs() 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( "_Test Service Unit Ip Occupancy") admit_patient(ip_record, service_unit, now_datetime()) appointment = create_appointment(patient, practitioner, nowdate(), service_unit=service_unit) self.assertEqual(appointment.service_unit, service_unit) # Discharge schedule_discharge( frappe.as_json({ "patient": patient, "discharge_ordered_datetime": now_datetime() })) ip_record1 = frappe.get_doc("Inpatient Record", ip_record.name) mark_invoiced_inpatient_occupancy(ip_record1) discharge_patient(ip_record1, now_datetime())
def tearDown(self): if frappe.db.get_value('Patient', self.patient, 'inpatient_record'): # cleanup - Discharge schedule_discharge( frappe.as_json({ 'patient': self.patient, 'discharge_ordered_datetime': now_datetime() })) self.ip_record.reload() mark_invoiced_inpatient_occupancy(self.ip_record) self.ip_record.reload() discharge_patient(self.ip_record, now_datetime()) for entry in frappe.get_all('Inpatient Medication Entry'): doc = frappe.get_doc('Inpatient Medication Entry', entry.name) doc.cancel() doc.delete() for entry in frappe.get_all('Inpatient Medication Order'): doc = frappe.get_doc('Inpatient Medication Order', entry.name) doc.cancel() doc.delete()