penambahan All case Satu sehat
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
-- 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)
|
||||
);
|
||||
Reference in New Issue
Block a user