CREATE TABLE public.mst_sub_kegiatan (
    id_sub_kegiatan serial NOT NULL,
    tahun integer DEFAULT 0 NOT NULL,
    id_urusan integer DEFAULT 0 NOT NULL,
    id_bidang_urusan integer DEFAULT 0 NOT NULL,
    id_program integer DEFAULT 0 NOT NULL,
    id_kegiatan integer DEFAULT 0 NOT NULL,
    id_unik_sub_kegiatan uuid DEFAULT public.uuid_generate_v7() NOT NULL,
    id_unik_urusan uuid DEFAULT '00000000-0000-0000-0000-000000000000' NOT NULL,
    id_unik_bidang_urusan uuid DEFAULT '00000000-0000-0000-0000-000000000000' NOT NULL,
    id_unik_program uuid DEFAULT '00000000-0000-0000-0000-000000000000' NOT NULL,
    id_unik_kegiatan 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_sub_kegiatan character varying(25) NOT NULL,
    nama_sub_kegiatan text DEFAULT ''::text NOT NULL,
    kinerja text DEFAULT ''::text NOT NULL,
    indikator text DEFAULT ''::text NOT NULL,
    satuan 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_sub_kegiatan IS 'Tabel referensi sub kegiatan dalam sistem public/SIPD. Menyimpan informasi detail sub kegiatan yang merupakan turunan dari kegiatan, program, bidang urusan, dan urusan tertentu. Digunakan untuk perencanaan, penganggaran, serta pelaporan kinerja pemerintah daerah.';
COMMENT ON COLUMN public.mst_sub_kegiatan.id_sub_kegiatan IS 'Primary key. ID unik untuk setiap sub kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.tahun IS 'Tahun berlakunya sub kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.id_urusan IS 'ID urusan yang terkait dengan sub kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.id_bidang_urusan IS 'ID bidang urusan yang terkait dengan sub kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.id_program IS 'ID program induk dari sub kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.id_kegiatan IS 'ID kegiatan induk dari sub kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.id_unik_sub_kegiatan IS 'ID unik UUID untuk backup ID primary key.';
COMMENT ON COLUMN public.mst_sub_kegiatan.id_unik_urusan IS 'ID unik UUID untuk backup ID foreign key mst_urusan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.id_unik_bidang_urusan IS 'ID unik UUID untuk backup ID foreign key mst_bidang_urusan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.id_unik_program IS 'ID unik UUID untuk backup ID foreign key mst_program.';
COMMENT ON COLUMN public.mst_sub_kegiatan.id_unik_kegiatan IS 'ID unik UUID untuk backup ID foreign key mst_kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.locked IS 'Status kunci data. TRUE berarti data terkunci dan tidak dapat diubah.';
COMMENT ON COLUMN public.mst_sub_kegiatan.disable IS 'Status nonaktif. TRUE berarti sub kegiatan tidak digunakan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.jns_pemda IS 'Daftar jenis pemerintah daerah dalam bentuk array (1=Provinsi, 2=Kabupaten, 3=Kota).';
COMMENT ON COLUMN public.mst_sub_kegiatan.daerah_khusus IS 'Daftar ID daerah khusus dalam bentuk array (440=Papua, 528=Papua Barat).';
COMMENT ON COLUMN public.mst_sub_kegiatan.kode_sub_kegiatan IS 'Kode unik sub kegiatan sesuai struktur perencanaan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.nama_sub_kegiatan IS 'Nama lengkap sub kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.kinerja IS 'Target atau capaian kinerja dari sub kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.indikator IS 'Indikator keberhasilan sub kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.satuan IS 'Satuan ukuran indikator atau kinerja sub kegiatan.';
COMMENT ON COLUMN public.mst_sub_kegiatan.hist_data IS 'Riwayat perubahan data sub kegiatan dalam format JSONB.';
COMMENT ON COLUMN public.mst_sub_kegiatan.created_at IS 'Tanggal dan waktu pertama kali data dibuat.';
COMMENT ON COLUMN public.mst_sub_kegiatan.created_by IS 'ID pengguna yang membuat data pertama kali.';
COMMENT ON COLUMN public.mst_sub_kegiatan.updated_at IS 'Tanggal dan waktu terakhir kali data diperbarui.';
COMMENT ON COLUMN public.mst_sub_kegiatan.updated_by IS 'ID pengguna yang memperbarui data terakhir kali.';
COMMENT ON COLUMN public.mst_sub_kegiatan.deleted_at IS 'Tanggal dan waktu data dihapus (soft delete).';
COMMENT ON COLUMN public.mst_sub_kegiatan.deleted_by IS 'ID pengguna yang menghapus data.';

ALTER TABLE public.mst_sub_kegiatan ADD CONSTRAINT mst_sub_kegiatan_pkey PRIMARY KEY (id_sub_kegiatan, tahun);
ALTER TABLE public.mst_sub_kegiatan ADD CONSTRAINT mst_sub_kegiatan_unique_key UNIQUE (id_sub_kegiatan, tahun, id_urusan, id_bidang_urusan, id_program, id_kegiatan, kode_sub_kegiatan);

CREATE INDEX mst_sub_kegiatan_id_sub_kegiatan_idx ON public.mst_sub_kegiatan USING btree (id_sub_kegiatan);
CREATE INDEX mst_sub_kegiatan_tahun_idx ON public.mst_sub_kegiatan USING btree (tahun);
CREATE INDEX mst_sub_kegiatan_id_urusan_idx ON public.mst_sub_kegiatan USING btree (id_urusan);
CREATE INDEX mst_sub_kegiatan_id_bidang_urusan_idx ON public.mst_sub_kegiatan USING btree (id_bidang_urusan);
CREATE INDEX mst_sub_kegiatan_id_program_idx ON public.mst_sub_kegiatan USING btree (id_program);
CREATE INDEX mst_sub_kegiatan_id_kegiatan_idx ON public.mst_sub_kegiatan USING btree (id_kegiatan);
CREATE INDEX mst_sub_kegiatan_kode_sub_kegiatan_idx ON public.mst_sub_kegiatan USING btree (kode_sub_kegiatan);