{"id":873,"date":"2026-08-19T15:35:11","date_gmt":"2026-08-19T20:35:11","guid":{"rendered":"https:\/\/nucleo.miespaciodigital.net\/?page_id=873"},"modified":"2026-09-05T14:05:28","modified_gmt":"2026-09-05T19:05:28","slug":"atencion-ciudadana-tupa","status":"publish","type":"page","link":"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/atencion-ciudadana-tupa\/","title":{"rendered":"Atenci\u00f3n Ciudadana (TUPA)"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"873\" class=\"elementor elementor-873\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a733ed2 e-con e-atomic-element e-flexbox-base e-bba0233 \" data-id=\"a733ed2\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"a733ed2\" data-e-type=\"e-flexbox\" data-id=\"a733ed2\">\n    <div class=\"elementor-element elementor-element-754b12f e-con e-atomic-element e-flexbox-base \" data-id=\"754b12f\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"754b12f\" data-e-type=\"e-flexbox\" data-id=\"754b12f\">\n    \t\t<div class=\"elementor-element elementor-element-eddbd34 elementor-widget elementor-widget-html\" data-id=\"eddbd34\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\r\n<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>N\u00facleo \u2014 Atenci\u00f3n Ciudadana (TUPA)<\/title>\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n  :root{\r\n    --ink:#132029; --ink-soft:#3d4d55;\r\n    --paper:#F4F2EC; --paper-raised:#FFFFFF; --line:#DDD8CB;\r\n    --navy:#12303D; --navy-soft:#1C3E4E;\r\n    --gold:#C98A3B; --gold-soft:#E8C899;\r\n    --green:#3A7D57; --green-bg:#E4EEE6;\r\n    --amber:#B8862F; --amber-bg:#F2E9D6;\r\n    --red:#B4432B; --red-bg:#F3E1DB;\r\n    --radius:14px;\r\n    --shadow: 0 1px 2px rgba(19,32,41,0.06), 0 8px 24px -12px rgba(19,32,41,0.18);\r\n  }\r\n  *{box-sizing:border-box;}\r\n  html,body{margin:0;padding:0;}\r\n  body{background:var(--paper); color:var(--ink); font-family:'IBM Plex Sans', sans-serif; -webkit-font-smoothing:antialiased;}\r\n  .app{display:grid; grid-template-columns:260px 1fr; min-height:100vh;}\r\n\r\n  .sidebar{background:var(--navy); color:#EDEBE2; padding:28px 20px 20px; display:flex; flex-direction:column; gap:28px;}\r\n  .brand{display:flex; align-items:center; gap:10px;}\r\n  .brand-mark{width:34px;height:34px;border-radius:50%; background:radial-gradient(circle at 35% 30%, var(--gold-soft), var(--gold) 60%); box-shadow: inset 0 0 0 2px rgba(255,255,255,0.25); flex-shrink:0;}\r\n  .brand-name{font-family:'Fraunces', serif; font-weight:600; font-size:1.25rem;}\r\n  .brand-sub{font-size:0.7rem; color:#9FB2BC; letter-spacing:0.06em; text-transform:uppercase; margin-top:-22px; margin-left:44px;}\r\n  nav{display:flex;flex-direction:column;gap:2px;margin-top:6px;}\r\n  .nav-item{display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:8px; font-size:0.87rem; color:#C7D3D8; text-decoration:none; cursor:pointer; transition:background 0.15s ease, color 0.15s ease;}\r\n  .nav-item .num{font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color:#7C929B; width:16px;}\r\n  .nav-item:hover{background:rgba(255,255,255,0.06); color:#fff;}\r\n  .nav-item.active{background:var(--navy-soft); color:#fff; box-shadow: inset 3px 0 0 var(--gold);}\r\n  .nav-item.active .num{color:var(--gold);}\r\n  .sidebar-footer{margin-top:auto; font-size:0.72rem; color:#7C929B; padding-top:16px; border-top:1px solid rgba(255,255,255,0.1);}\r\n\r\n  main{padding:32px 40px 60px; max-width:1260px;}\r\n  .topbar{display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:26px; flex-wrap:wrap; gap:16px;}\r\n  .eyebrow{font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.08em; text-transform:uppercase; color:var(--gold); margin-bottom:6px;}\r\n  h1{font-family:'Fraunces', serif; font-weight:600; font-size:2rem; margin:0; color:var(--navy);}\r\n  .subtitle{color:var(--ink-soft); font-size:0.95rem; margin-top:6px;}\r\n  .user-chip{display:flex; align-items:center; gap:10px; background:var(--paper-raised); border:1px solid var(--line); border-radius:999px; padding:6px 14px 6px 6px; box-shadow:var(--shadow);}\r\n  .user-avatar{width:30px;height:30px;border-radius:50%; background:var(--navy); color:#EDEBE2; display:flex;align-items:center;justify-content:center; font-size:0.75rem;font-weight:600; font-family:'IBM Plex Mono',monospace;}\r\n  .user-chip .name{font-size:0.82rem;font-weight:500;}\r\n  .user-chip .role{font-size:0.72rem;color:var(--ink-soft);}\r\n\r\n  .summary-strip{display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-bottom:22px;}\r\n  .kpi-card{background:var(--paper-raised); border:1px solid var(--line); border-radius:var(--radius); padding:18px 20px; box-shadow:var(--shadow); position:relative; overflow:hidden;}\r\n  .kpi-card::before{content:\"\"; position:absolute; top:0; left:0; right:0; height:3px;}\r\n  .kpi-card.navy::before{background:var(--navy);}\r\n  .kpi-card.amber::before{background:var(--amber);}\r\n  .kpi-card.red::before{background:var(--red);}\r\n  .kpi-card.green::before{background:var(--green);}\r\n  .kpi-label{font-size:0.74rem; color:var(--ink-soft); margin-bottom:6px;}\r\n  .kpi-value{font-family:'Fraunces', serif; font-size:1.8rem; font-weight:600; color:var(--navy);}\r\n  .kpi-card.amber .kpi-value{color:var(--amber);}\r\n  .kpi-card.red .kpi-value{color:var(--red);}\r\n  .kpi-card.green .kpi-value{color:var(--green);}\r\n\r\n  .toolbar{display:flex; gap:12px; align-items:center; margin-bottom:16px; flex-wrap:wrap;}\r\n  .search-box{flex:1; min-width:220px; display:flex; align-items:center; gap:8px; background:var(--paper-raised); border:1px solid var(--line); border-radius:10px; padding:10px 14px;}\r\n  .search-box input{border:none; outline:none; background:transparent; font-family:'IBM Plex Sans', sans-serif; font-size:0.88rem; color:var(--ink); width:100%;}\r\n  .search-box svg{flex-shrink:0; color:var(--ink-soft);}\r\n  .filter-chip{font-size:0.8rem; padding:9px 14px; border-radius:10px; border:1px solid var(--line); background:var(--paper-raised); color:var(--ink-soft); cursor:pointer; user-select:none; transition:border-color 0.15s ease, color 0.15s ease;}\r\n  .filter-chip.active{border-color:var(--navy); color:var(--navy); font-weight:600; background:var(--gold-soft);}\r\n  .btn-new{margin-left:auto; font-family:'IBM Plex Sans', sans-serif; font-size:0.85rem; font-weight:600; padding:10px 18px; border-radius:10px; border:none; background:var(--navy); color:#fff; cursor:pointer;}\r\n\r\n  \/* FORM *\/\r\n  .form-panel{background:var(--paper-raised); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); padding:24px; margin-bottom:22px; display:none;}\r\n  .form-panel.open{display:block;}\r\n  .form-panel h3{font-family:'Fraunces', serif; font-size:1.1rem; color:var(--navy); margin:0 0 4px;}\r\n  .form-sub{font-size:0.82rem; color:var(--ink-soft); margin-bottom:16px;}\r\n  .form-grid{display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:16px;}\r\n  .form-field{display:flex; flex-direction:column; gap:6px;}\r\n  .form-field.full{grid-column:1 \/ -1;}\r\n  .form-field label{font-size:0.74rem; font-weight:600; color:var(--ink-soft); text-transform:uppercase; letter-spacing:0.03em;}\r\n  .form-field select, .form-field input{border:1px solid var(--line); border-radius:8px; padding:10px 12px; font-family:'IBM Plex Sans', sans-serif; font-size:0.86rem; color:var(--ink); background:var(--paper-raised);}\r\n  .tramite-info{font-size:0.78rem; color:var(--ink-soft); background:#FAF9F5; border:1px dashed var(--line); border-radius:8px; padding:10px 12px; margin-top:4px;}\r\n  .tramite-info b{color:var(--navy);}\r\n  .form-actions{display:flex; gap:10px; justify-content:flex-end;}\r\n  .btn{font-family:'IBM Plex Sans', sans-serif; font-size:0.82rem; font-weight:600; padding:10px 16px; border-radius:9px; border:1px solid var(--navy); background:var(--navy); color:#fff; cursor:pointer;}\r\n  .btn.secondary{background:transparent; color:var(--navy);}\r\n\r\n  \/* CONFIRMATION *\/\r\n  .confirm-panel{background:var(--navy); border-radius:var(--radius); padding:22px 26px; margin-bottom:22px; display:none; color:#fff; box-shadow:var(--shadow);}\r\n  .confirm-panel.show{display:flex; align-items:center; gap:18px; flex-wrap:wrap;}\r\n  .confirm-panel .code-big{font-family:'IBM Plex Mono', monospace; font-size:1.3rem; font-weight:600; color:var(--gold-soft); background:rgba(255,255,255,0.08); padding:8px 16px; border-radius:8px;}\r\n  .confirm-panel .txt{font-size:0.85rem; color:#C7D3D8;}\r\n  .confirm-panel .txt b{color:#fff;}\r\n\r\n  \/* TABLE *\/\r\n  .panel{background:var(--paper-raised); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); overflow:hidden;}\r\n  table{width:100%; border-collapse:collapse;}\r\n  thead th{text-align:left; font-size:0.68rem; text-transform:uppercase; letter-spacing:0.04em; color:var(--ink-soft); padding:13px 16px; border-bottom:1px solid var(--line); background:#FAF9F5;}\r\n  tbody tr.data-row{border-bottom:1px solid var(--line); cursor:pointer; transition:background 0.12s ease;}\r\n  tbody tr.data-row:hover{background:#FAF8F2;}\r\n  tbody td{padding:13px 16px; font-size:0.83rem; vertical-align:top;}\r\n  .code{font-family:'IBM Plex Mono',monospace; font-size:0.76rem; color:var(--gold); font-weight:500;}\r\n  .desc-cell .name{font-weight:500; font-size:0.85rem;}\r\n  .desc-cell .sub{font-size:0.72rem; color:var(--ink-soft); margin-top:3px;}\r\n  .plazo-cell{font-family:'IBM Plex Mono',monospace; font-size:0.8rem;}\r\n  .plazo-cell.overdue{color:var(--red); font-weight:600;}\r\n  .plazo-cell.soon{color:var(--amber); font-weight:600;}\r\n  .status-pill{display:inline-flex; align-items:center; gap:6px; font-size:0.72rem; font-weight:600; padding:4px 10px; border-radius:999px; white-space:nowrap;}\r\n  .status-pill.tramite{background:var(--amber-bg); color:var(--amber);}\r\n  .status-pill.observado{background:var(--red-bg); color:var(--red);}\r\n  .status-pill.resuelto{background:var(--green-bg); color:var(--green);}\r\n  .status-pill .dot{width:6px;height:6px;border-radius:50%; background:currentColor;}\r\n\r\n  .detail-row td{padding:0; border-bottom:1px solid var(--line);}\r\n  .detail-inner{padding:18px 24px; background:#FAF9F5; display:none; grid-template-columns:repeat(4,1fr); gap:18px;}\r\n  .detail-inner.open{display:grid;}\r\n  .detail-block .k{font-size:0.68rem; text-transform:uppercase; letter-spacing:0.04em; color:var(--ink-soft); margin-bottom:4px;}\r\n  .detail-block .v{font-size:0.85rem; font-weight:500;}\r\n  .detail-block .v.mono{font-family:'IBM Plex Mono',monospace;}\r\n  .advance-btn{grid-column:1\/-1; margin-top:6px;}\r\n  .advance-btn button{font-size:0.78rem; padding:8px 14px; border-radius:8px; border:1px solid var(--navy); background:#fff; color:var(--navy); cursor:pointer; font-weight:600;}\r\n\r\n  .no-results{padding:40px; text-align:center; color:var(--ink-soft); font-size:0.9rem; display:none;}\r\n  .demo-note{margin-top:20px; font-size:0.78rem; color:var(--ink-soft); text-align:center; padding:14px; border:1px dashed var(--line); border-radius:10px; background:rgba(201,138,59,0.05);}\r\n\r\n  @media (max-width:980px){\r\n    .app{grid-template-columns:1fr;}\r\n    .sidebar{display:none;}\r\n    .summary-strip{grid-template-columns:repeat(2,1fr);}\r\n    .form-grid{grid-template-columns:1fr;}\r\n    thead{display:none;}\r\n    table, tbody, tr, td{display:block; width:100%;}\r\n    tbody tr.data-row{padding:12px 16px; border-bottom:1px solid var(--line);}\r\n    tbody td{padding:4px 0;}\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div class=\"app\">\r\n\r\n  <aside class=\"sidebar\">\r\n   <div class=\"brand\">\r\n  <img decoding=\"async\" src=\"https:\/\/miespaciodigital.net\/auditoria\/wp-content\/uploads\/2026\/09\/LOGO1.jpg\"\r\n       alt=\"N\u00daCLEO\"\r\n       style=\"width:100%; max-width:190px; height:auto; display:block;\">\r\n<\/div>\r\n  <nav>\r\n\r\n  <a class=\"nav-item\"\r\n     href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/tablero-general\/\">\r\n    <span class=\"num\">01<\/span> Tablero General\r\n  <\/a>\r\n\r\n  <a class=\"nav-item active\"\r\n     href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/atencion-ciudadana-tupa\/\">\r\n    <span class=\"num\">02<\/span> Atenci\u00f3n Ciudadana\r\n  <\/a>\r\n\r\n  <a class=\"nav-item\"\r\n     href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/asistente-interno-ia\/\">\r\n    <span class=\"num\">03<\/span> Asistente Interno (IA)\r\n  <\/a>\r\n\r\n  <a class=\"nav-item\"\r\n   href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/4-gestion-por-resultados\/\">\r\n  <span class=\"num\">04<\/span> Gesti\u00f3n por Resultados\r\n<\/a>\r\n\r\n  <a class=\"nav-item\"\r\n     href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/5-planeamiento-y-presupuesto\/\">\r\n    <span class=\"num\">05<\/span> Planeamiento y Presupuesto\r\n  <\/a>\r\n\r\n  <a class=\"nav-item\"\r\n     href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/auditoria-y-control\/\">\r\n    <span class=\"num\">06<\/span> Auditor\u00eda y Control\r\n  <\/a>\r\n\r\n  <a class=\"nav-item\"\r\n     href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/informes-y-rendicion-sistema\/\">\r\n    <span class=\"num\">07<\/span> Informes y Rendici\u00f3n\r\n  <\/a>\r\n\r\n  <a class=\"nav-item\"\r\n     href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-organismos-de-gobierno\/\">\r\n    <span class=\"num\">08<\/span> Configuraci\u00f3n\r\n  <\/a>\r\n\r\n  <a class=\"nav-item\"\r\n     href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/ayuda-y-soporte-2\/\">\r\n    <span class=\"num\">09<\/span> Ayuda y Soporte\r\n  <\/a>\r\n\r\n    <div class=\"sidebar-footer\">N\u00daCLEO<br>Gesti\u00f3n por Resultados con IA<\/div>\r\n  <\/aside>\r\n\r\n  <main>\r\n    <div class=\"topbar\">\r\n      <div>\r\n        <div class=\"eyebrow\">Atenci\u00f3n Ciudadana<\/div>\r\n        <h1>Tr\u00e1mites TUPA<\/h1>\r\n        <div class=\"subtitle\">Registro, seguimiento y plazos legales de cada procedimiento administrativo<\/div>\r\n      <\/div>\r\n      <div class=\"user-chip\">\r\n        <div class=\"user-avatar\">DM<\/div>\r\n        <div><div class=\"name\">Demo Municipal<\/div><div class=\"role\">Mesa de Partes<\/div><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"summary-strip\">\r\n      <div class=\"kpi-card navy\"><div class=\"kpi-label\">Tr\u00e1mites activos<\/div><div class=\"kpi-value\" id=\"kpiTotal\">\u2014<\/div><\/div>\r\n      <div class=\"kpi-card red\"><div class=\"kpi-label\">Vencidos (fuera de plazo)<\/div><div class=\"kpi-value\" id=\"kpiOverdue\">\u2014<\/div><\/div>\r\n      <div class=\"kpi-card amber\"><div class=\"kpi-label\">Por vencer (\u2264 2 d\u00edas)<\/div><div class=\"kpi-value\" id=\"kpiSoon\">\u2014<\/div><\/div>\r\n      <div class=\"kpi-card green\"><div class=\"kpi-label\">Resueltos este mes<\/div><div class=\"kpi-value\" id=\"kpiDone\">\u2014<\/div><\/div>\r\n    <\/div>\r\n\r\n    <div class=\"confirm-panel\" id=\"confirmPanel\">\r\n      <div class=\"code-big\" id=\"confirmCode\"><\/div>\r\n      <div class=\"txt\">Solicitud registrada correctamente. El ciudadano puede hacer seguimiento con este c\u00f3digo. Vence el <b id=\"confirmDate\"><\/b>.<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"toolbar\">\r\n      <div class=\"search-box\">\r\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><\/svg>\r\n        <input id=\"taskSearch\" type=\"text\" placeholder=\"Buscar por c\u00f3digo de seguimiento, ciudadano o tr\u00e1mite...\">\r\n      <\/div>\r\n      <div class=\"filter-chip active\" data-status=\"todos\">Todos<\/div>\r\n      <div class=\"filter-chip\" data-status=\"tramite\">En tr\u00e1mite<\/div>\r\n      <div class=\"filter-chip\" data-status=\"observado\">Observado<\/div>\r\n      <div class=\"filter-chip\" data-status=\"resuelto\">Resuelto<\/div>\r\n      <button class=\"btn-new\" onclick=\"toggleForm()\">+ Nueva solicitud<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"form-panel\" id=\"formPanel\">\r\n      <h3>Registrar nueva solicitud<\/h3>\r\n      <div class=\"form-sub\">Selecciona el procedimiento del TUPA vigente \u2014 el plazo legal y el costo se cargan autom\u00e1ticamente.<\/div>\r\n      <div class=\"form-grid\">\r\n        <div class=\"form-field full\">\r\n          <label>Procedimiento (TUPA)<\/label>\r\n          <select id=\"fTramite\" onchange=\"updateTramiteInfo()\"><\/select>\r\n          <div class=\"tramite-info\" id=\"tramiteInfo\"><\/div>\r\n        <\/div>\r\n        <div class=\"form-field\">\r\n          <label>Nombre del ciudadano \/ administrado<\/label>\r\n          <input type=\"text\" id=\"fCiudadano\" placeholder=\"Ej: Rosa Medina Quispe\">\r\n        <\/div>\r\n        <div class=\"form-field\">\r\n          <label>DNI \/ RUC<\/label>\r\n          <input type=\"text\" id=\"fDoc\" placeholder=\"Ej: 45678912\">\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"form-actions\">\r\n        <button class=\"btn secondary\" onclick=\"toggleForm()\">Cancelar<\/button>\r\n        <button class=\"btn\" onclick=\"registrarSolicitud()\">Registrar y generar c\u00f3digo<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <table>\r\n        <thead>\r\n          <tr>\r\n            <th>C\u00f3digo<\/th>\r\n            <th>Procedimiento<\/th>\r\n            <th>Administrado<\/th>\r\n            <th>Gerencia responsable<\/th>\r\n            <th>Plazo legal<\/th>\r\n            <th>Estado<\/th>\r\n          <\/tr>\r\n        <\/thead>\r\n        <tbody id=\"tableBody\"><\/tbody>\r\n      <\/table>\r\n      <div class=\"no-results\" id=\"noResults\">No se encontraron solicitudes que coincidan con tu b\u00fasqueda.<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"demo-note\">\r\n      Prototipo de demostraci\u00f3n \u2014 haz clic en una fila para ver el detalle y avanzar su estado. Los plazos son referenciales; cada municipalidad debe validarlos contra su propio TUPA vigente.\r\n    <\/div>\r\n  <div style=\"margin-top:30px;\">\r\n  <a href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/tablero-general\/\"\r\n     style=\"display:inline-block; padding:12px 22px; background:#123746; color:#fff; text-decoration:none; border-radius:8px; font-weight:600;\">\r\n    \u2190 REGRESAR AL INICIO\r\n  <\/a>\r\n<\/div>\r\n  <\/main>\r\n<\/div>\r\n\r\n<script>\r\nconst catalogoTupa = [\r\n  {codigo:\"TUPA-05.01\", nombre:\"Licencia de Funcionamiento (local comercial)\", gerencia:\"Gerencia de Desarrollo Econ\u00f3mico\", plazoDias:15, costo:\"S\/ 180.00\"},\r\n  {codigo:\"TUPA-12.03\", nombre:\"Licencia de Edificaci\u00f3n \u2014 Modalidad A\", gerencia:\"Gerencia de Infraestructura y Desarrollo Urbano\", plazoDias:15, costo:\"S\/ 420.00\"},\r\n  {codigo:\"TUPA-12.07\", nombre:\"Certificado de Zonificaci\u00f3n y V\u00edas\", gerencia:\"Gerencia de Infraestructura y Desarrollo Urbano\", plazoDias:5, costo:\"S\/ 65.00\"},\r\n  {codigo:\"TUPA-01.02\", nombre:\"Certificado Domiciliario\", gerencia:\"Gerencia de Desarrollo Social\", plazoDias:3, costo:\"S\/ 15.00\"},\r\n  {codigo:\"TUPA-08.04\", nombre:\"Autorizaci\u00f3n de Anuncio Publicitario\", gerencia:\"Gerencia de Desarrollo Econ\u00f3mico\", plazoDias:7, costo:\"S\/ 95.00\"},\r\n  {codigo:\"TUPA-03.01\", nombre:\"Constancia de No Adeudo\", gerencia:\"Gerencia de Administraci\u00f3n y Finanzas\", plazoDias:3, costo:\"S\/ 12.00\"},\r\n  {codigo:\"TUPA-09.02\", nombre:\"Autorizaci\u00f3n de Ocupaci\u00f3n de V\u00eda P\u00fablica (evento)\", gerencia:\"Gerencia de Servicios P\u00fablicos\", plazoDias:5, costo:\"S\/ 55.00\"}\r\n];\r\n\r\nlet solicitudes = [\r\n  {code:\"TUPA-2026-0812\", tramiteIdx:0, ciudadano:\"Rosa Medina Quispe\", doc:\"45678912\", registro:\"2026-07-28\", vence:\"2026-08-18\", status:\"observado\"},\r\n  {code:\"TUPA-2026-0815\", tramiteIdx:2, ciudadano:\"Carlos Huam\u00e1n R\u00edos\", doc:\"41203877\", registro:\"2026-08-14\", vence:\"2026-08-19\", status:\"tramite\"},\r\n  {code:\"TUPA-2026-0819\", tramiteIdx:3, ciudadano:\"Luz Fern\u00e1ndez Paredes\", doc:\"48812035\", registro:\"2026-08-17\", vence:\"2026-08-20\", status:\"tramite\"},\r\n  {code:\"TUPA-2026-0803\", tramiteIdx:1, ciudadano:\"Empresa Constructora Andina S.A.C.\", doc:\"20601234567\", registro:\"2026-07-25\", vence:\"2026-08-09\", status:\"observado\"},\r\n  {code:\"TUPA-2026-0821\", tramiteIdx:4, ciudadano:\"Miguel Torres Salas\", doc:\"44521098\", registro:\"2026-08-16\", vence:\"2026-08-23\", status:\"tramite\"},\r\n  {code:\"TUPA-2026-0798\", tramiteIdx:5, ciudadano:\"Ana Beltr\u00e1n Cusi\", doc:\"46012378\", registro:\"2026-08-10\", vence:\"2026-08-13\", status:\"resuelto\"},\r\n  {code:\"TUPA-2026-0805\", tramiteIdx:0, ciudadano:\"Bodega San Mart\u00edn E.I.R.L.\", doc:\"20512346789\", registro:\"2026-08-01\", vence:\"2026-08-16\", status:\"resuelto\"},\r\n  {code:\"TUPA-2026-0790\", tramiteIdx:6, ciudadano:\"Comit\u00e9 Vecinal Los Jardines\", doc:\"41988765\", registro:\"2026-08-05\", vence:\"2026-08-10\", status:\"resuelto\"}\r\n];\r\n\r\nconst today = new Date(\"2026-08-19T00:00:00\");\r\n\r\nconst fTramite = document.getElementById(\"fTramite\");\r\ncatalogoTupa.forEach((t, i) => {\r\n  const opt = document.createElement(\"option\");\r\n  opt.value = i; opt.textContent = `${t.codigo} \u2014 ${t.nombre}`;\r\n  fTramite.appendChild(opt);\r\n});\r\n\r\nfunction updateTramiteInfo(){\r\n  const t = catalogoTupa[fTramite.value];\r\n  document.getElementById(\"tramiteInfo\").innerHTML = `<b>Gerencia responsable:<\/b> ${t.gerencia} &nbsp;\u00b7&nbsp; <b>Plazo legal:<\/b> ${t.plazoDias} d\u00edas h\u00e1biles &nbsp;\u00b7&nbsp; <b>Costo:<\/b> ${t.costo}`;\r\n}\r\nupdateTramiteInfo();\r\n\r\nfunction daysLeft(vence, status){\r\n  if(status === \"resuelto\") return null;\r\n  const d = new Date(vence + \"T23:59:59\");\r\n  return Math.round((d - today) \/ (1000*60*60*24));\r\n}\r\n\r\nfunction shortDate(dueStr){\r\n  const d = new Date(dueStr + \"T00:00:00\");\r\n  return d.toLocaleDateString(\"es-PE\", {day:\"2-digit\", month:\"short\", year:\"numeric\"});\r\n}\r\n\r\nlet activeStatus = \"todos\";\r\n\r\nfunction getFiltered(){\r\n  const q = document.getElementById(\"taskSearch\").value.trim().toLowerCase();\r\n  return solicitudes.filter(s => {\r\n    const t = catalogoTupa[s.tramiteIdx];\r\n    const matchesStatus = activeStatus === \"todos\" || s.status === activeStatus;\r\n    const haystack = (s.code + \" \" + s.ciudadano + \" \" + t.nombre + \" \" + t.codigo).toLowerCase();\r\n    return matchesStatus && haystack.includes(q);\r\n  });\r\n}\r\n\r\nfunction statusLabel(s){ return s===\"tramite\" ? \"En tr\u00e1mite\" : s===\"observado\" ? \"Observado\" : \"Resuelto\"; }\r\n\r\nfunction renderTable(){\r\n  const filtered = getFiltered();\r\n  const tbody = document.getElementById(\"tableBody\");\r\n  const noResults = document.getElementById(\"noResults\");\r\n  tbody.innerHTML = \"\";\r\n\r\n  if(filtered.length === 0){ noResults.style.display = \"block\"; }\r\n  else { noResults.style.display = \"none\"; }\r\n\r\n  filtered.forEach((s, i) => {\r\n    const t = catalogoTupa[s.tramiteIdx];\r\n    const left = daysLeft(s.vence, s.status);\r\n    let plazoClass = \"\", plazoText = \"\";\r\n    if(s.status === \"resuelto\"){ plazoText = \"Resuelto el \" + shortDate(s.vence); }\r\n    else if(left < 0){ plazoClass = \"overdue\"; plazoText = `Venci\u00f3 hace ${Math.abs(left)} d\u00eda(s)`; }\r\n    else if(left <= 2){ plazoClass = \"soon\"; plazoText = `Vence en ${left} d\u00eda(s)`; }\r\n    else { plazoText = `Vence en ${left} d\u00edas`; }\r\n\r\n    const tr = document.createElement(\"tr\");\r\n    tr.className = \"data-row\";\r\n    tr.innerHTML = `\r\n      <td class=\"code\">${s.code}<\/td>\r\n      <td class=\"desc-cell\"><div class=\"name\">${t.nombre}<\/div><div class=\"sub\">${t.codigo}<\/div><\/td>\r\n      <td class=\"desc-cell\"><div class=\"name\">${s.ciudadano}<\/div><div class=\"sub\">Doc: ${s.doc}<\/div><\/td>\r\n      <td class=\"desc-cell\"><div class=\"name\">${t.gerencia}<\/div><\/td>\r\n      <td class=\"plazo-cell ${plazoClass}\">${plazoText}<\/td>\r\n      <td><span class=\"status-pill ${s.status}\"><span class=\"dot\"><\/span>${statusLabel(s.status)}<\/span><\/td>\r\n    `;\r\n    const detailTr = document.createElement(\"tr\");\r\n    detailTr.className = \"detail-row\";\r\n    detailTr.innerHTML = `\r\n      <td colspan=\"6\">\r\n        <div class=\"detail-inner\" id=\"detail-${i}\">\r\n          <div class=\"detail-block\"><div class=\"k\">Fecha de registro<\/div><div class=\"v\">${shortDate(s.registro)}<\/div><\/div>\r\n          <div class=\"detail-block\"><div class=\"k\">Costo del tr\u00e1mite<\/div><div class=\"v mono\">${t.costo}<\/div><\/div>\r\n          <div class=\"detail-block\"><div class=\"k\">Plazo legal<\/div><div class=\"v\">${t.plazoDias} d\u00edas h\u00e1biles<\/div><\/div>\r\n          <div class=\"detail-block\"><div class=\"k\">Estado actual<\/div><div class=\"v\">${statusLabel(s.status)}<\/div><\/div>\r\n          <div class=\"advance-btn\"><button onclick=\"event.stopPropagation(); advanceStatus('${s.code}')\">Avanzar estado \u2192<\/button><\/div>\r\n        <\/div>\r\n      <\/td>\r\n    `;\r\n    tr.addEventListener(\"click\", () => {\r\n      document.getElementById(`detail-${i}`).classList.toggle(\"open\");\r\n    });\r\n    tbody.appendChild(tr);\r\n    tbody.appendChild(detailTr);\r\n  });\r\n\r\n  document.getElementById(\"kpiTotal\").textContent = solicitudes.filter(s => s.status !== \"resuelto\").length;\r\n  document.getElementById(\"kpiOverdue\").textContent = solicitudes.filter(s => daysLeft(s.vence, s.status) !== null && daysLeft(s.vence, s.status) < 0).length;\r\n  document.getElementById(\"kpiSoon\").textContent = solicitudes.filter(s => { const d = daysLeft(s.vence, s.status); return d !== null && d >= 0 && d <= 2; }).length;\r\n  document.getElementById(\"kpiDone\").textContent = solicitudes.filter(s => s.status === \"resuelto\").length;\r\n}\r\n\r\nfunction advanceStatus(code){\r\n  const s = solicitudes.find(x => x.code === code);\r\n  if(!s) return;\r\n  if(s.status === \"tramite\") s.status = \"observado\";\r\n  else if(s.status === \"observado\") s.status = \"resuelto\";\r\n  else s.status = \"tramite\";\r\n  renderTable();\r\n}\r\n\r\ndocument.getElementById(\"taskSearch\").addEventListener(\"input\", renderTable);\r\ndocument.querySelectorAll(\".filter-chip\").forEach(chip => {\r\n  chip.addEventListener(\"click\", () => {\r\n    document.querySelectorAll(\".filter-chip\").forEach(c => c.classList.remove(\"active\"));\r\n    chip.classList.add(\"active\");\r\n    activeStatus = chip.dataset.status;\r\n    renderTable();\r\n  });\r\n});\r\n\r\nfunction toggleForm(){\r\n  document.getElementById(\"formPanel\").classList.toggle(\"open\");\r\n  document.getElementById(\"confirmPanel\").classList.remove(\"show\");\r\n}\r\n\r\nlet counter = 830;\r\nfunction registrarSolicitud(){\r\n  const ciudadano = document.getElementById(\"fCiudadano\").value.trim();\r\n  const doc = document.getElementById(\"fDoc\").value.trim();\r\n  if(!ciudadano || !doc){ alert(\"Completa el nombre y el documento del administrado.\"); return; }\r\n\r\n  const tramiteIdx = parseInt(fTramite.value);\r\n  const t = catalogoTupa[tramiteIdx];\r\n  const code = \"TUPA-2026-\" + String(counter++);\r\n  const registroDate = today;\r\n  const venceDate = new Date(today);\r\n  venceDate.setDate(venceDate.getDate() + t.plazoDias);\r\n  const venceStr = venceDate.toISOString().split(\"T\")[0];\r\n\r\n  solicitudes.unshift({\r\n    code, tramiteIdx, ciudadano, doc,\r\n    registro: today.toISOString().split(\"T\")[0],\r\n    vence: venceStr, status: \"tramite\"\r\n  });\r\n\r\n  document.getElementById(\"fCiudadano\").value = \"\";\r\n  document.getElementById(\"fDoc\").value = \"\";\r\n  document.getElementById(\"formPanel\").classList.remove(\"open\");\r\n\r\n  document.getElementById(\"confirmCode\").textContent = code;\r\n  document.getElementById(\"confirmDate\").textContent = shortDate(venceStr);\r\n  document.getElementById(\"confirmPanel\").classList.add(\"show\");\r\n\r\n  renderTable();\r\n}\r\n\r\nrenderTable();\r\n<\/script>\r\n<\/body>\r\n<div style=\"display:flex;justify-content:center;margin:32px 0 85px;\">\r\n  <a href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/1-inicio-tablero-general\/\"\r\n     style=\"display:inline-flex;align-items:center;gap:10px;padding:14px 24px;background:#0d3b4c;color:#fff;text-decoration:none;border-radius:9px;font-weight:700;font-family:Arial,sans-serif;box-shadow:0 4px 12px rgba(0,0,0,.18);\">\r\n    <span style=\"font-size:22px;\">\u2190<\/span>\r\n    <span>REGRESAR AL INICIO<\/span>\r\n  <\/a>\r\n<\/div>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>N\u00facleo \u2014 Atenci\u00f3n Ciudadana (TUPA) 01 Tablero General 02 Atenci\u00f3n Ciudadana 03 Asistente Interno (IA) 04 Gesti\u00f3n por Resultados 05 Planeamiento y Presupuesto 06 Auditor\u00eda y Control 07 Informes y Rendici\u00f3n 08 Configuraci\u00f3n 09 Ayuda y Soporte N\u00daCLEOGesti\u00f3n por Resultados con IA Atenci\u00f3n Ciudadana Tr\u00e1mites TUPA Registro, seguimiento y plazos legales de cada procedimiento administrativo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":638,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-873","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/comments?post=873"}],"version-history":[{"count":25,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/873\/revisions"}],"predecessor-version":[{"id":2057,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/873\/revisions\/2057"}],"up":[{"embeddable":true,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/638"}],"wp:attachment":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/media?parent=873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}