Documentación Técnica

Banco de Sangre

Módulo completo de gestión de donantes, receptores, laboratorio, almacén y CENSUR para el sistema Centro Horizonte.

122 Endpoints
18 Archivos de ruta
20+ Modelos
7 Casos de Uso
2 Flujos principales
📋
Sección 01

Visión General

El módulo de Banco de Sangre gestiona dos flujos principales e independientes que comparten infraestructura de laboratorio y almacén:

🩸 Flujo Disponente Donador

Proceso completo desde el registro inicial hasta el almacenamiento de hemocomponentes procesados y disponibles para surtido.

BancoSangre

🏥 Flujo Receptor CENSUR

Solicitud de productos sanguíneos, tipar y cruzar, pedido a sede, cobro y vigilancia de reacciones transfusionales.

BancoSangreSocios
Flujo Actor Principal Modelo Central Descripción
Disponente Donador de sangre BancoSangre Proceso completo desde registro hasta almacenamiento de hemocomponentes
Receptor / CENSUR Receptor de sangre BancoSangreSocios Solicitud, tipar y cruzar, entrega de productos sanguíneos
🗂️
Sección 02

Modelos de Datos

1. BancoSangre — Expediente del Disponente

models/bancoDeSangre/modelBancoSangre.js

CampoTipoReferenciaDescripción
pacienteObjectIdPacientePaciente/donador
cuestionarioautoexclusionObjectIdmodelCuestioExclusionCuestionario de autoexclusión
signosvitalesObjectIdSignosVitalesBSTalla, peso, IMC, T/A
historiaclinicaObjectIdHistoriaClinicaBSHistoria clínica completa
hojaevolucionObjectIdhojaEvolucionBSExploración física del médico
reaccionesderivadasObjectIdReaccionesDerivadasBSReacciones durante la donación
flebotomiaObjectIdFlebotomiaBSDatos de la extracción de sangre
laboratorio[ObjectId]LaboratorioBSEstudios de laboratorio
almacen[ObjectId]productosAlmacenStockHemocomponentes generados
procesoStringNUEVO · ENFERMERIA · DOCTOR · FLEBOTOMIA · SEROLOGIA · FINALIZADO
estatusStringDISPONIBLE · DIFERIDO · EN PROCESO
motivoStringMotivo de diferimiento
tiempo_rechazoStringFecha de diferimiento
fecha_terminoDateFecha en que termina el periodo de diferimiento

2. BancoSangreSocios — Expediente del Receptor (CENSUR)

models/bancoDeSangre/modelBancoSangreTercero.js

CampoTipoReferenciaDescripción
pacienteObjectIdPacientePaciente receptor
receptorObjectIdDocumentosBSDocumentos del receptor
pedidoObjectIdpedidosSedesBancoOrden de pedido de hemocomponentes
tiparycruzar[ObjectId]LaboratorioBSEstudios de tipo y cruce
proceso_censurObjectIdBancoSangreSociosProcesosSeguimiento de procesos (4 etapas)
ventaCensur[ObjectId]carritoCensurVenta/cobro de productos
tipo_productoStringTipo de producto solicitado
estatusStringRECEPTOR · REACCIONES TRANSFUCIONALES
huboReaccionAdversaStringSI / NO

SignosVitalesBS

modelSignosVitales.js
CampoTipoDescripción
tallaNumberAltura en cm
pesoNumberPeso en kg
imcNumberÍndice de masa corporal
tempNumberTemperatura
sistolicaNumberPresión sistólica
diastolicaNumberPresión diastólica
huellasMultiplesStringHuellas venopunción múltiples
huellasRecientesStringHuellas venopunción recientes

FlebotomiaBS

modelFlebotomia.js
CampoDescripción
bancodesangreRef a BancoSangre
disponenteRef a DocumentosBS
tipo_de_sangreadoTipo de extracción
tipo_de_donadorAltruista, reposición, etc.
volumenVolumen extraído
tiempoTiempo de extracción

LaboratorioBS

modelLaboratorio.js · polimórfico
UsoCampo ref
Biometría Hemáticalaboratorio → BancoSangre
Grupo y RHlaboratorio → BancoSangre
Serologíalaboratorio → BancoSangre
Tipo y Crucetiparycruzar → BancoSangreSocios

