CREATE TABLE public.mst_kelompok_standar_harga (
    id_kelompok_standar_harga serial NOT NULL,
    tahun integer DEFAULT 0 NOT NULL,
    id_unik_kelompok_standar_harga uuid DEFAULT public.uuid_generate_v7() NOT NULL,
    locked boolean DEFAULT false NOT NULL,
    disable boolean DEFAULT false NOT NULL,
    jns_pemda integer[] DEFAULT '{}'::integer[] NOT NULL,
    daerah_khusus integer[] DEFAULT '{}'::integer[] NOT NULL,
    tipe_standar_harga integer DEFAULT 0 NOT NULL,
    id_rekening_lra integer DEFAULT 0 NOT NULL,
    kode_akun character varying(5) DEFAULT ''::character varying NOT NULL,
    nama_akun text DEFAULT ''::text NOT NULL,
    kode_kelompok character varying(5) DEFAULT ''::character varying NOT NULL,
    nama_kelompok text DEFAULT ''::text NOT NULL,
    kode_jenis character varying(10) DEFAULT ''::character varying NOT NULL,
    nama_jenis text DEFAULT ''::text NOT NULL,
    kode_objek character varying(20) DEFAULT ''::character varying NOT NULL,
    nama_objek text DEFAULT ''::text NOT NULL,
    kode_rincian_objek character varying(50) DEFAULT ''::character varying NOT NULL,
    nama_rincian_objek text DEFAULT ''::text NOT NULL,
    kode_sub_rincian_objek character varying(60) DEFAULT ''::character varying NOT NULL,
    nama_sub_rincian_objek text DEFAULT ''::text NOT NULL,
    hist_data jsonb DEFAULT '[]'::jsonb NOT NULL,
    created_at timestamp(6) without time zone DEFAULT now() NOT NULL,
    created_by integer DEFAULT 0 NOT NULL,
    updated_at timestamp(6) without time zone DEFAULT '0001-01-01 00:00:00'::timestamp without time zone NOT NULL,
    updated_by integer DEFAULT 0 NOT NULL,
    deleted_at timestamp(6) without time zone DEFAULT '0001-01-01 00:00:00'::timestamp without time zone NOT NULL,
    deleted_by integer DEFAULT 0 NOT NULL
);

COMMENT ON TABLE public.mst_kelompok_standar_harga IS 'Tabel referensi standar harga satuan dalam sistem public/SIPD. Digunakan untuk mencatat harga satuan barang/jasa sesuai klasifikasi akun dan objek standar harga, sebagai acuan dalam perencanaan dan penganggaran.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.id_kelompok_standar_harga IS 'Primary key. ID unik untuk setiap entri standar harga satuan.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.tahun IS 'Tahun berlakunya standar harga satuan.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.id_unik_kelompok_standar_harga IS 'ID unik UUID untuk backup ID primary key.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.locked IS 'Status kunci data. TRUE berarti data terkunci dan tidak dapat diubah.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.disable IS 'Status nonaktif. TRUE berarti data tidak digunakan.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.jns_pemda IS 'Daftar jenis pemerintah daerah dalam bentuk array (1=Provinsi, 2=Kabupaten, 3=Kota).';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.daerah_khusus IS 'Daftar ID daerah khusus dalam bentuk array (440=Papua, 528=Papua Barat).';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.kode_akun IS 'Kode akun standar harga sesuai klasifikasi.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.nama_akun IS 'Nama akun standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.kode_kelompok IS 'Kode kelompok akun standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.nama_kelompok IS 'Nama kelompok akun standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.kode_jenis IS 'Kode jenis standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.nama_jenis IS 'Nama jenis standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.kode_objek IS 'Kode objek standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.nama_objek IS 'Nama objek standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.kode_rincian_objek IS 'Kode rincian objek standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.nama_rincian_objek IS 'Nama rincian objek standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.kode_sub_rincian_objek IS 'Kode sub rincian objek standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.nama_sub_rincian_objek IS 'Nama sub rincian objek standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.tipe_standar_harga IS 'Klasifikasi tipe standar harga: 1=SSH (Standar Satuan Harga); 2=HSPK (Harga Satuan Pokok Kegiatan); 3=ASB (Analisis Standar standar harga); 4=SBU (Standar Biaya Umum).';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.id_rekening_lra IS 'ID akun terkait dalam referensi akun standar harga.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.hist_data IS 'Riwayat perubahan data dalam format JSONB.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.created_at IS 'Tanggal dan waktu data dibuat.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.created_by IS 'ID pengguna yang membuat data.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.updated_at IS 'Tanggal dan waktu terakhir data diperbarui.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.updated_by IS 'ID pengguna yang memperbarui data.';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.deleted_at IS 'Tanggal dan waktu data dihapus (soft delete).';
COMMENT ON COLUMN public.mst_kelompok_standar_harga.deleted_by IS 'ID pengguna yang menghapus data.';

ALTER TABLE public.mst_kelompok_standar_harga ADD CONSTRAINT mst_kelompok_standar_harga_pkey PRIMARY KEY (id_kelompok_standar_harga, tahun);
ALTER TABLE public.mst_kelompok_standar_harga ADD CONSTRAINT mst_kelompok_standar_harga_unique_key UNIQUE (id_kelompok_standar_harga, tahun, kode_akun, kode_kelompok, kode_jenis, kode_objek, kode_rincian_objek, kode_sub_rincian_objek);

CREATE INDEX mst_kelompok_standar_harga_id_sub_rincian_objek_idx ON public.mst_kelompok_standar_harga USING btree (id_kelompok_standar_harga);
CREATE INDEX mst_kelompok_standar_harga_tahun_idx ON public.mst_kelompok_standar_harga USING btree (tahun);
CREATE INDEX mst_kelompok_standar_harga_kode_akun_idx ON public.mst_kelompok_standar_harga USING btree (kode_akun);
CREATE INDEX mst_kelompok_standar_harga_kode_kelompok_idx ON public.mst_kelompok_standar_harga USING btree (kode_kelompok);
CREATE INDEX mst_kelompok_standar_harga_kode_jenis_idx ON public.mst_kelompok_standar_harga USING btree (kode_jenis);
CREATE INDEX mst_kelompok_standar_harga_kode_objek_idx ON public.mst_kelompok_standar_harga USING btree (kode_objek);
CREATE INDEX mst_kelompok_standar_harga_kode_rincian_objek_idx ON public.mst_kelompok_standar_harga USING btree (kode_rincian_objek);
CREATE INDEX mst_kelompok_standar_harga_kode_sub_rincian_objek_idx ON public.mst_kelompok_standar_harga USING btree (kode_sub_rincian_objek);