Casos de uso
El iframe devuelve una carga JSON a través de la devolución de llamada analysis_completed, y el informe de diagnóstico completo se puede extraer de la API usando el anonymousDiagnosticReportId que contiene. Ese JSON es la materia prima que tu aplicación host utiliza para impulsar flujos de trabajo.
La aplicación host obtiene el informe escuchando analysis_completed y luego llamando a Salida > Punto final de API. El esquema del JSON se describe en la sección Salida > Esquema JSON.
1. Triaje de cáncer de piel en una aplicación para pacientes
Objetivo: Cuando el iframe está incrustado dentro de una aplicación orientada al paciente, enrutar automáticamente al paciente al nivel de atención apropiado, sin mostrarle nunca la salida clínica bruta.
Este patrón combina dos parámetros del iframe:
isForPatient=1: simplifica la redacción del cuestionario para usuarios no clínicos.enableResult=0: oculta el resultado de diagnóstico al usuario, por lo que la aplicación host es el único consumidor del JSON.
La aplicación host recibe el informe a través de analysis_completed, evalúa las claves devueltas bajo result, y decide qué ve el paciente a continuación: un mensaje de autocuidado, una pantalla de reserva de atención primaria, o una derivación urgente a un dermatólogo.
En lugar de confiar únicamente en malignancy, el triaje combina varias señales devueltas por el dispositivo:
result.preliminaryFindings.urgentReferral: probabilidad (0 a 100) de que el paciente deba ser visto por un médico dentro de las próximas 48 horas. Impulsa la rama de derivación urgente.result.preliminaryFindings.highPriorityReferral: probabilidad (0 a 100) de que el paciente deba ser visto dentro de los próximos 15 días. Captura casos que no son urgentes en 48 horas pero aún justifican una cita acelerada.result.metrics.entropy: una medida de qué tan seguro está el IA en su respuesta. La entropía más baja significa mayor confianza; los casos por encima del umbral de entropía se escalan a un clínico como un respaldo de seguridad para que los informes inciertos nunca se enruten al autocuidado.result.scoringSystems[]: cuando el algoritmo de apoyo diagnóstico alcanza suficiente confianza, se calcula el sistema de puntuación relevante (para lesiones pigmentadas, esto es típicamente la lista de verificación de 7 puntos, códigosevenPc). Cada entrada tiene unscore.severity.valuede1(bajo),2(moderado) o3(alto).result.preliminaryFindings.hasCondition: probabilidad de que exista una condición en absoluto - utilizado al final de la cascada para decidir entre atención primaria y autocuidado.
El paciente nunca ve las probabilidades subyacentes; solo ve la acción que tu aplicación presenta.
window.addEventListener("message", async function (event) {
if (event.data.message !== "analysis_completed") return;
const report = await fetchReportFromApi(event.data.id);
const { preliminaryFindings, scoringSystems, metrics } = report.result;
const sevenPc = scoringSystems?.find((s) => s.scoringSystem.code === "sevenPc");
if (preliminaryFindings.urgentReferral > 60) {
showUrgentDermatologistScreen();
} else if (metrics.entropy != null && metrics.entropy > 0.5) {
// Low model confidence - escalate as a safety fallback.
openDermatologyBooking();
} else if (preliminaryFindings.highPriorityReferral > 30) {
openDermatologyBooking();
} else if (sevenPc?.score?.severity?.value === 3) {
openDermatologyBooking();
} else if (preliminaryFindings.hasCondition > 70) {
openPrimaryCareBooking();
} else {
showSelfCareGuidance();
}
});
Los valores X, Y, Z y E (y los valores 60 / 30 / 70 / 0.5 mostrados anteriormente) son ilustrativos. Cada organización gestora debe elegir sus propios umbrales en función de sus protocolos clínicos y el equilibrio entre falsos positivos y falsos negativos. Consulta la sección Umbralización en la página de flujos de trabajo de Legit.Health Plus para obtener orientación, incluido un ejemplo de matriz de confusión elaborada.
2. Monitoreo de severidad longitudinal
Objetivo: Rastrear cómo evoluciona la condición de un paciente a lo largo del tiempo almacenando puntuaciones de severidad devueltas por el iframe y renderizando una tendencia en la aplicación host.
El iframe en sí no retiene información sobre usuarios, por lo que no puede vincular dos informes para el mismo paciente. Para habilitar el monitoreo longitudinal, la aplicación host debe:
- Pasar un identificador de paciente estable a través de
extraDatacada vez que se inicia el iframe (consulta la página Personalizar). - En
analysis_completed, obtén el informe y persiste los valores de severidad relevantes deresult.scoringSystems[](elscore.value, elscoringSystem.codecomosevenPc,apasiLocaloaladinLocal, y el depósitoscore.severity.value) en su propia base de datos, codificada por ese identificador. - Renderiza un gráfico histórico de las puntuaciones persistidas. Esta visualización es construida y mantenida por la aplicación host; el iframe no la proporciona.
window.addEventListener("message", async function (event) {
if (event.data.message !== "analysis_completed") return;
const report = await fetchReportFromApi(event.data.id);
const patientId = report.extraData;
for (const entry of report.result.scoringSystems ?? []) {
await db.severityScores.insert({
patientId,
scoringSystemCode: entry.scoringSystem.code,
scoringSystemName: entry.scoringSystem.name,
score: entry.score?.value,
severityValue: entry.score?.severity?.value,
reduction: entry.reduction,
timestamp: report.createdAt,
});
}
});
Cada entrada del sistema de puntuación ya expone un campo reduction: el cambio porcentual versus el informe anterior para el mismo paciente. Es null en el primer informe y se completa después, por lo que la aplicación host puede mostrar rápidamente un indicador "mejorando / empeorando" sin computar el delta en sí.
Una vez que los datos se almacenan, la aplicación host puede crear características clínicas sobre ellos. Por ejemplo, puede comparar la puntuación más reciente con la línea de base al inicio del tratamiento, marcar trayectorias que empeoran para un clínico, o mostrar al paciente un gráfico longitudinal de su propia condición.
Los dos patrones son complementarios: el flujo de triaje inteligente decide qué hacer ahora mismo, mientras que el monitoreo longitudinal construye el contexto histórico que permite a un clínico interpretar la puntuación de hoy contra la propia trayectoria del paciente.