hojaEvolucionBS

modelHojaEvolucion.js
CampoDescripción
piel, mucosas, toraxHallazgos por aparato
abdomen, higado, bazoHallazgos por aparato
gangliosHallazgos ganglionares
candidato_donacionAprobación médica
cie10Diagnóstico CIE-10

5. HistoriaClinicaBS

models/bancoDeSangre/modelHistoriaClinica.js

Más de 80 campos cubriendo todas las áreas clínicas relevantes para la donación de sangre:

ÁreaContenido
InfecciososHepatitis, VIH, COVID, paludismo, Chagas, sífilis, brucelosis
Quirúrgicos / MédicosCirugías, transfusiones previas, enfermedades crónicas
MedicamentosAnticoagulantes, retinoides, hormonas, antibióticos
Conductas de riesgoTatuajes recientes, perforaciones, uso de drogas
GinecobstétricosEmbarazo, lactancia, menstruación, fecha última regla

13. Modelos Auxiliares

ModeloArchivoDescripción
almacenProductosmodels/warehouse/modelProductos.jsCatálogo admin de productos/materiales
productosAlmacenStockmodels/almacen/stock/modelProductosStock.jsUnidades individuales en stock (con QR)
carritoCensurmodels/almacen/stock/carritoCensur.jsCobro/venta de productos a receptores
DocumentosBSmodels/bancoDeSangre/modelDocumentos.jsArchivos digitales del disponente/receptor
EstudiosLabBSmodels/bancoDeSangre/modelEstudios.jsCatálogo de estudios de laboratorio
TipeyCruceBSmodels/bancoDeSangre/modelTipeyCruce.jsResultados de tipo y cruce
proveedoresBSmodels/almacen/proveedores/porveedorModel.jsProveedores de insumos
cSeguimientomodels/almacen/modelSeguimiento.jsSeguimientos interdepartamentales
serviciosCensurmodels/almacen/modelServicios.jsCatálogo de servicios de CENSUR
Sección 03

APIs por Módulo

📁

bancosangre.js — Expediente Principal del Disponente

18 endpoints
MétodoEndpointDescripción
POST/bancodesangreCrear nuevo expediente de banco de sangre para un paciente
PUT/agregar/procesobancodesangreActualizar proceso, estatus, motivo y fecha_termino
GET/getdisponente/:idObtener expediente completo por ID de banco de sangre
GET/getdisponente/por/paciente/:idObtener expediente completo por ID de paciente
GET/disponentesListar todos los disponentes con todos sus datos
POST/diferir/disponenteMarcar disponente como DIFERIDO con motivo
GET/orden/receptoresListar órdenes con estatus RECEPTOR
GET/orden/receptor/:idObtener una orden de receptor por ID
GET/disponentes/contarConteo total de expedientes
POST/disponente/visitasContar donaciones FINALIZADAS de un paciente
POST/getdisponente/visitasContar todas las visitas de un paciente
POST/disponentes/grupoyrhBuscar disponentes por tipo de sangre, agrupados por hemocomponente
POST/disponentes/diferidosListar diferidos de un paciente
GET/historico/disponentes/diferidosHistórico global de diferidos
POST/historico/banco/disponenteHistórico de donaciones de un paciente con flebotomía
GET/historico/disponente/bs/:idDetalle de un expediente histórico
POST/verificar/disponenteVerificar si un paciente tiene expedientes previos
GET/bancosListar todos los expedientes (sin populate)
POST/bancos/usuario/nodonacionVerificar si el disponente tiene proceso FINALIZADO o es primera vez
📁

receptor.js — Flujo del Receptor (CENSUR)

