fix: invoicing logic for appointments

This commit is contained in:
Rucha Mahabal 2020-03-17 20:18:16 +05:30
parent f2574dde37
commit 2d785b7b09

View File

@ -21,7 +21,7 @@ def get_healthcare_services_to_invoice(patient):
patient_appointments = frappe.get_list( patient_appointments = frappe.get_list(
'Patient Appointment', 'Patient Appointment',
fields='*', fields='*',
filters={'patient': patient.name, 'invoiced': False}, filters={'patient': patient.name, 'invoiced': 0},
order_by='appointment_date' order_by='appointment_date'
) )
if patient_appointments: if patient_appointments:
@ -32,7 +32,7 @@ def get_healthcare_services_to_invoice(patient):
clinical_procedures = get_clinical_procedures_to_invoice(patient) clinical_procedures = get_clinical_procedures_to_invoice(patient)
inpatient_services = get_inpatient_services_to_invoice(patient) inpatient_services = get_inpatient_services_to_invoice(patient)
items_to_invoice = encounters + lab_tests + clinical_procedures + inpatient_services items_to_invoice += encounters + lab_tests + clinical_procedures + inpatient_services
return items_to_invoice return items_to_invoice
def validate_customer_created(patient): def validate_customer_created(patient):
@ -45,10 +45,7 @@ def get_fee_validity(patient_appointments):
if not frappe.db.get_single_value('Healthcare Settings', 'enable_free_follow_ups'): if not frappe.db.get_single_value('Healthcare Settings', 'enable_free_follow_ups'):
return return
fee_validity_details = []
items_to_invoice = [] items_to_invoice = []
valid_days = frappe.db.get_single_value('Healthcare Settings', 'valid_days')
max_visits = frappe.db.get_single_value('Healthcare Settings', 'max_visits')
for appointment in patient_appointments: for appointment in patient_appointments:
if appointment.procedure_template: if appointment.procedure_template:
if frappe.db.get_value('Clinical Procedure Template', appointment.procedure_template, 'is_billable'): if frappe.db.get_value('Clinical Procedure Template', appointment.procedure_template, 'is_billable'):
@ -58,40 +55,21 @@ def get_fee_validity(patient_appointments):
'service': appointment.procedure_template 'service': appointment.procedure_template
}) })
else: else:
practitioner_exist_in_list = False fee_validity = frappe.db.exists('Fee Validity Reference', {'appointment': appointment.name})
skip_invoice = False if not fee_validity:
if fee_validity_details:
for validity in fee_validity_details:
if validity['practitioner'] == appointment.practitioner:
practitioner_exist_in_list = True
if validity['valid_till'] >= appointment.appointment_date:
validity['visits'] = validity['visits'] + 1
if int(max_visits) > validity['visits']:
skip_invoice = True
if not skip_invoice:
validity['visits'] = 1
validity['valid_till'] = appointment.appointment_date + datetime.timedelta(days=int(valid_days))
if not practitioner_exist_in_list:
valid_till = appointment.appointment_date + datetime.timedelta(days=int(valid_days))
visits = 0
fee_validity = check_fee_validity(appointment)
if fee_validity:
valid_till = fee_validity.valid_till
visits = fee_validity.visited
fee_validity_details.append({'practitioner': appointment.practitioner,
'valid_till': valid_till, 'visits': visits})
if not skip_invoice:
practitioner_charge = 0 practitioner_charge = 0
income_account = None income_account = None
service_item = None service_item = None
if appointment.practitioner: if appointment.practitioner:
service_item, practitioner_charge = get_service_item_and_practitioner_charge(appointment) service_item, practitioner_charge = get_service_item_and_practitioner_charge(appointment)
income_account = get_income_account(appointment.practitioner, appointment.company) income_account = get_income_account(appointment.practitioner, appointment.company)
items_to_invoice.append({'reference_type': 'Patient Appointment', 'reference_name': appointment.name, items_to_invoice.append({
'service': service_item, 'rate': practitioner_charge, 'reference_type': 'Patient Appointment',
'income_account': income_account}) 'reference_name': appointment.name,
'service': service_item,
'rate': practitioner_charge,
'income_account': income_account
})
return items_to_invoice return items_to_invoice