{"id":4976,"date":"2026-09-11T13:01:08","date_gmt":"2026-09-11T19:01:08","guid":{"rendered":"https:\/\/www.japami.gob.mx\/?page_id=4976"},"modified":"2026-09-11T13:01:15","modified_gmt":"2026-09-11T19:01:15","slug":"solicitudreciboelectronico","status":"publish","type":"page","link":"https:\/\/www.japami.gob.mx\/index.php\/solicitudreciboelectronico\/","title":{"rendered":"SolicitudReciboElectronico"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4976\" class=\"elementor elementor-4976\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-272cabf e-flex e-con-boxed e-con e-parent\" data-id=\"272cabf\" 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-47ea365 elementor-widget elementor-widget-shortcode\" data-id=\"47ea365\" 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<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  .aviso a{\r\n    color:var(--azul-medio);\r\n    font-weight:700;\r\n  }\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: rgb(255,255,255);\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\r\n<body>\r\n\r\n<main>\r\n  <form class=\"form-panel\" id=\"formSolicitud\" novalidate>\r\n    <h1 class=\"titulo\">Cambia tu recibo f\u00edsico a electr\u00f3nico<\/h1>\r\n\r\n    <div class=\"aviso\">\r\n      Estimado usuario, si desea que el recibo de agua le sea <strong>enviado de manera electr\u00f3nica y ya no\r\n      sea entregado f\u00edsicamente en su domicilio<\/strong>, env\u00edenos la siguiente solicitud.\r\n      <br><br>\r\n      Una vez recibida, personal de Padr\u00f3n de Usuarios har\u00e1 el cambio y le notificar\u00e1 v\u00eda correo 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 = \"00333\";\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    const telefonoVal = document.getElementById(\"telefono\").value.trim();\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      telefonoVal && REGEX_TELEFONO.test(telefonoVal)\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    const mensajeConfirmacion = `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\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>${mensajeConfirmacion}`,\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 la cuenta existe y obtener el titular y\r\n      \/\/    domicilio registrados (el formulario no los captura).\r\n      \/\/    Al igual que en Cambio de Titular, aqu\u00ed no se bloquea\r\n      \/\/    el env\u00edo por adeudo: cambiar la modalidad de entrega del\r\n      \/\/    recibo no depende de que la cuenta est\u00e9 al corriente de pago.\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      \/\/ --------------------------------------------------------\r\n      \/\/ 2. Crear la orden de trabajo\r\n      \/\/ --------------------------------------------------------\r\n      resultadoDiv.innerHTML = '<div class=\"mensaje\">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 cambio de recibo f\u00edsico a electr\u00f3nico generada desde el sitio web.`\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          Ser\u00e1 redirigido al seguimiento de su reporte\u2026<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      setTimeout(() => {\r\n        window.location.href = `https:\/\/www.japami.gob.mx\/index.php\/seguimientoreporte\/?folio=${encodeURIComponent(folio)}`;\r\n      }, 1800);\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\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":"","_members_access_role":[],"_members_access_error":""},"class_list":["post-4976","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/pages\/4976","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=4976"}],"version-history":[{"count":5,"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/pages\/4976\/revisions"}],"predecessor-version":[{"id":4982,"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/pages\/4976\/revisions\/4982"}],"wp:attachment":[{"href":"https:\/\/www.japami.gob.mx\/index.php\/wp-json\/wp\/v2\/media?parent=4976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}