{
  "version": "xarts.graph-relations/1",
  "family": "graph-relations",
  "operation": "state-lifecycle",
  "provenance": {
    "legacyId": "concept-statemachine"
  },
  "data": {
    "states": [
      {
        "id": "s1",
        "kind": "initial",
        "label": "Registrada",
        "row": 0,
        "column": 0,
        "invariants": [
          "equipo y fecha",
          "sin causa"
        ],
        "note": "",
        "modelStatus": "declared",
        "role": "neutral"
      },
      {
        "id": "s2",
        "kind": "state",
        "label": "Diagnosticada",
        "row": 0,
        "column": 1,
        "invariants": [
          "causa escrita",
          "técnico asignado"
        ],
        "note": "",
        "modelStatus": "declared",
        "role": "neutral"
      },
      {
        "id": "s3",
        "kind": "state",
        "label": "En reparación",
        "row": 0,
        "column": 2,
        "invariants": [
          "parte abierto",
          "admite piezas"
        ],
        "note": "",
        "modelStatus": "declared",
        "role": "focus"
      },
      {
        "id": "s4",
        "kind": "final",
        "label": "Cerrada",
        "row": 1,
        "column": 2,
        "invariants": [
          "parte firmado",
          "no admite piezas"
        ],
        "note": "",
        "modelStatus": "declared",
        "role": "neutral"
      },
      {
        "id": "s5",
        "kind": "final",
        "label": "Anulada",
        "row": 1,
        "column": 0,
        "invariants": [
          "queda el motivo",
          "no queda coste"
        ],
        "note": "",
        "modelStatus": "declared",
        "role": "neutral"
      },
      {
        "id": "s6",
        "kind": "state",
        "label": "Esperando repuesto",
        "row": 2,
        "column": 1,
        "invariants": [
          "el taller lo usa"
        ],
        "note": "existe en el taller y no está modelado",
        "modelStatus": "unmodelled",
        "role": "absent"
      }
    ],
    "transitions": [
      {
        "id": "t1",
        "source": "s1",
        "target": "s2",
        "action": "diagnosticar",
        "guard": "hay técnico",
        "authorization": "allowed",
        "loopSide": "top",
        "offset": 0,
        "role": "neutral"
      },
      {
        "id": "t2",
        "source": "s2",
        "target": "s3",
        "action": "abrir parte",
        "guard": "hay repuesto",
        "authorization": "allowed",
        "loopSide": "top",
        "offset": 0,
        "role": "neutral"
      },
      {
        "id": "t3",
        "source": "s3",
        "target": "s3",
        "action": "anotar pieza",
        "guard": "el parte sigue abierto",
        "authorization": "allowed",
        "loopSide": "top",
        "offset": 0,
        "role": "focus"
      },
      {
        "id": "t4",
        "source": "s3",
        "target": "s4",
        "action": "cerrar",
        "guard": "sin piezas pendientes",
        "authorization": "allowed",
        "loopSide": "top",
        "offset": 0,
        "role": "neutral"
      },
      {
        "id": "t5",
        "source": "s2",
        "target": "s5",
        "action": "anular",
        "guard": "el cliente desiste",
        "authorization": "allowed",
        "loopSide": "top",
        "offset": 0,
        "role": "neutral"
      },
      {
        "id": "t6",
        "source": "s3",
        "target": "s6",
        "action": "",
        "guard": "no declarada",
        "authorization": "undeclared",
        "loopSide": "top",
        "offset": 0,
        "role": "absent"
      },
      {
        "id": "t7",
        "source": "s1",
        "target": "s4",
        "action": "cerrar",
        "guard": "sin diagnóstico",
        "authorization": "forbidden",
        "loopSide": "top",
        "offset": 26,
        "role": "warning"
      }
    ]
  },
  "relationship": {
    "kind": "single-object-lifecycle",
    "assertionStatus": "authored-unverified",
    "guardEvaluation": "not-executed",
    "invariantEvaluation": "not-executed",
    "timeEncoding": "none",
    "reachability": "declared-allowed-topology-only",
    "initialStates": "one",
    "finalStates": "no-allowed-outgoing"
  },
  "typography": {
    "body": {
      "size": 19,
      "weight": 700,
      "lineHeight": 27
    },
    "note": {
      "size": 16,
      "weight": 400,
      "lineHeight": 24
    },
    "stamp": {
      "size": 14,
      "weight": 700,
      "lineHeight": 22
    },
    "title": {
      "size": 22,
      "weight": 700,
      "lineHeight": 32
    },
    "action": {
      "size": 16,
      "weight": 500,
      "lineHeight": 19
    }
  },
  "fontFamily": "'Inter', system-ui, -apple-system, sans-serif",
  "measurement": {
    "exportText": "glyph-advances"
  },
  "paints": {
    "neutral": {
      "fill": "surface",
      "stroke": "border",
      "text": "textPrimary",
      "dash": ""
    },
    "focus": {
      "fill": "series.blue",
      "stroke": "series.blue",
      "text": "surface",
      "dash": ""
    },
    "warning": {
      "fill": "surface",
      "stroke": "negative",
      "text": "negative",
      "dash": ""
    },
    "absent": {
      "fill": "none",
      "stroke": "textMuted",
      "text": "textMuted",
      "dash": "6 4"
    },
    "favorable": {
      "fill": "surfaceAlt",
      "stroke": "series.teal",
      "text": "textPrimary",
      "dash": ""
    }
  },
  "layout": {
    "margin": {
      "top": 24,
      "right": 24,
      "bottom": 24,
      "left": 24
    },
    "grid": 8,
    "placement": "vertical-channels",
    "textOverflow": "whole-words",
    "rowGap": 64,
    "columnGap": 44,
    "maximumColumnGap": 140,
    "maximumChannelFraction": 0.46,
    "minimumStateWidth": 90,
    "padding": {
      "x": 14,
      "y": 12
    },
    "maximumInvariants": 3,
    "maximumEdgeLines": 3,
    "initialTextReserve": 20,
    "anchorGap": 20,
    "minimumRotatedSegment": 84,
    "longSegmentThreshold": 220,
    "longSegmentFraction": 0.22,
    "channelStep": 20,
    "channelPadding": 16
  },
  "marks": {
    "boxRadius": 4,
    "thin": 1.25,
    "medium": 2,
    "thick": 4,
    "connector": "textSecondary",
    "arrowLength": 9,
    "arrowHeight": 8,
    "finalInset": 4,
    "loopDepth": 30,
    "loopOpening": 0.24,
    "crossLength": 13,
    "crossRetreat": 34
  },
  "labels": {
    "stamps": {
      "initial": "ESTADO INICIAL",
      "state": "ESTADO",
      "final": "ESTADO FINAL"
    },
    "letterSpacing": 0.08,
    "modelNotice": "Estados e invariantes declarados; guardas sin ejecutar. El recorrido permitido se calcula solo sobre la topología declarada y no demuestra que una guarda se cumpla. Las transiciones ausentes o prohibidas no habilitan recorridos. La distancia no codifica duración.",
    "showModelNotice": true,
    "edgePresentation": "outgoing-records",
    "outgoing": "Transiciones salientes",
    "authorization": {
      "allowed": "Permitida",
      "forbidden": "Prohibida",
      "undeclared": "No declarada"
    },
    "destination": "Destino",
    "action": "Acción",
    "guard": "Guarda"
  },
  "annotations": {
    "band": {
      "text": "ningún estado guarda cuánto lleva el objeto dentro de él",
      "role": "absent"
    },
    "verdict": "El estado que el taller usa a diario no está en el modelo.",
    "verdictLines": 2,
    "bandHeight": 48,
    "noteColor": "textMuted",
    "verdictColor": "accent",
    "separatorOpacity": 0.5
  },
  "document": {
    "textOverflow": "preserve",
    "header": {
      "title": "Un objeto no tiene pasos: tiene estados, y cada salto pide su guarda",
      "subtitle": "Ciclo de vida de una intervención de mantenimiento — qué es cierto en cada estado, qué verbo mueve al objeto y bajo qué condición.",
      "source": "Esquema conceptual del ciclo de vida declarado en el modelo. Sin cifras, sin escala y sin duración: una transición más larga no tarda más."
    },
    "spacing": {
      "horizontalPadding": 24,
      "topPadding": 22,
      "bottomPadding": 16,
      "minimumTextGap": 4
    }
  },
  "presentation": {
    "theme": "anlak",
    "dimensions": {
      "width": 940,
      "height": 2422
    },
    "locale": "es-ES",
    "fonts": "reference",
    "surface": "theme",
    "framePadding": 24
  },
  "output": {
    "filename": "concept-statemachine",
    "embedSpec": true,
    "geometryDecimals": 2
  }
}
