La Ley General de Salud no deja este punto a criterio del punto de venta: ciertos medicamentos sólo pueden venderse contra una receta médica que la farmacia debe retener y anotar en sus libros de control. Verificamos en el código de FarmaWare que el punto de venta puede cobrar esa misma venta sin ninguna receta real -- por configuración, sólo se registra un aviso -- y que, aun cuando se exige el folio, el sistema acepta cualquier texto como si fuera válido.
La ley no dice "recomendable": dice que la receta se retiene y se registra
El artículo 226 de la Ley General de Salud (texto vigente publicado por la Cámara de Diputados del H. Congreso de la Unión, última reforma DOF 15-01-2026) clasifica los medicamentos según los requisitos para su venta. Su fracción II es la que aplica al caso más común de "medicamento con receta" en una farmacia:
"II. Medicamentos que requieren para su adquisición receta médica que deberá retenerse en la farmacia que la surta y ser registrada en los libros de control que al efecto se lleven, de acuerdo con los términos señalados en el capítulo VI de este título. El médico tratante podrá prescribir dos presentaciones del mismo producto como máximo, especificando su contenido. Esta prescripción tendrá vigencia de treinta días a partir de la fecha de elaboración de la misma."
No es una sugerencia de buenas prácticas: es una obligación con dos partes, retener la receta y registrarla en un libro de control, y con un límite de vigencia (treinta días). Las fracciones III y IV del mismo artículo imponen obligaciones equivalentes -sellar y registrar cada resurtimiento- para los medicamentos controlados que se surten más de una vez.
La sanción: hasta 16,000 veces el salario mínimo, calificada caso por caso
El artículo 226 no tiene una multa propia dentro del catálogo específico de los artículos 419 a 421 Bis de la misma ley -revisamos cada uno de esos cuatro artículos y ninguno lo nombra-, así que la infracción cae en el residual, el artículo 422:
"Las infracciones no previstas en este Capítulo serán sancionadas con multa equivalente hasta por dieciséis mil veces el salario mínimo general diario vigente en la zona económica de que se trate, atendiendo las reglas de calificación que se establecen en el artículo 418 de esta Ley."
Con el salario mínimo general diario vigente en 2026 ($315.04 en la zona general del país, $440.87 en la Zona Libre de la Frontera Norte), el techo teórico de esa multa es de $5,040,640.00 MXN en la zona general y de $7,053,920.00 MXN en la frontera norte -un techo, no un cobro automático por ticket. El propio artículo 422 remite al artículo 418, que obliga a la autoridad sanitaria a fundar y motivar la sanción considerando cinco criterios: los daños producidos o que puedan producirse en la salud, la gravedad de la infracción, las condiciones socioeconómicas del infractor, la reincidencia y el beneficio obtenido por el infractor.
| Elemento | Qué dice la norma |
|---|---|
| Receta retenida y registrada en libro de control, vigencia 30 días | Art. 226, fr. II, LGS |
| Infracción sin multa específica en el catálogo de los arts. 419-421 Bis | Cae en el residual del art. 422, LGS |
| Multa del residual | Art. 422, LGS: hasta 16,000 veces el salario mínimo general diario ($5,040,640.00-$7,053,920.00 MXN, techo teórico 2026 según zona) |
| Criterios de calificación de la sanción | Art. 418, LGS: daño a la salud, gravedad, condición socioeconómica, reincidencia, beneficio obtenido |
Verificado en el código: el default no bloquea, y el folio es un campo de texto libre
Confirmamos el hallazgo directamente en el código de FarmaWare (repo medware-di). La función que revisa receta y control, enforcePrescriptions() (apps/services/pos/src/pos/pos.service.ts:872-887), lee la variable de entorno POS_ENFORCE_PRESCRIPTION y, si no está definida, usa 'report' como valor por defecto (pos.service.ts:873): en ese modo, un producto que requiere receta o está controlado y no trae folio no se rechaza -el sistema sólo acumula un aviso en un arreglo issues-. Sólo con la variable puesta explícitamente en 'enforce' la venta se rechaza con un error 400 antes de cobrarse.
Y aun en modo 'enforce', la condición que evita el rechazo (pos.service.ts:878) es que el renglón traiga algo en prescriptionFolio -no que ese folio corresponda a ninguna receta real-. El esquema que valida ese campo, prescriptionFolio: z.string().min(1).max(120).optional() (packages/shared-schemas/src/pos.schema.ts:27), acepta cualquier cadena de uno a ciento veinte caracteres: "1", "x" o el nombre del cliente pasan la validación exactamente igual que un folio real. No existe, en ningún punto de ese flujo, una consulta contra un padrón de recetas, un médico o una cédula profesional que confirme que la receta capturada existe.
El otro lado de la obligación legal -el libro de control que debe registrar cada movimiento de un medicamento controlado- tampoco cierra el círculo. movements(), en apps/services/compliance/src/controlled/controlled.repository.ts, arma el historial de movimientos de un producto controlado leyendo fecha, tipo de movimiento, cantidad, número de lote, motivo y referencia (ref_type/ref_id) -pero ninguna de esas columnas es el folio de la receta que amparó la venta-. La columna sí existe un nivel más abajo, en pos.ticket_lines.prescription_folio (poblada por insertTicketLine(), apps/services/pos/src/pos/pos.repository.ts:335-347, con el mismo texto libre sin validar), pero el libro de control regulatorio -el que exige literalmente el artículo 226- no la incorpora ni la cruza.
Qué significa en la práctica, y qué falta en el producto
Con la configuración por defecto, un cajero puede vender un medicamento que requiere receta sin que el sistema lo impida: sólo queda un aviso interno, no una receta retenida ni un registro en el libro de control que exige la ley. Y aun activando el modo estricto, cualquier texto en el campo de folio "cumple" el requisito para el sistema, aunque no exista ninguna receta detrás. Lo que falta no es una funcionalidad nueva, es cerrar dos huecos puntuales: que el valor por defecto de POS_ENFORCE_PRESCRIPTION sea 'enforce' en farmacias que vendan medicamentos de las fracciones I-IV del art. 226, y que el libro de control de controlled.repository.ts incorpore el folio de receta como parte del registro de cada movimiento, no sólo lote y motivo. Puedes ver ese recorrido completo, de la venta a la receta, en de la venta a la receta: el flujo completo en FarmaWare, o estimar la exposición con tus propios números en la calculadora de exposición por venta de medicamento sin receta verificada.
Preguntas frecuentes
¿FarmaWare permite vender cualquier medicamento sin receta?
No: el sistema sí identifica qué productos requieren receta o están controlados y sí exige capturar un folio. El hallazgo es que, por configuración por defecto, no bloquea la venta si falta ese folio -sólo advierte- y que el folio capturado no se valida contra ninguna receta real.
¿Basta con cambiar POS_ENFORCE_PRESCRIPTION a 'enforce' para resolverlo?
Resuelve la mitad: bloquea la venta sin folio. No resuelve que el folio aceptado sea texto libre sin validar contra una receta, un médico o una cédula profesional real, ni que el libro de control regulatorio no incorpore ese folio.
¿Esto significa que ya hubo una venta irregular en mi farmacia?
No necesariamente: el hallazgo es que el sistema no lo impide ni lo detecta, no que ya haya ocurrido. Si tu equipo pide y anota la receta con disciplina propia, hoy no tienes el problema -pero tampoco tienes ninguna alerta si algún día deja de hacerlo, ni un libro de control completo ante una inspección de la Secretaría de Salud.
¿Cuál es la multa exacta?
La Ley General de Salud no fija un monto único para este caso: hasta 16,000 veces el salario mínimo general diario vigente en la zona económica (hasta $5,040,640.00 MXN en zona general, $7,053,920.00 MXN en la Zona Libre de la Frontera Norte, con el salario mínimo 2026), calificada por la autoridad sanitaria según los cinco criterios del artículo 418 -no es un cobro automático por cada venta-.
Fuentes consultadas: Ley General de Salud, texto vigente publicado por la Cámara de Diputados del H. Congreso de la Unión, última reforma DOF 15-01-2026, artículos 226, 418, 419, 420, 421, 421 Bis y 422. Salario mínimo general diario vigente en 2026 por zona económica (Comisión Nacional de los Salarios Mínimos). Este artículo es orientativo y no sustituye una revisión de tu caso por tu responsable sanitario o asesor legal.
Ve cómo FarmaWare controla hoy la venta con receta, y dónde falta la conexión
Te mostramos en vivo el punto de venta, la captura del folio de receta y el libro de control de medicamentos -y el paso exacto donde nadie los compara.
Agenda una demo de FarmaWare