Ayuda al diagnóstico
POST /diagnosis-support devuelve una lista clasificada de condiciones probables para una o más imágenes de piel, además de indicadores de riesgo y un bloque de validez de medios por imagen.
Petición
- Python
- JavaScript
- cURL
import requests
import base64
base_url = "<base_url>"
url = f"{base_url}/diagnosis-support"
# Encode each image you want to analyse. Multiple images can be sent in
# the same request: each image becomes a separate item in `payload[]`.
image_path = "<path_to_image>" # e.g. "lesion_image.jpg"
with open(image_path, "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")
json_payload = {
"payload": [
{
"contentAttachment": {
"data": image_data, # required base64-encoded image bytes
"title": "Lesion close-up", # optional free-text label for the image
"contentType": "image/jpeg" # optional defaults to image/png
}
}
# Add more {"contentAttachment": {...}} items here for additional images.
]
}
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer <access_token>" # obtained from /login
}
response = requests.post(url, json=json_payload, headers=headers)
result = response.json()
const fs = require("fs");
const baseUrl = "<base_url>";
const imagePath = "<path_to_image>"; // e.g. "lesion_image.jpg"
const imageData = fs.readFileSync(imagePath).toString("base64");
const json_payload = {
payload: [
{
contentAttachment: {
data: imageData, // required base64-encoded image bytes
title: "Lesion close-up", // optional free-text label for the image
contentType: "image/jpeg", // optional defaults to image/png
},
},
// Add more entries for additional images.
],
};
const response = await fetch(`${baseUrl}/diagnosis-support`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer <access_token>",
},
body: JSON.stringify(json_payload),
});
const result = await response.json();
# Replace <base64_encoded_image_data> with the Base64-encoded contents of your image.
# Generate it locally with: base64 -i <path_to_image>
curl -X POST "<base_url>/diagnosis-support" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access_token>" \
-d '{
"payload": [{
"contentAttachment": {
"data": "<base64_encoded_image_data>",
"title": "Lesion close-up",
"contentType": "image/jpeg"
}
}]
}'
Campos de la petición
payload[]matriz de imágenes a analizar. Se requiere al menos una entrada; varias entradas se agregan en un único resultado.payload[].contentAttachment(requerido) envolvente de imagen; consulte la sección compartida Image attachment para ver los campos.
La cabecera Authorization es el token de portador estándar; consulte Authentication header.
Respuesta
La respuesta sigue la forma del recurso FHIR DiagnosticReport. La parte superior de la respuesta lleva el resultado agregado; imagingAnalysis[] contiene el desglose por imagen incluyendo mapas de calor de explicabilidad.
{
"resourceType": "DiagnosticReport",
"identifier": {
"use": "official",
"value": "f426f15d-fcea-4bd0-942e-7528bf163c5d"
},
"status": "preliminary",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0074",
"systemDisplay": "HL7 FHIR",
"code": "IMG",
"display": "Diagnostic Imaging"
}
],
"text": "Diagnostic imaging"
}
],
"code": {
"coding": [
{
"system": "http://loinc.org/",
"systemDisplay": "Logical Observation Identifiers Names and Codes (LOINC)",
"code": "100063-7",
"display": "Primary skin concern"
}
],
"text": "Skin condition analysis"
},
"issued": "2026-02-13T14:58:27.466367",
"analysisDuration": 1.11359,
"performanceIndicator": {
"sensitivity": 66.97074175,
"specificity": 98.58783484,
"entropy": 8.4339413
},
"clinicalIndicator": {
"hasCondition": 99.96490132,
"pigmentedLesion": 0.53779946,
"malignancy": 0.24731814,
"urgentReferral": 0.67645404,
"highPriorityReferral": 1.51389415
},
"conclusion": [
{
"code": {
"coding": [
{
"system": "https://icd.who.int/browse/2025-01/mms/en",
"systemDisplay": "ICD-11",
"version": "2025-01",
"code": "EA89",
"display": "Generalised eczematous dermatitis of unspecified type"
}
],
"text": "Eczematous dermatitis"
},
"probability": 94.89877797
},
{
"code": {
"coding": [
{
"system": "https://icd.who.int/browse/2025-01/mms/en",
"systemDisplay": "ICD-11",
"version": "2025-01",
"code": "1F28",
"display": "Dermatophytosis"
}
],
"text": "Tinea"
},
"probability": 0.15845833
}
// ... 4 more shown in production for the top 5; full array contains every supported pathology.
],
"imagingAnalysis": [
{
"mediaValidity": { /* see the "Image quality assessment" common building block */ },
"performanceIndicator": { "entropy": 8.4339413 },
"clinicalIndicator": { /* same shape as top-level clinicalIndicator */ },
"conclusion": [
{
"code": { /* same ICD-11 coding as top-level conclusion[] */ },
"probability": 94.8987782,
"explainability": {
"heatMap": { /* visual attention map for this conclusion */ }
}
}
// ...
]
}
]
}
Campos de nivel superior
Los campos FHIR de nivel superior (resourceType, identifier, status, issued, analysisDuration) siguen el FHIR response envelope compartido. Este endpoint también lleva bloques category y code que describen el tipo de informe (Diagnostic Imaging, LOINC 100063-7 "Primary skin concern"); son estáticos y pueden ignorarse en la mayoría de integraciones.
performanceIndicator: rendimiento del modelo para esta predicción
"performanceIndicator": {
"sensitivity": 66.97074175,
"specificity": 98.58783484,
"entropy": 8.4339413
}
sensitivityla sensibilidad del modelo (tasa de verdaderos positivos, en porcentaje) en el punto operativo utilizado para esta predicción.specificityla especificidad del modelo (tasa de verdaderos negativos, en porcentaje) en el punto operativo utilizado para esta predicción.entropyentropía de Shannon de la distribución de probabilidad predicha. Los valores más altos significan que el modelo es más incierto acerca de qué condición está presente.
clinicalIndicator: indicadores de riesgo
"clinicalIndicator": {
"hasCondition": 99.96490132,
"pigmentedLesion": 0.53779946,
"malignancy": 0.24731814,
"urgentReferral": 0.67645404,
"highPriorityReferral": 1.51389415
}
Todos los valores son porcentajes (0–100):
hasConditionprobabilidad de que una condición de piel relevante esté presente en la imagen.pigmentedLesionprobabilidad de que la lesión sea pigmentada (relevante para flujos de trabajo de triaje de melanoma).malignancyprobabilidad de malignidad.urgentReferralprobabilidad de que el caso justifique derivación urgente a un especialista.highPriorityReferralprobabilidad de que el caso justifique derivación de alta prioridad (menos urgente queurgentReferralpero aún expedida).
conclusion[]: diagnóstico diferencial clasificado
{
"code": {
"coding": [
{
"system": "https://icd.who.int/browse/2025-01/mms/en",
"systemDisplay": "ICD-11",
"version": "2025-01",
"code": "EA89",
"display": "Generalised eczematous dermatitis of unspecified type"
}
],
"text": "Eczematous dermatitis"
},
"probability": 94.89877797
}
code.coding[].systemURL del sistema de codificación; siempre ICD-11 para este endpoint.code.coding[].versionversión de lanzamiento de ICD-11 (por ejemplo,2025-01).code.coding[].code/code.coding[].displaycódigo ICD-11 y su presentación oficial.code.textetiqueta corta y legible por humanos.probabilityprobabilidad predicha (0–100) para esta conclusión.
La matriz está ordenada en probabilidad descendente. En producción contiene todas las patologías soportadas (300+ entradas); solo las entradas principales son clínicamente significativas. Filtre la matriz a los 5 elementos principales para mostrar, y presente una opción "más" si desea exponer la cola larga.
imagingAnalysis[]: desglose por imagen
imagingAnalysis refleja el resultado de nivel superior para cada imagen de entrada individualmente (una entrada por elemento en su payload[] de solicitud). Cada entrada contiene:
mediaValiditybloque de calidad de imagen; consulte la sección Image quality assessment.performanceIndicator.entropyincertidumbre por imagen.clinicalIndicatorindicadores de riesgo por imagen (la misma forma que el bloque de nivel superior).conclusion[]diagnósticos clasificados por imagen; cada elemento lleva además un campoexplainability.heatMapcon un mapa de atención visual que destaca las regiones que el modelo utilizó para llegar a esa conclusión. Una vez decodificado, el mapa de calor es una superposición de imagen donde los colores más cálidos indican las regiones que el modelo pesó más intensamente:

Forma de explainability.heatMap
"explainability": {
"heatMap": {
"title": "Heat map showing which regions of the image the AI focuses its attention to predict this class.",
"contentType": "image/jpeg",
"data": "<base64_encoded_image_data>",
"height": 238,
"width": 284,
"colorModel": "RGB"
}
}
titledescripción legible por humanos del mapa de calor.contentTypetipo MIME de la imagen codificada (típicamenteimage/jpeg).databytes de imagen codificados en Base64. Omitido del ejemplo anterior porque la carga es grande; decodifíquelo de la misma manera que cualquier otra imagen Base64.height/widthdimensiones de píxeles de la imagen decodificada.colorModelespacio de color de la imagen decodificada (por ejemplo,RGB).