Estado y alcance
Contrato candidato R4-C4, con pruebas conectadas dirigidas aprobadas y pendiente de aceptación completa e integración. La protección pertenece al consumidor Difactu; no cambia el contrato de adición del perfil MCP público ni el editor manual de Nubidoc.Añadido protegido
POST /api/difactu/draft-add-lines-v2 (addDraftLinesV2) recibe las mismas
entradas de línea que el endpoint legado, junto con conversation_key obligatorio.
Si una entrada coincide exactamente
por identidad de catálogo o nombre normalizado con una línea incompleta,
conserva el lote como propuesta pendiente y no aplica ninguna entrada.
La vista pública contiene draft.line_addition.proposal_ref y
draft.line_addition.conflicts, con
índice de entrada desde 1, concepto y refs candidatas (L1, L2, etc.). No
expone IDs de negocio ni tokens de confirmación. La referencia de propuesta
no sustituye autenticación ni permisos.
Resolución del lote
POST /api/difactu/draft-resolve-line-addition
(resolveDraftLineAddition) recibe conversation_key, proposal_ref y
choices, todos obligatorios. Cada entrada
en conflicto exige una elección:
complete_existing, conrefcandidata: rellena solo datos faltantes y conserva precio, cantidad y campos ya resueltos.append_new: añade la entrada como otra línea independiente.
Contrato del consumidor y publicación
El gateway conserva el nombreaddDraftLines, pero llama siempre a v2.
El aviso corta el turno y la resolución solo se habilita para una propuesta
que ya estuviera presente al inicio de otro turno. El modelo aporta elecciones,
no la referencia autorizada. Una lectura fría muestra primero la pregunta.
Publicar el backend antes que el gateway: si falta v2, el consumidor muestra
un error y no vuelve al añadido legado. El endpoint anterior conserva su
comportamiento; este cambio no certifica otros clientes MCP.
No hay migración: la propuesta cabe en el payload JSON existente. No se deben
borrar propuestas pendientes durante un rollback ni tratarlas como resúmenes
confirmados. Esta protección no detecta todas las paráfrasis ni fusiona líneas
completas parecidas.
Evidencia de aceptación parcial (07/09/2026)
Backend0b8fa251a comprobado en el banner DEV :466, gateway 75883bb y
MCP propio apuntando al mismo candidato. Sin migraciones pendientes ni DDL.
Seis comprobaciones HTTP/MariaDB aprobaron, incluidas dos resoluciones concurrentes
con respuestas 200/409 y una sola aplicación del lote. El borrador sintético
propio se canceló y se verificó; su cuenta de prueba permanece.
Dos evals individuales con el modelo configurado verificaron una línea y 121 €
al completar, y dos líneas y 242 € al añadir otra deliberadamente. Preparan
el conflicto mediante API; no afirman que el modelo haya generado esa precondición.
La repetición de las suites completas sigue siendo necesaria: los pases dirigidos
no certifican el lanzamiento ni todos los comportamientos del modelo.
Cliente ya seleccionado en Difactu
POST /api/difactu/draft-set-client admite selected_patient_id como parámetro
opcional aditivo, junto con conversation_key. Es el randomcode del cliente ya
seleccionado, exclusivo con todos los demás campos de identidad. La operación
conserva autenticación, scopes, bloqueo del borrador y confirmación final.
Valida que el cliente exista, no esté eliminado y pertenezca a la cuenta
autenticada. Puede resolver un cliente todavía vacío, seleccionar una identidad
presente en los candidatos o repetir la misma selección ya resuelta. Rechaza
identidades duplicadas pendientes, candidatos distintos y sustituciones de otro
cliente ya resuelto, sin guardar cambios. Devuelve invalid_selected_client
(400), patient_not_found (404) o selected_client_conflict (409), según el caso.
La vista continúa sin exponer el identificador; las líneas se conservan.
El gateway de Difactu obtiene este identificador del contexto de un cliente
registrado y confirmado, no de texto libre del modelo. Así puede continuar con
un presupuesto para «ese cliente» sin repetir la elección de una única opción,
incluso si el cliente no tiene NIF. Aportar otro cliente o datos fiscales nuevos
mantiene el flujo de resolución habitual. No cambia el editor manual de Nubidoc.
