848 lines
56 KiB
Python
848 lines
56 KiB
Python
import os
|
|
import django
|
|
|
|
# Set up Django environment
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'hospital_management.settings')
|
|
django.setup()
|
|
|
|
import random
|
|
from datetime import datetime, date, time, timedelta
|
|
from django.utils import timezone as django_timezone
|
|
from django.contrib.auth import get_user_model
|
|
from pharmacy.models import *
|
|
from patients.models import PatientProfile
|
|
from emr.models import Encounter
|
|
from core.models import Tenant
|
|
import uuid
|
|
from decimal import Decimal
|
|
|
|
User = get_user_model()
|
|
|
|
# Saudi pharmacy data
|
|
SAUDI_MEDICATIONS = [
|
|
('Paracetamol', 'باراسيتامول', 'TAB', 'Analgesic', '500mg', ['J01XX01']),
|
|
('Ibuprofen', 'ايبوبروفين', 'TAB', 'NSAID', '400mg', ['M01AE01']),
|
|
('Metformin', 'ميتفورمين', 'TAB', 'Antidiabetic', '500mg', ['A10BA02']),
|
|
('Amlodipine', 'أملوديبين', 'TAB', 'Antihypertensive', '5mg', ['C08CA01']),
|
|
('Atorvastatin', 'أتورفاستاتين', 'TAB', 'Statin', '20mg', ['C10AA05']),
|
|
('Omeprazole', 'أوميبرازول', 'CAP', 'PPI', '20mg', ['A02BC01']),
|
|
('Salbutamol', 'سالبيوتامول', 'INH', 'Bronchodilator', '100mcg', ['R03AC02']),
|
|
('Warfarin', 'وارفارين', 'TAB', 'Anticoagulant', '5mg', ['B01AA03']),
|
|
('Insulin Glargine', 'انسولين جلارجين', 'INJ', 'Insulin', '100units/ml', ['A10AE04']),
|
|
('Levothyroxine', 'ليفوثيروكسين', 'TAB', 'Thyroid hormone', '100mcg', ['H03AA01']),
|
|
('Losartan', 'لوسارتان', 'TAB', 'ARB', '50mg', ['C09CA01']),
|
|
('Pantoprazole', 'بانتوبرازول', 'TAB', 'PPI', '40mg', ['A02BC02']),
|
|
('Clopidogrel', 'كلوبيدوجريل', 'TAB', 'Antiplatelet', '75mg', ['B01AC04']),
|
|
('Simvastatin', 'سيمفاستاتين', 'TAB', 'Statin', '20mg', ['C10AA01']),
|
|
('Furosemide', 'فوروسيمايد', 'TAB', 'Diuretic', '40mg', ['C03CA01']),
|
|
('Prednisone', 'بريدنيزون', 'TAB', 'Corticosteroid', '5mg', ['H02AB07']),
|
|
('Azithromycin', 'أزيثروميسين', 'TAB', 'Antibiotic', '250mg', ['J01FA10']),
|
|
('Ciprofloxacin', 'سيبروفلوكساسين', 'TAB', 'Antibiotic', '500mg', ['J01MA02']),
|
|
('Gabapentin', 'جابابنتين', 'CAP', 'Anticonvulsant', '300mg', ['N03AX12']),
|
|
('Tramadol', 'ترامادول', 'TAB', 'Opioid analgesic', '50mg', ['N02AX02']),
|
|
('Cetirizine 200units/ml', 'سيتيريزين 200units/ml', 'TAB', 'Antihistamine', '200units/ml', ['R06AE07']),
|
|
('Enalapril 200units/ml', 'إنالابريل 200units/ml', 'TAB', 'ACE Inhibitor', '200units/ml', ['C09AA02']),
|
|
('Hydrochlorothiazide 5mcg', 'هيدروكلوروثيازيد 5mcg', 'TAB', 'Diuretic', '5mcg', ['C03AA03']),
|
|
('Amoxicillin 200mg', 'أموكسيسيلين 200mg', 'CAP', 'Antibiotic', '200mg', ['J01CA04']),
|
|
('Dapagliflozin 500mg', 'داباجليفلوزين 500mg', 'TAB', 'Antidiabetic', '500mg', ['A10BK01']),
|
|
('Enalapril 500mg', 'إنالابريل 500mg', 'TAB', 'ACE Inhibitor', '500mg', ['C09AA02']),
|
|
('Lisinopril 50mcg', 'ليسينوبريل 50mcg', 'TAB', 'ACE Inhibitor', '50mcg', ['C09AA03']),
|
|
('Amoxicillin 500mcg', 'أموكسيسيلين 500mcg', 'CAP', 'Antibiotic', '500mcg', ['J01CA04']),
|
|
('Rosuvastatin 400mcg', 'روسوفاستاتين 400mcg', 'TAB', 'Statin', '400mcg', ['C10AA07']),
|
|
('Montelukast 400mg', 'مونتيلوكاست 400mg', 'TAB', 'Leukotriene antagonist', '400mg', ['R03DC03']),
|
|
('Amoxicillin 50mg', 'أموكسيسيلين 50mg', 'CAP', 'Antibiotic', '50mg', ['J01CA04']),
|
|
('Rosuvastatin 400units/ml', 'روسوفاستاتين 400units/ml', 'TAB', 'Statin', '400units/ml', ['C10AA07']),
|
|
('Dapagliflozin 400units/ml', 'داباجليفلوزين 400units/ml', 'TAB', 'Antidiabetic', '400units/ml', ['A10BK01']),
|
|
('Sitagliptin 400mcg', 'سيتاجليبتين 400mcg', 'TAB', 'Antidiabetic', '400mcg', ['A10BH01']),
|
|
('Amoxicillin 10units/ml', 'أموكسيسيلين 10units/ml', 'CAP', 'Antibiotic', '10units/ml', ['J01CA04']),
|
|
('Lisinopril 500units/ml', 'ليسينوبريل 500units/ml', 'TAB', 'ACE Inhibitor', '500units/ml', ['C09AA03']),
|
|
('Dapagliflozin 5units/ml', 'داباجليفلوزين 5units/ml', 'TAB', 'Antidiabetic', '5units/ml', ['A10BK01']),
|
|
('Enalapril 5mg', 'إنالابريل 5mg', 'TAB', 'ACE Inhibitor', '5mg', ['C09AA02']),
|
|
('Cetirizine 400mg', 'سيتيريزين 400mg', 'TAB', 'Antihistamine', '400mg', ['R06AE07']),
|
|
('Montelukast 25mg', 'مونتيلوكاست 25mg', 'TAB', 'Leukotriene antagonist', '25mg', ['R03DC03']),
|
|
('Enalapril 400mg', 'إنالابريل 400mg', 'TAB', 'ACE Inhibitor', '400mg', ['C09AA02']),
|
|
('Rosuvastatin 25mg', 'روسوفاستاتين 25mg', 'TAB', 'Statin', '25mg', ['C10AA07']),
|
|
('Dapagliflozin 400mcg', 'داباجليفلوزين 400mcg', 'TAB', 'Antidiabetic', '400mcg', ['A10BK01']),
|
|
('Cetirizine 5mg', 'سيتيريزين 5mg', 'TAB', 'Antihistamine', '5mg', ['R06AE07']),
|
|
('Dapagliflozin 5units/ml', 'داباجليفلوزين 5units/ml', 'TAB', 'Antidiabetic', '5units/ml', ['A10BK01']),
|
|
('Hydrochlorothiazide 20mcg', 'هيدروكلوروثيازيد 20mcg', 'TAB', 'Diuretic', '20mcg', ['C03AA03']),
|
|
('Sitagliptin 500mcg', 'سيتاجليبتين 500mcg', 'TAB', 'Antidiabetic', '500mcg', ['A10BH01']),
|
|
('Montelukast 100mcg', 'مونتيلوكاست 100mcg', 'TAB', 'Leukotriene antagonist', '100mcg', ['R03DC03']),
|
|
('Enalapril 50mg', 'إنالابريل 50mg', 'TAB', 'ACE Inhibitor', '50mg', ['C09AA02']),
|
|
('Sitagliptin 20mcg', 'سيتاجليبتين 20mcg', 'TAB', 'Antidiabetic', '20mcg', ['A10BH01']),
|
|
('Lisinopril 400mg', 'ليسينوبريل 400mg', 'TAB', 'ACE Inhibitor', '400mg', ['C09AA03']),
|
|
('Amoxicillin 200mg', 'أموكسيسيلين 200mg', 'CAP', 'Antibiotic', '200mg', ['J01CA04']),
|
|
('Fexofenadine 200mcg', 'فيكسوفينادين 200mcg', 'TAB', 'Antihistamine', '200mcg', ['R06AX26']),
|
|
('Lisinopril 10units/ml', 'ليسينوبريل 10units/ml', 'TAB', 'ACE Inhibitor', '10units/ml', ['C09AA03']),
|
|
('Hydrochlorothiazide 20mcg', 'هيدروكلوروثيازيد 20mcg', 'TAB', 'Diuretic', '20mcg', ['C03AA03']),
|
|
('Fexofenadine 25mcg', 'فيكسوفينادين 25mcg', 'TAB', 'Antihistamine', '25mcg', ['R06AX26']),
|
|
('Lisinopril 10mcg', 'ليسينوبريل 10mcg', 'TAB', 'ACE Inhibitor', '10mcg', ['C09AA03']),
|
|
('Fexofenadine 200units/ml', 'فيكسوفينادين 200units/ml', 'TAB', 'Antihistamine', '200units/ml', ['R06AX26']),
|
|
('Amoxicillin 200units/ml', 'أموكسيسيلين 200units/ml', 'CAP', 'Antibiotic', '200units/ml', ['J01CA04']),
|
|
('Fexofenadine 25mcg', 'فيكسوفينادين 25mcg', 'TAB', 'Antihistamine', '25mcg', ['R06AX26']),
|
|
('Enalapril 400units/ml', 'إنالابريل 400units/ml', 'TAB', 'ACE Inhibitor', '400units/ml', ['C09AA02']),
|
|
('Enalapril 100mcg', 'إنالابريل 100mcg', 'TAB', 'ACE Inhibitor', '100mcg', ['C09AA02']),
|
|
('Fexofenadine 20units/ml', 'فيكسوفينادين 20units/ml', 'TAB', 'Antihistamine', '20units/ml', ['R06AX26']),
|
|
('Lisinopril 20units/ml', 'ليسينوبريل 20units/ml', 'TAB', 'ACE Inhibitor', '20units/ml', ['C09AA03']),
|
|
('Cetirizine 200mcg', 'سيتيريزين 200mcg', 'TAB', 'Antihistamine', '200mcg', ['R06AE07']),
|
|
('Amoxicillin 10units/ml', 'أموكسيسيلين 10units/ml', 'CAP', 'Antibiotic', '10units/ml', ['J01CA04']),
|
|
('Rosuvastatin 5mg', 'روسوفاستاتين 5mg', 'TAB', 'Statin', '5mg', ['C10AA07']),
|
|
('Hydrochlorothiazide 20mcg', 'هيدروكلوروثيازيد 20mcg', 'TAB', 'Diuretic', '20mcg', ['C03AA03']),
|
|
('Amoxicillin 50mg', 'أموكسيسيلين 50mg', 'CAP', 'Antibiotic', '50mg', ['J01CA04']),
|
|
('Fexofenadine 5mg', 'فيكسوفينادين 5mg', 'TAB', 'Antihistamine', '5mg', ['R06AX26']),
|
|
('Dapagliflozin 50units/ml', 'داباجليفلوزين 50units/ml', 'TAB', 'Antidiabetic', '50units/ml', ['A10BK01']),
|
|
('Cetirizine 25mcg', 'سيتيريزين 25mcg', 'TAB', 'Antihistamine', '25mcg', ['R06AE07']),
|
|
('Hydrochlorothiazide 500mcg', 'هيدروكلوروثيازيد 500mcg', 'TAB', 'Diuretic', '500mcg', ['C03AA03']),
|
|
('Lisinopril 25mg', 'ليسينوبريل 25mg', 'TAB', 'ACE Inhibitor', '25mg', ['C09AA03']),
|
|
('Montelukast 400units/ml', 'مونتيلوكاست 400units/ml', 'TAB', 'Leukotriene antagonist', '400units/ml', ['R03DC03']),
|
|
('Sitagliptin 20units/ml', 'سيتاجليبتين 20units/ml', 'TAB', 'Antidiabetic', '20units/ml', ['A10BH01']),
|
|
('Cetirizine 200units/ml', 'سيتيريزين 200units/ml', 'TAB', 'Antihistamine', '200units/ml', ['R06AE07']),
|
|
('Rosuvastatin 10units/ml', 'روسوفاستاتين 10units/ml', 'TAB', 'Statin', '10units/ml', ['C10AA07']),
|
|
('Enalapril 200mcg', 'إنالابريل 200mcg', 'TAB', 'ACE Inhibitor', '200mcg', ['C09AA02']),
|
|
('Montelukast 20mg', 'مونتيلوكاست 20mg', 'TAB', 'Leukotriene antagonist', '20mg', ['R03DC03']),
|
|
('Hydrochlorothiazide 500mcg', 'هيدروكلوروثيازيد 500mcg', 'TAB', 'Diuretic', '500mcg', ['C03AA03']),
|
|
('Enalapril 25units/ml', 'إنالابريل 25units/ml', 'TAB', 'ACE Inhibitor', '25units/ml', ['C09AA02']),
|
|
('Montelukast 20units/ml', 'مونتيلوكاست 20units/ml', 'TAB', 'Leukotriene antagonist', '20units/ml', ['R03DC03']),
|
|
('Fexofenadine 25units/ml', 'فيكسوفينادين 25units/ml', 'TAB', 'Antihistamine', '25units/ml', ['R06AX26']),
|
|
('Hydrochlorothiazide 500mcg', 'هيدروكلوروثيازيد 500mcg', 'TAB', 'Diuretic', '500mcg', ['C03AA03']),
|
|
('Lisinopril 5units/ml', 'ليسينوبريل 5units/ml', 'TAB', 'ACE Inhibitor', '5units/ml', ['C09AA03']),
|
|
('Lisinopril 20units/ml', 'ليسينوبريل 20units/ml', 'TAB', 'ACE Inhibitor', '20units/ml', ['C09AA03']),
|
|
('Fexofenadine 20mg', 'فيكسوفينادين 20mg', 'TAB', 'Antihistamine', '20mg', ['R06AX26']),
|
|
('Cetirizine 20units/ml', 'سيتيريزين 20units/ml', 'TAB', 'Antihistamine', '20units/ml', ['R06AE07']),
|
|
('Lisinopril 25mg', 'ليسينوبريل 25mg', 'TAB', 'ACE Inhibitor', '25mg', ['C09AA03']),
|
|
('Rosuvastatin 400units/ml', 'روسوفاستاتين 400units/ml', 'TAB', 'Statin', '400units/ml', ['C10AA07']),
|
|
('Hydrochlorothiazide 50mg', 'هيدروكلوروثيازيد 50mg', 'TAB', 'Diuretic', '50mg', ['C03AA03']),
|
|
('Hydrochlorothiazide 20units/ml', 'هيدروكلوروثيازيد 20units/ml', 'TAB', 'Diuretic', '20units/ml', ['C03AA03']),
|
|
('Amoxicillin 5mg', 'أموكسيسيلين 5mg', 'CAP', 'Antibiotic', '5mg', ['J01CA04']),
|
|
('Cetirizine 10mcg', 'سيتيريزين 10mcg', 'TAB', 'Antihistamine', '10mcg', ['R06AE07']),
|
|
('Cetirizine 500mcg', 'سيتيريزين 500mcg', 'TAB', 'Antihistamine', '500mcg', ['R06AE07']),
|
|
('Rosuvastatin 25mg', 'روسوفاستاتين 25mg', 'TAB', 'Statin', '25mg', ['C10AA07']),
|
|
('Cetirizine 100units/ml', 'سيتيريزين 100units/ml', 'TAB', 'Antihistamine', '100units/ml', ['R06AE07']),
|
|
('Rosuvastatin 500mg', 'روسوفاستاتين 500mg', 'TAB', 'Statin', '500mg', ['C10AA07']),
|
|
('Fexofenadine 50mcg', 'فيكسوفينادين 50mcg', 'TAB', 'Antihistamine', '50mcg', ['R06AX26']),
|
|
('Sitagliptin 200units/ml', 'سيتاجليبتين 200units/ml', 'TAB', 'Antidiabetic', '200units/ml', ['A10BH01']),
|
|
('Montelukast 500mg', 'مونتيلوكاست 500mg', 'TAB', 'Leukotriene antagonist', '500mg', ['R03DC03']),
|
|
('Enalapril 50units/ml', 'إنالابريل 50units/ml', 'TAB', 'ACE Inhibitor', '50units/ml', ['C09AA02']),
|
|
('Lisinopril 200units/ml', 'ليسينوبريل 200units/ml', 'TAB', 'ACE Inhibitor', '200units/ml', ['C09AA03']),
|
|
('Fexofenadine 200units/ml', 'فيكسوفينادين 200units/ml', 'TAB', 'Antihistamine', '200units/ml', ['R06AX26']),
|
|
('Sitagliptin 400mcg', 'سيتاجليبتين 400mcg', 'TAB', 'Antidiabetic', '400mcg', ['A10BH01']),
|
|
('Amoxicillin 50mcg', 'أموكسيسيلين 50mcg', 'CAP', 'Antibiotic', '50mcg', ['J01CA04']),
|
|
('Cetirizine 100units/ml', 'سيتيريزين 100units/ml', 'TAB', 'Antihistamine', '100units/ml', ['R06AE07']),
|
|
('Amoxicillin 10units/ml', 'أموكسيسيلين 10units/ml', 'CAP', 'Antibiotic', '10units/ml', ['J01CA04']),
|
|
('Montelukast 400mg', 'مونتيلوكاست 400mg', 'TAB', 'Leukotriene antagonist', '400mg', ['R03DC03']),
|
|
('Hydrochlorothiazide 5mcg', 'هيدروكلوروثيازيد 5mcg', 'TAB', 'Diuretic', '5mcg', ['C03AA03']),
|
|
('Rosuvastatin 100mg', 'روسوفاستاتين 100mg', 'TAB', 'Statin', '100mg', ['C10AA07']),
|
|
('Hydrochlorothiazide 200units/ml', 'هيدروكلوروثيازيد 200units/ml', 'TAB', 'Diuretic', '200units/ml', ['C03AA03']),
|
|
('Rosuvastatin 20mg', 'روسوفاستاتين 20mg', 'TAB', 'Statin', '20mg', ['C10AA07']),
|
|
('Dapagliflozin 400mg', 'داباجليفلوزين 400mg', 'TAB', 'Antidiabetic', '400mg', ['A10BK01']),
|
|
('Cetirizine 500mg', 'سيتيريزين 500mg', 'TAB', 'Antihistamine', '500mg', ['R06AE07']),
|
|
('Sitagliptin 25mg', 'سيتاجليبتين 25mg', 'TAB', 'Antidiabetic', '25mg', ['A10BH01']),
|
|
('Hydrochlorothiazide 25mg', 'هيدروكلوروثيازيد 25mg', 'TAB', 'Diuretic', '25mg', ['C03AA03']),
|
|
('Sitagliptin 100mcg', 'سيتاجليبتين 100mcg', 'TAB', 'Antidiabetic', '100mcg', ['A10BH01']),
|
|
('Enalapril 200units/ml', 'إنالابريل 200units/ml', 'TAB', 'ACE Inhibitor', '200units/ml', ['C09AA02']),
|
|
('Rosuvastatin 50mcg', 'روسوفاستاتين 50mcg', 'TAB', 'Statin', '50mcg', ['C10AA07']),
|
|
('Sitagliptin 400units/ml', 'سيتاجليبتين 400units/ml', 'TAB', 'Antidiabetic', '400units/ml', ['A10BH01']),
|
|
('Enalapril 20mg', 'إنالابريل 20mg', 'TAB', 'ACE Inhibitor', '20mg', ['C09AA02']),
|
|
('Rosuvastatin 25units/ml', 'روسوفاستاتين 25units/ml', 'TAB', 'Statin', '25units/ml', ['C10AA07']),
|
|
('Hydrochlorothiazide 100units/ml', 'هيدروكلوروثيازيد 100units/ml', 'TAB', 'Diuretic', '100units/ml', ['C03AA03']),
|
|
('Cetirizine 100units/ml', 'سيتيريزين 100units/ml', 'TAB', 'Antihistamine', '100units/ml', ['R06AE07']),
|
|
('Montelukast 50units/ml', 'مونتيلوكاست 50units/ml', 'TAB', 'Leukotriene antagonist', '50units/ml', ['R03DC03']),
|
|
('Amoxicillin 10units/ml', 'أموكسيسيلين 10units/ml', 'CAP', 'Antibiotic', '10units/ml', ['J01CA04']),
|
|
('Hydrochlorothiazide 5units/ml', 'هيدروكلوروثيازيد 5units/ml', 'TAB', 'Diuretic', '5units/ml', ['C03AA03']),
|
|
('Cetirizine 50mcg', 'سيتيريزين 50mcg', 'TAB', 'Antihistamine', '50mcg', ['R06AE07']),
|
|
('Sitagliptin 500mg', 'سيتاجليبتين 500mg', 'TAB', 'Antidiabetic', '500mg', ['A10BH01']),
|
|
('Hydrochlorothiazide 5units/ml', 'هيدروكلوروثيازيد 5units/ml', 'TAB', 'Diuretic', '5units/ml', ['C03AA03']),
|
|
('Sitagliptin 20mg', 'سيتاجليبتين 20mg', 'TAB', 'Antidiabetic', '20mg', ['A10BH01']),
|
|
('Amoxicillin 5units/ml', 'أموكسيسيلين 5units/ml', 'CAP', 'Antibiotic', '5units/ml', ['J01CA04']),
|
|
('Fexofenadine 400units/ml', 'فيكسوفينادين 400units/ml', 'TAB', 'Antihistamine', '400units/ml', ['R06AX26']),
|
|
('Sitagliptin 200mg', 'سيتاجليبتين 200mg', 'TAB', 'Antidiabetic', '200mg', ['A10BH01']),
|
|
('Hydrochlorothiazide 100mg', 'هيدروكلوروثيازيد 100mg', 'TAB', 'Diuretic', '100mg', ['C03AA03']),
|
|
('Lisinopril 5mcg', 'ليسينوبريل 5mcg', 'TAB', 'ACE Inhibitor', '5mcg', ['C09AA03']),
|
|
('Amoxicillin 100mg', 'أموكسيسيلين 100mg', 'CAP', 'Antibiotic', '100mg', ['J01CA04']),
|
|
('Rosuvastatin 200mg', 'روسوفاستاتين 200mg', 'TAB', 'Statin', '200mg', ['C10AA07']),
|
|
('Sitagliptin 200units/ml', 'سيتاجليبتين 200units/ml', 'TAB', 'Antidiabetic', '200units/ml', ['A10BH01']),
|
|
('Hydrochlorothiazide 400units/ml', 'هيدروكلوروثيازيد 400units/ml', 'TAB', 'Diuretic', '400units/ml', ['C03AA03']),
|
|
('Lisinopril 25mcg', 'ليسينوبريل 25mcg', 'TAB', 'ACE Inhibitor', '25mcg', ['C09AA03']),
|
|
('Fexofenadine 25mcg', 'فيكسوفينادين 25mcg', 'TAB', 'Antihistamine', '25mcg', ['R06AX26']),
|
|
('Fexofenadine 25mcg', 'فيكسوفينادين 25mcg', 'TAB', 'Antihistamine', '25mcg', ['R06AX26']),
|
|
('Montelukast 500units/ml', 'مونتيلوكاست 500units/ml', 'TAB', 'Leukotriene antagonist', '500units/ml', ['R03DC03']),
|
|
('Fexofenadine 10units/ml', 'فيكسوفينادين 10units/ml', 'TAB', 'Antihistamine', '10units/ml', ['R06AX26']),
|
|
('Cetirizine 400units/ml', 'سيتيريزين 400units/ml', 'TAB', 'Antihistamine', '400units/ml', ['R06AE07']),
|
|
('Rosuvastatin 400mcg', 'روسوفاستاتين 400mcg', 'TAB', 'Statin', '400mcg', ['C10AA07']),
|
|
('Lisinopril 400mcg', 'ليسينوبريل 400mcg', 'TAB', 'ACE Inhibitor', '400mcg', ['C09AA03']),
|
|
('Enalapril 20units/ml', 'إنالابريل 20units/ml', 'TAB', 'ACE Inhibitor', '20units/ml', ['C09AA02']),
|
|
('Lisinopril 20units/ml', 'ليسينوبريل 20units/ml', 'TAB', 'ACE Inhibitor', '20units/ml', ['C09AA03']),
|
|
('Fexofenadine 50mcg', 'فيكسوفينادين 50mcg', 'TAB', 'Antihistamine', '50mcg', ['R06AX26']),
|
|
('Montelukast 100units/ml', 'مونتيلوكاست 100units/ml', 'TAB', 'Leukotriene antagonist', '100units/ml', ['R03DC03']),
|
|
('Cetirizine 100mcg', 'سيتيريزين 100mcg', 'TAB', 'Antihistamine', '100mcg', ['R06AE07']),
|
|
('Cetirizine 5mcg', 'سيتيريزين 5mcg', 'TAB', 'Antihistamine', '5mcg', ['R06AE07']),
|
|
('Sitagliptin 20units/ml', 'سيتاجليبتين 20units/ml', 'TAB', 'Antidiabetic', '20units/ml', ['A10BH01']),
|
|
('Amoxicillin 200units/ml', 'أموكسيسيلين 200units/ml', 'CAP', 'Antibiotic', '200units/ml', ['J01CA04']),
|
|
('Montelukast 20units/ml', 'مونتيلوكاست 20units/ml', 'TAB', 'Leukotriene antagonist', '20units/ml', ['R03DC03']),
|
|
('Amoxicillin 10mg', 'أموكسيسيلين 10mg', 'CAP', 'Antibiotic', '10mg', ['J01CA04']),
|
|
('Montelukast 400units/ml', 'مونتيلوكاست 400units/ml', 'TAB', 'Leukotriene antagonist', '400units/ml', ['R03DC03']),
|
|
('Hydrochlorothiazide 400mcg', 'هيدروكلوروثيازيد 400mcg', 'TAB', 'Diuretic', '400mcg', ['C03AA03']),
|
|
('Montelukast 200mcg', 'مونتيلوكاست 200mcg', 'TAB', 'Leukotriene antagonist', '200mcg', ['R03DC03']),
|
|
('Sitagliptin 5mcg', 'سيتاجليبتين 5mcg', 'TAB', 'Antidiabetic', '5mcg', ['A10BH01']),
|
|
('Montelukast 400mcg', 'مونتيلوكاست 400mcg', 'TAB', 'Leukotriene antagonist', '400mcg', ['R03DC03']),
|
|
('Lisinopril 50units/ml', 'ليسينوبريل 50units/ml', 'TAB', 'ACE Inhibitor', '50units/ml', ['C09AA03']),
|
|
('Cetirizine 20mcg', 'سيتيريزين 20mcg', 'TAB', 'Antihistamine', '20mcg', ['R06AE07']),
|
|
('Sitagliptin 400mcg', 'سيتاجليبتين 400mcg', 'TAB', 'Antidiabetic', '400mcg', ['A10BH01']),
|
|
('Lisinopril 20mg', 'ليسينوبريل 20mg', 'TAB', 'ACE Inhibitor', '20mg', ['C09AA03']),
|
|
('Enalapril 5mcg', 'إنالابريل 5mcg', 'TAB', 'ACE Inhibitor', '5mcg', ['C09AA02']),
|
|
('Enalapril 200mg', 'إنالابريل 200mg', 'TAB', 'ACE Inhibitor', '200mg', ['C09AA02']),
|
|
('Cetirizine 25mg', 'سيتيريزين 25mg', 'TAB', 'Antihistamine', '25mg', ['R06AE07']),
|
|
('Cetirizine 200units/ml', 'سيتيريزين 200units/ml', 'TAB', 'Antihistamine', '200units/ml', ['R06AE07']),
|
|
('Cetirizine 500units/ml', 'سيتيريزين 500units/ml', 'TAB', 'Antihistamine', '500units/ml', ['R06AE07']),
|
|
('Rosuvastatin 5units/ml', 'روسوفاستاتين 5units/ml', 'TAB', 'Statin', '5units/ml', ['C10AA07']),
|
|
('Amoxicillin 50mg', 'أموكسيسيلين 50mg', 'CAP', 'Antibiotic', '50mg', ['J01CA04']),
|
|
('Rosuvastatin 10mcg', 'روسوفاستاتين 10mcg', 'TAB', 'Statin', '10mcg', ['C10AA07']),
|
|
('Rosuvastatin 50units/ml', 'روسوفاستاتين 50units/ml', 'TAB', 'Statin', '50units/ml', ['C10AA07']),
|
|
('Montelukast 500mg', 'مونتيلوكاست 500mg', 'TAB', 'Leukotriene antagonist', '500mg', ['R03DC03']),
|
|
('Enalapril 20mcg', 'إنالابريل 20mcg', 'TAB', 'ACE Inhibitor', '20mcg', ['C09AA02']),
|
|
('Enalapril 400mg', 'إنالابريل 400mg', 'TAB', 'ACE Inhibitor', '400mg', ['C09AA02']),
|
|
('Rosuvastatin 25units/ml', 'روسوفاستاتين 25units/ml', 'TAB', 'Statin', '25units/ml', ['C10AA07']),
|
|
('Fexofenadine 20mg', 'فيكسوفينادين 20mg', 'TAB', 'Antihistamine', '20mg', ['R06AX26']),
|
|
('Enalapril 5mg', 'إنالابريل 5mg', 'TAB', 'ACE Inhibitor', '5mg', ['C09AA02']),
|
|
('Hydrochlorothiazide 20units/ml', 'هيدروكلوروثيازيد 20units/ml', 'TAB', 'Diuretic', '20units/ml', ['C03AA03']),
|
|
('Sitagliptin 100mg', 'سيتاجليبتين 100mg', 'TAB', 'Antidiabetic', '100mg', ['A10BH01']),
|
|
('Rosuvastatin 100mg', 'روسوفاستاتين 100mg', 'TAB', 'Statin', '100mg', ['C10AA07']),
|
|
('Rosuvastatin 100mcg', 'روسوفاستاتين 100mcg', 'TAB', 'Statin', '100mcg', ['C10AA07']),
|
|
('Amoxicillin 10mcg', 'أموكسيسيلين 10mcg', 'CAP', 'Antibiotic', '10mcg', ['J01CA04']),
|
|
('Montelukast 20mg', 'مونتيلوكاست 20mg', 'TAB', 'Leukotriene antagonist', '20mg', ['R03DC03']),
|
|
('Amoxicillin 500mcg', 'أموكسيسيلين 500mcg', 'CAP', 'Antibiotic', '500mcg', ['J01CA04']),
|
|
('Montelukast 500mg', 'مونتيلوكاست 500mg', 'TAB', 'Leukotriene antagonist', '500mg', ['R03DC03']),
|
|
('Montelukast 25units/ml', 'مونتيلوكاست 25units/ml', 'TAB', 'Leukotriene antagonist', '25units/ml', ['R03DC03']),
|
|
('Amoxicillin 100units/ml', 'أموكسيسيلين 100units/ml', 'CAP', 'Antibiotic', '100units/ml', ['J01CA04']),
|
|
('Hydrochlorothiazide 5mg', 'هيدروكلوروثيازيد 5mg', 'TAB', 'Diuretic', '5mg', ['C03AA03']),
|
|
('Rosuvastatin 500units/ml', 'روسوفاستاتين 500units/ml', 'TAB', 'Statin', '500units/ml', ['C10AA07']),
|
|
('Amoxicillin 50units/ml', 'أموكسيسيلين 50units/ml', 'CAP', 'Antibiotic', '50units/ml', ['J01CA04']),
|
|
('Cetirizine 10units/ml', 'سيتيريزين 10units/ml', 'TAB', 'Antihistamine', '10units/ml', ['R06AE07']),
|
|
('Rosuvastatin 50units/ml', 'روسوفاستاتين 50units/ml', 'TAB', 'Statin', '50units/ml', ['C10AA07']),
|
|
('Lisinopril 5mcg', 'ليسينوبريل 5mcg', 'TAB', 'ACE Inhibitor', '5mcg', ['C09AA03']),
|
|
('Dapagliflozin 200mcg', 'داباجليفلوزين 200mcg', 'TAB', 'Antidiabetic', '200mcg', ['A10BK01']),
|
|
('Dapagliflozin 20mg', 'داباجليفلوزين 20mg', 'TAB', 'Antidiabetic', '20mg', ['A10BK01']),
|
|
('Rosuvastatin 10mg', 'روسوفاستاتين 10mg', 'TAB', 'Statin', '10mg', ['C10AA07']),
|
|
('Amoxicillin 10mg', 'أموكسيسيلين 10mg', 'CAP', 'Antibiotic', '10mg', ['J01CA04']),
|
|
('Cetirizine 20mg', 'سيتيريزين 20mg', 'TAB', 'Antihistamine', '20mg', ['R06AE07']),
|
|
('Rosuvastatin 50units/ml', 'روسوفاستاتين 50units/ml', 'TAB', 'Statin', '50units/ml', ['C10AA07']),
|
|
('Fexofenadine 5mcg', 'فيكسوفينادين 5mcg', 'TAB', 'Antihistamine', '5mcg', ['R06AX26']),
|
|
('Rosuvastatin 20mg', 'روسوفاستاتين 20mg', 'TAB', 'Statin', '20mg', ['C10AA07']),
|
|
('Sitagliptin 100mcg', 'سيتاجليبتين 100mcg', 'TAB', 'Antidiabetic', '100mcg', ['A10BH01']),
|
|
('Amoxicillin 50mcg', 'أموكسيسيلين 50mcg', 'CAP', 'Antibiotic', '50mcg', ['J01CA04']),
|
|
('Amoxicillin 25units/ml', 'أموكسيسيلين 25units/ml', 'CAP', 'Antibiotic', '25units/ml', ['J01CA04']),
|
|
('Hydrochlorothiazide 20units/ml', 'هيدروكلوروثيازيد 20units/ml', 'TAB', 'Diuretic', '20units/ml', ['C03AA03']),
|
|
('Cetirizine 400mg', 'سيتيريزين 400mg', 'TAB', 'Antihistamine', '400mg', ['R06AE07']),
|
|
('Amoxicillin 200mcg', 'أموكسيسيلين 200mcg', 'CAP', 'Antibiotic', '200mcg', ['J01CA04']),
|
|
('Hydrochlorothiazide 25units/ml', 'هيدروكلوروثيازيد 25units/ml', 'TAB', 'Diuretic', '25units/ml', ['C03AA03']),
|
|
('Amoxicillin 25units/ml', 'أموكسيسيلين 25units/ml', 'CAP', 'Antibiotic', '25units/ml', ['J01CA04']),
|
|
('Cetirizine 50units/ml', 'سيتيريزين 50units/ml', 'TAB', 'Antihistamine', '50units/ml', ['R06AE07']),
|
|
('Enalapril 20mg', 'إنالابريل 20mg', 'TAB', 'ACE Inhibitor', '20mg', ['C09AA02']),
|
|
('Amoxicillin 25mcg', 'أموكسيسيلين 25mcg', 'CAP', 'Antibiotic', '25mcg', ['J01CA04']),
|
|
('Rosuvastatin 25mg', 'روسوفاستاتين 25mg', 'TAB', 'Statin', '25mg', ['C10AA07']),
|
|
('Amoxicillin 100mcg', 'أموكسيسيلين 100mcg', 'CAP', 'Antibiotic', '100mcg', ['J01CA04']),
|
|
('Dapagliflozin 500mcg', 'داباجليفلوزين 500mcg', 'TAB', 'Antidiabetic', '500mcg', ['A10BK01']),
|
|
('Hydrochlorothiazide 50units/ml', 'هيدروكلوروثيازيد 50units/ml', 'TAB', 'Diuretic', '50units/ml', ['C03AA03']),
|
|
('Montelukast 25mcg', 'مونتيلوكاست 25mcg', 'TAB', 'Leukotriene antagonist', '25mcg', ['R03DC03']),
|
|
('Fexofenadine 20mcg', 'فيكسوفينادين 20mcg', 'TAB', 'Antihistamine', '20mcg', ['R06AX26']),
|
|
('Rosuvastatin 200units/ml', 'روسوفاستاتين 200units/ml', 'TAB', 'Statin', '200units/ml', ['C10AA07']),
|
|
('Hydrochlorothiazide 400units/ml', 'هيدروكلوروثيازيد 400units/ml', 'TAB', 'Diuretic', '400units/ml', ['C03AA03']),
|
|
('Dapagliflozin 500units/ml', 'داباجليفلوزين 500units/ml', 'TAB', 'Antidiabetic', '500units/ml', ['A10BK01']),
|
|
('Lisinopril 5units/ml', 'ليسينوبريل 5units/ml', 'TAB', 'ACE Inhibitor', '5units/ml', ['C09AA03']),
|
|
('Enalapril 5mg', 'إنالابريل 5mg', 'TAB', 'ACE Inhibitor', '5mg', ['C09AA02']),
|
|
('Sitagliptin 100mg', 'سيتاجليبتين 100mg', 'TAB', 'Antidiabetic', '100mg', ['A10BH01']),
|
|
('Fexofenadine 25mg', 'فيكسوفينادين 25mg', 'TAB', 'Antihistamine', '25mg', ['R06AX26']),
|
|
('Cetirizine 10mg', 'سيتيريزين 10mg', 'TAB', 'Antihistamine', '10mg', ['R06AE07']),
|
|
('Fexofenadine 10units/ml', 'فيكسوفينادين 10units/ml', 'TAB', 'Antihistamine', '10units/ml', ['R06AX26']),
|
|
('Fexofenadine 20units/ml', 'فيكسوفينادين 20units/ml', 'TAB', 'Antihistamine', '20units/ml', ['R06AX26']),
|
|
('Sitagliptin 10mg', 'سيتاجليبتين 10mg', 'TAB', 'Antidiabetic', '10mg', ['A10BH01']),
|
|
('Dapagliflozin 100units/ml', 'داباجليفلوزين 100units/ml', 'TAB', 'Antidiabetic', '100units/ml', ['A10BK01']),
|
|
('Amoxicillin 20units/ml', 'أموكسيسيلين 20units/ml', 'CAP', 'Antibiotic', '20units/ml', ['J01CA04']),
|
|
('Dapagliflozin 10mcg', 'داباجليفلوزين 10mcg', 'TAB', 'Antidiabetic', '10mcg', ['A10BK01']),
|
|
('Dapagliflozin 400mcg', 'داباجليفلوزين 400mcg', 'TAB', 'Antidiabetic', '400mcg', ['A10BK01']),
|
|
('Dapagliflozin 10mg', 'داباجليفلوزين 10mg', 'TAB', 'Antidiabetic', '10mg', ['A10BK01']),
|
|
('Amoxicillin 400mcg', 'أموكسيسيلين 400mcg', 'CAP', 'Antibiotic', '400mcg', ['J01CA04']),
|
|
('Dapagliflozin 500mg', 'داباجليفلوزين 500mg', 'TAB', 'Antidiabetic', '500mg', ['A10BK01']),
|
|
('Dapagliflozin 25mg', 'داباجليفلوزين 25mg', 'TAB', 'Antidiabetic', '25mg', ['A10BK01']),
|
|
('Montelukast 10units/ml', 'مونتيلوكاست 10units/ml', 'TAB', 'Leukotriene antagonist', '10units/ml', ['R03DC03']),
|
|
('Rosuvastatin 200mg', 'روسوفاستاتين 200mg', 'TAB', 'Statin', '200mg', ['C10AA07']),
|
|
('Sitagliptin 400mg', 'سيتاجليبتين 400mg', 'TAB', 'Antidiabetic', '400mg', ['A10BH01']),
|
|
('Fexofenadine 10units/ml', 'فيكسوفينادين 10units/ml', 'TAB', 'Antihistamine', '10units/ml', ['R06AX26']),
|
|
('Sitagliptin 100mcg', 'سيتاجليبتين 100mcg', 'TAB', 'Antidiabetic', '100mcg', ['A10BH01']),
|
|
('Lisinopril 5mg', 'ليسينوبريل 5mg', 'TAB', 'ACE Inhibitor', '5mg', ['C09AA03']),
|
|
('Hydrochlorothiazide 400mg', 'هيدروكلوروثيازيد 400mg', 'TAB', 'Diuretic', '400mg', ['C03AA03']),
|
|
('Enalapril 400mg', 'إنالابريل 400mg', 'TAB', 'ACE Inhibitor', '400mg', ['C09AA02']),
|
|
('Fexofenadine 25mg', 'فيكسوفينادين 25mg', 'TAB', 'Antihistamine', '25mg', ['R06AX26']),
|
|
('Montelukast 10mg', 'مونتيلوكاست 10mg', 'TAB', 'Leukotriene antagonist', '10mg', ['R03DC03']),
|
|
('Hydrochlorothiazide 100mcg', 'هيدروكلوروثيازيد 100mcg', 'TAB', 'Diuretic', '100mcg', ['C03AA03']),
|
|
('Enalapril 20mg', 'إنالابريل 20mg', 'TAB', 'ACE Inhibitor', '20mg', ['C09AA02']),
|
|
('Dapagliflozin 100units/ml', 'داباجليفلوزين 100units/ml', 'TAB', 'Antidiabetic', '100units/ml', ['A10BK01']),
|
|
('Enalapril 10mcg', 'إنالابريل 10mcg', 'TAB', 'ACE Inhibitor', '10mcg', ['C09AA02']),
|
|
('Montelukast 25units/ml', 'مونتيلوكاست 25units/ml', 'TAB', 'Leukotriene antagonist', '25units/ml', ['R03DC03']),
|
|
('Dapagliflozin 20mcg', 'داباجليفلوزين 20mcg', 'TAB', 'Antidiabetic', '20mcg', ['A10BK01']),
|
|
('Lisinopril 5units/ml', 'ليسينوبريل 5units/ml', 'TAB', 'ACE Inhibitor', '5units/ml', ['C09AA03']),
|
|
('Hydrochlorothiazide 25units/ml', 'هيدروكلوروثيازيد 25units/ml', 'TAB', 'Diuretic', '25units/ml', ['C03AA03']),
|
|
('Montelukast 400mcg', 'مونتيلوكاست 400mcg', 'TAB', 'Leukotriene antagonist', '400mcg', ['R03DC03']),
|
|
('Enalapril 20units/ml', 'إنالابريل 20units/ml', 'TAB', 'ACE Inhibitor', '20units/ml', ['C09AA02']),
|
|
('Rosuvastatin 50mcg', 'روسوفاستاتين 50mcg', 'TAB', 'Statin', '50mcg', ['C10AA07']),
|
|
('Cetirizine 400units/ml', 'سيتيريزين 400units/ml', 'TAB', 'Antihistamine', '400units/ml', ['R06AE07']),
|
|
('Dapagliflozin 50units/ml', 'داباجليفلوزين 50units/ml', 'TAB', 'Antidiabetic', '50units/ml', ['A10BK01']),
|
|
('Montelukast 25mg', 'مونتيلوكاست 25mg', 'TAB', 'Leukotriene antagonist', '25mg', ['R03DC03']),
|
|
('Enalapril 50units/ml', 'إنالابريل 50units/ml', 'TAB', 'ACE Inhibitor', '50units/ml', ['C09AA02']),
|
|
('Montelukast 20mcg', 'مونتيلوكاست 20mcg', 'TAB', 'Leukotriene antagonist', '20mcg', ['R03DC03']),
|
|
('Dapagliflozin 400mg', 'داباجليفلوزين 400mg', 'TAB', 'Antidiabetic', '400mg', ['A10BK01']),
|
|
('Amoxicillin 5mg', 'أموكسيسيلين 5mg', 'CAP', 'Antibiotic', '5mg', ['J01CA04']),
|
|
('Dapagliflozin 10units/ml', 'داباجليفلوزين 10units/ml', 'TAB', 'Antidiabetic', '10units/ml', ['A10BK01']),
|
|
('Sitagliptin 50mg', 'سيتاجليبتين 50mg', 'TAB', 'Antidiabetic', '50mg', ['A10BH01']),
|
|
('Cetirizine 100mg', 'سيتيريزين 100mg', 'TAB', 'Antihistamine', '100mg', ['R06AE07']),
|
|
('Dapagliflozin 200units/ml', 'داباجليفلوزين 200units/ml', 'TAB', 'Antidiabetic', '200units/ml', ['A10BK01']),
|
|
('Rosuvastatin 500mg', 'روسوفاستاتين 500mg', 'TAB', 'Statin', '500mg', ['C10AA07']),
|
|
('Fexofenadine 5units/ml', 'فيكسوفينادين 5units/ml', 'TAB', 'Antihistamine', '5units/ml', ['R06AX26']),
|
|
('Amoxicillin 200mcg', 'أموكسيسيلين 200mcg', 'CAP', 'Antibiotic', '200mcg', ['J01CA04']),
|
|
('Lisinopril 20mg', 'ليسينوبريل 20mg', 'TAB', 'ACE Inhibitor', '20mg', ['C09AA03']),
|
|
('Cetirizine 100mg', 'سيتيريزين 100mg', 'TAB', 'Antihistamine', '100mg', ['R06AE07']),
|
|
('Montelukast 200mg', 'مونتيلوكاست 200mg', 'TAB', 'Leukotriene antagonist', '200mg', ['R03DC03']),
|
|
('Amoxicillin 400mg', 'أموكسيسيلين 400mg', 'CAP', 'Antibiotic', '400mg', ['J01CA04']),
|
|
('Cetirizine 50mcg', 'سيتيريزين 50mcg', 'TAB', 'Antihistamine', '50mcg', ['R06AE07']),
|
|
('Amoxicillin 20mcg', 'أموكسيسيلين 20mcg', 'CAP', 'Antibiotic', '20mcg', ['J01CA04']),
|
|
('Montelukast 400mg', 'مونتيلوكاست 400mg', 'TAB', 'Leukotriene antagonist', '400mg', ['R03DC03']),
|
|
('Amoxicillin 400units/ml', 'أموكسيسيلين 400units/ml', 'CAP', 'Antibiotic', '400units/ml', ['J01CA04']),
|
|
('Rosuvastatin 10mcg', 'روسوفاستاتين 10mcg', 'TAB', 'Statin', '10mcg', ['C10AA07']),
|
|
('Fexofenadine 100units/ml', 'فيكسوفينادين 100units/ml', 'TAB', 'Antihistamine', '100units/ml', ['R06AX26']),
|
|
('Hydrochlorothiazide 500units/ml', 'هيدروكلوروثيازيد 500units/ml', 'TAB', 'Diuretic', '500units/ml', ['C03AA03']),
|
|
('Sitagliptin 5mg', 'سيتاجليبتين 5mg', 'TAB', 'Antidiabetic', '5mg', ['A10BH01']),
|
|
('Fexofenadine 100mcg', 'فيكسوفينادين 100mcg', 'TAB', 'Antihistamine', '100mcg', ['R06AX26']),
|
|
('Hydrochlorothiazide 10mcg', 'هيدروكلوروثيازيد 10mcg', 'TAB', 'Diuretic', '10mcg', ['C03AA03']),
|
|
('Cetirizine 20units/ml', 'سيتيريزين 20units/ml', 'TAB', 'Antihistamine', '20units/ml', ['R06AE07']),
|
|
('Montelukast 20units/ml', 'مونتيلوكاست 20units/ml', 'TAB', 'Leukotriene antagonist', '20units/ml', ['R03DC03']),
|
|
('Lisinopril 200mg', 'ليسينوبريل 200mg', 'TAB', 'ACE Inhibitor', '200mg', ['C09AA03']),
|
|
('Dapagliflozin 10mg', 'داباجليفلوزين 10mg', 'TAB', 'Antidiabetic', '10mg', ['A10BK01']),
|
|
('Montelukast 20mcg', 'مونتيلوكاست 20mcg', 'TAB', 'Leukotriene antagonist', '20mcg', ['R03DC03']),
|
|
('Montelukast 10mg', 'مونتيلوكاست 10mg', 'TAB', 'Leukotriene antagonist', '10mg', ['R03DC03']),
|
|
('Lisinopril 25units/ml', 'ليسينوبريل 25units/ml', 'TAB', 'ACE Inhibitor', '25units/ml', ['C09AA03']),
|
|
]
|
|
|
|
SAUDI_DOSAGE_FORMS = [
|
|
'TAB', 'CAP', 'SYR', 'INJ', 'CRE', 'GEL', 'DRO', 'INH', 'SUP', 'LOT'
|
|
]
|
|
|
|
SAUDI_ROUTES = [
|
|
'ORAL', 'IV', 'IM', 'SC', 'TOPICAL', 'INHALATION', 'RECTAL', 'OPHTHALMIC', 'OTIC', 'NASAL'
|
|
]
|
|
|
|
SAUDI_FREQUENCIES = [
|
|
'ONCE_DAILY', 'TWICE_DAILY', 'THREE_TIMES_DAILY', 'FOUR_TIMES_DAILY',
|
|
'EVERY_6_HOURS', 'EVERY_8_HOURS', 'EVERY_12_HOURS', 'WEEKLY', 'AS_NEEDED'
|
|
]
|
|
|
|
|
|
def get_pharmacists(tenants):
|
|
"""Get pharmacists for pharmacy operations"""
|
|
pharmacists = []
|
|
|
|
for tenant in tenants:
|
|
tenant_pharmacists = User.objects.filter(
|
|
tenant=tenant,
|
|
is_active=True,
|
|
employee_profile__role='PHARMACIST'
|
|
)
|
|
pharmacists.extend(list(tenant_pharmacists))
|
|
|
|
# Create mock pharmacists if none exist
|
|
if not pharmacists:
|
|
pharmacists = create_mock_pharmacists(tenants)
|
|
|
|
return pharmacists
|
|
|
|
|
|
def create_mock_pharmacists(tenants):
|
|
"""Create mock pharmacists"""
|
|
pharmacists = []
|
|
|
|
mock_pharmacists = [
|
|
{'first_name': 'Ahmed', 'last_name': 'Al-Kindi'},
|
|
{'first_name': 'Fatma', 'last_name': 'Al-Zahra'},
|
|
{'first_name': 'Khalid', 'last_name': 'Al-Pharma'},
|
|
{'first_name': 'Nour', 'last_name': 'Al-Dawaa'},
|
|
]
|
|
|
|
for tenant in tenants:
|
|
for pharmacist_data in mock_pharmacists:
|
|
try:
|
|
email = f"{pharmacist_data['first_name'].lower()}.{pharmacist_data['last_name'].lower().replace('-', '')}@{tenant.domain}"
|
|
existing_user = User.objects.filter(email=email).first()
|
|
|
|
if not existing_user:
|
|
user = User.objects.create_user(
|
|
email=email,
|
|
first_name=pharmacist_data['first_name'],
|
|
last_name=pharmacist_data['last_name'],
|
|
employee_profile__role='PHARMACIST',
|
|
tenant=tenant,
|
|
is_active=True,
|
|
password='temp_password_123'
|
|
)
|
|
pharmacists.append(user)
|
|
else:
|
|
pharmacists.append(existing_user)
|
|
|
|
except Exception as e:
|
|
print(f"Error creating pharmacist: {e}")
|
|
continue
|
|
|
|
return pharmacists
|
|
|
|
|
|
def create_medications(tenants):
|
|
"""Create medication master data"""
|
|
medications = []
|
|
|
|
for tenant in tenants:
|
|
for med_data in SAUDI_MEDICATIONS:
|
|
name, arabic_name, form, category, strength, ndc_codes = med_data
|
|
|
|
try:
|
|
medication = Medication.objects.create(
|
|
tenant=tenant,
|
|
medication_id=uuid.uuid4(),
|
|
generic_name=name,
|
|
brand_name=f"{name} {random.choice(['Plus', 'SR', 'XR', ''])}".strip(),
|
|
dosage_form=form.upper() if form.upper() in ['TABLET', 'CAPSULE', 'LIQUID', 'INJECTION', 'TOPICAL', 'INHALER', 'PATCH', 'SUPPOSITORY', 'CREAM', 'OINTMENT', 'DROPS', 'SPRAY', 'OTHER'] else 'OTHER',
|
|
strength=strength,
|
|
unit_of_measure=random.choice(['MG', 'ML', 'MCG', 'G', 'L', 'UNITS', 'IU', 'MEQ', 'PERCENT','OTHER']),
|
|
drug_class=category,
|
|
controlled_substance_schedule=random.choice(['NON', 'CIV', 'CIII', 'CI', 'CII', 'CV']) if 'Tramadol' in name else 'NON',
|
|
ndc_number=f"{random.randint(1000, 9999)}-{random.randint(100, 999)}-{random.randint(10, 99)}",
|
|
rxcui=f"{random.randint(100000, 999999)}",
|
|
indications=f"Treatment of {category.lower()} and related conditions",
|
|
contraindications="Hypersensitivity to the drug" if random.choice([True, False]) else None,
|
|
side_effects="Nausea, headache, dizziness" if random.choice([True, False]) else None,
|
|
warnings="Use with caution in elderly patients" if random.choice([True, False]) else None,
|
|
adult_dose_range=f"{strength} daily to twice daily",
|
|
pediatric_dose_range=f"Reduce dose by 50%" if random.choice([True, False]) else None,
|
|
max_daily_dose=f"{int(strength.split('mg')[0]) * 4}mg" if 'mg' in strength else "As per guidelines",
|
|
routes_of_administration=['ORAL'] if form in ['TAB', 'CAP', 'SYR'] else ['TOPICAL'],
|
|
storage_requirements=f"Store at room temperature (15-30°C)",
|
|
manufacturer=random.choice([
|
|
'Saudi Pharmaceutical Industries',
|
|
'Jamjoom Pharma',
|
|
'Tabuk Pharmaceuticals',
|
|
'Riyadh Pharma',
|
|
'SPIMACO'
|
|
]),
|
|
is_active=True,
|
|
created_at=django_timezone.now() - timedelta(days=random.randint(30, 365)),
|
|
updated_at=django_timezone.now() - timedelta(days=random.randint(0, 30))
|
|
)
|
|
medications.append(medication)
|
|
|
|
except Exception as e:
|
|
print(f"Error creating medication {name}: {e}")
|
|
continue
|
|
|
|
print(f"Created {len(medications)} medications")
|
|
return medications
|
|
|
|
|
|
def create_pharmacy_inventory(medications):
|
|
"""Create pharmacy inventory items"""
|
|
inventory_items = []
|
|
|
|
for medication in medications:
|
|
# Create 1-3 different package sizes/batches per medication
|
|
num_items = random.randint(1, 3)
|
|
|
|
for item_num in range(num_items):
|
|
received_date = django_timezone.now().date() - timedelta(days=random.randint(1, 30))
|
|
expiration_date = received_date + timedelta(days=random.randint(365, 1095))
|
|
|
|
try:
|
|
inventory_item = InventoryItem.objects.create(
|
|
tenant=medication.tenant,
|
|
medication=medication,
|
|
lot_number=f"BAT{random.randint(100000, 999999)}",
|
|
expiration_date=expiration_date,
|
|
quantity_on_hand=random.randint(0, 1000),
|
|
quantity_allocated=random.randint(0, 50),
|
|
quantity_available=0, # Will be calculated in save()
|
|
reorder_point=random.randint(10, 50),
|
|
reorder_quantity=random.randint(100, 500),
|
|
storage_location=f"Shelf {random.choice(['A', 'B', 'C', 'D'])}-{random.randint(1, 20)}",
|
|
bin_location=f"Bin-{random.randint(1, 10)}" if random.choice([True, False]) else None,
|
|
unit_cost=Decimal(str(round(random.uniform(0.50, 100.00), 2))),
|
|
total_cost=Decimal('0.00'), # Will be calculated in save()
|
|
supplier=random.choice([
|
|
'National Medical Supply',
|
|
'Gulf Pharma Trading',
|
|
'Saudi Medical Distributors',
|
|
'Riyadh Medical Supplies',
|
|
'Jeddah Pharma Hub'
|
|
]),
|
|
purchase_order_number=f"PO{random.randint(10000, 99999)}" if random.choice([True, False]) else None,
|
|
received_date=received_date,
|
|
last_counted=received_date + timedelta(days=random.randint(1, 30)) if random.choice(
|
|
[True, False]) else None,
|
|
status=random.choice(['ACTIVE', 'QUARANTINE']) if random.random() < 0.95 else 'QUARANTINE',
|
|
quality_checked=random.choice([True, False]),
|
|
quality_check_date=received_date + timedelta(days=1) if random.choice([True, False]) else None,
|
|
quality_notes="Quality check passed" if random.choice([True, False]) else None,
|
|
created_at=django_timezone.now() - timedelta(days=random.randint(7, 60)),
|
|
updated_at=django_timezone.now() - timedelta(days=random.randint(0, 7))
|
|
)
|
|
inventory_items.append(inventory_item)
|
|
|
|
except Exception as e:
|
|
print(f"Error creating inventory item for {medication.generic_name}: {e}")
|
|
continue
|
|
|
|
print(f"Created {len(inventory_items)} inventory items")
|
|
return inventory_items
|
|
|
|
|
|
def create_prescriptions(tenants, days_back=30):
|
|
"""Create prescriptions"""
|
|
prescriptions = []
|
|
|
|
# Get required data
|
|
patients = list(PatientProfile.objects.filter(tenant__in=tenants))
|
|
providers = list(User.objects.filter(
|
|
tenant__in=tenants,
|
|
employee_profile__role__in=['PHYSICIAN', 'NURSE_PRACTITIONER'],
|
|
is_active=True
|
|
))
|
|
encounters = list(Encounter.objects.filter(tenant__in=tenants, status='COMPLETED'))
|
|
medications = list(Medication.objects.filter(tenant__in=tenants))
|
|
|
|
if not all([patients, providers, medications]):
|
|
print("Missing required data for prescriptions")
|
|
return prescriptions
|
|
|
|
start_date = django_timezone.now().date() - timedelta(days=days_back)
|
|
|
|
for day_offset in range(days_back):
|
|
prescription_date = start_date + timedelta(days=day_offset)
|
|
daily_prescriptions = random.randint(10, 30)
|
|
|
|
for prescription_num in range(daily_prescriptions):
|
|
patient = random.choice(patients)
|
|
provider = random.choice([p for p in providers if p.tenant == patient.tenant])
|
|
|
|
# Link to encounter if available
|
|
patient_encounters = [e for e in encounters if e.patient == patient]
|
|
encounter = random.choice(patient_encounters) if patient_encounters else None
|
|
|
|
# Prescription details
|
|
prescribed_datetime = django_timezone.make_aware(
|
|
datetime.combine(prescription_date, time(random.randint(8, 18), random.randint(0, 59)))
|
|
)
|
|
|
|
status = random.choices(
|
|
['ACTIVE', 'DISPENSED', 'COMPLETED', 'CANCELLED', 'EXPIRED'],
|
|
weights=[40, 25, 20, 10, 5]
|
|
)[0]
|
|
|
|
medication = random.choice([m for m in medications if m.tenant == patient.tenant])
|
|
|
|
# Generate unique prescription number
|
|
prescription_number = f"RX{patient.tenant.id}{day_offset:02d}{prescription_num:03d}{random.randint(100, 999)}"
|
|
|
|
try:
|
|
prescription = Prescription.objects.create(
|
|
tenant=patient.tenant,
|
|
patient=patient,
|
|
prescription_id=uuid.uuid4(),
|
|
prescription_number=prescription_number,
|
|
prescriber=provider,
|
|
medication=medication,
|
|
quantity_prescribed=random.randint(30, 90),
|
|
quantity_unit='TABLETS' if medication.dosage_form in ['TABLET', 'CAPSULE'] else 'ML',
|
|
dosage_instructions=random.choice([
|
|
"Take one tablet twice daily with food",
|
|
"Take one capsule daily in the morning",
|
|
"Take as needed for pain",
|
|
"Apply thin layer to affected area twice daily"
|
|
]),
|
|
frequency=random.choice([
|
|
'Once daily', 'Twice daily', 'Three times daily', 'As needed'
|
|
]),
|
|
duration=f"{random.randint(7, 30)} days" if random.choice([True, False]) else None,
|
|
refills_authorized=random.randint(0, 6),
|
|
refills_remaining=random.randint(0, 6),
|
|
date_prescribed=prescribed_datetime,
|
|
date_written=prescribed_datetime.date(),
|
|
expiration_date=prescribed_datetime.date() + timedelta(days=365),
|
|
status=status,
|
|
indication=random.choice([
|
|
'Pain management', 'Hypertension', 'Diabetes', 'Infection',
|
|
'Anxiety', 'Depression', 'Asthma', 'Arthritis'
|
|
]) if random.choice([True, False]) else None,
|
|
diagnosis_code=f"M79.{random.randint(10, 99)}",
|
|
pharmacy_notes=f"Dispensed by pharmacy on {prescription_date}" if random.choice([True, False]) else None,
|
|
patient_instructions=random.choice([
|
|
"Take with food",
|
|
"Take on empty stomach",
|
|
"Take at bedtime",
|
|
"Avoid alcohol",
|
|
"Complete full course"
|
|
]) if random.choice([True, False]) else None,
|
|
created_at=prescribed_datetime,
|
|
updated_at=prescribed_datetime + timedelta(hours=random.randint(1, 24))
|
|
)
|
|
|
|
prescriptions.append(prescription)
|
|
|
|
except Exception as e:
|
|
print(f"Error creating prescription: {e}")
|
|
continue
|
|
|
|
print(f"Created {len(prescriptions)} prescriptions")
|
|
return prescriptions
|
|
|
|
|
|
|
|
|
|
def create_dispense_records(prescriptions, inventory_items, pharmacists):
|
|
"""Create medication dispense records"""
|
|
dispense_records = []
|
|
|
|
for prescription in prescriptions:
|
|
if prescription.status not in ['ACTIVE', 'DISPENSED', 'COMPLETED']:
|
|
continue
|
|
|
|
# Dispense 60-80% of prescriptions
|
|
if random.random() > 0.8:
|
|
continue
|
|
|
|
# Get the single medication from the prescription
|
|
medication = prescription.medication
|
|
|
|
# Find available inventory
|
|
available_inventory = [
|
|
item for item in inventory_items
|
|
if item.medication == medication and item.quantity_on_hand > 0
|
|
]
|
|
|
|
if not available_inventory:
|
|
continue
|
|
|
|
inventory_item = random.choice(available_inventory)
|
|
pharmacist = random.choice([p for p in pharmacists if p.tenant == prescription.tenant])
|
|
|
|
# Dispense details
|
|
quantity_prescribed = prescription.quantity_prescribed
|
|
quantity_dispensed = min(quantity_prescribed, inventory_item.quantity_on_hand)
|
|
|
|
dispense_datetime = prescription.date_prescribed + timedelta(
|
|
hours=random.randint(2, 48)
|
|
)
|
|
|
|
try:
|
|
dispense_record = DispenseRecord.objects.create(
|
|
prescription=prescription,
|
|
inventory_item=inventory_item,
|
|
dispense_id=uuid.uuid4(),
|
|
quantity_dispensed=quantity_dispensed,
|
|
quantity_remaining=quantity_prescribed - quantity_dispensed,
|
|
date_dispensed=dispense_datetime,
|
|
dispensed_by=pharmacist,
|
|
verified_by=pharmacist if random.choice([True, False]) else None,
|
|
unit_price=inventory_item.unit_cost * Decimal('1.2'), # Add markup
|
|
total_price=Decimal('0.00'), # Will be calculated in save()
|
|
copay_amount=Decimal(str(random.randint(10, 100))),
|
|
insurance_amount=Decimal(str(random.randint(50, 500))),
|
|
patient_counseled=random.choice([True, False]),
|
|
counseling_notes=random.choice([
|
|
"Medication use instructions provided",
|
|
"Side effects explained",
|
|
"Drug interactions discussed",
|
|
"Storage requirements explained"
|
|
]) if random.choice([True, False]) else None,
|
|
is_refill=random.choice([True, False]),
|
|
refill_number=random.randint(0, 3) if random.choice([True, False]) else 0,
|
|
status=random.choice(['DISPENSED', 'PICKED_UP']),
|
|
picked_up_by=prescription.patient.get_full_name() if random.choice([True, False]) else None,
|
|
pickup_datetime=dispense_datetime + timedelta(hours=random.randint(1, 24)) if random.choice([True, False]) else None,
|
|
identification_verified=random.choice([True, False]),
|
|
quality_check_performed=random.choice([True, False]),
|
|
quality_notes="Quality check completed" if random.choice([True, False]) else None,
|
|
created_at=dispense_datetime,
|
|
updated_at=dispense_datetime + timedelta(minutes=random.randint(5, 30))
|
|
)
|
|
|
|
# Update inventory stock
|
|
inventory_item.quantity_on_hand -= quantity_dispensed
|
|
inventory_item.save()
|
|
|
|
dispense_records.append(dispense_record)
|
|
|
|
except Exception as e:
|
|
print(f"Error creating dispense record: {e}")
|
|
continue
|
|
|
|
print(f"Created {len(dispense_records)} dispense records")
|
|
return dispense_records
|
|
|
|
|
|
def create_medication_administrations(dispense_records):
|
|
"""Create medication administration records"""
|
|
administrations = []
|
|
|
|
nurses = User.objects.filter(employee_profile__role='NURSE', is_active=True)
|
|
|
|
for dispense_record in dispense_records:
|
|
# Only create administrations for inpatient medications
|
|
if random.random() > 0.3: # 30% chance for inpatient administration
|
|
continue
|
|
|
|
# Create 5-15 administration records per dispense
|
|
num_administrations = random.randint(5, 15)
|
|
|
|
for admin_num in range(num_administrations):
|
|
admin_datetime = dispense_record.date_dispensed + timedelta(
|
|
hours=admin_num * random.randint(6, 12)
|
|
)
|
|
|
|
nurse = random.choice(nurses) if nurses else dispense_record.dispensed_by
|
|
|
|
try:
|
|
administration = MedicationAdministration.objects.create(
|
|
prescription=dispense_record.prescription,
|
|
patient=dispense_record.prescription.patient,
|
|
encounter=dispense_record.prescription.encounter,
|
|
administration_id=uuid.uuid4(),
|
|
scheduled_datetime=admin_datetime,
|
|
actual_datetime=admin_datetime + timedelta(minutes=random.randint(0, 30)),
|
|
dose_given=dispense_record.prescription.medication.strength,
|
|
route_given=random.choice(['PO', 'IV', 'IM', 'SC', 'TOP']),
|
|
status=random.choices(
|
|
['GIVEN', 'NOT_GIVEN', 'HELD', 'REFUSED'],
|
|
weights=[80, 10, 5, 5]
|
|
)[0],
|
|
administered_by=nurse,
|
|
witnessed_by=random.choice(nurses) if nurses and random.choice([True, False]) else None,
|
|
reason_not_given=random.choice([
|
|
'PATIENT_REFUSED', 'PATIENT_ASLEEP', 'PATIENT_NPO', 'ADVERSE_REACTION'
|
|
]) if random.random() < 0.2 else None,
|
|
reason_notes="Patient refused medication" if random.choice([True, False]) else None,
|
|
patient_response=random.choice([
|
|
'No adverse effects noted', 'Pain improved', 'Tolerated well',
|
|
'Mild nausea reported'
|
|
]) if random.choice([True, False]) else None,
|
|
side_effects_observed=random.choice([
|
|
'None', 'Mild drowsiness', 'Nausea', 'Dizziness'
|
|
]) if random.choice([True, False]) else None,
|
|
injection_site=random.choice([
|
|
'Left arm', 'Right arm', 'Abdomen', 'Thigh'
|
|
]) if random.choice([True, False]) else None,
|
|
site_condition="Good condition" if random.choice([True, False]) else None,
|
|
double_checked=random.choice([True, False]),
|
|
double_checked_by=random.choice(nurses) if nurses and random.choice([True, False]) else None,
|
|
created_at=admin_datetime,
|
|
updated_at=admin_datetime + timedelta(minutes=random.randint(5, 15))
|
|
)
|
|
administrations.append(administration)
|
|
|
|
except Exception as e:
|
|
print(f"Error creating medication administration: {e}")
|
|
continue
|
|
|
|
print(f"Created {len(administrations)} medication administrations")
|
|
return administrations
|
|
|
|
|
|
def create_drug_interactions(medications):
|
|
"""Create drug interaction data"""
|
|
interactions = []
|
|
|
|
# Common drug interaction pairs
|
|
interaction_pairs = [
|
|
('Warfarin', 'Aspirin', 'MAJOR', 'Increased bleeding risk'),
|
|
('Metformin', 'Alcohol', 'MODERATE', 'Risk of lactic acidosis'),
|
|
('Simvastatin', 'Amlodipine', 'MODERATE', 'Increased statin levels'),
|
|
('Tramadol', 'Gabapentin', 'MODERATE', 'Increased sedation risk'),
|
|
('Insulin Glargine', 'Alcohol', 'MAJOR', 'Risk of hypoglycemia'),
|
|
]
|
|
|
|
medication_dict = {med.generic_name: med for med in medications}
|
|
|
|
for tenant in set([med.tenant for med in medications]):
|
|
for drug1_name, drug2_name, severity, description in interaction_pairs:
|
|
drug1 = medication_dict.get(drug1_name)
|
|
drug2 = medication_dict.get(drug2_name)
|
|
|
|
if drug1 and drug2 and drug1.tenant == tenant and drug2.tenant == tenant:
|
|
try:
|
|
interaction = DrugInteraction.objects.create(
|
|
tenant=tenant,
|
|
medication_1=drug1,
|
|
medication_2=drug2,
|
|
interaction_id=uuid.uuid4(),
|
|
severity=severity,
|
|
interaction_type=random.choice(['PHARMACOKINETIC', 'PHARMACODYNAMIC', 'ADDITIVE']),
|
|
mechanism=f"Pharmacokinetic interaction affecting {random.choice(['absorption', 'metabolism', 'excretion'])}",
|
|
clinical_effect=f"{severity.lower()} clinical significance requiring monitoring",
|
|
management_recommendations=random.choice([
|
|
'Monitor patient closely',
|
|
'Consider alternative therapy',
|
|
'Adjust dosing as needed',
|
|
'Separate administration times'
|
|
]),
|
|
monitoring_parameters="Monitor vital signs and patient response" if random.choice([True, False]) else None,
|
|
evidence_level=random.choice(['ESTABLISHED', 'PROBABLE', 'SUSPECTED']),
|
|
references="Clinical pharmacology literature" if random.choice([True, False]) else None,
|
|
is_active=True,
|
|
created_at=django_timezone.now() - timedelta(days=random.randint(30, 365)),
|
|
updated_at=django_timezone.now() - timedelta(days=random.randint(0, 30))
|
|
)
|
|
interactions.append(interaction)
|
|
|
|
except Exception as e:
|
|
print(f"Error creating drug interaction: {e}")
|
|
continue
|
|
|
|
print(f"Created {len(interactions)} drug interactions")
|
|
return interactions
|
|
|
|
|
|
def main():
|
|
"""Main function to generate pharmacy data"""
|
|
print("Starting Saudi Pharmacy Data Generation...")
|
|
|
|
tenants = list(Tenant.objects.all())
|
|
if not tenants:
|
|
print("❌ No tenants found.")
|
|
return
|
|
|
|
print("\n1. Creating Medications...")
|
|
medications = create_medications(tenants)
|
|
|
|
print("\n2. Creating Inventory Items...")
|
|
inventory_items = create_pharmacy_inventory(medications)
|
|
|
|
print("\n3. Getting Pharmacists...")
|
|
pharmacists = get_pharmacists(tenants)
|
|
|
|
print("\n4. Creating Prescriptions...")
|
|
prescriptions = create_prescriptions(tenants, days_back=30)
|
|
|
|
print("\n5. Creating Dispense Records...")
|
|
dispense_records = create_dispense_records(prescriptions, inventory_items, pharmacists)
|
|
|
|
print("\n6. Creating Medication Administrations...")
|
|
administrations = create_medication_administrations(dispense_records)
|
|
|
|
print("\n7. Creating Drug Interactions...")
|
|
interactions = create_drug_interactions(medications)
|
|
|
|
print(f"\n✅ Saudi Pharmacy Data Generation Complete!")
|
|
print(f"📊 Summary:")
|
|
print(f" - Medications: {len(medications)}")
|
|
print(f" - Inventory Items: {len(inventory_items)}")
|
|
print(f" - Prescriptions: {len(prescriptions)}")
|
|
print(f" - Dispense Records: {len(dispense_records)}")
|
|
print(f" - Medication Administrations: {len(administrations)}")
|
|
print(f" - Drug Interactions: {len(interactions)}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|