{"id":1542,"date":"2025-04-14T23:09:44","date_gmt":"2025-04-14T23:09:44","guid":{"rendered":"https:\/\/tamishop.pe\/?page_id=1542"},"modified":"2026-03-26T13:51:25","modified_gmt":"2026-03-26T13:51:25","slug":"libro-de-reclamaciones","status":"publish","type":"page","link":"https:\/\/tamishop.pe\/?page_id=1542","title":{"rendered":"Libro de Reclamaciones"},"content":{"rendered":"\n<div class=\"wp-block-stackable-image stk-block-image stk-block stk-d9100fb\" data-block-id=\"d9100fb\"><figure><span class=\"stk-img-wrapper stk-image--shape-stretch\"><img loading=\"lazy\" decoding=\"async\" class=\"stk-img wp-image-6393\" src=\"https:\/\/tamishop.pe\/wp-content\/uploads\/2026\/02\/72525-scaled.webp\" width=\"2560\" height=\"357\" srcset=\"https:\/\/tamishop.pe\/wp-content\/uploads\/2026\/02\/72525-scaled.webp 2560w, https:\/\/tamishop.pe\/wp-content\/uploads\/2026\/02\/72525-300x42.webp 300w, https:\/\/tamishop.pe\/wp-content\/uploads\/2026\/02\/72525-1024x143.webp 1024w, https:\/\/tamishop.pe\/wp-content\/uploads\/2026\/02\/72525-768x107.webp 768w, https:\/\/tamishop.pe\/wp-content\/uploads\/2026\/02\/72525-1536x214.webp 1536w, https:\/\/tamishop.pe\/wp-content\/uploads\/2026\/02\/72525-2048x285.webp 2048w, https:\/\/tamishop.pe\/wp-content\/uploads\/2026\/02\/72525-500x70.webp 500w, https:\/\/tamishop.pe\/wp-content\/uploads\/2026\/02\/72525-600x84.webp 600w, https:\/\/tamishop.pe\/wp-content\/uploads\/2026\/02\/72525-64x9.webp 64w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/span><\/figure><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"731\" height=\"341\" src=\"https:\/\/tamishop.pe\/wp-content\/uploads\/2025\/06\/WhatsApp_Image_2025-05-29_at_8.04.59_PM-removebg-preview.png\" alt=\"\" class=\"wp-image-2119\" style=\"width:266px;height:auto\" srcset=\"https:\/\/tamishop.pe\/wp-content\/uploads\/2025\/06\/WhatsApp_Image_2025-05-29_at_8.04.59_PM-removebg-preview.png 731w, https:\/\/tamishop.pe\/wp-content\/uploads\/2025\/06\/WhatsApp_Image_2025-05-29_at_8.04.59_PM-removebg-preview-500x233.png 500w, https:\/\/tamishop.pe\/wp-content\/uploads\/2025\/06\/WhatsApp_Image_2025-05-29_at_8.04.59_PM-removebg-preview-600x280.png 600w, https:\/\/tamishop.pe\/wp-content\/uploads\/2025\/06\/WhatsApp_Image_2025-05-29_at_8.04.59_PM-removebg-preview-64x30.png 64w, https:\/\/tamishop.pe\/wp-content\/uploads\/2025\/06\/WhatsApp_Image_2025-05-29_at_8.04.59_PM-removebg-preview-300x140.png 300w\" sizes=\"auto, (max-width: 731px) 100vw, 731px\" \/><\/figure>\n\n\n\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n\n<style>\n.libro-reclamaciones {\n  max-width: 700px;\n  margin: 20px auto;\n  padding: 25px;\n  border: 1px solid #ccc;\n  border-radius: 10px;\n  font-family: Arial, sans-serif;\n  box-shadow: 0 4px 12px rgba(0,0,0,0.05);\n  box-sizing: border-box; \n}\n.libro-reclamaciones h2 {\n  text-align: center;\n  margin-top: 0;\n  font-size: 28px; \n  color: #333; \n}\n.libro-reclamaciones h3 {\n  margin-top: 25px;\n  margin-bottom: 10px;\n  border-bottom: 2px solid #f0f0f0;\n  padding-bottom: 5px;\n  font-size: 22px; \n  color: #555; \n}\n.libro-reclamaciones p {\n  text-align: center;\n  font-size: 14px;\n  margin-top: -10px;\n  color: #666;\n}\n.libro-reclamaciones label {\n  font-weight: bold;\n  color: #444;\n  margin-bottom: 3px;\n  display: block; \n}\n.libro-reclamaciones input[type=\"text\"],\n.libro-reclamaciones input[type=\"email\"],\n.libro-reclamaciones input[type=\"tel\"],\n.libro-reclamaciones input[type=\"number\"],\n.libro-reclamaciones select,\n.libro-reclamaciones textarea {\n  width: 100%;\n  margin: 5px 0 15px 0; \n  padding: 10px;\n  border: 1px solid #ccc;\n  border-radius: 5px;\n  box-sizing: border-box; \n  font-size: 16px; \n}\n.libro-reclamaciones input:focus,\n.libro-reclamaciones select:focus,\n.libro-reclamaciones textarea:focus {\n  border-color: #f28e24; \n  outline: none;\n  box-shadow: 0 0 0 2px rgba(242, 142, 36, 0.2);\n}\n.libro-reclamaciones .links-legales {\n  font-size: 14px; \n  color: #666;\n  line-height: 1.5;\n}\n.libro-reclamaciones .links-legales a {\n  color: #0073aa;\n  text-decoration: underline;\n  margin: 0 5px;\n}\n.libro-reclamaciones .links-legales input[type=\"checkbox\"] {\n  margin-right: 8px; \n  vertical-align: middle; \n}\n.aviso-wsp {\n  background: #fffbe6; \n  border: 1px solid #ffe58f; \n  padding: 10px;\n  margin-bottom: 15px;\n  border-radius: 5px;\n  font-size: 13px !important; \n  font-weight: bold;\n  text-align: center !important; \n  color: #856404; \n}\n#enviar-btn {\n  background: #f28e24; \n  color: #fff;\n  padding: 12px 25px;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 16px;\n  font-weight: 700;\n  width: 100%;\n  transition: background 0.3s ease;\n}\n#enviar-btn:hover {\n  background: #d97d1e;\n}\n@media (max-width: 768px) {\n  .libro-reclamaciones {\n    padding: 15px; \n    margin: 10px; \n  }\n  .libro-reclamaciones h2 {\n    font-size: 24px; \n  }\n  .libro-reclamaciones h3 {\n    font-size: 20px; \n  }\n  .libro-reclamaciones p {\n    font-size: 13px;\n  }\n  .libro-reclamaciones .links-legales {\n    font-size: 13px;\n  }\n}\n<\/style>\n\n<div class=\"libro-reclamaciones\">\n  <h2>Libro de Reclamaciones<\/h2>\n  <p>Conforme al C\u00f3digo de Protecci\u00f3n y Defensa del Consumidor \u2013 Ley N\u00b0 29571<\/p>\n\n  <form id=\"reclamacion-form\">\n    <h3>1. Identificaci\u00f3n del consumidor reclamante<\/h3>\n    <label for=\"nombre\">Nombres y Apellidos:<\/label>\n    <input type=\"text\" id=\"nombre\" name=\"nombre\" required><br>\n\n    <label for=\"documento\">DNI \/ CE \/ Pasaporte:<\/label>\n    <input type=\"text\" id=\"documento\" name=\"documento\" required><br>\n\n    <label for=\"telefono\">Tel\u00e9fono:<\/label>\n    <input type=\"tel\" id=\"telefono\" name=\"telefono\" required><br>\n\n    <label for=\"email\">Correo electr\u00f3nico:<\/label>\n    <input type=\"email\" id=\"email\" name=\"email\" required><br>\n\n    <h3>2. Identificaci\u00f3n del bien contratado<\/h3>\n    <label for=\"producto\">Producto o servicio:<\/label>\n    <input type=\"text\" id=\"producto\" name=\"producto\" required><br>\n\n    <label for=\"monto\">Monto reclamado (S\/):<\/label>\n    <input type=\"number\" id=\"monto\" name=\"monto\" step=\"0.01\" required><br>\n\n    <h3>3. Detalle de la reclamaci\u00f3n<\/h3>\n    <label for=\"tipo\">Tipo:<\/label>\n    <select id=\"tipo\" name=\"tipo\" required>\n      <option value=\"queja\">Queja<\/option>\n      <option value=\"reclamo\">Reclamo<\/option>\n    <\/select><br>\n\n    <label for=\"descripcion\">Descripci\u00f3n:<\/label>\n    <textarea id=\"descripcion\" name=\"descripcion\" rows=\"4\" required><\/textarea><br>\n\n    <label for=\"pedido\">Pedido del consumidor:<\/label>\n    <textarea id=\"pedido\" name=\"pedido\" rows=\"3\" required><\/textarea><br>\n\n    <h3>4. Confirmaci\u00f3n<\/h3>\n    <label class=\"links-legales\">\n      <input type=\"checkbox\" id=\"acepto\" name=\"acepto\" required>\n      Declaro que los datos son ver\u00eddicos y acepto la\n      <a href=\"https:\/\/tamishop.pe\/?page_id=1529\" target=\"_blank\">Pol\u00edtica de Reclamos<\/a>,\n      <a href=\"https:\/\/tamishop.pe\/?page_id=1523\" target=\"_blank\">T\u00e9rminos y Condiciones<\/a> y\n      <a href=\"https:\/\/tamishop.pe\/?page_id=1531\" target=\"_blank\">Pol\u00edticas de Privacidad<\/a>.\n    <\/label><br><br>\n\n    <p class=\"aviso-wsp\">\n      AVISO: Al hacer clic en &#8216;Enviar&#8217;, se descargar\u00e1 su constancia en PDF y se abrir\u00e1 WhatsApp para que notifique su reclamo a la empresa.\n    <\/p>\n\n    <button type=\"button\" id=\"enviar-btn\">\n      Enviar Reclamaci\u00f3n y Descargar PDF\n    <\/button>\n  <\/form>\n<\/div>\n\n<script>\n\/\/ Espera a que la p\u00e1gina cargue antes de activar el bot\u00f3n\ndocument.addEventListener('DOMContentLoaded', function() {\n\n  \/\/ Activa el bot\u00f3n\n  document.getElementById('enviar-btn').addEventListener('click', function() {\n    \n    \/\/ 1. Lee todos los datos del formulario\n    const nombre = document.getElementById('nombre').value;\n    const documento = document.getElementById('documento').value;\n    const telefono = document.getElementById('telefono').value; \n    const email = document.getElementById('email').value;\n    const producto = document.getElementById('producto').value;\n    const monto = document.getElementById('monto').value; \n    const tipo = document.getElementById('tipo').value;\n    const descripcion = document.getElementById('descripcion').value;\n    const pedido = document.getElementById('pedido').value;\n    const acepto = document.getElementById('acepto').checked;\n\n    \/\/ 2. Valida que TODOS los campos est\u00e9n llenos\n    if (!nombre || !documento || !telefono || !email || !producto || !monto || !descripcion || !pedido) {\n      alert('Por favor, complete TODOS los campos del formulario.');\n      return; \/\/ Detiene si falta algo\n    }\n    if (!acepto) {\n      alert('Debe aceptar las pol\u00edticas para continuar.');\n      return; \/\/ Detiene si no acepta\n    }\n\n    \/\/ 3. Define la funci\u00f3n que construye el PDF\n    \/\/ La separamos para poder llamarla con o sin logo.\n    function construirPdf(logoImgData) {\n      try {\n        const { jsPDF } = window.jspdf;\n        const doc = new jsPDF({ unit: 'mm', format: 'a4' });\n        const now = new Date();\n        const reclamoNum = `REC-${now.getFullYear()}${('0' + (now.getMonth() + 1)).slice(-2)}${('0' + now.getDate()).slice(-2)}-${('0' + now.getHours()).slice(-2)}${('0' + now.getMinutes()).slice(-2)}${('0' + now.getSeconds()).slice(-2)}`;\n        const fechaGeneracion = now.toLocaleDateString('es-PE', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' });\n\n        let y = 10; \/\/ Posici\u00f3n Y inicial\n\n        \/\/ INTENTA a\u00f1adir el logo (si fall\u00f3, logoImgData ser\u00e1 null)\n        if (logoImgData) {\n          try {\n            doc.addImage(logoImgData, 'PNG', 10, y, 40, 20); \/\/ Posici\u00f3n y tama\u00f1o\n            y += 25; \/\/ Espacio despu\u00e9s del logo\n          } catch(e) {\n            console.error(\"Error al a\u00f1adir el logo al PDF:\", e);\n            y += 10; \/\/ Falla, pero sigue adelante\n          }\n        } else {\n          y += 10; \/\/ Sin logo, solo a\u00f1ade espacio\n        }\n\n        \/\/ --- Contenido del PDF ---\n        doc.setFontSize(10);\n        doc.setTextColor(100, 100, 100);\n        doc.text(`N\u00famero de Reclamo: ${reclamoNum}`, doc.internal.pageSize.getWidth() - 10, y, { align: 'right' });\n        doc.text(`Fecha de Generaci\u00f3n: ${fechaGeneracion}`, doc.internal.pageSize.getWidth() - 10, y + 5, { align: 'right' });\n        y += 10;\n\n        doc.setFontSize(20);\n        doc.setTextColor(51, 51, 51); \n        doc.text('LIBRO DE RECLAMACIONES', doc.internal.pageSize.getWidth() \/ 2, y, { align: 'center' });\n        y += 10;\n\n        doc.setFontSize(12);\n        doc.setTextColor(100, 100, 100);\n        doc.text('Conforme al C\u00f3digo de Protecci\u00f3n y Defensa del Consumidor \u2013 Ley N\u00b0 29571', doc.internal.pageSize.getWidth() \/ 2, y, { align: 'center' });\n        y += 15;\n\n        \/\/ --- Secci\u00f3n 1 ---\n        doc.setFontSize(16);\n        doc.setTextColor(85, 85, 85); \n        doc.text('1. Identificaci\u00f3n del consumidor reclamante', 10, y);\n        doc.line(10, y + 1, doc.internal.pageSize.getWidth() - 10, y + 1); \n        y += 8;\n        doc.setFontSize(12);\n        doc.setTextColor(0, 0, 0);\n        doc.text(`Nombres y Apellidos: ${nombre}`, 10, y); y += 7;\n        doc.text(`DNI \/ CE \/ Pasaporte: ${documento}`, 10, y); y += 7;\n        doc.text(`Tel\u00e9fono: ${telefono}`, 10, y); y += 7;\n        doc.text(`Correo electr\u00f3nico: ${email}`, 10, y); y += 10;\n\n        \/\/ --- Secci\u00f3n 2 ---\n        doc.setFontSize(16);\n        doc.setTextColor(85, 85, 85);\n        doc.text('2. Identificaci\u00f3n del bien contratado', 10, y);\n        doc.line(10, y + 1, doc.internal.pageSize.getWidth() - 10, y + 1);\n        y += 8;\n        doc.setFontSize(12);\n        doc.setTextColor(0, 0, 0);\n        doc.text(`Producto o servicio: ${producto}`, 10, y); y += 7;\n        doc.text(`Monto reclamado (S\/): ${monto}`, 10, y); y += 10;\n\n        \/\/ --- Secci\u00f3n 3 ---\n        doc.setFontSize(16);\n        doc.setTextColor(85, 85, 85);\n        doc.text('3. Detalle de la reclamaci\u00f3n', 10, y);\n        doc.line(10, y + 1, doc.internal.pageSize.getWidth() - 10, y + 1);\n        y += 8;\n        doc.setFontSize(12);\n        doc.setTextColor(0, 0, 0);\n        doc.text(`Tipo: ${tipo}`, 10, y); y += 7;\n        \n        doc.text('Descripci\u00f3n:', 10, y);\n        const splitDesc = doc.splitTextToSize(descripcion, doc.internal.pageSize.getWidth() - 20);\n        doc.text(splitDesc, 10, y + 5);\n        y += (splitDesc.length * 5) + 5; \n        \n        doc.text('Pedido del consumidor:', 10, y);\n        const splitPedido = doc.splitTextToSize(pedido, doc.internal.pageSize.getWidth() - 20);\n        doc.text(splitPedido, 10, y + 5);\n        y += (splitPedido.length * 5) + 10; \n\n        \/\/ --- Secci\u00f3n 4 ---\n        doc.setFontSize(12);\n        doc.setTextColor(0, 0, 0);\n        doc.text('4. Confirmaci\u00f3n:', 10, y);\n        y += 7;\n        const splitConfirm = doc.splitTextToSize('Declaro que los datos consignados son ver\u00eddicos y acepto la Pol\u00edtica de Reclamos, T\u00e9rminos y Condiciones y Pol\u00edticas de Privacidad.', doc.internal.pageSize.getWidth() - 20);\n        doc.text(splitConfirm, 10, y);\n        y += 10;\n\n        doc.setFontSize(10);\n        doc.setTextColor(150, 150, 150);\n        doc.text('Este documento es una constancia de su reclamaci\u00f3n generada en TamiShop.', 10, doc.internal.pageSize.getHeight() - 15);\n\n        \/\/ 5. ACCI\u00d3N 1: Descargar el PDF para el cliente\n        doc.save(`Reclamacion-TamiShop-${documento}-${reclamoNum}.pdf`);\n\n        \/\/ 6. Prepara el texto para WhatsApp\n        let wspText = `\n          \u00a1NUEVO RECLAMO RECIBIDO!\n          (Aviso autom\u00e1tico del Libro de Reclamaciones)\n          -------------------------------------------\n          *N\u00famero de Reclamo:* ${reclamoNum}\n          *Fecha:* ${fechaGeneracion}\n          \n          *1. Consumidor:*\n          Nombre: ${nombre}\n          Doc: ${documento}\n          Tel: ${telefono}\n          Email: ${email}\n\n          *2. Producto:*\n          Detalle: ${producto}\n          Monto: S\/ ${monto}\n\n          *3. Reclamo:*\n          Tipo: *${tipo.toUpperCase()}*\n          Descripci\u00f3n: ${descripcion}\n          Pedido: ${pedido}\n          \n          *El cliente tiene una copia PDF con este mismo detalle.*\n        `;\n\n        \/\/ 7. ACCI\u00d3N 2: Abrir la ventana de WhatsApp para ti (con retraso)\n        setTimeout(() => {\n          const wspURL = 'https:\/\/wa.me\/51999579537?text=' + encodeURIComponent(wspText);\n          window.open(wspURL, '_blank');\n        }, 1000); \/\/ 1 segundo de espera\n\n      } catch (e) {\n        \/\/ Si todo falla (ej. la librer\u00eda jsPDF no carg\u00f3)\n        console.error(\"Error al generar el PDF:\", e);\n        alert(\"Error al generar el PDF. Por favor, intente de nuevo o contacte a soporte.\");\n      }\n    } \/\/ Fin de la funci\u00f3n construirPdf\n\n    \/\/ 4. Intenta cargar el logo\n    const logoUrl = 'https:\/\/tamishop.pe\/wp-content\/uploads\/2025\/07\/WhatsApp_Image_2025-05-29_at_8.04.59_PM-removebg-preview.png';\n    const img = new Image();\n    img.crossOrigin = \"anonymous\"; \/\/ Importante para evitar \"tainted canvas\"\n\n    img.onload = function() {\n      \/\/ El logo S\u00cd carg\u00f3\n      construirPdf(this); \/\/ Llama a la funci\u00f3n CON la imagen\n    };\n\n    img.onerror = function() {\n      \/\/ El logo FALL\u00d3\n      console.warn(\"No se pudo cargar el logo. Se generar\u00e1 el PDF sin \u00e9l.\");\n      construirPdf(null); \/\/ Llama a la funci\u00f3n SIN la imagen\n    };\n    \n    \/\/ Activa la carga del logo\n    img.src = logoUrl;\n\n  });\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Libro de Reclamaciones Conforme al C\u00f3digo de Protecci\u00f3n y Defensa del Consumidor \u2013 Ley N\u00b0 29571 1. Identificaci\u00f3n del consumidor reclamante Nombres y Apellidos: DNI \/ CE \/ Pasaporte: Tel\u00e9fono: Correo electr\u00f3nico: 2. Identificaci\u00f3n del bien contratado Producto o servicio: Monto reclamado (S\/): 3. Detalle de la reclamaci\u00f3n Tipo: QuejaReclamo Descripci\u00f3n: Pedido del consumidor: 4. [&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-1542","page","type-page","status-publish","hentry"],"blocksy_meta":{"has_hero_section":"disabled","styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6},"page_structure_type":"type-4"},"_links":{"self":[{"href":"https:\/\/tamishop.pe\/index.php?rest_route=\/wp\/v2\/pages\/1542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tamishop.pe\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tamishop.pe\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tamishop.pe\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tamishop.pe\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1542"}],"version-history":[{"count":14,"href":"https:\/\/tamishop.pe\/index.php?rest_route=\/wp\/v2\/pages\/1542\/revisions"}],"predecessor-version":[{"id":6831,"href":"https:\/\/tamishop.pe\/index.php?rest_route=\/wp\/v2\/pages\/1542\/revisions\/6831"}],"wp:attachment":[{"href":"https:\/\/tamishop.pe\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}