{ "schemas": [ "public" ], "framework_owned_objects": [ "migrations (Laravel)" ], "extension_owned_objects": "Objectos PostGIS pertencem à extensão; não são duplicados no dicionário aplicacional.", "extensions": [ "postgis", "pgcrypto" ], "functions": [ "CREATE OR REPLACE FUNCTION public.investmoz_set_updated_at() RETURNS trigger\nLANGUAGE plpgsql SET search_path = pg_catalog, public AS $$\nBEGIN\n NEW.updated_at = CURRENT_TIMESTAMP;\n RETURN NEW;\nEND;\n$$;", "CREATE OR REPLACE FUNCTION public.investmoz_reject_audit_change() RETURNS trigger\nLANGUAGE plpgsql SET search_path = pg_catalog, public AS $$\nBEGIN\n RAISE EXCEPTION 'InvestMoz audit_events is append-only' USING ERRCODE = '42501';\nEND;\n$$;", "CREATE OR REPLACE FUNCTION public.investmoz_protect_event_envelope() RETURNS trigger\nLANGUAGE plpgsql SET search_path = pg_catalog, public AS $$\nBEGIN\n IF TG_OP = 'DELETE' THEN\n RAISE EXCEPTION 'InvestMoz event deletion requires a reviewed retention migration' USING ERRCODE = '42501';\n END IF;\n IF (to_jsonb(NEW) - ARRAY['status','updated_at','published_at','processed_at','available_at'])\n IS DISTINCT FROM\n (to_jsonb(OLD) - ARRAY['status','updated_at','published_at','processed_at','available_at']) THEN\n RAISE EXCEPTION 'InvestMoz event envelope is immutable' USING ERRCODE = '42501';\n END IF;\n RETURN NEW;\nEND;\n$$;" ], "triggers": [ { "name": "imz_organizations_updated", "table": "organizations", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_memberships_updated", "table": "memberships", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_consents_updated", "table": "consents", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_documents_updated", "table": "documents", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_geo_locations_updated", "table": "geo_locations", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_geo_geometries_updated", "table": "geo_geometries", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_projects_updated", "table": "projects", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_project_locations_updated", "table": "project_locations", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_economic_clusters_updated", "table": "economic_clusters", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_value_chains_updated", "table": "value_chains", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_value_chain_links_updated", "table": "value_chain_links", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_cluster_projects_updated", "table": "cluster_projects", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_anchor_project_links_updated", "table": "anchor_project_links", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_complementary_project_links_updated", "table": "complementary_project_links", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_development_corridors_updated", "table": "development_corridors", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_corridor_locations_updated", "table": "corridor_locations", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_corridor_projects_updated", "table": "corridor_projects", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_corridor_clusters_updated", "table": "corridor_clusters", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_investors_updated", "table": "investors", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_contacts_updated", "table": "contacts", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_investor_contacts_updated", "table": "investor_contacts", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_leads_updated", "table": "leads", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_crm_opportunities_updated", "table": "crm_opportunities", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_activities_updated", "table": "activities", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_tasks_updated", "table": "tasks", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_investor_journeys_updated", "table": "investor_journeys", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_journey_steps_updated", "table": "journey_steps", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_submissions_updated", "table": "submissions", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_aftercare_plans_updated", "table": "aftercare_plans", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_constraints_updated", "table": "constraints", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_escalations_updated", "table": "escalations", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_skills_updated", "table": "skills", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_occupations_updated", "table": "occupations", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_training_needs_updated", "table": "training_needs", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_training_providers_updated", "table": "training_providers", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_courses_updated", "table": "courses", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_education_opportunities_updated", "table": "education_opportunities", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_outbox_events_updated", "table": "outbox_events", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_inbox_events_updated", "table": "inbox_events", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_sync_runs_updated", "table": "sync_runs", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_reconciliation_issues_updated", "table": "reconciliation_issues", "event": "BEFORE UPDATE", "function": "investmoz_set_updated_at", "level": "ROW" }, { "name": "imz_audit_events_immutable", "table": "audit_events", "event": "BEFORE UPDATE OR DELETE OR TRUNCATE", "function": "investmoz_reject_audit_change", "level": "STATEMENT" }, { "name": "imz_outbox_events_envelope", "table": "outbox_events", "event": "BEFORE UPDATE OR DELETE", "function": "investmoz_protect_event_envelope", "level": "ROW" }, { "name": "imz_outbox_events_no_truncate", "table": "outbox_events", "event": "BEFORE TRUNCATE", "function": "investmoz_reject_audit_change", "level": "STATEMENT" }, { "name": "imz_inbox_events_envelope", "table": "inbox_events", "event": "BEFORE UPDATE OR DELETE", "function": "investmoz_protect_event_envelope", "level": "ROW" }, { "name": "imz_inbox_events_no_truncate", "table": "inbox_events", "event": "BEFORE TRUNCATE", "function": "investmoz_reject_audit_change", "level": "STATEMENT" } ], "views": [], "materialized_views": [], "custom_enums": [], "generated_columns": [], "sequences": [ "users_id_seq", "jobs_id_seq", "failed_jobs_id_seq", "passkeys_id_seq", "sectors_id_seq", "opportunities_id_seq", "interest_requests_id_seq" ], "security_policies": [], "audit": "append-only; writers must not own the tables or possess DDL privileges", "logical_links_without_fk": [ "sessions.user_id -> users.id", "password_reset_tokens.email -> users.email", "audit_events.entity_type/entity_id", "outbox_events.aggregate_type/aggregate_id" ] }