Ejecutar en SQL Editor del proyecto ljinhegtywixtbzjgjfn.
Orden: instalación nueva → 001_init.sql y 003_auth_password.sql. Luego 004–008, 010_price_negotiation.sql, 011_cargo_trust.sql. Detalle: SQL-SUPABASE.md.
-- 004 — cancelación básica
ALTER TABLE matches
ADD COLUMN IF NOT EXISTS cancel_action TEXT,
ADD COLUMN IF NOT EXISTS cancelled_by TEXT,
ADD COLUMN IF NOT EXISTS cancel_reason TEXT;
-- 005 — motivos y multas sugeridas
ALTER TABLE matches
ADD COLUMN IF NOT EXISTS reason_code TEXT,
ADD COLUMN IF NOT EXISTS reason_detail TEXT,
ADD COLUMN IF NOT EXISTS penalty_type TEXT,
ADD COLUMN IF NOT EXISTS penalty_amount_clp BIGINT,
ADD COLUMN IF NOT EXISTS agreement_accepted BOOLEAN DEFAULT false;
-- 006 — acuerdo mutuo bilateral
ALTER TABLE matches
ADD COLUMN IF NOT EXISTS mutual_cancel_shipper_at TIMESTAMPTZ,
ADD COLUMN IF NOT EXISTS mutual_cancel_carrier_at TIMESTAMPTZ;
-- 007 — chat y notificaciones
CREATE TABLE IF NOT EXISTS match_messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
match_id UUID NOT NULL REFERENCES matches (id) ON DELETE CASCADE,
sender_role TEXT NOT NULL CHECK (sender_role IN ('shipper', 'carrier', 'admin')),
body TEXT NOT NULL,
preset_code TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS match_notifications (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
match_id UUID NOT NULL REFERENCES matches (id) ON DELETE CASCADE,
for_role TEXT NOT NULL CHECK (for_role IN ('shipper', 'carrier')),
type TEXT NOT NULL,
title TEXT NOT NULL,
body TEXT NOT NULL,
read_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_match_messages_match ON match_messages (match_id, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_match_notifications_role ON match_notifications (for_role, read_at, created_at DESC);
-- 008 — cuenta bancaria y cargos de multas
ALTER TABLE users
ADD COLUMN IF NOT EXISTS bank_holder_name TEXT,
ADD COLUMN IF NOT EXISTS bank_rut TEXT,
ADD COLUMN IF NOT EXISTS bank_name TEXT,
ADD COLUMN IF NOT EXISTS bank_account_type TEXT,
ADD COLUMN IF NOT EXISTS bank_account_number TEXT,
ADD COLUMN IF NOT EXISTS bank_registered_at TIMESTAMPTZ;
CREATE TABLE IF NOT EXISTS penalty_charges (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
match_id UUID NOT NULL REFERENCES matches (id) ON DELETE CASCADE,
debtor_user_id UUID REFERENCES users (id),
creditor_user_id UUID REFERENCES users (id),
debtor_role TEXT NOT NULL CHECK (debtor_role IN ('shipper', 'carrier')),
amount_clp BIGINT NOT NULL,
status TEXT NOT NULL DEFAULT 'suggested'
CHECK (status IN ('suggested', 'pending', 'paid', 'waived', 'overdue')),
due_at TIMESTAMPTZ NOT NULL,
paid_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_penalty_charges_debtor ON penalty_charges (debtor_user_id, status);
CREATE INDEX IF NOT EXISTS idx_penalty_charges_due ON penalty_charges (due_at);
-- Ver supabase/migrations/011_cargo_trust.sql (completo en repo)
ALTER TABLE load_requests
ADD COLUMN IF NOT EXISTS cargo_description TEXT,
ADD COLUMN IF NOT EXISTS declared_cargo_value_clp BIGINT,
ADD COLUMN IF NOT EXISTS has_dispatch_guide BOOLEAN DEFAULT false,
ADD COLUMN IF NOT EXISTS dispatch_guide_folio TEXT,
ADD COLUMN IF NOT EXISTS requires_cargo_insurance BOOLEAN DEFAULT false,
ADD COLUMN IF NOT EXISTS legal_terms_version TEXT,
ADD COLUMN IF NOT EXISTS terms_accepted_at TIMESTAMPTZ;
CREATE TABLE IF NOT EXISTS match_incidents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
match_id UUID NOT NULL REFERENCES matches (id) ON DELETE CASCADE,
reporter_role TEXT NOT NULL CHECK (reporter_role IN ('shipper', 'carrier', 'admin')),
reporter_user_id UUID REFERENCES users (id),
incident_type TEXT NOT NULL CHECK (
incident_type IN ('theft', 'damage', 'shortage', 'delay', 'other')
),
description TEXT NOT NULL,
declared_value_clp_at_report BIGINT,
status TEXT NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'reviewing', 'closed')),
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_match_incidents_match ON match_incidents (match_id, created_at DESC);
SELECT column_name FROM information_schema.columns
WHERE table_name = 'load_requests'
AND column_name IN ('declared_cargo_value_clp', 'cargo_description', 'terms_accepted_at');
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'public' AND table_name = 'match_incidents';