Back to list
TheVillegas

postgres-db

by TheVillegas

Proyecto de Practica de Matias Villegas para realizar la web de analistas para el laboratorio AsisTec de la PUCV

0🍴 0📅 Jan 23, 2026

SKILL.md


name: postgres-db description: Úsalo OBLIGATORIAMENTE cuando el usuario pida escribir consultas SQL para PostgreSQL, crear modelos en Node.js (pg), debuggear errores o entender la estructura de tablas refactorizada.

PostgreSQL Database Context (Asistec Lab)

Eres el DBA experto en PostgreSQL. Tu fuente de verdad es este esquema. Driver Node.js: pg (node-postgres)

🧠 Reglas de Oro para PostgreSQL (Node.js Driver)

  1. Bind Variables (SEGURIDAD):

    • OBLIGATORIO: Jamás concatenes valores.
    • Usa el signo peso y un número secuencial: $1, $2, $3.
    • Ejemplo: SELECT * FROM USUARIOS WHERE RUT_ANALISTA = $1
  2. Manejo de Tipos de Dato:

    • Booleanos: PostgreSQL tiene tipo nativo BOOLEAN.
      • App (true) -> DB (true)
      • App (false) -> DB (false)
      • Nota: Ya no uses 0 o 1 como en Oracle.
    • Fechas:
      • Postgres maneja nativamente strings ISO 8601 (YYYY-MM-DD).
      • No necesitas TO_DATE. Simplemente pasa el string: VALUES ($1) donde $1 es '2026-01-21'.
    • IDs Autoincrementales:
      • Para obtener el ID recién creado después de un insert, usa RETURNING.
      • Ejemplo: INSERT INTO ... VALUES (...) RETURNING ID_SESION;
  3. Configuración de Salida:

    • La librería pg devuelve un objeto resultado. Las filas están en la propiedad .rows.
    • const res = await pool.query(...) -> Los datos están en res.rows (Array de objetos).

🏛️ Esquema de Tablas (Diccionario de Datos)

1. Núcleo & Usuarios

CREATE TABLE USUARIOS (
    RUT_ANALISTA VARCHAR(20) PRIMARY KEY, -- Aumentado a 20 car.
    NOMBRE_APELLIDO_ANALISTA VARCHAR(100),
    CORREO_ANALISTA VARCHAR(100),
    CONTRASENA_ANALISTA VARCHAR(100), -- Hash bcrypt
    ROL_ANALISTA INT DEFAULT 0 -- 0: Analista, 1: Admin/Supervisor
);

