CREATE TABLE public.mst_bidang_urusan (
    id_bidang_urusan serial NOT NULL,
    tahun integer DEFAULT 0 NOT NULL,
    id_urusan integer DEFAULT 0 NOT NULL,
    id_unik_bidang_urusan uuid DEFAULT public.uuid_generate_v7() NOT NULL,
    id_unik_urusan uuid DEFAULT '00000000-0000-0000-0000-000000000000' NOT NULL,
    locked boolean DEFAULT false NOT NULL,
    disable boolean DEFAULT false NOT NULL,
    jns_pemda integer[] DEFAULT ARRAY[0] NOT NULL,
    daerah_khusus integer[] DEFAULT ARRAY[0] NOT NULL,
    kode_bidang_urusan character varying(10) NOT NULL,
    nama_bidang_urusan character varying(255) DEFAULT ''::character varying NOT NULL,
    nama_bidang_urusan_alias character varying(255) DEFAULT ''::character varying 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_bidang_urusan IS 'Tabel referensi Bidang Urusan, digunakan untuk mengelompokkan program dan kegiatan dalam lingkup urusan pemerintahan yang lebih spesifik. Setiap Bidang Urusan berada di bawah satu Urusan.';
COMMENT ON COLUMN public.mst_bidang_urusan.id_bidang_urusan IS 'Primary key. ID unik untuk setiap bidang urusan.';
COMMENT ON COLUMN public.mst_bidang_urusan.tahun IS 'Tahun anggaran berlakunya bidang urusan.';
COMMENT ON COLUMN public.mst_bidang_urusan.id_urusan IS 'ID urusan induk yang menaungi bidang urusan ini.';
COMMENT ON COLUMN public.mst_bidang_urusan.id_unik_bidang_urusan IS 'ID unik UUID untuk backup ID primary key.';
COMMENT ON COLUMN public.mst_bidang_urusan.id_unik_urusan IS 'ID unik UUID untuk backup ID foreign key mst_urusan.';
COMMENT ON COLUMN public.mst_bidang_urusan.locked IS 'Status kunci data. TRUE berarti data bidang urusan terkunci dan tidak bisa diubah.';
COMMENT ON COLUMN public.mst_bidang_urusan.disable IS 'Status nonaktif. TRUE berarti bidang urusan tidak digunakan.';
COMMENT ON COLUMN public.mst_bidang_urusan.jns_pemda IS 'Daftar jenis pemerintah daerah dalam bentuk array (1=Provinsi, 2=Kabupaten, 3=Kota).';
COMMENT ON COLUMN public.mst_bidang_urusan.daerah_khusus IS 'Daftar ID daerah khusus dalam bentuk array (440=Papua, 528=Papua Barat).';
COMMENT ON COLUMN public.mst_bidang_urusan.kode_bidang_urusan IS 'Kode bidang urusan sesuai klasifikasi nasional.';
COMMENT ON COLUMN public.mst_bidang_urusan.nama_bidang_urusan IS 'Nama lengkap bidang urusan.';
COMMENT ON COLUMN public.mst_bidang_urusan.nama_bidang_urusan_alias IS 'Nama alias atau singkatan bidang urusan, jika ada.';
COMMENT ON COLUMN public.mst_bidang_urusan.hist_data IS 'Riwayat perubahan data dalam format JSONB.';
COMMENT ON COLUMN public.mst_bidang_urusan.created_at IS 'Tanggal dan waktu data dibuat.';
COMMENT ON COLUMN public.mst_bidang_urusan.created_by IS 'ID pengguna yang membuat data.';
COMMENT ON COLUMN public.mst_bidang_urusan.updated_at IS 'Tanggal dan waktu terakhir data diperbarui.';
COMMENT ON COLUMN public.mst_bidang_urusan.updated_by IS 'ID pengguna yang memperbarui data.';
COMMENT ON COLUMN public.mst_bidang_urusan.deleted_at IS 'Tanggal dan waktu data dihapus (soft delete).';
COMMENT ON COLUMN public.mst_bidang_urusan.deleted_by IS 'ID pengguna yang menghapus data.';

ALTER TABLE public.mst_bidang_urusan ADD CONSTRAINT mst_bidang_urusan_pkey PRIMARY KEY (id_bidang_urusan, tahun);
ALTER TABLE public.mst_bidang_urusan ADD CONSTRAINT mst_bidang_urusan_unique_key UNIQUE (id_bidang_urusan, tahun, kode_bidang_urusan);

CREATE INDEX mst_bidang_urusan_id_bidang_urusan_idx ON public.mst_bidang_urusan USING btree (id_bidang_urusan);
CREATE INDEX mst_bidang_urusan_tahun_idx ON public.mst_bidang_urusan USING btree (tahun);
CREATE INDEX mst_bidang_urusan_id_urusan_idx ON public.mst_bidang_urusan USING btree (id_urusan);
CREATE INDEX mst_bidang_urusan_kode_bidang_urusan_idx ON public.mst_bidang_urusan USING btree (kode_bidang_urusan);