{"id":5035,"date":"2026-11-04T15:00:47","date_gmt":"2026-11-04T21:00:47","guid":{"rendered":"https:\/\/www.japami.gob.mx\/?page_id=5035"},"modified":"2026-11-04T15:17:39","modified_gmt":"2026-11-04T21:17:39","slug":"solicitudconstancianoadeudo","status":"publish","type":"page","link":"https:\/\/www.japami.gob.mx\/index.php\/solicitudconstancianoadeudo\/","title":{"rendered":"SolicitudConstanciaNoAdeudo"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5035\" class=\"elementor elementor-5035\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d460310 e-flex e-con-boxed e-con e-parent\" data-id=\"d460310\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a67e4f8 elementor-widget elementor-widget-shortcode\" data-id=\"a67e4f8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\r\n\r\n<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700&display=swap');\r\n\r\n  :root{\r\n    --azul-profundo:#252e56;\r\n    --azul-medio:#1a6b93;\r\n    --azul-claro:#e8f3f8;\r\n    --cian:#62a5da;\r\n    --verde-on:#2e8b57;\r\n    --rojo-off:#b3412c;\r\n    --gris-texto:#33424e;\r\n    --gris-borde:#d3e0e6;\r\n    --blanco:#ffffff;\r\n  }\r\n\r\n  *{box-sizing:border-box;}\r\n\r\n  body{\r\n    margin:0;\r\n    font-family:'Montserrat', 'Segoe UI', Roboto, Arial, sans-serif;\r\n    background:linear-gradient(180deg, #f4f9fc 0%, var(--azul-claro) 100%) no-repeat center center fixed;\r\n    color:var(--gris-texto);\r\n  }\r\n\r\n  main{\r\n    max-width:900px;\r\n    margin:0 auto;\r\n    padding:30px 20px 60px;\r\n  }\r\n\r\n  .form-panel{\r\n    background:var(--blanco);\r\n    border:1px solid var(--gris-borde);\r\n    border-radius:14px;\r\n    padding:28px 30px;\r\n    box-shadow:0 8px 24px rgba(11,61,92,0.08);\r\n  }\r\n\r\n  h1.titulo{\r\n    margin:0 0 20px;\r\n    font-size:1.5rem;\r\n    font-weight:700;\r\n    letter-spacing:.4px;\r\n    color:var(--azul-profundo);\r\n    text-transform:uppercase;\r\n  }\r\n\r\n  .aviso{\r\n    background:var(--azul-claro);\r\n    border:1px solid #cfe3ee;\r\n    border-radius:10px;\r\n    padding:16px 20px;\r\n    font-size:.88rem;\r\n    line-height:1.6;\r\n    color:var(--gris-texto);\r\n    margin-bottom:26px;\r\n  }\r\n\r\n  .aviso strong{ color:var(--azul-profundo); }\r\n\r\n  .section-title{\r\n    font-size:.85rem;\r\n    font-weight:700;\r\n    text-transform:uppercase;\r\n    letter-spacing:.5px;\r\n    color:var(--azul-profundo);\r\n    margin:0 0 10px;\r\n  }\r\n\r\n  .subseccion{\r\n    font-size:.82rem;\r\n    color:#5c6b76;\r\n    margin:0 0 10px;\r\n  }\r\n\r\n  fieldset{\r\n    border:none;\r\n    padding:0;\r\n    margin:0 0 26px;\r\n  }\r\n\r\n  \/* -------- Datos del Recibo (grilla de 4 campos) -------- *\/\r\n  .recibo-grid{\r\n    display:grid;\r\n    grid-template-columns:repeat(4, 1fr);\r\n    gap:14px;\r\n  }\r\n\r\n  .recibo-campo{\r\n    border:1px solid var(--gris-borde);\r\n    border-radius:8px;\r\n    padding:10px 12px;\r\n    background:var(--blanco);\r\n  }\r\n\r\n  .recibo-campo label{\r\n    display:flex;\r\n    align-items:center;\r\n    gap:6px;\r\n    font-size:.78rem;\r\n    font-weight:700;\r\n    color:var(--azul-profundo);\r\n    text-transform:uppercase;\r\n    letter-spacing:.3px;\r\n    margin-bottom:6px;\r\n  }\r\n\r\n  .recibo-campo input{\r\n    width:100%;\r\n    padding:9px 10px;\r\n    font-size:.95rem;\r\n    border:1px solid var(--gris-borde);\r\n    border-radius:6px;\r\n    font-family:inherit;\r\n    color:var(--gris-texto);\r\n  }\r\n\r\n  .recibo-campo input:focus{\r\n    outline:2px solid var(--cian);\r\n    outline-offset:1px;\r\n  }\r\n\r\n  @media (max-width: 640px){\r\n    .recibo-grid{ grid-template-columns:repeat(2, 1fr); }\r\n  }\r\n\r\n  \/* -------- Filas de datos -------- *\/\r\n  .campos-box{\r\n    border:1px solid var(--gris-borde);\r\n    border-radius:8px;\r\n    overflow:hidden;\r\n  }\r\n\r\n  .campo-row{\r\n    display:flex;\r\n    align-items:center;\r\n    border-bottom:1px solid var(--gris-borde);\r\n  }\r\n\r\n  .campo-row:last-child{ border-bottom:none; }\r\n\r\n  .campo-label{\r\n    background:var(--azul-profundo);\r\n    color:var(--blanco);\r\n    width:260px;\r\n    flex-shrink:0;\r\n    padding:12px 16px;\r\n    font-weight:700;\r\n    font-size:.82rem;\r\n    display:flex;\r\n    align-items:center;\r\n    gap:6px;\r\n  }\r\n\r\n  .campo-input{\r\n    flex:1;\r\n    display:flex;\r\n    align-items:center;\r\n    gap:10px;\r\n    padding:8px 14px;\r\n    background:var(--blanco);\r\n  }\r\n\r\n  .campo-input input{\r\n    flex:1;\r\n    min-width:0;\r\n    padding:9px 10px;\r\n    font-size:.92rem;\r\n    border:1px solid var(--gris-borde);\r\n    border-radius:6px;\r\n    font-family:inherit;\r\n    color:var(--gris-texto);\r\n  }\r\n\r\n  .campo-input input:focus{\r\n    outline:2px solid var(--cian);\r\n    outline-offset:1px;\r\n  }\r\n\r\n  .obligatorio{\r\n    color:#ffd7d0;\r\n    font-weight:700;\r\n  }\r\n\r\n  .recibo-campo .obligatorio{\r\n    color:var(--rojo-off);\r\n  }\r\n\r\n  .ayuda-icono{\r\n    flex-shrink:0;\r\n    width:20px;\r\n    height:20px;\r\n    border-radius:50%;\r\n    background:var(--azul-claro);\r\n    color:var(--azul-medio);\r\n    border:1px solid #cfe3ee;\r\n    font-size:.72rem;\r\n    font-weight:700;\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    cursor:help;\r\n  }\r\n\r\n  @media (max-width: 640px){\r\n    .campo-row{ flex-direction:column; align-items:stretch; }\r\n    .campo-label{ width:100%; }\r\n  }\r\n\r\n  .nota-final{\r\n    font-size:.82rem;\r\n    color:#5c6b76;\r\n    margin:22px 0 0;\r\n    line-height:1.6;\r\n  }\r\n\r\n  .acciones{\r\n    margin-top:20px;\r\n  }\r\n\r\n  button{\r\n    padding:12px 28px;\r\n    font-size:.95rem;\r\n    font-weight:700;\r\n    letter-spacing:.3px;\r\n    border:none;\r\n    border-radius:6px;\r\n    background:linear-gradient(135deg, var(--azul-profundo), var(--azul-medio));\r\n    color:var(--blanco);\r\n    cursor:pointer;\r\n    font-family:inherit;\r\n    transition:opacity .15s ease;\r\n  }\r\n\r\n  button:hover{ opacity:.9; }\r\n  button:disabled{ opacity:.6; cursor:not-allowed; }\r\n\r\n  .mensaje{\r\n    margin-top:20px;\r\n    padding:16px 18px;\r\n    border-radius:8px;\r\n    background:var(--blanco);\r\n    border:1px dashed var(--gris-borde);\r\n    color:#5c6b76;\r\n    font-size:.9rem;\r\n    line-height:1.6;\r\n  }\r\n\r\n  .mensaje.error{\r\n    border:1px solid var(--rojo-off);\r\n    background:#fdf0ee;\r\n    color:var(--rojo-off);\r\n  }\r\n\r\n  .mensaje.exito{\r\n    border:1px solid var(--verde-on);\r\n    background:#eaf6ee;\r\n    color:#215c3d;\r\n  }\r\n\r\n  .mensaje.exito a{\r\n    color:var(--azul-medio);\r\n    font-weight:700;\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<main>\r\n  <form class=\"form-panel\" id=\"formSolicitud\" novalidate>\r\n    <h1 class=\"titulo\">Solicitud de Constancia de No Adeudo<\/h1>\r\n\r\n    <div class=\"aviso\">\r\n      Documento oficial que acredita la ausencia de adeudos por tr\u00e1mites o servicios prestados por el organismo operador a la fecha de su expedici\u00f3n.\r\n      <br><br>\r\n      Si desea solicitar una <strong>Constancia de NO Adeudo<\/strong>, favor de enviarnos la siguiente solicitud.\r\n      Una vez recibida, personal de Atenci\u00f3n a Usuarios se pondr\u00e1 en contacto con usted v\u00eda telef\u00f3nica o por correo\r\n      electr\u00f3nico.\r\n    <\/div>\r\n\r\n    <fieldset>\r\n      <div class=\"section-title\">Datos del Recibo de Agua:<\/div>\r\n      <div class=\"subseccion\">Captura los datos tal como aparecen impresos en tu recibo de agua m\u00e1s reciente.<\/div>\r\n      <div class=\"recibo-grid\">\r\n        <div class=\"recibo-campo\">\r\n          <label for=\"cuenta\">Cuenta <span class=\"obligatorio\">*<\/span><\/label>\r\n          <input type=\"text\" id=\"cuenta\" inputmode=\"numeric\" maxlength=\"10\" pattern=\"\\d+\" title=\"La cuenta solo debe contener n\u00fameros.\" placeholder=\"Solo n\u00fameros\" autocomplete=\"off\" required>\r\n        <\/div>\r\n        <div class=\"recibo-campo\">\r\n          <label for=\"region\">Regi\u00f3n <span class=\"obligatorio\">*<\/span><\/label>\r\n          <input type=\"text\" id=\"region\" inputmode=\"numeric\" maxlength=\"10\" pattern=\"\\d+\" title=\"La regi\u00f3n solo debe contener n\u00fameros.\" placeholder=\"Solo n\u00fameros\" autocomplete=\"off\" required>\r\n        <\/div>\r\n        <div class=\"recibo-campo\">\r\n          <label for=\"sector\">Sector <span class=\"obligatorio\">*<\/span><\/label>\r\n          <input type=\"text\" id=\"sector\" inputmode=\"numeric\" maxlength=\"10\" pattern=\"\\d+\" title=\"El sector solo debe contener n\u00fameros.\" placeholder=\"Solo n\u00fameros\" autocomplete=\"off\" required>\r\n        <\/div>\r\n        <div class=\"recibo-campo\">\r\n          <label for=\"reparto\">Reparto <span class=\"obligatorio\">*<\/span><\/label>\r\n          <input type=\"text\" id=\"reparto\" inputmode=\"numeric\" maxlength=\"10\" pattern=\"\\d+\" title=\"El reparto solo debe contener n\u00fameros.\" placeholder=\"Solo n\u00fameros\" autocomplete=\"off\" required>\r\n        <\/div>\r\n      <\/div>\r\n    <\/fieldset>\r\n\r\n    <fieldset>\r\n      <div class=\"section-title\">Datos del Solicitante<\/div>\r\n      <div class=\"campos-box\">\r\n        <div class=\"campo-row\">\r\n          <div class=\"campo-label\">Nombre: <span class=\"obligatorio\">*<\/span><\/div>\r\n          <div class=\"campo-input\">\r\n            <input type=\"text\" id=\"nombre\" autocomplete=\"off\" required>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"campo-row\">\r\n          <div class=\"campo-label\">Correo Electr\u00f3nico: <span class=\"obligatorio\">*<\/span><\/div>\r\n          <div class=\"campo-input\">\r\n            <input type=\"email\" id=\"correo\" maxlength=\"100\" pattern=\"[^\\s@]+@[^\\s@]+\\.[^\\s@]+\" title=\"Escribe un correo electr\u00f3nico v\u00e1lido.\" placeholder=\"ejemplo@correo.com\" autocomplete=\"off\" required>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"campo-row\">\r\n          <div class=\"campo-label\">Confirmar Correo Electr\u00f3nico: <span class=\"obligatorio\">*<\/span><\/div>\r\n          <div class=\"campo-input\">\r\n            <input type=\"email\" id=\"confirmarCorreo\" maxlength=\"100\" placeholder=\"Vuelve a escribir tu correo\" autocomplete=\"off\" required>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"campo-row\">\r\n          <div class=\"campo-label\">Tel\u00e9fono: <span class=\"obligatorio\">*<\/span><\/div>\r\n          <div class=\"campo-input\">\r\n            <input type=\"tel\" id=\"telefono\" inputmode=\"numeric\" maxlength=\"10\" pattern=\"\\d{10}\" title=\"El tel\u00e9fono debe tener 10 d\u00edgitos num\u00e9ricos.\" placeholder=\"10 d\u00edgitos\" autocomplete=\"off\" required>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/fieldset>\r\n\r\n    <p class=\"nota-final\">\r\n      Los campos con el s\u00edmbolo \"*\", son obligatorios de capturar.<br>\r\n      Antes de enviar, favor de corroborar que su informaci\u00f3n sea correcta.\r\n      <br><br>\r\n      Cualquier duda comunicarse al Departamento de Atenci\u00f3n a Usuarios al tel\u00e9fono 462 60 69 100 Ext. 160 en\r\n      horario de oficina y con gusto le ayudaremos.\r\n    <\/p>\r\n\r\n    <div class=\"acciones\">\r\n      <button id=\"btnEnviar\" type=\"submit\" disabled>Enviar Solicitud<\/button>\r\n    <\/div>\r\n\r\n    <div id=\"resultado\"><\/div>\r\n  <\/form>\r\n<\/main>\r\n\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/sweetalert2@11\"><\/script>\r\n<script>\r\n  \/\/ ==========================================================\r\n  \/\/ Configuraci\u00f3n \u2014 endpoints REST registrados por el snippet\r\n  \/\/ de WPCode (proxyBase.php). Como este HTML se sirve desde\r\n  \/\/ el mismo dominio de WordPress, la ruta es relativa.\r\n  \/\/ ==========================================================\r\n  const PROXY_BASE = \"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/japami\/v1\";\r\n  const TIPO_FALLA_ID = \"00324\";\r\n\r\n  \/\/ ==========================================================\r\n  \/\/ Reglas de validaci\u00f3n \u2014 ver VALIDACIONES.md\r\n  \/\/ ==========================================================\r\n  const REGEX_CORREO = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\r\n  const REGEX_TELEFONO = \/^\\d{10}$\/;\r\n  const REGEX_NUMERICO = \/^\\d+$\/;\r\n\r\n  const form = document.getElementById(\"formSolicitud\");\r\n  const btnEnviar = document.getElementById(\"btnEnviar\");\r\n  const resultadoDiv = document.getElementById(\"resultado\");\r\n\r\n  \/\/ ==========================================================\r\n  \/\/ Confirmaci\u00f3n de correo electr\u00f3nico + campos obligatorios \u2014\r\n  \/\/ el bot\u00f3n de env\u00edo permanece deshabilitado hasta que el\r\n  \/\/ correo y su confirmaci\u00f3n coincidan y todos los campos\r\n  \/\/ obligatorios est\u00e9n llenos.\r\n  \/\/ ==========================================================\r\n  const correoInput = document.getElementById(\"correo\");\r\n  const confirmarCorreoInput = document.getElementById(\"confirmarCorreo\");\r\n\r\n  function correoConfirmado() {\r\n    const correoVal = correoInput.value.trim();\r\n    const confirmarVal = confirmarCorreoInput.value.trim();\r\n    return REGEX_CORREO.test(correoVal) && confirmarVal === correoVal;\r\n  }\r\n\r\n  function camposObligatoriosCompletos() {\r\n    return Boolean(\r\n      document.getElementById(\"cuenta\").value.trim() &&\r\n      document.getElementById(\"region\").value.trim() &&\r\n      document.getElementById(\"sector\").value.trim() &&\r\n      document.getElementById(\"reparto\").value.trim() &&\r\n      document.getElementById(\"nombre\").value.trim() &&\r\n      correoInput.value.trim() &&\r\n      confirmarCorreoInput.value.trim() &&\r\n      REGEX_TELEFONO.test(document.getElementById(\"telefono\").value.trim())\r\n    );\r\n  }\r\n\r\n  function actualizarBotonEnvio() {\r\n    btnEnviar.disabled = !(correoConfirmado() && camposObligatoriosCompletos());\r\n  }\r\n\r\n  form.addEventListener(\"input\", actualizarBotonEnvio);\r\n  form.addEventListener(\"change\", actualizarBotonEnvio);\r\n  actualizarBotonEnvio();\r\n\r\n  function escaparHtml(texto) {\r\n    const div = document.createElement(\"div\");\r\n    div.textContent = texto ?? \"\";\r\n    return div.innerHTML;\r\n  }\r\n\r\n  function extraerCuentaInfo(raw) {\r\n    if (raw && typeof raw === \"object\") {\r\n      return raw.account ?? raw.Account ?? raw;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  function extraerFolio(raw) {\r\n    if (typeof raw === \"string\") return raw.trim();\r\n    if (typeof raw === \"number\") return String(raw);\r\n    if (raw && typeof raw === \"object\") {\r\n      const candidato =\r\n        raw.Folio ?? raw.folio ??\r\n        raw.No_Orden_Trabajo ?? raw.no_orden_trabajo ??\r\n        raw.data ?? raw.Data ??\r\n        raw.result ?? raw.Result ??\r\n        raw.value ?? raw.Value;\r\n      if (candidato !== undefined && candidato !== null) return String(candidato).trim();\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  form.addEventListener(\"submit\", async (e) => {\r\n    e.preventDefault();\r\n    resultadoDiv.innerHTML = \"\";\r\n\r\n    const cuenta = document.getElementById(\"cuenta\").value.trim();\r\n    const region = document.getElementById(\"region\").value.trim();\r\n    const sector = document.getElementById(\"sector\").value.trim();\r\n    const reparto = document.getElementById(\"reparto\").value.trim();\r\n    const nombre = document.getElementById(\"nombre\").value.trim();\r\n    const correo = document.getElementById(\"correo\").value.trim();\r\n    const confirmarCorreo = document.getElementById(\"confirmarCorreo\").value.trim();\r\n    const telefono = document.getElementById(\"telefono\").value.trim();\r\n\r\n    if (!cuenta || !region || !sector || !reparto || !nombre || !correo || !confirmarCorreo || !telefono) {\r\n      resultadoDiv.innerHTML = '<div class=\"mensaje error\">Completa todos los campos obligatorios marcados con *.<\/div>';\r\n      return;\r\n    }\r\n    if (!REGEX_NUMERICO.test(cuenta) || !REGEX_NUMERICO.test(region) || !REGEX_NUMERICO.test(sector) || !REGEX_NUMERICO.test(reparto)) {\r\n      resultadoDiv.innerHTML = '<div class=\"mensaje error\">Cuenta, Regi\u00f3n, Sector y Reparto solo deben contener n\u00fameros.<\/div>';\r\n      return;\r\n    }\r\n    if (!REGEX_CORREO.test(correo)) {\r\n      resultadoDiv.innerHTML = '<div class=\"mensaje error\">Escribe un correo electr\u00f3nico v\u00e1lido.<\/div>';\r\n      return;\r\n    }\r\n    if (correo !== confirmarCorreo) {\r\n      resultadoDiv.innerHTML = '<div class=\"mensaje error\">Los correos electr\u00f3nicos no coinciden.<\/div>';\r\n      return;\r\n    }\r\n    if (!REGEX_TELEFONO.test(telefono)) {\r\n      resultadoDiv.innerHTML = '<div class=\"mensaje error\">El tel\u00e9fono debe tener 10 d\u00edgitos num\u00e9ricos.<\/div>';\r\n      return;\r\n    }\r\n\r\n    \/\/ Bot\u00f3n de confirmaci\u00f3n obligatorio antes de enviar \u2014 ver VALIDACIONES.md \u00a7 Confirmaci\u00f3n previa al env\u00edo\r\n    const confirmacion = await Swal.fire({\r\n      icon: \"question\",\r\n      title: \"Confirma tu solicitud\",\r\n      html: `Estimado(a) <strong>${escaparHtml(nombre)}<\/strong>,<br><br>\r\n        Por favor confirme si desea enviar el reporte con el correo electr\u00f3nico <strong>${escaparHtml(correo)}<\/strong> y el tel\u00e9fono <strong>${escaparHtml(telefono)}<\/strong>, los cuales ser\u00e1n los medios por los que le estaremos dando seguimiento.`,\r\n      showCancelButton: true,\r\n      confirmButtonText: \"S\u00ed, enviar\",\r\n      cancelButtonText: \"Cancelar\",\r\n      confirmButtonColor: \"#1a6b93\",\r\n      cancelButtonColor: \"#b3412c\"\r\n    });\r\n\r\n    if (!confirmacion.isConfirmed) {\r\n      return;\r\n    }\r\n\r\n    btnEnviar.disabled = true;\r\n    resultadoDiv.innerHTML = '<div class=\"mensaje\">Validando cuenta\u2026<\/div>';\r\n\r\n    try {\r\n      \/\/ --------------------------------------------------------\r\n      \/\/ 1. Validar la cuenta contra \/siac\/find \u2014 se requiere para\r\n      \/\/    confirmar que no exista adeudo antes de generar la\r\n      \/\/    Constancia de No Adeudo, y para obtener el titular y\r\n      \/\/    domicilio registrados (el formulario no los captura).\r\n      \/\/ --------------------------------------------------------\r\n      const resFind = await fetch(`${PROXY_BASE}\/find-account`, {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"accept\": \"application\/json\",\r\n          \"Content-Type\": \"application\/json\"\r\n        },\r\n        body: JSON.stringify({\r\n          accountId: Number(cuenta),\r\n          region: Number(region),\r\n          sector: Number(sector),\r\n          department: Number(reparto)\r\n        })\r\n      });\r\n\r\n      const findBodyText = await resFind.text();\r\n      let rawFind = findBodyText;\r\n      if (findBodyText) {\r\n        try { rawFind = JSON.parse(findBodyText); } catch { \/* no era JSON, se deja como texto *\/ }\r\n      }\r\n\r\n      if (!resFind.ok) {\r\n        const mensajeError = (rawFind && typeof rawFind === \"object\" && (rawFind.error || rawFind.message)) || findBodyText || `HTTP ${resFind.status}`;\r\n        throw new Error(mensajeError);\r\n      }\r\n\r\n      const cuentaInfo = extraerCuentaInfo(rawFind);\r\n\r\n      if (!cuentaInfo || typeof cuentaInfo !== \"object\") {\r\n        resultadoDiv.innerHTML = '<div class=\"mensaje error\">No se encontr\u00f3 ninguna cuenta con los datos proporcionados. Verifica Cuenta, Regi\u00f3n, Sector y Reparto.<\/div>';\r\n        console.log(\"Respuesta cruda de find-account:\", rawFind);\r\n        return;\r\n      }\r\n\r\n      const chargeStatus = String(cuentaInfo.chargeStatus ?? cuentaInfo.ChargeStatus ?? \"\").trim().toUpperCase();\r\n      const currentCharge = Number(cuentaInfo.currentCharge ?? cuentaInfo.CurrentCharge ?? 0);\r\n      const currentChargePesos = currentCharge \/ 100;\r\n\r\n      if (chargeStatus !== \"PAGADO\") {\r\n        resultadoDiv.innerHTML = `\r\n          <div class=\"mensaje error\">\r\n            Esta cuenta presenta un adeudo pendiente de <strong>$${currentChargePesos.toLocaleString(\"es-MX\", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}<\/strong>.\r\n            No es posible generar la Constancia de No Adeudo mientras exista saldo pendiente. Favor de liquidar\r\n            su adeudo.\r\n          <\/div>\r\n        `;\r\n        return;\r\n      }\r\n\r\n      \/\/ --------------------------------------------------------\r\n      \/\/ 2. Cuenta sin adeudo: crear la orden de trabajo\r\n      \/\/ --------------------------------------------------------\r\n      resultadoDiv.innerHTML = '<div class=\"mensaje\">Cuenta sin adeudo. Enviando solicitud\u2026<\/div>';\r\n\r\n      const domicilio = [cuentaInfo.ownerAddress, cuentaInfo.neighborhood].filter(Boolean).join(\", \");\r\n\r\n      const payload = {\r\n        tipo_falla_id: TIPO_FALLA_ID,\r\n        no_cuenta: cuenta,\r\n        titular: cuentaInfo.ownerName || nombre,\r\n        domicilio: domicilio || nombre,\r\n        solicitante: nombre,\r\n        correo_electronico: correo,\r\n        telefono: telefono,\r\n        observaciones: `Solicitud de Constancia de No Adeudo generada desde el sitio web. Regi\u00f3n ${region}, Sector ${sector}, Reparto ${reparto}.`\r\n      };\r\n\r\n      const res = await fetch(`${PROXY_BASE}\/create-work-order`, {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"accept\": \"application\/json\",\r\n          \"Content-Type\": \"application\/json\"\r\n        },\r\n        body: JSON.stringify(payload)\r\n      });\r\n\r\n      const bodyText = await res.text();\r\n      let raw = bodyText;\r\n      if (bodyText) {\r\n        try { raw = JSON.parse(bodyText); } catch { \/* no era JSON, se deja como texto *\/ }\r\n      }\r\n\r\n      if (!res.ok) {\r\n        const mensajeError = (raw && typeof raw === \"object\" && (raw.error || raw.message)) || bodyText || `HTTP ${res.status}`;\r\n        const error = new Error(mensajeError);\r\n        if (raw && typeof raw === \"object\" && raw.folioExistente) {\r\n          error.folioExistente = raw.folioExistente;\r\n        }\r\n        throw error;\r\n      }\r\n\r\n      if (!bodyText) {\r\n        throw new Error(`El servidor respondi\u00f3 sin contenido (HTTP ${res.status}). Es probable que el endpoint \"create-work-order\" todav\u00eda no est\u00e9 publicado en el snippet de WPCode del sitio.`);\r\n      }\r\n\r\n      const folio = extraerFolio(raw);\r\n\r\n      if (!folio) {\r\n        resultadoDiv.innerHTML = '<div class=\"mensaje error\">La solicitud se envi\u00f3, pero no se pudo leer el folio en la respuesta. Revisa la consola.<\/div>';\r\n        console.log(\"Respuesta cruda de createWorkOrder:\", raw);\r\n        return;\r\n      }\r\n\r\n      resultadoDiv.innerHTML = `\r\n        <div class=\"mensaje exito\">\r\n          Su solicitud fue registrada con el folio <strong>${escaparHtml(folio)}<\/strong>.<br>\r\n          Si no es redirigido autom\u00e1ticamente, <a href=\"https:\/\/www.japami.gob.mx\/index.php\/seguimientoreporte\/?folio=${encodeURIComponent(folio)}\">haga clic aqu\u00ed<\/a>.\r\n        <\/div>\r\n      `;\r\n\r\n      \/\/ Aviso de requisitos y costo \u2014 debe confirmarse antes de redirigir al seguimiento.\r\n      await Swal.fire({\r\n        icon: \"info\",\r\n        title: \"Solicitud registrada\",\r\n        html: `Su folio es <strong>${escaparHtml(folio)}<\/strong>.<br><br>\r\n          Estimado usuario, para tramitar su Constancia de No Adeudo, es indispensable que la cuenta no presente saldos pendientes al momento de la solicitud.\r\n          <br><br>\r\n          Si su cuenta se encuentra al corriente, le solicitamos enviar al correo electr\u00f3nico <strong>bcervantes@japami.gob.mx<\/strong> copia de identificaci\u00f3n oficial vigente por ambos lados del titular de la cuenta.\r\n          En caso de realizar el tr\u00e1mite un tercero, se deber\u00e1 adjuntar tambi\u00e9n la identificaci\u00f3n oficial vigente del solicitante y una carta poder simple firmada por el propietario.\r\n          El costo del tr\u00e1mite es de <strong>$50.93 m\u00e1s IVA<\/strong>, mismo que se carga en su siguiente recibo.\r\n          <br><br>\r\n          Costo del tr\u00e1mite determinado en la Ley de Ingresos para el Municipio de Irapuato, Guanajuato, para el Ejercicio Fiscal del a\u00f1o 2026, Art\u00edculo 32, fracci\u00f3n X inciso a).`,\r\n        confirmButtonText: \"Entendido\",\r\n        confirmButtonColor: \"#1a6b93\",\r\n        allowOutsideClick: false,\r\n        allowEscapeKey: false\r\n      });\r\n\r\n      window.location.href = `https:\/\/www.japami.gob.mx\/index.php\/seguimientoreporte\/?folio=${encodeURIComponent(folio)}`;\r\n\r\n    } catch (err) {\r\n      const mensajeError = err.folioExistente\r\n        ? `${escaparHtml(err.message)} con el folio: \"${escaparHtml(err.folioExistente)}\" <a href=\"https:\/\/www.japami.gob.mx\/index.php\/seguimientoreporte\/?folio=${encodeURIComponent(err.folioExistente)}\">clic para darle seguimiento<\/a>.`\r\n        : escaparHtml(err.message);\r\n      resultadoDiv.innerHTML = `<div class=\"mensaje error\">Error al enviar la solicitud: ${mensajeError}<\/div>`;\r\n    } finally {\r\n      actualizarBotonEnvio();\r\n    }\r\n  });\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\r\n\r\n\r\n\r\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5035","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/pages\/5035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/comments?post=5035"}],"version-history":[{"count":5,"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/pages\/5035\/revisions"}],"predecessor-version":[{"id":5047,"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/pages\/5035\/revisions\/5047"}],"wp:attachment":[{"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/media?parent=5035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}