{
  "report_id": "023-cancellation-windows",
  "status": "validated",
  "version": "1.1",
  "publication": {
    "headline": "El 86 % de los centros permite cancelar con dos horas o menos de antelación",
    "canonical_url": "https://wodbuster.com/observatorio/ventanas-cancelacion-clases/",
    "date_modified": "2026-07-18"
  },
  "articles": [
    {
      "id": "076-cancellation-policy-tradeoff",
      "headline": "Dos horas dejan 1,43 puntos más de pérdida de crédito sin una caída clara de la no asistencia",
      "path": "articles/una-o-dos-horas.html",
      "question": "Qué cambia cuando un centro utiliza una ventana de dos horas en lugar de una"
    }
  ],
  "period": {
    "start": "2025-01-01",
    "end": "2025-12-31"
  },
  "sample": {
    "centers": 2164,
    "classes": 7000684,
    "reservations": 47900444,
    "tenants_attempted": 2174,
    "tenants_succeeded": 2174,
    "tenants_failed": 0,
    "centers_paired_60_vs_120": 104
  },
  "definition": {
    "effective_window": "La regla específica de la clase; si está vacía, se utiliza la predeterminada del tipo de entrenamiento.",
    "modal_window": "La ventana aplicada al mayor número de clases de cada centro durante 2025.",
    "no_minimum": "Cero minutos: se puede conservar el crédito cancelando hasta el comienzo de la clase."
  },
  "findings": {
    "centers_two_hours_or_less": 1852,
    "centers_two_hours_or_less_pct": 85.58,
    "centers_no_minimum": 652,
    "centers_one_hour_modal": 502,
    "centers_two_hours_modal": 362,
    "inherited_class_rules_pct": 91.23,
    "rule_mismatch_pct_of_nonattendance": 2.33,
    "centers": 104,
    "lost_credit_60_pct": 2.48,
    "lost_credit_120_pct": 4.26,
    "lost_credit_change_pp": 1.43,
    "nonattendance_60_pct": 31.58,
    "nonattendance_120_pct": 31.23,
    "nonattendance_change_pp": -0.31
  },
  "policy_tradeoff": {
    "definition": "Comparación dentro del mismo centro entre clases con ventanas de 60 y 120 minutos.",
    "primary_threshold_reservations_per_window": 500,
    "sample": {
      "centers": 104,
      "reservations_60": 1224049,
      "reservations_120": 1259807
    },
    "findings": {
      "median_lost_credit_60_pct": 2.48,
      "median_lost_credit_120_pct": 4.26,
      "median_lost_credit_change_pp": 1.43,
      "centers_lost_credit_increases_pct": 80.77,
      "median_nonattendance_60_pct": 31.58,
      "median_nonattendance_120_pct": 31.23,
      "median_nonattendance_change_pp": -0.31,
      "centers_nonattendance_falls_pct": 52.88
    },
    "robustness": [
      {
        "minimum_reservations_per_window": 250,
        "centers": 121,
        "median_lost_credit_change_pp": 1.44,
        "median_nonattendance_change_pp": -0.27
      },
      {
        "minimum_reservations_per_window": 500,
        "centers": 104,
        "median_lost_credit_change_pp": 1.43,
        "median_nonattendance_change_pp": -0.31
      },
      {
        "minimum_reservations_per_window": 1000,
        "centers": 69,
        "median_lost_credit_change_pp": 1.75,
        "median_nonattendance_change_pp": 0.13
      }
    ],
    "interpretation": "La regla cambia mecánicamente qué bajas conservan el crédito. La comparación es descriptiva y no demuestra causalidad."
  },
  "series": {
    "modal_window_bands": [
      {
        "band": "1–30 min",
        "centers": 163,
        "share_pct": 7.53
      },
      {
        "band": "121–240 min",
        "centers": 186,
        "share_pct": 8.6
      },
      {
        "band": "4–12 h",
        "centers": 97,
        "share_pct": 4.48
      },
      {
        "band": "31–60 min",
        "centers": 584,
        "share_pct": 26.99
      },
      {
        "band": "61–120 min",
        "centers": 453,
        "share_pct": 20.93
      },
      {
        "band": "Sin mínimo",
        "centers": 652,
        "share_pct": 30.13
      },
      {
        "band": "Más de 12 h",
        "centers": 29,
        "share_pct": 1.34
      }
    ],
    "selected_outcomes_by_window": [
      {
        "minutes": 0,
        "centers": 1065,
        "reservations": 10635953,
        "refunds": 2633185,
        "lost_credit": 58529,
        "median_lost_credit_pct": 0.12,
        "median_refund_pct": 24.5,
        "median_nonattendance_pct": 24.94,
        "median_attendance_pct": 75.06
      },
      {
        "minutes": 30,
        "centers": 231,
        "reservations": 3019683,
        "refunds": 850696,
        "lost_credit": 57179,
        "median_lost_credit_pct": 1.63,
        "median_refund_pct": 26.48,
        "median_nonattendance_pct": 28.27,
        "median_attendance_pct": 71.73
      },
      {
        "minutes": 60,
        "centers": 715,
        "reservations": 13149609,
        "refunds": 3887536,
        "lost_credit": 389923,
        "median_lost_credit_pct": 2.74,
        "median_refund_pct": 27.83,
        "median_nonattendance_pct": 30.93,
        "median_attendance_pct": 69.07
      },
      {
        "minutes": 120,
        "centers": 502,
        "reservations": 8728901,
        "refunds": 2496216,
        "lost_credit": 384083,
        "median_lost_credit_pct": 3.9,
        "median_refund_pct": 27.59,
        "median_nonattendance_pct": 31.77,
        "median_attendance_pct": 68.23
      },
      {
        "minutes": 240,
        "centers": 94,
        "reservations": 1377000,
        "refunds": 380192,
        "lost_credit": 65871,
        "median_lost_credit_pct": 4.77,
        "median_refund_pct": 23.56,
        "median_nonattendance_pct": 29.89,
        "median_attendance_pct": 70.11
      },
      {
        "minutes": 720,
        "centers": 77,
        "reservations": 307414,
        "refunds": 61379,
        "lost_credit": 21097,
        "median_lost_credit_pct": 6.76,
        "median_refund_pct": 21.2,
        "median_nonattendance_pct": 28.21,
        "median_attendance_pct": 71.79
      }
    ]
  },
  "privacy": {
    "personal_identifiers_stored": false,
    "center_identifiers_exported": false,
    "minimum_centers_per_group": 20,
    "minimum_observations_per_group": 500
  },
  "limitations": [
    "La regla dominante resume la mayoría de clases del centro y no implica que todas usen la misma ventana.",
    "La relación entre ventana y resultado es descriptiva y no demuestra causalidad.",
    "La pérdida de crédito depende por definición del corte configurado; no equivale por sí sola a un no-show.",
    "Las discrepancias pueden incluir excepciones manuales, fronteras temporales y correcciones.",
    "La muestra representa centros activos que usan WodBuster y no todo el mercado español."
  ]
}