{
  "version": "xarts.graph-relations/1",
  "family": "graph-relations",
  "operation": "object-relations",
  "provenance": {
    "legacyId": "concept-erd"
  },
  "data": {
    "nodes": [
      {
        "id": "o1",
        "label": "Huésped",
        "kind": "entity",
        "row": 0,
        "column": 0,
        "fields": [
          {
            "id": "f1",
            "label": "id_huesped: entero",
            "key": "PK"
          },
          {
            "id": "f2",
            "label": "documento: texto",
            "key": ""
          },
          {
            "id": "f3",
            "label": "país: texto",
            "key": ""
          }
        ],
        "conforms": [],
        "note": "",
        "zone": "",
        "role": "neutral"
      },
      {
        "id": "o2",
        "label": "Reserva",
        "kind": "entity",
        "row": 1,
        "column": 0,
        "fields": [
          {
            "id": "f1",
            "label": "localizador: texto",
            "key": "PK"
          },
          {
            "id": "f2",
            "label": "id_huesped: entero",
            "key": "FK"
          },
          {
            "id": "f3",
            "label": "entrada: fecha",
            "key": ""
          },
          {
            "id": "f4",
            "label": "salida: fecha",
            "key": ""
          },
          {
            "id": "f5",
            "label": "canal: texto",
            "key": ""
          }
        ],
        "conforms": [],
        "note": "id_huesped admite nulo: se rellena en el check-in",
        "zone": "",
        "role": "neutral"
      },
      {
        "id": "o3",
        "label": "Factura",
        "kind": "entity",
        "row": 2,
        "column": 0,
        "fields": [
          {
            "id": "f1",
            "label": "id_factura: texto",
            "key": "PK"
          },
          {
            "id": "f2",
            "label": "localizador: texto",
            "key": "FK"
          },
          {
            "id": "f3",
            "label": "total: importe",
            "key": ""
          }
        ],
        "conforms": [],
        "note": "",
        "zone": "",
        "role": "neutral"
      },
      {
        "id": "o4",
        "label": "TipoHabitación",
        "kind": "entity",
        "row": 0,
        "column": 2,
        "fields": [
          {
            "id": "f1",
            "label": "id_tipo: entero",
            "key": "PK"
          },
          {
            "id": "f2",
            "label": "nombre: texto",
            "key": ""
          },
          {
            "id": "f3",
            "label": "aforo: entero",
            "key": ""
          }
        ],
        "conforms": [],
        "note": "",
        "zone": "",
        "role": "neutral"
      },
      {
        "id": "o5",
        "label": "LíneaEstancia",
        "kind": "entity",
        "row": 1,
        "column": 1,
        "fields": [
          {
            "id": "f1",
            "label": "id_linea: entero",
            "key": "PK"
          },
          {
            "id": "f2",
            "label": "localizador: texto",
            "key": "FK"
          },
          {
            "id": "f3",
            "label": "número: texto",
            "key": "FK"
          },
          {
            "id": "f4",
            "label": "noche: fecha",
            "key": ""
          },
          {
            "id": "f5",
            "label": "precio: importe",
            "key": ""
          }
        ],
        "conforms": [],
        "note": "",
        "zone": "",
        "role": "neutral"
      },
      {
        "id": "o6",
        "label": "Tarifa",
        "kind": "entity",
        "row": 2,
        "column": 1,
        "fields": [
          {
            "id": "f1",
            "label": "id_tarifa: entero",
            "key": "PK"
          },
          {
            "id": "f2",
            "label": "temporada: texto",
            "key": ""
          }
        ],
        "conforms": [],
        "note": "el contrato la nombra; no hay tabla",
        "zone": "",
        "role": "absent"
      },
      {
        "id": "o7",
        "label": "Habitación",
        "kind": "entity",
        "row": 0,
        "column": 1,
        "fields": [
          {
            "id": "f1",
            "label": "número: texto",
            "key": "PK"
          },
          {
            "id": "f2",
            "label": "id_tipo: entero",
            "key": "FK"
          },
          {
            "id": "f3",
            "label": "planta: entero",
            "key": ""
          }
        ],
        "conforms": [],
        "note": "",
        "zone": "",
        "role": "neutral"
      },
      {
        "id": "o8",
        "label": "OcupaciónDiaria",
        "kind": "view",
        "row": 1,
        "column": 2,
        "fields": [
          {
            "id": "f1",
            "label": "noche: fecha",
            "key": ""
          },
          {
            "id": "f2",
            "label": "ocupadas: entero",
            "key": ""
          },
          {
            "id": "f3",
            "label": "libres: entero",
            "key": ""
          }
        ],
        "conforms": [],
        "note": "se calcula al leer; nadie la referencia",
        "zone": "",
        "role": "neutral"
      }
    ],
    "edges": [
      {
        "id": "r1",
        "label": "titular",
        "source": "o1",
        "target": "o2",
        "sourceCardinality": "0..1",
        "targetCardinality": "0..N",
        "offset": 0,
        "role": "focus"
      },
      {
        "id": "r2",
        "label": "desglosa",
        "source": "o2",
        "target": "o5",
        "sourceCardinality": "1",
        "targetCardinality": "1..N",
        "offset": 0,
        "role": "neutral"
      },
      {
        "id": "r3",
        "label": "factura",
        "source": "o2",
        "target": "o3",
        "sourceCardinality": "1",
        "targetCardinality": "0..1",
        "offset": 0,
        "role": "neutral"
      },
      {
        "id": "r4",
        "label": "clasifica",
        "source": "o4",
        "target": "o7",
        "sourceCardinality": "1",
        "targetCardinality": "1..N",
        "offset": 0,
        "role": "neutral"
      },
      {
        "id": "r5",
        "label": "ocupa",
        "source": "o7",
        "target": "o5",
        "sourceCardinality": "1",
        "targetCardinality": "0..N",
        "offset": 0,
        "role": "neutral"
      },
      {
        "id": "r6",
        "label": "alimenta",
        "source": "o5",
        "target": "o8",
        "sourceCardinality": "0..N",
        "targetCardinality": "1",
        "offset": 0,
        "role": "neutral"
      },
      {
        "id": "r7",
        "label": "tarifica",
        "source": "o6",
        "target": "o5",
        "sourceCardinality": "0..1",
        "targetCardinality": "0..N",
        "offset": 0,
        "role": "absent"
      }
    ]
  },
  "relationship": {
    "profile": "relational-schema",
    "cardinalityMeaning": "declared-constraints-not-counts",
    "evaluation": "none",
    "causalEvidence": "not-asserted",
    "fieldLinking": "not-inferred",
    "conformance": "declared-not-executed",
    "order": "input"
  },
  "typography": {
    "body": {
      "size": 19,
      "weight": 700,
      "lineHeight": 23
    },
    "note": {
      "size": 16,
      "weight": 400,
      "lineHeight": 24
    },
    "stamp": {
      "size": 14,
      "weight": 700,
      "lineHeight": 22
    },
    "title": {
      "size": 22,
      "weight": 700,
      "lineHeight": 32
    }
  },
  "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": 36,
      "bottom": 24,
      "left": 24
    },
    "grid": 12,
    "placement": "vertical-input",
    "rowGap": 72,
    "columnGap": 56,
    "maximumColumnGap": 104,
    "padding": {
      "x": 14,
      "y": 12
    },
    "anchorGap": 30,
    "minimumRotatedSegment": 96,
    "longSegmentThreshold": 240,
    "longSegmentFraction": 0.34,
    "maximumFields": 100,
    "maximumConforms": 100,
    "zonePadding": 12,
    "zoneLabelHeight": 24,
    "textOverflow": "whole-words",
    "channelStep": 32,
    "channelPadding": 24
  },
  "marks": {
    "boxRadius": 4,
    "thin": 1.25,
    "medium": 2,
    "thick": 4,
    "connector": "textSecondary",
    "keyColor": "textSecondary",
    "cardinalityColor": "textPrimary",
    "zoneBorder": "border",
    "zoneColor": "textMuted",
    "interfaceOpacity": 0.12,
    "roleAwareSecondaryText": true,
    "hatchWidth": 7,
    "hatchStep": 6,
    "hatchStroke": 0.9,
    "footLength": 11,
    "footHeight": 7,
    "oneBarHeight": 7,
    "oneBarDistance": 6,
    "glyphGap": 5,
    "zeroRadius": 4,
    "arrowLength": 9,
    "arrowHeight": 8
  },
  "labels": {
    "stamps": {
      "entity": "ENTIDAD",
      "view": "VISTA · SIN CLAVE",
      "object": "OBJETO",
      "interface": "INTERFAZ",
      "derived": "DERIVADO SIN TABLA"
    },
    "conforms": "SE CONFORMAN",
    "modelNotice": "Cardinalidades y claves declaradas, sin recuentos. Los enlaces unen entidades; no se infieren columnas enlazadas ni se ejecutan restricciones.",
    "showModelNotice": true
  },
  "annotations": {
    "band": {
      "text": "la cardinalidad es notación, no recuento: ninguna línea mide nada",
      "role": "absent"
    },
    "verdict": "El titular es opcional: huéspedes y reservas nunca van a cuadrar.",
    "verdictLines": 2,
    "bandHeight": 48,
    "noteColor": "textMuted",
    "verdictColor": "accent",
    "separatorOpacity": 0.5
  },
  "document": {
    "textOverflow": "preserve",
    "header": {
      "title": "Ninguna relación obliga a que una reserva tenga titular",
      "subtitle": "Esquema de reservas de un hotel independiente: el extremo de «Huésped» es un círculo —cero o uno—, así que «Reserva.id_huesped» admite nulo y el recuento de huéspedes nunca cuadra con el de reservas"
    },
    "footer": {
      "source": "xarts · ejemplo de demostración",
      "notes": "Esquema ilustrativo para explorar la forma y sustituirlo por el propio."
    },
    "spacing": {
      "horizontalPadding": 24,
      "topPadding": 22,
      "bottomPadding": 16,
      "minimumTextGap": 4
    }
  },
  "presentation": {
    "theme": "anlak",
    "dimensions": {
      "width": 940,
      "height": 2184
    },
    "locale": "es-ES",
    "fonts": "reference",
    "surface": "theme",
    "framePadding": 24
  },
  "output": {
    "filename": "concept-erd",
    "embedSpec": true,
    "geometryDecimals": 2
  }
}
