{"id":409,"date":"2026-10-12T00:18:59","date_gmt":"2026-10-12T00:18:59","guid":{"rendered":"https:\/\/posdonpedro.com\/negociosnubeIA\/calculadora-de-ocupacion-hotelera-adr-y-revpar\/"},"modified":"2026-10-12T00:19:09","modified_gmt":"2026-10-12T00:19:09","slug":"calcular-ocupacion-hotelera","status":"publish","type":"page","link":"https:\/\/posdonpedro.com\/negociosnubeIA\/calcular-ocupacion-hotelera\/","title":{"rendered":"Calculadora de ocupaci\u00f3n hotelera, ADR y RevPAR"},"content":{"rendered":"\n<style>\n.dph{max-width:820px;margin:0 auto 3rem;color:#1e293b;font-family:inherit}\n.dph *{box-sizing:border-box}\n.dph-hero{background:linear-gradient(135deg,#0f172a 0%,#1e3a5f 100%);color:#cbd5e1;border-radius:1.25rem;padding:2rem 1.75rem;text-align:center;margin-bottom:1.5rem}\n.dph-hero p{margin:0;font-size:1.05rem;line-height:1.6}\n.dph-hero strong{color:#4ade80}\n.dph-steps{display:flex;gap:.5rem;justify-content:center;flex-wrap:wrap;margin-top:1rem}\n.dph-steps span{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);border-radius:999px;padding:.35rem .9rem;font-size:.85rem;color:#e2e8f0}\n.dph-card{background:#fff;border:1px solid #e2e8f0;border-radius:1.25rem;box-shadow:0 4px 24px rgba(0,0,0,.06);padding:1.5rem;margin-bottom:1.5rem}\n.dph-card h2{font-size:1.15rem;margin:0 0 1rem;color:#0f172a}\n.dph-card h2 span{font-weight:400;color:#64748b;font-size:.85rem}\n.dph-row{display:flex;gap:.75rem;flex-wrap:wrap}\n.dph-f{flex:1;min-width:200px;margin-bottom:1rem}\n.dph-f label{display:block;font-weight:700;font-size:.85rem;color:#0f172a;margin-bottom:.35rem}\n.dph-f small{display:block;color:#64748b;font-size:.78rem;margin-top:.25rem}\n.dph input{width:100%;padding:.65rem .8rem;border:2px solid #e2e8f0;border-radius:.65rem;font-size:1rem;color:#0f172a;background:#fff;font-family:inherit}\n.dph input:focus{outline:none;border-color:#2563eb}\n.dph input[type=range]{padding:0;border:none;accent-color:#16a34a;height:2rem}\n.dph-tools{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1rem}\n.dph-btn{border:none;border-radius:.75rem;padding:.75rem 1.1rem;font-weight:700;cursor:pointer;font-size:.92rem;font-family:inherit}\n.dph-btn-dark{background:#0f172a;color:#4ade80}\n.dph-btn-light{background:#e2e8f0;color:#0f172a}\n.dph-btn-wa{background:#25d366;color:#fff}\n.dph-btn-big{width:100%;font-size:1.1rem;padding:1rem;background:linear-gradient(135deg,#16a34a,#22c55e);color:#fff;box-shadow:0 6px 18px rgba(34,197,94,.35)}\n.dph-err{display:none;background:#fef2f2;color:#991b1b;border:1px solid #fecaca;padding:.7rem .9rem;border-radius:.65rem;font-size:.9rem;margin-bottom:.75rem}\n.dph-hint{font-size:.9rem;color:#64748b;margin:0}\n.dph-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:.6rem;margin-bottom:1rem}\n.dph-kpi{background:#0f172a;border-radius:1rem;padding:1rem .75rem;text-align:center;color:#cbd5e1}\n.dph-kpi b{display:block;font-size:1.45rem;color:#4ade80;line-height:1.2;word-break:break-word}\n.dph-kpi span{font-size:.78rem;text-transform:uppercase;letter-spacing:.04em}\n.dph-exp{margin:0;padding:0;list-style:none}\n.dph-exp li{background:#f8fafc;border:1px solid #e2e8f0;border-radius:.75rem;padding:.7rem .9rem;margin-bottom:.5rem;font-size:.92rem;line-height:1.5}\n.dph-box{font-size:.92rem;padding:.75rem .95rem;border-radius:.75rem;margin:.75rem 0 0;line-height:1.5;background:#f0fdf4;color:#166534;border:1px solid #bbf7d0}\n.dph-box.dph-warn{background:#fffbeb;color:#92400e;border-color:#fde68a}\n.dph-box.dph-bad{background:#fef2f2;color:#991b1b;border-color:#fecaca}\n.dph-sl{margin-bottom:1rem}\n.dph-sl label{display:flex;justify-content:space-between;font-weight:700;font-size:.88rem;color:#0f172a}\n.dph-sl output{color:#16a34a;font-weight:800}\n.dph-tbl{width:100%;border-collapse:collapse;font-size:.9rem}\n.dph-tbl th,.dph-tbl td{padding:.5rem .4rem;border-bottom:1px solid #e2e8f0;text-align:right}\n.dph-tbl th:first-child,.dph-tbl td:first-child{text-align:left}\n.dph-tbl thead th{color:#64748b;font-size:.78rem;text-transform:uppercase}\n.dph-up{color:#16a34a;font-weight:700}\n.dph-down{color:#b91c1c;font-weight:700}\n.dph-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:.5rem}\n.dph-legal{font-size:.78rem;color:#64748b;margin:.6rem 0 0;line-height:1.5}\n.dph-lead{border:2px solid #bbf7d0;background:#f0fdf4}\n.dph-cta{background:linear-gradient(135deg,#0f172a 0%,#1e3a5f 100%);border-radius:1.25rem;padding:1.75rem;color:#cbd5e1;text-align:center;margin:1.5rem 0}\n.dph-cta h3{color:#4ade80;margin:0 0 .5rem;font-size:1.2rem}\n.dph-cta p{margin:0 0 1rem;font-size:.95rem}\n.dph-cta a{display:inline-block;background:#25d366;color:#fff;padding:.8rem 1.6rem;border-radius:.75rem;text-decoration:none;font-weight:700;margin:.25rem}\n.dph-cta a.dph-alt{background:transparent;border:2px solid #4ade80;color:#4ade80}\n.dph-hide{display:none}\n.dph-print{display:none}\n@media(max-width:560px){.dph-card{padding:1.1rem}.dph-kpis{grid-template-columns:1fr}.dph-f{min-width:100%}.dph-tbl{font-size:.82rem}}\n@media print{\n  body *{visibility:hidden!important}\n  .dph-print,.dph-print *{visibility:visible!important}\n  .dph-print{display:block!important;position:absolute;left:0;top:0;width:100%;font-family:Arial,sans-serif;color:#0f172a;padding:1cm}\n  .dph-print h4{font-size:16pt;margin:0 0 .2cm}\n  .dph-print h5{font-size:12pt;margin:.5cm 0 .15cm}\n  .dph-print p{font-size:10.5pt;margin:0 0 .12cm;line-height:1.4}\n  .dph-print small{display:block;font-size:8pt;color:#64748b;margin-top:.5cm}\n}\n<\/style>\n\n\n\n<div class=\"dph\">\n\n  <div class=\"dph-hero\">\n    <p>Calcula en segundos la <strong>ocupaci\u00f3n<\/strong>, la <strong>tarifa promedio (ADR)<\/strong> y el <strong>RevPAR<\/strong> de tu hotel, hostal, glamping o finca. Simula descuentos de temporada baja y descubre la <strong>ocupaci\u00f3n m\u00ednima para no perder<\/strong>. Gratis y sin registro.<\/p>\n    <div class=\"dph-steps\"><span>1 \u00b7 Escribe tus datos del mes<\/span><span>2 \u00b7 Mira tus indicadores<\/span><span>3 \u00b7 Simula y decide<\/span><\/div>\n  <\/div>\n\n  <div class=\"dph-card\">\n    <h2>Datos del per\u00edodo<\/h2>\n    <div class=\"dph-tools\">\n      <button type=\"button\" class=\"dph-btn dph-btn-light\" id=\"dph-example\">Cargar un ejemplo<\/button>\n      <button type=\"button\" class=\"dph-btn dph-btn-light\" id=\"dph-clear\">Borrar datos<\/button>\n    <\/div>\n    <div class=\"dph-row\">\n      <div class=\"dph-f\">\n        <label for=\"dph-rooms\">Habitaciones disponibles<\/label>\n        <input id=\"dph-rooms\" type=\"text\" inputmode=\"numeric\" maxlength=\"6\" placeholder=\"Ej: 10\">\n        <small>Las que puedes vender. No cuentes las que est\u00e1n en reparaci\u00f3n.<\/small>\n      <\/div>\n      <div class=\"dph-f\">\n        <label for=\"dph-days\">D\u00edas del per\u00edodo<\/label>\n        <input id=\"dph-days\" type=\"text\" inputmode=\"numeric\" maxlength=\"3\" placeholder=\"30\" value=\"30\">\n        <small>Un mes son 30 o 31 d\u00edas.<\/small>\n      <\/div>\n    <\/div>\n    <div class=\"dph-row\">\n      <div class=\"dph-f\">\n        <label for=\"dph-nights\">Noches-habitaci\u00f3n vendidas<\/label>\n        <input id=\"dph-nights\" type=\"text\" inputmode=\"numeric\" maxlength=\"7\" placeholder=\"Ej: 180\">\n        <small>Una habitaci\u00f3n ocupada una noche = 1. Si 3 habitaciones se ocupan 2 noches = 6.<\/small>\n      <\/div>\n      <div class=\"dph-f\">\n        <label for=\"dph-rev\">Ingresos por alojamiento (sin impuestos)<\/label>\n        <input id=\"dph-rev\" type=\"text\" inputmode=\"numeric\" maxlength=\"16\" placeholder=\"Ej: 27.000.000\">\n        <small>Solo lo cobrado por las noches. Sin restaurante, tours ni otros servicios.<\/small>\n      <\/div>\n    <\/div>\n    <div class=\"dph-err\" id=\"dph-err\"><\/div>\n  <\/div>\n\n  <div class=\"dph-card\" id=\"dph-out\">\n    <h2>Tus indicadores<\/h2>\n    <p class=\"dph-hint\" id=\"dph-wait\">Escribe habitaciones, d\u00edas, noches vendidas e ingresos para ver tus resultados.<\/p>\n    <div id=\"dph-results\" class=\"dph-hide\">\n      <div class=\"dph-kpis\">\n        <div class=\"dph-kpi\"><b id=\"dph-k-occ\">\u2013<\/b><span>Ocupaci\u00f3n<\/span><\/div>\n        <div class=\"dph-kpi\"><b id=\"dph-k-adr\">\u2013<\/b><span>ADR \u00b7 tarifa promedio<\/span><\/div>\n        <div class=\"dph-kpi\"><b id=\"dph-k-rvp\">\u2013<\/b><span>RevPAR<\/span><\/div>\n      <\/div>\n      <ul class=\"dph-exp\">\n        <li id=\"dph-e-occ\"><\/li>\n        <li id=\"dph-e-adr\"><\/li>\n        <li id=\"dph-e-rvp\"><\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n\n  <div class=\"dph-card\">\n    <h2>Simulador: \u00bfy si cambio la tarifa? <span>(temporada baja o alta)<\/span><\/h2>\n    <div class=\"dph-sl\">\n      <label for=\"dph-dr\">Cambio en la tarifa <output id=\"dph-dr-o\">0 %<\/output><\/label>\n      <input id=\"dph-dr\" type=\"range\" min=\"-50\" max=\"50\" step=\"1\" value=\"0\">\n    <\/div>\n    <div class=\"dph-sl\">\n      <label for=\"dph-do\">Cambio en la ocupaci\u00f3n <output id=\"dph-do-o\">0 puntos<\/output><\/label>\n      <input id=\"dph-do\" type=\"range\" min=\"-50\" max=\"50\" step=\"1\" value=\"0\">\n    <\/div>\n    <p class=\"dph-hint\" id=\"dph-sim-wait\">Primero completa los datos del per\u00edodo.<\/p>\n    <div id=\"dph-sim\" class=\"dph-hide\">\n      <table class=\"dph-tbl\">\n        <thead><tr><th>Indicador<\/th><th>Hoy<\/th><th>Simulado<\/th><\/tr><\/thead>\n        <tbody id=\"dph-sim-body\"><\/tbody>\n      <\/table>\n      <div class=\"dph-box\" id=\"dph-sim-msg\"><\/div>\n      <div class=\"dph-box dph-warn dph-hide\" id=\"dph-sim-keep\"><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"dph-card\">\n    <h2>Punto de equilibrio: ocupaci\u00f3n m\u00ednima para no perder<\/h2>\n    <div class=\"dph-row\">\n      <div class=\"dph-f\">\n        <label for=\"dph-fixed\">Costos fijos mensuales<\/label>\n        <input id=\"dph-fixed\" type=\"text\" inputmode=\"numeric\" maxlength=\"16\" placeholder=\"Ej: 12.000.000\">\n        <small>Arriendo, n\u00f3mina, servicios p\u00fablicos, internet, seguros, cuotas de cr\u00e9dito.<\/small>\n      <\/div>\n      <div class=\"dph-f\">\n        <label for=\"dph-varc\">Costo variable por noche ocupada<\/label>\n        <input id=\"dph-varc\" type=\"text\" inputmode=\"numeric\" maxlength=\"12\" placeholder=\"Ej: 25.000\">\n        <small>Aseo, lavander\u00eda, amenities, desayuno incluido, energ\u00eda extra.<\/small>\n      <\/div>\n    <\/div>\n    <div class=\"dph-f\">\n      <label for=\"dph-ota\">Comisi\u00f3n de plataformas de reservas (% opcional)<\/label>\n      <input id=\"dph-ota\" type=\"number\" min=\"0\" max=\"60\" step=\"0.1\" inputmode=\"decimal\" placeholder=\"Ej: 0\">\n      <small>Escribe el porcentaje que pagas seg\u00fan tu contrato. Si solo una parte de tus reservas llega por plataformas, usa un promedio: por ejemplo, la mitad de las reservas con 15 % = 7,5 %.<\/small>\n    <\/div>\n    <p class=\"dph-hint\" id=\"dph-be-wait\">Escribe tus costos fijos para calcular el punto de equilibrio.<\/p>\n    <div class=\"dph-box dph-hide\" id=\"dph-be\"><\/div>\n    <p class=\"dph-legal\" id=\"dph-be-note\"><\/p>\n  <\/div>\n\n  <div class=\"dph-card dph-hide\" id=\"dph-share-card\">\n    <h2>Guarda o comparte tu resultado<\/h2>\n    <div class=\"dph-actions\">\n      <button type=\"button\" class=\"dph-btn dph-btn-dark\" id=\"dph-print-btn\">Imprimir o guardar PDF<\/button>\n      <button type=\"button\" class=\"dph-btn dph-btn-wa\" id=\"dph-share\">Compartir por WhatsApp<\/button>\n    <\/div>\n    <p class=\"dph-legal\">Tus datos quedan guardados solo en este navegador para que la pr\u00f3xima vez no tengas que escribirlos de nuevo.<\/p>\n  <\/div>\n\n  <div class=\"dph-card dph-lead dph-hide\" id=\"dph-lead\">\n    <h2>\u00bfQuieres esto autom\u00e1tico en tu negocio?<\/h2>\n    <p class=\"dph-hint\" style=\"margin-bottom:1rem;color:#334155;\">Con un sistema de reservas, la ocupaci\u00f3n, el ADR y el RevPAR salen solos cada d\u00eda, sin sumar a mano. D\u00e9janos tus datos y te mostramos c\u00f3mo.<\/p>\n    <div class=\"dph-row\">\n      <div class=\"dph-f\">\n        <label for=\"dph-lname\">Nombre del hotel o alojamiento<\/label>\n        <input id=\"dph-lname\" maxlength=\"60\" placeholder=\"Ej: Hostal Los Guaduales\">\n      <\/div>\n      <div class=\"dph-f\">\n        <label for=\"dph-lwa\">Tu WhatsApp<\/label>\n        <input id=\"dph-lwa\" type=\"tel\" inputmode=\"numeric\" maxlength=\"16\" placeholder=\"Ej: 3001234567\">\n      <\/div>\n    <\/div>\n    <div class=\"dph-err\" id=\"dph-lerr\"><\/div>\n    <button type=\"button\" class=\"dph-btn dph-btn-big\" id=\"dph-lgo\">Quiero que me contacten<\/button>\n    <p class=\"dph-legal\">Tus datos quedan en el CRM de DonPedro Software para contactarte. Para borrarlos, escr\u00edbenos por WhatsApp al +57 310 598 0444.<\/p>\n  <\/div>\n\n  <div class=\"dph-print\" id=\"dph-printarea\"><\/div>\n\n  <div class=\"dph-cta\">\n    <h3>Reservas, check-in y factura electr\u00f3nica en un solo sistema<\/h3>\n    <p>Con el ERP en la nube de DonPedro Software manejas tus reservas, el check-in de los hu\u00e9spedes, la facturaci\u00f3n electr\u00f3nica y tus indicadores en el mismo lugar. Desde $90.000 al mes, sin cl\u00e1usula de permanencia.<\/p>\n    <a href=\"\/negociosnubeIA\/demo-donpedro-software\/\">Ver la demo<\/a>\n    <a class=\"dph-alt\" href=\"\/negociosnubeIA\/erp-cloud-colombia\/\">Conocer el ERP en la nube<\/a>\n  <\/div>\n\n  <h2>C\u00f3mo calcular la ocupaci\u00f3n hotelera, el ADR y el RevPAR<\/h2>\n  <p>Escribe cu\u00e1ntas habitaciones puedes vender, los d\u00edas del per\u00edodo, cu\u00e1ntas noches-habitaci\u00f3n vendiste y lo que ingres\u00f3 por alojamiento sin impuestos. La calculadora aplica las f\u00f3rmulas est\u00e1ndar del sector:<\/p>\n  <ul>\n    <li><strong>Ocupaci\u00f3n<\/strong> = noches vendidas \u00f7 (habitaciones \u00d7 d\u00edas). Dice qu\u00e9 parte de tu inventario lograste vender.<\/li>\n    <li><strong>ADR<\/strong> (tarifa promedio diaria) = ingresos por alojamiento \u00f7 noches vendidas. Dice cu\u00e1nto cobraste, en promedio, por cada noche vendida.<\/li>\n    <li><strong>RevPAR<\/strong> (ingreso por habitaci\u00f3n disponible) = ingresos \u00f7 (habitaciones \u00d7 d\u00edas), que es lo mismo que ADR \u00d7 ocupaci\u00f3n. Junta precio y ocupaci\u00f3n en un solo n\u00famero.<\/li>\n  <\/ul>\n\n  <h2>Ejemplo con n\u00fameros<\/h2>\n  <p>Un hotel de 10 habitaciones tiene, en un mes de 30 d\u00edas, 300 noches-habitaci\u00f3n disponibles. Si vendi\u00f3 180 noches e ingres\u00f3 $27.000.000 por alojamiento, su ocupaci\u00f3n es 180 \u00f7 300 = 60 %, su ADR es $27.000.000 \u00f7 180 = $150.000 y su RevPAR es $27.000.000 \u00f7 300 = $90.000 (o $150.000 \u00d7 60 %).<\/p>\n  <p>Si tiene costos fijos de $12.000.000 al mes, gasta $25.000 por noche ocupada y paga en promedio 15 % de comisi\u00f3n, cada noche vendida le deja $102.500. Necesita vender 118 noches (39,3 % de ocupaci\u00f3n) para no perder.<\/p>\n\n  <h2>\u00bfConviene bajar la tarifa en temporada baja?<\/h2>\n  <p>Depende de cu\u00e1nta ocupaci\u00f3n ganes. En el ejemplo, bajar la tarifa 10 % exige subir a 66,7 % de ocupaci\u00f3n solo para ingresar lo mismo. Si con el descuento llegas a 70 %, el ingreso sube a $28.350.000; si llegas a 63 %, ingresas menos que antes y adem\u00e1s pagas m\u00e1s aseo y lavander\u00eda. Usa el simulador antes de lanzar la promoci\u00f3n y compara el RevPAR y la utilidad, no solo la ocupaci\u00f3n.<\/p>\n\n  <h2>Preguntas frecuentes<\/h2>\n  <h3>\u00bfQu\u00e9 es una noche-habitaci\u00f3n?<\/h3>\n  <p>Es una habitaci\u00f3n ocupada durante una noche. Si 4 habitaciones se ocupan 3 noches, son 12 noches-habitaci\u00f3n. En un hostal con dormitorios compartidos puedes contar camas en vez de habitaciones, siempre que uses la misma unidad en todos los datos.<\/p>\n  <h3>\u00bfQu\u00e9 ingresos debo incluir?<\/h3>\n  <p>Solo lo que cobraste por alojamiento, sin impuestos. Deja por fuera restaurante, bar, tours, parqueadero y otros servicios; si los mezclas, el ADR y el RevPAR salen inflados.<\/p>\n  <h3>\u00bfQu\u00e9 es mejor: m\u00e1s ocupaci\u00f3n o mejor tarifa?<\/h3>\n  <p>Ninguna sola. Una ocupaci\u00f3n alta con tarifas muy bajas puede dejar menos plata que una ocupaci\u00f3n media con buena tarifa. El RevPAR combina las dos, y el punto de equilibrio te dice si con esa combinaci\u00f3n cubres tus costos.<\/p>\n  <h3>\u00bfC\u00f3mo tengo en cuenta la comisi\u00f3n de las plataformas de reservas?<\/h3>\n  <p>Escribe el porcentaje que pagas seg\u00fan tu contrato. Si solo una parte de las reservas llega por plataformas, usa un promedio ponderado. La calculadora descuenta esa comisi\u00f3n de cada noche vendida al calcular el punto de equilibrio.<\/p>\n  <h3>\u00bfMis datos se guardan en alg\u00fan servidor?<\/h3>\n  <p>No. Los c\u00e1lculos se hacen en tu navegador y los datos quedan guardados solo ah\u00ed. \u00danicamente si nos dejas tu nombre y WhatsApp en la caja de contacto, esos dos datos llegan a DonPedro Software.<\/p>\n  <p>\u00bfTienes restaurante en el hotel? Prueba tambi\u00e9n el <a href=\"\/negociosnubeIA\/menu-qr-gratis-restaurantes\/\">men\u00fa QR gratis<\/a> para recibir pedidos por WhatsApp.<\/p>\n\n<\/div>\n\n<script>\n(function(){\n  var KEY='dphHotel';\n  var FIELDS=['rooms','days','nights','rev','fixed','varc','ota','dr','do'];\n  var MONEY={rev:1,fixed:1,varc:1};\n  var EXAMPLE={rooms:'10',days:'30',nights:'180',rev:'27.000.000',fixed:'12.000.000',varc:'25.000',ota:'15',dr:'-10',do:'10'};\n  var last=null, leadSent=false;\n\n  function $(id){return document.getElementById('dph-'+id);}\n  function money(n){return '$'+Math.round(n).toLocaleString('es-CO');}\n  function pct(f){return (Math.round(f*1000)\/10).toLocaleString('es-CO',{maximumFractionDigits:1})+' %';}\n  function nf(n,d){return n.toLocaleString('es-CO',{maximumFractionDigits:d||0});}\n  function intOf(v){var d=String(v==null?'':v).replace(\/\\D\/g,'');return d?parseInt(d,10):NaN;}\n  function decOf(v){var s=String(v==null?'':v).replace(',','.').trim();return s?parseFloat(s):NaN;}\n  function el(tag,attrs){var e=document.createElement(tag);for(var k in attrs){if(k==='text')e.textContent=attrs[k];else e.setAttribute(k,attrs[k]);}return e;}\n  function show(id,on){var e=$(id);if(on)e.classList.remove('dph-hide');else e.classList.add('dph-hide');}\n\n  function readState(){var o={};FIELDS.forEach(function(f){o[f]=$(f).value;});return o;}\n  function save(){try{localStorage.setItem(KEY,JSON.stringify(readState()));}catch(e){}}\n  function load(){try{var s=localStorage.getItem(KEY);if(s)return JSON.parse(s);}catch(e){}return null;}\n  function fill(o){FIELDS.forEach(function(f){if(o[f]!=null)$(f).value=o[f];});}\n\n  function showErr(t){var e=$('err');e.textContent=t;e.style.display=t?'block':'none';}\n  function signed(n,unit){return (n>0?'+':(n<0?'\u2212':''))+nf(Math.abs(n),1)+unit;}\n\n  function compute(){\n    var rooms=intOf($('rooms').value),days=intOf($('days').value),nights=intOf($('nights').value),rev=intOf($('rev').value);\n    var dr=parseInt($('dr').value,10)||0,dO=parseInt($('do').value,10)||0;\n    $('dr-o').textContent=signed(dr,' %');\n    $('do-o').textContent=signed(dO,dO===1||dO===-1?' punto':' puntos');\n    var fixed=intOf($('fixed').value),varc=intOf($('varc').value),ota=decOf($('ota').value);\n    if(isNaN(varc))varc=0;\n    if(isNaN(ota))ota=0;\n    last=null;\n    showErr('');\n    var ready=!(isNaN(rooms)||isNaN(days)||isNaN(nights)||isNaN(rev));\n    var msg='';\n    if(ready){\n      if(rooms<1)msg='Las habitaciones disponibles deben ser al menos 1.';\n      else if(days<1)msg='Los d\u00edas del per\u00edodo deben ser al menos 1.';\n      else if(days>366)msg='El per\u00edodo no puede pasar de 366 d\u00edas.';\n      else if(nights<1)msg='Escribe cu\u00e1ntas noches-habitaci\u00f3n vendiste (al menos 1).';\n      else if(nights>rooms*days)msg='Vendiste m\u00e1s noches de las que ten\u00edas disponibles: con '+nf(rooms)+' habitaciones y '+nf(days)+' d\u00edas el m\u00e1ximo es '+nf(rooms*days)+'. Revisa los datos.';\n      else if(rev<1)msg='Escribe los ingresos por alojamiento del per\u00edodo.';\n    }\n    if(msg){showErr(msg);ready=false;}\n    show('wait',!ready);show('results',ready);show('sim-wait',!ready);show('sim',ready);show('share-card',ready);show('lead',ready);\n    if(!ready){show('be',false);show('be-wait',true);$('be-wait').textContent='Completa primero los datos del per\u00edodo.';$('be-note').textContent='';return;}\n\n    var avail=rooms*days,occ=nights\/avail,adr=rev\/nights,rvp=rev\/avail;\n    var r={rooms:rooms,days:days,nights:nights,rev:rev,avail:avail,occ:occ,adr:adr,rvp:rvp,dr:dr,dO:dO,fixed:fixed,varc:varc,ota:ota};\n    $('k-occ').textContent=pct(occ);$('k-adr').textContent=money(adr);$('k-rvp').textContent=money(rvp);\n    $('e-occ').textContent='Ocupaci\u00f3n: vendiste '+nf(nights)+' de '+nf(avail)+' noches-habitaci\u00f3n posibles ('+nf(rooms)+' habitaciones \u00d7 '+nf(days)+' d\u00edas). De cada 10 noches que pod\u00edas vender, vendiste '+nf(occ*10,1)+'.';\n    $('e-adr').textContent='ADR: en promedio, cada noche vendida te dej\u00f3 '+money(adr)+' ('+money(rev)+' \u00f7 '+nf(nights)+' noches).';\n    $('e-rvp').textContent='RevPAR: si repartes el ingreso entre todas las noches disponibles, vendidas o vac\u00edas, cada habitaci\u00f3n te dej\u00f3 '+money(rvp)+' por noche. Es lo mismo que ADR \u00d7 ocupaci\u00f3n: '+money(adr)+' \u00d7 '+pct(occ)+'.';\n\n    \/\/ Simulador\n    var c=ota\/100,Fp=isNaN(fixed)?0:fixed*days\/30,useCosts=(Fp>0)||(varc>0)||(c>0);\n    var nAdr=adr*(1+dr\/100),nOcc=Math.min(1,Math.max(0,occ+dO\/100)),nNights=nOcc*avail,nRev=nAdr*nNights,nRvp=nAdr*nOcc;\n    var prof0=rev*(1-c)-nights*varc-Fp,prof1=nRev*(1-c)-nNights*varc-Fp;\n    r.nAdr=nAdr;r.nOcc=nOcc;r.nNights=nNights;r.nRev=nRev;r.nRvp=nRvp;r.prof0=prof0;r.prof1=prof1;r.useCosts=useCosts;\n    var body=$('sim-body');body.textContent='';\n    var rows=[['Tarifa promedio (ADR)',money(adr),money(nAdr)],['Ocupaci\u00f3n',pct(occ),pct(nOcc)],['Noches vendidas',nf(nights),nf(nNights)],['Ingreso por alojamiento',money(rev),money(nRev)],['RevPAR',money(rvp),money(nRvp)]];\n    if(useCosts)rows.push(['Utilidad estimada',money(prof0),money(prof1)]);\n    rows.forEach(function(rw){var tr=el('tr',{});tr.appendChild(el('td',{text:rw[0]}));tr.appendChild(el('td',{text:rw[1]}));tr.appendChild(el('td',{text:rw[2]}));body.appendChild(tr);});\n    var diff=nRev-rev,sm=$('sim-msg');\n    if(dr===0?dO===0:false){sm.className='dph-box';sm.textContent='Mueve las barras para ver qu\u00e9 pasa si cambias la tarifa o si llegan m\u00e1s o menos hu\u00e9spedes.';}\n    else if(Math.round(diff)===0){sm.className='dph-box';sm.textContent='Con ese cambio ingresar\u00edas lo mismo que hoy.';}\n    else{\n      sm.className=diff>0?'dph-box':'dph-box dph-bad';\n      sm.textContent='Con ese cambio ingresar\u00edas '+money(Math.abs(diff))+(diff>0?' m\u00e1s':' menos')+' que hoy ('+signed(Math.round(diff\/rev*1000)\/10,' %')+'). El RevPAR pasar\u00eda de '+money(rvp)+' a '+money(nRvp)+'.'+(useCosts?' Tu utilidad estimada '+(prof1>=prof0?'subir\u00eda':'bajar\u00eda')+' '+money(Math.abs(prof1-prof0))+'.':'');\n    }\n    var keep=$('sim-keep');\n    if(dr!==0){\n      var need=rvp\/nAdr;r.need=need;\n      keep.textContent=need>1?'Con la tarifa '+(dr<0?'rebajada':'nueva')+' ('+money(nAdr)+') ni con el hotel lleno ingresar\u00edas lo mismo que hoy.':'Para ingresar lo mismo que hoy con una tarifa de '+money(nAdr)+' necesitas '+pct(need)+' de ocupaci\u00f3n ('+nf(Math.ceil(need*avail-1e-9))+' noches vendidas).';\n      show('sim-keep',true);\n    }else{show('sim-keep',false);r.need=null;}\n\n    \/\/ Punto de equilibrio\n    var be=$('be'),note=$('be-note');r.be=null;\n    if(!(Fp>0)){show('be',false);show('be-wait',true);$('be-wait').textContent='Escribe tus costos fijos para calcular el punto de equilibrio.';note.textContent='';}\n    else{\n      show('be-wait',false);show('be',true);\n      var margin=adr*(1-c)-varc;\n      note.textContent=(days===30?'':'Como el per\u00edodo es de '+nf(days)+' d\u00edas, ajustamos los costos fijos: '+money(fixed)+' \u00d7 '+nf(days)+' \u00f7 30 = '+money(Fp)+'. ')+'C\u00e1lculo: costos fijos \u00f7 (ADR \u2212 comisi\u00f3n \u2212 costo variable por noche). Usa tu ADR actual.';\n      if(margin<=0){be.className='dph-box dph-bad';be.textContent='Con tu tarifa promedio actual ('+money(adr)+'), cada noche vendida cuesta m\u00e1s de lo que deja despu\u00e9s de comisi\u00f3n y costo variable. As\u00ed no hay ocupaci\u00f3n que alcance: sube la tarifa o baja el costo por noche.';r.be={bad:1};}\n      else{\n        var beN=Math.ceil(Fp\/margin-1e-9),beO=beN\/avail;\n        r.be={n:beN,occ:beO,margin:margin};\n        var detail='Cada noche vendida te deja '+money(margin)+' ('+money(adr)+(c>0?' \u2212 '+money(adr*c)+' de comisi\u00f3n':'')+(varc>0?' \u2212 '+money(varc)+' de costo variable':'')+'). ';\n        if(beO>1){be.className='dph-box dph-bad';be.textContent=detail+'Necesitar\u00edas '+nf(beN)+' noches, pero solo tienes '+nf(avail)+' disponibles: ni con el hotel lleno cubres los costos fijos de '+money(Fp)+'.';}\n        else{\n          var gap=Math.round((occ-beO)*1000)\/10;\n          be.className=occ>=beO?'dph-box':'dph-box dph-warn';\n          be.textContent=detail+'Para no perder necesitas vender al menos '+nf(beN)+' noches-habitaci\u00f3n: '+pct(beO)+' de ocupaci\u00f3n. Hoy est\u00e1s en '+pct(occ)+(gap>=0?', '+nf(gap,1)+' puntos por encima del equilibrio.':', '+nf(-gap,1)+' puntos por debajo: est\u00e1s perdiendo plata.');\n        }\n      }\n    }\n    last=r;\n  }\n\n  var timer=null;\n  function changed(){save();clearTimeout(timer);timer=setTimeout(compute,150);}\n\n  function summary(){\n    var r=last;if(!r)return '';\n    var t='Indicadores de mi alojamiento ('+nf(r.rooms)+' habitaciones, '+nf(r.days)+' d\u00edas):\\n';\n    t+='\u2022 Ocupaci\u00f3n: '+pct(r.occ)+'\\n\u2022 ADR (tarifa promedio): '+money(r.adr)+'\\n\u2022 RevPAR: '+money(r.rvp)+'\\n';\n    if(r.be){if(r.be.n){t+='\u2022 Ocupaci\u00f3n m\u00ednima para no perder: '+pct(r.be.occ)+'\\n';}}\n    return t;\n  }\n\n  function buildPrint(){\n    var r=last,pa=$('printarea');pa.textContent='';if(!r)return;\n    pa.appendChild(el('h4',{text:'Indicadores hoteleros'}));\n    pa.appendChild(el('p',{text:'Fecha: '+new Date().toLocaleDateString('es-CO')}));\n    pa.appendChild(el('h5',{text:'Datos del per\u00edodo'}));\n    [['Habitaciones disponibles',nf(r.rooms)],['D\u00edas del per\u00edodo',nf(r.days)],['Noches-habitaci\u00f3n disponibles',nf(r.avail)],['Noches-habitaci\u00f3n vendidas',nf(r.nights)],['Ingresos por alojamiento (sin impuestos)',money(r.rev)]].forEach(function(x){pa.appendChild(el('p',{text:x[0]+': '+x[1]}));});\n    pa.appendChild(el('h5',{text:'Resultados'}));\n    pa.appendChild(el('p',{text:'Ocupaci\u00f3n: '+pct(r.occ)}));\n    pa.appendChild(el('p',{text:'ADR (tarifa promedio por noche vendida): '+money(r.adr)}));\n    pa.appendChild(el('p',{text:'RevPAR (ingreso por habitaci\u00f3n disponible): '+money(r.rvp)}));\n    if(r.dr!==0||r.dO!==0){\n      pa.appendChild(el('h5',{text:'Simulaci\u00f3n'}));\n      pa.appendChild(el('p',{text:'Tarifa '+signed(r.dr,' %')+', ocupaci\u00f3n '+signed(r.dO,' puntos')+': ADR '+money(r.nAdr)+', ocupaci\u00f3n '+pct(r.nOcc)+', ingreso '+money(r.nRev)+', RevPAR '+money(r.nRvp)+'.'}));\n      if(r.need){if(r.need<=1)pa.appendChild(el('p',{text:'Ocupaci\u00f3n necesaria para ingresar lo mismo que hoy: '+pct(r.need)}));}\n    }\n    if(r.be){\n      pa.appendChild(el('h5',{text:'Punto de equilibrio'}));\n      pa.appendChild(el('p',{text:$('be').textContent}));\n    }\n    pa.appendChild(el('small',{text:'Calculado gratis en posdonpedro.com\/negociosnubeIA\/ \u00b7 DonPedro Software'}));\n  }\n\n  function normWa(v){var d=String(v||'').replace(\/\\D\/g,'');if(d.length===10)if(d.charAt(0)==='3')d='57'+d;return d;}\n  function lerr(t){var e=$('lerr');e.textContent=t;e.style.display=t?'block':'none';}\n  function sendLead(){\n    lerr('');\n    var name=$('lname').value.trim(),wa=normWa($('lwa').value);\n    if(!name){lerr('Escribe el nombre de tu hotel o alojamiento.');$('lname').focus();return;}\n    if(!(\/^573\\d{9}$\/.test(wa)||\/^\\d{11,15}$\/.test(wa))){lerr('Escribe un WhatsApp v\u00e1lido: celular de 10 d\u00edgitos que empiece por 3.');$('lwa').focus();return;}\n    var r=last;\n    if(!leadSent){\n      fetch('\/negociosnubeIA\/crm-proxy.php',{method:'POST',headers:{'Content-Type':'application\/json'},\n        body:JSON.stringify({name:name,phone:wa,email:'',type:'Herramienta gratis: Indicadores hoteleros',website:''})}).catch(function(){});\n      leadSent=true;\n    }\n    var msg='Hola, soy de '+name+'. Us\u00e9 la calculadora de ocupaci\u00f3n hotelera de posdonpedro.com'+(r?': ocupaci\u00f3n '+pct(r.occ)+', ADR '+money(r.adr)+', RevPAR '+money(r.rvp)+(r.be?(r.be.n?', equilibrio '+pct(r.be.occ):''):''):'')+'. Quiero ver c\u00f3mo manejar reservas, check-in y factura electr\u00f3nica en un solo sistema.';\n    window.open('https:\/\/wa.me\/573105980444?text='+encodeURIComponent(msg),'_blank');\n    var b=$('lgo');b.textContent='\u2713 \u00a1Gracias! Te escribimos pronto';\n  }\n\n  function init(){\n    FIELDS.forEach(function(f){\n      var i=$(f);\n      i.addEventListener('input',changed);\n      if(MONEY[f])i.addEventListener('blur',function(){var n=intOf(i.value);if(!isNaN(n)){i.value=n.toLocaleString('es-CO');save();}});\n    });\n    $('example').addEventListener('click',function(){fill(EXAMPLE);save();compute();});\n    $('clear').addEventListener('click',function(){if(confirm('\u00bfBorrar todos los datos?')){FIELDS.forEach(function(f){$(f).value='';});$('days').value='30';$('dr').value='0';$('do').value='0';save();compute();}});\n    $('print-btn').addEventListener('click',function(){buildPrint();window.print();});\n    $('share').addEventListener('click',function(){window.open('https:\/\/wa.me\/?text='+encodeURIComponent(summary()+'Calcula los tuyos gratis: https:\/\/posdonpedro.com\/negociosnubeIA\/calcular-ocupacion-hotelera\/'),'_blank');});\n    $('lgo').addEventListener('click',sendLead);\n    var s=load();if(s)fill(s);\n    compute();\n  }\n  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else init();\n})();\n<\/script>\n\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@graph\":[\n{\"@type\":\"WebApplication\",\"name\":\"Calculadora de ocupaci\u00f3n hotelera, ADR y RevPAR\",\"url\":\"https:\/\/posdonpedro.com\/negociosnubeIA\/calcular-ocupacion-hotelera\/\",\"applicationCategory\":\"BusinessApplication\",\"operatingSystem\":\"Web\",\"inLanguage\":\"es-CO\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"COP\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"DonPedro Software\",\"url\":\"https:\/\/posdonpedro.com\/negociosnubeIA\/\"}},\n{\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"\u00bfQu\u00e9 es una noche-habitaci\u00f3n?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Es una habitaci\u00f3n ocupada durante una noche. Si 4 habitaciones se ocupan 3 noches, son 12 noches-habitaci\u00f3n. En un hostal con dormitorios compartidos puedes contar camas en vez de habitaciones, siempre que uses la misma unidad en todos los datos.\"}},\n{\"@type\":\"Question\",\"name\":\"\u00bfQu\u00e9 ingresos debo incluir?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Solo lo que cobraste por alojamiento, sin impuestos. Deja por fuera restaurante, bar, tours, parqueadero y otros servicios; si los mezclas, el ADR y el RevPAR salen inflados.\"}},\n{\"@type\":\"Question\",\"name\":\"\u00bfQu\u00e9 es mejor: m\u00e1s ocupaci\u00f3n o mejor tarifa?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Ninguna sola. Una ocupaci\u00f3n alta con tarifas muy bajas puede dejar menos plata que una ocupaci\u00f3n media con buena tarifa. El RevPAR combina las dos, y el punto de equilibrio te dice si con esa combinaci\u00f3n cubres tus costos.\"}},\n{\"@type\":\"Question\",\"name\":\"\u00bfC\u00f3mo tengo en cuenta la comisi\u00f3n de las plataformas de reservas?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Escribe el porcentaje que pagas seg\u00fan tu contrato. Si solo una parte de las reservas llega por plataformas, usa un promedio ponderado. La calculadora descuenta esa comisi\u00f3n de cada noche vendida al calcular el punto de equilibrio.\"}},\n{\"@type\":\"Question\",\"name\":\"\u00bfMis datos se guardan en alg\u00fan servidor?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. Los c\u00e1lculos se hacen en tu navegador y los datos quedan guardados solo ah\u00ed. \u00danicamente si nos dejas tu nombre y WhatsApp en la caja de contacto, esos dos datos llegan a DonPedro Software.\"}}\n]}]}\n<\/script>","protected":false},"excerpt":{"rendered":"<p>Calcula en segundos la ocupaci\u00f3n, la tarifa promedio (ADR) y el RevPAR de tu hotel, hostal, glamping o finca. Simula descuentos de temporada baja y descubre la ocupaci\u00f3n m\u00ednima para no perder. Gratis y sin registro. 1 \u00b7 Escribe tus datos del mes2 \u00b7 Mira tus indicadores3 \u00b7 Simula y decide Datos del per\u00edodo Cargar [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-409","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/pages\/409","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/comments?post=409"}],"version-history":[{"count":1,"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/pages\/409\/revisions"}],"predecessor-version":[{"id":410,"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/pages\/409\/revisions\/410"}],"wp:attachment":[{"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/media?parent=409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}