Write a Python program to keep track of data for the following information in a medical clinic: doctors, patients, and patient_visits
Patients and Doctors have an ID, first name, and last name as common attributes. Doctors have these additional attributes: specialty (e.g. heart surgeon, ear-nose-throat specialist, or dermatologist), total hours worked, and hourly pay. Further, doctors keep track of the patient_visits. A patient_visit has the following attributes, number_of_visits to the clinic, the patient who is visiting, the doctor requested to be visited, and the number of hours needed for consultation. Based on the number of consultation hours, the doctor will get paid.
The following functions are required:
1. addVisit: this function adds a patient_visit to the doctor. A new visit will NOT be added if the doctor has already completed 40 hours or more of consultation. If this happens, an error is thrown mentioning that the doctor cannot have more visits this week.
2. calculatePay: this function calculates the payment for the doctor using the following logic: Each hour is worth AED 150 for the first two visits of the patient and all further visits are billed at AED 50.
3. calculateBill: this function calculates the bill for the patient, which displays the doctor's details, patient details, and payment details. An additional 5% of the total is added as VAT.
The student is required to identify classes, related attributes, and behaviors. Students are free to add as many attributes as required. The appropriate access modifiers (private, public, or protected) must be used while implementing class relationships. Proper documentation of code is mandatory. The student must also test the code, by creating at-least three objects. All classes must have a display function, and the program must have the functionality to print the current state of the objects.