Files
satusehat-service/internal/satusehat/reference/kfa/kfa.sql
T

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)
);