CREATE TABLE public.compliance_checklists ( id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY, association_id UUID NOT NULL REFERENCES public.associations(id) ON DELETE CASCADE, fiscal_year INTEGER NOT NULL, items JSONB NOT NULL DEFAULT '[]'::jsonb, status TEXT NOT NULL DEFAULT 'active', created_by UUID, created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), UNIQUE (association_id, fiscal_year) ); ALTER TABLE public.compliance_checklists ENABLE ROW LEVEL SECURITY; CREATE POLICY "Staff can view compliance checklists" ON public.compliance_checklists FOR SELECT TO authenticated USING (public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager')); CREATE POLICY "Staff can create compliance checklists" ON public.compliance_checklists FOR INSERT TO authenticated WITH CHECK (public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager')); CREATE POLICY "Staff can update compliance checklists" ON public.compliance_checklists FOR UPDATE TO authenticated USING (public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager')); CREATE POLICY "Staff can delete compliance checklists" ON public.compliance_checklists FOR DELETE TO authenticated USING (public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager')); CREATE TRIGGER update_compliance_checklists_updated_at BEFORE UPDATE ON public.compliance_checklists FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();