Version 1 (modified by 38 hours ago) ( diff ) | ,
---|
Процедури
1) Генерирање на месечен извештај за промет по аптека
Оваа процедура создава месечен извештај за приходот на сите аптеки. Се користи кога менаџментот сака да следи колку приход остварила секоја аптека во даден месец.
Практична за финансиска анализа.
CREATE OR REPLACE PROCEDURE synergymed.sp_monthly_pharmacy_revenue(p_year INT, p_month INT) LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'Извештај за промет за %-%:', p_month, p_year; SELECT ph.company_id AS pharmacy_id, c.company_name, SUM(cobm.quantity * bm.price) AS total_revenue FROM synergymed.clientorder co JOIN synergymed.clientorder_brandedmedicine cobm ON cobm.order_id = co.id JOIN synergymed.brandedmedicine bm ON bm.id = cobm.branded_medicine_id JOIN synergymed.deliverycompany dc ON dc.company_id = co.delivery_company_id JOIN synergymed.pharmacy ph ON ph.company_id = dc.company_id JOIN synergymed.company c ON c.id = ph.company_id WHERE EXTRACT(YEAR FROM co.order_date) = p_year AND EXTRACT(MONTH FROM co.order_date) = p_month GROUP BY ph.company_id, c.company_name; END; $$;
2) Блокирање на клиент ако има повеќе неуспешни плаќања
Со оваа процедура се проверува колку пати клиентот имал неуспешно плаќање и ако надмине лимит, автоматски му се деактивира статусот.
Корисна е за ризик менаџмент и заштита од злоупотреби.
CREATE OR REPLACE PROCEDURE synergymed.sp_block_client_for_failed_payments(p_client_id INT, p_limit INT) LANGUAGE plpgsql AS $$ DECLARE v_failed INT; BEGIN SELECT COUNT(*) INTO v_failed FROM synergymed.payment WHERE client_id = p_client_id AND status = 'неуспешно'; IF v_failed >= p_limit THEN UPDATE synergymed.client SET is_verified = FALSE WHERE user_id = p_client_id; RAISE NOTICE 'Клиентот % е блокиран поради % неуспешни плаќања', p_client_id, v_failed; ELSE RAISE NOTICE 'Клиентот % има само % неуспешни плаќања (лимит %)', p_client_id, v_failed, p_limit; END IF; END; $$;
3) Извештај за истекување на рецепти
Оваа процедура излистува рецепти што ќе истечат во одреден временски период (пример 7 дена). Корисна е за аптеки и лекари за да навремено известат пациенти.
Ова е реално сценарио кое се користи во здравствени системи.
CREATE OR REPLACE PROCEDURE synergymed.sp_expiring_prescriptions(p_days_ahead INT) LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'Рецепти што истекуваат во наредните % дена:', p_days_ahead; SELECT p.id, u.first_name || ' ' || u.last_name AS client_name, p.valid_to FROM synergymed.prescription p JOIN synergymed.client c ON c.user_id = p.client_id JOIN synergymed.users u ON u.id = c.user_id WHERE p.valid_to <= CURRENT_DATE + p_days_ahead; END; $$;
4) Проверка на интеракции при препишување лекови
Оваа процедура проверува дали ново препишаниот лек ќе има интеракции со веќе активни рецепти на клиентот. Корисна е за фармацевти и лекари за да се избегнат опасни комбинации на лекови.
При издавање нов рецепт, системот веднаш предупредува ако постои ризик.
CREATE OR REPLACE PROCEDURE synergymed.sp_check_prescription_interactions(p_client_id INT, p_new_medicine_id INT) LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'Проверка на интеракции за клиент % со лек %', p_client_id, p_new_medicine_id; SELECT DISTINCT m1.medicine_name AS existing_medicine, m2.medicine_name AS new_medicine, mi.type, mi.severity, mi.description FROM synergymed.prescription pr JOIN synergymed.medicine m1 ON m1.id = pr.medicine_id JOIN synergymed.medicineinteraction mi ON (mi.medicine_id_1 = m1.id AND mi.medicine_id_2 = p_new_medicine_id) OR (mi.medicine_id_2 = m1.id AND mi.medicine_id_1 = p_new_medicine_id) JOIN synergymed.medicine m2 ON m2.id = p_new_medicine_id WHERE pr.client_id = p_client_id AND pr.valid_to >= CURRENT_DATE; END; $$;