Diseño: un elemento de la matriz por cada compromiso explícito; se omiten los resúmenes, priority y sentiment. Para un owner o una fecha desconocidos se utiliza null porque la ausencia es significativa; una cadena vacía no es válida. «Pronto» se conserva en evidence, pero no puede rellenar due_date.
Esquema: action es una cadena obligatoria no vacía; owner es una clave obligatoria de tipo cadena|null; due_date es una clave obligatoria de tipo cadena|null, solo con formato YYYY-MM-DD; status es una enumeración obligatoria; evidence es un objeto obligatorio con speaker como cadena no vacía, timestamp con formato HH:MM:SS y excerpt como cadena no vacía de ≤200 caracteres. Orden de las claves: action, owner, due_date, status, evidence. Regla entre campos: el estado completed requiere una prueba que indique que se completó; due_date debe ser null salvo que evidence contenga una fecha exacta.
Cláusula exacta del prompt: «Devuelve únicamente una matriz JSON UTF-8. Cada compromiso explícito es un objeto con claves en este orden: action, owner, due_date, status, evidence. Usa null para un responsable o una fecha límite exacta que no se hayan indicado; nunca omitas claves ni conviertas expresiones relativas en fechas. status debe ser proposed, confirmed, completed o cancelled. evidence debe contener speaker, timestamp con formato HH:MM:SS y un fragmento de la fuente que no supere los 200 caracteres. Devuelve [] cuando no exista ningún compromiso explícito. No añadas prosa ni Markdown».
Válido: [{"action":"Enviar el presupuesto revisado","owner":"Nora","due_date":null,"status":"confirmed","evidence":{"speaker":"Nora","timestamp":"00:14:22","excerpt":"Enviaré pronto el presupuesto revisado."}
}]. Vacío válido: []. No válido: due_date con el valor "pronto" incumple la regla ISO; omitir owner incumple la regla de clave obligatoria. La revisión humana todavía debe verificar si el fragmento constituye un compromiso y si «Nora» corresponde a la persona correcta.