CREATE TABLE public.mst_daerah (
    id_daerah serial NOT NULL,
    id_unik_daerah uuid DEFAULT public.uuid_generate_v7() NOT NULL,
    daerah_khusus boolean DEFAULT false NOT NULL,
    jns_pemda integer NOT NULL,
    id_prov integer DEFAULT 0 NOT NULL,
    zona_waktu integer DEFAULT 0 NOT NULL,
    zona_wilayah character varying(40) DEFAULT ''::character varying NOT NULL,
    kode_ddn character varying(5) NOT NULL,
    nama_daerah character varying(40) DEFAULT ''::character varying NOT NULL,
    nama_ibu_kota character varying(40) DEFAULT ''::character varying NOT NULL,
    logo_daerah text DEFAULT ''::text 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_daerah IS 'Tabel referensi wilayah administratif Indonesia dalam sistem SIPD. Menyimpan informasi identitas daerah (provinsi, kabupaten, kota), termasuk kode wilayah, jenis pemerintah daerah, zona waktu, dan atribut lainnya.';
COMMENT ON COLUMN public.mst_daerah.id_daerah IS 'Primary key. ID unik untuk setiap daerah.';
COMMENT ON COLUMN public.mst_daerah.id_unik_daerah IS 'ID unik UUID untuk backup ID primary key.';
COMMENT ON COLUMN public.mst_daerah.daerah_khusus IS 'Menandakan apakah daerah merupakan daerah khusus (true) atau bukan (false).';
COMMENT ON COLUMN public.mst_daerah.jns_pemda IS 'Jenis pemerintah daerah: 1 = Provinsi, 2 = Kabupaten, 3 = Kota.';
COMMENT ON COLUMN public.mst_daerah.id_prov IS 'ID provinsi induk. Nilai sama dengan filed id jika data merupakan provinsi.';
COMMENT ON COLUMN public.mst_daerah.zona_waktu IS 'zona waktu jumlah seilisih jam dari GMT';
COMMENT ON COLUMN public.mst_daerah.zona_wilayah IS 'Nama zona wilayah administratif sesuai klasifikasi nasional.';
COMMENT ON COLUMN public.mst_daerah.kode_ddn IS 'Kode wilayah sesuai sistem DDN (kode baku nasional).';
COMMENT ON COLUMN public.mst_daerah.nama_daerah IS 'Nama lengkap daerah (provinsi/kabupaten/kota) sesuai nomenklatur resmi.';
COMMENT ON COLUMN public.mst_daerah.nama_ibu_kota IS 'Nama ibu kota daerah.';
COMMENT ON COLUMN public.mst_daerah.logo_daerah IS 'Path atau data logo resmi daerah.';
COMMENT ON COLUMN public.mst_daerah.created_at IS 'Tanggal dan waktu data dibuat.';
COMMENT ON COLUMN public.mst_daerah.created_by IS 'ID pengguna yang membuat data.';
COMMENT ON COLUMN public.mst_daerah.updated_at IS 'Tanggal dan waktu terakhir data diperbarui.';
COMMENT ON COLUMN public.mst_daerah.updated_by IS 'ID pengguna yang memperbarui data.';
COMMENT ON COLUMN public.mst_daerah.deleted_at IS 'Tanggal dan waktu data dihapus (soft delete).';
COMMENT ON COLUMN public.mst_daerah.deleted_by IS 'ID pengguna yang menghapus data.';

ALTER TABLE public.mst_daerah ADD CONSTRAINT mst_daerah_pkey PRIMARY KEY (id_daerah);
ALTER TABLE public.mst_daerah ADD CONSTRAINT mst_daerah_unique_key UNIQUE (kode_ddn);

CREATE INDEX mst_daerah_id_daerah_idx ON public.mst_daerah USING btree (id_daerah);
CREATE INDEX mst_daerah_kode_ddn_idx ON public.mst_daerah USING btree (kode_ddn);