33 lines
926 B
PL/PgSQL
33 lines
926 B
PL/PgSQL
-- Link HSN codes to a default GST rate
|
|
-- Adds hsn_codes.gst_rate_id (nullable) FK -> gst_rates(id)
|
|
-- Idempotent: safe to re-run.
|
|
|
|
BEGIN;
|
|
|
|
ALTER TABLE hsn_codes
|
|
ADD COLUMN IF NOT EXISTS gst_rate_id BIGINT;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint WHERE conname = 'hsn_codes_gst_rate_id_fkey'
|
|
) THEN
|
|
ALTER TABLE hsn_codes
|
|
ADD CONSTRAINT hsn_codes_gst_rate_id_fkey
|
|
FOREIGN KEY (gst_rate_id) REFERENCES gst_rates(id);
|
|
END IF;
|
|
END $$;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_hsn_codes_gst_rate_id ON hsn_codes (gst_rate_id);
|
|
|
|
-- Optional backfill: default existing HSN codes to the 18% slab (adjust per business rules)
|
|
-- UPDATE hsn_codes h
|
|
-- SET gst_rate_id = g.id
|
|
-- FROM gst_rates g
|
|
-- WHERE g.rate_pct = 18 AND g.is_active = TRUE AND h.gst_rate_id IS NULL;
|
|
|
|
COMMIT;
|
|
|
|
-- Verify:
|
|
-- SELECT h.code, g.rate_pct FROM hsn_codes h LEFT JOIN gst_rates g ON g.id = h.gst_rate_id ORDER BY h.code;
|