{"id":1023,"date":"2026-03-18T17:55:09","date_gmt":"2026-03-18T22:55:09","guid":{"rendered":"https:\/\/itsperu.com.pe\/?page_id=1023"},"modified":"2026-10-12T14:48:33","modified_gmt":"2026-10-12T19:48:33","slug":"formulario","status":"publish","type":"page","link":"https:\/\/itsperu.com.pe\/?page_id=1023","title":{"rendered":"Formulario"},"content":{"rendered":"\n<div class=\"wp-block-stackable-columns alignfull stk-block-columns stk-block stk-f37941f stk-block-background stk--has-background-overlay\" data-block-id=\"f37941f\"><style>.stk-f37941f {background-image:url(https:\/\/itsperu.com.pe\/wp-content\/uploads\/2026\/03\/image-3.png) !important;background-position:center center !important;background-repeat:no-repeat !important;background-size:cover !important;border-top-left-radius:var(--stk--preset--border-radius--none, 0px) !important;border-top-right-radius:var(--stk--preset--border-radius--none, 0px) !important;border-bottom-right-radius:var(--stk--preset--border-radius--none, 0px) !important;border-bottom-left-radius:var(--stk--preset--border-radius--none, 0px) !important;overflow:hidden !important;box-shadow:none !important;border-style:solid !important;border-top-width:0px !important;border-right-width:0px !important;border-bottom-width:0px !important;border-left-width:0px !important;padding-top:85px !important;padding-bottom:85px !important;margin-bottom:0px !important;}.stk-f37941f-column{max-width:1500px !important;min-width:auto !important;--stk-column-gap:35px !important;row-gap:var(--stk--preset--spacing--none, 0px) !important;}@media screen and (max-width:999px){.stk-f37941f {padding-top:250px !important;padding-bottom:150px !important;}}@media screen and (max-width:689px){.stk-f37941f {padding-top:150px !important;padding-bottom:100px !important;}}<\/style><div class=\"stk-row stk-inner-blocks stk-block-content stk-content-align stk-f37941f-column\">\n<div class=\"wp-block-stackable-column stk-block-column stk-column stk-block stk-9e02caf\" data-v=\"4\" data-block-id=\"9e02caf\"><style>.stk-9e02caf-container{margin-top:0px !important;margin-right:0px !important;margin-bottom:0px !important;margin-left:0px !important;}<\/style><div class=\"stk-column-wrapper stk-block-column__content stk-container stk-9e02caf-container stk--no-background stk--no-padding\"><div class=\"has-text-align-center-tablet stk-block-content stk-inner-blocks stk-9e02caf-inner-blocks\">\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-acbbbf2\" id=\"formulario-del-libro-de-reclamaciones\" data-block-id=\"acbbbf2\"><style>.stk-acbbbf2 .stk-block-heading__text{font-size:60px !important;color:#fffffe !important;}@media screen and (max-width:999px){.stk-acbbbf2 .stk-block-heading__text{font-size:50px !important;}}<\/style><h1 class=\"stk-block-heading__text has-text-color has-text-align-center\">Formulario del Libro de Reclamaciones<\/h1><\/div>\n<\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-stackable-spacer stk-block-spacer stk--no-padding stk-block stk-b2c1613\" data-block-id=\"b2c1613\"><style>.stk-b2c1613 {height:19px !important;}@media screen and (max-width:999px){.stk-b2c1613 {height:70px !important;}}<\/style><\/div>\n\n\n\n<style data-wp-block-html=\"css\">\n\/* OCULTAR FILAS DEL APODERADO *\/\n.libro-reclamaciones tr[hidden] {\n  display: none !important;\n}\n\n\/* CAMPOS DE TEXTO *\/\n.libro-reclamaciones input:not([type=\"checkbox\"]):not([type=\"radio\"]),\n.libro-reclamaciones textarea {\n  box-sizing: border-box;\n  max-width: 100%;\n}\n\n\/* CHECKBOX MENOR DE EDAD *\/\n.libro-reclamaciones .casilla-menor {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 12px;\n  cursor: pointer;\n}\n\n\/* ACEPTACIONES *\/\n.libro-reclamaciones .aceptaciones {\n  padding: 12px 8px;\n}\n\n.libro-reclamaciones .aceptaciones label {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n  margin-bottom: 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n\n.libro-reclamaciones .aceptaciones label:last-child {\n  margin-bottom: 0;\n}\n\n.libro-reclamaciones input[type=\"checkbox\"] {\n  width: 15px;\n  height: 15px;\n  flex-shrink: 0;\n  margin: 2px 0 0;\n  accent-color: #003580;\n}\n\n.libro-reclamaciones .aceptaciones a {\n  color: #003580;\n  text-decoration: underline;\n}\n\n\/* BOT\u00d3N *\/\n.libro-reclamaciones button[type=\"submit\"] {\n  width: 100%;\n  background: #003580;\n  color: #fff;\n  border: none;\n  padding: 14px;\n  font-size: 12px;\n  font-weight: bold;\n  cursor: pointer;\n}\n\n.libro-reclamaciones button[type=\"submit\"]:hover {\n  background: #00275e;\n}\n<\/style>\n\n<script data-wp-block-html=\"js\">\nasync function itsLibroInit() {\n\n  const form = document.querySelector(\".libro-reclamaciones\");\n  if (!form) return;\n\n  const boton = form.querySelector(\"#btn-enviar-its\");\n  const mensaje = form.querySelector(\"#mensaje-its\");\n  const TEXTO_BOTON = \"ENVIAR FORMULARIO\";\n  let enviando = false;\n\n  \/\/ URL de admin-ajax (usa la de WordPress si existe; si no, la ruta por defecto)\n  const AJAX_URL =\n    (window.ajaxurl) ||\n    (window.itsLR && window.itsLR.ajaxUrl) ||\n    \"\/wp-admin\/admin-ajax.php\";\n\n  \/\/ FECHA DE PER\u00da (solo informativa; la fecha oficial la pone el servidor)\n  const partes = new Intl.DateTimeFormat(\"en-GB\", {\n    timeZone: \"America\/Lima\",\n    day: \"2-digit\",\n    month: \"2-digit\",\n    year: \"numeric\"\n  }).formatToParts(new Date());\n\n  const fecha = {};\n  partes.forEach(parte => { fecha[parte.type] = parte.value; });\n\n  form.querySelector(\"#dia\").value = fecha.day;\n  form.querySelector(\"#mes\").value = fecha.month;\n  form.querySelector(\"#anio\").value = fecha.year;\n\n  \/\/ EL CORRELATIVO LO GENERA WORDPRESS (este campo no se env\u00eda)\n  form.querySelector(\"#codigo\").value = \"Al enviar\";\n\n  \/\/ CAMPOS DEL REPRESENTANTE (MENOR DE EDAD)\n  const menor = form.querySelector(\"#menor_edad\");\n  const filas = form.querySelectorAll(\".datos-apoderado\");\n  const nombreApoderado = form.querySelector(\"#nombre_apoderado\");\n  const dniApoderado = form.querySelector(\"#dni_apoderado\");\n\n  function actualizarApoderado() {\n    filas.forEach(fila => { fila.hidden = !menor.checked; });\n    nombreApoderado.required = menor.checked;\n    dniApoderado.required = menor.checked;\n\n    if (!menor.checked) {\n      nombreApoderado.value = \"\";\n      dniApoderado.value = \"\";\n    }\n  }\n\n  menor.addEventListener(\"change\", actualizarApoderado);\n  actualizarApoderado();\n\n  \/\/ VALIDACIONES ANTES DE ENVIAR (el servidor debe validar de nuevo)\n  const producto = form.querySelector(\"#producto\");\n  const servicio = form.querySelector(\"#servicio\");\n  const monto = form.querySelector(\"#monto\");\n  const dni = form.querySelector(\"[name='dni']\");\n\n  function validarCampos() {\n    \/\/ Al menos producto o servicio\n    const falta = !producto.value.trim() && !servicio.value.trim();\n    producto.setCustomValidity(falta ? \"Indica el producto o el servicio.\" : \"\");\n\n    \/\/ Monto: vac\u00edo o n\u00famero con hasta 2 decimales\n    const m = monto.value.trim();\n    const montoOk = m === \"\" || \/^\\d+([.,]\\d{1,2})?$\/.test(m);\n    monto.setCustomValidity(montoOk ? \"\" : \"Ingresa un monto v\u00e1lido, por ejemplo 150.00\");\n\n    \/\/ DNI (8 d\u00edgitos) o carn\u00e9 de extranjer\u00eda (alfanum\u00e9rico, 9 a 12)\n    const d = dni.value.trim();\n    const dniOk = \/^\\d{8}$\/.test(d) || \/^[A-Za-z0-9]{9,12}$\/.test(d);\n    dni.setCustomValidity(dniOk ? \"\" : \"Ingresa un DNI de 8 d\u00edgitos o un CE v\u00e1lido.\");\n\n    if (menor.checked) {\n      const da = dniApoderado.value.trim();\n      const daOk = \/^\\d{8}$\/.test(da) || \/^[A-Za-z0-9]{9,12}$\/.test(da);\n      dniApoderado.setCustomValidity(daOk ? \"\" : \"Ingresa un DNI o CE v\u00e1lido.\");\n    } else {\n      dniApoderado.setCustomValidity(\"\");\n    }\n  }\n\n  \/\/ OBTENER C\u00d3DIGO DE SEGURIDAD\n  async function obtenerNonce() {\n    try {\n      const respuesta = await fetch(AJAX_URL + \"?action=its_obtener_nonce\", {\n        credentials: \"same-origin\",\n        cache: \"no-store\"\n      });\n\n      if (!respuesta.ok) throw new Error(\"Error de conexi\u00f3n\");\n\n      const resultado = await respuesta.json();\n\n      if (!resultado.success || !resultado.data || !resultado.data.nonce) {\n        throw new Error(\"C\u00f3digo de seguridad no disponible\");\n      }\n\n      form.querySelector(\"#its_nonce\").value = resultado.data.nonce;\n      boton.disabled = false;\n      boton.textContent = TEXTO_BOTON;\n      mensaje.textContent = \"\";\n\n    } catch (error) {\n      mensaje.textContent = \"No se pudo preparar el formulario. Recarga la p\u00e1gina.\";\n      boton.textContent = \"ENV\u00cdO NO DISPONIBLE\";\n    }\n  }\n\n  await obtenerNonce();\n\n  \/\/ ENV\u00cdO: validar y evitar doble env\u00edo\n  form.addEventListener(\"submit\", function(event) {\n\n    if (enviando) {\n      event.preventDefault();\n      return;\n    }\n\n    if (!form.querySelector(\"#its_nonce\").value) {\n      event.preventDefault();\n      mensaje.textContent = \"No se pudo verificar el formulario. Recarga la p\u00e1gina.\";\n      return;\n    }\n\n    validarCampos();\n\n    if (!form.checkValidity()) {\n      event.preventDefault();\n      form.reportValidity();\n      return;\n    }\n\n    enviando = true;\n    boton.disabled = true;\n    boton.textContent = \"REGISTRANDO RECLAMO...\";\n  });\n\n  \/\/ SI EL USUARIO VUELVE ATR\u00c1S CON EL NAVEGADOR, REACTIVAR EL FORMULARIO\n  window.addEventListener(\"pageshow\", function(event) {\n    if (event.persisted) {\n      enviando = false;\n      boton.disabled = true;\n      boton.textContent = \"PREPARANDO FORMULARIO...\";\n      obtenerNonce();\n    }\n  });\n\n}\n\n\/\/ Ejecutar aunque el script cargue despu\u00e9s de que la p\u00e1gina ya termin\u00f3 de cargar\nif (document.readyState === \"loading\") {\n  document.addEventListener(\"DOMContentLoaded\", itsLibroInit);\n} else {\n  itsLibroInit();\n}\n<\/script>\n\n<form class=\"libro-reclamaciones\" method=\"post\" novalidate=\"\">\n\n<!-- IDENTIFICADOR PARA WORDPRESS -->\n<input type=\"hidden\" name=\"enviar_form\" value=\"1\">\n\n<!-- SEGURIDAD DEL FORMULARIO -->\n<input type=\"hidden\" name=\"its_nonce\" id=\"its_nonce\" value=\"\">\n\n<!-- CAMPO TRAMPA ANTI-SPAM (los humanos no lo ven; en PHP rechazar si viene lleno) -->\n<div style=\"position:absolute;left:-9999px;\" aria-hidden=\"true\">\n  <input type=\"text\" name=\"sitio_web\" tabindex=\"-1\" autocomplete=\"off\">\n<\/div>\n\n<table>\n<tbody>\n\n<tr>\n  <th colspan=\"6\">LIBRO DE RECLAMACIONES<\/th>\n<\/tr>\n\n<!-- FECHA Y HOJA: solo de lectura. NO se env\u00edan (sin atributo name).\n     La fecha y el n\u00famero de hoja los asigna el servidor (PHP). -->\n<tr>\n  <td>FECHA:<\/td>\n  <td><input id=\"dia\" readonly=\"\"><\/td>\n  <td><input id=\"mes\" readonly=\"\"><\/td>\n  <td><input id=\"anio\" readonly=\"\"><\/td>\n  <td colspan=\"2\">\n    HOJA N\u00b0\n    <input id=\"codigo\" readonly=\"\" placeholder=\"Se asignar\u00e1 al enviar\" style=\"width:130px;text-align:center;\">\n  <\/td>\n<\/tr>\n\n<!-- DATOS DEL PROVEEDOR: fijos. COMPLETAR con los datos reales de ITS -->\n<tr>\n  <td colspan=\"6\">\n    <strong>INSPECTION &amp; TESTING SERVICES DEL PERU S.A.C.<\/strong> \u2013 RUC 20602034675\n  <\/td>\n<\/tr>\n\n<tr>\n  <td colspan=\"6\">\n    MZA. D1 LOTE. 27 OTR. COMERCIANTES Y ARTESANOS (AV. WIESSE 3840 &#8211; CRUCE CON AV. STA ROSA) LIMA &#8211; LIMA &#8211; SAN JUAN DE LURIGANCHO\n  <\/td>\n<\/tr>\n\n<tr>\n  <th colspan=\"6\">1. IDENTIFICACI\u00d3N DEL CONSUMIDOR<\/th>\n<\/tr>\n\n<tr>\n  <td>NOMBRE:<\/td>\n  <td colspan=\"5\">\n    <input name=\"nombre\" required=\"\" maxlength=\"150\" autocomplete=\"name\">\n  <\/td>\n<\/tr>\n\n<tr>\n  <td>DOMICILIO:<\/td>\n  <td colspan=\"5\">\n    <input name=\"domicilio\" required=\"\" maxlength=\"200\" autocomplete=\"street-address\">\n  <\/td>\n<\/tr>\n\n<tr>\n  <td>DNI\/CE:<\/td>\n  <td><input name=\"dni\" required=\"\" maxlength=\"12\" autocomplete=\"off\"><\/td>\n  <td>TEL\u00c9FONO:<\/td>\n  <td><input name=\"telefono\" type=\"tel\" required=\"\" maxlength=\"20\" autocomplete=\"tel\"><\/td>\n  <td>EMAIL:<\/td>\n  <td><input name=\"email\" type=\"email\" required=\"\" maxlength=\"120\" autocomplete=\"email\"><\/td>\n<\/tr>\n\n<!-- MENOR DE EDAD -->\n<tr>\n  <td colspan=\"6\">\n    <label class=\"casilla-menor\">\n      <input type=\"checkbox\" id=\"menor_edad\" name=\"menor_edad\" value=\"1\">\n      \u00bfEs menor de edad?\n    <\/label>\n  <\/td>\n<\/tr>\n\n<tr class=\"datos-apoderado\" hidden=\"\">\n  <td colspan=\"2\">NOMBRE DEL PADRE, MADRE O REPRESENTANTE:<\/td>\n  <td colspan=\"4\">\n    <input name=\"nombre_apoderado\" id=\"nombre_apoderado\" maxlength=\"150\">\n  <\/td>\n<\/tr>\n\n<tr class=\"datos-apoderado\" hidden=\"\">\n  <td colspan=\"2\">DNI\/CE DEL PADRE, MADRE O REPRESENTANTE:<\/td>\n  <td colspan=\"4\">\n    <input name=\"dni_apoderado\" id=\"dni_apoderado\" maxlength=\"12\">\n  <\/td>\n<\/tr>\n\n<tr>\n  <th colspan=\"6\">2. BIEN CONTRATADO<\/th>\n<\/tr>\n\n<tr>\n  <td>PRODUCTO:<\/td>\n  <td colspan=\"2\"><input name=\"producto\" id=\"producto\" maxlength=\"150\"><\/td>\n  <td>SERVICIO:<\/td>\n  <td colspan=\"2\"><input name=\"servicio\" id=\"servicio\" maxlength=\"150\"><\/td>\n<\/tr>\n\n<tr>\n  <td colspan=\"2\">N\u00b0 DE COTIZACI\u00d3N:<\/td>\n  <td colspan=\"4\">\n    <input name=\"cotizacion\" maxlength=\"50\">\n  <\/td>\n<\/tr>\n\n<tr>\n  <td>DESCRIPCI\u00d3N:<\/td>\n  <td colspan=\"5\">\n    <input name=\"descripcion\" maxlength=\"250\">\n  <\/td>\n<\/tr>\n\n<tr>\n  <td colspan=\"2\">MONTO RECLAMADO:<\/td>\n  <td>\n    <select name=\"moneda\">\n      <option value=\"S\/\">S\/<\/option>\n      <option value=\"US$\">US$<\/option>\n    <\/select>\n  <\/td>\n  <td colspan=\"3\">\n    <input name=\"monto\" id=\"monto\" inputmode=\"decimal\" maxlength=\"12\" placeholder=\"0.00 (si no corresponde, dejar vac\u00edo)\">\n  <\/td>\n<\/tr>\n\n<tr>\n  <th colspan=\"6\">3. DETALLE DEL RECLAMO<\/th>\n<\/tr>\n\n<tr>\n  <td colspan=\"6\" class=\"tipo-reclamo\">\n    <div class=\"opciones-reclamo\">\n\n      <label>\n        <input type=\"radio\" name=\"tipo\" value=\"Reclamo\" checked=\"\">\n        Reclamo\n      <\/label>\n\n      <label>\n        <input type=\"radio\" name=\"tipo\" value=\"Queja\">\n        Queja\n      <\/label>\n\n    <\/div>\n  <\/td>\n<\/tr>\n\n<tr>\n  <td colspan=\"6\" class=\"definiciones\">\n    <small>\n      <strong>Reclamo:<\/strong> disconformidad relacionada con los productos o servicios.<br>\n      <strong>Queja:<\/strong> disconformidad no relacionada con los productos o servicios, o malestar o descontento respecto a la atenci\u00f3n al p\u00fablico.\n    <\/small>\n  <\/td>\n<\/tr>\n\n<tr>\n  <td colspan=\"6\">\n    <textarea name=\"detalle\" placeholder=\"DETALLE\" required=\"\" maxlength=\"2000\"><\/textarea>\n  <\/td>\n<\/tr>\n\n<tr>\n  <td colspan=\"6\">\n    <textarea name=\"pedido\" placeholder=\"PEDIDO DEL CONSUMIDOR\" required=\"\" maxlength=\"1000\"><\/textarea>\n  <\/td>\n<\/tr>\n\n<!-- AVISOS LEGALES (confirmar el texto y el plazo con la norma vigente) -->\n<tr>\n  <td colspan=\"6\" class=\"avisos-legales\">\n    <small>\n      * La formulaci\u00f3n del reclamo no impide acudir a otras v\u00edas de soluci\u00f3n de controversias ni es requisito previo para interponer una denuncia ante el INDECOPI.<br>\n      * El proveedor debe dar respuesta al reclamo en un plazo no mayor a quince (15) d\u00edas h\u00e1biles.<br>\n      * La confirmaci\u00f3n de env\u00edo expresa \u00fanicamente la recepci\u00f3n de la hoja de reclamaci\u00f3n, no la aceptaci\u00f3n de su contenido.\n    <\/small>\n  <\/td>\n<\/tr>\n\n<!-- DECLARACIONES -->\n<tr>\n  <td colspan=\"6\" class=\"aceptaciones\">\n\n    <label>\n      <input type=\"checkbox\" name=\"declaracion_veracidad\" value=\"1\" required=\"\">\n      Declaro que los datos ingresados son ver\u00eddicos.\n    <\/label>\n\n    <label>\n      <input type=\"checkbox\" name=\"aceptacion_privacidad\" value=\"1\" required=\"\">\n      He le\u00eddo y acepto la\n      <a href=\"https:\/\/itsperu.com.pe\/?page_id=1080\" target=\"_blank\" rel=\"noopener noreferrer\">Pol\u00edtica de Privacidad y Tratamiento de Datos Personales.\n      <\/a>\n    <\/label>\n\n  <\/td>\n<\/tr>\n\n<tr>\n  <td colspan=\"6\">\n    <button type=\"submit\" id=\"btn-enviar-its\" disabled=\"\">\n      PREPARANDO FORMULARIO&#8230;\n    <\/button>\n\n    <p id=\"mensaje-its\" role=\"status\" aria-live=\"polite\"><\/p>\n  <\/td>\n<\/tr>\n\n<\/tbody>\n<\/table>\n\n<\/form>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Formulario del Libro de Reclamaciones LIBRO DE RECLAMACIONES FECHA: HOJA N\u00b0 INSPECTION &amp; TESTING SERVICES DEL PERU S.A.C. \u2013 RUC 20602034675 MZA. D1 LOTE. 27 OTR. COMERCIANTES Y ARTESANOS (AV. WIESSE 3840 &#8211; CRUCE CON AV. STA ROSA) LIMA &#8211; LIMA &#8211; SAN JUAN DE LURIGANCHO 1. IDENTIFICACI\u00d3N DEL CONSUMIDOR NOMBRE: DOMICILIO: DNI\/CE: TEL\u00c9FONO: EMAIL: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"class_list":["post-1023","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/itsperu.com.pe\/index.php?rest_route=\/wp\/v2\/pages\/1023","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itsperu.com.pe\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/itsperu.com.pe\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/itsperu.com.pe\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itsperu.com.pe\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1023"}],"version-history":[{"count":13,"href":"https:\/\/itsperu.com.pe\/index.php?rest_route=\/wp\/v2\/pages\/1023\/revisions"}],"predecessor-version":[{"id":1098,"href":"https:\/\/itsperu.com.pe\/index.php?rest_route=\/wp\/v2\/pages\/1023\/revisions\/1098"}],"wp:attachment":[{"href":"https:\/\/itsperu.com.pe\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}