{"id":2917,"date":"2025-08-10T22:03:24","date_gmt":"2025-08-10T22:03:24","guid":{"rendered":"https:\/\/maranieto.com\/?page_id=2917"},"modified":"2026-01-27T03:19:51","modified_gmt":"2026-01-27T03:19:51","slug":"tabulador-de-costor","status":"publish","type":"page","link":"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/","title":{"rendered":"Tabulador de costos"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Para darte una idea aproximada del costo de tu servicio de m\u00fasica para eventos, utiliza el siguiente tabulador:<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n<meta charset=\"utf-8\" \/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\n<title>Cotizador por Municipio \/ Alcald\u00eda (base: Mundo E, Tlalnepantla)<\/title>\n<style>\n  body{font-family:Segoe UI,Arial,sans-serif;background:#f6f6f6;color:#222;margin:0;padding:0}\n  header{background:#fceeed;color:#000;text-align:center;padding:18px;font-weight:700}\n  main{max-width:720px;margin:18px auto;padding:18px;background:#fff;border-radius:10px;box-shadow:0 6px 18px rgba(0,0,0,.08)}\n  label{display:block;margin-top:12px;font-weight:600}\n  input,select,button{width:100%;padding:10px;margin-top:6px;border-radius:8px;border:1px solid #d0d0d0;font-size:1rem;box-sizing:border-box}\n  button{background:#fceeed;color:#000;border:none;cursor:pointer}\n  button[disabled]{opacity:.6;cursor:not-allowed}\n  #resultados{margin-top:8px}\n  .resultado-item{padding:8px;border-radius:6px;background:#fafafa;border:1px solid #eee;margin-top:8px;display:flex;justify-content:space-between;align-items:center}\n  .small{font-size:.9rem;color:#555}\n  #resultado{margin-top:16px;padding:12px;border-radius:8px;background:#fff;border:1px solid #eee;color:#000;font-weight:700;text-align:center}\n  .detalle{font-weight:600;color:#333}\n<\/style>\n<\/head>\n<body>\n\n<header>Cotizador de Amenizaci\u00f3n (base: Mundo E, Tlalnepantla)<\/header>\n\n<main>\n  <label>Escribe el municipio o alcald\u00eda del evento (ej. &#8220;Naucalpan&#8221;, &#8220;Ecatepec&#8221;):<\/label>\n  <input id=\"municipioInput\" placeholder=\"Municipio o alcald\u00eda...\" \/>\n\n  <button id=\"buscarBtn\" onclick=\"searchMunicipio()\">Buscar municipios<\/button>\n\n  <div id=\"resultados\" class=\"small\"><\/div>\n\n  <div id=\"seleccion\" style=\"display:none;\">\n    <p class=\"small\">Ubicaci\u00f3n seleccionada: <span id=\"ubicacionSeleccionada\"><\/span><\/p>\n    <p class=\"small\">Distancia (aprox.): <span id=\"distanciaText\"><\/span> km<\/p>\n  <\/div>\n\n  <label>\u00bfIncluye equipo de audio?<\/label>\n  <select id=\"equipo\" onchange=\"togglePersonas()\">\n    <option value=\"si\">S\u00ed<\/option>\n    <option value=\"no\">No<\/option>\n  <\/select>\n\n  <div id=\"personasContainer\">\n    <label>N\u00famero de personas (m\u00e1x. 200 sin costo extra):<\/label>\n    <input id=\"personas\" type=\"number\" min=\"1\" value=\"50\" \/>\n  <\/div>\n\n  <label>N\u00famero total de m\u00fasicos (incluyendo al principal):<\/label>\n  <input id=\"musicos\" type=\"number\" min=\"1\" value=\"1\" \/>\n\n  <label>Horas adicionales (despu\u00e9s de la primera hora):<\/label>\n  <input id=\"horas\" type=\"number\" min=\"0\" value=\"0\" \/>\n\n  <label>N\u00famero de canciones especiales:<\/label>\n  <input id=\"canciones\" type=\"number\" min=\"0\" value=\"0\" \/>\n\n  <button id=\"calcularBtn\" onclick=\"calcular()\" disabled>Calcular costo<\/button>\n\n  <div id=\"resultado\" style=\"display:none;\"><\/div>\n<\/main>\n\n<script>\nconst baseLat = 19.528902;\nconst baseLng = -99.222542;\n\nlet lastResults = [];\nlet distanciaEvento = 0;\nlet eventLat = null;\nlet eventLng = null;\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  togglePersonas();\n});\n\nfunction togglePersonas(){\n  const equipo = document.getElementById('equipo').value;\n  document.getElementById('personasContainer').style.display = (equipo === 'si') ? 'block' : 'none';\n}\n\nasync function searchMunicipio(){\n  const q = document.getElementById('municipioInput').value.trim();\n  const resultadosDiv = document.getElementById('resultados');\n  const buscarBtn = document.getElementById('buscarBtn');\n  resultadosDiv.innerHTML = '';\n  eventLat = eventLng = null;\n  distanciaEvento = 0;\n  document.getElementById('seleccion').style.display = 'none';\n  document.getElementById('calcularBtn').disabled = true;\n  document.getElementById('resultado').style.display = 'none';\n\n  if(!q){\n    alert('Escribe un municipio o alcald\u00eda para buscar.');\n    return;\n  }\n\n  buscarBtn.disabled = true;\n  resultadosDiv.textContent = 'Buscando...';\n\n  try {\n    const url = 'https:\/\/nominatim.openstreetmap.org\/search?format=json&addressdetails=1&limit=5&countrycodes=mx&accept-language=es&q='\n                + encodeURIComponent(q);\n    const res = await fetch(url, { headers: { 'User-Agent': 'cotizador\/1.0 (t\u00fa@ejemplo.com)' } });\n    if(!res.ok) throw new Error('Error en la b\u00fasqueda (Nominatim).');\n    const data = await res.json();\n    lastResults = data;\n\n    if(!data || data.length === 0){\n      resultadosDiv.innerHTML = '<div class=\"small\">No se encontraron coincidencias. Intenta otra b\u00fasqueda.<\/div>';\n      buscarBtn.disabled = false;\n      return;\n    }\n\n    resultadosDiv.innerHTML = '<div class=\"small\">Selecciona el lugar correcto:<\/div>';\n    data.forEach((r, i) => {\n      const display = r.display_name;\n      const div = document.createElement('div');\n      div.className = 'resultado-item';\n      div.innerHTML = `<div style=\"flex:1\">${escapeHtml(display)}<\/div>\n                       <div style=\"margin-left:8px\"><button onclick=\"chooseResult(${i})\">Seleccionar<\/button><\/div>`;\n      resultadosDiv.appendChild(div);\n    });\n\n  } catch (err) {\n    console.error(err);\n    resultadosDiv.innerHTML = '<div class=\"small\">Ocurri\u00f3 un error al buscar. Intenta de nuevo m\u00e1s tarde.<\/div>';\n  } finally {\n    buscarBtn.disabled = false;\n  }\n}\n\nfunction chooseResult(index){\n  const r = lastResults[index];\n  if(!r) return;\n  eventLat = parseFloat(r.lat);\n  eventLng = parseFloat(r.lon);\n  distanciaEvento = calcularDistancia(baseLat, baseLng, eventLat, eventLng);\n  document.getElementById('ubicacionSeleccionada').textContent = r.display_name;\n  document.getElementById('distanciaText').textContent = distanciaEvento.toFixed(1);\n  document.getElementById('seleccion').style.display = 'block';\n  document.getElementById('calcularBtn').disabled = false;\n  document.getElementById('resultados').innerHTML = '';\n}\n\nfunction calcularDistancia(lat1, lon1, lat2, lon2){\n  const R = 6371;\n  const dLat = (lat2 - lat1) * Math.PI \/ 180;\n  const dLon = (lon2 - lon1) * Math.PI \/ 180;\n  const a = Math.sin(dLat\/2) * Math.sin(dLat\/2) +\n            Math.cos(lat1 * Math.PI\/180) * Math.cos(lat2 * Math.PI\/180) *\n            Math.sin(dLon\/2) * Math.sin(dLon\/2);\n  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\n  return R * c;\n}\n\nfunction calcular(){\n  if(!distanciaEvento && distanciaEvento !== 0){\n    alert('Selecciona primero el municipio\/alcald\u00eda del evento.');\n    return;\n  }\n\n  const equipo = document.getElementById('equipo').value;\n  let personas = (equipo === 'si') ? parseInt(document.getElementById('personas').value || 0) : 0;\n  personas = isNaN(personas) ? 0 : personas;\n  const musicos = parseInt(document.getElementById('musicos').value) || 1;\n  const horas = parseInt(document.getElementById('horas').value) || 0;\n  const canciones = parseInt(document.getElementById('canciones').value) || 0;\n\n  let total = 0;\n  let detalle = [];\n\n  if(equipo === 'si'){\n    total += 3800;\n    detalle.push({txt:'Servicio base (con audio)', val:3800});\n    if(musicos > 1){\n      const extraMus = (musicos - 1) * 2500;\n      total += extraMus;\n      detalle.push({txt:`M\u00fasicos adicionales (${musicos-1})`, val: extraMus});\n    }\n    if(personas > 200){\n      const extraBloques = Math.ceil((personas - 200) \/ 100);\n      const extraPers = extraBloques * 1000;\n      total += extraPers;\n      detalle.push({txt:`Recargo por ${personas} personas (extra ${extraBloques}\u00d7100)`, val: extraPers});\n    } else {\n      detalle.push({txt:`Personas (${personas}) incluidas en audio base (hasta 200)`, val:0});\n    }\n  } else {\n    total += 2500;\n    detalle.push({txt:'Servicio base (sin audio)', val:2500});\n    if(musicos > 1){\n      const extraMus = (musicos - 1) * 2000;\n      total += extraMus;\n      detalle.push({txt:`M\u00fasicos adicionales (${musicos-1})`, val: extraMus});\n    }\n  }\n\n  if(distanciaEvento > 15){\n    const extraKm = distanciaEvento - 15;\n    const bloques = Math.ceil(extraKm \/ 5);\n    const viaticos = bloques * 250;\n    total += viaticos;\n    detalle.push({txt:`Vi\u00e1ticos (${bloques} bloque(s) de 5 km)`, val: viaticos});\n  } else {\n    detalle.push({txt:`Vi\u00e1ticos: dentro de 15 km (gratis)`, val:0});\n  }\n\n  if(horas > 0){\n    const horasCosto = horas * musicos * 2000;\n    total += horasCosto;\n    detalle.push({txt:`Horas adicionales (${horas} h \u00d7 ${musicos} m\u00fasicos)`, val: horasCosto});\n  }\n\n  if(canciones > 0){\n    const cancionesCosto = canciones * 500;\n    total += cancionesCosto;\n    detalle.push({txt:`Canciones especiales (${canciones})`, val: cancionesCosto});\n  }\n\n  const resultadoDiv = document.getElementById('resultado');\n  resultadoDiv.style.display = 'block';\n\n  function fmt(n){ return '$' + Number(n).toLocaleString('es-MX'); }\n\n  let html = `<div class=\"detalle\">Distancia aproximada desde Mundo E: ${distanciaEvento.toFixed(1)} km<\/div><hr style=\"margin:8px 0\">`;\n  html += '<div style=\"text-align:left\">';\n  detalle.forEach(d => {\n    html += `<div style=\"display:flex;justify-content:space-between;padding:6px 0\">\n               <div class=\"small\">${escapeHtml(d.txt)}<\/div>\n               <div class=\"small\">${fmt(d.val)}<\/div>\n             <\/div>`;\n  });\n  html += '<\/div><hr style=\"margin:8px 0\">';\n  html += `<div style=\"font-size:1.2rem;font-weight:700;color:#000\">TOTAL: ${fmt(total)}<\/div>`;\n  html += `<div class=\"small\" style=\"margin-top:8px;\">Este es un costo aproximado, para una cotizaci\u00f3n final, favor de contactarnos por WhatsApp.<\/div>`;\n  resultadoDiv.innerHTML = html;\n}\n\nfunction escapeHtml(s){\n  if(!s) return '';\n  return s.replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;');\n}\n<\/script>\n<\/body>\n<\/html>\n\n\n\n\n<p class=\"wp-block-paragraph\">Si deseas obtener tu cotizaci\u00f3n final y cerrar el trato, entonces cont\u00e1ctanos al WhatsApp 5633879259.<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Para darte una idea aproximada del costo de tu servicio de m\u00fasica para eventos, utiliza el siguiente tabulador: Cotizador por Municipio \/ Alcald\u00eda (base: Mundo E, Tlalnepantla) Cotizador de Amenizaci\u00f3n (base: Mundo E, Tlalnepantla) Escribe &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"spay_email":"","footnotes":""},"class_list":["post-2917","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Tabulador de costos - Mara Nieto Viol\u00edn<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tabulador de costos - Mara Nieto Viol\u00edn\" \/>\n<meta property=\"og:description\" content=\"Para darte una idea aproximada del costo de tu servicio de m\u00fasica para eventos, utiliza el siguiente tabulador: Cotizador por Municipio \/ Alcald\u00eda (base: Mundo E, Tlalnepantla) Cotizador de Amenizaci\u00f3n (base: Mundo E, Tlalnepantla) Escribe &hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/\" \/>\n<meta property=\"og:site_name\" content=\"Mara Nieto Viol\u00edn\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-27T03:19:51+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/maranieto.com\/#website\",\"url\":\"https:\/\/maranieto.com\/\",\"name\":\"Mara Nieto Viol\\u00edn\",\"description\":\"Violinista, Pedagoga &amp; Maestra Suzuki\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/maranieto.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/#webpage\",\"url\":\"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/\",\"name\":\"Tabulador de costos - Mara Nieto Viol\\u00edn\",\"isPartOf\":{\"@id\":\"https:\/\/maranieto.com\/#website\"},\"datePublished\":\"2025-08-10T22:03:24+00:00\",\"dateModified\":\"2026-01-27T03:19:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\/\/maranieto.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tabulador de costos\"}]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tabulador de costos - Mara Nieto Viol\u00edn","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"es_MX","og_type":"article","og_title":"Tabulador de costos - Mara Nieto Viol\u00edn","og_description":"Para darte una idea aproximada del costo de tu servicio de m\u00fasica para eventos, utiliza el siguiente tabulador: Cotizador por Municipio \/ Alcald\u00eda (base: Mundo E, Tlalnepantla) Cotizador de Amenizaci\u00f3n (base: Mundo E, Tlalnepantla) Escribe &hellip;","og_url":"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/","og_site_name":"Mara Nieto Viol\u00edn","article_modified_time":"2026-01-27T03:19:51+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"https:\/\/maranieto.com\/#website","url":"https:\/\/maranieto.com\/","name":"Mara Nieto Viol\u00edn","description":"Violinista, Pedagoga &amp; Maestra Suzuki","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/maranieto.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/#webpage","url":"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/","name":"Tabulador de costos - Mara Nieto Viol\u00edn","isPartOf":{"@id":"https:\/\/maranieto.com\/#website"},"datePublished":"2025-08-10T22:03:24+00:00","dateModified":"2026-01-27T03:19:51+00:00","breadcrumb":{"@id":"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maranieto.com\/index.php\/tabulador-de-costor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https:\/\/maranieto.com\/"},{"@type":"ListItem","position":2,"name":"Tabulador de costos"}]}]}},"_links":{"self":[{"href":"https:\/\/maranieto.com\/index.php\/wp-json\/wp\/v2\/pages\/2917","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maranieto.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/maranieto.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/maranieto.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maranieto.com\/index.php\/wp-json\/wp\/v2\/comments?post=2917"}],"version-history":[{"count":11,"href":"https:\/\/maranieto.com\/index.php\/wp-json\/wp\/v2\/pages\/2917\/revisions"}],"predecessor-version":[{"id":3284,"href":"https:\/\/maranieto.com\/index.php\/wp-json\/wp\/v2\/pages\/2917\/revisions\/3284"}],"wp:attachment":[{"href":"https:\/\/maranieto.com\/index.php\/wp-json\/wp\/v2\/media?parent=2917"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}