Saltar al contenido

Cómo funciona

De la receta al libro de control: el flujo completo en FarmaWare

Por Eduardo Gallegos · Publicado el 23 de septiembre de 2026

Este es un recorrido de producto, no el caso de ninguna farmacia real: describe cómo se mueve -y dónde se desconecta de la norma- una venta de medicamento controlado dentro de FarmaWare. La pregunta que resuelve es concreta: ¿en qué paso exacto se pierde el dato del médico que exige la fracción III del artículo 117 del Reglamento de Insumos para la Salud? Según lo visto en en FarmaWare, el libro de control de medicamentos controlados nunca registra al médico que prescribe.

Esquema del recorrido · ilustración, no es una pantalla del sistema

  1. 1. El cajero cobra un medicamento controladoEl producto trae la bandera controlled o requiresPrescription en el catálogo.
  2. 2. Captura el folio de la recetaEs el único dato de receta que el renglón de venta acepta: texto libre, sin campo para el médico.
  3. 3. La venta se guarda con ese foliopos.ticket_lines persiste producto, cantidad, lote y folio -nada del médico.
  4. 4. El inventario registra el movimientoinventory.stock_movements guarda fecha, tipo, cantidad, lote y una referencia genérica.
  5. 5. El libro de control se arma desde el inventario, no desde la ventaEl folio ni siquiera cruza hasta aquí, y el médico nunca existió como dato.
  6. 6. Un inspector pide el libro de controlVe fecha, cantidad y saldo -las fracciones I, II y IV a medias, y la III (médico) vacía.

1-3. El folio se captura y se guarda; el médico nunca tiene campo

El renglón de venta (posTicketLineInputSchema) acepta producto, cantidad, precio, descuento, lote y un folio de receta de hasta 120 caracteres de texto libre. Cuando el cajero cierra la venta, insertTicketLine() guarda ese folio en pos.ticket_lines junto con el resto del renglón. Hasta aquí, el sistema al menos intenta capturar una de las cuatro fracciones del artículo 117 -la del folio-. Nombre, domicilio y cédula profesional del médico no aparecen en ningún punto de este formulario ni de esta tabla.

Agenda una demo gratis

4-6. El libro de control se arma desde otra tabla, y pierde hasta el folio

El libro de control que expone ControlledService no lee pos.ticket_lines. Lee inventory.stock_movements, el ledger append-only de inventario -una tabla distinta, pensada para el kardex, no para la receta-. Ahí ni siquiera el folio de la venta sobrevive: la consulta trae fecha, tipo, cantidad, lote, motivo y una referencia genérica (ref_type/ref_id), sin ningún vínculo a los datos del médico porque esos datos nunca existieron en el sistema para vincularse.

Parada¿Captura el dato del médico (art. 117 fr. III)?
1-2. Venta del producto controlado (folio)No -el renglón sólo tiene campo para el folio
3. pos.ticket_linesNo -mismas columnas que el renglón, sin médico
4. inventory.stock_movementsNo -ni el folio llega hasta aquí
5. Libro de control (ControlledLedger)No -se arma desde el inventario, no desde la venta
6. Vista para un inspectorNo -la fracción III queda vacía

Puedes estimar la exposición de este hallazgo, con tus propios números, en la calculadora de exposición por libro de control incompleto.

Preguntas frecuentes

¿FarmaWare no sabe qué medicamento controlado se vendió?
Sí lo sabe: producto, cantidad, lote y saldo corriente quedan registrados. Lo que no captura es quién prescribió la receta que autorizó esa venta.

¿El folio de receta al menos llega al libro de control?
No en la versión actual: el libro se arma desde el ledger de inventario, que no incluye el folio de la venta -aunque el folio sí se haya guardado en la tabla de la venta.

¿FarmaWare corrige esto automáticamente?
No, hoy no. Es un hallazgo verificado en el código actual, no una función ya resuelta.

Ve el recorrido completo en tu propia demo

Te mostramos en vivo la venta de un medicamento controlado y su libro de control.

Agenda una demo gratis
Agendar 30 min
Contacta a un especialista
Ventas y Proyectos (abre en una ventana nueva) Soporte Técnico (abre en una ventana nueva)