Saltar al contenido

Protección al consumidor en veterinaria

En FaunaWare, las campañas de recuperación de clientes ignoran la baja que el dueño ya pidió

Por Eduardo Gallegos · Publicado el 23 de septiembre de 2026

Médico veterinario en consulta, con el estante de medicamentos de la clínica al fondo.

Un dueño de mascota le pide a la recepción que ya no le manden WhatsApp. La clínica lo anota -o debería poder anotarlo- y, semanas después, ese mismo dueño recibe de todos modos un WhatsApp promocional de "recuperación de clientes" invitándolo a agendar el refuerzo de su mascota. Verificamos en el código de FaunaWare que esto no es un descuido puntual: son dos rutas de envío distintas, y sólo una de las dos revisa si el dueño pidió no recibir mensajes.

La ley: la publicidad se detiene cuando el consumidor ya dijo que no

El artículo 18 BIS de la Ley Federal de Protección al Consumidor (LFPC, texto vigente de la Cámara de Diputados, última reforma DOF 12-12-2025) es explícito y no deja margen de interpretación:

"Queda prohibido a los proveedores y a las empresas que utilicen información sobre consumidores con fines mercadotécnicos o publicitarios y a sus clientes, utilizar la información relativa a los consumidores con fines diferentes a los mercadotécnicos o publicitarios, así como enviar publicidad a los consumidores que expresamente les hubieren manifestado su voluntad de no recibirla o que estén inscritos en el registro a que se refiere el artículo anterior."

La obligación no depende de que el dueño se haya inscrito en el registro público de PROFECO (art. 18): basta con que se lo haya manifestado directamente al proveedor -en este caso, la clínica-. El artículo 17, párrafo segundo, se lo reconoce como derecho exigible: el consumidor "podrá exigir directamente a proveedores específicos [...] no ser molestado [...] por cualquier otro medio, para ofrecerle bienes, productos o servicios, y que no le envíen publicidad".

Agenda una demo gratis

La sanción: el artículo 18 BIS está en la lista expresa del artículo 127

A diferencia de otros hallazgos que hemos publicado sobre normas que caen en el residual de su ley, aquí no hace falta ningún catch-all: el artículo 127 de la LFPC nombra al 18 BIS de forma expresa, en su lista cerrada de artículos con multa propia:

"Las infracciones a lo dispuesto por los artículos 7 BIS, 13, 17, 18 BIS, 33, 34, 35, 36 [...] serán sancionadas con multa de $760.89 a $2,434,847.42."

Montos actualizados por acuerdo de la Procuraduría Federal del Consumidor con última publicación DOF 23-12-2025, vigentes para 2026.

ElementoQué dice la norma
Prohibición de enviar publicidad a quien ya dijo que noArt. 18 BIS, LFPC
Derecho del consumidor a exigirlo directamente al proveedor, sin pasar por el registro de PROFECOArt. 17, párrafo segundo, LFPC
Sanción, con lista expresa (no residual)Art. 127, LFPC: $760.89 a $2,434,847.42 por infracción

Verificado en el código: dos rutas de envío, una sola revisa la baja

Confirmamos el hallazgo directamente en el código de FaunaWare (repo medware-vet, rama main). El sistema sí implementa un opt-out por canal: la tabla notification_preferences guarda opt_out_email/opt_out_sms/opt_out_whatsapp por paciente, y el recordatorio ordinario de cita la respeta. loadPreferenceRow() (services/notifications/src/notifications/reminder-scheduler.service.ts:225-239) la consulta antes de cada envío, e isOptedOut() (líneas 241-247) decide si ese recordatorio se salta el canal marcado.

La campaña de "recuperación de clientes" -la funcionalidad que arma mensajes masivos a partir de criterios clínicos (última visita, crónicos, diagnóstico)- no pasa por ahí. RecallRelayService (services/clinical/src/recall/recall-relay.service.ts:206-215) llama directo a POST /notifications/send con el contacto, canal y mensaje de la campaña, sin ninguna consulta previa a preferencias. Y del otro lado, NotificationsService.send() (services/notifications/src/notifications/notifications.service.ts:313-345) -el método genérico que atiende esa llamada- tampoco la consulta en ningún punto: despacha por el canal que le llega, sin más.

const resp = await client.post<NotificationsSendResponse>('/notifications/send', {
  to, channel: row.channel, subject, message,
  patientId: row.patient_id, tenantId: row.tenant_id,
});

El mensaje de la campaña es texto libre de hasta 2,000 caracteres (createCampaignSchema, services/clinical/src/recall/recall.schemas.ts:24-31, campo message) y la propia interfaz de "Recuperación" invita a escribir cualquier cosa -su placeholder de ejemplo es un recordatorio de control, pero nada en el esquema ni en el backend restringe el contenido a lo estrictamente clínico. Una clínica puede -y en la práctica probablemente lo hace, para llenar agenda- anunciar promociones de baño, estética o paquetes de vacunación en la misma campaña que usa para dar seguimiento a crónicos, dirigida a los mismos dueños que ya pidieron no recibir WhatsApp.

Agenda una demo gratis

Qué significa en la práctica, y qué falta en el producto

FaunaWare sí construyó la pieza difícil: un opt-out por canal, que un flujo del sistema ya respeta correctamente. Lo que falta es conectar esa misma verificación al segundo flujo de envío masivo -el que con más probabilidad lleva contenido promocional-. Hoy, campañas y recordatorios comparten los mismos canales (email, SMS, WhatsApp) y el mismo destinatario, pero sólo uno de los dos pregunta si ese destinatario ya dijo que no. Puedes ver el recorrido completo, de la baja del dueño a la campaña que la ignora, en este flujo de producto, o estimar la exposición con tus propios números en la calculadora de exposición por campaña sin revisar la baja.

Preguntas frecuentes

¿FaunaWare no tiene opción de "no molestar" al cliente?
Sí la tiene, por canal (email, SMS, WhatsApp), y el recordatorio ordinario de cita la respeta. Lo que no la respeta es la campaña de recuperación de clientes, que usa una ruta de envío distinta.

¿Toda campaña de recuperación es publicidad?
No necesariamente: un recordatorio puramente clínico ("te toca refuerzo") puede no calificar como publicidad. Pero el mensaje es texto libre sin restricción de contenido, y nada impide -ni advierte- que se use para promociones, que sí caen bajo el art. 18 BIS.

¿Cuál es la multa exacta?
De $760.89 a $2,434,847.42 MXN por infracción, conforme al art. 127 de la LFPC (montos vigentes 2026), calificada caso por caso por la autoridad.

¿Ya hay un dueño de mascota afectado hoy?
El hallazgo es que el sistema no revisa la preferencia en esta ruta, no que ya haya ocurrido un envío concreto documentado. Si tu clínica ya usa campañas de recuperación con dueños que pidieron no recibir mensajes, hoy ese pedido no se aplica ahí.

Fuentes consultadas: Ley Federal de Protección al Consumidor, texto vigente publicado por la Cámara de Diputados del H. Congreso de la Unión (última reforma DOF 12-12-2025), artículos 17, 18, 18 BIS y 127 (montos de multa actualizados, última publicación DOF 23-12-2025). Este artículo es orientativo y no sustituye una revisión de tu caso por tu asesor legal.

Ve cómo FaunaWare revisa -o no- la baja antes de cada envío

Te mostramos en vivo el recordatorio de cita que sí respeta la preferencia del dueño, y la campaña de recuperación que no la consulta.

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)