Skip to content

M03 B2B -- Modelo de Datos

CampoValor
EstadoBorrador
PrioridadFase 1
Última actualización2026-03-25
MóduloM03 B2B

1. Diagrama entidad-relación


2. Detalle de entidades

2.1 CONVENIO

Representa el acuerdo comercial entre un recetario y un cliente (farmacia, clínica u hospital).

CampoTipoNuloDescripción
idUUIDNoIdentificador único del convenio
id_recetarioUUIDNoReferencia al recetario que ofrece el servicio
id_clienteUUIDNoReferencia al cliente (farmacia/clínica)
razon_social_clienteVARCHAR(255)NoRazón social del cliente
rut_clienteVARCHAR(20)NoRUT del cliente
contacto_principalVARCHAR(255)NoNombre del contacto principal del cliente
email_contactoVARCHAR(255)NoEmail del contacto principal
telefono_contactoVARCHAR(20)Teléfono del contacto principal
descuento_pactadoDECIMAL(5,2)Porcentaje de descuento global pactado (ej: 25.00, 30.00)
fecha_inicioDATENoFecha de inicio de vigencia del convenio
fecha_finDATEFecha de fin de vigencia (NULL = indefinido)
estadoVARCHAR(20)NoEstado del convenio: Activo, Suspendido, Finalizado
condiciones_comercialesJSONBCondiciones adicionales en formato flexible (SLA, reglas de aprobación, productos habilitados)
created_atTIMESTAMPNoFecha de creación del registro
updated_atTIMESTAMPNoFecha de última modificación
created_byVARCHAR(255)NoUsuario que creó el convenio

Índices sugeridos: id_recetario, id_cliente, estado, rut_cliente.


2.2 SOLICITUD

Representa un pedido o conjunto de recetas cargadas por un cliente convenio.

CampoTipoNuloDescripción
idUUIDNoIdentificador único de la solicitud
id_convenioUUIDNoConvenio bajo el cual se carga la solicitud
id_clienteUUIDNoCliente que carga la solicitud
id_externoVARCHAR(100)Identificador propio del cliente para trazabilidad cruzada
id_loteVARCHAR(100)Identificador del lote si la solicitud viene de carga masiva
canal_entradaVARCHAR(20)NoCanal por el que ingresó: manual, masivo, api
estado_actualVARCHAR(30)NoEstado vigente: Cargado, Validado, Cotizado, Aprobado, Rechazado, EnProduccion, Despachado, Entregado, Observado
fecha_cargaTIMESTAMPNoFecha y hora de carga
fecha_estimada_entregaDATEFecha estimada de entrega al cliente
monto_totalDECIMAL(12,2)Monto total calculado de la solicitud
observaciones_generalesTEXTObservaciones generales de la solicitud
id_orden_produccionUUIDReferencia a la orden de producción en M04 (cuando se deriva)
created_atTIMESTAMPNoFecha de creación del registro
updated_atTIMESTAMPNoFecha de última modificación
created_byVARCHAR(255)NoUsuario que creó la solicitud

Índices sugeridos: id_convenio, id_cliente, estado_actual, fecha_carga, id_externo, id_lote.

Estados válidos:

EstadoDescripción
CargadoSolicitud recibida, pendiente de validación
ValidadoInformación verificada por la ejecutiva
CotizadoPrecio calculado según condiciones del convenio
AprobadoCliente o regla automática aprueba la cotización
RechazadoSolicitud rechazada (por el cliente o por el recetario)
EnProduccionSolicitud derivada a M04 Producción
DespachadoProducto terminado y despachado
EntregadoCliente confirma recepción
ObservadoFaltan datos, receta ilegible u otro problema

2.3 LINEA_SOLICITUD

Cada línea representa un producto individual dentro de una solicitud.

CampoTipoNuloDescripción
idUUIDNoIdentificador único de la línea
id_solicitudUUIDNoSolicitud a la que pertenece
codigo_productoVARCHAR(50)Código interno del producto en el catálogo del recetario
nombre_productoVARCHAR(255)NoNombre del producto o preparación solicitada
forma_farmaceuticaVARCHAR(100)Forma farmacéutica: cápsula, crema, colirio, jarabe, etc.
presentacionVARCHAR(100)Presentación: 10 ml, 30 g, 60 cápsulas, etc.
cantidadDECIMAL(10,2)NoCantidad solicitada
unidad_medidaVARCHAR(20)NoUnidad: unidad, gramo, ml, frasco, etc.
precio_unitario_convenioDECIMAL(12,2)Precio unitario según condiciones del convenio
subtotalDECIMAL(12,2)Subtotal de la línea (cantidad x precio unitario)
datos_recetaTEXTDatos textuales de la receta (paciente, médico, indicaciones)
archivo_receta_urlVARCHAR(500)URL del archivo adjunto (imagen o PDF de la receta)
observacionesTEXTObservaciones específicas de esta línea
created_atTIMESTAMPNoFecha de creación

