83 lines
3.0 KiB
SQL
83 lines
3.0 KiB
SQL
-- Tabel Utama Produk KFA
|
|
CREATE TABLE kfa_products (
|
|
kfa_code VARCHAR(50) PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
display_name VARCHAR(255),
|
|
nama_dagang VARCHAR(255),
|
|
active BOOLEAN DEFAULT true,
|
|
state VARCHAR(50),
|
|
generik BOOLEAN,
|
|
|
|
-- Klasifikasi & Atribut Dasar (Disimpan sebagai JSONB untuk efisiensi)
|
|
dosage_form JSONB, -- { "code": "BS066", "name": "Tablet" }
|
|
farmalkes_type JSONB, -- { "code": "medicine", "group": "farmasi", "name": "Obat" }
|
|
uom JSONB, -- { "name": "Tablet" }
|
|
rute_pemberian JSONB, -- { "code": "O", "name": "Oral" }
|
|
controlled_drug JSONB, -- { "code": "3", "name": "Obat Keras" }
|
|
|
|
-- Harga & Metrik Fisik
|
|
fix_price NUMERIC(12, 2),
|
|
het_price NUMERIC(12, 2),
|
|
dose_per_unit NUMERIC(10, 2),
|
|
net_weight NUMERIC(10, 2),
|
|
net_weight_uom_name VARCHAR(20),
|
|
volume NUMERIC(10, 2),
|
|
volume_uom_name VARCHAR(20),
|
|
score_tkdn NUMERIC(5, 2),
|
|
rxterm INT,
|
|
|
|
-- Data Legal & Manufaktur
|
|
manufacturer VARCHAR(255),
|
|
registrar VARCHAR(255),
|
|
nie VARCHAR(100),
|
|
farmalkes_hscode VARCHAR(100),
|
|
kode_lkpp VARCHAR(100),
|
|
tayang_lkpp BOOLEAN,
|
|
|
|
-- Teks Panjang (HTML String)
|
|
description TEXT,
|
|
indication TEXT,
|
|
side_effect TEXT,
|
|
warning TEXT,
|
|
|
|
-- Kompleks/Nested JSONB (Data yang jarang di-join tapi sering dibaca)
|
|
atc_info JSONB, -- Menggabungkan atc_l1 sampai atc_l5 & atc_ddd
|
|
fornas JSONB, -- Struktur dokumen fornas
|
|
dosage_usage JSONB, -- Array of dosage usage objects
|
|
tags JSONB, -- Array of tags [{code, name}]
|
|
identifier_ids JSONB, -- Array of identifiers [{code, name, source_name}]
|
|
product_template JSONB, -- Data template referensi KFA
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
-- Indeks untuk pencarian teks yang cepat
|
|
CREATE INDEX idx_kfa_products_name ON kfa_products(name);
|
|
CREATE INDEX idx_kfa_products_kode_lkpp ON kfa_products(kode_lkpp);
|
|
-- Indeks GIN untuk pencarian dalam JSONB (misal mencari produk berdasarkan tags)
|
|
-- CREATE INDEX idx_kfa_products_tags ON kfa_products USING GIN (tags); -- Catatan: Buka komentar ini HANYA jika Anda menggunakan PostgreSQL
|
|
|
|
-- Tabel Relasi: Zat Aktif (Penting untuk dibuat tabel terpisah agar bisa query "Obat dengan kandungan X")
|
|
CREATE TABLE kfa_active_ingredients (
|
|
id SERIAL PRIMARY KEY,
|
|
product_kfa_code VARCHAR(50) REFERENCES kfa_products(kfa_code) ON DELETE CASCADE,
|
|
kfa_code VARCHAR(50),
|
|
zat_aktif VARCHAR(255) NOT NULL,
|
|
kekuatan_zat_aktif VARCHAR(100),
|
|
active BOOLEAN DEFAULT true,
|
|
state VARCHAR(50),
|
|
updated_at TIMESTAMP
|
|
);
|
|
CREATE INDEX idx_ingredient_zat_aktif ON kfa_active_ingredients(zat_aktif);
|
|
|
|
-- Tabel Relasi: Varian Kemasan
|
|
CREATE TABLE kfa_packaging (
|
|
id SERIAL PRIMARY KEY,
|
|
product_kfa_code VARCHAR(50) REFERENCES kfa_products(kfa_code) ON DELETE CASCADE,
|
|
kfa_code VARCHAR(50),
|
|
name VARCHAR(255),
|
|
pack_price NUMERIC(12, 2),
|
|
qty INT,
|
|
uom_id VARCHAR(50)
|
|
); |