CREATE TABLE public.mst_satuan (
    id_satuan serial NOT NULL,
    id_unik_satuan uuid DEFAULT public.uuid_generate_v7() NOT NULL,
    locked boolean DEFAULT false NOT NULL,
    nama_satuan character varying(100) DEFAULT ''::character varying 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_satuan IS 'Tabel referensi satuan yang digunakan dalam sistem public/SIPD. Menyimpan daftar satuan ukuran (misalnya: unit, kg, liter) yang digunakan untuk perencanaan dan pelaporan.';
COMMENT ON COLUMN public.mst_satuan.id_satuan IS 'Primary key. ID unik untuk setiap entri satuan.';
COMMENT ON COLUMN public.mst_satuan.id_unik_satuan IS 'ID unik UUID untuk backup ID primary key.';
COMMENT ON COLUMN public.mst_satuan.locked IS 'Status kunci data. TRUE berarti data terkunci dan tidak dapat diubah.';
COMMENT ON COLUMN public.mst_satuan.nama_satuan IS 'Nama satuan (contoh: unit, kg, liter, meter). Harus unik.';
COMMENT ON COLUMN public.mst_satuan.created_at IS 'Tanggal dan waktu data dibuat.';
COMMENT ON COLUMN public.mst_satuan.created_by IS 'ID pengguna yang membuat data.';
COMMENT ON COLUMN public.mst_satuan.updated_at IS 'Tanggal dan waktu terakhir data diperbarui.';
COMMENT ON COLUMN public.mst_satuan.updated_by IS 'ID pengguna yang memperbarui data.';
COMMENT ON COLUMN public.mst_satuan.deleted_at IS 'Tanggal dan waktu data dihapus (soft delete).';
COMMENT ON COLUMN public.mst_satuan.deleted_by IS 'ID pengguna yang menghapus data.';

ALTER TABLE public.mst_satuan ADD CONSTRAINT mst_satuan_pkey PRIMARY KEY (id_satuan);
ALTER TABLE public.mst_satuan ADD CONSTRAINT mst_satuan_unique_key UNIQUE (nama_satuan);

CREATE INDEX mst_satuan_id_satuan_idx ON public.mst_satuan USING btree (id_satuan);
CREATE INDEX mst_satuan_nama_satuan_idx ON public.mst_satuan USING btree (nama_satuan);