- Auth: Login/Register con creacion de clinica - Dashboard: KPIs reales, graficas recharts - Pacientes: CRUD completo con busqueda - Agenda: FullCalendar, drag-and-drop, vista recepcion - Expediente: Notas SOAP, signos vitales, CIE-10 - Facturacion: Facturas con IVA, campos CFDI SAT - Inventario: Productos, stock, movimientos, alertas - Configuracion: Clinica, equipo, catalogo servicios - Supabase self-hosted: 18 tablas con RLS multi-tenant - Docker + Nginx para produccion Co-Authored-By: claude-flow <ruv@ruv.net>
29 lines
1.1 KiB
SQL
29 lines
1.1 KiB
SQL
CREATE TABLE patients (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
clinic_id UUID NOT NULL REFERENCES clinics(id) ON DELETE CASCADE,
|
|
first_name TEXT NOT NULL,
|
|
last_name TEXT NOT NULL,
|
|
date_of_birth DATE,
|
|
gender TEXT CHECK (gender IN ('M', 'F', 'otro')),
|
|
curp TEXT,
|
|
phone TEXT,
|
|
email TEXT,
|
|
address JSONB,
|
|
blood_type TEXT,
|
|
allergies TEXT[] DEFAULT '{}',
|
|
emergency_contact JSONB,
|
|
notes TEXT,
|
|
source TEXT,
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_patients_clinic ON patients(clinic_id);
|
|
CREATE INDEX idx_patients_name ON patients(clinic_id, last_name, first_name);
|
|
CREATE INDEX idx_patients_phone ON patients(clinic_id, phone);
|
|
|
|
ALTER TABLE patients ENABLE ROW LEVEL SECURITY;
|
|
CREATE POLICY "Users can view clinic patients" ON patients FOR SELECT USING (clinic_id = auth.clinic_id());
|
|
CREATE POLICY "Users can insert clinic patients" ON patients FOR INSERT WITH CHECK (clinic_id = auth.clinic_id());
|
|
CREATE POLICY "Users can update clinic patients" ON patients FOR UPDATE USING (clinic_id = auth.clinic_id());
|