38960-vm/db/migrations/20260321_create_pharmacy_module.sql
2026-03-21 07:52:14 +00:00

50 lines
2.1 KiB
SQL

-- Create pharmacy_batches table
CREATE TABLE IF NOT EXISTS pharmacy_batches (
id INT AUTO_INCREMENT PRIMARY KEY,
drug_id INT NOT NULL,
batch_number VARCHAR(50) NOT NULL,
expiry_date DATE NOT NULL,
quantity INT NOT NULL DEFAULT 0,
cost_price DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
sale_price DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
supplier_id INT NULL,
received_date DATE NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (drug_id) REFERENCES drugs(id) ON DELETE CASCADE,
FOREIGN KEY (supplier_id) REFERENCES suppliers(id) ON DELETE SET NULL
);
-- Create pharmacy_sales table
CREATE TABLE IF NOT EXISTS pharmacy_sales (
id INT AUTO_INCREMENT PRIMARY KEY,
patient_id INT NULL,
visit_id INT NULL,
total_amount DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
payment_method VARCHAR(50) DEFAULT 'cash',
status VARCHAR(20) DEFAULT 'completed', -- completed, refunded, cancelled
notes TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (patient_id) REFERENCES patients(id) ON DELETE SET NULL,
FOREIGN KEY (visit_id) REFERENCES visits(id) ON DELETE SET NULL
);
-- Create pharmacy_sale_items table
CREATE TABLE IF NOT EXISTS pharmacy_sale_items (
id INT AUTO_INCREMENT PRIMARY KEY,
sale_id INT NOT NULL,
drug_id INT NOT NULL,
batch_id INT NULL, -- Can be null if we track sales without specific batch selection (though we should enforce it for stock deduction)
quantity INT NOT NULL DEFAULT 1,
unit_price DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
total_price DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (sale_id) REFERENCES pharmacy_sales(id) ON DELETE CASCADE,
FOREIGN KEY (drug_id) REFERENCES drugs(id),
FOREIGN KEY (batch_id) REFERENCES pharmacy_batches(id) ON DELETE SET NULL
);
-- Add stock management columns to drugs table
ALTER TABLE drugs ADD COLUMN IF NOT EXISTS min_stock_level INT DEFAULT 10;
ALTER TABLE drugs ADD COLUMN IF NOT EXISTS reorder_level INT DEFAULT 20;
ALTER TABLE drugs ADD COLUMN IF NOT EXISTS unit VARCHAR(50) DEFAULT 'pack';