Índices sugeridos: id_solicitud, codigo_producto.


2.4 INCIDENCIA

Ticket de incidencia asociado a una solicitud.

CampoTipoNuloDescripción
idUUIDNoIdentificador único de la incidencia
id_solicitudUUIDNoSolicitud a la que se vincula la incidencia
tipoVARCHAR(50)NoTipo: dato_faltante, receta_ilegible, error_carga, retraso_produccion, problema_despacho, otro
descripcionTEXTNoDescripción del problema
estadoVARCHAR(20)NoEstado: Abierto, EnProceso, Resuelto, Cerrado
responsable_idUUIDUsuario asignado como responsable
responsable_nombreVARCHAR(255)Nombre del responsable
resolucionTEXTDetalle de cómo se resolvió
fecha_creacionTIMESTAMPNoFecha de creación del ticket
fecha_resolucionTIMESTAMPFecha en que se resolvió
updated_atTIMESTAMPNoFecha de última modificación

Índices sugeridos: id_solicitud, estado, tipo.


2.5 NOTIFICACION

Registro de notificaciones enviadas por eventos del módulo B2B.

CampoTipoNuloDescripción
idUUIDNoIdentificador único de la notificación
id_solicitudUUIDSolicitud asociada (si aplica)
id_convenioUUIDConvenio asociado (si aplica)
id_destinatarioUUIDNoUsuario destinatario
tipo_eventoVARCHAR(50)NoTipo de evento: nueva_carga, carga_con_errores, solicitud_observada, derivada_produccion, cambio_estado, despacho
canalVARCHAR(20)NoCanal de envío: email, plataforma, whatsapp
estado_envioVARCHAR(20)NoEstado: Pendiente, Enviado, Fallido, Leído
contenidoTEXTNoContenido del mensaje
fecha_envioTIMESTAMPFecha y hora de envío
fecha_lecturaTIMESTAMPFecha y hora de lectura (si aplica)

Índices sugeridos: id_solicitud, id_destinatario, tipo_evento, estado_envio.


2.6 HISTORIAL_ESTADO

Registro de cada cambio de estado de una solicitud, para trazabilidad completa.

CampoTipoNuloDescripción
idUUIDNoIdentificador único del registro
id_solicitudUUIDNoSolicitud a la que pertenece el cambio
estado_anteriorVARCHAR(30)Estado antes del cambio (NULL para el estado inicial)
estado_nuevoVARCHAR(30)NoEstado después del cambio
actorVARCHAR(255)NoUsuario o sistema que realizó el cambio
observacionTEXTObservación asociada al cambio
fecha_cambioTIMESTAMPNoFecha y hora del cambio

Índices sugeridos: id_solicitud, fecha_cambio.


3. Relaciones entre entidades

Entidad origenEntidad destinoCardinalidadDescripción
ConvenioSolicitud1:NUn convenio puede tener muchas solicitudes
SolicitudLineaSolicitud1:NUna solicitud puede tener múltiples líneas de producto
SolicitudIncidencia1:NUna solicitud puede tener múltiples incidencias
SolicitudNotificacion1:NUna solicitud puede generar múltiples notificaciones
ConvenioNotificacion1:NUn convenio puede generar notificaciones generales
SolicitudHistorialEstado1:NCada cambio de estado queda registrado

4. Relaciones con otros módulos

Entidad M03Módulo externoRelaciónDetalle
ConvenioM06 Costeo (CostoProducto)ConsultaEl precio de convenio se calcula a partir del costo base definido en M06
SolicitudM04 Producción (OrdenTrabajo)ReferenciaAl derivar, la solicitud referencia la orden de producción creada en M04
SolicitudM02 CotizaciónReferenciaUna cotización confirmada en M02 puede originar una solicitud B2B

5. Notas de implementación

  • Los campos de tipo JSONB (como condiciones_comerciales en Convenio) permiten flexibilidad para almacenar condiciones que varían entre convenios sin requerir cambios de esquema.
  • El campo id_externo en Solicitud es clave para la trazabilidad cruzada: el cliente puede consultar con su propio código (por ejemplo, el número de contraseña que usa Salco en su Excel).
  • El campo id_lote agrupa las solicitudes que vinieron de una misma carga masiva para facilitar reportes y reprocesos.
  • Los archivos adjuntos (imágenes de receta, PDFs) se almacenan en storage externo (Supabase Storage) y la tabla solo guarda la URL de referencia.

Volver al Requerimientos M03 | Ver Historias de usuario M03 | Ver Índice general