24 endpoints
MétodoEndpointDescripción
POST/censurCrear expediente de receptor y proceso de seguimiento
POST/receptor/documentosAgregar documentos al expediente del receptor
PUT/actualizar/receptor/documentos/:idActualizar documentos del receptor
POST/documentos/censurGuardar documentos y vincular a CENSUR
POST/cargar/documentos/censurSubir documentos a AWS S3
POST/ordenarpedido/censurCrear orden de pedido de hemocomponentes a sede
GET/productos/censurObtener stock de los 4 productos principales de BS
POST/receptoresListar receptores por sede
POST/informacion/receptor/pedidoDetalle de productos en tipo y cruce
POST/informacion/receptorInformación completa de un expediente CENSUR
POST/ordenar/tipeycruceCrear orden de tipo y cruce para receptor
POST/procesos/orden/censurVer procesos de seguimiento de una orden
POST/procesos/documentos/receptorVer proceso de documentos
POST/procesos/tipar/cruzarVer proceso de tipar y cruzar
POST/procesos/historico/documentoVer proceso de histórico
POST/procesos/entrega/productosVer proceso de entrega
GET/productos/materiales/servicios/censurListar productos con laboratorio CENSUR
PUT/actulizar/estado/pedido/censur/:idActualizar estatus de pedido
PUT/actulizar/estado/recpetor/censur/:idActualizar estatus del receptor
GET/ver/pedidos/detalle/:idVer detalle de un pedido y datos del paciente
GET/reacciones/transfucionalesListar receptores con reacciones transfusionales
PUT/agregar/documentos/banco/sangres/socios/:idActualizar datos del expediente CENSUR
POST/agregar/documentos/receptorGuardar documentos de reacciones del receptor
GET/ver/documentos/receptor/:idCensurObtener documentos de un receptor
📁

almacen.js — Almacén de Productos y Materiales

21 endpoints
MétodoEndpointDescripción
GET/minialmacenListar productos activos
GET/count/total/productosContar total de productos en catálogo
GET/actualizar/status/etiqueta/:idMarcar etiqueta como descargada
POST/agregar/productos/almacenCrear producto en catálogo admin
GET/ver/todos/productos/almacenListar productos activos tipo PRODUCTO
GET/ver/producto/almacen/por/id/:idObtener producto del catálogo por ID
PUT/actualizar/productos/costo/:idActualizar costo de un proveedor en producto
PUT/actualizar/productos/stock/almacen/:idActualizar unidad de stock por ID
GET/ver/productos/almacen/por/id/:idObtener unidades en stock de un producto
GET/ver/productos/salidasListar unidades marcadas para desecho
PUT/actualizar/productos/almacen/:idActualizar datos de producto en catálogo
POST/agregar/productos/almacen/stockIngresar N unidades al stock con QR automático
GET/vender/producto/stock/:idMarcar unidad como VENDIDA (vía QR)
POST/vender/producto/stock/:idMarcar unidad como VENDIDA (vía API)
GET/obtener/todos/produtos/stockListar todo el stock ordenado por caducidad
GET/desactivar/producto/almacen/:idDesactivar producto del catálogo
POST/agregar/nuevo/material/banco/sangreCrear nuevo material en catálogo
GET/ver/materiales/allListar todos los materiales
POST/buscar/nombre/productos/materialesBuscar por nombre en productos y materiales
GET/buscar/materiales/banco/sangre/:idBuscar material por ID
GET/materiales/banco/sangreListar materiales activos
GET/count/all/materiales/:tokenContar materiales activos
📁

laboratorio.js — Estudios de Laboratorio

16 endpoints
MétodoEndpointDescripción
POST/nuevo/estudio/bancoCrear tipo de estudio en el catálogo
GET/obtener/estudio/banco/:idObtener un tipo de estudio por ID
PUT/actualizar/estudiosActualizar valores de referencia de un estudio
PUT/proceso/laboratorioCambiar estatus del proceso de laboratorio
GET/todos/estudioListar todos los estudios del catálogo
POST/analisis/estudiosRegistrar biometría hemática y vincular al expediente
POST/analisis/grupoRegistrar grupo y RH, actualizar tipo de sangre del paciente
POST/analisis/serologiaRegistrar serología y generar hemocomponentes en stock con QR
POST/analisis/tipeycruceRegistrar tipo y cruce para un receptor (CENSUR)
POST/pedido/laboratorio/:idObtener pedido de laboratorio por ID
GET/obtener/banco/banco/:idObtener expediente bancario con datos del paciente
GET/hoja/servicio/laboratorio/:idHoja de servicio con paciente, laboratorio y flebotomía
POST/laboratorios/doctorListar laboratorios de un expediente con resultados
POST/laboratorios/servicios/procesoObtener estatus de estudios de un expediente
PUT/actualizar/analisis/estudiosActualizar resultados de biometría por el médico
POST/pedido/laboratorioListar laboratorios de un expediente
GET/labListar todos los expedientes bancarios
📁

flebotomia.js

4 endpoints
MétodoEndpointDescripción
GET/flebotomia/:idObtener datos del expediente con signosvitales y laboratorio
GET/flebotomia/prueba/algoJob: actualizar disponentes cuyo diferimiento terminó
GET/ver/lista/disponentes/disponiblesListar disponentes con estatus DISPONIBLE
POST/flebotomiaRegistrar extracción de sangre y vincular al expediente
📁

carritoCensur.js — Cobro a Receptores

5 endpoints
MétodoEndpointDescripción
POST/agergar/carrito/censurCrear venta con métodos de pago mixtos y folio automático
GET/ver/carritos/cesnurListar todas las ventas
GET/carrito/censur/unico/:idObtener una venta por ID
DELETE/eliminar/carrito/censur/:idEliminar una venta
PUT/actualizar/carrito/products/:idActualizar datos de una venta
📁

Módulos Complementarios

24 endpoints
ArchivoMétodoEndpointDescripción
autoexclusion.jsPOST/cuestionario/autoexclusionGuardar 13 preguntas de autoexclusión
signosvitales.jsPOST/agregar/signosvitalesRegistrar talla, peso, IMC, T/A
PUT/actualizar/religionActualizar religión del paciente
PUT/actualizar/tipoSangre/pacienteActualizar tipo de sangre
historiaclinica.jsPOST/agregar/historiaclinicaGuardar historia clínica (80+ campos)
hojaevolucion.jsPOST/agregar/hojadeevolucionRegistrar exploración física
disponente.jsPUT/agregar/lugardeorigenActualizar lugar de origen
PUT/agregar/productodeorigenActualizar tipo de donante
POST/ordenar/laboratoriosCrear orden de laboratorio
reaccionesderivadas.jsPOST/agregar/reaccionesderivadasRegistrar reacciones durante la donación
bitacoras.jsGET/bitacora/enfermeriaDisponentes en proceso enfermería
GET/bitacora/doctorDisponentes en proceso médico
GET/bitacora/flebotomiaDisponentes en proceso flebotomía
GET/bitacora/laboratorioDisponentes en proceso laboratorio
GET/bitacora/almacenTodos los disponentes con hemocomponentes
proveedores.jsPOST/registro/proveedorRegistrar nuevo proveedor
GET/ver/proveedoresListar proveedores activos
GET/ver/proveedor/por/id/:idObtener proveedor por ID
PUT/actualizar/proveedor/:idActualizar datos de proveedor
GET/desactivar/proveedor/por/id/:idDesactivar proveedor
sedes.jsPOST/crear/sede/bsRegistrar nueva sede
GET/listado/sedes/banco/sangre/Listar todas las sedes
GET/detalle/sede/:idDetalle de una sede
GET/ver/sedeSedes ordenadas por responsable
GET/ver/sedes/:idPedidos de una sede
jefeabanco.jsGET/gethistorico/:idHistórico completo de donaciones
routesSeguimientos.jsPOST/crear/nuevo/seguimientoCrear seguimiento entre departamentos
GET/ver/seguimientos/creadosListar todos los seguimientos
PUT/actualizar/seguimiento/:idActualizar seguimiento
DELETE/eliminar/seguimiento/:idEliminar seguimiento
serviciosBS.jsPOST/agregar/servicio/censurCrear servicio en catálogo CENSUR
GET/ver/servicios/censurListar todos los servicios
GET/ver/folio/serviciosObtener número de folio
GET/ver/servicio/banco/sangre/:idObtener servicio activo por ID
📌
Sección 04

Casos de Uso

CU-01

Registro y Proceso de Donación

👤 Enfermera · Médico · Flebotomista · Laboratorista
  1. 1 Paciente llega al banco de sangre
  2. 2 Enfermería crea el expediente POST /bancodesangre
  3. 3 Registra autoexclusión POST /cuestionario/autoexclusion
  4. 4 Toma signos vitales POST /agregar/signosvitales
  5. 5 Médico revisa historia clínica POST /agregar/historiaclinica
  6. 6 Médico realiza exploración física POST /agregar/hojadeevolucion
  7. 7 Médico aprueba candidato a donación
  8. 8 Técnico registra extracción POST /flebotomia
  9. 9 Laboratorio procesa biometría POST /analisis/estudios
  10. 10 Determina grupo y RH POST /analisis/grupo
  11. 11 Serología → genera hemocomponentes con QR POST /analisis/serologia
  12. 12 Proceso FINALIZADO, estatus DISPONIBLE
CU-02

Diferimiento de Disponente

👤 Médico
  1. 1 Médico evalúa al disponente
  2. 2 Decide diferir con motivo clínico POST /diferir/disponente
  3. 3 El disponente queda inactivo (DIFERIDO)
  4. 4 Se consulta histórico GET /historico/disponentes/diferidos
  5. 5 Job revisa fecha_termino y reactiva GET /flebotomia/prueba/algo
CU-03

Búsqueda por Tipo de Sangre

👤 Laboratorista · Jefe de Banco
  1. 1 Solicitar sangre compatible POST /disponentes/grupoyrh
  2. 2 Sistema filtra pacientes con ese tipo de sangre
  3. 3 Clasifica hemocomponentes: CE · CP · PL · PT
  4. 4 Ordena por fecha de caducidad PEPS
  5. 5 Retorna el más próximo a caducar primero
CU-04

Solicitud de Sangre — Receptor CENSUR

👤 Personal CENSUR · Laboratorista
  1. 1 Crear expediente receptor POST /censur
  2. 2 Cargar documentos médicos POST /receptor/documentos
  3. 3 Ordenar tipo y cruce POST /ordenar/tipeycruce
  4. 4 Laboratorio registra tipo y cruce POST /analisis/tipeycruce
  5. 5 Generar pedido a sede POST /ordenarpedido/censur
  6. 6 Registrar cobro mixto POST /agergar/carrito/censur
  7. 7 Marcar unidades VENDIDAS GET /vender/producto/stock/:id
CU-05

Gestión de Almacén

👤 Almacenista · Laboratorista
  1. 1 Serología genera unidades en stock con QR automático
  2. 2 Ver stock GET /obtener/todos/produtos/stock
  3. 3 Ordenado por fecha_caducidad ASC (PEPS)
  4. 4 Gestionar desechos GET /ver/productos/salidas
  5. 5 Ingresar materiales POST /agregar/nuevo/material/banco/sangre
CU-06

Reacciones Adversas

👤 Técnico de Flebotomía · Médico
  1. 1 Reacción ocurre durante la extracción
  2. 2 Técnico registra: vasovagal/venopunción/citrato POST /agregar/reaccionesderivadas
  3. 3 Médico registra tratamiento
  4. 4 Para receptor: actualizar estatus REACCIONES TRANSFUCIONALES
  5. 5 Listar casos GET /reacciones/transfucionales
CU-07

Gestión de Sedes Proveedoras

👤 Administrador
  1. 1 Registrar nueva sede POST /crear/sede/bs
  2. 2 Ver listado GET /listado/sedes/banco/sangre/
  3. 3 Ver pedidos de una sede GET /ver/sedes/:id
  4. 4 Gestionar proveedores de insumos POST /registro/proveedor
🔄
Sección 05

Diagramas de Flujo

Flujo Completo del Disponente

PACIENTE │ ▼ ┌─────────────────────────────────────────────────────────┐ │ ENFERMERÍA │ │ ├── POST /bancodesangre ← Crear expediente│ │ ├── POST /cuestionario/autoexclusion ← 13 preguntas │ │ └── POST /agregar/signosvitales ← Talla, peso,T/A│ └─────────────────────────────────────────────────────────┘ │ (proceso: DOCTOR) ▼ ┌─────────────────────────────────────────────────────────┐ │ MÉDICO │ │ ├── POST /agregar/historiaclinica ← 80+ campos │ │ ├── POST /agregar/hojadeevolucion ← Exploración │ │ └── Decisión: │ │ ├── APTO → PUT /agregar/procesobancodesangre │ │ └── NO APTO → POST /diferir/disponente │ └─────────────────────────────────────────────────────────┘ │ (proceso: FLEBOTOMIA) ▼ ┌─────────────────────────────────────────────────────────┐ │ TÉCNICO DE FLEBOTOMÍA │ │ └── POST /flebotomia ← Registrar │ └─────────────────────────────────────────────────────────┘ │ (proceso: LABORATORIO) ▼ ┌─────────────────────────────────────────────────────────┐ │ LABORATORISTA │ │ ├── POST /analisis/estudios ← Biometría │ │ ├── POST /analisis/grupo ← Grupo y RH │ │ └── POST /analisis/serologia ← Serología + QR │ └─────────────────────────────────────────────────────────┘ │ (estatus: DISPONIBLE) ▼ ┌─────────────────────────────────────────────────────────┐ │ ALMACÉN — Hemocomponentes disponibles │ │ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │ │ │ CE │ │ CP │ │ PL │ │ PT │ │ │ └────┘ └────┘ └────┘ └────┘ │ │ Eritrocitario Plaquetario Plasma Plaquetas │ └─────────────────────────────────────────────────────────┘

Flujo del Receptor (CENSUR)

RECEPTOR │ ▼ ┌─────────────────────────────────────────────────────────┐ │ PERSONAL CENSUR │ │ ├── POST /censur ← Expediente + procesos │ │ ├── POST /receptor/documentos ← Documentos médicos │ │ └── POST /ordenar/tipeycruce ← Solicitar T y C │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ LABORATORIO │ │ └── POST /analisis/tipeycruce ← Procesar tipo y cruce │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ PERSONAL CENSUR │ │ └── POST /ordenarpedido/censur ← Pedido a sede │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ SEDE BANCO DE SANGRE │ │ └── Procesa y entrega hemocomponentes │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ CAJA / COBRO │ │ ├── POST /agergar/carrito/censur ← Cobro mixto │ │ └── GET /vender/producto/stock/:id ← VENDIDA (QR) │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ MONITOREO │ │ └── GET /reacciones/transfucionales ← Vigilancia │ └─────────────────────────────────────────────────────────┘

Bitácoras por Área

ÁreaEndpointFiltra por
🏥 EnfermeríaGET /bitacora/enfermeriaproceso: 'enfermeria'
⚕️ MédicoGET /bitacora/doctorproceso: 'doctor'
🩸 FlebotomíaGET /bitacora/flebotomiaproceso: 'FLEBOTOMIA'
🔬 LaboratorioGET /bitacora/laboratorioproceso: 'DOCTOR' | 'SEROLOGIA'
📦 AlmacénGET /bitacora/almacenTodos (con almacen)
🕸️
Sección 06

Diagrama de Relaciones entre Modelos

┌──────────────────┐ │ Paciente │ │ (nuevoPaciente) │ └────────┬─────────┘ │ 1 : N ┌──────────────────┴──────────────────┐ │ │ ▼ ▼ ┌─────────────────┐ ┌──────────────────────┐ │ BancoSangre │ │ BancoSangreSocios │ │ (Disponente) │ │ (Receptor/CENSUR) │ └────────┬────────┘ └──────────┬───────────┘ │ │ ┌──────────┴──────────────────┐ ┌─────────────┴────────────────────┐ │ │ │ │ ▼ ▼ ▼ ▼ ┌───────────────┐ ┌───────────────────────┐ ┌──────────────────────────┐ │ modelCuestio │ │ LaboratorioBS │ │ BancoSangreSociosProcesos│ │ Exclusion │ │ (polimórfico) │ │ (4 etapas seguimiento) │ │ (13 preguntas)│ │ │ └──────────────────────────┘ └───────────────┘ └────────────┬───────────┘ ┌──────────────────────────┐ ┌───────────────┐ │ doble uso │ pedidosSedesBanco │ │ SignosVitalesBS│ ├──────────────── │ │ └───────────────┘ Disponente BS └──────────────────────────┘ ┌───────────────┐ (via laboratorio field) ┌──────────────────────────┐ │HistoriaClinica│ │ carritoCensur │ │ BS │ Receptor BS │ (cobro / venta) │ └───────────────┘ (via tiparycruzar) └──────────────────────────┘ ┌───────────────┐ │ hojaEvolucion │ │ BS │ └───────────────┘ ┌───────────────┐ ┌────────────────────────┐ │ Reacciones │ │ almacenProductos │ │ DerivadasBS │ │ (Catálogo admin) │ └───────────────┘ └──────────┬─────────────┘ ┌───────────────┐ │ 1 : N │ FlebotomiaBS │ ▼ └───────────────┘ ┌────────────────────────┐ ┌───────────────┐ │ productosAlmacenStock │ │ productos │ │ (Unidades en stock │ │ AlmacenStock │◄────────│ con código QR) │ │ (QR) │ └────────────────────────┘ └───────────────┘ Modelos de catálogo / soporte: ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ EstudiosLabBS │ │ Sedesbs │ │ proveedoresBS │ │ (tipos estudio) │ │ (sedes banco) │ │ (insumos) │ └──────────────────┘ └──────────────────┘ └──────────────────┘ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ DocumentosBS │ │ TipeyCruceBS │ │ cSeguimiento │ │ (archivos disp./ │ │ (tipo y cruce) │ │ (inter-dep.) │ │ receptor) │ │ │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ ┌──────────────────┐ │ serviciosCensur │ │ (catálogo CENSUR)│ └──────────────────┘
📊
Sección 07

Resumen de Endpoints por Módulo

receptor.js
24
almacen.js
21
bancosangre.js
18
laboratorio.js
16
carritoCensur.js
5
proveedores.js
5
sedes.js
5
bitacoras.js
5
flebotomia.js
4
routesSeguimientos.js
4
ServiciosBS/serviciosBS.js
4
signosvitales.js
3
disponente.js
3
historiaclinica.js
1
hojaevolucion.js
1
autoexclusion.js
1
reaccionesderivadas.js
1
jefeabanco.js
1
Total de endpoints documentados 122
🔧
Sección 08

Notas Técnicas

📲 Generación de Código QR

Al ingresar productos al stock y al finalizar serología, el sistema genera automáticamente un código QR por unidad apuntando a GET /vender/producto/stock/:id. Librería: qrcode.

🔢 Lote Unitario Secuencial

Cada unidad de stock recibe un lote_unitario calculado contando cuántos documentos del mismo producto existen en la colección antes de guardar.

🩸 Clasificación de Hemocomponentes

Los hemocomponentes se identifican por patrón regex en lote_unitario:

  • /CE/i → Concentrado Eritrocitario
  • /CP/i → Concentrado Plaquetario
  • /PL/i → Plasma
  • /PT/i → Plaquetas

💰 Precios Unificados

Al agregar nuevas unidades al stock, el sistema compara el precio con las unidades existentes del mismo producto y actualiza TODAS las unidades al precio más alto.

⏱️ Disponibilidad Automática

GET /flebotomia/prueba/algo actúa como job de revisión: compara fecha_termino con la fecha actual y regresa a DISPONIBLE a los disponentes diferidos cuyo tiempo expiró.

☁️ Almacenamiento en AWS S3

Los documentos del receptor se suben a AWS S3 mediante multer en el endpoint POST /cargar/documentos/censur. Las URLs resultantes se almacenan en el modelo DocumentosBS.

📐 Modelo Polimórfico LaboratorioBS

Un único modelo es usado para 4 contextos distintos. La diferenciación se hace por el campo de referencia presente: laboratorio para disponente, tiparycruzar para receptor.

📦 Ordenamiento PEPS

El stock de hemocomponentes se ordena por fecha_caducidad ASC garantizando que los productos más próximos a caducar se consuman primero (Primeras Entradas, Primeras Salidas).

🩸 Banco de Sangre — Documentación Técnica centro-horizonte-back  |  Generado: Junio 2026  |  122 endpoints · 18 módulos