{"id":19091,"date":"2026-08-04T09:56:42","date_gmt":"2026-08-04T15:56:42","guid":{"rendered":"https:\/\/www.conservisabogados.com\/?page_id=19091"},"modified":"2026-08-04T10:31:55","modified_gmt":"2026-08-04T16:31:55","slug":"vacation-calculator-in-guatemala","status":"publish","type":"page","link":"https:\/\/www.conservisabogados.com\/en\/calculadora-de-vacaciones-en-guatemala\/","title":{"rendered":"Vacation calculator in Guatemala"},"content":{"rendered":"\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Calculadora de vacaciones en Guatemala | Conservis Abogados<\/title>\n\n<style>\n  .cv-app {\n    --cv-navy: #061a3a;\n    --cv-navy-2: #0b2d57;\n    --cv-gold: #c9a24d;\n    --cv-gold-dark: #a9822e;\n    --cv-white: #ffffff;\n    --cv-bg: #f6f8fb;\n    --cv-text: #263238;\n    --cv-muted: #64748b;\n    --cv-border: #dbe2ea;\n    --cv-warning: #fff8e8;\n    --cv-warning-border: #efd38d;\n    --cv-danger-bg: #fff1f2;\n    --cv-danger-border: #fecdd3;\n    --cv-danger-text: #9f1239;\n    width: 100%;\n    max-width: 1120px;\n    margin: 0 auto;\n    padding: 24px;\n    color: var(--cv-text);\n    background: linear-gradient(180deg, #f7f8fb 0%, #ffffff 42%, #f7f8fb 100%);\n    font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif;\n    line-height: 1.5;\n  }\n\n  .cv-app,\n  .cv-app * { box-sizing: border-box; }\n\n  .cv-app h1,\n  .cv-app h2,\n  .cv-app h3,\n  .cv-app p { margin-top: 0; }\n\n  .cv-hero {\n    position: relative;\n    overflow: hidden;\n    margin-bottom: 22px;\n    padding: 34px;\n    border-radius: 24px;\n    color: var(--cv-white);\n    background: radial-gradient(circle at top right, rgba(201, 162, 77, .22), transparent 34%), linear-gradient(135deg, var(--cv-navy), var(--cv-navy-2));\n  }\n\n  .cv-hero::after {\n    content: \"\";\n    position: absolute;\n    top: -90px;\n    right: -90px;\n    width: 250px;\n    height: 250px;\n    border-radius: 50%;\n    background: rgba(201, 162, 77, .14);\n  }\n\n  .cv-hero-content { position: relative; z-index: 2; max-width: 820px; }\n\n  .cv-brandline {\n    display: inline-flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 13px;\n    color: #f0d592;\n    font-size: 13px;\n    font-weight: 800;\n    letter-spacing: .05em;\n    text-transform: uppercase;\n  }\n\n  .cv-brandline img {\n    display: block;\n    width: 42px;\n    height: 42px;\n    padding: 5px;\n    border-radius: 10px;\n    background: var(--cv-white);\n    object-fit: contain;\n  }\n\n  .cv-label {\n    display: inline-block;\n    margin-bottom: 14px;\n    padding: 7px 12px;\n    border: 1px solid rgba(201, 162, 77, .45);\n    border-radius: 999px;\n    color: var(--cv-gold);\n    background: rgba(201, 162, 77, .14);\n    font-size: 13px;\n    font-weight: 800;\n  }\n\n  .cv-hero h1 {\n    margin-bottom: 12px;\n    color: var(--cv-white);\n    font-size: clamp(32px, 4.7vw, 52px);\n    line-height: 1.07;\n    letter-spacing: -.04em;\n  }\n\n  .cv-hero p {\n    max-width: 780px;\n    margin-bottom: 0;\n    color: rgba(255, 255, 255, .82);\n    font-size: 17px;\n  }\n\n  .cv-summary-strip {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 14px;\n    margin-bottom: 22px;\n  }\n\n  .cv-summary-item,\n  .cv-card {\n    border: 1px solid var(--cv-border);\n    border-radius: 22px;\n    background: var(--cv-white);\n    box-shadow: 0 10px 28px rgba(31, 39, 56, .07);\n  }\n\n  .cv-summary-item { padding: 18px; }\n  .cv-summary-item strong { display: block; margin-bottom: 4px; color: var(--cv-navy); font-size: 18px; }\n  .cv-summary-item span { color: var(--cv-muted); font-size: 13px; }\n\n  .cv-grid {\n    display: grid;\n    grid-template-columns: 1.06fr .94fr;\n    gap: 22px;\n    align-items: start;\n  }\n\n  .cv-card { padding: 24px; }\n  .cv-card h2 { margin-bottom: 8px; color: var(--cv-navy); font-size: 23px; letter-spacing: -.025em; }\n  .cv-card h3 { margin-bottom: 7px; color: var(--cv-navy); font-size: 17px; }\n  .cv-card > p { margin-bottom: 18px; color: var(--cv-muted); font-size: 15px; }\n\n  .cv-fields {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 16px;\n  }\n\n  .cv-field { display: flex; flex-direction: column; gap: 7px; }\n  .cv-field.cv-full { grid-column: 1 \/ -1; }\n  .cv-field label { color: var(--cv-navy); font-size: 14px; font-weight: 800; }\n\n  .cv-app input,\n  .cv-app select {\n    display: block !important;\n    width: 100% !important;\n    height: 52px !important;\n    min-height: 52px !important;\n    max-height: 52px !important;\n    margin: 0 !important;\n    padding: 0 14px !important;\n    border: 1px solid var(--cv-border) !important;\n    border-radius: 14px !important;\n    outline: none !important;\n    color: var(--cv-text) !important;\n    background: var(--cv-white) !important;\n    box-shadow: none !important;\n    font-family: inherit !important;\n    font-size: 15px !important;\n    line-height: normal !important;\n    vertical-align: middle !important;\n  }\n\n  .cv-app input:focus,\n  .cv-app select:focus {\n    border-color: var(--cv-gold) !important;\n    box-shadow: 0 0 0 4px rgba(201, 162, 77, .18) !important;\n  }\n\n  .cv-help { color: var(--cv-muted); font-size: 12px; }\n\n  .cv-periods {\n    margin-top: 20px;\n    padding: 18px;\n    border: 1px solid var(--cv-border);\n    border-radius: 18px;\n    background: var(--cv-bg);\n  }\n\n  .cv-periods-head {\n    display: flex;\n    justify-content: space-between;\n    gap: 14px;\n    align-items: flex-start;\n    margin-bottom: 14px;\n  }\n\n  .cv-periods-head h3 { margin-bottom: 4px; }\n  .cv-periods-head p { margin: 0; color: var(--cv-muted); font-size: 13px; }\n  .cv-period-list { display: grid; gap: 12px; }\n\n  .cv-period-row {\n    padding: 15px;\n    border: 1px solid var(--cv-border);\n    border-radius: 16px;\n    background: var(--cv-white);\n  }\n\n  .cv-period-title {\n    display: flex;\n    justify-content: space-between;\n    gap: 12px;\n    margin-bottom: 12px;\n  }\n\n  .cv-period-title strong { color: var(--cv-navy); }\n  .cv-period-title span { color: var(--cv-muted); font-size: 12px; text-align: right; }\n  .cv-period-inputs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }\n  .cv-period-row[data-cv-period-type=\"partial\"] .cv-period-inputs { grid-template-columns: 1fr 1fr; }\n\n  .cv-actions {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 12px;\n    margin-top: 20px;\n  }\n\n  .cv-app button,\n  .cv-app .cv-button {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 47px;\n    padding: 13px 18px;\n    border: 1px solid transparent;\n    border-radius: 14px;\n    font-family: inherit;\n    font-size: 15px;\n    font-weight: 800;\n    line-height: 1;\n    text-decoration: none;\n    cursor: pointer;\n    transition: transform .15s ease, opacity .15s ease;\n  }\n\n  .cv-app button:hover,\n  .cv-app .cv-button:hover { transform: translateY(-1px); opacity: .94; }\n  .cv-primary { color: var(--cv-white); background: linear-gradient(135deg, var(--cv-gold), var(--cv-gold-dark)); }\n  .cv-secondary { color: var(--cv-white); background: linear-gradient(135deg, var(--cv-navy), var(--cv-navy-2)); }\n  .cv-light { color: var(--cv-navy); border-color: var(--cv-border) !important; background: var(--cv-bg); }\n  .cv-hidden { display: none !important; }\n\n  .cv-error {\n    display: none;\n    margin-top: 16px;\n    padding: 14px;\n    border: 1px solid var(--cv-danger-border);\n    border-radius: 16px;\n    color: var(--cv-danger-text);\n    background: var(--cv-danger-bg);\n    font-size: 14px;\n    font-weight: 700;\n  }\n\n  .cv-placeholder {\n    min-height: 420px;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    text-align: center;\n  }\n\n  .cv-placeholder-icon {\n    display: grid;\n    place-items: center;\n    width: 74px;\n    height: 74px;\n    margin-bottom: 16px;\n    border-radius: 22px;\n    color: var(--cv-gold);\n    background: var(--cv-navy);\n    font-size: 32px;\n    font-weight: 900;\n  }\n\n  .cv-placeholder p { max-width: 420px; margin-bottom: 0; }\n\n  .cv-result-main {\n    margin-bottom: 14px;\n    padding: 22px;\n    border-radius: 20px;\n    color: var(--cv-white);\n    background: var(--cv-navy);\n  }\n\n  .cv-result-main span { display: block; margin-bottom: 5px; color: rgba(255,255,255,.72); font-size: 14px; }\n  .cv-result-main strong { display: block; color: var(--cv-gold); font-size: clamp(30px, 4vw, 42px); line-height: 1; letter-spacing: -.04em; }\n\n  .cv-metrics { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }\n  .cv-metric { padding: 15px; border: 1px solid var(--cv-border); border-radius: 17px; background: var(--cv-bg); }\n  .cv-metric span { display: block; margin-bottom: 4px; color: var(--cv-muted); font-size: 12px; }\n  .cv-metric strong { display: block; color: var(--cv-navy); font-size: 19px; }\n\n  .cv-note {\n    margin-top: 14px;\n    padding: 15px;\n    border: 1px solid var(--cv-warning-border);\n    border-radius: 17px;\n    color: #6d4c00;\n    background: var(--cv-warning);\n    font-size: 14px;\n  }\n\n  .cv-detail { margin-top: 22px; }\n  .cv-breakdown { display: grid; gap: 2px; }\n  .cv-row { display: flex; justify-content: space-between; gap: 16px; padding: 11px 0; border-bottom: 1px solid var(--cv-border); font-size: 15px; }\n  .cv-row:last-child { border-bottom: 0; }\n  .cv-row span { color: var(--cv-muted); }\n  .cv-row strong { color: var(--cv-navy); text-align: right; }\n\n  .cv-period-breakdown { margin-top: 18px; overflow-x: auto; }\n  .cv-period-table { width: 100%; min-width: 790px; border-collapse: collapse; font-size: 13px; }\n  .cv-period-table th,\n  .cv-period-table td { padding: 10px 9px; border-bottom: 1px solid var(--cv-border); text-align: right; }\n  .cv-period-table th:first-child,\n  .cv-period-table td:first-child { text-align: left; }\n  .cv-period-table th { color: var(--cv-navy); background: var(--cv-bg); }\n  .cv-period-table td { color: var(--cv-text); }\n\n  .cv-cta {\n    display: grid;\n    grid-template-columns: 1.4fr auto;\n    gap: 18px;\n    align-items: center;\n    margin-top: 22px;\n    padding: 24px;\n    border-radius: 22px;\n    color: var(--cv-white);\n    background: linear-gradient(135deg, var(--cv-navy), var(--cv-navy-2));\n  }\n\n  .cv-cta h2 { margin-bottom: 7px; color: var(--cv-white); font-size: 24px; }\n  .cv-cta p { margin-bottom: 0; color: rgba(255,255,255,.78); font-size: 15px; }\n  .cv-cta .cv-button { min-width: 220px; color: var(--cv-white); background: linear-gradient(135deg, var(--cv-gold), var(--cv-gold-dark)); }\n\n  .cv-resource {\n    display: grid;\n    grid-template-columns: 240px 1fr;\n    gap: 22px;\n    align-items: center;\n    margin-top: 22px;\n  }\n\n  .cv-resource-image {\n    min-height: 175px;\n    padding: 16px;\n    display: flex;\n    align-items: flex-end;\n    border-radius: 18px;\n    color: var(--cv-white);\n    background: linear-gradient(rgba(6,26,58,.56), rgba(6,26,58,.64)), url(\"https:\/\/www.conservisabogados.com\/wp-content\/uploads\/2022\/04\/Recepcion-Conservis-Abogados-e1737655962406.jpeg\") center\/cover no-repeat;\n    font-weight: 800;\n  }\n\n  .cv-resource p { margin-bottom: 14px; }\n  .cv-legal { margin-top: 22px; }\n  .cv-legal p { margin-bottom: 11px; }\n  .cv-legal p:last-child { margin-bottom: 0; }\n\n  .cv-disclaimer {\n    margin-top: 18px;\n    padding: 16px;\n    border: 1px solid var(--cv-border);\n    border-radius: 18px;\n    color: var(--cv-muted);\n    background: var(--cv-white);\n    font-size: 13px;\n  }\n\n  @media (max-width: 860px) {\n    .cv-app { padding: 16px; }\n    .cv-hero { padding: 26px; border-radius: 20px; }\n    .cv-grid,\n    .cv-summary-strip,\n    .cv-cta,\n    .cv-resource { grid-template-columns: 1fr; }\n    .cv-cta .cv-button { width: 100%; }\n    .cv-resource-image { min-height: 150px; }\n  }\n\n  @media (max-width: 620px) {\n    .cv-fields,\n    .cv-metrics,\n    .cv-period-inputs,\n    .cv-period-row[data-cv-period-type=\"partial\"] .cv-period-inputs { grid-template-columns: 1fr; }\n    .cv-field.cv-full { grid-column: auto; }\n    .cv-periods-head,\n    .cv-period-title { flex-direction: column; }\n    .cv-period-title span { text-align: left; }\n    .cv-app button,\n    .cv-app .cv-button { width: 100%; }\n    .cv-placeholder { min-height: 310px; }\n  }\n<\/style>\n\n<main class=\"cv-app\" data-cv-app>\n  <section class=\"cv-hero\">\n    <div class=\"cv-hero-content\">\n      <div class=\"cv-brandline\">\n        <img decoding=\"async\" src=\"https:\/\/www.conservisabogados.com\/wp-content\/uploads\/2022\/04\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png\" alt=\"Conservis Abogados\">\n        <span>Conservis Abogados<\/span>\n      <\/div>\n      <span class=\"cv-label\">Herramienta laboral para Guatemala<\/span>\n      <h1>Calculadora de vacaciones<\/h1>\n      <p>Estima los d\u00edas de vacaciones generados, el saldo pendiente y su valor remunerativo con base en la antig\u00fcedad y el promedio salarial aplicable.<\/p>\n    <\/div>\n  <\/section>\n\n  <section class=\"cv-summary-strip\">\n    <div class=\"cv-summary-item\"><strong>15 d\u00edas h\u00e1biles<\/strong><span>M\u00ednimo por cada a\u00f1o continuo de trabajo.<\/span><\/div>\n    <div class=\"cv-summary-item\"><strong>Promedio salarial<\/strong><span>Incluye remuneraciones ordinarias y extraordinarias.<\/span><\/div>\n    <div class=\"cv-summary-item\"><strong>Pago en dinero<\/strong><span>La compensaci\u00f3n sustitutiva procede al terminar la relaci\u00f3n.<\/span><\/div>\n  <\/section>\n\n  <section class=\"cv-grid\">\n    <div class=\"cv-card\">\n      <h2>Datos para el c\u00e1lculo<\/h2>\n      <p>Primero prepar\u00e1 los per\u00edodos con las fechas y el estado de la relaci\u00f3n. Despu\u00e9s complet\u00e1 los registros de cada per\u00edodo y calcul\u00e1 el resultado.<\/p>\n\n      <div class=\"cv-fields\" role=\"form\" aria-label=\"Calculadora de vacaciones\">\n        <div class=\"cv-field\">\n          <label>Fecha de inicio de la relaci\u00f3n<\/label>\n          <input data-cv-field=\"start\" type=\"date\">\n        <\/div>\n\n        <div class=\"cv-field\">\n          <label>Fecha de c\u00e1lculo o terminaci\u00f3n<\/label>\n          <input data-cv-field=\"end\" type=\"date\">\n        <\/div>\n\n        <div class=\"cv-field\">\n          <label>Estado de la relaci\u00f3n laboral<\/label>\n          <select data-cv-field=\"status\">\n            <option value=\"active\">Relaci\u00f3n laboral activa<\/option>\n            <option value=\"ended\">Relaci\u00f3n laboral terminada<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"cv-field cv-full\">\n          <label>Actividad de la empresa<\/label>\n          <select data-cv-field=\"sector\">\n            <option value=\"general\">No agr\u00edcola ni ganadera<\/option>\n            <option value=\"agricultural\">Agr\u00edcola o ganadera<\/option>\n          <\/select>\n          <div class=\"cv-help\">Define si el promedio aplicable a cada per\u00edodo corresponde a 12 o 3 meses.<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"cv-periods cv-hidden\" data-cv-periods>\n        <div class=\"cv-periods-head\">\n          <div>\n            <h3>Registros por per\u00edodo<\/h3>\n            <p data-cv-periods-help>Complet\u00e1 los datos documentados de cada per\u00edodo.<\/p>\n          <\/div>\n        <\/div>\n        <div class=\"cv-period-list\" data-cv-period-list><\/div>\n      <\/div>\n\n      <div class=\"cv-actions\">\n        <button type=\"button\" class=\"cv-primary\" data-cv-action=\"prepare\">Preparar per\u00edodos<\/button>\n        <button type=\"button\" class=\"cv-primary cv-hidden\" data-cv-action=\"calculate\">Calcular vacaciones<\/button>\n        <button type=\"button\" class=\"cv-light\" data-cv-action=\"reset\">Limpiar<\/button>\n        <button type=\"button\" class=\"cv-secondary cv-hidden\" data-cv-action=\"pdf\">Descargar reporte PDF<\/button>\n      <\/div>\n      <div class=\"cv-error\" data-cv-error aria-live=\"polite\"><\/div>\n    <\/div>\n\n    <aside class=\"cv-card\" data-cv-placeholder>\n      <div class=\"cv-placeholder\">\n        <div class=\"cv-placeholder-icon\">15<\/div>\n        <h2>Resultado de vacaciones<\/h2>\n        <p>Prepar\u00e1 los per\u00edodos, complet\u00e1 los datos documentados y presion\u00e1 \u201cCalcular vacaciones\u201d. El resultado y el PDF permanecer\u00e1n ocultos hasta entonces.<\/p>\n      <\/div>\n    <\/aside>\n\n    <aside class=\"cv-card cv-hidden\" data-cv-output=\"summary\">\n      <h2>Resultado estimado<\/h2>\n      <div class=\"cv-result-main\">\n        <span data-cv-label=\"amount\">Valor remunerativo de referencia<\/span>\n        <strong data-cv-result=\"amount\">Q 0.00<\/strong>\n      <\/div>\n      <div class=\"cv-metrics\">\n        <div class=\"cv-metric\"><span>D\u00edas adquiridos incluidos<\/span><strong data-cv-result=\"generated\">0.00<\/strong><\/div>\n        <div class=\"cv-metric\"><span>Saldo adquirido pendiente<\/span><strong data-cv-result=\"pending\">0.00<\/strong><\/div>\n        <div class=\"cv-metric\"><span>Per\u00edodos completos incluidos<\/span><strong data-cv-result=\"periods\">0<\/strong><\/div>\n        <div class=\"cv-metric\"><span>Parte proporcional actual<\/span><strong data-cv-result=\"proportional\">0.00 d\u00edas<\/strong><\/div>\n        <div class=\"cv-metric\"><span>Valor de per\u00edodos completos<\/span><strong data-cv-result=\"full-amount\">Q 0.00<\/strong><\/div>\n        <div class=\"cv-metric\"><span>Valor de parte proporcional<\/span><strong data-cv-result=\"partial-amount\">Q 0.00<\/strong><\/div>\n      <\/div>\n      <div class=\"cv-note\" data-cv-result=\"observation\"><\/div>\n    <\/aside>\n  <\/section>\n\n  <section class=\"cv-card cv-detail cv-hidden\" data-cv-output=\"details\">\n    <h2>Desglose del c\u00e1lculo<\/h2>\n    <div class=\"cv-breakdown\">\n      <div class=\"cv-row\"><span>D\u00edas calendario de servicio considerados<\/span><strong data-cv-detail=\"service\">0<\/strong><\/div>\n      <div class=\"cv-row\"><span>Per\u00edodos completos incluidos<\/span><strong data-cv-detail=\"included\">0<\/strong><\/div>\n      <div class=\"cv-row\"><span>Per\u00edodos excluidos por menos de 150 d\u00edas computables<\/span><strong data-cv-detail=\"ineligible\">0<\/strong><\/div>\n      <div class=\"cv-row\"><span>Saldo de per\u00edodos completos<\/span><strong data-cv-detail=\"pending\">0.00 d\u00edas<\/strong><\/div>\n      <div class=\"cv-row\"><span>Parte proporcional del per\u00edodo en curso<\/span><strong data-cv-detail=\"proportional\">0.00 d\u00edas<\/strong><\/div>\n      <div class=\"cv-row\"><span>D\u00edas considerados en el valor<\/span><strong data-cv-detail=\"payable\">0.00 d\u00edas<\/strong><\/div>\n    <\/div>\n    <div class=\"cv-period-breakdown\">\n      <table class=\"cv-period-table\">\n        <thead><tr><th>Per\u00edodo<\/th><th>D\u00edas computables<\/th><th>Generados<\/th><th>Gozados<\/th><th>Pendientes<\/th><th>Promedio<\/th><th>Valor<\/th><\/tr><\/thead>\n        <tbody data-cv-breakdown-body><\/tbody>\n      <\/table>\n    <\/div>\n  <\/section>\n\n  <section class=\"cv-cta\">\n    <div>\n      <h2>\u00bfNecesit\u00e1s revisar vacaciones pendientes?<\/h2>\n      <p>Conservis puede revisar registros, per\u00edodos gozados, promedios salariales y el tratamiento correcto al finalizar la relaci\u00f3n laboral.<\/p>\n    <\/div>\n    <a class=\"cv-button\" href=\"https:\/\/www.conservisabogados.com\/contactenos\/\" target=\"_blank\" rel=\"noopener\">Solicitar revisi\u00f3n laboral<\/a>\n  <\/section>\n\n  <section class=\"cv-card cv-resource\">\n    <div class=\"cv-resource-image\">Asesor\u00eda laboral para empresas<\/div>\n    <div>\n      <span class=\"cv-label\">Prevenci\u00f3n y cumplimiento<\/span>\n      <h2>Document\u00e1 correctamente los per\u00edodos de vacaciones<\/h2>\n      <p>La fecha de disfrute, el pago anticipado y la constancia escrita son relevantes para reducir contingencias y acreditar el cumplimiento patronal.<\/p>\n      <a class=\"cv-button cv-secondary\" href=\"https:\/\/www.conservisabogados.com\/abogados-laborales-en-guatemala\/\" target=\"_blank\" rel=\"noopener\">Conocer la asesor\u00eda laboral<\/a>\n    <\/div>\n  <\/section>\n\n  <section class=\"cv-card cv-legal\">\n    <h2>Base legal y alcance<\/h2>\n    <p><strong>Derecho anual:<\/strong> el C\u00f3digo de Trabajo reconoce un m\u00ednimo de 15 d\u00edas h\u00e1biles de vacaciones remuneradas despu\u00e9s de cada a\u00f1o de trabajo continuo. Para adquirir el per\u00edodo anual deben computarse al menos 150 d\u00edas en los t\u00e9rminos del art\u00edculo 131.<\/p>\n    <p><strong>Promedio:<\/strong> la remuneraci\u00f3n se calcula con el promedio de salarios ordinarios y extraordinarios de los \u00faltimos tres meses en empresas agr\u00edcolas o ganaderas, y del \u00faltimo a\u00f1o en los dem\u00e1s casos. El importe debe cubrirse por anticipado.<\/p>\n    <p><strong>Relaci\u00f3n activa:<\/strong> las vacaciones deben disfrutarse efectivamente y no sustituirse por dinero. La herramienta revisa \u00fanicamente el per\u00edodo completo m\u00e1s reciente y muestra la parte proporcional actual como proyecci\u00f3n separada, no como saldo adquirido.<\/p>\n    <p><strong>Terminaci\u00f3n:<\/strong> si la relaci\u00f3n finaliza, las vacaciones no gozadas pueden compensarse en dinero, incluida la parte proporcional del per\u00edodo en curso. Para los per\u00edodos completos omitidos, la herramienta analiza \u00fanicamente los \u00faltimos cinco a\u00f1os y exige datos separados por per\u00edodo.<\/p>\n  <\/section>\n\n  <div class=\"cv-disclaimer\">Herramienta educativa y estimativa. El usuario debe ingresar los d\u00edas computables, vacaciones gozadas y promedio salarial documentado de cada per\u00edodo. La herramienta no decide qu\u00e9 ausencias deben computarse conforme al art\u00edculo 131, no incorpora beneficios contractuales superiores a 15 d\u00edas ni resuelve controversias sobre prueba, prescripci\u00f3n o continuidad. Tampoco calcula la fecha calendario de regreso, porque los d\u00edas h\u00e1biles dependen de la jornada, descansos y asuetos aplicables. El resultado no sustituye una revisi\u00f3n legal, laboral o contable del expediente.<\/div>\n<\/main>\n\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n<script>\n(function () {\n  \"use strict\";\n  var LOGO_URL = \"https:\/\/www.conservisabogados.com\/wp-content\/uploads\/2022\/04\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png\";\n  var CONTACT_URL = \"https:\/\/www.conservisabogados.com\/contactenos\/\";\n  var DAY_MS = 86400000;\n\n  function money(value) {\n    return \"Q \" + Number(value || 0).toLocaleString(\"es-GT\", { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n  }\n\n  function decimal(value) {\n    return Number(value || 0).toLocaleString(\"es-GT\", { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n  }\n\n  function parseUtcDate(value) {\n    if (!\/^\\d{4}-\\d{2}-\\d{2}$\/.test(value || \"\")) return null;\n    var parts = value.split(\"-\").map(Number);\n    var date = new Date(Date.UTC(parts[0], parts[1] - 1, parts[2]));\n    if (date.getUTCFullYear() !== parts[0] || date.getUTCMonth() !== parts[1] - 1 || date.getUTCDate() !== parts[2]) return null;\n    return date;\n  }\n\n  function addUtcYears(date, years) {\n    var month = date.getUTCMonth();\n    var day = date.getUTCDate();\n    var result = new Date(Date.UTC(date.getUTCFullYear() + years, month, day));\n    if (result.getUTCMonth() !== month) result = new Date(Date.UTC(date.getUTCFullYear() + years, month + 1, 0));\n    return result;\n  }\n\n  function addUtcDays(date, days) {\n    return new Date(date.getTime() + days * DAY_MS);\n  }\n\n  function anniversaryState(start, end) {\n    var years = end.getUTCFullYear() - start.getUTCFullYear();\n    if (addUtcYears(start, years) > end) years -= 1;\n    years = Math.max(0, years);\n    var currentStart = addUtcYears(start, years);\n    var nextAnniversary = addUtcYears(start, years + 1);\n    var partialDays = Math.max(0, Math.floor((end - currentStart) \/ DAY_MS) + 1);\n    var periodLength = Math.round((nextAnniversary - currentStart) \/ DAY_MS);\n    partialDays = Math.min(partialDays, periodLength);\n    return {\n      fullPeriods: years,\n      currentStart: currentStart,\n      nextAnniversary: nextAnniversary,\n      partialDays: partialDays,\n      periodLength: periodLength,\n      proportionalDays: partialDays * 15 \/ periodLength\n    };\n  }\n\n  function dateText(date) {\n    return new Intl.DateTimeFormat(\"es-GT\", { timeZone: \"UTC\", day: \"2-digit\", month: \"2-digit\", year: \"numeric\" }).format(date);\n  }\n\n  function buildPeriodSpecs(start, end, status) {\n    var state = anniversaryState(start, end);\n    var firstIndex = status === \"ended\" ? Math.max(0, state.fullPeriods - 5) : Math.max(0, state.fullPeriods - 1);\n    var specs = [];\n    for (var index = firstIndex; index < state.fullPeriods; index += 1) {\n      var periodStart = addUtcYears(start, index);\n      var nextStart = addUtcYears(start, index + 1);\n      var periodEnd = addUtcDays(nextStart, -1);\n      specs.push({\n        type: \"full\",\n        index: index,\n        label: dateText(periodStart) + \" - \" + dateText(periodEnd),\n        caption: status === \"ended\" ? \"Per\u00edodo completo dentro de los \u00faltimos cinco a\u00f1os\" : \"\u00daltimo per\u00edodo anual adquirido\"\n      });\n    }\n    specs.push({\n      type: \"partial\",\n      index: state.fullPeriods,\n      label: dateText(state.currentStart) + \" - \" + dateText(end),\n      caption: status === \"ended\" ? \"Parte proporcional al terminar\" : \"Proyecci\u00f3n del per\u00edodo en curso\",\n      serviceDays: state.partialDays,\n      periodLength: state.periodLength,\n      generated: state.proportionalDays\n    });\n    return { state: state, specs: specs };\n  }\n\n  function loadImage(url) {\n    return new Promise(function (resolve) {\n      var image = new Image();\n      image.crossOrigin = \"anonymous\";\n      image.onload = function () {\n        try {\n          var canvas = document.createElement(\"canvas\");\n          canvas.width = image.naturalWidth || image.width;\n          canvas.height = image.naturalHeight || image.height;\n          canvas.getContext(\"2d\").drawImage(image, 0, 0);\n          resolve(canvas.toDataURL(\"image\/png\"));\n        } catch (error) { resolve(null); }\n      };\n      image.onerror = function () { resolve(null); };\n      image.src = url;\n    });\n  }\n\n  function addContainedImage(doc, imageData, x, y, width, height, padding) {\n    if (!imageData) return;\n    var innerWidth = width - padding * 2;\n    var innerHeight = height - padding * 2;\n    var props = doc.getImageProperties(imageData);\n    var scale = Math.min(innerWidth \/ props.width, innerHeight \/ props.height);\n    var drawWidth = props.width * scale;\n    var drawHeight = props.height * scale;\n    doc.addImage(imageData, \"PNG\", x + (width - drawWidth) \/ 2, y + (height - drawHeight) \/ 2, drawWidth, drawHeight, undefined, \"FAST\");\n  }\n\n  function addFooter(doc) {\n    var pages = doc.internal.getNumberOfPages();\n    for (var page = 1; page <= pages; page += 1) {\n      doc.setPage(page);\n      doc.setDrawColor(201, 162, 77);\n      doc.setLineWidth(.5);\n      doc.line(14, 264, 202, 264);\n      doc.setFont(\"helvetica\", \"normal\");\n      doc.setFontSize(8);\n      doc.setTextColor(100, 116, 139);\n      doc.text(\"Generado en conservisabogados.com\", 14, 270);\n      doc.text(\"P\u00e1gina \" + page + \" de \" + pages, 202, 270, { align: \"right\" });\n    }\n  }\n\n  async function generatePdf(data) {\n    if (!window.jspdf || !window.jspdf.jsPDF) {\n      alert(\"No se pudo cargar la herramienta para generar el PDF. Verific\u00e1 la conexi\u00f3n e intent\u00e1 nuevamente.\");\n      return;\n    }\n    var jsPDF = window.jspdf.jsPDF;\n    var doc = new jsPDF(\"p\", \"mm\", \"letter\");\n    var pageWidth = doc.internal.pageSize.getWidth();\n    var logo = await loadImage(LOGO_URL);\n\n    doc.setFillColor(6, 26, 58);\n    doc.roundedRect(10, 10, pageWidth - 20, 52, 4, 4, \"F\");\n    if (logo) {\n      var logoWidth = 34;\n      var logoHeight = 24;\n      var logoX = (pageWidth - logoWidth) \/ 2;\n      doc.setFillColor(255, 255, 255);\n      doc.roundedRect(logoX, 14, logoWidth, logoHeight, 4, 4, \"F\");\n      addContainedImage(doc, logo, logoX, 14, logoWidth, logoHeight, 3.2);\n    }\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.setFontSize(13);\n    doc.setTextColor(255, 255, 255);\n    doc.text(\"Conservis Abogados\", pageWidth \/ 2, 45, { align: \"center\" });\n    doc.setFontSize(15);\n    doc.setTextColor(240, 213, 146);\n    doc.text(\"Reporte de vacaciones estimadas\", pageWidth \/ 2, 54, { align: \"center\" });\n\n    doc.setFillColor(201, 162, 77);\n    doc.roundedRect(14, 68, pageWidth - 28, 25, 5, 5, \"F\");\n    doc.setFont(\"helvetica\", \"normal\");\n    doc.setFontSize(10);\n    doc.setTextColor(255, 255, 255);\n    doc.text(data.amountLabel, 20, 78);\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.setFontSize(22);\n    doc.text(data.amountFmt, 20, 89);\n\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.setFontSize(13);\n    doc.setTextColor(6, 26, 58);\n    doc.text(\"Resumen\", 14, 106);\n    var rows = [\n      [\"Fecha de inicio\", data.startText],\n      [\"Fecha de c\u00e1lculo o terminaci\u00f3n\", data.endText],\n      [\"Estado de la relaci\u00f3n\", data.statusText],\n      [\"Per\u00edodos completos incluidos\", String(data.includedPeriods)],\n      [\"Per\u00edodos sin 150 d\u00edas computables\", String(data.ineligiblePeriods)],\n      [\"Saldo adquirido pendiente\", data.pendingFmt + \" d\u00edas\"],\n      [\"Parte proporcional actual\", data.proportionalFmt + \" d\u00edas\"],\n      [\"D\u00edas considerados en el valor\", data.payableFmt + \" d\u00edas\"]\n    ];\n    var y = 116;\n    rows.forEach(function (row, index) {\n      var tone = index % 2 === 0 ? 248 : 255;\n      doc.setFillColor(tone, index % 2 === 0 ? 250 : 255, index % 2 === 0 ? 252 : 255);\n      doc.roundedRect(14, y - 5, pageWidth - 28, 8, 2, 2, \"F\");\n      doc.setFont(\"helvetica\", \"normal\");\n      doc.setFontSize(8.8);\n      doc.setTextColor(71, 85, 105);\n      doc.text(row[0], 18, y);\n      doc.setFont(\"helvetica\", \"bold\");\n      doc.setTextColor(6, 26, 58);\n      doc.text(row[1], pageWidth - 18, y, { align: \"right\" });\n      y += 9;\n    });\n\n    y += 7;\n    if (data.periodRows.length > 2) {\n      doc.setFont(\"helvetica\", \"normal\");\n      doc.setFontSize(8.5);\n      doc.setTextColor(100, 116, 139);\n      doc.text(\"El detalle por per\u00edodo contin\u00faa en la p\u00e1gina siguiente.\", 14, y);\n      doc.addPage();\n      y = 22;\n    }\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.setFontSize(11);\n    doc.setTextColor(6, 26, 58);\n    doc.text(\"Detalle por per\u00edodo\", 14, y);\n    y += 7;\n    var columns = [14, 78, 99, 119, 140, 171, 202];\n    function drawPeriodHeader(atY) {\n      doc.setFillColor(6, 26, 58);\n      doc.rect(14, atY - 5, pageWidth - 28, 8, \"F\");\n      doc.setFont(\"helvetica\", \"bold\");\n      doc.setFontSize(6.6);\n      doc.setTextColor(255, 255, 255);\n      doc.text(\"Per\u00edodo\", columns[0] + 2, atY);\n      doc.text(\"Computables\", columns[1], atY, { align: \"right\" });\n      doc.text(\"Generados\", columns[2], atY, { align: \"right\" });\n      doc.text(\"Gozados\", columns[3], atY, { align: \"right\" });\n      doc.text(\"Pendientes\", columns[4], atY, { align: \"right\" });\n      doc.text(\"Promedio\", columns[5], atY, { align: \"right\" });\n      doc.text(\"Valor\", columns[6], atY, { align: \"right\" });\n    }\n    drawPeriodHeader(y);\n    y += 9;\n    data.periodRows.forEach(function (row, index) {\n      if (y > 231) {\n        doc.addPage();\n        y = 22;\n        drawPeriodHeader(y);\n        y += 9;\n      }\n      if (index % 2 === 0) {\n        doc.setFillColor(248, 250, 252);\n        doc.rect(14, y - 5, pageWidth - 28, 8, \"F\");\n      }\n      doc.setFont(\"helvetica\", \"normal\");\n      doc.setFontSize(6.3);\n      doc.setTextColor(71, 85, 105);\n      doc.text(row.label, columns[0] + 2, y);\n      doc.text(row.computableText, columns[1], y, { align: \"right\" });\n      doc.text(row.generatedFmt, columns[2], y, { align: \"right\" });\n      doc.text(row.usedFmt, columns[3], y, { align: \"right\" });\n      doc.text(row.pendingFmt, columns[4], y, { align: \"right\" });\n      doc.text(row.averageFmt, columns[5], y, { align: \"right\" });\n      doc.setFont(\"helvetica\", \"bold\");\n      doc.setTextColor(6, 26, 58);\n      doc.text(row.amountFmt, columns[6], y, { align: \"right\" });\n      y += 9;\n    });\n\n    if (y > 218) {\n      doc.addPage();\n      y = 22;\n    }\n    doc.setFillColor(247, 248, 251);\n    doc.setDrawColor(201, 162, 77);\n    doc.setLineWidth(.5);\n    var note = data.observation + \" Cada valor se calcula con el promedio mensual del per\u00edodo \/ 30 x d\u00edas pendientes. El resultado no sustituye la revisi\u00f3n de registros y documentos laborales.\";\n    doc.setFont(\"helvetica\", \"normal\");\n    doc.setFontSize(8.2);\n    var lines = doc.splitTextToSize(note, pageWidth - 36);\n    var noteHeight = Math.max(31, lines.length * 4 + 14);\n    doc.roundedRect(14, y + 2, pageWidth - 28, noteHeight, 4, 4, \"FD\");\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.setFontSize(10);\n    doc.setTextColor(6, 26, 58);\n    doc.text(\"Alcance del resultado\", 18, y + 10);\n    doc.setFont(\"helvetica\", \"normal\");\n    doc.setFontSize(8.2);\n    doc.setTextColor(71, 85, 105);\n    doc.text(lines, 18, y + 17);\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.setFontSize(8.8);\n    doc.setTextColor(169, 130, 46);\n    doc.text(\"Solicit\u00e1 una revisi\u00f3n laboral: \" + CONTACT_URL, 14, 252);\n    addFooter(doc);\n    doc.save(\"reporte-vacaciones-conservis.pdf\");\n  }\n\n  function init(root) {\n    if (!root || root.getAttribute(\"data-cv-initialized\") === \"true\") return;\n    var q = function (selector) { return root.querySelector(selector); };\n    var fields = {\n      start: q('[data-cv-field=\"start\"]'),\n      end: q('[data-cv-field=\"end\"]'),\n      status: q('[data-cv-field=\"status\"]'),\n      sector: q('[data-cv-field=\"sector\"]')\n    };\n    var prepareButton = q('[data-cv-action=\"prepare\"]');\n    var calculateButton = q('[data-cv-action=\"calculate\"]');\n    var resetButton = q('[data-cv-action=\"reset\"]');\n    var pdfButton = q('[data-cv-action=\"pdf\"]');\n    var periodsBox = q('[data-cv-periods]');\n    var periodList = q('[data-cv-period-list]');\n    var periodsHelp = q('[data-cv-periods-help]');\n    var placeholder = q('[data-cv-placeholder]');\n    var summary = q('[data-cv-output=\"summary\"]');\n    var details = q('[data-cv-output=\"details\"]');\n    var breakdownBody = q('[data-cv-breakdown-body]');\n    var errorBox = q('[data-cv-error]');\n    if (!prepareButton || !calculateButton || !resetButton || !pdfButton || !periodsBox || !periodList || !periodsHelp || !placeholder || !summary || !details || !breakdownBody || !errorBox) return;\n\n    function hideError() { errorBox.textContent = \"\"; errorBox.style.display = \"none\"; }\n    function showError(message) { errorBox.textContent = message; errorBox.style.display = \"block\"; }\n\n    function invalidateResult() {\n      root._cvData = null;\n      pdfButton.classList.add(\"cv-hidden\");\n      summary.classList.add(\"cv-hidden\");\n      details.classList.add(\"cv-hidden\");\n      placeholder.classList.remove(\"cv-hidden\");\n    }\n\n    function configurationSignature() {\n      return [fields.start.value, fields.end.value, fields.status.value, fields.sector.value].join(\"|\");\n    }\n\n    function clearPeriods() {\n      root._cvPrepared = null;\n      root._cvPreparedSignature = \"\";\n      periodList.innerHTML = \"\";\n      periodsBox.classList.add(\"cv-hidden\");\n      calculateButton.classList.add(\"cv-hidden\");\n      prepareButton.textContent = \"Preparar per\u00edodos\";\n      invalidateResult();\n    }\n\n    function setText(selector, value) {\n      var element = q(selector);\n      if (element) element.textContent = value;\n    }\n\n    function periodRowHtml(spec, rowIndex) {\n      var averageLabel = fields.sector.value === \"agricultural\" ? \"Promedio mensual de los 3 meses aplicables (Q)\" : \"Promedio mensual del a\u00f1o aplicable (Q)\";\n      if (spec.type === \"partial\") {\n        return '<div class=\"cv-period-row\" data-cv-period-row=\"' + rowIndex + '\" data-cv-period-type=\"partial\">' +\n          '<div class=\"cv-period-title\"><strong>' + spec.label + '<\/strong><span>' + spec.caption + ' \u00b7 ' + decimal(spec.generated) + ' d\u00edas proyectados<\/span><\/div>' +\n          '<div class=\"cv-period-inputs\">' +\n            '<div class=\"cv-field\"><label>D\u00edas ya gozados o anticipados<\/label><input data-cv-period-field=\"used\" type=\"number\" inputmode=\"decimal\" min=\"0\" step=\"0.01\" value=\"0\"><div class=\"cv-help\">Ingres\u00e1 cero si no existe un registro aplicable.<\/div><\/div>' +\n            '<div class=\"cv-field\"><label>' + averageLabel + '<\/label><input data-cv-period-field=\"average\" type=\"number\" inputmode=\"decimal\" min=\"0\" step=\"0.01\" value=\"0\"><\/div>' +\n          '<\/div><\/div>';\n      }\n      return '<div class=\"cv-period-row\" data-cv-period-row=\"' + rowIndex + '\" data-cv-period-type=\"full\">' +\n        '<div class=\"cv-period-title\"><strong>' + spec.label + '<\/strong><span>' + spec.caption + '<\/span><\/div>' +\n        '<div class=\"cv-period-inputs\">' +\n          '<div class=\"cv-field\"><label>D\u00edas computables del per\u00edodo<\/label><input data-cv-period-field=\"computable\" type=\"number\" inputmode=\"numeric\" min=\"0\" max=\"366\" step=\"1\" value=\"0\"><div class=\"cv-help\">Inclu\u00ed \u00fanicamente los d\u00edas computables conforme al art\u00edculo 131.<\/div><\/div>' +\n          '<div class=\"cv-field\"><label>D\u00edas ya gozados<\/label><input data-cv-period-field=\"used\" type=\"number\" inputmode=\"decimal\" min=\"0\" max=\"15\" step=\"0.01\" value=\"0\"><\/div>' +\n          '<div class=\"cv-field\"><label>' + averageLabel + '<\/label><input data-cv-period-field=\"average\" type=\"number\" inputmode=\"decimal\" min=\"0\" step=\"0.01\" value=\"0\"><\/div>' +\n        '<\/div><\/div>';\n    }\n\n    function preparePeriods() {\n      hideError();\n      var start = parseUtcDate(fields.start.value);\n      var end = parseUtcDate(fields.end.value);\n      if (!start || !end) { showError(\"Ingres\u00e1 una fecha de inicio y una fecha de c\u00e1lculo v\u00e1lidas.\"); return; }\n      if (end < start) { showError(\"La fecha de c\u00e1lculo no puede ser anterior a la fecha de inicio.\"); return; }\n      var prepared = buildPeriodSpecs(start, end, fields.status.value);\n      periodList.innerHTML = prepared.specs.map(periodRowHtml).join(\"\");\n      periodList.querySelectorAll(\"input\").forEach(function (input) {\n        input.addEventListener(\"input\", invalidateResult);\n        input.addEventListener(\"change\", invalidateResult);\n      });\n      root._cvPrepared = prepared;\n      root._cvPreparedSignature = configurationSignature();\n      periodsHelp.textContent = fields.status.value === \"ended\"\n        ? \"Se muestran como m\u00e1ximo los \u00faltimos cinco per\u00edodos completos, m\u00e1s la parte proporcional actual.\"\n        : \"Se muestra el \u00faltimo per\u00edodo anual adquirido y, por separado, la proyecci\u00f3n del per\u00edodo en curso.\";\n      periodsBox.classList.remove(\"cv-hidden\");\n      calculateButton.classList.remove(\"cv-hidden\");\n      prepareButton.textContent = \"Volver a preparar per\u00edodos\";\n      invalidateResult();\n    }\n\n    function calculate() {\n      hideError();\n      if (!root._cvPrepared || root._cvPreparedSignature !== configurationSignature()) {\n        showError(\"Prepar\u00e1 nuevamente los per\u00edodos antes de calcular.\");\n        return;\n      }\n      var start = parseUtcDate(fields.start.value);\n      var end = parseUtcDate(fields.end.value);\n      var statusEnded = fields.status.value === \"ended\";\n      var fullGenerated = 0;\n      var fullPending = 0;\n      var fullAmount = 0;\n      var partialGenerated = 0;\n      var partialPending = 0;\n      var partialAmount = 0;\n      var includedPeriods = 0;\n      var ineligiblePeriods = 0;\n      var periodRows = [];\n      var inputRows = periodList.querySelectorAll(\"[data-cv-period-row]\");\n      var validationError = \"\";\n\n      inputRows.forEach(function (rowElement, rowIndex) {\n        if (validationError) return;\n        var spec = root._cvPrepared.specs[rowIndex];\n        var used = Number(rowElement.querySelector('[data-cv-period-field=\"used\"]').value || 0);\n        var average = Number(rowElement.querySelector('[data-cv-period-field=\"average\"]').value || 0);\n        if (!Number.isFinite(used) || used < 0 || !Number.isFinite(average) || average < 0) {\n          validationError = \"Los d\u00edas y promedios no pueden ser negativos.\";\n          return;\n        }\n\n        var generated;\n        var computableText;\n        if (spec.type === \"full\") {\n          var computable = Number(rowElement.querySelector('[data-cv-period-field=\"computable\"]').value || 0);\n          if (!Number.isFinite(computable) || computable < 0 || computable > 366 || Math.floor(computable) !== computable) {\n            validationError = \"Ingres\u00e1 d\u00edas computables enteros entre 0 y 366 en cada per\u00edodo completo.\";\n            return;\n          }\n          if (computable === 0) {\n            validationError = \"Complet\u00e1 los d\u00edas computables de cada per\u00edodo anual. Si fueron menos de 150, ingres\u00e1 la cantidad real.\";\n            return;\n          }\n          generated = computable >= 150 ? 15 : 0;\n          computableText = String(computable);\n          if (generated === 0) ineligiblePeriods += 1;\n          else includedPeriods += 1;\n        } else {\n          generated = spec.generated;\n          computableText = \"Proporcional\";\n        }\n\n        if (used > generated + .005) {\n          validationError = \"Los d\u00edas gozados no pueden superar los d\u00edas generados en el per\u00edodo \" + spec.label + \".\";\n          return;\n        }\n        var pending = Math.max(0, generated - used);\n        if (pending > .005 && average <= 0) {\n          validationError = \"Ingres\u00e1 el promedio mensual aplicable al per\u00edodo \" + spec.label + \".\";\n          return;\n        }\n        var amount = average \/ 30 * pending;\n        if (spec.type === \"full\") {\n          fullGenerated += generated;\n          fullPending += pending;\n          fullAmount += amount;\n        } else {\n          partialGenerated = generated;\n          partialPending = pending;\n          partialAmount = amount;\n        }\n        periodRows.push({\n          type: spec.type,\n          label: spec.type === \"partial\" ? spec.label + (statusEnded ? \" (proporcional)\" : \" (proyecci\u00f3n)\") : spec.label,\n          computableText: computableText,\n          generatedFmt: decimal(generated),\n          usedFmt: decimal(used),\n          pendingFmt: decimal(pending),\n          averageFmt: money(average),\n          amountFmt: money(amount)\n        });\n      });\n\n      if (validationError) { showError(validationError); return; }\n\n      var payableDays = statusEnded ? fullPending + partialPending : fullPending;\n      var amount = statusEnded ? fullAmount + partialAmount : fullAmount;\n      var serviceDays = Math.floor((end - start) \/ DAY_MS) + 1;\n      var sectorText = fields.sector.value === \"agricultural\" ? \"promedio de los \u00faltimos tres meses\" : \"promedio del \u00faltimo a\u00f1o\";\n      var statusText = statusEnded ? \"Relaci\u00f3n laboral terminada\" : \"Relaci\u00f3n laboral activa\";\n      var amountLabel = statusEnded ? \"Compensaci\u00f3n total estimada al terminar\" : \"Valor referencial del saldo anual adquirido\";\n      var observation;\n\n      if (!statusEnded) {\n        observation = \"La relaci\u00f3n est\u00e1 activa. El monto principal corresponde \u00fanicamente al saldo del \u00faltimo per\u00edodo anual adquirido y no autoriza sustituir vacaciones por dinero. La parte proporcional actual se presenta separadamente como proyecci\u00f3n. Cada promedio debe corresponder al \" + sectorText + \" contado desde la adquisici\u00f3n del derecho.\";\n      } else {\n        observation = \"La relaci\u00f3n est\u00e1 terminada. El c\u00e1lculo incluye hasta los \u00faltimos cinco per\u00edodos completos identificados y la parte proporcional actual. Cada promedio debe corresponder al \" + sectorText + \" aplicable al respectivo per\u00edodo.\";\n      }\n      if (ineligiblePeriods > 0) observation += \" Se excluyeron \" + ineligiblePeriods + \" per\u00edodo(s) con menos de 150 d\u00edas computables reportados.\";\n\n      var data = {\n        amountFmt: money(amount),\n        amountLabel: amountLabel,\n        generatedFmt: decimal(fullGenerated),\n        pendingFmt: decimal(fullPending),\n        proportionalFmt: decimal(partialGenerated),\n        payableFmt: decimal(payableDays),\n        fullAmountFmt: money(fullAmount),\n        partialAmountFmt: money(partialAmount),\n        includedPeriods: includedPeriods,\n        ineligiblePeriods: ineligiblePeriods,\n        serviceDays: serviceDays,\n        statusText: statusText,\n        startText: fields.start.value,\n        endText: fields.end.value,\n        observation: observation,\n        periodRows: periodRows\n      };\n\n      setText('[data-cv-label=\"amount\"]', amountLabel);\n      setText('[data-cv-result=\"amount\"]', data.amountFmt);\n      setText('[data-cv-result=\"generated\"]', data.generatedFmt);\n      setText('[data-cv-result=\"pending\"]', data.pendingFmt);\n      setText('[data-cv-result=\"periods\"]', String(data.includedPeriods));\n      setText('[data-cv-result=\"proportional\"]', data.proportionalFmt + \" d\u00edas\");\n      setText('[data-cv-result=\"full-amount\"]', data.fullAmountFmt);\n      setText('[data-cv-result=\"partial-amount\"]', data.partialAmountFmt);\n      setText('[data-cv-result=\"observation\"]', data.observation);\n      setText('[data-cv-detail=\"service\"]', String(data.serviceDays));\n      setText('[data-cv-detail=\"included\"]', String(data.includedPeriods));\n      setText('[data-cv-detail=\"ineligible\"]', String(data.ineligiblePeriods));\n      setText('[data-cv-detail=\"pending\"]', data.pendingFmt + \" d\u00edas\");\n      setText('[data-cv-detail=\"proportional\"]', data.proportionalFmt + \" d\u00edas\");\n      setText('[data-cv-detail=\"payable\"]', data.payableFmt + \" d\u00edas\");\n      breakdownBody.innerHTML = periodRows.map(function (row) {\n        return \"<tr><td>\" + row.label + \"<\/td><td>\" + row.computableText + \"<\/td><td>\" + row.generatedFmt + \"<\/td><td>\" + row.usedFmt + \"<\/td><td>\" + row.pendingFmt + \"<\/td><td>\" + row.averageFmt + \"<\/td><td>\" + row.amountFmt + \"<\/td><\/tr>\";\n      }).join(\"\");\n\n      root._cvData = data;\n      placeholder.classList.add(\"cv-hidden\");\n      summary.classList.remove(\"cv-hidden\");\n      details.classList.remove(\"cv-hidden\");\n      pdfButton.classList.remove(\"cv-hidden\");\n    }\n\n    prepareButton.addEventListener(\"click\", function (event) { event.preventDefault(); preparePeriods(); });\n    calculateButton.addEventListener(\"click\", function (event) { event.preventDefault(); calculate(); });\n    resetButton.addEventListener(\"click\", function (event) {\n      event.preventDefault();\n      fields.start.value = \"\";\n      fields.end.value = \"\";\n      fields.status.value = \"active\";\n      fields.sector.value = \"general\";\n      hideError();\n      clearPeriods();\n    });\n    pdfButton.addEventListener(\"click\", function (event) {\n      event.preventDefault();\n      if (root._cvData) generatePdf(root._cvData);\n    });\n    Object.keys(fields).forEach(function (key) {\n      fields[key].addEventListener(\"input\", clearPeriods);\n      fields[key].addEventListener(\"change\", clearPeriods);\n    });\n    root.setAttribute(\"data-cv-initialized\", \"true\");\n    clearPeriods();\n  }\n\n  function initAll() {\n    document.querySelectorAll(\"[data-cv-app]\").forEach(init);\n  }\n\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", initAll);\n  else initAll();\n})();\n<\/script>\n\n\n\n<div data-block=\"hook:19058\" class=\"alignfull\"><article id=\"post-19058\" class=\"post-19058\"><div class=\"entry-content is-layout-constrained\">\n<!doctype html>\n<html lang=\"es-GT\">\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <title>Previsualizaci\u00f3n | Carrusel de calculadoras laborales<\/title>\n  <style>\n    body { margin: 0; padding: 42px 0 70px; background: #eef2f6; }\n    .preview-note { max-width: 1132px; margin: 0 auto 18px; padding: 0 24px; color: #667085; font: 14px\/1.5 Inter, system-ui, sans-serif; }\n  <\/style>\n  <script>window.CONSERVIS_CAROUSEL_PREVIEW_PATH = \"\/calculadora-de-indemnizacion-en-guatemala\/\";<\/script>\n<\/head>\n<body>\n  <p class=\"preview-note\">Previsualizaci\u00f3n como si el bloque estuviera en la calculadora de indemnizaci\u00f3n: esa tarjeta se excluye autom\u00e1ticamente.<\/p>\n\n<!-- Carrusel reutilizable de calculadoras laborales | Conservis Abogados -->\n<style>\n  .cvc-calculator-carousel {\n    --cvc-navy: #061a3a;\n    --cvc-navy-2: #0b2d57;\n    --cvc-gold: #c9a24d;\n    --cvc-gold-dark: #9b7627;\n    --cvc-paper: #ffffff;\n    --cvc-surface: #f4f6f8;\n    --cvc-text: #263238;\n    --cvc-muted: #667085;\n    --cvc-line: #dce2e8;\n    width: 100%;\n    max-width: 1180px;\n    margin: 64px auto 0;\n    padding: 0 24px;\n    color: var(--cvc-text);\n    font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif;\n    line-height: 1.5;\n  }\n\n  .cvc-calculator-carousel,\n  .cvc-calculator-carousel * { box-sizing: border-box; }\n\n  .cvc-calculator-carousel .cvc-shell {\n    position: relative;\n    overflow: hidden;\n    padding: 34px;\n    border: 1px solid var(--cvc-line);\n    border-radius: 26px;\n    background:\n      radial-gradient(circle at 100% 0, rgba(201, 162, 77, .12), transparent 30%),\n      linear-gradient(145deg, #fff, #f8fafc);\n    box-shadow: 0 18px 45px rgba(6, 26, 58, .08);\n  }\n\n  .cvc-calculator-carousel .cvc-header {\n    display: flex;\n    align-items: end;\n    justify-content: space-between;\n    gap: 24px;\n    margin-bottom: 24px;\n  }\n\n  .cvc-calculator-carousel .cvc-kicker {\n    margin: 0 0 7px;\n    color: var(--cvc-gold-dark);\n    font-size: 12px;\n    font-weight: 850;\n    letter-spacing: .11em;\n    text-transform: uppercase;\n  }\n\n  .cvc-calculator-carousel .cvc-title {\n    margin: 0;\n    color: var(--cvc-navy);\n    font-family: inherit;\n    font-size: clamp(25px, 3vw, 36px);\n    font-weight: 850;\n    line-height: 1.12;\n    letter-spacing: -.035em;\n  }\n\n  .cvc-calculator-carousel .cvc-all-link {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    flex: 0 0 auto;\n    color: var(--cvc-navy);\n    font-size: 14px;\n    font-weight: 800;\n    text-decoration: none;\n  }\n\n  .cvc-calculator-carousel .cvc-all-link:hover,\n  .cvc-calculator-carousel .cvc-all-link:focus-visible { color: var(--cvc-gold-dark); }\n\n  .cvc-calculator-carousel .cvc-viewport {\n    overflow-x: auto;\n    overflow-y: hidden;\n    scroll-behavior: smooth;\n    scroll-snap-type: x mandatory;\n    scrollbar-width: none;\n    overscroll-behavior-x: contain;\n    -webkit-overflow-scrolling: touch;\n  }\n\n  .cvc-calculator-carousel .cvc-viewport::-webkit-scrollbar { display: none; }\n\n  .cvc-calculator-carousel .cvc-track {\n    display: flex;\n    gap: 18px;\n    margin: 0;\n    padding: 0;\n    list-style: none;\n  }\n\n  .cvc-calculator-carousel .cvc-item {\n    flex: 0 0 calc((100% - 36px) \/ 3);\n    min-width: 0;\n    scroll-snap-align: start;\n  }\n\n  .cvc-calculator-carousel .cvc-card {\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    min-height: 238px;\n    padding: 24px;\n    border: 1px solid var(--cvc-line);\n    border-radius: 19px;\n    background: var(--cvc-paper);\n    color: var(--cvc-text);\n    text-decoration: none;\n    box-shadow: 0 8px 22px rgba(6, 26, 58, .05);\n    transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease;\n  }\n\n  .cvc-calculator-carousel .cvc-card:hover,\n  .cvc-calculator-carousel .cvc-card:focus-visible {\n    border-color: rgba(201, 162, 77, .72);\n    color: var(--cvc-text);\n    transform: translateY(-3px);\n    box-shadow: 0 15px 30px rgba(6, 26, 58, .1);\n    outline: none;\n  }\n\n  .cvc-calculator-carousel .cvc-icon {\n    display: grid;\n    place-items: center;\n    width: 46px;\n    height: 46px;\n    margin-bottom: 20px;\n    border-radius: 14px;\n    background: linear-gradient(135deg, var(--cvc-navy), var(--cvc-navy-2));\n    color: #e6ca80;\n  }\n\n  .cvc-calculator-carousel .cvc-icon svg {\n    width: 23px;\n    height: 23px;\n  }\n\n  .cvc-calculator-carousel .cvc-card-title {\n    margin: 0 0 9px;\n    color: var(--cvc-navy);\n    font-family: inherit;\n    font-size: 19px;\n    font-weight: 820;\n    line-height: 1.2;\n    letter-spacing: -.018em;\n  }\n\n  .cvc-calculator-carousel .cvc-description {\n    margin: 0 0 18px;\n    color: var(--cvc-muted);\n    font-size: 14px;\n    line-height: 1.55;\n  }\n\n  .cvc-calculator-carousel .cvc-open {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    margin-top: auto;\n    color: var(--cvc-navy);\n    font-size: 13px;\n    font-weight: 850;\n  }\n\n  .cvc-calculator-carousel .cvc-card:hover .cvc-open { color: var(--cvc-gold-dark); }\n\n  .cvc-calculator-carousel .cvc-controls {\n    display: flex;\n    justify-content: flex-end;\n    gap: 10px;\n    margin-top: 20px;\n  }\n\n  .cvc-calculator-carousel .cvc-arrow {\n    display: grid;\n    place-items: center;\n    width: 44px;\n    height: 44px;\n    padding: 0;\n    border: 1px solid var(--cvc-line);\n    border-radius: 50%;\n    background: var(--cvc-paper);\n    color: var(--cvc-navy);\n    cursor: pointer;\n    transition: background-color .18s ease, border-color .18s ease, color .18s ease;\n  }\n\n  .cvc-calculator-carousel .cvc-arrow:hover:not(:disabled),\n  .cvc-calculator-carousel .cvc-arrow:focus-visible:not(:disabled) {\n    border-color: var(--cvc-gold);\n    background: var(--cvc-navy);\n    color: var(--cvc-paper);\n    outline: none;\n  }\n\n  .cvc-calculator-carousel .cvc-arrow:disabled {\n    opacity: .38;\n    cursor: default;\n  }\n\n  @media (max-width: 880px) {\n    .cvc-calculator-carousel .cvc-item { flex-basis: calc((100% - 18px) \/ 2); }\n  }\n\n  @media (max-width: 620px) {\n    .cvc-calculator-carousel { margin-top: 48px; padding: 0 14px; }\n    .cvc-calculator-carousel .cvc-shell { padding: 26px 20px 22px; border-radius: 22px; }\n    .cvc-calculator-carousel .cvc-header { align-items: flex-start; flex-direction: column; gap: 12px; }\n    .cvc-calculator-carousel .cvc-item { flex-basis: 88%; }\n    .cvc-calculator-carousel .cvc-card { min-height: 225px; }\n    .cvc-calculator-carousel .cvc-controls { justify-content: space-between; }\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .cvc-calculator-carousel .cvc-viewport { scroll-behavior: auto; }\n    .cvc-calculator-carousel .cvc-card,\n    .cvc-calculator-carousel .cvc-arrow { transition: none; }\n  }\n<\/style>\n\n<section class=\"cvc-calculator-carousel\" aria-labelledby=\"cvc-carousel-title\">\n  <div class=\"cvc-shell\">\n    <header class=\"cvc-header\">\n      <div>\n        <p class=\"cvc-kicker\">Herramientas relacionadas<\/p>\n        <h2 class=\"cvc-title\" id=\"cvc-carousel-title\">Otras calculadoras laborales<\/h2>\n      <\/div>\n      <a class=\"cvc-all-link\" href=\"https:\/\/www.conservisabogados.com\/calculadoras-laborales\/\">\n        Ver todas <span aria-hidden=\"true\">\u2192<\/span>\n      <\/a>\n    <\/header>\n\n    <div class=\"cvc-viewport\" tabindex=\"0\" aria-label=\"Otras calculadoras laborales\">\n      <ul class=\"cvc-track\"><\/ul>\n    <\/div>\n\n    <div class=\"cvc-controls\" aria-label=\"Controles del carrusel\">\n      <button class=\"cvc-arrow cvc-prev\" type=\"button\" aria-label=\"Ver calculadoras anteriores\">\n        <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"m15 18-6-6 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n      <\/button>\n      <button class=\"cvc-arrow cvc-next\" type=\"button\" aria-label=\"Ver calculadoras siguientes\">\n        <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"m9 18 6-6-6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n      <\/button>\n    <\/div>\n  <\/div>\n<\/section>\n\n<script>\n(function () {\n  \"use strict\";\n\n  var calculators = [\n    {\n      slug: \"calculadora-de-indemnizacion-en-guatemala\",\n      title: \"Calculadora de indemnizaci\u00f3n\",\n      description: \"Estim\u00e1 la indemnizaci\u00f3n seg\u00fan el salario y el tiempo de servicio.\",\n      url: \"https:\/\/www.conservisabogados.com\/calculadora-de-indemnizacion-en-guatemala\/\",\n      icon: '<path d=\"M12 3v18M5 6h14M7 6l-4 7h8L7 6Zm10 0-4 7h8l-4-7ZM8 21h8\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>'\n    },\n    {\n      slug: \"calculadora-de-prestaciones-laborales-en-guatemala\",\n      title: \"Calculadora de prestaciones laborales\",\n      description: \"Estim\u00e1 Bono 14, aguinaldo y vacaciones pendientes o proporcionales.\",\n      url: \"https:\/\/www.conservisabogados.com\/calculadora-de-prestaciones-laborales-en-guatemala\/\",\n      icon: '<path d=\"M7 3h10v4H7V3Zm-2 2H4v16h16V5h-1M8 12h8M8 16h5\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>'\n    },\n    {\n      slug: \"calculadora-de-bono-14-en-guatemala\",\n      title: \"Calculadora de Bono 14\",\n      description: \"Calcul\u00e1 el Bono 14 completo o proporcional seg\u00fan el per\u00edodo laborado.\",\n      url: \"https:\/\/www.conservisabogados.com\/calculadora-de-bono-14-en-guatemala\/\",\n      icon: '<path d=\"M4 7h16v12H4V7Zm3-3h10v3H7V4Zm1 9h8M8 16h5\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>'\n    },\n    {\n      slug: \"calculadora-de-aguinaldo-en-guatemala\",\n      title: \"Calculadora de aguinaldo\",\n      description: \"Obten\u00e9 una estimaci\u00f3n del aguinaldo completo o proporcional.\",\n      url: \"https:\/\/www.conservisabogados.com\/calculadora-de-aguinaldo-en-guatemala\/\",\n      icon: '<path d=\"M12 21V9m0 0c-2.8 0-5-1.8-5-4 2.8 0 5 1.8 5 4Zm0 0c2.8 0 5-1.8 5-4-2.8 0-5 1.8-5 4ZM5 12h14v9H5v-9Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>'\n    },\n    {\n      slug: \"calculadora-de-salario-neto-en-guatemala\",\n      title: \"Calculadora de salario neto\",\n      description: \"Estim\u00e1 el salario l\u00edquido despu\u00e9s de las deducciones ingresadas.\",\n      url: \"https:\/\/www.conservisabogados.com\/calculadora-de-salario-neto-en-guatemala\/\",\n      icon: '<path d=\"M4 6h16v12H4V6Zm0 4h16M8 15h4\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>'\n    },\n    {\n      slug: \"calculadora-de-vacaciones-en-guatemala\",\n      title: \"Calculadora de vacaciones\",\n      description: \"Revis\u00e1 d\u00edas generados, gozados y pendientes por per\u00edodo.\",\n      url: \"https:\/\/www.conservisabogados.com\/calculadora-de-vacaciones-en-guatemala\/\",\n      icon: '<path d=\"M5 4v3m14-3v3M4 9h16M5 6h14a1 1 0 0 1 1 1v13H4V7a1 1 0 0 1 1-1Zm3 7h3m2 0h3m-8 3h3\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>'\n    },\n    {\n      slug: \"calculadora-de-horas-extra-en-guatemala\",\n      title: \"Calculadora de horas extra\",\n      description: \"Estim\u00e1 el valor del tiempo extraordinario seg\u00fan salario y jornada.\",\n      url: \"https:\/\/www.conservisabogados.com\/calculadora-de-horas-extra-en-guatemala\/\",\n      icon: '<circle cx=\"12\" cy=\"12\" r=\"8\" stroke=\"currentColor\" stroke-width=\"1.8\"\/><path d=\"M12 8v5l3 2M9 3h6\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>'\n    },\n    {\n      slug: \"salario-minimo-en-guatemala\",\n      title: \"Salario m\u00ednimo en Guatemala\",\n      description: \"Consult\u00e1 los montos vigentes por actividad y circunscripci\u00f3n.\",\n      url: \"https:\/\/www.conservisabogados.com\/salario-minimo-en-guatemala\/\",\n      icon: '<path d=\"M4 19h16M6 16V9m4 7V5m4 11v-4m4 4V7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>'\n    }\n  ];\n\n  function normalizedSlug(pathname) {\n    return String(pathname || \"\")\n      .split(\"?\")[0]\n      .split(\"#\")[0]\n      .replace(\/^\\\/+|\\\/+$\/g, \"\")\n      .split(\"\/\")\n      .pop()\n      .toLowerCase();\n  }\n\n  function currentSlug() {\n    var slug = normalizedSlug(window.location.pathname);\n    var isKnown = calculators.some(function (calculator) { return calculator.slug === slug; });\n    if (!isKnown && window.CONSERVIS_CAROUSEL_PREVIEW_PATH &&\n        (window.location.protocol === \"file:\" || window.location.hostname === \"localhost\")) {\n      slug = normalizedSlug(window.CONSERVIS_CAROUSEL_PREVIEW_PATH);\n    }\n    return slug;\n  }\n\n  function cardMarkup(calculator) {\n    return '<li class=\"cvc-item\" data-calculator-slug=\"' + calculator.slug + '\">' +\n      '<a class=\"cvc-card\" href=\"' + calculator.url + '\">' +\n        '<span class=\"cvc-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\">' + calculator.icon + '<\/svg><\/span>' +\n        '<h3 class=\"cvc-card-title\">' + calculator.title + '<\/h3>' +\n        '<p class=\"cvc-description\">' + calculator.description + '<\/p>' +\n        '<span class=\"cvc-open\">Abrir herramienta <span aria-hidden=\"true\">\u2192<\/span><\/span>' +\n      '<\/a>' +\n    '<\/li>';\n  }\n\n  function initialize(carousel, index) {\n    if (carousel.getAttribute(\"data-cvc-ready\") === \"true\") return;\n    carousel.setAttribute(\"data-cvc-ready\", \"true\");\n\n    var title = carousel.querySelector(\".cvc-title\");\n    var viewport = carousel.querySelector(\".cvc-viewport\");\n    var track = carousel.querySelector(\".cvc-track\");\n    var previous = carousel.querySelector(\".cvc-prev\");\n    var next = carousel.querySelector(\".cvc-next\");\n    var slug = currentSlug();\n    var visibleCalculators = calculators.filter(function (calculator) {\n      return calculator.slug !== slug;\n    });\n\n    if (title) {\n      title.id = \"cvc-carousel-title-\" + index;\n      carousel.setAttribute(\"aria-labelledby\", title.id);\n    }\n\n    track.innerHTML = visibleCalculators.map(cardMarkup).join(\"\");\n\n    function stepSize() {\n      var item = track.querySelector(\".cvc-item\");\n      if (!item) return viewport.clientWidth;\n      var styles = window.getComputedStyle(track);\n      var gap = parseFloat(styles.columnGap || styles.gap) || 0;\n      return item.getBoundingClientRect().width + gap;\n    }\n\n    function updateControls() {\n      var maxScroll = Math.max(0, viewport.scrollWidth - viewport.clientWidth);\n      previous.disabled = viewport.scrollLeft <= 2;\n      next.disabled = viewport.scrollLeft >= maxScroll - 2;\n    }\n\n    previous.addEventListener(\"click\", function () {\n      viewport.scrollBy({ left: -stepSize(), behavior: \"smooth\" });\n    });\n\n    next.addEventListener(\"click\", function () {\n      viewport.scrollBy({ left: stepSize(), behavior: \"smooth\" });\n    });\n\n    viewport.addEventListener(\"scroll\", updateControls, { passive: true });\n    window.addEventListener(\"resize\", updateControls, { passive: true });\n    requestAnimationFrame(updateControls);\n  }\n\n  function initializeAll() {\n    document.querySelectorAll(\".cvc-calculator-carousel\").forEach(initialize);\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", initializeAll, { once: true });\n  } else {\n    initializeAll();\n  }\n})();\n<\/script>\n<\/body>\n<\/html>\n<\/div><\/article><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Calculadora de vacaciones en Guatemala | Conservis Abogados Conservis Abogados Herramienta laboral para Guatemala Calculadora de vacaciones Estima los d\u00edas de vacaciones generados, el saldo pendiente y su valor remunerativo con base en la antig\u00fcedad y el promedio salarial aplicable. 15 d\u00edas h\u00e1bilesM\u00ednimo por cada a\u00f1o continuo de trabajo. Promedio salarialIncluye remuneraciones ordinarias y extraordinarias. [&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-19091","page","type-page","status-publish","hentry"],"blocksy_meta":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Calculadora de vacaciones en Guatemala - CONSERVIS ABOGADOS<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.conservisabogados.com\/en\/vacation-calculator-in-guatemala\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Calculadora de vacaciones en Guatemala - CONSERVIS ABOGADOS\" \/>\n<meta property=\"og:description\" content=\"Calculadora de vacaciones en Guatemala | Conservis Abogados Conservis Abogados Herramienta laboral para Guatemala Calculadora de vacaciones Estima los d\u00edas de vacaciones generados, el saldo pendiente y su valor remunerativo con base en la antig\u00fcedad y el promedio salarial aplicable. 15 d\u00edas h\u00e1bilesM\u00ednimo por cada a\u00f1o continuo de trabajo. Promedio salarialIncluye remuneraciones ordinarias y extraordinarias. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.conservisabogados.com\/en\/vacation-calculator-in-guatemala\/\" \/>\n<meta property=\"og:site_name\" content=\"CONSERVIS ABOGADOS\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-04T16:31:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.conservisabogados.com\/wp-content\/uploads\/2022\/04\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/calculadora-de-vacaciones-en-guatemala\\\/\",\"url\":\"https:\\\/\\\/www.conservisabogados.com\\\/calculadora-de-vacaciones-en-guatemala\\\/\",\"name\":\"Calculadora de vacaciones en Guatemala - CONSERVIS ABOGADOS\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/calculadora-de-vacaciones-en-guatemala\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/calculadora-de-vacaciones-en-guatemala\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.conservisabogados.com\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png\",\"datePublished\":\"2026-08-04T15:56:42+00:00\",\"dateModified\":\"2026-08-04T16:31:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/calculadora-de-vacaciones-en-guatemala\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.conservisabogados.com\\\/calculadora-de-vacaciones-en-guatemala\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/calculadora-de-vacaciones-en-guatemala\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.conservisabogados.com\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png\",\"contentUrl\":\"https:\\\/\\\/www.conservisabogados.com\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/calculadora-de-vacaciones-en-guatemala\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/www.conservisabogados.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calculadora de vacaciones en Guatemala\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/#website\",\"url\":\"https:\\\/\\\/www.conservisabogados.com\\\/\",\"name\":\"CONSERVIS ABOGADOS\",\"description\":\"Bufete de Abogados en Guatemala\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.conservisabogados.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/#organization\",\"name\":\"CONSERVIS ABOGADOS\",\"url\":\"https:\\\/\\\/www.conservisabogados.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.conservisabogados.com\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png\",\"contentUrl\":\"https:\\\/\\\/www.conservisabogados.com\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png\",\"width\":498,\"height\":500,\"caption\":\"CONSERVIS ABOGADOS\"},\"image\":{\"@id\":\"https:\\\/\\\/www.conservisabogados.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Guatemala Vacation Calculator - CONSERVIS LAWYERS","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.conservisabogados.com\/en\/vacation-calculator-in-guatemala\/","og_locale":"en_US","og_type":"article","og_title":"Calculadora de vacaciones en Guatemala - CONSERVIS ABOGADOS","og_description":"Calculadora de vacaciones en Guatemala | Conservis Abogados Conservis Abogados Herramienta laboral para Guatemala Calculadora de vacaciones Estima los d\u00edas de vacaciones generados, el saldo pendiente y su valor remunerativo con base en la antig\u00fcedad y el promedio salarial aplicable. 15 d\u00edas h\u00e1bilesM\u00ednimo por cada a\u00f1o continuo de trabajo. Promedio salarialIncluye remuneraciones ordinarias y extraordinarias. [&hellip;]","og_url":"https:\/\/www.conservisabogados.com\/en\/vacation-calculator-in-guatemala\/","og_site_name":"CONSERVIS ABOGADOS","article_modified_time":"2026-08-04T16:31:55+00:00","og_image":[{"url":"https:\/\/www.conservisabogados.com\/wp-content\/uploads\/2022\/04\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.conservisabogados.com\/calculadora-de-vacaciones-en-guatemala\/","url":"https:\/\/www.conservisabogados.com\/calculadora-de-vacaciones-en-guatemala\/","name":"Guatemala Vacation Calculator - CONSERVIS LAWYERS","isPartOf":{"@id":"https:\/\/www.conservisabogados.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.conservisabogados.com\/calculadora-de-vacaciones-en-guatemala\/#primaryimage"},"image":{"@id":"https:\/\/www.conservisabogados.com\/calculadora-de-vacaciones-en-guatemala\/#primaryimage"},"thumbnailUrl":"https:\/\/www.conservisabogados.com\/wp-content\/uploads\/2022\/04\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png","datePublished":"2026-08-04T15:56:42+00:00","dateModified":"2026-08-04T16:31:55+00:00","breadcrumb":{"@id":"https:\/\/www.conservisabogados.com\/calculadora-de-vacaciones-en-guatemala\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.conservisabogados.com\/calculadora-de-vacaciones-en-guatemala\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.conservisabogados.com\/calculadora-de-vacaciones-en-guatemala\/#primaryimage","url":"https:\/\/www.conservisabogados.com\/wp-content\/uploads\/2022\/04\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png","contentUrl":"https:\/\/www.conservisabogados.com\/wp-content\/uploads\/2022\/04\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.conservisabogados.com\/calculadora-de-vacaciones-en-guatemala\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.conservisabogados.com\/"},{"@type":"ListItem","position":2,"name":"Calculadora de vacaciones en Guatemala"}]},{"@type":"WebSite","@id":"https:\/\/www.conservisabogados.com\/#website","url":"https:\/\/www.conservisabogados.com\/","name":"CONSERVIS ABOGADOS","description":"Law Firm in Guatemala","publisher":{"@id":"https:\/\/www.conservisabogados.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.conservisabogados.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.conservisabogados.com\/#organization","name":"CONSERVIS ABOGADOS","url":"https:\/\/www.conservisabogados.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.conservisabogados.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.conservisabogados.com\/wp-content\/uploads\/2022\/04\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png","contentUrl":"https:\/\/www.conservisabogados.com\/wp-content\/uploads\/2022\/04\/cropped-cropped-Conservis-Abogados-Bufete-de-Abogados-en-Guatemala-1.png","width":498,"height":500,"caption":"CONSERVIS ABOGADOS"},"image":{"@id":"https:\/\/www.conservisabogados.com\/#\/schema\/logo\/image\/"}}]}},"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/www.conservisabogados.com\/en\/wp-json\/wp\/v2\/pages\/19091","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.conservisabogados.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.conservisabogados.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.conservisabogados.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.conservisabogados.com\/en\/wp-json\/wp\/v2\/comments?post=19091"}],"version-history":[{"count":4,"href":"https:\/\/www.conservisabogados.com\/en\/wp-json\/wp\/v2\/pages\/19091\/revisions"}],"predecessor-version":[{"id":19105,"href":"https:\/\/www.conservisabogados.com\/en\/wp-json\/wp\/v2\/pages\/19091\/revisions\/19105"}],"wp:attachment":[{"href":"https:\/\/www.conservisabogados.com\/en\/wp-json\/wp\/v2\/media?parent=19091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}