BEGIN;
CREATE TABLE "seguimiento_oficios_dependencia" (
    "id" serial NOT NULL PRIMARY KEY,
    "clave" varchar(50) NOT NULL,
    "nombre" varchar(150) NOT NULL
)
;
CREATE TABLE "seguimiento_oficios_direccion" (
    "id" serial NOT NULL PRIMARY KEY,
    "dependencia_id" integer NOT NULL REFERENCES "seguimiento_oficios_dependencia" ("id") DEFERRABLE INITIALLY DEFERRED,
    "clave" varchar(50) NOT NULL,
    "nombre" varchar(100) NOT NULL
)
;
CREATE TABLE "seguimiento_oficios_tipodocumento" (
    "id" serial NOT NULL PRIMARY KEY,
    "nombre" varchar(50) NOT NULL
)
;
CREATE TABLE "seguimiento_oficios_puestos" (
    "id" serial NOT NULL PRIMARY KEY,
    "nombre" varchar(100) NOT NULL,
    UNIQUE ("nombre")
)
;
CREATE TABLE "seguimiento_oficios_estatus" (
    "id" serial NOT NULL PRIMARY KEY,
    "clave" varchar(50) NOT NULL,
    "nombre" varchar(50) NOT NULL,
    "color" varchar(17) NOT NULL
)
;
CREATE TABLE "seguimiento_oficios_titulos" (
    "id" serial NOT NULL PRIMARY KEY,
    "monograma" varchar(50) NOT NULL,
    "nombre" varchar(50) NOT NULL
)
;
CREATE TABLE "seguimiento_oficios_personas" (
    "id" serial NOT NULL PRIMARY KEY,
    "nombre" varchar(50) NOT NULL,
    "apellidopaterno" varchar(50) NOT NULL,
    "apellidomaterno" varchar(50) NOT NULL,
    "puesto_id" integer NOT NULL REFERENCES "seguimiento_oficios_puestos" ("id") DEFERRABLE INITIALLY DEFERRED,
    "titulo_id" integer NOT NULL REFERENCES "seguimiento_oficios_titulos" ("id") DEFERRABLE INITIALLY DEFERRED,
    "direccion_id" integer NOT NULL REFERENCES "seguimiento_oficios_direccion" ("id") DEFERRABLE INITIALLY DEFERRED
)
;
CREATE TABLE "seguimiento_oficios_oficios" (
    "id" serial NOT NULL PRIMARY KEY,
    "folio_interno" varchar(70) NOT NULL,
    "fecha" date NOT NULL,
    "fecha_captura" timestamp with time zone NOT NULL,
    "fecha_oficio" date,
    "no_oficio" varchar(70) NOT NULL,
    "direccion_id" integer NOT NULL REFERENCES "seguimiento_oficios_direccion" ("id") DEFERRABLE INITIALLY DEFERRED,
    "asunto" varchar(70) NOT NULL,
    "destinatario_id" integer NOT NULL REFERENCES "seguimiento_oficios_personas" ("id") DEFERRABLE INITIALLY DEFERRED,
    "remitente_id" integer NOT NULL REFERENCES "seguimiento_oficios_personas" ("id") DEFERRABLE INITIALLY DEFERRED,
    "archivo" varchar(100) NOT NULL,
    "tipo_documento_id" integer NOT NULL REFERENCES "seguimiento_oficios_tipodocumento" ("id") DEFERRABLE INITIALLY DEFERRED,
    "estatus_id" integer NOT NULL REFERENCES "seguimiento_oficios_estatus" ("id") DEFERRABLE INITIALLY DEFERRED,
    "usuario_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED,
    "observaciones" text,
    "fecha_ultima_modificacion" timestamp with time zone NOT NULL,
    UNIQUE ("no_oficio")
)
;
CREATE TABLE "seguimiento_oficios_asignacion_direccion" (
    "id" serial NOT NULL PRIMARY KEY,
    "asignacion_id" integer NOT NULL,
    "direccion_id" integer NOT NULL REFERENCES "seguimiento_oficios_direccion" ("id") DEFERRABLE INITIALLY DEFERRED,
    UNIQUE ("asignacion_id", "direccion_id")
)
;
CREATE TABLE "seguimiento_oficios_asignacion" (
    "id" serial NOT NULL PRIMARY KEY,
    "oficio_id" integer NOT NULL REFERENCES "seguimiento_oficios_oficios" ("id") DEFERRABLE INITIALLY DEFERRED,
    "asigna_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED,
    "observaciones" text,
    "fecha" timestamp with time zone NOT NULL
)
;
ALTER TABLE "seguimiento_oficios_asignacion_direccion" ADD CONSTRAINT "asignacion_id_refs_id_c48d5b73" FOREIGN KEY ("asignacion_id") REFERENCES "seguimiento_oficios_asignacion" ("id") DEFERRABLE INITIALLY DEFERRED;
CREATE TABLE "seguimiento_oficios_bitacora" (
    "id" serial NOT NULL PRIMARY KEY,
    "fecha" timestamp with time zone NOT NULL,
    "oficio_id" integer NOT NULL REFERENCES "seguimiento_oficios_oficios" ("id") DEFERRABLE INITIALLY DEFERRED,
    "estatus_id" integer NOT NULL REFERENCES "seguimiento_oficios_estatus" ("id") DEFERRABLE INITIALLY DEFERRED,
    "usuario_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED,
    "observaciones" text
)
;
CREATE TABLE "seguimiento_oficios_tipo_usuario" (
    "id" serial NOT NULL PRIMARY KEY,
    "nombre" varchar(50) NOT NULL
)
;
CREATE TABLE "seguimiento_oficios_perfil" (
    "id" serial NOT NULL PRIMARY KEY,
    "tipo_id" integer NOT NULL REFERENCES "seguimiento_oficios_tipo_usuario" ("id") DEFERRABLE INITIALLY DEFERRED,
    "usuario_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED,
    "direccion_id" integer REFERENCES "seguimiento_oficios_direccion" ("id") DEFERRABLE INITIALLY DEFERRED,
    "dependencia_id" integer REFERENCES "seguimiento_oficios_dependencia" ("id") DEFERRABLE INITIALLY DEFERRED
)
;
CREATE INDEX "seguimiento_oficios_direccion_dependencia_id" ON "seguimiento_oficios_direccion" ("dependencia_id");
CREATE INDEX "seguimiento_oficios_personas_puesto_id" ON "seguimiento_oficios_personas" ("puesto_id");
CREATE INDEX "seguimiento_oficios_personas_titulo_id" ON "seguimiento_oficios_personas" ("titulo_id");
CREATE INDEX "seguimiento_oficios_personas_direccion_id" ON "seguimiento_oficios_personas" ("direccion_id");
CREATE INDEX "seguimiento_oficios_oficios_direccion_id" ON "seguimiento_oficios_oficios" ("direccion_id");
CREATE INDEX "seguimiento_oficios_oficios_destinatario_id" ON "seguimiento_oficios_oficios" ("destinatario_id");
CREATE INDEX "seguimiento_oficios_oficios_remitente_id" ON "seguimiento_oficios_oficios" ("remitente_id");
CREATE INDEX "seguimiento_oficios_oficios_tipo_documento_id" ON "seguimiento_oficios_oficios" ("tipo_documento_id");
CREATE INDEX "seguimiento_oficios_oficios_estatus_id" ON "seguimiento_oficios_oficios" ("estatus_id");
CREATE INDEX "seguimiento_oficios_oficios_usuario_id" ON "seguimiento_oficios_oficios" ("usuario_id");
CREATE INDEX "seguimiento_oficios_asignacion_oficio_id" ON "seguimiento_oficios_asignacion" ("oficio_id");
CREATE INDEX "seguimiento_oficios_asignacion_asigna_id" ON "seguimiento_oficios_asignacion" ("asigna_id");
CREATE INDEX "seguimiento_oficios_bitacora_oficio_id" ON "seguimiento_oficios_bitacora" ("oficio_id");
CREATE INDEX "seguimiento_oficios_bitacora_estatus_id" ON "seguimiento_oficios_bitacora" ("estatus_id");
CREATE INDEX "seguimiento_oficios_bitacora_usuario_id" ON "seguimiento_oficios_bitacora" ("usuario_id");
CREATE INDEX "seguimiento_oficios_perfil_tipo_id" ON "seguimiento_oficios_perfil" ("tipo_id");
CREATE INDEX "seguimiento_oficios_perfil_usuario_id" ON "seguimiento_oficios_perfil" ("usuario_id");
CREATE INDEX "seguimiento_oficios_perfil_direccion_id" ON "seguimiento_oficios_perfil" ("direccion_id");
CREATE INDEX "seguimiento_oficios_perfil_dependencia_id" ON "seguimiento_oficios_perfil" ("dependencia_id");

COMMIT;