CREATE TABLE MUESTRAS_ALI (
    CODIGO_ALI BIGINT PRIMARY KEY, -- ID Principal (Externo)
    CODIGO_OTROS BIGINT,
    OBSERVACIONES_CLIENTE TEXT,
    OBSERVACIONES_GENERALES TEXT,
    FECHA_CREACION TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Reporte Principal TPA
CREATE TABLE TPA_REPORTE (
    CODIGO_ALI BIGINT PRIMARY KEY REFERENCES MUESTRAS_ALI(CODIGO_ALI),
    ID_LUGAR INT, -- FK LUGARES_ALMACENAMIENTO
    ESTADO_ACTUAL VARCHAR(20), -- 'BORRADOR', 'VERIFICADO', 'NO_REALIZADO'
    FECHA_CIERRE TIMESTAMP,
    USUARIO_CIERRE VARCHAR(20), -- FK USUARIOS
    FECHA_ULTIMA_MODIFICACION TIMESTAMP,
    USUARIO_ULTIMA_MODIFICACION VARCHAR(20)
);

-- Etapa 2: Sesiones y Equipos
CREATE TABLE TPA_ETAPA2_SESION (
    ID_SESION SERIAL PRIMARY KEY,
    CODIGO_ALI BIGINT REFERENCES TPA_REPORTE(CODIGO_ALI),
    RUT_ANALISTA VARCHAR(20),
    FECHA_INICIO TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    RETIRO_PESADO BOOLEAN DEFAULT FALSE -- Cambio: Boolean Nativo
);

CREATE TABLE TPA_ETAPA2_EQUIPOS (
    ID_USO_EQUIPO SERIAL PRIMARY KEY,
    ID_SESION INT, -- FK TPA_ETAPA2_SESION
    ID_EQUIPO INT  -- FK EQUIPOS_LAB
);

CREATE TABLE TPA_ETAPA2_MATERIALES (
    ID_USO_MATERIAL SERIAL PRIMARY KEY,
    ID_SESION INT,
    TIPO_MATERIAL VARCHAR(20),
    ID_PIPETA INT,      -- FK MICROPIPETAS (Opcional)
    ID_INSTRUMENTO INT, -- FK INSTRUMENTOS (Opcional)
    CODIGO_MANUAL VARCHAR(100)
);

-- Etapa 3: Checklist
CREATE TABLE TPA_ETAPA3_CHECKLIST (
    ID_CHECKLIST SERIAL PRIMARY KEY,
    CODIGO_ALI BIGINT,
    NOMBRE_ITEM VARCHAR(100),
    SELECCIONADO BOOLEAN DEFAULT FALSE,
    BLOQUEADO BOOLEAN DEFAULT FALSE
);

-- Etapa 5: Siembra y Recursos
CREATE TABLE TPA_ETAPA5_SIEMBRA (
    ID_SIEMBRA SERIAL PRIMARY KEY,
    CODIGO_ALI BIGINT UNIQUE,
    OBSERVACIONES_SIEMBRA TEXT,
    FECHA_REGISTRO TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE TPA_ETAPA5_RECURSOS (
    ID_RECURSO_SIEMBRA SERIAL PRIMARY KEY,
    ID_SIEMBRA INT, -- FK TPA_ETAPA5_SIEMBRA
    CATEGORIA_RECURSO VARCHAR(20), -- 'MATERIAL', 'DILUYENTE', 'EQUIPO'
    ID_MATERIAL_SIEMBRA INT,
    ID_DILUYENTE INT,
    ID_EQUIPO INT,
    SELECCIONADO BOOLEAN DEFAULT TRUE
);

-- Reporte Principal TPA
CREATE TABLE TPA_REPORTE (
    CODIGO_ALI BIGINT PRIMARY KEY REFERENCES MUESTRAS_ALI(CODIGO_ALI),
    ID_LUGAR INT, -- FK LUGARES_ALMACENAMIENTO
    ESTADO_ACTUAL VARCHAR(20), -- 'BORRADOR', 'VERIFICADO', 'NO_REALIZADO'
    FECHA_CIERRE TIMESTAMP,
    USUARIO_CIERRE VARCHAR(20), -- FK USUARIOS
    FECHA_ULTIMA_MODIFICACION TIMESTAMP,
    USUARIO_ULTIMA_MODIFICACION VARCHAR(20)
);

-- Etapa 2: Sesiones y Equipos
CREATE TABLE TPA_ETAPA2_SESION (
    ID_SESION SERIAL PRIMARY KEY,
    CODIGO_ALI BIGINT REFERENCES TPA_REPORTE(CODIGO_ALI),
    RUT_ANALISTA VARCHAR(20),
    FECHA_INICIO TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    RETIRO_PESADO BOOLEAN DEFAULT FALSE -- Cambio: Boolean Nativo
);

CREATE TABLE TPA_ETAPA2_EQUIPOS (
    ID_USO_EQUIPO SERIAL PRIMARY KEY,
    ID_SESION INT, -- FK TPA_ETAPA2_SESION
    ID_EQUIPO INT  -- FK EQUIPOS_LAB
);

CREATE TABLE TPA_ETAPA2_MATERIALES (
    ID_USO_MATERIAL SERIAL PRIMARY KEY,
    ID_SESION INT,
    TIPO_MATERIAL VARCHAR(20),
    ID_PIPETA INT,      -- FK MICROPIPETAS (Opcional)
    ID_INSTRUMENTO INT, -- FK INSTRUMENTOS (Opcional)
    CODIGO_MANUAL VARCHAR(100)
);

-- Etapa 3: Checklist
CREATE TABLE TPA_ETAPA3_CHECKLIST (
    ID_CHECKLIST SERIAL PRIMARY KEY,
    CODIGO_ALI BIGINT,
    NOMBRE_ITEM VARCHAR(100),
    SELECCIONADO BOOLEAN DEFAULT FALSE,
    BLOQUEADO BOOLEAN DEFAULT FALSE
);

-- Etapa 5: Siembra y Recursos
CREATE TABLE TPA_ETAPA5_SIEMBRA (
    ID_SIEMBRA SERIAL PRIMARY KEY,
    CODIGO_ALI BIGINT UNIQUE,
    OBSERVACIONES_SIEMBRA TEXT,
    FECHA_REGISTRO TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE TPA_ETAPA5_RECURSOS (
    ID_RECURSO_SIEMBRA SERIAL PRIMARY KEY,
    ID_SIEMBRA INT, -- FK TPA_ETAPA5_SIEMBRA
    CATEGORIA_RECURSO VARCHAR(20), -- 'MATERIAL', 'DILUYENTE', 'EQUIPO'
    ID_MATERIAL_SIEMBRA INT,
    ID_DILUYENTE INT,
    ID_EQUIPO INT,
    SELECCIONADO BOOLEAN DEFAULT TRUE
);

4. Maestros y Catálogos (Lookups)

Tablas maestras para llenar selects en el Frontend. IDs son INT (SERIAL).

  • EQUIPOS_LAB: ID_EQUIPO, NOMBRE_EQUIPO, CODIGO_EQUIPO
  • MICROPIPETAS: ID_PIPETA, NOMBRE_PIPETA, CAPACIDAD
  • INSTRUMENTOS: ID_INSTRUMENTO, NOMBRE_INSTRUMENTO
  • DILUYENTES: ID_DILUYENTE, NOMBRE_DILUYENTE
  • MATERIAL_SIEMBRA: ID_MATERIAL_SIEMBRA, NOMBRE_MATERIAL
  • MAESTRO_CHECKLIST_LIMPIEZA: Items por defecto.

5. Vistas Útiles

V_CATALOGO_UNIFICADO:

  • Consulta unificada de INSTRUMENTOS y MICROPIPETAS.
  • Columnas: id_origen, nombre, codigo, tipo_material ('INSTRUMENTO' | 'PIPETA'), capacidad.

Score

Total Score

60/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon