El módulo vive en src/app/pages/BancoSangre/ y modela el flujo completo de un banco de sangre: desde el registro de un disponente (donador) hasta la liberación de productos sanguíneos y su entrega a un receptor (paciente que requiere transfusión), más la administración de sedes por la Jefatura de Banco de Sangre (JefeBS).
Todas las rutas son hijas planas de PageComponent (page.routes.ts, líneas 595-653, 801, 828-829, 875). El identificador :id que viaja en casi todas las rutas es el _id del registro de banco de sangre del paciente (referido en el código como idCensur / idbancosangre / idBanco), no el _id del paciente.
🩸 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
Distribución de componentes por carpeta / rol
| Carpeta | Rol / actor | # Componentes |
rolRecepcion | Recepción (registro, disponentes, receptores, almacén) | 14 |
rolLaboratorio | Laboratorio (estudios disponentes + tipar/cruzar receptores) | 8 |
rolJefeBS | Jefatura Banco de Sangre (sedes) | 7 |
rolEnfermeria | Enfermería (signos vitales) | 2 |
rolFlebotomia | Flebotomía (extracción) | 3 |
rolDoctor | Doctor (historia clínica / evolución) | 3 |
Almacen | Almacén (salidas/desechos) | 1 |
Servicios backend principales (frontend)
| Servicio | Ubicación | Uso |
BancoService | src/app/services/bancodeSangre/banco.service.ts | Servicio principal del módulo, usado por la mayoría de los componentes del flujo Disponente |
LaboratorioService | src/app/services/bancodeSangre/ | Estudios de laboratorio (biometría, grupo y RH, serología, tipar/cruzar) |
FlebotomiaService | src/app/services/bancodeSangre/ | Registro de extracciones |
SedesService | src/app/services/bancodeSangre/ | Sedes de Banco de Sangre (poco usado dentro del módulo) |
PedidosSedesService | src/app/services/bancodeSangre/ | Pedidos a sedes (poco usado dentro del módulo) |
BancodesangreService | src/app/services/bancodeSangre/ | Usado por el flujo CENSUR alterno (receptor.js): documentos, carrito, reacciones transfusionales |
PacientesService | src/app/services/pacientes/ | Listado/búsqueda de pacientes, usado como puente entre módulos |
ℹ️
Modelo de datos en una línea: un Paciente puede ser disponente y/o receptor. Cada proceso de donación genera un registro BancoSangre (1:1 por proceso, campo idbancosangre / idCensur) y cada solicitud de transfusión genera un registro BancoSangreSocios. Ver Modelos de Datos.
⚠️
Duplicidad de flujo CENSUR: existen dos implementaciones paralelas del flujo de receptor: una dentro de BancoSangre/rolRecepcion (receptores → hojaservicios/receptor/:id) y otra fuera del módulo (banco/sangre → ReceptoresComponent en src/app/pages/receptores/, documentos/paciente/:id, productos, reacciones/adversas/:id, reacciones/transfucionales). Ver detalle en Flujo Receptor / CENSUR y Estado del Código.
🩸 Flujo del DISPONENTE (donador)
| # | Componente | Ruta | Qué hace |
| 1 | BitacoraDisponentesComponent | bitacora/disponentes | Lista de pacientes/disponentes (Recepción), buscador, alta y acceso a ficha |
| 2 | RegistroDisponentesComponent | registro/disponentes | Alta de un nuevo disponente (envuelve app-registrar-disponente) |
| 3 | VerDisponenteComponent | ver/disponente/:id | Ficha del paciente; selecciona servicio "Donaciones" + sede de origen; valida si puede donar |
| 4 | AutoexclusionComponent | autoexclusion/:id | Cuestionario de 12 preguntas SI/NO; decide DIFERIDO o pasa a Enfermería |
| 5 | DisponentesBitacoraComponent (Enfermería) | disponentes/bitacora | Lista de disponentes en etapa Enfermería |
| 6 | FichaDisponenteComponent | ficha/disponente/:id | Captura signos vitales; decide DIFERIDO o pasa a Doctor + pide laboratorios |
| 7 | BitacoraConsultaDisponentesComponent (Doctor) | bitacora/consulta/disponentes | Lista de disponentes en espera de consulta médica |
| 8 | HistoriaClinicaComponent | historia/clinica/doctor/:id | Cuestionario extenso de historia clínica por secciones |
| 9 | HojaEvolucionDisponenteComponent | hoja/evolucion/disponente/:id | Exploración física + diagnóstico final; decide APTO→Flebotomía o DIFERIDO |
| 10 | BitacoraFlebotomiaComponent | bitacora/flebotomia | Lista de disponentes listos para extracción |
| 11 | DocumentosDonanteFlebotomiaComponent | documentos/flebotomia/:id | Captura datos de extracción + sube consentimientos firmados; decide pasa a Serología o autoexclusión |
| 12 | BitacoraLaboratorioComponent | bitacora/laboratorios/disponentes | Lista de disponentes con procesos de laboratorio |
| 13 | HojaServiciosLabDisponenteComponent | hoja/servicios/laboratorio/disponentes/:id | "Hub" que muestra estudios pendientes: Grupo y RH/BHC, Serología |
| 14 | BiometriaLabDisponenteComponent (fuera de BancoSangre) | grupo/rh/biometria/hematica/completa/:id | Captura Biometría Hemática Completa + Grupo y RH |
| 15 | SerologiaLabDisponenteComponent | serologia/laboratorio/disponente/:id | Captura resultados serológicos; decide LIBERADO (genera etiquetas QR) o DIFERIDO permanente |
| 16 | ReaccionesDerivadasComponent ⚠️ incompleto | reacciones/adversas | Formulario de reacciones adversas a la donación — sin persistencia |
| 17 | BitacoraSalidasComponent (Almacén) | bitacora/salidas/almacen | Lista de productos del almacén; permite marcar como DESECHADO |
| — | BitacoraDiferidosComponent | bitacora/diferidos | Vista de solo lectura de todos los disponentes diferidos |
| — | HistoricoDisponenteBSComponent | historico/disponente/bs/:id | Histórico de donaciones de un disponente (desde ver-disponente) |
| — | BitacoraAlmacenComponent ⚠️ placeholder | bitacora/almacen | Tabla hardcodeada, sin lógica |
🏥 Flujo del RECEPTOR (transfusión, dentro de BancoSangre)
| # | Componente | Ruta | Qué hace |
| 1 | ReceptoresComponent | receptores | Lista de pedidos/hojas de servicio de receptores |
| 2 | HojaServicioReceptorComponent | hojaservicios/receptor/:id | "Hub" del pedido: estado de 4 subprocesos (documentos, tipar/cruzar, histórico, entrega) |
| 3 | DocumentosReceptorComponent | documentos/receptor | Sube/consulta documentos médicos del receptor |
| 4 | TiparCruzarComponent (rolLaboratorio) | tiparcruza | Prueba de compatibilidad ABO/Rh + cruce con disponentes/bolsas guardado deshabilitado |
| 5 | EntregaProductosComponent | productos/receptor | Catálogo de hemoderivados → carrito de compra |
| 6 | OrdenCompraComponent | orden/productos | Checkout/pago (envuelve app-pagos-censur) |
| 7 | DocumentosReceptorFirmadosComponent | agregar/docuemtos/recpetor/firmados | Sube documentos/consentimientos firmados tras el pago |
| — | EntregaProductosSanguineosComponent | entrega/productos/sanguineos | Genera PDFs de etiqueta de urgencia + carta responsiva (sin backend) |
🏥 Flujo CENSUR alterno (fuera de BancoSangre)
Conjunto de rutas planas, hijas también de PageComponent, que cubren un recorrido equivalente para el receptor pero con componentes y carpetas distintas:
| Ruta | Componente | Ubicación | Qué hace |
banco/sangre | ReceptoresComponent | src/app/pages/receptores/ | Lista pacientes/receptores de la sede actual (localStorage.cede) |
documentos/paciente/:id | DocspacienteComponent | src/app/pages/docspaciente/ | Sube los 4 documentos obligatorios del receptor; genera idCensur |
productos | ProductosComponent → PedidosComponent | censur-productos/productos/ → components/censur-pedido/pedidos/ | Catálogo + carrito (CarritoCensur); genera tipo y cruce + orden de pedido |
reacciones/adversas/:id | ReaccionesAdversasComponent | src/app/pages/reacciones-adversas/ | Registro post-transfusión; marca receptor como FINALIZADO |
reacciones/transfucionales | ReaccionesTransfucionalesComponent | src/app/pages/admin/reacciones-transfucionales/ | Bitácora de todas las reacciones transfusionales registradas |
🏢 Jefatura Banco de Sangre / Sedes
| Componente | Ruta | Estado |
SedesbsComponent | listado/sedes/banco/sangre | ✅ Funcional — lista sedes |
DetalleSedeComponent | detalle/sede/:id | ⚠️ Parcial — datos de sede OK, tabla de pedidos hardcodeada |
AgregarSedeComponent | agregar/sede/bs | ⚠️ Parcial — formulario completo pero el guardado al backend está comentado |
FISedeComponent | ficha/identificacion/sede | ⚠️ Placeholder vacío |
BitacoraNoAptosODiferidosComponent | bitacora/no-aptos | ⚠️ Placeholder, tabla estática |
HojaServicioReceptorBSComponent | hoja/servicio/receptor | ⚠️ Placeholder, tabla estática |
OrdenreceptoresComponent | orden/servicio/receptores | ⚠️ Placeholder, tabla estática |
🧪 Otros / catálogo
| Componente | Ruta | Estado |
NuevoEstudioLabComponent | nuevo/estudios/lab | ✅ Funcional — alta de tipos de estudio de laboratorio |
HistoricoEstudiosDisponenteComponent | historico/estudios/disponente | ⚠️ Placeholder estático |
BitacoraPedidosComponent | bitacora/hoja/de/servicios | ⚠️ Parcial — datos reales del paciente pero columnas de estatus hardcodeadas |
HojaServiciosLabsComponent (hoja-servicios) | sin ruta | ❌ Código muerto — no referenciado en ninguna parte |
Servicios y dependencias compartidas (flujo CENSUR alterno)
| Elemento | Ubicación | Usado por |
PacientesService | src/app/services/pacientes/ | ReceptoresComponent, DocspacienteComponent |
BancodesangreService | src/app/services/bancodeSangre/ | DocspacienteComponent, PedidosComponent, ReaccionesAdversasComponent, ReaccionesTransfucionalesComponent |
ficha-info-user | components/ficha-identificacion/ficha-info-user/ | DocspacienteComponent, ReaccionesAdversasComponent |
app-titulos | components/ficha-identificacion/titulos/ | ReceptoresComponent, ReaccionesTransfucionalesComponent |
app-pedidos (PedidosComponent) | components/censur-pedido/pedidos/ | ProductosComponent |
CarritoCensur | clases/carrito-censur/censur-carrito | PedidosComponent |
buscarReceptor | helpers/filterReceptor.ts | ReaccionesTransfucionalesComponent |
NgxSpinnerService | librería ngx-spinner | todos los componentes |
sweetalert / sweetalert2 | librerías externas | DocspacienteComponent, PedidosComponent |
El backend opera con dos tablas principales que actúan como "expediente": BancoSangre → expediente del disponente (donador) y BancoSangreSocios → expediente del receptor (CENSUR). El resto de los modelos cuelgan de estas dos por referencia.
1. BancoSangre — Expediente del Disponente
models/bancoDeSangre/modelBancoSangre.js
| Campo | Tipo | Referencia | Descripción |
paciente | ObjectId | Paciente | Paciente/donador |
cuestionarioautoexclusion | ObjectId | modelCuestioExclusion | Cuestionario de autoexclusión |
signosvitales | ObjectId | SignosVitalesBS | Talla, peso, IMC, T/A |
historiaclinica | ObjectId | HistoriaClinicaBS | Historia clínica completa |
hojaevolucion | ObjectId | hojaEvolucionBS | Exploración física del médico |
reaccionesderivadas | ObjectId | ReaccionesDerivadasBS | Reacciones durante la donación |
flebotomia | ObjectId | FlebotomiaBS | Datos de la extracción de sangre |
laboratorio | [ObjectId] | LaboratorioBS | Estudios de laboratorio |
almacen | [ObjectId] | productosAlmacenStock | Hemocomponentes generados |
proceso | String | — | NUEVO · ENFERMERIA · DOCTOR · FLEBOTOMIA · SEROLOGIA · FINALIZADO |
estatus | String | — | DISPONIBLE · DIFERIDO · EN PROCESO |
motivo | String | — | Motivo de diferimiento |
tiempo_rechazo | String | — | Fecha de diferimiento |
fecha_termino | Date | — | Fecha en que termina el periodo de diferimiento |
2. BancoSangreSocios — Expediente del Receptor (CENSUR)
models/bancoDeSangre/modelBancoSangreTercero.js
| Campo | Tipo | Referencia | Descripción |
paciente | ObjectId | Paciente | Paciente receptor |
receptor | ObjectId | DocumentosBS | Documentos del receptor |
pedido | ObjectId | pedidosSedesBanco | Orden de pedido de hemocomponentes |
tiparycruzar | [ObjectId] | LaboratorioBS | Estudios de tipo y cruce |
proceso_censur | ObjectId | BancoSangreSociosProcesos | Seguimiento de procesos (4 etapas) |
ventaCensur | [ObjectId] | carritoCensur | Venta/cobro de productos |
tipo_producto | String | — | Tipo de producto solicitado |
estatus | String | — | RECEPTOR · REACCIONES TRANSFUCIONALES |
huboReaccionAdversa | String | — | SI / NO |
Modelos secundarios
| Campo | Descripción |
autoexclusion0 … autoexclusion12 | 13 preguntas SI/NO de autoexclusión |
bancodesangre | Ref a BancoSangre |
| Campo | Tipo | Descripción |
talla | Number | Altura en cm |
peso | Number | Peso en kg |
imc | Number | Índice de masa corporal |
temp | Number | Temperatura |
sistolica | Number | Presión sistólica |
diastolica | Number | Presión diastólica |
huellasMultiples | String | Huellas venopunción múltiples |
huellasRecientes | String | Huellas venopunción recientes |
| Campo | Descripción |
bancodesangre | Ref a BancoSangre |
disponente | Ref a DocumentosBS (archivos) |
tipo_de_sangreado | Tipo de extracción |
tipo_de_donador | Altruista, reposición, etc. |
volumen | Volumen extraído |
tiempo | Tiempo de extracción |
| Uso | Campo ref |
| Biometría Hemática | laboratorio → BancoSangre |
| Grupo y RH | laboratorio → BancoSangre |
| Serología | laboratorio → BancoSangre |
| Tipo y Cruce | tiparycruzar → BancoSangreSocios |
Otros campos: obtenidos (resultados), pedido (estudios pedidos), metodo, quimico/tecnico/cedula (responsable), proceso (EN PROCESO · FINALIZADO).
| Campo | Descripción |
piel, mucosas, torax | Hallazgos por aparato |
abdomen, higado, bazo | Hallazgos por aparato |
ganglios | Hallazgos ganglionares |
candidato_donacion | Aprobación médica (SI/NO) |
cie10 | Diagnóstico CIE-10 |
| Campo | Descripción |
| Reacción vasovagal | Niveles: leve, moderado, severo |
| Reacción de venopunción | Niveles: leve, moderado, severo |
| Toxicidad por citrato | Niveles: leve, moderado, severo |
| Etapa | Estados |
| 1. Documentos Médicos | EN ESPERA · COMPLETADO |
| 2. Tipar y Cruzar | EN ESPERA · COMPLETADO |
| 3. Consulta de Histórico | EN ESPERA · COMPLETADO |
| 4. Entrega de Productos | EN ESPERA · COMPLETADO |
| Campo | Descripción |
pedido | Ref a BancoSangreSocios |
vendedor | Quien genera el pedido |
estudios | Estudios solicitados |
sede_banco | Sede que surtirá |
totalCompra | Costo total |
| Grupo de datos | Contenido |
| Datos fiscales | Razón social, RFC, etc. |
| Datos de contacto | Responsable, teléfono, correo |
| Dirección | Domicilio de la sede |
| Credenciales | Acceso de cada sede proveedora |
5. HistoriaClinicaBS — Historia Clínica
models/bancoDeSangre/modelHistoriaClinica.js
Más de 80 campos cubriendo todas las áreas clínicas relevantes para la donación de sangre:
| Área | Contenido |
| Infecciosos | Hepatitis, VIH, COVID, paludismo, Chagas, sífilis, brucelosis |
| Quirúrgicos / Médicos | Cirugías, transfusiones previas, enfermedades crónicas |
| Medicamentos | Anticoagulantes, retinoides, hormonas, antibióticos |
| Conductas de riesgo | Tatuajes recientes, perforaciones, uso de drogas |
| Ginecobstétricos | Embarazo, lactancia, menstruación, fecha última regla |
13. Modelos Auxiliares
| Modelo | Archivo | Descripción |
almacenProductos | models/warehouse/modelProductos.js | Catálogo admin de productos/materiales |
productosAlmacenStock | models/almacen/stock/modelProductosStock.js | Unidades individuales en stock (con QR) |
carritoCensur | models/almacen/stock/carritoCensur.js | Cobro/venta de productos a receptores |
DocumentosBS | models/bancoDeSangre/modelDocumentos.js | Archivos digitales del disponente/receptor |
EstudiosLabBS | models/bancoDeSangre/modelEstudios.js | Catálogo de estudios de laboratorio |
TipeyCruceBS | models/bancoDeSangre/modelTipeyCruce.js | Resultados de tipo y cruce |
proveedoresBS | models/almacen/proveedores/porveedorModel.js | Proveedores de insumos |
cSeguimiento | models/almacen/modelSeguimiento.js | Seguimientos interdepartamentales |
serviciosCensur | models/almacen/modelServicios.js | Catálogo de servicios de CENSUR |
Diagrama de relaciones entre modelos
┌──────────────┐
│ Paciente │
│ (nuevoPaciente) │
└──────┬───────┘
│ 1:N
┌──────────────────┴──────────────────┐
│ │
▼ ▼
┌───────────────┐ ┌───────────────────┐
│ BancoSangre │ │ BancoSangreSocios │
│ (Disponente) │ │ (Receptor/CENSUR) │
└───────┬───────┘ └─────────┬──────────┘
│ │
┌────────┼─────────────────────┐ ┌──────────┼─────────────────┐
▼ ▼ ▼ ▼ ▼ ▼
modelCuestio SignosVitalesBS LaboratorioBS BancoSangreSocios pedidosSedesBanco carritoCensur
Exclusion HistoriaClinicaBS (polimórfico, Procesos (sede_banco, (cobro/venta)
(13 preguntas) hojaEvolucionBS doble uso: (4 etapas) estudios)
ReaccionesDerivadasBS laboratorio→BancoSangre
FlebotomiaBS tiparycruzar→BancoSangreSocios)
│
▼
productosAlmacenStock ──1:N──► almacenProductos
(Hemocomponentes, QR) (Catálogo admin)
Catálogo / soporte: EstudiosLabBS · Sedesbs · proveedoresBS
DocumentosBS · TipeyCruceBS · cSeguimiento · serviciosCensur
122 endpoints distribuidos en 18 archivos de rutas del backend (centro-horizonte-back).
| Método | Endpoint | Descripción |
| POST | /bancodesangre | Crear nuevo expediente de banco de sangre para un paciente |
| PUT | /agregar/procesobancodesangre | Actualizar proceso, estatus, motivo y fecha_termino |
| GET | /getdisponente/:id | Obtener expediente completo por ID de banco de sangre |
| GET | /getdisponente/por/paciente/:id | Obtener expediente completo por ID de paciente |
| GET | /disponentes | Listar todos los disponentes con todos sus datos |
| POST | /diferir/disponente | Marcar disponente como DIFERIDO con motivo |
| GET | /orden/receptores | Listar órdenes con estatus RECEPTOR |
| GET | /orden/receptor/:id | Obtener una orden de receptor por ID |
| GET | /disponentes/contar | Conteo total de expedientes |
| POST | /disponente/visitas | Contar donaciones FINALIZADAS de un paciente |
| POST | /getdisponente/visitas | Contar todas las visitas de un paciente |
| POST | /disponentes/grupoyrh | Buscar disponentes por tipo de sangre, agrupados por hemocomponente |
| POST | /disponentes/diferidos | Listar diferidos de un paciente |
| GET | /historico/disponentes/diferidos | Histórico global de diferidos |
| POST | /historico/banco/disponente | Histórico de donaciones de un paciente con flebotomía |
| GET | /historico/disponente/bs/:id | Detalle de un expediente histórico |
| POST | /verificar/disponente | Verificar si un paciente tiene expedientes previos |
| GET | /bancos | Listar todos los expedientes (sin populate) |
| POST | /bancos/usuario/nodonacion | Verificar si el disponente tiene proceso FINALIZADO o es primera vez |
| Método | Endpoint | Descripción |
| POST | /censur | Crear expediente de receptor y proceso de seguimiento |
| POST | /receptor/documentos | Agregar documentos al expediente del receptor |
| PUT | /actualizar/receptor/documentos/:id | Actualizar documentos del receptor |
| POST | /documentos/censur | Guardar documentos y vincular a CENSUR |
| POST | /cargar/documentos/censur | Subir documentos a AWS S3 |
| POST | /ordenarpedido/censur | Crear orden de pedido de hemocomponentes a sede |
| GET | /productos/censur | Obtener stock de los 4 productos principales de BS |
| POST | /receptores | Listar receptores por sede |
| POST | /informacion/receptor/pedido | Detalle de productos en tipo y cruce |
| POST | /informacion/receptor | Información completa de un expediente CENSUR |
| POST | /ordenar/tipeycruce | Crear orden de tipo y cruce para receptor |
| POST | /procesos/orden/censur | Ver procesos de seguimiento de una orden |
| POST | /procesos/documentos/receptor | Ver proceso de documentos |
| POST | /procesos/tipar/cruzar | Ver proceso de tipar y cruzar |
| POST | /procesos/historico/documento | Ver proceso de histórico |
| POST | /procesos/entrega/productos | Ver proceso de entrega |
| GET | /productos/materiales/servicios/censur | Listar productos con laboratorio CENSUR |
| PUT | /actulizar/estado/pedido/censur/:id | Actualizar estatus de pedido |
| PUT | /actulizar/estado/recpetor/censur/:id | Actualizar estatus del receptor |
| GET | /ver/pedidos/detalle/:id | Ver detalle de un pedido y datos del paciente |
| GET | /reacciones/transfucionales | Listar receptores con reacciones transfusionales |
| PUT | /agregar/documentos/banco/sangres/socios/:id | Actualizar datos del expediente CENSUR |
| POST | /agregar/documentos/receptor | Guardar documentos de reacciones del receptor |
| GET | /ver/documentos/receptor/:idCensur | Obtener documentos de un receptor |
| Método | Endpoint | Descripción |
| GET | /minialmacen | Listar productos activos |
| GET | /count/total/productos | Contar total de productos en catálogo |
| GET | /actualizar/status/etiqueta/:id | Marcar etiqueta como descargada |
| POST | /agregar/productos/almacen | Crear producto en catálogo admin |
| GET | /ver/todos/productos/almacen | Listar productos activos tipo PRODUCTO |
| GET | /ver/producto/almacen/por/id/:id | Obtener producto del catálogo por ID |
| PUT | /actualizar/productos/costo/:id | Actualizar costo de un proveedor en producto |
| PUT | /actualizar/productos/stock/almacen/:id | Actualizar unidad de stock por ID |
| GET | /ver/productos/almacen/por/id/:id | Obtener unidades en stock de un producto |
| GET | /ver/productos/salidas | Listar unidades marcadas para desecho |
| PUT | /actualizar/productos/almacen/:id | Actualizar datos de producto en catálogo |
| POST | /agregar/productos/almacen/stock | Ingresar N unidades al stock con QR automático |
| GET | /vender/producto/stock/:id | Marcar unidad como VENDIDA (vía QR) |
| POST | /vender/producto/stock/:id | Marcar unidad como VENDIDA (vía API) |
| GET | /obtener/todos/produtos/stock | Listar todo el stock ordenado por caducidad |
| GET | /desactivar/producto/almacen/:id | Desactivar producto del catálogo |
| POST | /agregar/nuevo/material/banco/sangre | Crear nuevo material en catálogo |
| GET | /ver/materiales/all | Listar todos los materiales |
| POST | /buscar/nombre/productos/materiales | Buscar por nombre en productos y materiales |
| GET | /buscar/materiales/banco/sangre/:id | Buscar material por ID |
| GET | /materiales/banco/sangre | Listar materiales activos |
| GET | /count/all/materiales/:token | Contar materiales activos |
| Método | Endpoint | Descripción |
| POST | /nuevo/estudio/banco | Crear tipo de estudio en el catálogo |
| GET | /obtener/estudio/banco/:id | Obtener un tipo de estudio por ID |
| PUT | /actualizar/estudios | Actualizar valores de referencia de un estudio |
| PUT | /proceso/laboratorio | Cambiar estatus del proceso de laboratorio |
| GET | /todos/estudio | Listar todos los estudios del catálogo |
| POST | /analisis/estudios | Registrar biometría hemática y vincular al expediente |
| POST | /analisis/grupo | Registrar grupo y RH, actualizar tipo de sangre del paciente |
| POST | /analisis/serologia | Registrar serología y generar hemocomponentes en stock con QR |
| POST | /analisis/tipeycruce | Registrar tipo y cruce para un receptor (CENSUR) |
| POST | /pedido/laboratorio/:id | Obtener pedido de laboratorio por ID |
| GET | /obtener/banco/banco/:id | Obtener expediente bancario con datos del paciente |
| GET | /hoja/servicio/laboratorio/:id | Hoja de servicio con paciente, laboratorio y flebotomía |
| POST | /laboratorios/doctor | Listar laboratorios de un expediente con resultados |
| POST | /laboratorios/servicios/proceso | Obtener estatus de estudios de un expediente |
| PUT | /actualizar/analisis/estudios | Actualizar resultados de biometría por el médico |
| POST | /pedido/laboratorio | Listar laboratorios de un expediente |
| GET | /lab | Listar todos los expedientes bancarios |
Otros módulos
| Método | Endpoint | Descripción |
| GET | /flebotomia/:id | Obtener datos del expediente con signosvitales y laboratorio |
| GET | /flebotomia/prueba/algo | Actualizar disponentes cuyo tiempo de diferimiento terminó |
| GET | /ver/lista/disponentes/disponibles | Listar disponentes con estatus DISPONIBLE |
| POST | /flebotomia | Registrar extracción de sangre, crear documentos y vincular al expediente |
| Método | Endpoint | Descripción |
| GET | /bitacora/enfermeria | Disponentes en proceso de enfermería |
| GET | /bitacora/doctor | Disponentes en proceso de médico |
| GET | /bitacora/flebotomia | Disponentes en proceso de flebotomía |
| GET | /bitacora/laboratorio | Disponentes en proceso de laboratorio o serología |
| GET | /bitacora/almacen | Todos los disponentes con sus hemocomponentes |
| Método | Endpoint | Descripción |
| POST | /agregar/signosvitales | Registrar talla, peso, IMC, T/A y huellas de venopunción |
| PUT | /actualizar/religion | Actualizar religión del paciente |
| PUT | /actualizar/tipoSangre/paciente | Actualizar tipo de sangre del paciente |
| Método | Endpoint | Descripción |
| PUT | /agregar/lugardeorigen | Actualizar lugar de origen del paciente |
| PUT | /agregar/productodeorigen | Actualizar tipo de donante |
| POST | /ordenar/laboratorios | Crear orden de laboratorio y vincular al expediente |
| Método | Endpoint | Descripción |
| POST | /agergar/carrito/censur | Crear venta con métodos de pago mixtos y folio automático |
| GET | /ver/carritos/cesnur | Listar todas las ventas |
| GET | /carrito/censur/unico/:id | Obtener una venta por ID |
| DELETE | /eliminar/carrito/censur/:id | Eliminar una venta |
| PUT | /actualizar/carrito/products/:id | Actualizar datos de una venta |
| Método | Endpoint | Descripción |
| POST | /registro/proveedor | Registrar nuevo proveedor |
| GET | /ver/proveedores | Listar proveedores activos |
| GET | /ver/proveedor/por/id/:id | Obtener proveedor por ID |
| PUT | /actualizar/proveedor/:id | Actualizar datos de proveedor |
| GET | /desactivar/proveedor/por/id/:id | Desactivar proveedor |
| Método | Endpoint | Descripción |
| POST | /crear/sede/bs | Registrar nueva sede proveedora |
| GET | /listado/sedes/banco/sangre/ | Listar todas las sedes |
| GET | /detalle/sede/:id | Detalle de una sede |
| GET | /ver/sede | Listar sedes ordenadas por responsable |
| GET | /ver/sedes/:id | Ver pedidos de una sede por carrito |
| Método | Endpoint | Descripción |
| POST | /crear/nuevo/seguimiento | Crear seguimiento entre departamentos |
| GET | /ver/seguimientos/creados | Listar todos los seguimientos |
| PUT | /actualizar/seguimiento/:id | Actualizar un seguimiento |
| DELETE | /eliminar/seguimiento/:id | Eliminar un seguimiento |
| Método | Endpoint | Descripción |
| POST | /agregar/servicio/censur | Crear nuevo servicio en catálogo CENSUR |
| GET | /ver/servicios/censur | Listar todos los servicios |
| GET | /ver/folio/servicios | Obtener número de folio (contador) |
| GET | /ver/servicio/banco/sangre/:id | Obtener servicio activo por ID |
| POST | /cuestionario/autoexclusion | Guardar las 13 preguntas de autoexclusión y vincular al expediente |
| POST | /agregar/historiaclinica | Guardar historia clínica completa (80+ campos) y vincular al expediente |
| POST | /agregar/hojadeevolucion | Registrar exploración física del médico y candidatura a donación |
| POST | /agregar/reaccionesderivadas | Registrar reacciones vasovagales, venopunción o toxicidad durante la donación |
| GET | /gethistorico/:id | Histórico completo de donaciones de un paciente |
Resumen de endpoints por módulo
ServiciosBS/serviciosBS.js4
Total de endpoints documentados
122
Vista por capas (rol → endpoint)
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 clínicos
├── POST /agregar/hojadeevolucion ← Exploración física
└── Decisión:
├── APTO → PUT /agregar/procesobancodesangre (FLEBOTOMIA)
└── NO APTO → POST /diferir/disponente (DIFERIDO + tiempo_rechazo)
│
▼ (proceso: FLEBOTOMIA)
[TÉCNICO DE FLEBOTOMÍA]
└── POST /flebotomia ← Registrar extracción
│
▼ (proceso: LABORATORIO)
[LABORATORISTA]
├── POST /analisis/estudios ← Biometría hemática
├── POST /analisis/grupo ← Grupo y RH → actualiza tipoDeSangre del paciente
└── POST /analisis/serologia ← Serología + genera hemocomponentes en STOCK con QR
│
▼ (estatus: DISPONIBLE)
[ALMACÉN]
└── Hemocomponentes disponibles para surtir a receptores
CE → Concentrado Eritrocitario
CP → Concentrado Plaquetario
PL → Plasma
PT → Plaquetas
Vista por pantalla (componente → ruta)
bitacora/disponentes (Lista de pacientes)
│ AGREGAR
▼
registro/disponentes (Alta disponente)
bitacora/disponentes
│ ver paciente
▼
ver/disponente/:id (Selecciona "Donaciones" + sede de origen)
├─ validacionDonacion = NUEVO/DISPONIBLE ──► autoexclusion/:id (12 preguntas)
├─ proceso = FINALIZADO ──────────────────► ❌ NO APTO (fin)
└─ tiene donaciones previas ──────────────► historico/disponente/bs/:id
autoexclusion/:id
├─ alguna respuesta = riesgo ─► 🚫 DIFERIDO (fin)
└─ todo OK → proceso=enfermeria ─► disponentes/bitacora (Enfermería)
disponentes/bitacora
▼
ficha/disponente/:id (Signos vitales)
├─ fuera de rango ─► 🚫 DIFERIDO
└─ OK → proceso=doctor + pide laboratorios ─► bitacora/consulta/disponentes (Doctor)
bitacora/consulta/disponentes
▼
historia/clinica/doctor/:id (Historia clínica por secciones)
├─ sección de riesgo ─► 🚫 DIFERIDO
└─ OK ─► hoja/evolucion/disponente/:id (Exploración física + diagnóstico)
hoja/evolucion/disponente/:id
├─ candidato_donacion = NO ─► 🚫 DIFERIDO
└─ APTO → proceso=FLEBOTOMIA ─► bitacora/flebotomia
bitacora/flebotomia
▼
documentos/flebotomia/:id (Datos de extracción + consentimiento firmado)
├─ no firma ─► 🚫 Autoexclusión / diferido
└─ firma → proceso=serologia, imprime etiqueta "NO LIBERADO" ─► bitacora/laboratorios/disponentes
bitacora/laboratorios/disponentes
▼
hoja/servicios/laboratorio/disponentes/:id (Hub de estudios pendientes)
├─► grupo/rh/biometria/hematica/completa/:id (Biometría + Grupo y RH)
└─► serologia/laboratorio/disponente/:id (Serología, 7 pruebas)
├─ alguna prueba REACTIVA ─────────► 🚫 DIFERIDO 100 años (producto se desecha)
└─ 7/7 NO REACTIVO, proceso=FINALIZADO ─► ✅ LIBERADO (etiqueta QR → inventario)
│
▼
bitacora/salidas/almacen (Almacén: salida/desecho)
⚠️
reacciones/adversas (ReaccionesDerivadasComponent) debería poder dispararse en cualquier punto durante/después de la flebotomía, pero hoy no está conectado al backend (solo UI, enviar() y getDisponente() comentados).
ℹ️
Cálculo del diferimiento: en cada punto de control (autoexclusión, signos vitales, historia clínica, evolución/diagnóstico, serología) que detecta riesgo se calcula un motivo y tiempo_rechazo. Si hay varias causas, fechaMayor toma el plazo más largo entre todas, y se marca estatus: 'DIFERIDO'. Una donación LIBERADA también difiere automáticamente al disponente 3 meses (regla estándar post-donación).
Bitácoras por área
| Área | Endpoint | Filtra por |
| Enfermería | GET /bitacora/enfermeria | proceso: 'enfermeria' |
| Médico | GET /bitacora/doctor | proceso: 'doctor' |
| Flebotomía | GET /bitacora/flebotomia | proceso: 'FLEBOTOMIA' |
| Laboratorio | GET /bitacora/laboratorio | proceso: 'DOCTOR' | 'SEROLOGIA' |
| Almacén | GET /bitacora/almacen | todos (con almacén) |
Como se documenta en Arquitectura Frontend, este flujo existe en dos implementaciones: la del módulo BancoSangre/rolRecepcion (hub hojaservicios/receptor/:id) y la "alterna" fuera del módulo (banco/sangre → documentos/paciente/:id → productos → reacciones/*). Ambas consumen receptor.js / BancoSangreSocios en el backend.
A. Flujo dentro de BancoSangre (hub de pedido)
receptores (Lista de pedidos)
▼
hojaservicios/receptor/:id (Hub del pedido — 4 subprocesos)
├─► documentos/receptor (Documentos médicos)
├─► tiparcruza (Lab) — Tipar y Cruzar vs disponentes/bolsas compatibles
│ ⚠️ búsqueda funciona, pero guardar() (POST /analisis/tipeycruce) está comentado
├─► historico/... (Histórico)
└─► productos/receptor (Catálogo de hemoderivados → carrito)
└─► orden/productos (Pago — app-pagos-censur)
└─ carrito.total = 0
cambioEstadoCensur → 'reacciones transfucionales'
└─► agregar/docuemtos/recpetor/firmados (Sube consentimientos firmados)
└─► ✅ Fin del proceso → /
entrega/productos/sanguineos (standalone, sin :id)
└─ Genera PDFs de etiqueta de urgencia + carta responsiva (sin backend)
B. Por capas (rol → endpoint) — modelo CENSUR
RECEPTOR
│
▼
[PERSONAL CENSUR]
├── POST /censur ← Crear expediente + proceso de seguimiento
├── POST /receptor/documentos ← Documentos médicos
└── POST /ordenar/tipeycruce ← Solicitar tipo y cruce
│
▼
[LABORATORIO]
└── POST /analisis/tipeycruce ← Procesar tipo y cruce
│
▼
[PERSONAL CENSUR]
└── POST /ordenarpedido/censur ← Generar pedido a sede proveedora
│
▼
[SEDE BANCO DE SANGRE]
└── Procesa y entrega hemocomponentes
│
▼
[CAJA / COBRO]
└── POST /agergar/carrito/censur ← Cobrar con métodos mixtos
GET /vender/producto/stock/:id ← Marcar unidades como VENDIDAS
│
▼
[MONITOREO]
└── GET /reacciones/transfucionales ← Vigilancia de reacciones adversas
C. Flujo CENSUR alterno (fuera de BancoSangre) — camino feliz
ReceptoresComponent (banco/sangre — lista de receptores de la sede)
│ click en un paciente → /paciente/:id (detalle, fuera de este análisis)
│ ... o navegación directa a documentos →
▼
DocspacienteComponent (/documentos/paciente/:id)
- Sube 4 documentos obligatorios (consentimiento, resumen médico,
últimos laboratorios, solicitud de componentes sanguíneos)
- Genera receptor en CENSUR → guarda idCensur en localStorage
│ navega a /productos
▼
ProductosComponent → PedidosComponent (/productos)
- Selección de productos / carrito (CarritoCensur)
- Genera orden de pedido + tipo y cruce
│ navega a /dashboard
▼
(tiempo después, tras la transfusión)
│
ReaccionesTransfucionalesComponent (/reacciones/transfucionales)
- Bitácora de todos los pedidos pendientes/realizados
│ click en una fila → /reacciones/adversas/:id
▼
ReaccionesAdversasComponent (/reacciones/adversas/:id)
- Registra si hubo reacción adversa
- Sube documento de "Reacción Transfusional"
- Marca receptor como FINALIZADO
│ navega a /dashboard
▼
(fin del ciclo del receptor)
Estado compartido vía localStorage
En el flujo CENSUR alterno, en lugar de pasar datos entre rutas mediante un servicio o estado de Angular, el flujo se apoya en localStorage:
| Clave | Escrita en | Leída en |
cede | (login / sesión) | ReceptoresComponent |
idCensur | DocspacienteComponent (generaridCensur) | PedidosComponent (enviarSolicitud), luego se elimina |
censur-carrito | PedidosComponent (CarritoCensur) | PedidosComponent, luego se elimina |
usuario | (login / sesión) | PedidosComponent (setPedido) |
⚠️
Si el usuario navega fuera del flujo o abre otra pestaña, el estado guardado en localStorage puede quedar inconsistente o perderse (ver Estado del Código).
listado/sedes/banco/sangre (SedesbsComponent ✅ funcional — lista sedes)
├─ tarjeta de sede ──► detalle/sede/:id (DetalleSedeComponent ⚠️ tabla de pedidos hardcodeada)
└─ AGREGAR SEDE ─────► agregar/sede/bs (AgregarSedeComponent ⚠️ POST /crear/sede/bs comentado)
└─ (debería regresar a) listado/sedes/banco/sangre
ficha/identificacion/sede ⚠️ placeholder vacío (FISedeComponent)
bitacora/no-aptos ⚠️ placeholder, tabla estática (BitacoraNoAptosODiferidosComponent)
hoja/servicio/receptor (BS) ⚠️ placeholder, tabla estática (HojaServicioReceptorBSComponent)
orden/servicio/receptores ⚠️ placeholder, tabla estática (OrdenreceptoresComponent)
Backend disponible para este flujo (sedes.js, 5 endpoints): POST /crear/sede/bs, GET /listado/sedes/banco/sangre/, GET /detalle/sede/:id, GET /ver/sede, GET /ver/sedes/:id. Ver Otros módulos.
👤 Enfermera · Médico · Flebotomista · Laboratorista
- 1 Paciente llega al banco de sangre
- 2 Enfermería crea el expediente
POST /bancodesangre
- 3 Registra autoexclusión
POST /cuestionario/autoexclusion
- 4 Toma signos vitales
POST /agregar/signosvitales
- 5 Médico revisa historia clínica
POST /agregar/historiaclinica
- 6 Médico realiza exploración física
POST /agregar/hojadeevolucion
- 7 Médico aprueba candidato a donación
- 8 Técnico registra extracción
POST /flebotomia
- 9 Laboratorio procesa biometría
POST /analisis/estudios
- 10 Determina grupo y RH
POST /analisis/grupo
- 11 Serología → genera hemocomponentes con QR
POST /analisis/serologia
- 12 Proceso FINALIZADO, estatus DISPONIBLE
👤 Médico
- 1 Médico evalúa al disponente
- 2 Decide diferir con motivo clínico
POST /diferir/disponente
- 3 El disponente queda inactivo (DIFERIDO)
- 4 Se consulta histórico
GET /historico/disponentes/diferidos
- 5 Job revisa fecha_termino y reactiva
GET /flebotomia/prueba/algo
👤 Laboratorista · Jefe de Banco
- 1 Se solicita sangre compatible
POST /disponentes/grupoyrh {tiposangre: "O+"}
- 2 Sistema busca pacientes con ese tipo
- 3 Filtra solo los que tienen almacén
- 4 Clasifica por hemocomponente: CE, CP, PL, PT
- 5 Ordena por fecha de caducidad (PEPS)
- 6 Retorna el más próximo a caducar primero
👤 Personal CENSUR · Laboratorista
- 1 Paciente receptor llega con solicitud
- 2 Personal crea expediente de receptor
POST /censur
- 3 Personal carga documentos médicos
POST /receptor/documentos
- 4 Personal ordena tipo y cruce
POST /ordenar/tipeycruce
- 5 Laboratorista registra tipo y cruce
POST /analisis/tipeycruce
- 6 Personal genera pedido a sede
POST /ordenarpedido/censur
- 7 Sede surtidora procesa el pedido
- 8 Personal registra cobro mixto
POST /agergar/carrito/censur
- 9 Hemocomponentes → VENDIDO
GET /vender/producto/stock/:id
- 10 Actualiza estatus del receptor
PUT /actulizar/estado/recpetor/censur/:id
👤 Almacenista · Laboratorista
- 1 Laboratorista crea serología
POST /analisis/serologia → genera unidades con QR
- 2 Almacenista ve el stock
GET /obtener/todos/produtos/stock
- 3 Stock ordenado por caducidad (PEPS)
- 4 Almacenista gestiona desechos
GET /ver/productos/salidas
- 5 Almacenista ingresa materiales
POST /agregar/nuevo/material/banco/sangre
👤 Técnico de Flebotomía · Médico
Durante la donación:
- 1 Ocurre reacción durante la extracción
- 2 Técnico registra
POST /agregar/reaccionesderivadas (vasovagal / venopunción / toxicidad por citrato)
- 3 Médico registra tratamiento
Reacción transfusional (receptor):
- 1 Receptor presenta reacción post-transfusión
- 2 Estatus →
REACCIONES TRANSFUCIONALES PUT /actulizar/estado/recpetor/censur/:id
- 3 Sistema lista todos los casos
GET /reacciones/transfucionales
👤 Administrador / Jefe de Banco de Sangre
- 1 Registrar nueva sede
POST /crear/sede/bs
- 2 Ver listado de sedes
GET /listado/sedes/banco/sangre/
- 3 Ver pedidos de una sede
GET /ver/sedes/:id (vía carrito)
- 4 Gestionar proveedores de insumos
POST /registro/proveedor
👤 Personal de Banco de Sangre
- 1 Entra a
banco/sangre y busca/selecciona al paciente
- 2 En
documentos/paciente/:id sube los 4 documentos obligatorios
- 2a Alterno: si hay < 4 archivos → alerta con los faltantes, no avanza
- 3 Se genera
idCensur (agregarReceptor) y se suben documentos
- 4 Redirige a
/productos; carga catálogo y carrito
- 4a Alterno: carrito vacío → alerta "Necesitas agregar un producto al carrito"
- 5 Genera tipo y cruce + orden de pedido CENSUR; limpia
localStorage
- 6 Más tarde:
/reacciones/transfucionales → /reacciones/adversas/:id → marca receptor FINALIZADO
Hallazgos por componente
| Componente | Problema | Tipo |
BitacoraAlmacenComponent (bitacora/almacen) | Tabla 100% hardcodeada, sin servicio conectado | Hardcodeado |
HojaServiciosLabsComponent (hoja-servicios) | Código muerto, no referenciado en ninguna ruta ni plantilla | Código muerto |
HistoricoEstudiosDisponenteComponent | Placeholder estático con una fila de ejemplo | Placeholder |
BitacoraPedidosComponent (bitacora/hoja/de/servicios) | Carga pacientes reales, pero columnas de estatus/proceso/motivo están hardcodeadas | Parcial |
ReaccionesDerivadasComponent | UI completa pero enviar() y getDisponente() están comentados — no persiste | Sin backend |
TiparCruzarComponent | Búsqueda de compatibles funciona, pero guardar() (POST /analisis/tipeycruce) está comentado; método/técnico/cédula hardcodeados | Sin backend |
FISedeComponent, HojaServicioReceptorBSComponent, OrdenreceptoresComponent, BitacoraNoAptosODiferidosComponent | Placeholders vacíos o con datos de ejemplo, sin servicio | Placeholder |
AgregarSedeComponent | Formulario completo y validado, pero POST /crear/sede/bs está comentado | Sin backend |
DetalleSedeComponent | Tabla de "pedidos de sede" hardcodeada; getVenSede() se llama pero el resultado no se asigna | Hardcodeado |
EntregaProductosComponent | getProductosAlmacen() se llama pero su resultado no se usa (solo console.log) | Bug menor |
Riesgos del flujo CENSUR alterno
- Estado compartido vía
localStorage (idCensur, censur-carrito, usuario, cede): si el usuario navega fuera del flujo o abre otra pestaña, el estado puede quedar inconsistente o perderse.
ReaccionesTransfucionalesComponent no pagina resultados (TODO pendiente en el código), lo que puede impactar el rendimiento con bitácoras grandes.
ReceptoresComponent: paginaAnterior/siguentePagina llaman a PacientesService.getPacientes(intervalo), un endpoint distinto al usado en la carga inicial (getPacientesSede); esto podría producir resultados inconsistentes con la sede filtrada.
ReaccionesAdversasComponent.guardarDocumentos no valida que se haya subido un documento antes de enviar (this.imagenes[0] puede ser undefined).
- Código comentado / bloques muertos presentes en
DocspacienteComponent (agregarDocumentos, sección de "Documentos Adjuntos" en el HTML) que podrían limpiarse.
📌
Prioridad arquitectónica: el hallazgo más relevante para el roadmap sigue siendo la duplicidad del flujo CENSUR descrita en Arquitectura Frontend y Flujo Receptor / CENSUR — dos UIs distintas (hojaservicios/receptor/:id vs. banco/sangre → documentos/paciente/:id → productos → reacciones/*) escriben sobre el mismo modelo BancoSangreSocios / receptor.js, con lógicas y validaciones que pueden divergir.
🔳 Generación de QR
Al ingresar productos al stock (POST /agregar/productos/almacen/stock) y al finalizar serología (POST /analisis/serologia), el sistema genera automáticamente un código QR por unidad apuntando a GET /vender/producto/stock/:id. Esto permite marcar unidades como vendidas escaneando el código.
🏷️ Lote Unitario
Cada unidad de stock recibe un lote_unitario secuencial calculado contando cuántos documentos del mismo producto existen antes de guardar.
🩸 Clasificación de Hemocomponentes
Los hemocomponentes se identifican por el patrón en lote_unitario mediante expresiones regulares:
/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 (lógica en POST /agregar/productos/almacen/stock).
⏱️ Disponibilidad Automática
El endpoint 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ó.
🧬 Modelo Polimórfico de Laboratorio
LaboratorioBS (models/bancoDeSangre/modelLaboratorio.js) es una tabla polimórfica reutilizada para Biometría Hemática, Grupo y RH y Serología (todas referencian BancoSangre vía laboratorio) y para Tipo y Cruce (referencia BancoSangreSocios vía tiparycruzar). Su campo proceso distingue EN PROCESO / FINALIZADO.
☁️ Documentos en AWS S3
Los documentos del receptor (consentimientos, resúmenes médicos, laboratorios, solicitudes de componentes) se suben a AWS S3 vía POST /cargar/documentos/censur y se referencian por URL en BancoSangreSocios.
📄 PDFs generados en cliente
Las etiquetas QR ("LIBERADO" / "NO LIBERADO"), la etiqueta de urgencia y la carta responsiva se generan en el navegador con jsPDF, no por el backend — el servidor solo provee los datos crudos.
Campo proceso (BancoSangre — disponente)
NUEVO / DISPONIBLEDisponente recién registrado, listo para iniciar autoexclusión.
enfermeriaPasó la autoexclusión; pendiente de signos vitales.
doctorPendiente de historia clínica y exploración médica.
FLEBOTOMIAAprobado por el médico; pendiente de extracción.
serologia / SEROLOGIAExtracción realizada; pendiente de estudios de laboratorio (biometría, grupo/RH, serología).
FINALIZADOCiclo de donación completo; hemocomponentes generados en stock.
DIFERIDODonación rechazada/pospuesta en cualquier punto del proceso (autoexclusión, signos vitales, historia clínica, evolución o serología reactiva).
Campo estatus (disponibilidad de hemocomponentes)
DISPONIBLEUnidad en stock, lista para ser asignada a un receptor.
EN PROCESOEstudio de laboratorio en curso, aún sin resultado final.
DIFERIDODisponente fuera de circulación temporal o permanentemente (ver diferido[]: motivo, tiempoDiferir, fecha_final).
VENDIDOUnidad entregada/cobrada a un receptor (GET /vender/producto/stock/:id).
Hemocomponentes
CEConcentrado Eritrocitario (glóbulos rojos).
CPConcentrado Plaquetario.
PLPlasma.
PTPlaquetas.
Términos generales
DisponentePersona donadora de sangre. Modelo principal: BancoSangre.
Receptor / CENSURPaciente que recibe hemocomponentes. Modelo principal: BancoSangreSocios.
AutoexclusiónCuestionario de 12-13 preguntas de riesgo aplicado antes de aceptar la donación (modelCuestioExclusion).
PEPS / FIFO"Primeras Entradas, Primeras Salidas": el stock se ordena por fecha_caducidad ascendente para usar primero lo que vence antes.
Lote unitarioIdentificador secuencial por unidad de producto, usado además para clasificar el hemocomponente por regex.
Tipar y CruzarPrueba de compatibilidad sanguínea entre la sangre del receptor y las unidades candidatas (LaboratorioBS.tiparycruzar).
Hoja de ServiciosVista "hub" que agrupa los subprocesos pendientes de un disponente o receptor (estudios de laboratorio, documentos, productos).
Carrito CENSURCarrito de compra de hemoderivados para un receptor, persistido temporalmente en localStorage (censur-carrito).
SedeUbicación física del banco de sangre (Sedesbs) que puede surtir pedidos a otras sedes (pedidosSedesBanco).
BitácoraListado/tablero de pacientes filtrado por área y estado de proceso (enfermería, médico, flebotomía, laboratorio, almacén).