DROP TABLE "Medicación-paciente" IF EXISTS;
DROP TABLE "Medicación" IF EXISTS;
DROP TABLE "Pago" IF EXISTS;
DROP TABLE "Horario" IF EXISTS;
DROP TABLE "Asignación" IF EXISTS;
DROP TABLE "Teléfono de terapeuta" IF EXISTS;
DROP TABLE "Teléfono" IF EXISTS;
DROP TABLE "Paciente" IF EXISTS;
DROP TABLE "Psiquiatra" IF EXISTS;
DROP TABLE "Médico" IF EXISTS;
DROP TABLE "Terapeuta" IF EXISTS;

CREATE TABLE "Psiquiatra" (
"Número de ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"Nombre" VARCHAR(25) NOT NULL,
"Apellido" VARCHAR(25) NOT NULL,
"Sexo" CHAR(6),
"Calle y número" VARCHAR(50),
"Ciudad" VARCHAR(25),
"Código postal" CHAR(5),
"Estado" CHAR(2),
"Teléfono" VARCHAR(10)
);

CREATE TABLE "Médico" (
"Número de ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"Nombre" VARCHAR(25) NOT NULL,
"Apellido" VARCHAR(25) NOT NULL,
"Sexo" CHAR(6),
"Calle y número" VARCHAR(50),
"Ciudad" VARCHAR(25),
"Código postal" CHAR(5),
"Estado" CHAR(2),
"Teléfono" VARCHAR(10)
);

CREATE TABLE "Paciente" (
"Número de ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"Nombre" VARCHAR(25) NOT NULL,
"Apellido" VARCHAR(25) NOT NULL,
"Sexo" CHAR(6),
"Fecha de nacimiento" DATE,
"Calle y número" VARCHAR(50),
"Ciudad" VARCHAR(25),
"Código postal" CHAR(5),
"Estado" CHAR(2),
"Diagnóstico" VARCHAR(60),
"ID de médico" INTEGER,
"ID de psiquiatra" INTEGER,
"Hora de registro" TIMESTAMP,
CONSTRAINT CK_PAT_GNDR CHECK( "Sexo" in ('Masculino', 'Femenino')),
CONSTRAINT FK_PAT_PSY FOREIGN KEY ("ID del psiquiatra") REFERENCES "Psiquiatra" ("Número de identificación"),
CONSTRAINT FK_PAT_DOC FOREIGN KEY ("ID del médico") REFERENCES "Médico" ("Número de ID")
);

CREATE TABLE "Número de teléfono" (
"ID de teléfono" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"ID del paciente" INTEGER NOT NULL,
"Número" VARCHAR(10),
"Descripción" VARCHAR(10),
CONSTRAINT FK_PAT_PHN FOREIGN KEY ("ID del paciente") REFERENCES "Paciente" ("Número de ID")
);

CREATE TABLE "Terapeuta" (
"Número de ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"Nombre" VARCHAR(25) NOT NULL,
"Apellido" VARCHAR(25) NOT NULL,
"Sexo" CHAR(6),
"Calle y número" VARCHAR(50),
"Ciudad" VARCHAR(25),
"Código postal" CHAR(5),
"Estado" CHAR(2),
"ID tributario" VARCHAR(20),
"Título académico" VARCHAR(25),
"Número de licencia" VARCHAR(15),
"Fecha de contratación" DATE NOT NULL,
"Fecha de terminación" DATE,
CONSTRAINT "CK_THP_GNDR" CHECK("Género" IN ('Masculino', 'Femenino')),
CONSTRAINT "CK_TERM_DT" CHECK( "Fecha de terminación" > "Fecha de contratación")
);

CREATE TABLE "Número de terapeutas" (
"ID de teléfono" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"ID del terapeuta" INTEGER,
"Número" VARCHAR(10),
"Descripción" VARCHAR(10),
CONSTRAINT FK_THP_PHN FOREIGN KEY ("ID del terapeuta") REFERENCES "Terapeuta" ("Número de ID")
);

CREATE TABLE "Asignación" (
"ID de asignación" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"ID del paciente" INTEGER NOT NULL,
"ID del terapeuta" INTEGER NOT NULL,
"Fecha asignada" DATE DEFAULT CURRENT_DATE NOT NULL,
"Fecha de caso cerrado" DATE,
CONSTRAINT FK_PAT_ASMT FOREIGN KEY ("ID del paciente") REFERENCES "Paciente"
(Número de ID),
CONSTRAINT FK_THP_ASMT FOREIGN KEY ("ID del terapeuta") REFERENCES "Terapeuta" ("Número de ID"),
CONSTRAINT "CK_CLOSE_DT" CHECK( "Fecha de cierre del caso" >= "Fecha de asignación")
);

CREATE TABLE "Horario" (
"ID Horario" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"ID de asignación" INTEGER,
"Fecha de la ranura" DATE NOT NULL,
"Hora del intervalo" TIME NOT NULL,
"Estado de la sesión" VARCHAR(20),
CONSTRAINT FK_SCH_ASMT FOREIGN KEY ("ID de asignación") REFERENCES
"Asignación" ("ID de asignación")
);

CREATE TABLE "Pago" (
"ID de pago" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"ID del paciente" INTEGER NOT NULL,
"Fecha y hora de pago" TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP,
"Cantidad" DECIMAL (10, 2) NOT NULL,
"Notas" VARCHAR(100),
"Resultado" CHAR(6) NOT NULL,
CONSTRAINT FK_PAT_PYMNT FOREIGN KEY ("ID del paciente") REFERENCES "Paciente" ("Número de ID"),
CONSTRAINT CK_DBT CHECK("Resultado" IN ('DÉBITO', 'CRÉDITO'))
);

CREATE TABLE "Medicación" (
"ID de medicamento" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"Nombre" VARCHAR(30) NOT NULL,
"Descripción" VARCHAR(256)
);

CREATE TABLE "Medicación-paciente" (
"ID del paciente" INTEGER NOT NULL,
"ID de medicamento" INTEGER NOT NULL,
"Dosificación" VARCHAR(50),
"Fecha de inicio" DATE DEFAULT CURRENT_DATE,
"Fecha de cierre" DATE,
CONSTRAINT PK_PAT_MED PRIMARY KEY ("ID del paciente", "ID del medicamento"),
CONSTRAINT FK_MED_PAT FOREIGN KEY ("Medication ID") REFERENCES "Medication" ("Medication ID"),
CONSTRAINT FK_PAT_MED FOREIGN KEY ("ID del paciente") REFERENCES "Paciente" ("Número de ID"),
CONSTRAINT CK_END_DT CHECK( "Fecha de finalización" >= "Fecha de inicio" )
);

