CREATE TABLE IF NOT EXISTS public.trn_jadwal (
    id_unik_jadwal uuid DEFAULT public.uuid_generate_v7() NOT NULL,
    id_jadwal_lama integer DEFAULT 0 NOT NULL,
    tahun integer DEFAULT 0 NOT NULL,
	id_daerah integer DEFAULT 0 NOT NULL,
    id_tahapan integer DEFAULT 0 NOT NULL,
	locked boolean DEFAULT false NOT NULL,
    status_jadwal integer DEFAULT 0 NOT NULL,
    status_rincian boolean DEFAULT false NOT NULL,
	status_ditunda boolean DEFAULT false NOT NULL,
    nama_jadwal character varying(255) DEFAULT ''::character varying NOT NULL,
    waktu_mulai timestamp(6) without time zone DEFAULT '0001-01-01 00:00:00'::timestamp without time zone NOT NULL,
    waktu_selesai timestamp(6) without time zone DEFAULT '0001-01-01 00:00:00'::timestamp without time zone NOT NULL,
    no_perda character varying DEFAULT ''::character varying NOT NULL,
    tgl_perda timestamp(6) without time zone DEFAULT '0001-01-01 00:00:00'::timestamp without time zone NOT NULL,
    no_perkada character varying DEFAULT ''::character varying NOT NULL,
    tgl_perkada timestamp(6) without time zone DEFAULT '0001-01-01 00:00:00'::timestamp without time zone NOT NULL,
    id_unik_jadwal_rollback uuid DEFAULT '00000000-0000-0000-0000-000000000000' NOT NULL,
    id_jadwal_rollback_lama integer DEFAULT 0 NOT NULL,
    keterangan_rollback text DEFAULT ''::text NOT NULL,
    rollback_at timestamp(6) without time zone DEFAULT '0001-01-01 00:00:00'::timestamp without time zone NOT NULL,
    rollback_by integer DEFAULT 0 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
);

ALTER TABLE public.trn_jadwal ADD CONSTRAINT trn_jadwal_pkey PRIMARY KEY (id_unik_jadwal, tahun, id_daerah);
ALTER TABLE public.trn_jadwal ADD CONSTRAINT trn_jadwal_unique_key UNIQUE (tahun, id_daerah, id_tahapan, nama_jadwal);

COMMENT ON TABLE public.trn_jadwal IS 'Tabel master yang menyimpan informasi jadwal tahapan proses penyusunan apbd, termasuk periode waktu, status, dan dokumen pendukung.';
COMMENT ON COLUMN public.trn_jadwal.id_unik_jadwal IS 'ID unik UUID sebagai ID primary key..';
COMMENT ON COLUMN public.trn_jadwal.id_jadwal_lama IS 'Primary key tabel lama.';
COMMENT ON COLUMN public.trn_jadwal.tahun IS 'Tahun anggaran yang berlaku untuk jadwal ini.';
COMMENT ON COLUMN public.trn_jadwal.id_daerah IS 'ID daerah terkait jadwal ini.';
COMMENT ON COLUMN public.trn_jadwal.id_tahapan IS 'ID tahapan proses anggaran yang terkait.';
COMMENT ON COLUMN public.trn_jadwal.locked IS 'Status apakah jadwal dikunci (true) atau masih dapat diubah (false).';
COMMENT ON COLUMN public.trn_jadwal.status_jadwal IS 'Status jadwal 1=murni, 2=pergeseran, 3=perubahan.';
COMMENT ON COLUMN public.trn_jadwal.status_rincian IS 'Penanda status true/false yang menandakan jadwal sudah melakukan input rincian belanja.';
COMMENT ON COLUMN public.trn_jadwal.status_ditunda IS 'Penanda status true/false yang menandakan jadwal sedang ditunda (apabila terjadi kondisi pergeseran anggaran pada jadwal perubahan anggaran).';
COMMENT ON COLUMN public.trn_jadwal.nama_jadwal IS 'Nama jadwal tahapan anggaran.';
COMMENT ON COLUMN public.trn_jadwal.waktu_mulai IS 'Tanggal dan waktu mulai berlakunya jadwal.';
COMMENT ON COLUMN public.trn_jadwal.waktu_selesai IS 'Tanggal dan waktu berakhirnya jadwal.';
COMMENT ON COLUMN public.trn_jadwal.no_perda IS 'Nomor Peraturan Daerah (Perda) yang terkait jadwal ini.';
COMMENT ON COLUMN public.trn_jadwal.tgl_perda IS 'Tanggal penetapan Peraturan Daerah (Perda).';
COMMENT ON COLUMN public.trn_jadwal.no_perkada IS 'Nomor Peraturan Kepala Daerah (Perkada) yang terkait jadwal ini.';
COMMENT ON COLUMN public.trn_jadwal.tgl_perkada IS 'Tanggal penetapan Peraturan Kepala Daerah (Perkada).';
COMMENT ON COLUMN public.trn_jadwal.id_unik_jadwal_rollback IS 'ID unik UUID jadwal sebelumnya yang menjadi acuan rollback, jika ada.';
COMMENT ON COLUMN public.trn_jadwal.id_jadwal_rollback_lama IS 'ID jadwal sebelumnya yang menjadi acuan rollback, jika ada.';
COMMENT ON COLUMN public.trn_jadwal.keterangan_rollback IS 'Uraian alasan dilakukannya rollback jadwal.';
COMMENT ON COLUMN public.trn_jadwal.rollback_at IS 'Tanggal dan waktu rollback dilakukan.';
COMMENT ON COLUMN public.trn_jadwal.rollback_by IS 'ID pengguna yang melakukan rollback.';
COMMENT ON COLUMN public.trn_jadwal.created_at IS 'Tanggal dan waktu data dibuat.';
COMMENT ON COLUMN public.trn_jadwal.created_by IS 'ID pengguna yang membuat data.';
COMMENT ON COLUMN public.trn_jadwal.updated_at IS 'Tanggal dan waktu terakhir data diperbarui.';
COMMENT ON COLUMN public.trn_jadwal.updated_by IS 'ID pengguna yang memperbarui data.';
COMMENT ON COLUMN public.trn_jadwal.deleted_at IS 'Tanggal dan waktu data dihapus (soft delete).';
COMMENT ON COLUMN public.trn_jadwal.deleted_by IS 'ID pengguna yang menghapus data.';

CREATE INDEX trn_jadwal_id_unik_jadwal_idx ON public.trn_jadwal USING btree (id_unik_jadwal);
CREATE INDEX trn_jadwal_tahun_idx ON public.trn_jadwal USING btree (tahun);
CREATE INDEX trn_jadwal_id_daerah_idx ON public.trn_jadwal USING btree (id_daerah);
CREATE INDEX trn_jadwal_id_tahapan_idx ON public.trn_jadwal USING btree (id_tahapan);
CREATE INDEX trn_jadwal_waktu_mulai_idx ON public.trn_jadwal USING btree (waktu_mulai);
CREATE INDEX trn_jadwal_waktu_selesai_idx ON public.trn_jadwal USING btree (waktu_selesai);


-- SCHEMA rancangan_murni;
-- SCHEMA rancangan_pergeseran;
-- SCHEMA rancangan_perubahan;
-- SCHEMA penetapan_perubahan;
-- SCHEMA rancangan_pergeseran_perubahan;
-- SCHEMA penetapan_pergeseran_perubahan;
