diff --git a/modules/recetas/recetas.routes.ts b/modules/recetas/recetas.routes.ts
index b58128df87..1819560713 100644
--- a/modules/recetas/recetas.routes.ts
+++ b/modules/recetas/recetas.routes.ts
@@ -2,7 +2,7 @@ import { asyncHandler, Request, Response } from '@andes/api-tool';
 import { MongoQuery, ResourceBase } from '@andes/core';
 import { Auth } from '../../auth/auth.class';
 import { Receta } from './receta-schema';
-import { buscarRecetas, getMotivosReceta, setEstadoDispensa, suspender, actualizarAppNotificada, cancelarDispensa, create, buscarRecetasPorProfesional, buscarRecetasConFiltros } from './recetasController';
+import { buscarRecetas, getMotivosReceta, setEstadoDispensa, suspender, actualizarAppNotificada, cancelarDispensa, create, buscarRecetasPorProfesional, buscarRecetasConFiltros, verificarRecetaExistente } from './recetasController';
 import { ParamsIncorrect } from './recetas.error';
 
 class RecetasResource extends ResourceBase {
@@ -46,6 +46,21 @@ export const getConFiltros = async (req, res) => {
     res.json(result);
 };
 
+export const getVerificarReceta = async (req, res) => {
+    try {
+        const { documento, sexo, conceptId } = req.query;
+        if (!documento || !sexo) {
+            const error = new ParamsIncorrect('Se requieren los parámetros documento y sexo');
+            return res.status(error.status).json(error);
+        }
+        const result = await verificarRecetaExistente(documento as string, sexo as string, conceptId as string);
+        res.json(result);
+    } catch (err) {
+        const status = (err as any).status || 400;
+        res.status(status).json(err);
+    }
+};
+
 export const patch = async (req, res) => {
     const operacion = req.body.op ? req.body.op.toLowerCase() : '';
     let result, status;
@@ -100,7 +115,8 @@ const authorizeByToken = async (req: Request, res: Response, next) =>
 RecetasRouter.use(Auth.authenticate());
 RecetasRouter.get('/recetas', authorizeByToken, asyncHandler(get));
 RecetasRouter.get('/recetas/motivos', asyncHandler(getMotivos));
-RecetasRouter.get('/recetas/profesional/:id', authorizeByToken,asyncHandler(getByProfesional));
 RecetasRouter.get('/recetas/filtros', authorizeByToken, asyncHandler(getConFiltros));
+RecetasRouter.get('/recetas/profesional/:id', authorizeByToken, asyncHandler(getByProfesional));
+RecetasRouter.get('/recetas/verificar', authorizeByToken, asyncHandler(getVerificarReceta));
 RecetasRouter.patch('/recetas', authorizeByToken, asyncHandler(patch));
 RecetasRouter.post('/recetas', authorizeByToken, asyncHandler(post));
diff --git a/modules/recetas/recetasController.ts b/modules/recetas/recetasController.ts
index d21576ed04..3351af3738 100644
--- a/modules/recetas/recetasController.ts
+++ b/modules/recetas/recetasController.ts
@@ -928,3 +928,48 @@ export async function actualizarEstadosDispensa() {
         await informarLog.error('actualizarEstadosDispensa', {}, error);
     }
 }
+
+/**
+ * Verifica si existe una receta vigente o pendiente para un paciente y un medicamento (por conceptId SNOMED)
+ * al momento en que se realiza la consulta.
+ *
+ * @param documento   - DNI del paciente (identificador común entre sistemas)
+ * @param sexo        - Sexo del paciente ('masculino' | 'femenino' | 'otro')
+ * @param conceptId   - conceptId SNOMED del medicamento
+ * @returns { existe: boolean, receta?: any }
+ */
+export async function verificarRecetaExistente(documento: string, sexo: string, conceptId: string) {
+    if (!documento) {
+        throw new ParamsIncorrect('Se requiere el documento (DNI) del paciente');
+    }
+    if (!sexo) {
+        throw new ParamsIncorrect('Se requiere el sexo del paciente');
+    }
+    if (!conceptId) {
+        throw new ParamsIncorrect('Se requiere el conceptId del medicamento');
+    }
+
+    const ahora = moment().toDate();
+    const parametro: any = await RecetasParametros.findOne({ key: 'fechaLimite' });
+    const days = (parametro && parametro.value) ? Number(parametro.value) : 30;
+    const fechaLimiteVigentes = moment().subtract(days, 'days').startOf('day').toDate();
+
+    const receta = await Receta.findOne({
+        'paciente.documento': documento,
+        'paciente.sexo': sexo,
+        'medicamento.concepto.conceptId': conceptId,
+        'estadoActual.tipo': { $in: ['vigente', 'pendiente'] },
+        'estadoDispensaActual.tipo': { $nin: ['dispensada'] },
+        $or: [
+            // Vigentes: que no hayan superado el límite de días desde su registro
+            { 'estadoActual.tipo': 'vigente', fechaRegistro: { $gte: fechaLimiteVigentes, $lte: ahora } },
+            // Pendientes: fechaRegistro futura (aún no activa pero pertenece al tratamiento)
+            { 'estadoActual.tipo': 'pendiente', fechaRegistro: { $lte: moment().add(10, 'days').endOf('day').toDate() } }
+        ]
+    }).sort({ fechaRegistro: -1 });
+
+    return {
+        existe: !!receta,
+        receta: receta || null
+    };
+}
