Compare commits

..

5 Commits

Author SHA1 Message Date
JohannVelazquez a2104f2a63 Prototipo: "Edo. cuenta" abre modal en vez de panel inline/toast
Antes solo la fila de ACUNTIA abría un panel embebido en la página; las
otras tres mostraban un toast aclarando que era demo. Ahora las 4 abren
el mismo modal (backdrop oscuro, cierra con click fuera o Escape),
consistente con el pedido de revisar Cobranza para la reunión de mañana.
2026-07-10 01:22:32 -06:00
JohannVelazquez 6daeeab72d Prototipo: quita la tarjeta "Otra cotización del cliente" (paso 1 del wizard)
Mostraba COT-2026-0448 (mismo cliente, proyecto de Arq. Jorge Salinas) como
alternativa seleccionable, sin indicar que pertenece a otro ticket
(FAC-0868, ya facturado) — confuso, riesgo de elegir la cotización
equivocada. El paso 1 ahora solo confirma la cotización vinculada al
ticket; se quita pickQuote() por quedar sin uso.
2026-07-10 01:05:30 -06:00
JohannVelazquez 4dca2ecc7c Prototipo: quita "Por aprobar y emitir" del sidebar (redundante)
Era equivalente a activar el filtro "Listos para facturar" en Solicitudes
(Jira) — mismos 3 tickets, sin aportar nada nuevo. El wizard de emisión
sigue accesible desde el detalle de una solicitud ("Iniciar facturación").
2026-07-10 00:58:52 -06:00
JohannVelazquez 365c99acb6 Prototipo: bandeja real para "Por aprobar y emitir"
Antes el ítem del sidebar abría directo el wizard hardcodeado de FAC-0876,
igual que "Iniciar facturación" desde la solicitud — dos accesos al mismo
destino sin explicar el badge de "3". Ahora tiene su propia bandeja con los
3 tickets "listos para facturar" (mismo criterio que el filtro en
Solicitudes); solo FAC-0876 abre el wizard completo, los otros dos
muestran un toast que deja claro que es demo. Cancelar en el paso 1 regresa
a esta bandeja en vez de saltar a Solicitudes.
2026-07-10 00:55:06 -06:00
JohannVelazquez b358570443 Prototipo Etapa 0: pulido de UI (agente de diseño) + capturas de referencia
Ajustes visuales al wizard de emisión, sidebar con logo oficial, dashboard
y componentes de dinero/atención. Se agregan capturas de cada vista en
prototipo/capturas/ para revisión de diseño.
2026-07-10 00:44:23 -06:00
10 changed files with 372 additions and 93 deletions
+370 -91
View File
@@ -43,7 +43,7 @@
*{box-sizing:border-box} *{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--crema)} html,body{margin:0;padding:0;background:var(--crema)}
body{font-family:"Poppins",system-ui,sans-serif;color:var(--ink);font-size:13.5px;line-height:1.55;padding-top:var(--banner-h);min-width:1366px} body{font-family:"Poppins",system-ui,sans-serif;color:var(--ink);font-size:13.5px;line-height:1.55;padding-top:var(--banner-h)}
::selection{background:var(--amarillo);color:var(--cafe)} ::selection{background:var(--amarillo);color:var(--cafe)}
/* ============ Banner fijo de prototipo ============ */ /* ============ Banner fijo de prototipo ============ */
@@ -66,14 +66,11 @@
color:#D9CDBB;display:flex;flex-direction:column;padding:26px 16px 18px; color:#D9CDBB;display:flex;flex-direction:column;padding:26px 16px 18px;
position:sticky;top:var(--banner-h);height:calc(100vh - var(--banner-h)); position:sticky;top:var(--banner-h);height:calc(100vh - var(--banner-h));
} }
.brand{display:flex;align-items:center;gap:12px;padding:0 10px 22px;border-bottom:1px solid rgba(247,189,12,.16);margin-bottom:14px} .brand{display:flex;align-items:center;gap:10px;padding:0 8px 14px;border-bottom:1px solid rgba(247,189,12,.16);margin-bottom:10px}
.logo-mark{ .logo-mark{
width:42px;height:42px;border-radius:11px;background:var(--amarillo);color:var(--cafe); width:198px;max-width:100%;display:flex;align-items:center;flex:none;
display:grid;place-items:center;font-weight:800;font-size:21px;letter-spacing:-.02em;flex:none;
box-shadow:0 2px 10px rgba(247,189,12,.35);
} }
.brand-name{color:var(--amarillo);font-weight:700;font-size:19px;letter-spacing:.14em;line-height:1.1} .logo-mark img{display:block;width:100%;height:auto}
.brand-sub{color:rgba(255,255,255,.55);font-size:8.5px;letter-spacing:.24em;text-transform:uppercase;font-weight:500}
.nav-label{color:rgba(217,205,187,.45);font-size:10px;letter-spacing:.18em;text-transform:uppercase;padding:14px 12px 7px;font-weight:600} .nav-label{color:rgba(217,205,187,.45);font-size:10px;letter-spacing:.18em;text-transform:uppercase;padding:14px 12px 7px;font-weight:600}
.nav-item{ .nav-item{
@@ -117,20 +114,31 @@
background:var(--crema-2);border:1px solid var(--linea);padding:5px 11px;border-radius:999px;font-weight:500; background:var(--crema-2);border:1px solid var(--linea);padding:5px 11px;border-radius:999px;font-weight:500;
} }
.pill b{color:var(--ink);font-weight:600} .pill b{color:var(--ink);font-weight:600}
.sync-context{
display:inline-flex;align-items:center;gap:8px;padding:6px 11px;border-radius:9px;
color:var(--info-ink);background:var(--info-bg);border:1px solid #BCD7EA;
font-size:11px;font-weight:500;line-height:1.35;white-space:nowrap
}
.sync-context .dot{box-shadow:none;width:7px;height:7px}
.sync-context small{display:block;color:var(--info-ink);opacity:.72;font-size:9.5px;font-weight:400}
.content{padding:30px 34px 60px;max-width:1560px} .content{padding:30px 34px 60px;max-width:1560px}
.view{display:none;animation:fadeIn .18s ease} .view{display:none;animation:fadeIn .18s ease}
.view.active{display:block} .view.active{display:block}
@keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}} @keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.view-title{font-size:23px;font-weight:600;letter-spacing:-.01em;margin:0 0 3px} .view-title{font-size:23px;font-weight:600;letter-spacing:-.01em;margin:0 0 3px}
.view-sub{color:var(--muted);margin:0 0 26px;font-size:13px;font-weight:300;max-width:880px} .view-sub{color:var(--muted);margin:0 0 16px;font-size:12.5px;font-weight:400;max-width:920px}
.view-sub b{font-weight:500;color:var(--ink)} .view-sub b{font-weight:500;color:var(--ink)}
/* ============ Componentes base ============ */ /* ============ Componentes base ============ */
.card{background:var(--blanco);border:1px solid var(--linea);border-radius:var(--radius);box-shadow:var(--shadow)} .card{background:var(--blanco);border:1px solid var(--linea);border-radius:var(--radius);box-shadow:var(--shadow)}
.card-pad{padding:22px 24px} .card-pad{padding:22px 24px}
.card-title{font-size:14px;font-weight:600;margin:0 0 2px} .card-title{font-size:14px;font-weight:600;margin:0 0 2px}
.card-sub{font-size:11.5px;color:var(--muted);font-weight:300;margin:0 0 14px} .card-sub{font-size:11px;color:var(--muted);font-weight:400;margin:0 0 10px}
/* Modal */
.modal-backdrop{position:fixed;inset:0;background:rgba(51,31,14,.42);z-index:200;display:flex;align-items:center;justify-content:center;padding:30px}
.modal-box{background:var(--blanco);border-radius:var(--radius);box-shadow:var(--shadow-lg);max-width:760px;width:100%;max-height:88vh;overflow:auto}
.btn{ .btn{
display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:10px; display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:10px;
@@ -207,6 +215,12 @@
.kpi-meta{font-size:11.5px;color:var(--muted);margin-top:7px;font-weight:300} .kpi-meta{font-size:11.5px;color:var(--muted);margin-top:7px;font-weight:300}
.kpi-meta .up{color:var(--ok-ink);font-weight:500} .kpi-meta .up{color:var(--ok-ink);font-weight:500}
.kpi-meta .down{color:var(--bad-ink);font-weight:500} .kpi-meta .down{color:var(--bad-ink);font-weight:500}
.money-split{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:3px}
.money-line{border-left:3px solid var(--linea-2);padding-left:10px}
.money-line:first-child{border-left-color:var(--bad)}
.money-line:last-child{border-left-color:var(--info)}
.money-line b{display:block;font-size:20px;line-height:1.25;font-variant-numeric:tabular-nums}
.money-line small{font-size:10px;color:var(--muted);font-weight:600;letter-spacing:.06em}
/* Gráficas simples */ /* Gráficas simples */
.bars{display:flex;align-items:flex-end;gap:26px;height:190px;padding:8px 6px 0} .bars{display:flex;align-items:flex-end;gap:26px;height:190px;padding:8px 6px 0}
@@ -225,7 +239,7 @@
.hbar-n{color:var(--muted);font-size:11.5px;text-align:right;font-variant-numeric:tabular-nums} .hbar-n{color:var(--muted);font-size:11.5px;text-align:right;font-variant-numeric:tabular-nums}
/* Lista requiere atención */ /* Lista requiere atención */
.att-item{display:flex;align-items:center;gap:13px;padding:12px 6px;border-bottom:1px solid var(--linea);cursor:pointer;border-radius:8px;transition:background .12s} .att-item{display:grid;grid-template-columns:auto minmax(0,1fr) 190px auto;align-items:center;gap:13px;padding:12px 6px;border-bottom:1px solid var(--linea);cursor:pointer;border-radius:8px;transition:background .12s}
.att-item:hover{background:var(--crema)} .att-item:hover{background:var(--crema)}
.att-item:last-child{border-bottom:none} .att-item:last-child{border-bottom:none}
.sev{width:9px;height:9px;border-radius:50%;flex:none} .sev{width:9px;height:9px;border-radius:50%;flex:none}
@@ -234,6 +248,12 @@
.att-txt b{font-weight:600} .att-txt b{font-weight:600}
.att-txt .att-sub{display:block;font-size:11px;color:var(--muted);font-weight:300} .att-txt .att-sub{display:block;font-size:11px;color:var(--muted);font-weight:300}
.att-go{color:var(--muted-2);font-size:15px} .att-go{color:var(--muted-2);font-size:15px}
.att-meta{display:grid;grid-template-columns:1fr 1fr;gap:10px;font-size:10.5px;color:var(--muted)}
.att-meta span{display:block}
.att-meta b{display:block;color:var(--ink);font-size:11px;font-weight:600}
#view-dashboard.active{display:flex;flex-direction:column}
.dashboard-attention{order:1}
.dashboard-charts{order:2}
/* Filtros chips */ /* Filtros chips */
.filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:16px} .filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:16px}
@@ -332,6 +352,13 @@
.check-ico svg{width:12px;height:12px} .check-ico svg{width:12px;height:12px}
.check-row b{font-weight:600} .check-row b{font-weight:600}
.check-row .cr-sub{color:var(--muted);font-size:11px;font-weight:300;display:block} .check-row .cr-sub{color:var(--muted);font-size:11px;font-weight:300;display:block}
.approval-gate{border:1.5px solid var(--warn-line);background:#FFFDF6}
.approval-status{display:flex;align-items:flex-start;gap:10px;padding:11px 0;border-bottom:1px solid var(--linea)}
.approval-status:last-child{border-bottom:none}
.approval-status .state-dot{width:9px;height:9px;border-radius:50%;background:var(--warn);margin-top:5px;flex:none}
.approval-status.ok .state-dot{background:var(--ok)}
.approval-status span{font-size:12px}
.approval-status small{display:block;color:var(--muted);font-size:10.5px;margin-top:2px}
/* Éxito */ /* Éxito */
.success-wrap{max-width:660px;margin:30px auto;text-align:center} .success-wrap{max-width:660px;margin:30px auto;text-align:center}
@@ -375,6 +402,18 @@
.aging-cell.warm .aging-val{color:var(--warn-ink)} .aging-cell.warm .aging-val{color:var(--warn-ink)}
.aging-total{background:var(--crema);border-left:1px solid var(--linea-2)} .aging-total{background:var(--crema);border-left:1px solid var(--linea-2)}
/* Cobranza · pagos detectados y reglas de recordatorio */
.sync-chip{display:inline-flex;align-items:center;gap:7px;font-size:11px;font-weight:600;color:var(--ok-ink);background:var(--ok-bg);border-radius:99px;padding:4px 12px;white-space:nowrap}
.sync-chip::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--ok);animation:syncPulse 2s infinite}
@keyframes syncPulse{0%,100%{opacity:1}50%{opacity:.35}}
.regla{display:flex;align-items:center;gap:12px;padding:11px 2px;border-bottom:1px solid var(--linea)}
.regla:last-child{border-bottom:none}
.regla-d{font-weight:700;font-size:11.5px;min-width:46px;text-align:center;background:var(--crema);border:1px solid var(--linea-2);border-radius:8px;padding:6px 4px;flex:none;font-variant-numeric:tabular-nums}
.regla-txt{flex:1;font-size:12.5px;line-height:1.45}
.regla-txt small{display:block;font-size:11px;color:var(--muted);font-weight:300}
.regla .chip{flex:none}
.regla.off{opacity:.55}
.empty-state{text-align:center;padding:38px 20px;color:var(--muted)} .empty-state{text-align:center;padding:38px 20px;color:var(--muted)}
.empty-state .es-ico{width:52px;height:52px;border-radius:50%;background:var(--ok-bg);color:var(--ok);display:grid;place-items:center;margin:0 auto 12px} .empty-state .es-ico{width:52px;height:52px;border-radius:50%;background:var(--ok-bg);color:var(--ok);display:grid;place-items:center;margin:0 auto 12px}
.empty-state .es-ico svg{width:24px;height:24px} .empty-state .es-ico svg{width:24px;height:24px}
@@ -396,6 +435,66 @@
.mb8{margin-bottom:8px}.mb12{margin-bottom:12px}.mb16{margin-bottom:16px}.mb20{margin-bottom:20px}.mb24{margin-bottom:24px} .mb8{margin-bottom:8px}.mb12{margin-bottom:12px}.mb16{margin-bottom:16px}.mb20{margin-bottom:20px}.mb24{margin-bottom:24px}
.flex{display:flex;align-items:center;gap:10px} .flex{display:flex;align-items:center;gap:10px}
.spread{display:flex;align-items:center;justify-content:space-between;gap:14px} .spread{display:flex;align-items:center;justify-content:space-between;gap:14px}
/* ============ Adaptación progresiva ============ */
@media (max-width:1200px){
.app{grid-template-columns:220px 1fr}
.content{padding:24px 24px 50px}
.grid4{grid-template-columns:repeat(2,1fr)}
.aging-card{min-width:980px}
.card:has(.aging-card){overflow-x:auto!important}
.topbar{padding-inline:24px}
}
@media (max-width:900px){
body{font-size:13px}
.app{display:block}
.sidebar{position:static;height:auto;padding:14px;display:flex;flex-direction:row;flex-wrap:wrap;gap:5px;align-items:center}
.brand{width:100%;padding:0 4px 12px;margin-bottom:5px}
.logo-mark{width:180px}
.nav-label{display:none}
.nav-item{padding:8px 10px;margin:0;font-size:11.5px}
.nav-item svg{width:15px;height:15px}
.bind-status{margin:7px 0 0;width:100%}
.user-chip{display:none}
.topbar{position:static;padding:10px 16px;align-items:flex-start;flex-wrap:wrap}
.crumbs>span:first-child,.top-right>.pill:last-child{display:none}
.top-right{margin-left:auto;flex-wrap:wrap;justify-content:flex-end}
.content{padding:20px 16px 42px}
.view-title{font-size:20px}
.grid2,.grid3,.grid4,.send-layout,.pay-opt{grid-template-columns:1fr;display:grid}
.content [style*="grid-template-columns"]{grid-template-columns:1fr!important}
.dashboard-charts>*{min-width:0}
.bars{gap:10px}
.bar-val{font-size:9px}
.stepper{overflow-x:auto}
.step{min-width:175px}
.ticket-ribbon{flex-wrap:wrap}
.ticket-ribbon .sep{display:none}
.ticket-ribbon [style*="margin-left:auto"]{margin-left:0!important}
.att-item{grid-template-columns:auto minmax(0,1fr) auto}
.att-meta{grid-column:2;grid-row:2;grid-template-columns:auto auto;justify-content:start}
.att-go{grid-column:3;grid-row:1/3}
.filters{align-items:stretch}
.search-box{margin-left:0;width:100%}
.search-box input{width:100%}
.tbl{min-width:760px}
.card:has(.tbl){overflow-x:auto!important}
.doc{padding:22px 20px}
.wiz-foot{align-items:stretch;flex-direction:column}
.wiz-foot>.flex{flex-wrap:wrap}
}
@media (max-width:560px){
.grid4{grid-template-columns:1fr}
.proto-banner{font-size:10px;padding:0 10px;text-align:center}
.nav-item{flex:1 1 46%}
.nav-num{display:none}
.top-right{width:100%;margin-left:0;justify-content:flex-start}
.top-right>.pill{display:none}
.sync-context{width:100%;white-space:normal}
.money-split{grid-template-columns:1fr}
.dl{grid-template-columns:1fr}
.card-pad{padding:18px}
}
</style> </style>
</head> </head>
<body> <body>
@@ -411,44 +510,49 @@
<!-- ================= Sidebar ================= --> <!-- ================= Sidebar ================= -->
<aside class="sidebar"> <aside class="sidebar">
<div class="brand"> <div class="brand">
<div class="logo-mark">B</div> <div class="logo-mark">
<div> <img src="logo-balam-oficial.png" alt="Balam Talento Estratégico">
<div class="brand-name">BALAM</div>
<div class="brand-sub">Talento Estratégico</div>
</div> </div>
</div> </div>
<div class="nav-label">Operación</div> <div class="nav-label" style="padding-top:2px">General</div>
<div class="nav-item active" data-view="dashboard"> <div class="nav-item active" data-view="dashboard">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><rect x="3" y="3" width="7.5" height="7.5" rx="1.5"/><rect x="13.5" y="3" width="7.5" height="7.5" rx="1.5"/><rect x="3" y="13.5" width="7.5" height="7.5" rx="1.5"/><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="1.5"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><rect x="3" y="3" width="7.5" height="7.5" rx="1.5"/><rect x="13.5" y="3" width="7.5" height="7.5" rx="1.5"/><rect x="3" y="13.5" width="7.5" height="7.5" rx="1.5"/><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="1.5"/></svg>
Dashboard Dashboard
</div> </div>
<div class="nav-label">Facturación</div>
<div class="nav-item" data-view="solicitudes"> <div class="nav-item" data-view="solicitudes">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M3 7.5 12 3l9 4.5v9L12 21l-9-4.5v-9Z"/><path d="M3 7.5 12 12m0 0 9-4.5M12 12v9"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M3 7.5 12 3l9 4.5v9L12 21l-9-4.5v-9Z"/><path d="M3 7.5 12 12m0 0 9-4.5M12 12v9"/></svg>
Solicitudes (Jira) Solicitudes (Jira)
<span class="nav-num">8</span> <span class="nav-num">8</span>
</div> </div>
<div class="nav-item" data-view="emision">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9l-6-6Z"/><path d="M14 3v6h6M9 14l2 2 4-4"/></svg>
Emisión asistida
</div>
<div class="nav-item" data-view="envio"> <div class="nav-item" data-view="envio">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="m22 2-11 11M22 2 15 22l-4-9-9-4 20-7Z"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="m22 2-11 11M22 2 15 22l-4-9-9-4 20-7Z"/></svg>
Envío al cliente Envío al cliente
<span class="nav-num">4</span> <span class="nav-num">4</span>
</div> </div>
<div class="nav-label">Cobranza</div>
<div class="nav-item" data-view="cobranza"> <div class="nav-item" data-view="cobranza">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2.5"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2.5"/></svg>
Cobranza Cuentas por cobrar
<span class="nav-num">6</span>
</div> </div>
<div class="nav-item" data-view="pagos">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M18 8a6 6 0 1 0-12 0c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.7 21a2 2 0 0 1-3.4 0"/></svg>
Pagos y recordatorios
</div>
<div class="nav-label">Trazabilidad</div>
<div class="nav-item" data-view="bitacora"> <div class="nav-item" data-view="bitacora">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M8 6h13M8 12h13M8 18h13M3.5 6h.01M3.5 12h.01M3.5 18h.01"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M8 6h13M8 12h13M8 18h13M3.5 6h.01M3.5 12h.01M3.5 18h.01"/></svg>
Bitácora Bitácora
</div> </div>
<div class="bind-status"> <div class="bind-status">
<div class="row1"><span class="dot"></span> BIND ERP · conectado</div> <div class="row1"><span class="dot"></span> BIND ERP · operativo</div>
<div class="meta">Última sincronización: hoy 12:42 · 1,240 / 20,000 llamadas</div> <div class="meta">Corte de datos: hoy 09:47 · próxima lectura aprox. 10:02<br>1,240 / 20,000 llamadas</div>
</div> </div>
<div class="user-chip"> <div class="user-chip">
@@ -469,8 +573,9 @@
<span class="current" id="crumb">Dashboard</span> <span class="current" id="crumb">Dashboard</span>
</div> </div>
<div class="top-right"> <div class="top-right">
<span class="pill">TC DOF <b>$18.7342</b> MXN/USD · 06 jul 2026</span> <span class="sync-context"><span class="dot"></span><span><b>BIND actualizado hace 4 min</b><small>Corte 09:47 · próxima lectura aprox. 10:02</small></span></span>
<span class="pill">Lunes, 6 de julio de 2026</span> <span class="pill">TC DOF <b>$18.7342</b> MXN/USD · 08 jul 2026</span>
<span class="pill">Miércoles, 8 de julio de 2026</span>
</div> </div>
</div> </div>
@@ -481,7 +586,7 @@
============================================================ --> ============================================================ -->
<section class="view active" id="view-dashboard"> <section class="view active" id="view-dashboard">
<h1 class="view-title">Panel de control — Julio 2026</h1> <h1 class="view-title">Panel de control — Julio 2026</h1>
<p class="view-sub">Resumen del mes al <b>lunes 6 de julio</b>. Cifras leídas de BIND ERP; montos por moneda <b>sin mezclar</b> (MXN y USD se reportan por separado).</p> <p class="view-sub">Corte 8 jul · BIND ERP · importes separados por moneda.</p>
<div class="grid4 mb20"> <div class="grid4 mb20">
<div class="kpi"> <div class="kpi">
@@ -499,19 +604,22 @@
<div class="kpi-value">14 <small>/ ~55 del mes</small></div> <div class="kpi-value">14 <small>/ ~55 del mes</small></div>
<div class="kpi-meta">5 en proceso · 36 esperadas (recurrencias + tickets)</div> <div class="kpi-meta">5 en proceso · 36 esperadas (recurrencias + tickets)</div>
</div> </div>
<div class="kpi k-bad"> <div class="kpi k-bad" onclick="show('cobranza')" style="cursor:pointer">
<div class="kpi-label">Cartera vencida</div> <div class="kpi-label">Cartera vencida</div>
<div class="kpi-value">$444,660 <small>MXN</small></div> <div class="money-split">
<div class="kpi-meta">+ $11,750 USD · 5 facturas vencidas</div> <div class="money-line"><small>MXN</small><b>$444,660</b></div>
<div class="money-line"><small>USD</small><b>$11,750</b></div>
</div>
<div class="kpi-meta">6 facturas vencidas · importes sin conversión · ver aging </div>
</div> </div>
</div> </div>
<div style="display:grid;grid-template-columns:1.5fr 1fr;gap:20px" class="mb20"> <div style="display:grid;grid-template-columns:1.5fr 1fr;gap:20px" class="mb20 dashboard-charts">
<div class="card card-pad"> <div class="card card-pad">
<div class="spread mb12"> <div class="spread mb12">
<div> <div>
<h3 class="card-title">Facturación mensual · MXN</h3> <h3 class="card-title">Facturación mensual · MXN</h3>
<p class="card-sub" style="margin-bottom:0">Últimos 6 meses · julio en curso (al día 6)</p> <p class="card-sub" style="margin-bottom:0">Últimos 6 meses · julio en curso</p>
</div> </div>
<span class="chip chip-neutral">Fuente: BIND ERP</span> <span class="chip chip-neutral">Fuente: BIND ERP</span>
</div> </div>
@@ -527,7 +635,7 @@
<div class="card card-pad"> <div class="card card-pad">
<h3 class="card-title">Facturas por cliente · junio</h3> <h3 class="card-title">Facturas por cliente · junio</h3>
<p class="card-sub">54 facturas emitidas — el mayor exige <b>una factura por colaborador</b></p> <p class="card-sub">54 emitidas · CEMEX factura por colaborador</p>
<div class="hbar-row"><span><b>CEMEX</b></span><div class="hbar-track"><div class="hbar-fill am" style="width:100%"></div></div><span class="hbar-n">38 fact.</span></div> <div class="hbar-row"><span><b>CEMEX</b></span><div class="hbar-track"><div class="hbar-fill am" style="width:100%"></div></div><span class="hbar-n">38 fact.</span></div>
<div class="hbar-row"><span>ACUNTIA</span><div class="hbar-track"><div class="hbar-fill" style="width:18%"></div></div><span class="hbar-n">7 fact.</span></div> <div class="hbar-row"><span>ACUNTIA</span><div class="hbar-track"><div class="hbar-fill" style="width:18%"></div></div><span class="hbar-n">7 fact.</span></div>
<div class="hbar-row"><span>Axie</span><div class="hbar-track"><div class="hbar-fill" style="width:11%"></div></div><span class="hbar-n">4 fact.</span></div> <div class="hbar-row"><span>Axie</span><div class="hbar-track"><div class="hbar-fill" style="width:11%"></div></div><span class="hbar-n">4 fact.</span></div>
@@ -537,39 +645,47 @@
</div> </div>
</div> </div>
<div class="card card-pad"> <div class="card card-pad dashboard-attention mb20">
<div class="spread mb8"> <div class="spread mb8">
<h3 class="card-title">Requiere atención</h3> <div>
<h3 class="card-title">Qué necesita atención</h3>
<p class="card-sub" style="margin:2px 0 0">Prioridad, responsable y antigüedad.</p>
</div>
<span class="chip chip-warn"><span class="cdot"></span>5 pendientes</span> <span class="chip chip-warn"><span class="cdot"></span>5 pendientes</span>
</div> </div>
<div class="att-item" onclick="show('solicitudes')"> <div class="att-item" onclick="show('solicitudes')">
<span class="sev sev-bad"></span> <span class="sev sev-bad"></span>
<span class="att-txt"><b>FAC-0873 · Axie</b> — bloqueado: falta la <b>cotización BIND</b> (obligatoria para iniciar facturación). <span class="att-txt"><b>FAC-0873 · Axie</b> — bloqueado: falta la <b>cotización BIND</b> (obligatoria para iniciar facturación).
<span class="att-sub">Solicitarla al área comercial antes de convertir a prefactura.</span></span> <span class="att-sub">Solicitarla al área comercial antes de convertir a prefactura.</span></span>
<span class="att-meta"><span>Responsable<b>Araceli</b></span><span>Antigüedad<b>Hoy</b></span></span>
<span class="att-go"></span> <span class="att-go"></span>
</div> </div>
<div class="att-item" onclick="show('cobranza')"> <div class="att-item" onclick="show('cobranza')">
<span class="sev sev-bad"></span> <span class="sev sev-bad"></span>
<span class="att-txt"><b>F-2026-0019 · ACUNTIA</b> — factura de <b>febrero</b> con 114 días vencida ($86,200 MXN). <span class="att-txt"><b>F-2026-0019 · ACUNTIA</b> — factura de <b>febrero</b> con 114 días vencida ($86,200 MXN).
<span class="att-sub">Cliente puntual sin seguimiento a tiempo — alerta interna escalada a administración.</span></span> <span class="att-sub">Cliente puntual sin seguimiento a tiempo — alerta interna escalada a administración.</span></span>
<span class="att-meta"><span>Responsable<b>Dirección</b></span><span>Antigüedad<b>114 días</b></span></span>
<span class="att-go"></span> <span class="att-go"></span>
</div> </div>
<div class="att-item" onclick="show('emision')"> <div class="att-item" onclick="show('emision')">
<span class="sev sev-warn"></span> <span class="sev sev-warn"></span>
<span class="att-txt"><b>3 prefacturas en simulación</b> esperan validación humana antes de emitir CFDI. <span class="att-txt"><b>3 prefacturas en simulación</b> esperan aprobación humana antes de habilitar el timbrado.
<span class="att-sub">Nada se timbra sin confirmación del aprobador.</span></span> <span class="att-sub">Aprobar y timbrar son acciones separadas; cada aprobación queda ligada a una versión.</span></span>
<span class="att-meta"><span>Responsable<b>Arturo</b></span><span>Antigüedad<b>38 min</b></span></span>
<span class="att-go"></span> <span class="att-go"></span>
</div> </div>
<div class="att-item" onclick="show('solicitudes')"> <div class="att-item" onclick="show('solicitudes')">
<span class="sev sev-warn"></span> <span class="sev sev-warn"></span>
<span class="att-txt"><b>FAC-0871 · Nuova Textil</b> — cliente nuevo <b>sin cédula de identificación fiscal</b> adjunta. <span class="att-txt"><b>FAC-0871 · Nuova Textil</b> — cliente nuevo <b>sin cédula de identificación fiscal</b> adjunta.
<span class="att-sub">El alta del cliente en BIND la realiza administración antes de poder cotizar.</span></span> <span class="att-sub">El alta del cliente en BIND la realiza administración antes de poder cotizar.</span></span>
<span class="att-meta"><span>Responsable<b>Arturo</b></span><span>Antigüedad<b>Desde ayer</b></span></span>
<span class="att-go"></span> <span class="att-go"></span>
</div> </div>
<div class="att-item" onclick="show('envio')"> <div class="att-item" onclick="show('envio')">
<span class="sev sev-info"></span> <span class="sev sev-info"></span>
<span class="att-txt"><b>4 facturas emitidas sin enviar</b> — la facturación termina hasta que el correo sale con los adjuntos correctos. <span class="att-txt"><b>4 facturas emitidas sin enviar</b> — la facturación termina hasta que el correo sale con los adjuntos correctos.
<span class="att-sub">CEMEX requiere Excel de horas con VoBo + nomenclatura de asunto.</span></span> <span class="att-sub">CEMEX requiere Excel de horas con VoBo + nomenclatura de asunto.</span></span>
<span class="att-meta"><span>Responsable<b>Arturo</b></span><span>Antigüedad<b>Desde ayer</b></span></span>
<span class="att-go"></span> <span class="att-go"></span>
</div> </div>
</div> </div>
@@ -583,7 +699,7 @@
<!-- Bandeja --> <!-- Bandeja -->
<div id="sol-lista"> <div id="sol-lista">
<h1 class="view-title">Solicitudes de facturación — Jira ITSM</h1> <h1 class="view-title">Solicitudes de facturación — Jira ITSM</h1>
<p class="view-sub">Bandeja sincronizada del portal <b>Administración General → Facturación</b>. Regla vigente: <b>si no hay ticket en Jira, no se factura</b>. Todos los tickets se asignan a Arturo (administración hace doble check de datos, cédula fiscal y estado de cuenta).</p> <p class="view-sub">Tickets de Jira asignados a Arturo · <b>sin ticket, no se factura</b>.</p>
<div class="filters"> <div class="filters">
<button class="fchip on">Todos (8)</button> <button class="fchip on">Todos (8)</button>
@@ -698,7 +814,7 @@
<div class="spread mb16"> <div class="spread mb16">
<div> <div>
<h1 class="view-title">FAC-0876 · CEMEX — Staff augmentation</h1> <h1 class="view-title">FAC-0876 · CEMEX — Staff augmentation</h1>
<p class="view-sub" style="margin-bottom:0">Levantado por <b>Araceli Sánchez</b> (comercial) · 03 jul 2026, 10:22 · Asignado a <b>Arturo R.</b> · Empresa origen: <b>Balam</b></p> <p class="view-sub" style="margin-bottom:0">Araceli Sánchez · 03 jul, 10:22 · Responsable: <b>Arturo R.</b></p>
</div> </div>
<span class="chip chip-ok" style="font-size:12px;padding:5px 14px"><span class="cdot"></span>Listo para facturar</span> <span class="chip chip-ok" style="font-size:12px;padding:5px 14px"><span class="cdot"></span>Listo para facturar</span>
</div> </div>
@@ -745,8 +861,8 @@
============================================================ --> ============================================================ -->
<section class="view" id="view-emision"> <section class="view" id="view-emision">
<div id="wiz-main"> <div id="wiz-main">
<h1 class="view-title">Emisión asistida de CFDI</h1> <h1 class="view-title">Preparación, aprobación y emisión de CFDI</h1>
<p class="view-sub">Flujo validado en Discovery (6-jul): <b>cotización BIND → prefactura → validación humana → CFDI</b>. Nada se timbra sin confirmación explícita del aprobador.</p> <p class="view-sub"><b>Cotización BIND → prefactura → aprobación humana → CFDI.</b> Aprobar no timbra.</p>
<div class="ticket-ribbon"> <div class="ticket-ribbon">
<span class="tkid">FAC-0876</span> <span class="tkid">FAC-0876</span>
@@ -761,17 +877,17 @@
<div class="step" id="st-2"><span class="step-n">2</span><span class="step-t"><b>Datos de factura</b><small>CFDI · PPD/PUE · TC DOF</small></span></div> <div class="step" id="st-2"><span class="step-n">2</span><span class="step-t"><b>Datos de factura</b><small>CFDI · PPD/PUE · TC DOF</small></span></div>
<div class="step" id="st-3"><span class="step-n">3</span><span class="step-t"><b>Conceptos e IVA</b><small>regla 16% / 0%</small></span></div> <div class="step" id="st-3"><span class="step-n">3</span><span class="step-t"><b>Conceptos e IVA</b><small>regla 16% / 0%</small></span></div>
<div class="step" id="st-4"><span class="step-n">4</span><span class="step-t"><b>Prefactura</b><small>simulación, sin timbrar</small></span></div> <div class="step" id="st-4"><span class="step-n">4</span><span class="step-t"><b>Prefactura</b><small>simulación, sin timbrar</small></span></div>
<div class="step" id="st-5"><span class="step-n">5</span><span class="step-t"><b>Validación y emisión</b><small>timbra el PAC de BIND</small></span></div> <div class="step" id="st-5"><span class="step-n">5</span><span class="step-t"><b>Aprobación humana</b><small>habilita la emisión; no timbra</small></span></div>
</div> </div>
<!-- Paso 1 --> <!-- Paso 1 -->
<div class="wiz-pane active" id="wp-1"> <div class="wiz-pane active" id="wp-1">
<div class="card card-pad"> <div class="card card-pad">
<h3 class="card-title">Paso 1 · Selecciona la cotización de BIND</h3> <h3 class="card-title">Paso 1 · Confirma la cotización de BIND</h3>
<p class="card-sub">Regla de negocio (Discovery 6-jul, definida por Araceli): <b>toda factura parte de una cotización registrada en BIND</b>. La conversión a prefactura es de un clic, sin volver a capturar.</p> <p class="card-sub"><b>Toda factura parte de una cotización BIND.</b></p>
<div class="grid2 mt12"> <div class="mt12" style="max-width:420px">
<div class="quote-card sel" onclick="pickQuote(this)"> <div class="quote-card sel">
<span class="radio"></span> <span class="radio"></span>
<div class="chip chip-ok mb8">Vinculada al ticket</div> <div class="chip chip-ok mb8">Vinculada al ticket</div>
<div style="font-weight:600;font-size:14px">COT-2026-0455</div> <div style="font-weight:600;font-size:14px">COT-2026-0455</div>
@@ -781,16 +897,6 @@
<span class="chip chip-neutral">Vigente · 28 jun 2026</span> <span class="chip chip-neutral">Vigente · 28 jun 2026</span>
</div> </div>
</div> </div>
<div class="quote-card" onclick="pickQuote(this)">
<span class="radio"></span>
<div class="chip chip-neutral mb8">Otra cotización del cliente</div>
<div style="font-weight:600;font-size:14px">COT-2026-0448</div>
<div style="font-size:12px;color:var(--muted);margin:3px 0 9px">CEMEX · Staff augmentation · Arq. Jorge Salinas · julio 2026</div>
<div class="spread" style="font-size:12.5px">
<span>Subtotal <b>$71,920.00 MXN</b></span>
<span class="chip chip-neutral">Vigente · 26 jun 2026</span>
</div>
</div>
</div> </div>
<div class="alert alert-warn mt16"> <div class="alert alert-warn mt16">
@@ -808,7 +914,7 @@
<div class="wiz-pane" id="wp-2"> <div class="wiz-pane" id="wp-2">
<div class="card card-pad"> <div class="card card-pad">
<h3 class="card-title">Paso 2 · Datos de la factura</h3> <h3 class="card-title">Paso 2 · Datos de la factura</h3>
<p class="card-sub">Precargados desde la cotización y el catálogo del cliente en BIND. Los campos editables quedan registrados en bitácora.</p> <p class="card-sub">Datos de BIND · los cambios quedan en bitácora.</p>
<div class="grid3 mt12"> <div class="grid3 mt12">
<div class="field"><label>Cliente (receptor)</label><input type="text" value="CEMEX, S.A.B. de C.V." readonly><div class="hint">RFC: CMX870506AB1 · precargado de BIND</div></div> <div class="field"><label>Cliente (receptor)</label><input type="text" value="CEMEX, S.A.B. de C.V." readonly><div class="hint">RFC: CMX870506AB1 · precargado de BIND</div></div>
@@ -853,7 +959,7 @@
<div class="wiz-pane" id="wp-3"> <div class="wiz-pane" id="wp-3">
<div class="card card-pad"> <div class="card card-pad">
<h3 class="card-title">Paso 3 · Conceptos e IVA</h3> <h3 class="card-title">Paso 3 · Conceptos e IVA</h3>
<p class="card-sub">Conceptos importados de la cotización. El IVA se asigna <b>automáticamente por regla</b> — en BIND hoy es captura manual y ha causado errores (Discovery 6-jul).</p> <p class="card-sub">Conceptos de la cotización · IVA automático por regla.</p>
<div class="alert alert-ok mb16"> <div class="alert alert-ok mb16">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 6 9 17l-5-5"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 6 9 17l-5-5"/></svg>
@@ -941,7 +1047,7 @@
<button class="btn btn-ghost" onclick="wiz(3)">← Corregir conceptos</button> <button class="btn btn-ghost" onclick="wiz(3)">← Corregir conceptos</button>
<div class="flex"> <div class="flex">
<button class="btn btn-ghost" onclick="toast('Prefactura PRE-2026-0311 guardada. Puede retomarse desde el Dashboard.')">Guardar y validar después</button> <button class="btn btn-ghost" onclick="toast('Prefactura PRE-2026-0311 guardada. Puede retomarse desde el Dashboard.')">Guardar y validar después</button>
<button class="btn btn-primary" onclick="wiz(5)">Pasa el doble check → validación final</button> <button class="btn btn-primary" onclick="wiz(5)">Enviar prefactura v3 a aprobación </button>
</div> </div>
</div> </div>
</div> </div>
@@ -950,36 +1056,41 @@
<div class="wiz-pane" id="wp-5"> <div class="wiz-pane" id="wp-5">
<div class="grid2" style="grid-template-columns:1.2fr 1fr;align-items:start"> <div class="grid2" style="grid-template-columns:1.2fr 1fr;align-items:start">
<div class="card card-pad"> <div class="card card-pad">
<h3 class="card-title">Paso 5 · Validaciones finales</h3> <h3 class="card-title">Paso 5 · Revisión previa a la aprobación</h3>
<p class="card-sub">Todos los candados en verde. La emisión es el único paso irreversible del flujo.</p> <p class="card-sub">La aprobación queda ligada a PRE-2026-0311 v3.</p>
<div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>Cotización BIND vinculada</b><span class="cr-sub">COT-2026-0455 vigente · regla obligatoria del 6-jul</span></span></div> <div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>Cotización BIND vinculada</b><span class="cr-sub">COT-2026-0455 vigente · regla obligatoria del 6-jul</span></span></div>
<div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>Ticket Jira válido y autorizado</b><span class="cr-sub">FAC-0876 · doble check de administración completado</span></span></div> <div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>Ticket Jira válido y autorizado</b><span class="cr-sub">FAC-0876 · doble check de administración completado</span></span></div>
<div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>Método de pago PPD</b><span class="cr-sub">Coherente con 90 días de crédito · sin riesgo de requerimiento SAT</span></span></div> <div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>Método de pago PPD</b><span class="cr-sub">Coherente con 90 días de crédito · sin riesgo de requerimiento SAT</span></span></div>
<div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>IVA 16% por regla fiscal</b><span class="cr-sub">Nacional MXN · sin override manual</span></span></div> <div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>IVA 16% por regla fiscal</b><span class="cr-sub">Nacional MXN · sin override manual</span></span></div>
<div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>Prefactura revisada en simulación</b><span class="cr-sub">PRE-2026-0311 · totales verificados: $79,390.40 MXN</span></span></div> <div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>Prefactura lista para decisión</b><span class="cr-sub">PRE-2026-0311 · versión 3 · total verificado: $79,390.40 MXN</span></span></div>
<div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>Cliente activo en BIND con datos fiscales completos</b><span class="cr-sub">CEMEX · RFC y dirección fiscal precargados</span></span></div> <div class="check-row"><span class="check-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6 9 17l-5-5"/></svg></span><span><b>Cliente activo en BIND con datos fiscales completos</b><span class="cr-sub">CEMEX · RFC y dirección fiscal precargados</span></span></div>
</div> </div>
<div> <div>
<div class="card card-pad mb16"> <div class="card card-pad mb16 approval-gate" id="approval-pending">
<h3 class="card-title mb8">Aprobación humana</h3> <div class="spread mb8">
<h3 class="card-title">Aprobación humana</h3>
<span class="chip chip-warn">Pendiente</span>
</div>
<div class="field mb12"> <div class="field mb12">
<label>Aprobador responsable</label> <label>Aprobador responsable</label>
<select><option selected>Arturo R. — Administración / Facturación</option><option>Araceli Sánchez — Dirección</option></select> <select id="approval-owner"><option selected>Arturo R. — Administración / Facturación</option><option>Araceli Sánchez — Dirección</option></select>
<div class="hint">Queda asentado en la bitácora junto con fecha y hora</div> <div class="hint">La decisión queda asentada con fecha, hora, Jira, folio BIND y versión de prefactura.</div>
</div> </div>
<label style="display:flex;gap:9px;font-size:12px;cursor:pointer;align-items:flex-start"> <div class="approval-status"><span class="state-dot"></span><span><b>PRE-2026-0311 · versión 3</b><small>Cualquier cambio posterior en datos fiscales, conceptos o importes invalidará esta aprobación.</small></span></div>
<input type="checkbox" id="chk-confirm" style="width:16px;height:16px;accent-color:#1E7A46;margin-top:2px" onchange="document.getElementById('btn-emit').disabled=!this.checked"> <button class="btn btn-primary btn-lg mt12" style="width:100%;justify-content:center" onclick="approvePrefactura()">Aprobar prefactura v3</button>
<span>Revisé la prefactura <b>PRE-2026-0311</b> y autorizo la emisión del CFDI.</span> </div>
</label> <div id="approval-approved" style="display:none">
<div class="card card-pad mb12">
<div class="spread mb8"><h3 class="card-title">Prefactura aprobada</h3><span class="chip chip-ok">Aprobada</span></div>
<div class="approval-status ok"><span class="state-dot"></span><span><b>Arturo R. aprobó PRE-2026-0311 v3</b><small>10 jul 2026 · 09:54 · FAC-0876 · COT-2026-0455</small></span></div>
</div> </div>
<div class="alert alert-warn mb12"> <div class="alert alert-warn mb12">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 9v4m0 4h.01M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 9v4m0 4h.01M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z"/></svg>
<span><b>Acción irreversible.</b> Al emitir, el PAC de BIND timbra el CFDI ante el SAT. Cancelar después implica proceso administrativo y contable.</span> <span><b>Acción irreversible.</b> El siguiente botón timbra ante el SAT mediante el PAC de BIND. Total a emitir: <b>$79,390.40 MXN</b>.</span>
</div>
<button class="btn btn-primary btn-lg" id="btn-emit" style="width:100%;justify-content:center" onclick="emitOk()">Timbrar CFDI aprobado — $79,390.40 MXN</button>
</div> </div>
<button class="btn btn-primary btn-lg" id="btn-emit" style="width:100%;justify-content:center" disabled onclick="emitOk()">
Emitir CFDI — timbra el PAC de BIND
</button>
<button class="btn btn-ghost mt8" style="width:100%;justify-content:center" onclick="wiz(4)">← Volver a la prefactura</button> <button class="btn btn-ghost mt8" style="width:100%;justify-content:center" onclick="wiz(4)">← Volver a la prefactura</button>
</div> </div>
</div> </div>
@@ -1018,7 +1129,7 @@
============================================================ --> ============================================================ -->
<section class="view" id="view-envio"> <section class="view" id="view-envio">
<h1 class="view-title">Envío al cliente</h1> <h1 class="view-title">Envío al cliente</h1>
<p class="view-sub">El paso que hoy falta sistematizar: <b>la facturación termina hasta que el correo sale</b> con los adjuntos y el formato que cada cliente exige. El botón "Enviar" se bloquea si falta un requisito.</p> <p class="view-sub"><b>No se envía</b> hasta completar los adjuntos requeridos por el cliente.</p>
<div class="send-layout"> <div class="send-layout">
<!-- Cola --> <!-- Cola -->
@@ -1051,7 +1162,7 @@
<div class="spread mb12"> <div class="spread mb12">
<div> <div>
<h3 class="card-title">F-2026-0143 · CEMEX, S.A.B. de C.V.</h3> <h3 class="card-title">F-2026-0143 · CEMEX, S.A.B. de C.V.</h3>
<p class="card-sub" style="margin:0">Perfil de envío del catálogo de particularidades por cliente</p> <p class="card-sub" style="margin:0">Requisitos del cliente</p>
</div> </div>
<span class="chip chip-cafe">Perfil CEMEX</span> <span class="chip chip-cafe">Perfil CEMEX</span>
</div> </div>
@@ -1124,8 +1235,8 @@
VISTA 5 · COBRANZA VISTA 5 · COBRANZA
============================================================ --> ============================================================ -->
<section class="view" id="view-cobranza"> <section class="view" id="view-cobranza">
<h1 class="view-title">Cobranza operativa</h1> <h1 class="view-title">Cuentas por cobrar</h1>
<p class="view-sub">Aging de cuentas por cobrar leído de BIND (<b>Finanzas → Cuentas por cobrar</b>), por moneda y sin mezclar. Las alertas son <b>internas, al equipo Balam</b> — los recordatorios automáticos al cliente se habilitan en fase posterior.</p> <p class="view-sub"><b>Corte 09:47</b> · próxima lectura 10:02 · MXN y USD separados.</p>
<div class="card mb16" style="overflow:hidden"> <div class="card mb16" style="overflow:hidden">
<div style="padding:13px 18px;border-bottom:1px solid var(--linea)" class="spread"> <div style="padding:13px 18px;border-bottom:1px solid var(--linea)" class="spread">
@@ -1159,12 +1270,140 @@
</div> </div>
</div> </div>
<!-- Detalle por factura: el control que hoy vive en el Excel de Arturo -->
<div class="card mb20" style="overflow:hidden">
<div style="padding:13px 18px;border-bottom:1px solid var(--linea)" class="spread">
<div>
<h3 class="card-title" style="margin:0">Facturas abiertas · detalle</h3>
<p class="card-sub" style="margin:2px 0 0">Saldo y días de mora leídos de BIND.</p>
</div>
<div class="filters" style="margin:0">
<button class="fchip on">Todas (14)</button>
<button class="fchip">Vencidas (6)</button>
<button class="fchip">Por vencer (8)</button>
<button class="fchip">MXN (11)</button>
<button class="fchip">USD (3)</button>
</div>
</div>
<table class="tbl" style="font-size:12px">
<thead><tr><th>Folio</th><th>Cliente</th><th class="num">Monto</th><th>Vencimiento</th><th>Días de mora</th><th></th></tr></thead>
<tbody>
<tr><td class="mono">F-2026-0019</td><td>ACUNTIA</td><td class="num">$86,200.00 MXN</td><td>16-mar-2026</td><td><span class="chip chip-bad">114 días · febrero</span></td><td><button class="btn btn-ghost btn-sm" onclick="edoCuenta()">Edo. cuenta</button></td></tr>
<tr><td class="mono">F-2026-0058</td><td>Regiotour</td><td class="num">$85,700.00 MXN</td><td>26-abr-2026</td><td><span class="chip chip-bad">73 días</span></td><td><button class="btn btn-ghost btn-sm" onclick="edoCuenta()">Edo. cuenta</button></td></tr>
<tr><td class="mono">F-2026-0087</td><td>Dilo</td><td class="num">$124,700.00 MXN</td><td>28-may-2026</td><td><span class="chip chip-warn">41 días</span></td><td><button class="btn btn-ghost btn-sm" onclick="edoCuenta()">Edo. cuenta</button></td></tr>
<tr><td class="mono">INV-2026-0102</td><td>Axie</td><td class="num">$11,750.00 USD</td><td>31-may-2026</td><td><span class="chip chip-warn">38 días</span></td><td><button class="btn btn-ghost btn-sm" onclick="edoCuenta()">Edo. cuenta</button></td></tr>
<tr><td class="mono">F-2026-0114</td><td>Dilo</td><td class="num">$62,060.00 MXN</td><td>20-jun-2026</td><td><span class="chip chip-warn">18 días</span></td><td></td></tr>
<tr><td class="mono">F-2026-0117</td><td>Regiotour</td><td class="num">$86,000.00 MXN</td><td>29-jun-2026</td><td><span class="chip chip-warn">9 días</span></td><td></td></tr>
<tr><td class="mono">F-2026-0110</td><td>CEMEX</td><td class="num">$71,920.00 MXN</td><td>14-jul-2026</td><td><span class="chip chip-info">Vence en 6 días</span></td><td></td></tr>
<tr><td class="mono">INV-2026-0106</td><td>Axie</td><td class="num">$5,175.00 USD</td><td>15-jul-2026</td><td><span class="chip chip-info">Vence en 7 días</span></td><td></td></tr>
<tr><td class="mono">F-2026-0126</td><td>Regiotour</td><td class="num">$110,020.00 MXN</td><td>18-jul-2026</td><td><span class="chip chip-neutral">Al corriente</span></td><td></td></tr>
<tr><td class="mono">INV-2026-0108</td><td>Axie</td><td class="num">$5,175.00 USD</td><td>21-jul-2026</td><td><span class="chip chip-neutral">Al corriente</span></td><td></td></tr>
<tr><td class="mono">F-2026-0132</td><td>Dilo</td><td class="num">$114,029.60 MXN</td><td>24-jul-2026</td><td><span class="chip chip-neutral">Al corriente</span></td><td></td></tr>
<tr><td class="mono">F-2026-0138</td><td>CEMEX</td><td class="num">$118,560.00 MXN</td><td>30-jul-2026</td><td><span class="chip chip-neutral">Al corriente</span></td><td></td></tr>
<tr><td class="mono">F-2026-0141</td><td>CEMEX</td><td class="num">$118,560.00 MXN</td><td>02-ago-2026</td><td><span class="chip chip-neutral">Al corriente</span></td><td></td></tr>
<tr><td class="mono">F-2026-0143</td><td>CEMEX</td><td class="num">$79,390.40 MXN</td><td>05-ago-2026</td><td><span class="chip chip-neutral">Al corriente · emitida 06-jul</span></td><td></td></tr>
</tbody>
</table>
</div>
<!-- Estado de cuenta por cliente (ejemplo: ACUNTIA) -->
<div class="modal-backdrop" id="edo-cuenta" style="display:none" onclick="if(event.target===this) edoCuenta(false)">
<div class="modal-box">
<div style="padding:13px 18px;border-bottom:1px solid var(--linea)" class="spread">
<div>
<h3 class="card-title" style="margin:0">Estado de cuenta · ACUNTIA</h3>
<p class="card-sub" style="margin:2px 0 0">Facturas abiertas y pagos recientes.</p>
</div>
<div style="display:flex;gap:8px">
<button class="btn btn-ghost btn-sm" onclick="toast('Estado de cuenta exportado a PDF/XLSX (demo).')">Exportar</button>
<button class="btn btn-ghost btn-sm" onclick="edoCuenta(false)">Cerrar ✕</button>
</div>
</div>
<table class="tbl" style="font-size:12px">
<thead><tr><th>Folio</th><th>Emitida</th><th class="num">Total</th><th class="num">Pagado</th><th class="num">Saldo</th><th>Estatus</th></tr></thead>
<tbody>
<tr><td class="mono">F-2026-0019</td><td>12-feb-2026</td><td class="num">$86,200.00</td><td class="num">$0.00</td><td class="num" style="color:var(--bad-ink);font-weight:600">$86,200.00</td><td><span class="chip chip-bad">Vencida · 114 días</span></td></tr>
<tr><td class="mono">F-2026-0034</td><td>10-mar-2026</td><td class="num">$79,450.00</td><td class="num">$79,450.00</td><td class="num">$0.00</td><td><span class="chip chip-ok">Pagada · 22-jun</span></td></tr>
<tr><td class="mono">F-2026-0007</td><td>09-ene-2026</td><td class="num">$86,200.00</td><td class="num">$86,200.00</td><td class="num">$0.00</td><td><span class="chip chip-ok">Pagada · 08-jul</span></td></tr>
</tbody>
</table>
<div class="alert alert-info" style="margin:12px 18px 16px">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="9"/><path d="M12 8h.01M11 12h1v4h1"/></svg>
<span>El pago del 08-jul cubrió <b>enero</b> pero dejó <b>febrero</b> abierta — pago fuera de orden. El estado de cuenta <b>por folio</b> deja el cruce claro para ambos lados (hoy ese cruce se hace intercambiando Exceles con el cliente).</span>
</div>
<p class="footnote" style="margin:0 18px 16px">Ejemplo con datos de ACUNTIA — en el prototipo las demás filas abren el mismo caso para ilustrar el formato.</p>
</div>
</div>
</section>
<!-- ============================================================
VISTA 5b · PAGOS Y RECORDATORIOS
============================================================ -->
<section class="view" id="view-pagos">
<h1 class="view-title">Pagos y recordatorios</h1>
<p class="view-sub">Pagos leídos de BIND · alertas internas por días de mora.</p>
<!-- Pagos detectados + reglas de recordatorio -->
<div style="display:grid;grid-template-columns:1.4fr 1fr;gap:20px" class="mb20">
<div class="card card-pad">
<div class="spread mb12">
<div>
<h3 class="card-title">Pagos detectados</h3>
<p class="card-sub" style="margin:0">Detectados en cada lectura de BIND.</p>
</div>
<span class="sync-chip">Sincronizado con BIND · hace 4 min</span>
</div>
<table class="tbl" style="font-size:12px">
<thead><tr><th>Factura</th><th>Cliente</th><th class="num">Pagado</th><th>Detectado</th><th>Resultado</th></tr></thead>
<tbody>
<tr><td class="mono">F-2026-0095</td><td>Dilo</td><td class="num">$98,600.00 MXN</td><td>hoy · 9:47</td><td><span class="chip chip-ok">Saldada</span></td></tr>
<tr><td class="mono">F-2026-0007</td><td>ACUNTIA</td><td class="num">$86,200.00 MXN</td><td>hoy · 9:47</td><td><span class="chip chip-warn">Saldada · fuera de orden</span></td></tr>
<tr><td class="mono">INV-2026-0099</td><td>Axie</td><td class="num">$8,372.50 USD</td><td>ayer · 17:32</td><td><span class="chip chip-info">Saldada · tolerancia</span></td></tr>
</tbody>
</table>
<div class="alert alert-info mt12">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="9"/><path d="M12 8h.01M11 12h1v4h1"/></svg>
<span><b>Tolerancia por comisión:</b> INV-2026-0099 quedó con residual de <b>$27.50 USD</b> por el fee de la transferencia — dentro del umbral configurable ($50), se marca saldada en lugar de aparecer eternamente como morosa. La fecha mostrada es la del <b>registro en BIND</b> (lo captura el despacho), no la fecha valor del banco.</span>
</div>
</div>
<div class="card card-pad">
<h3 class="card-title">Reglas de recordatorio</h3>
<p class="card-sub">Acciones configuradas por días de mora.</p>
<div class="regla">
<span class="regla-d">D+1</span>
<span class="regla-txt">Alerta interna a Arturo R.<small>Factura vencida detectada en el aging</small></span>
<span class="chip chip-ok">MVP · activa</span>
</div>
<div class="regla off">
<span class="regla-d">D+5</span>
<span class="regla-txt">Correo de cortesía al cliente<small>Plantilla con folio, monto y días transcurridos</small></span>
<span class="chip chip-neutral">Fase posterior</span>
</div>
<div class="regla">
<span class="regla-d">D+15</span>
<span class="regla-txt">Escalamiento interno a dirección<small>Araceli S. + Arturo R. — caso ACUNTIA-febrero</small></span>
<span class="chip chip-ok">MVP · activa</span>
</div>
<div class="regla off">
<span class="regla-d">D+30</span>
<span class="regla-txt">2º correo al cliente + CC a dirección<small>Con estado de cuenta adjunto</small></span>
<span class="chip chip-neutral">Fase posterior</span>
</div>
<div class="alert alert-info mt12">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="9"/><path d="M12 8h.01M11 12h1v4h1"/></svg>
<span>Los <b>correos automáticos al cliente</b> están cotizados en el <b>Anexo B</b> (fase posterior); el MVP entrega las alertas internas y deja estas reglas preparadas para activarse.</span>
</div>
</div>
</div>
<div style="display:grid;grid-template-columns:1.4fr 1fr;gap:20px"> <div style="display:grid;grid-template-columns:1.4fr 1fr;gap:20px">
<div class="card card-pad"> <div class="card card-pad">
<div class="spread mb12"> <div class="spread mb12">
<div> <div>
<h3 class="card-title">Alertas internas <span class="chip chip-warn" style="margin-left:6px">al equipo Balam — no al cliente</span></h3> <h3 class="card-title">Alertas internas <span class="chip chip-warn" style="margin-left:6px">al equipo Balam — no al cliente</span></h3>
<p class="card-sub" style="margin:0">Los recordatorios automáticos <b>al cliente</b> se habilitan en fase posterior (Anexo B).</p> <p class="card-sub" style="margin:0">Avisos internos · correos al cliente en fase posterior.</p>
</div> </div>
</div> </div>
<table class="tbl" style="font-size:12px"> <table class="tbl" style="font-size:12px">
@@ -1190,6 +1429,16 @@
<td><span class="chip chip-warn">38 días</span></td> <td><span class="chip chip-warn">38 días</span></td>
<td>Recordatorio de gestión</td><td>Arturo R.</td> <td>Recordatorio de gestión</td><td>Arturo R.</td>
</tr> </tr>
<tr>
<td class="mono">F-2026-0114</td><td>Dilo</td><td class="num">$62,060 MXN</td>
<td><span class="chip chip-warn">18 días</span></td>
<td>Recordatorio de gestión</td><td>Arturo R.</td>
</tr>
<tr>
<td class="mono">F-2026-0117</td><td>Regiotour</td><td class="num">$86,000 MXN</td>
<td><span class="chip chip-warn">9 días</span></td>
<td>Recordatorio de gestión</td><td>Arturo R.</td>
</tr>
<tr> <tr>
<td class="mono">F-2026-0110</td><td>CEMEX</td><td class="num">$71,920 MXN</td> <td class="mono">F-2026-0110</td><td>CEMEX</td><td class="num">$71,920 MXN</td>
<td><span class="chip chip-info">Vence en 6 días</span></td> <td><span class="chip chip-info">Vence en 6 días</span></td>
@@ -1209,7 +1458,7 @@
<div class="empty-state"> <div class="empty-state">
<div class="es-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 6 9 17l-5-5"/></svg></div> <div class="es-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 6 9 17l-5-5"/></svg></div>
<b>Sin excepciones — todos los clientes reciben seguimiento</b> <b>Sin excepciones — todos los clientes reciben seguimiento</b>
<p>Decisión de dirección (6-jul-2026): la lista de excepciones queda <b>vacía</b>. La capacidad existe y es configurable, pero hoy ningún cliente se excluye de los avisos de vencimiento.</p> <p>Decisión de dirección (6-jul-2026): la lista de excepciones queda <b>vacía</b>. Al corte de las 09:47 ningún cliente está excluido; próxima lectura de BIND aprox. 10:02.</p>
</div> </div>
<button class="btn btn-ghost btn-sm" style="width:100%;justify-content:center" onclick="toast('Capacidad disponible pero sin uso: dirección decidió no excluir a nadie (6-jul).')">Agregar excepción…</button> <button class="btn btn-ghost btn-sm" style="width:100%;justify-content:center" onclick="toast('Capacidad disponible pero sin uso: dirección decidió no excluir a nadie (6-jul).')">Agregar excepción…</button>
</div> </div>
@@ -1221,7 +1470,7 @@
============================================================ --> ============================================================ -->
<section class="view" id="view-bitacora"> <section class="view" id="view-bitacora">
<h1 class="view-title">Bitácora de auditoría</h1> <h1 class="view-title">Bitácora de auditoría</h1>
<p class="view-sub">Registro inmutable de cada acción: quién, qué, cuándo, con qué <b>ticket Jira</b> y qué <b>folio BIND</b>. Base de la trazabilidad end-to-end del flujo.</p> <p class="view-sub">Trazabilidad por usuario, ticket Jira y folio BIND.</p>
<div class="filters"> <div class="filters">
<button class="fchip on">Todo (hoy)</button> <button class="fchip on">Todo (hoy)</button>
@@ -1240,6 +1489,12 @@
<table class="tbl"> <table class="tbl">
<thead><tr><th>Fecha y hora</th><th>Usuario</th><th>Acción</th><th>Referencias</th><th>Detalle</th></tr></thead> <thead><tr><th>Fecha y hora</th><th>Usuario</th><th>Acción</th><th>Referencias</th><th>Detalle</th></tr></thead>
<tbody> <tbody>
<tr>
<td style="white-space:nowrap">08 jul 2026 · 09:47</td><td><b>Plataforma</b></td>
<td><span class="chip chip-ok">Pago detectado</span></td>
<td class="mono" style="font-size:11.5px">F-2026-0095 · F-2026-0007</td>
<td>Sincronización BIND: 2 pagos registrados por el despacho · Dilo saldada · ACUNTIA aplicó a enero (pago fuera de orden — febrero sigue abierta)</td>
</tr>
<tr> <tr>
<td style="white-space:nowrap">06 jul 2026 · 13:05</td><td><b>Arturo R.</b></td> <td style="white-space:nowrap">06 jul 2026 · 13:05</td><td><b>Arturo R.</b></td>
<td><span class="chip chip-ok">CFDI emitido</span></td> <td><span class="chip chip-ok">CFDI emitido</span></td>
@@ -1324,8 +1579,13 @@
<script> <script>
/* ============ Navegación entre vistas ============ */ /* ============ Navegación entre vistas ============ */
const CRUMBS = { const CRUMBS = {
dashboard:'Dashboard', solicitudes:'Solicitudes (Jira)', emision:'Emisión asistida', dashboard:'Dashboard',
envio:'Envío al cliente', cobranza:'Cobranza', bitacora:'Bitácora' solicitudes:'Facturación · Solicitudes (Jira)',
emision:'Facturación · Por aprobar y emitir',
envio:'Facturación · Envío al cliente',
cobranza:'Cobranza · Cuentas por cobrar',
pagos:'Cobranza · Pagos y recordatorios',
bitacora:'Bitácora'
}; };
function show(view){ function show(view){
@@ -1356,9 +1616,11 @@ document.querySelectorAll('.nav-item[data-view]').forEach(el => {
el.addEventListener('click', () => show(el.dataset.view)); el.addEventListener('click', () => show(el.dataset.view));
}); });
/* ============ Wizard de emisión (5 pasos) ============ */ /* ============ Wizard de preparación, aprobación y emisión (5 pasos) ============ */
let curStep = 1; let curStep = 1;
let approvalGranted = false;
function wiz(n){ function wiz(n){
if(n < 5 && approvalGranted) resetApproval();
curStep = n; curStep = n;
document.querySelectorAll('.wiz-pane').forEach(p => p.classList.remove('active')); document.querySelectorAll('.wiz-pane').forEach(p => p.classList.remove('active'));
document.getElementById('wp-' + n).classList.add('active'); document.getElementById('wp-' + n).classList.add('active');
@@ -1381,26 +1643,35 @@ function startWizard(){
function resetWizard(){ function resetWizard(){
document.getElementById('wiz-exito').style.display = 'none'; document.getElementById('wiz-exito').style.display = 'none';
document.getElementById('wiz-main').style.display = 'block'; document.getElementById('wiz-main').style.display = 'block';
const chk = document.getElementById('chk-confirm'); resetApproval();
chk.checked = false;
document.getElementById('btn-emit').disabled = true;
pickPay('ppd'); pickPay('ppd');
wiz(1); wiz(1);
} }
function resetApproval(){
approvalGranted = false;
document.getElementById('approval-pending').style.display = 'block';
document.getElementById('approval-approved').style.display = 'none';
}
function approvePrefactura(){
approvalGranted = true;
document.getElementById('approval-pending').style.display = 'none';
document.getElementById('approval-approved').style.display = 'block';
toast('PRE-2026-0311 v3 aprobada por Arturo R. · la emisión ya está habilitada.');
}
function emitOk(){ function emitOk(){
if(!approvalGranted){
toast('Primero se requiere la aprobación humana de la prefactura v3.');
return;
}
document.getElementById('wiz-main').style.display = 'none'; document.getElementById('wiz-main').style.display = 'none';
document.getElementById('wiz-exito').style.display = 'block'; document.getElementById('wiz-exito').style.display = 'block';
toast('CFDI F-2026-0143 timbrado por el PAC de BIND · evidencia anexada a FAC-0876.'); toast('CFDI F-2026-0143 timbrado por el PAC de BIND · evidencia anexada a FAC-0876.');
window.scrollTo({top:0, behavior:'instant'}); window.scrollTo({top:0, behavior:'instant'});
} }
/* Paso 1: selección de cotización */
function pickQuote(el){
document.querySelectorAll('.quote-card').forEach(q => q.classList.remove('sel'));
el.classList.add('sel');
}
/* Paso 2: PPD/PUE con advertencia SAT */ /* Paso 2: PPD/PUE con advertencia SAT */
function pickPay(which){ function pickPay(which){
const ppd = document.getElementById('pay-ppd'), pue = document.getElementById('pay-pue'); const ppd = document.getElementById('pay-ppd'), pue = document.getElementById('pay-pue');
@@ -1429,6 +1700,14 @@ function updateSend(){
} }
} }
/* ============ Cobranza: estado de cuenta por cliente (modal) ============ */
function edoCuenta(open = true){
document.getElementById('edo-cuenta').style.display = open ? 'flex' : 'none';
}
document.addEventListener('keydown', e => {
if(e.key === 'Escape') edoCuenta(false);
});
/* ============ Toast ============ */ /* ============ Toast ============ */
let toastTimer = null; let toastTimer = null;
function toast(msg){ function toast(msg){
Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB