CREATE TABLE public.mst_program ( id_program 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_unik_program 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, 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_program character varying(25) NOT NULL, nama_program text 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_program IS 'Tabel referensi Program yang memuat kode, nama, dan informasi pengelompokan program sesuai struktur perencanaan daerah. Digunakan sebagai induk dari kegiatan dan sub-kegiatan dalam dokumen perencanaan dan penganggaran.'; COMMENT ON COLUMN public.mst_program.id_program IS 'Primary key. ID unik untuk setiap program.'; COMMENT ON COLUMN public.mst_program.tahun IS 'Tahun anggaran berlakunya program.'; COMMENT ON COLUMN public.mst_program.id_urusan IS 'ID urusan yang menaungi program ini.'; COMMENT ON COLUMN public.mst_program.id_bidang_urusan IS 'ID bidang urusan yang menaungi program ini.'; COMMENT ON COLUMN public.mst_program.id_unik_program IS 'ID unik UUID untuk backup ID primary key.'; COMMENT ON COLUMN public.mst_program.id_unik_urusan IS 'ID unik UUID untuk backup ID foreign key mst_urusan.'; COMMENT ON COLUMN public.mst_program.id_unik_bidang_urusan IS 'ID unik UUID untuk backup ID foreign key mst_bidang_urusan.'; COMMENT ON COLUMN public.mst_program.locked IS 'Status kunci data. TRUE berarti program terkunci dan tidak dapat diubah.'; COMMENT ON COLUMN public.mst_program.disable IS 'Status nonaktif. TRUE berarti program tidak digunakan.'; COMMENT ON COLUMN public.mst_program.jns_pemda IS 'Daftar jenis pemerintah daerah dalam bentuk array (1=Provinsi, 2=Kabupaten, 3=Kota).'; COMMENT ON COLUMN public.mst_program.daerah_khusus IS 'Daftar ID daerah khusus dalam bentuk array (440=Papua, 528=Papua Barat).'; COMMENT ON COLUMN public.mst_program.kode_program IS 'Kode program sesuai struktur perencanaan daerah.'; COMMENT ON COLUMN public.mst_program.nama_program IS 'Nama program.'; COMMENT ON COLUMN public.mst_program.hist_data IS 'Riwayat perubahan data dalam format JSONB.'; COMMENT ON COLUMN public.mst_program.created_at IS 'Tanggal dan waktu data dibuat.'; COMMENT ON COLUMN public.mst_program.created_by IS 'ID pengguna yang membuat data.'; COMMENT ON COLUMN public.mst_program.updated_at IS 'Tanggal dan waktu terakhir data diperbarui.'; COMMENT ON COLUMN public.mst_program.updated_by IS 'ID pengguna yang memperbarui data.'; COMMENT ON COLUMN public.mst_program.deleted_at IS 'Tanggal dan waktu data dihapus (soft delete).'; COMMENT ON COLUMN public.mst_program.deleted_by IS 'ID pengguna yang menghapus data.'; ALTER TABLE public.mst_program ADD CONSTRAINT mst_program_pkey PRIMARY KEY (id_program, tahun); ALTER TABLE public.mst_program ADD CONSTRAINT mst_program_unique_key UNIQUE (id_program, tahun, id_urusan, id_bidang_urusan, kode_program); CREATE INDEX mst_program_id_program_idx ON public.mst_program USING btree (id_program); CREATE INDEX mst_program_tahun_idx ON public.mst_program USING btree (tahun); CREATE INDEX mst_program_id_urusan_idx ON public.mst_program USING btree (id_urusan); CREATE INDEX mst_program_id_bidang_urusan_idx ON public.mst_program USING btree (id_bidang_urusan); CREATE INDEX mst_program_kode_program_idx ON public.mst_program USING btree (kode_program);