Пример #1
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)
Пример #2
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)
Пример #3
0
    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)
Пример #4
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"))
Пример #5
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))
Пример #8
0
    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()
Пример #9
0
    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)
Пример #10
0
    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"))
Пример #12
0
    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()
Пример #13
0
    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()