Files
nala 250ac35fd1
tests / ci (push) Canceled after 0s
first commit
2026-09-28 10:01:09 +02:00

364 lines
11 KiB
JSON

{
"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"
]
}