{
  "schemaVersion": 1,
  "assetId": "mapa-alcance-producto",
  "variant": "ejemplo",
  "title": "Cuaderno de decisiones",
  "reviewedAt": "2026-09-23",
  "isFictional": true,
  "notice": "Ejemplo ficticio para definir una primera versión. Las condiciones de aceptación son pruebas propuestas, no resultados ya obtenidos.",
  "columns": [
    "task",
    "version",
    "reason",
    "dependency",
    "input",
    "result",
    "error",
    "acceptance"
  ],
  "rows": [
    {
      "id": "create-project",
      "task": "Crear un proyecto",
      "version": "inicial",
      "reason": "Da un lugar al registro de decisiones.",
      "dependency": "Nombre válido y una identidad local estable.",
      "input": "Nombre y propósito opcional.",
      "result": "Proyecto disponible para añadir decisiones.",
      "error": "Nombre vacío o guardado no disponible.",
      "acceptance": "Crear, guardar y volver a abrir el mismo proyecto."
    },
    {
      "id": "record-decision",
      "task": "Registrar una decisión",
      "version": "inicial",
      "reason": "Conserva el contexto de una elección.",
      "dependency": "Proyecto creado y campos definidos.",
      "input": "Título, motivo, alternativas y estado.",
      "result": "Decisión asociada al proyecto.",
      "error": "Falta un título o el motivo requerido para marcarla tomada.",
      "acceptance": "Guardar una decisión válida y corregir una inválida sin perder el texto."
    },
    {
      "id": "edit-decision",
      "task": "Corregir una decisión y su estado",
      "version": "inicial",
      "reason": "El registro debe reflejar una corrección o revisión posterior.",
      "dependency": "Reglas de estado y datos de una decisión existente.",
      "input": "Cambio y motivo cuando corresponda.",
      "result": "Contenido y estado actualizados.",
      "error": "Cambio que no se puede conservar.",
      "acceptance": "Editar, recargar y comprobar que permanece lo guardado."
    },
    {
      "id": "find-decisions",
      "task": "Encontrar por texto o estado",
      "version": "inicial",
      "reason": "Recupera el resultado cuando crece la lista.",
      "dependency": "Decisiones existentes y filtros definidos.",
      "input": "Texto o estado elegido.",
      "result": "Coincidencias y forma de volver a la lista.",
      "error": "Sin coincidencias frente a fallo de carga.",
      "acceptance": "Encontrar una decisión conocida y limpiar el filtro."
    },
    {
      "id": "save-restore",
      "task": "Guardar y recuperar",
      "version": "inicial",
      "reason": "El cuaderno necesita continuidad entre sesiones.",
      "dependency": "Almacenamiento y versión de datos acordados.",
      "input": "Acción de guardar y borrador válido.",
      "result": "El contenido reaparece al volver.",
      "error": "Almacenamiento lleno/desactivado o borrador incompatible.",
      "acceptance": "Guardar, cerrar, abrir y recuperar contenido y estados."
    },
    {
      "id": "export-import",
      "task": "Exportar e importar",
      "version": "inicial",
      "reason": "Permite conservar una copia reutilizable.",
      "dependency": "Formato versionado y validación.",
      "input": "Estado actual o archivo del propio formato.",
      "result": "Copia completa y recuperación tras revisión.",
      "error": "Archivo inválido, demasiado grande o de versión incompatible.",
      "acceptance": "Exportar e importar en una sesión vacía; un error no sustituye datos válidos."
    },
    {
      "id": "team-collaboration",
      "task": "Trabajar varias personas",
      "version": "posterior",
      "reason": "La coordinación introduce una necesidad distinta del registro individual.",
      "dependency": "Identidad, miembros, roles, conflictos y administración.",
      "input": "Equipo y acciones permitidas.",
      "result": "Trabajo compartido bajo reglas definidas.",
      "error": "Acceso incorrecto o cambios incompatibles.",
      "acceptance": "Definir y probar permisos y conflictos antes de incorporar colaboración."
    },
    {
      "id": "review-notices",
      "task": "Avisar de decisiones por revisar",
      "version": "posterior",
      "reason": "Se incorporará cuando haya una necesidad concreta de aviso.",
      "dependency": "Disparadores, destinatario, canal y preferencias.",
      "input": "Regla de aviso y condición.",
      "result": "Aviso pertinente y gestionable.",
      "error": "Aviso repetido o destinatario sin acceso.",
      "acceptance": "Comprobar pertinencia, deduplicación y forma de dejar de recibirlo."
    },
    {
      "id": "attachments",
      "task": "Adjuntar material",
      "version": "posterior",
      "reason": "Puede ampliar contexto, pero el texto resuelve el ejercicio inicial.",
      "dependency": "Formatos, tamaños, almacenamiento, permisos y retención.",
      "input": "Archivo permitido.",
      "result": "Material asociado y accesible a quien corresponde.",
      "error": "Formato no permitido, archivo excesivo o permiso denegado.",
      "acceptance": "Definir necesidad y límites antes de incorporar archivos."
    },
    {
      "id": "real-billing",
      "task": "Cobrar a clientes reales",
      "version": "excluida",
      "reason": "No forma parte del registro individual de este ejercicio.",
      "dependency": "Oferta, precio, proveedor, ciclo de acceso y operación.",
      "input": "Ninguna en esta versión.",
      "result": "No se procesa dinero.",
      "error": "No aplica al recorrido inicial.",
      "acceptance": "La versión inicial no solicita tarjeta ni ejecuta cobros."
    }
  ],
  "license": "CC-BY-4.0",
  "attribution": "Ricardo Huertas",
  "source": "https://www.ricardohuertas.es/recursos/mapa-de-alcance-producto/"
}
