Files
moraworld/presentacion.html
T

958 lines
60 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Moraworld Imports — Presentación de Requerimientos v1.1</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet"/>
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
--blue:#0057FF;--blue-d:#003FC7;--blue-l:#EEF3FF;
--orange:#FF6B00;--green:#10B981;--red:#EF4444;--purple:#8B5CF6;--yellow:#F59E0B;
--dark:#0D1117;--gray-900:#111827;--gray-700:#374151;--gray-500:#6B7280;
--gray-300:#D1D5DB;--gray-200:#E5E7EB;--gray-100:#F3F4F6;--white:#fff;
}
html,body{height:100%;overflow:hidden;font-family:'Inter',sans-serif;background:var(--dark);color:var(--white)}
/* ── DECK SHELL ── */
.deck{width:100vw;height:100vh;position:relative;overflow:hidden}
/* ── PROGRESS BAR ── */
#progress{position:fixed;top:0;left:0;height:3px;background:linear-gradient(90deg,var(--blue),var(--orange));width:0;z-index:999;transition:width .4s ease}
/* ── COUNTER ── */
#counter{
position:fixed;bottom:24px;right:32px;z-index:999;
font-size:.78rem;font-weight:600;color:rgba(255,255,255,.4);
font-family:'JetBrains Mono',monospace;letter-spacing:.05em
}
/* ── NAV ARROWS ── */
.nav-btn{
position:fixed;top:50%;transform:translateY(-50%);z-index:999;
width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.08);
border:1px solid rgba(255,255,255,.12);cursor:pointer;
display:flex;align-items:center;justify-content:center;
font-size:1.1rem;color:rgba(255,255,255,.6);transition:all .2s;
}
.nav-btn:hover{background:rgba(255,255,255,.15);color:var(--white)}
#btn-prev{left:16px}
#btn-next{right:16px}
/* ── KEYBOARD HINT ── */
#hint{
position:fixed;bottom:24px;left:50%;transform:translateX(-50%);
font-size:.72rem;color:rgba(255,255,255,.25);letter-spacing:.05em;
font-family:'JetBrains Mono',monospace;
}
/* ── SLIDE BASE ── */
.slide{
position:absolute;inset:0;display:flex;flex-direction:column;
opacity:0;pointer-events:none;transition:opacity .5s ease,transform .5s ease;
transform:translateX(60px);
}
.slide.active{opacity:1;pointer-events:all;transform:translateX(0)}
.slide.exit{opacity:0;transform:translateX(-60px)}
/* ── SLIDE INNER ── */
.s-wrap{
flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;
padding:60px 80px;overflow:auto;
}
.s-wrap.top{justify-content:flex-start;padding-top:80px}
/* ── SLIDE HEADERS ── */
.slide-num{
font-size:.7rem;font-weight:700;letter-spacing:.15em;text-transform:uppercase;
color:rgba(255,255,255,.3);font-family:'JetBrains Mono',monospace;
position:absolute;top:28px;left:80px;
}
.slide-section{
font-size:.7rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
color:var(--blue);font-family:'JetBrains Mono',monospace;
position:absolute;top:28px;right:80px;
}
/* ── TYPOGRAPHY ── */
.tag{display:inline-block;background:rgba(0,87,255,.2);color:#7AADFF;font-size:.72rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;padding:4px 14px;border-radius:999px;margin-bottom:18px}
h1.hero-title{font-size:clamp(2.8rem,6vw,5rem);font-weight:900;line-height:1.05;text-align:center}
h1.hero-title em{color:var(--orange);font-style:normal}
h2.stitle{font-size:clamp(1.8rem,3.5vw,2.8rem);font-weight:800;line-height:1.2;margin-bottom:12px}
h2.stitle em{color:var(--blue);font-style:normal}
.sub{font-size:1rem;color:rgba(255,255,255,.55);max-width:680px;line-height:1.7}
/* ── GRID UTILS ── */
.g2{display:grid;grid-template-columns:1fr 1fr;gap:24px;width:100%;max-width:1000px}
.g3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px;width:100%;max-width:1000px}
.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;width:100%;max-width:1000px}
/* ── CARDS ── */
.card{
background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.09);
border-radius:14px;padding:24px 22px;
}
.card.accent{border-color:var(--blue);background:rgba(0,87,255,.1)}
.card.orange{border-color:var(--orange);background:rgba(255,107,0,.1)}
.card.green{border-color:var(--green);background:rgba(16,185,129,.1)}
.card.purple{border-color:var(--purple);background:rgba(139,92,246,.1)}
.card-icon{font-size:1.8rem;margin-bottom:12px}
.card h3{font-size:1rem;font-weight:700;margin-bottom:8px}
.card p{font-size:.82rem;color:rgba(255,255,255,.55);line-height:1.6}
.card ul{margin-top:10px;display:flex;flex-direction:column;gap:6px}
.card li{font-size:.8rem;color:rgba(255,255,255,.65);display:flex;gap:8px;align-items:flex-start}
.card li::before{content:'';color:var(--blue);font-weight:700;flex-shrink:0}
.card .badge{display:inline-block;margin-top:10px;font-size:.68rem;font-weight:700;padding:3px 10px;border-radius:999px;letter-spacing:.05em}
.bg-blue-b{background:rgba(0,87,255,.25);color:#7AADFF}
.bg-green-b{background:rgba(16,185,129,.2);color:#6EE7B7}
.bg-orange-b{background:rgba(255,107,0,.2);color:#FDB87A}
.bg-purple-b{background:rgba(139,92,246,.2);color:#C4B5FD}
/* ── FLOW DIAGRAM ── */
.flow{display:flex;flex-direction:column;align-items:center;gap:0;width:100%}
.flow-step{
display:flex;align-items:center;gap:14px;width:100%;max-width:720px;
background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);
border-radius:10px;padding:12px 18px;
}
.flow-step.done{border-color:rgba(16,185,129,.4);background:rgba(16,185,129,.07)}
.flow-step.active{border-color:var(--blue);background:rgba(0,87,255,.12)}
.flow-step.decision{border-color:rgba(245,158,11,.4);background:rgba(245,158,11,.08);border-style:dashed}
.flow-num{width:28px;height:28px;border-radius:50%;background:var(--blue);color:var(--white);font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.flow-num.g{background:var(--green)}
.flow-num.o{background:var(--orange)}
.flow-num.y{background:var(--yellow)}
.flow-text{font-size:.83rem;color:rgba(255,255,255,.8);flex:1;line-height:1.4}
.flow-arrow{text-align:center;color:rgba(255,255,255,.2);font-size:1rem;padding:3px 0}
.flow-split{display:grid;grid-template-columns:1fr 1fr;gap:12px;width:100%;max-width:720px}
/* ── TABLE ── */
.stbl{width:100%;max-width:960px;border-collapse:collapse;font-size:.78rem}
.stbl th{text-align:left;padding:10px 14px;background:rgba(0,87,255,.2);color:#7AADFF;font-weight:700;font-size:.72rem;letter-spacing:.06em;text-transform:uppercase}
.stbl td{padding:9px 14px;border-bottom:1px solid rgba(255,255,255,.06);color:rgba(255,255,255,.75)}
.stbl tr:hover td{background:rgba(255,255,255,.03)}
.stbl .yes{color:var(--green);font-weight:700}
.stbl .no{color:rgba(255,255,255,.2)}
.stbl .part{color:var(--yellow);font-weight:600}
/* ── STATES TIMELINE ── */
.timeline{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;max-width:900px}
.t-state{
display:flex;align-items:center;gap:8px;
background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.08);
border-radius:8px;padding:9px 14px;font-size:.78rem;font-weight:500;
}
.t-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.t-num{font-size:.65rem;font-family:'JetBrains Mono',monospace;color:rgba(255,255,255,.3);margin-left:auto}
/* ── ARCH DIAGRAM ── */
.arch{display:flex;flex-direction:column;align-items:center;gap:12px;margin-top:8px}
.arch-row{display:flex;gap:12px;align-items:center;justify-content:center}
.arch-box{
background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);
border-radius:10px;padding:10px 18px;font-size:.8rem;font-weight:600;
text-align:center;min-width:120px;
}
.arch-box.internet{border-color:rgba(0,87,255,.5);background:rgba(0,87,255,.12);color:#7AADFF}
.arch-box.gateway{border-color:rgba(245,158,11,.4);background:rgba(245,158,11,.1);color:#FDE68A}
.arch-box.tenant{border-color:rgba(139,92,246,.4);background:rgba(139,92,246,.1);color:#DDD6FE;min-width:100px}
.arch-box.db{border-color:rgba(16,185,129,.4);background:rgba(16,185,129,.1);color:#A7F3D0}
.arch-arrow{color:rgba(255,255,255,.25);font-size:.9rem;text-align:center}
/* ── ISO TABLE ── */
.iso-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;width:100%;max-width:900px}
.iso-item{
display:flex;gap:12px;align-items:flex-start;
background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.07);
border-radius:10px;padding:12px 14px;
}
.iso-label{font-size:.72rem;font-weight:700;color:#7AADFF;font-family:'JetBrains Mono',monospace;white-space:nowrap;padding-top:1px}
.iso-desc{font-size:.78rem;color:rgba(255,255,255,.65);line-height:1.5}
/* ── HERO SLIDE BG ── */
.slide-hero{background:radial-gradient(ellipse at 30% 50%,rgba(0,87,255,.2) 0%,transparent 60%),radial-gradient(ellipse at 70% 70%,rgba(255,107,0,.12) 0%,transparent 60%),var(--dark)}
.slide-dark{background:var(--dark)}
.slide-blue{background:linear-gradient(135deg,#0D2150,#0D1117)}
.slide-orange{background:linear-gradient(135deg,#1a0a00,#0D1117)}
/* ── ROLE BADGES ── */
.role-grid{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:12px}
.role-card{
background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);
border-radius:12px;padding:16px 20px;text-align:center;min-width:140px;
}
.role-icon{font-size:1.6rem;margin-bottom:8px}
.role-name{font-size:.85rem;font-weight:700;margin-bottom:4px}
.role-desc{font-size:.72rem;color:rgba(255,255,255,.45);line-height:1.4}
/* ── FORMULA BOX ── */
.formula{
background:rgba(0,0,0,.4);border:1px solid rgba(0,87,255,.3);
border-radius:10px;padding:18px 24px;font-family:'JetBrains Mono',monospace;
font-size:.78rem;color:#A5B4FC;line-height:2;white-space:pre;max-width:660px;
}
.formula .comment{color:rgba(255,255,255,.2)}
.formula .value{color:#FCD34D}
.formula .result{color:#6EE7B7;font-weight:700}
/* ── INTEGRATION CHIPS ── */
.int-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;max-width:860px;width:100%}
.int-item{
display:flex;align-items:center;gap:12px;
background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.08);
border-radius:10px;padding:12px 16px;
}
.int-icon{font-size:1.4rem;flex-shrink:0}
.int-name{font-size:.82rem;font-weight:700;display:block}
.int-proto{font-size:.7rem;color:rgba(255,255,255,.35);font-family:'JetBrains Mono',monospace}
/* ── COVER DOTS ── */
.cover-meta{display:flex;gap:24px;margin-top:40px;flex-wrap:wrap;justify-content:center}
.cover-meta .m{display:flex;flex-direction:column;align-items:center;gap:4px}
.cover-meta .m span:first-child{font-size:.68rem;text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.3);font-family:'JetBrains Mono',monospace}
.cover-meta .m span:last-child{font-size:.9rem;font-weight:600;color:rgba(255,255,255,.8)}
/* ── SENAE CATEGORY ── */
.senae-cats{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;max-width:760px;width:100%}
.cat-card{border-radius:10px;padding:16px 18px}
.cat-card .cat-name{font-weight:800;font-size:1rem;margin-bottom:6px}
.cat-card .cat-rate{font-size:1.5rem;font-weight:900;margin-bottom:6px}
.cat-card .cat-desc{font-size:.78rem;opacity:.75;line-height:1.5}
/* ── NONFUNC ── */
.nf-list{display:flex;flex-direction:column;gap:10px;max-width:720px;width:100%}
.nf-item{display:flex;align-items:center;gap:14px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.07);border-radius:10px;padding:12px 16px}
.nf-key{font-size:.78rem;font-weight:700;color:#7AADFF;font-family:'JetBrains Mono',monospace;min-width:150px}
.nf-val{font-size:.82rem;color:rgba(255,255,255,.7)}
/* ── COMPANY SIDE BY SIDE ── */
.companies{display:flex;gap:20px;flex-wrap:wrap;justify-content:center;margin-top:20px}
.co-card{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:14px;padding:24px 28px;flex:1;min-width:260px;max-width:340px}
.co-flag{font-size:2.8rem;margin-bottom:12px}
.co-name{font-size:1rem;font-weight:800;margin-bottom:6px}
.co-detail{font-size:.8rem;color:rgba(255,255,255,.5);line-height:1.6}
.co-badge{display:inline-block;margin-top:10px;background:rgba(0,87,255,.2);color:#7AADFF;font-size:.7rem;font-weight:700;padding:3px 12px;border-radius:999px}
/* ── ENDING ── */
.ending-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;max-width:780px;margin-top:28px}
.ending-item{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:20px 16px;text-align:center}
.ending-item span{font-size:1.6rem;display:block;margin-bottom:10px}
.ending-item p{font-size:.8rem;color:rgba(255,255,255,.55);line-height:1.5}
@media(max-width:800px){
.s-wrap{padding:48px 28px}
.g2,.g3,.g4{grid-template-columns:1fr}
.iso-grid{grid-template-columns:1fr}
.stbl{font-size:.7rem}
h2.stitle{font-size:1.6rem}
h1.hero-title{font-size:2.2rem}
.slide-num,.slide-section{display:none}
.int-grid{grid-template-columns:1fr 1fr}
}
</style>
</head>
<body>
<div id="progress"></div>
<button class="nav-btn" id="btn-prev" onclick="prev()"></button>
<button class="nav-btn" id="btn-next" onclick="next()"></button>
<div id="counter">1 / 20</div>
<div id="hint">← → para navegar &nbsp;|&nbsp; ESC para overview</div>
<div class="deck" id="deck">
<!-- ═══════════════════════════ SLIDE 01 — PORTADA ═══════════════════════════ -->
<div class="slide slide-hero active" id="s1">
<div class="s-wrap" style="text-align:center;">
<div class="tag">Documento de Requerimientos v1.1</div>
<h1 class="hero-title" style="max-width:800px">
<em>Moraworld</em> Imports<br/>Sistema de Casillero Internacional
</h1>
<p class="sub" style="text-align:center;margin-top:20px">
Arquitectura de Software · Requerimientos Funcionales · Flujos de Usuario y Sistema
</p>
<div class="cover-meta">
<div class="m"><span>Fecha</span><span>6 de mayo de 2026</span></div>
<div class="m"><span>Versión</span><span>1.1</span></div>
<div class="m"><span>Estado</span><span>Borrador</span></div>
<div class="m"><span>Normativa</span><span>ISO/IEC 27001 · SENAE</span></div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 02 — EMPRESAS ═══════════════════════════ -->
<div class="slide slide-dark" id="s2">
<div class="slide-num">02 / 20</div><div class="slide-section">Identidad</div>
<div class="s-wrap" style="text-align:center;">
<div class="tag">Las empresas</div>
<h2 class="stitle">Dos empresas, <em>un ecosistema</em></h2>
<p class="sub" style="text-align:center">Operación transfronteriza legalmente constituida en Ecuador y EE.UU.</p>
<div class="companies">
<div class="co-card">
<div class="co-flag">🇪🇨</div>
<div class="co-name">Moraworld Imports S.A.S.</div>
<div class="co-detail">Constituida bajo las leyes de <strong>Ecuador</strong>.<br/>Representante legal en <strong>Cuenca</strong>.<br/>RUC activo · Permisos SENAE vigentes.</div>
<span class="co-badge">Ecuador · S.A.S. · SENAE</span>
</div>
<div class="co-card">
<div class="co-flag">🇺🇸</div>
<div class="co-name">Mora Global Import LLC</div>
<div class="co-detail">Registrada en el estado de <strong>New Jersey, EE.UU.</strong><br/>Bodega operativa en:<br/><strong>150 N Day St, City of Orange, NJ 07050</strong></div>
<span class="co-badge">New Jersey · LLC · NJ 07050</span>
</div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 03 — RESUMEN EJECUTIVO ═══════════════════════════ -->
<div class="slide slide-dark" id="s3">
<div class="slide-num">03 / 20</div><div class="slide-section">Resumen Ejecutivo</div>
<div class="s-wrap">
<div class="tag">¿Qué construimos?</div>
<h2 class="stitle" style="text-align:center">El problema que resolvemos</h2>
<div class="g2" style="margin-top:32px;max-width:900px">
<div class="card accent">
<div class="card-icon">🏭</div>
<h3>La bodega en EE.UU.</h3>
<p>Bodega física en <strong>150 N Day St, NJ 07050</strong>. Cada cliente recibe una Suite personalizada como dirección de entrega en tiendas online.</p>
<ul>
<li>Dirección Suite: EC-XXXXX</li>
<li>Asignación automática al registrarse</li>
<li>Verificación física de peso y dimensiones</li>
<li>Fotos del paquete sincronizadas al portal</li>
</ul>
</div>
<div class="card orange">
<div class="card-icon">🛃</div>
<h3>La logística a Ecuador</h3>
<p>El sistema gestiona el reenvío, el cálculo de impuestos y la declaración automática ante la <strong>SENAE</strong>.</p>
<ul>
<li>Calculadora SENAE integrada (categorías 4x4, B, C, D)</li>
<li>Declaración Simplificada (DSI) automática</li>
<li>Tracking ID único por paquete</li>
<li>Notificaciones por WhatsApp, SMS y correo</li>
</ul>
</div>
</div>
<div class="g2" style="margin-top:16px;max-width:900px">
<div class="card" style="text-align:center;padding:20px">
<div style="font-size:2rem;font-weight:900;color:var(--blue)">B2C</div>
<div style="font-size:.85rem;font-weight:700;margin-top:4px">Casillero Personal</div>
<div style="font-size:.78rem;color:rgba(255,255,255,.45);margin-top:4px">Compras pequeñas · Flujo automatizado</div>
</div>
<div class="card" style="text-align:center;padding:20px">
<div style="font-size:2rem;font-weight:900;color:var(--orange)">B2B</div>
<div style="font-size:.85rem;font-weight:700;margin-top:4px">Carga Pesada / Pallets</div>
<div style="font-size:.78rem;color:rgba(255,255,255,.45);margin-top:4px">Importación mayorista · Cotización especial</div>
</div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 04 — ARQUITECTURA ═══════════════════════════ -->
<div class="slide slide-blue" id="s4">
<div class="slide-num">04 / 20</div><div class="slide-section">Arquitectura</div>
<div class="s-wrap" style="text-align:center;">
<div class="tag">Arquitectura de Software</div>
<h2 class="stitle">Multi-Tenant · ISO/IEC <em>27001</em></h2>
<div class="arch" style="margin-top:28px">
<div class="arch-box internet" style="width:320px">🌐 INTERNET (HTTPS / TLS 1.3)</div>
<div class="arch-arrow"></div>
<div class="arch-box gateway" style="width:260px">⚡ Load Balancer / API Gateway</div>
<div class="arch-arrow"></div>
<div class="arch-row">
<div class="arch-box tenant">Tenant A<br/><span style="font-size:.7rem;opacity:.6">Empresa 1</span></div>
<div class="arch-box tenant">Tenant B<br/><span style="font-size:.7rem;opacity:.6">Empresa 2</span></div>
<div class="arch-box tenant">Tenant N<br/><span style="font-size:.7rem;opacity:.6">Empresa N</span></div>
</div>
<div class="arch-arrow"></div>
<div class="arch-box db" style="width:300px">🗄️ PostgreSQL · Schema aislado por Tenant</div>
</div>
<div class="g3" style="margin-top:24px;max-width:860px">
<div class="card" style="padding:14px 16px;text-align:center">
<div style="font-size:.7rem;font-weight:700;color:#7AADFF;letter-spacing:.08em;text-transform:uppercase;margin-bottom:6px">Frontend</div>
<div style="font-size:.85rem;font-weight:600">Next.js / React</div>
<div style="font-size:.72rem;color:rgba(255,255,255,.4)">SSR · SEO optimizado</div>
</div>
<div class="card" style="padding:14px 16px;text-align:center">
<div style="font-size:.7rem;font-weight:700;color:#7AADFF;letter-spacing:.08em;text-transform:uppercase;margin-bottom:6px">Backend</div>
<div style="font-size:.85rem;font-weight:600">Node.js + NestJS</div>
<div style="font-size:.72rem;color:rgba(255,255,255,.4)">REST / GraphQL</div>
</div>
<div class="card" style="padding:14px 16px;text-align:center">
<div style="font-size:.7rem;font-weight:700;color:#7AADFF;letter-spacing:.08em;text-transform:uppercase;margin-bottom:6px">Seguridad</div>
<div style="font-size:.85rem;font-weight:600">OAuth 2.0 + MFA</div>
<div style="font-size:.72rem;color:rgba(255,255,255,.4)">JWT · AES-256 · WAF</div>
</div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 05 — ISO 27001 ═══════════════════════════ -->
<div class="slide slide-blue" id="s5">
<div class="slide-num">05 / 20</div><div class="slide-section">Seguridad</div>
<div class="s-wrap top">
<div class="tag">Seguridad de la Información</div>
<h2 class="stitle" style="text-align:center">Controles <em>ISO/IEC 27001:2022</em></h2>
<div class="iso-grid" style="margin-top:24px">
<div class="iso-item"><span class="iso-label">A.5 Políticas</span><span class="iso-desc">Política de uso aceptable, manejo de datos y retención</span></div>
<div class="iso-item"><span class="iso-label">A.9 Acceso</span><span class="iso-desc">Autenticación MFA obligatoria, RBAC por roles</span></div>
<div class="iso-item"><span class="iso-label">A.6 Organización</span><span class="iso-desc">Roles definidos, segregación de funciones estricta</span></div>
<div class="iso-item"><span class="iso-label">A.10 Criptografía</span><span class="iso-desc">TLS 1.3 en tránsito · AES-256 en reposo</span></div>
<div class="iso-item"><span class="iso-label">A.8 Activos</span><span class="iso-desc">Inventario de datos personales y de paquetes (LOPDP)</span></div>
<div class="iso-item"><span class="iso-label">A.12 Operaciones</span><span class="iso-desc">Logs de auditoría inmutables, monitoreo continuo (SIEM)</span></div>
<div class="iso-item"><span class="iso-label">A.14 Desarrollo</span><span class="iso-desc">SDLC seguro, revisiones de código, OWASP Top 10</span></div>
<div class="iso-item"><span class="iso-label">A.16 Incidentes</span><span class="iso-desc">Proceso de gestión y notificación de incidentes</span></div>
<div class="iso-item"><span class="iso-label">A.7 RRHH</span><span class="iso-desc">Procedimientos de onboarding/offboarding de usuarios</span></div>
<div class="iso-item"><span class="iso-label">A.18 Cumplimiento</span><span class="iso-desc">Declaración aduanera automática conforme a SENAE</span></div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 06 — ROLES ═══════════════════════════ -->
<div class="slide slide-dark" id="s6">
<div class="slide-num">06 / 20</div><div class="slide-section">Roles</div>
<div class="s-wrap" style="text-align:center;">
<div class="tag">Sistema de Roles</div>
<h2 class="stitle">6 roles, acceso <em>diferenciado</em></h2>
<div class="role-grid" style="margin-top:24px">
<div class="role-card" style="border-color:rgba(0,87,255,.4);background:rgba(0,87,255,.1)">
<div class="role-icon">👑</div>
<div class="role-name">Super Admin</div>
<div class="role-desc">Acceso total. Gestiona tenants, usuarios y configuración global</div>
</div>
<div class="role-card" style="border-color:rgba(139,92,246,.4);background:rgba(139,92,246,.1)">
<div class="role-icon">🏢</div>
<div class="role-name">Admin Empresa</div>
<div class="role-desc">Administra su tenant: usuarios, tarifas, bodegas, reportes</div>
</div>
<div class="role-card" style="border-color:rgba(245,158,11,.4);background:rgba(245,158,11,.1)">
<div class="role-icon">📦</div>
<div class="role-name">Operador Bodega</div>
<div class="role-desc">Verifica, pesa, fotografía y despacha paquetes en NJ</div>
</div>
<div class="role-card" style="border-color:rgba(16,185,129,.4);background:rgba(16,185,129,.1)">
<div class="role-icon">🛃</div>
<div class="role-name">Agente Aduanero</div>
<div class="role-desc">Revisa y aprueba declaraciones antes de enviar a la SENAE</div>
</div>
<div class="role-card" style="border-color:rgba(255,107,0,.4);background:rgba(255,107,0,.1)">
<div class="role-icon">🧑‍💻</div>
<div class="role-name">Cliente Final</div>
<div class="role-desc">Usuario ecuatoriano. Registra compras y da seguimiento</div>
</div>
<div class="role-card" style="border-color:rgba(255,255,255,.15)">
<div class="role-icon">🎧</div>
<div class="role-name">Soporte</div>
<div class="role-desc">Visualiza info de clientes y paquetes. Sin modificaciones</div>
</div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 07 — MATRIZ PERMISOS ═══════════════════════════ -->
<div class="slide slide-dark" id="s7">
<div class="slide-num">07 / 20</div><div class="slide-section">Permisos</div>
<div class="s-wrap top">
<div class="tag">Matriz de Acceso</div>
<h2 class="stitle" style="text-align:center">¿Quién puede hacer <em>qué</em>?</h2>
<div style="overflow-x:auto;width:100%;max-width:960px;margin-top:20px">
<table class="stbl">
<thead>
<tr>
<th>Acción</th>
<th>Super Admin</th>
<th>Admin</th>
<th>Bodega</th>
<th>Aduanero</th>
<th>Cliente</th>
<th>Soporte</th>
</tr>
</thead>
<tbody>
<tr><td>Ver dashboard</td><td class="yes"></td><td class="yes"></td><td class="yes"></td><td class="yes"></td><td class="yes"></td><td class="yes"></td></tr>
<tr><td>Crear / editar usuarios</td><td class="yes"></td><td class="yes"></td><td class="no"></td><td class="no"></td><td class="no"></td><td class="no"></td></tr>
<tr><td>Configurar tarifas</td><td class="yes"></td><td class="yes"></td><td class="no"></td><td class="no"></td><td class="no"></td><td class="no"></td></tr>
<tr><td>Registrar compra</td><td class="no"></td><td class="no"></td><td class="no"></td><td class="no"></td><td class="yes"></td><td class="no"></td></tr>
<tr><td>Ver mis paquetes</td><td class="no"></td><td class="no"></td><td class="no"></td><td class="no"></td><td class="yes"></td><td class="yes"></td></tr>
<tr><td>Verificar en bodega</td><td class="no"></td><td class="no"></td><td class="yes"></td><td class="no"></td><td class="no"></td><td class="no"></td></tr>
<tr><td>Confirmar peso/dims.</td><td class="no"></td><td class="no"></td><td class="yes"></td><td class="no"></td><td class="no"></td><td class="no"></td></tr>
<tr><td>Generar DSI (aduana)</td><td class="no"></td><td class="no"></td><td class="no"></td><td class="yes"></td><td class="no"></td><td class="no"></td></tr>
<tr><td>Enviar datos a SENAE</td><td class="yes"></td><td class="yes"></td><td class="no"></td><td class="yes"></td><td class="no"></td><td class="no"></td></tr>
<tr><td>Logs de auditoría</td><td class="yes"></td><td class="yes"></td><td class="no"></td><td class="no"></td><td class="no"></td><td class="no"></td></tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 08 — MÓDULOS ═══════════════════════════ -->
<div class="slide slide-dark" id="s8">
<div class="slide-num">08 / 20</div><div class="slide-section">Módulos</div>
<div class="s-wrap top">
<div class="tag">Módulos del Sistema</div>
<h2 class="stitle" style="text-align:center">8 módulos <em>integrados</em></h2>
<div class="g4" style="margin-top:24px">
<div class="card" style="padding:16px">
<div class="card-icon">🌐</div>
<h3 style="font-size:.9rem">Landing Page</h3>
<p>Pública, SEO, calculadora, WhatsApp flotante, legalidad</p>
<span class="badge bg-green-b">Público</span>
</div>
<div class="card accent" style="padding:16px">
<div class="card-icon">👤</div>
<h3 style="font-size:.9rem">Portal Cliente</h3>
<p>Casillero Suite, pre-alerta, registro por URL o manual, fotos</p>
<span class="badge bg-blue-b">Cliente</span>
</div>
<div class="card orange" style="padding:16px">
<div class="card-icon">🏭</div>
<h3 style="font-size:.9rem">Portal Bodega NJ</h3>
<p>Recepción, verificación, peso real, fotos, despacho</p>
<span class="badge bg-orange-b">Operador</span>
</div>
<div class="card purple" style="padding:16px">
<div class="card-icon">⚙️</div>
<h3 style="font-size:.9rem">Portal Admin</h3>
<p>Dashboard, métricas, tarifas, reportes, auditoría</p>
<span class="badge bg-purple-b">Admin</span>
</div>
<div class="card green" style="padding:16px">
<div class="card-icon">🛃</div>
<h3 style="font-size:.9rem">Módulo SENAE</h3>
<p>DSI automática, cálculo impuestos, WebService oficial</p>
<span class="badge bg-green-b">Aduanero</span>
</div>
<div class="card" style="padding:16px">
<div class="card-icon">📍</div>
<h3 style="font-size:.9rem">Tracking</h3>
<p>ID único EC-YYYYMMDD-XXXXXX, 11 estados, visible sin login</p>
<span class="badge bg-blue-b">Todos</span>
</div>
<div class="card" style="padding:16px">
<div class="card-icon">📄</div>
<h3 style="font-size:.9rem">Pre-alerta</h3>
<p>Aviso previo + carga de factura PDF/imagen + tracking vendedor</p>
<span class="badge bg-blue-b">Cliente</span>
</div>
<div class="card orange" style="padding:16px">
<div class="card-icon">🚢</div>
<h3 style="font-size:.9rem">Carga Pesada B2B</h3>
<p>Pallets, INEN, cotización especial, DAI</p>
<span class="badge bg-orange-b">Mayorista</span>
</div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 09 — ESTADOS TRACKING ═══════════════════════════ -->
<div class="slide slide-dark" id="s9">
<div class="slide-num">09 / 20</div><div class="slide-section">Tracking</div>
<div class="s-wrap" style="text-align:center;">
<div class="tag">Sistema de Tracking</div>
<h2 class="stitle">11 estados · ID único por paquete</h2>
<p class="sub" style="text-align:center;margin-bottom:24px">Formato: <span style="font-family:'JetBrains Mono',monospace;color:#7AADFF">EC-YYYYMMDD-XXXXXX</span> &nbsp;|&nbsp; Ej: EC-20260506-082341</p>
<div class="timeline">
<div class="t-state"><div class="t-dot" style="background:#6B7280"></div>REGISTRADO<div class="t-num">01</div></div>
<div class="t-state"><div class="t-dot" style="background:#F59E0B"></div>EN_TRANSITO_BODEGA<div class="t-num">02</div></div>
<div class="t-state"><div class="t-dot" style="background:#3B82F6"></div>RECIBIDO_BODEGA<div class="t-num">03</div></div>
<div class="t-state"><div class="t-dot" style="background:#8B5CF6"></div>EN_VERIFICACION<div class="t-num">04</div></div>
<div class="t-state" style="border-color:rgba(16,185,129,.4)"><div class="t-dot" style="background:#10B981"></div>VERIFICADO<div class="t-num">05</div></div>
<div class="t-state" style="border-color:rgba(0,87,255,.4)"><div class="t-dot" style="background:#0057FF"></div>DECLARACION_ADUANERA<div class="t-num">06</div></div>
<div class="t-state"><div class="t-dot" style="background:#F97316"></div>EN_TRANSITO_ECUADOR<div class="t-num">07</div></div>
<div class="t-state"><div class="t-dot" style="background:#EF4444"></div>EN_ADUANA_ECUADOR<div class="t-num">08</div></div>
<div class="t-state"><div class="t-dot" style="background:#84CC16"></div>LISTO_ENTREGA<div class="t-num">09</div></div>
<div class="t-state" style="border-color:rgba(16,185,129,.5)"><div class="t-dot" style="background:#10B981"></div>ENTREGADO ✓<div class="t-num">10</div></div>
<div class="t-state" style="border-color:rgba(239,68,68,.5);background:rgba(239,68,68,.07)"><div class="t-dot" style="background:#EF4444"></div>INCIDENCIA ⚠<div class="t-num">11</div></div>
</div>
<p style="font-size:.78rem;color:rgba(255,255,255,.3);margin-top:20px">Notificaciones automáticas al cliente en cada cambio de estado · WhatsApp · SMS · Email</p>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 10 — FLUJO CLIENTE ═══════════════════════════ -->
<div class="slide slide-dark" id="s10">
<div class="slide-num">10 / 20</div><div class="slide-section">Flujo de Usuario</div>
<div class="s-wrap top" style="align-items:center">
<div class="tag">Flujo del Cliente Final</div>
<h2 class="stitle" style="text-align:center">Del click en Amazon a la <em>puerta en Ecuador</em></h2>
<div class="flow" style="margin-top:20px;gap:6px">
<div class="flow-step done"><div class="flow-num g">1</div><div class="flow-text">Accede a la Landing Page y se registra (correo + MFA)</div></div>
<div class="flow-arrow"></div>
<div class="flow-step done"><div class="flow-num g">2</div><div class="flow-text">Sistema asigna automáticamente: <span style="font-family:'JetBrains Mono';color:#7AADFF">150 N Day St, Suite EC-XXXXX, Orange NJ 07050</span></div></div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num">3</div><div class="flow-text">Compra en Amazon/eBay/Walmart usando esa dirección Suite como destino</div></div>
<div class="flow-arrow"></div>
<div class="flow-step decision"><div class="flow-num y">4</div><div class="flow-text">⚡ PRE-ALERTA (opcional): carga tracking vendedor + factura PDF → La bodega se prepara</div></div>
<div class="flow-arrow"></div>
<div class="flow-split">
<div class="flow-step active" style="font-size:.78rem"><div class="flow-num" style="font-size:.65rem">5A</div><div class="flow-text">🔗 Pega el enlace de Amazon → Sistema extrae: nombre, precio, peso, imagen</div></div>
<div class="flow-step active" style="font-size:.78rem"><div class="flow-num" style="font-size:.65rem">5B</div><div class="flow-text">✏️ Ingreso manual: nombre, valor ($USD), tienda, peso estimado</div></div>
</div>
<div class="flow-arrow"></div>
<div class="flow-step"><div class="flow-num o">6</div><div class="flow-text">Sistema calcula costo total con desglose SENAE · Cliente ACEPTA y PAGA en línea</div></div>
<div class="flow-arrow"></div>
<div class="flow-step done"><div class="flow-num g">7</div><div class="flow-text">🎉 Tracking ID generado · Notificaciones automáticas hasta entrega en Ecuador</div></div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 11 — FLUJO BODEGA ═══════════════════════════ -->
<div class="slide slide-dark" id="s11">
<div class="slide-num">11 / 20</div><div class="slide-section">Flujo de Usuario</div>
<div class="s-wrap" style="align-items:center">
<div class="tag">Flujo del Operador de Bodega NJ</div>
<h2 class="stitle" style="text-align:center">Verificación y despacho <em>en bodega</em></h2>
<div class="flow" style="margin-top:20px;gap:6px;max-width:680px">
<div class="flow-step done"><div class="flow-num g">1</div><div class="flow-text">Inicia sesión en el Portal de Bodega · Ve paquetes esperados con pre-alertas</div></div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num">2</div><div class="flow-text">Llega paquete físico → Escanea código de barras o busca por tracking manual</div></div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num">3</div><div class="flow-text">Confirma recepción → Estado: RECIBIDO_BODEGA · Pesa y mide · Toma fotos</div></div>
<div class="flow-arrow"></div>
<div class="flow-split">
<div class="flow-step done" style="font-size:.78rem"><div class="flow-num g" style="font-size:.65rem">4A</div><div class="flow-text">✅ Sin discrepancia → Estado: VERIFICADO · Asigna a despacho</div></div>
<div class="flow-step decision" style="font-size:.78rem"><div class="flow-num y" style="font-size:.65rem">4B</div><div class="flow-text">⚠️ Discrepancia &gt;10% → Notifica Admin y cliente · Ajuste de cobro</div></div>
</div>
<div class="flow-arrow"></div>
<div class="flow-step"><div class="flow-num o">5</div><div class="flow-text">Asigna a envío consolidado o individual · Genera orden de despacho a Ecuador</div></div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 12 — FLUJO ADUANERO ═══════════════════════════ -->
<div class="slide slide-dark" id="s12">
<div class="slide-num">12 / 20</div><div class="slide-section">Flujo de Usuario</div>
<div class="s-wrap" style="align-items:center">
<div class="tag">Flujo del Agente Aduanero</div>
<h2 class="stitle" style="text-align:center">De la bodega a la <em>SENAE</em></h2>
<div class="flow" style="margin-top:20px;gap:6px;max-width:680px">
<div class="flow-step active"><div class="flow-num">1</div><div class="flow-text">Ve paquetes con estado VERIFICADO · Revisa descripción, valor declarado y fotos</div></div>
<div class="flow-arrow"></div>
<div class="flow-split">
<div class="flow-step done" style="font-size:.78rem"><div class="flow-num g" style="font-size:.65rem">2A</div><div class="flow-text">✅ Valor ≤ $400 y ≤ 4 kg → Proceso 4x4 simplificado · DSI automática</div></div>
<div class="flow-step decision" style="font-size:.78rem"><div class="flow-num y" style="font-size:.65rem">2B</div><div class="flow-text">⚠️ Supera límite → Notifica cliente · Proceso de importación formal (DAI)</div></div>
</div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num">3</div><div class="flow-text">Sistema genera la <strong>Declaración Simplificada de Importación (DSI)</strong> automáticamente</div></div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num">4</div><div class="flow-text">Agente REVISA y APRUEBA · Sistema envía DSI al WebService oficial de la SENAE</div></div>
<div class="flow-arrow"></div>
<div class="flow-step done"><div class="flow-num g">5</div><div class="flow-text">🎉 SENAE devuelve número de autorización · Estado: DECLARACION_ADUANERA · Notificación al cliente</div></div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 13 — FLUJO IMPORTADOR B2B ═══════════════════════════ -->
<div class="slide slide-orange" id="s13">
<div class="slide-num">13 / 20</div><div class="slide-section">Flujo B2B</div>
<div class="s-wrap" style="align-items:center">
<div class="tag">Flujo Importador Mayorista (B2B)</div>
<h2 class="stitle" style="text-align:center">Carga Pesada · <em>Pallets · INEN</em></h2>
<div class="flow" style="margin-top:20px;gap:6px;max-width:680px">
<div class="flow-step active"><div class="flow-num o">1</div><div class="flow-text">Importador accede a la sección "Carga Pesada / Pallets" en la Landing Page</div></div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num o">2</div><div class="flow-text">Llena formulario de cotización especial: tipo de mercancía, peso, pallets, valor</div></div>
<div class="flow-arrow"></div>
<div class="flow-step decision"><div class="flow-num y">3</div><div class="flow-text">⚠️ Verificación INEN: calzado, textiles, electrónicos requieren certificación previa</div></div>
<div class="flow-arrow"></div>
<div class="flow-step"><div class="flow-num o">4</div><div class="flow-text">Equipo Moraworld prepara cotización · La envía por correo y WhatsApp</div></div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num o">5</div><div class="flow-text">Importador acepta → Se crea expediente con ID de seguimiento B2B propio</div></div>
<div class="flow-arrow"></div>
<div class="flow-step done"><div class="flow-num g">6</div><div class="flow-text">🚢 Coordinación de embarque · DAI o DAS · Seguimiento hasta entrega en Ecuador</div></div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 14 — FLUJO SISTEMA URL ═══════════════════════════ -->
<div class="slide slide-dark" id="s14">
<div class="slide-num">14 / 20</div><div class="slide-section">Flujo del Sistema</div>
<div class="s-wrap" style="align-items:center;text-align:center">
<div class="tag">Flujo del Sistema</div>
<h2 class="stitle">Registro por <em>enlace</em> de Amazon</h2>
<div class="flow" style="margin-top:20px;gap:6px;max-width:680px">
<div class="flow-step active"><div class="flow-num">1</div><div class="flow-text">Cliente pega URL del producto de Amazon en el portal</div></div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num">2</div><div class="flow-text">Sistema llama Amazon SP-API (o scraping) · Extrae: nombre, precio, peso, imagen</div></div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num">3</div><div class="flow-text">Pre-llena el formulario automáticamente con los datos extraídos</div></div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num">4</div><div class="flow-text">Sistema calcula: flete + seguro 2% + FODINFA 0.5% + IVA 15% + Arancel por categoría</div></div>
<div class="flow-arrow"></div>
<div class="flow-step decision"><div class="flow-num y">5</div><div class="flow-text">Muestra desglose completo al cliente · Cliente confirma y paga en línea</div></div>
<div class="flow-arrow"></div>
<div class="flow-step done"><div class="flow-num g">6</div><div class="flow-text">✅ Tracking ID generado · Correo de confirmación · Estado → REGISTRADO</div></div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 15 — CALCULADORA SENAE ═══════════════════════════ -->
<div class="slide slide-dark" id="s15">
<div class="slide-num">15 / 20</div><div class="slide-section">Calculadora SENAE</div>
<div class="s-wrap" style="text-align:center">
<div class="tag">Cálculo de Impuestos</div>
<h2 class="stitle">Categorías <em>SENAE</em> · Fórmulas</h2>
<div class="senae-cats" style="margin-top:20px">
<div class="cat-card" style="background:rgba(16,185,129,.1);border:1px solid rgba(16,185,129,.3)">
<div class="cat-name" style="color:#6EE7B7">Régimen 4×4</div>
<div class="cat-rate" style="color:#10B981">0% Arancel</div>
<div class="cat-desc" style="color:rgba(255,255,255,.6)">Hasta 4 envíos/año · máx. $400 · máx. 4 kg · Proceso simplificado automático</div>
</div>
<div class="cat-card" style="background:rgba(59,130,246,.1);border:1px solid rgba(59,130,246,.3)">
<div class="cat-name" style="color:#93C5FD">Categoría B</div>
<div class="cat-rate" style="color:#3B82F6">10%</div>
<div class="cat-desc" style="color:rgba(255,255,255,.6)">Bienes de consumo general fuera del régimen 4×4 · + FODINFA + IVA</div>
</div>
<div class="cat-card" style="background:rgba(255,107,0,.1);border:1px solid rgba(255,107,0,.3)">
<div class="cat-name" style="color:#FDB87A">Categoría C</div>
<div class="cat-rate" style="color:#FF6B00">20%</div>
<div class="cat-desc" style="color:rgba(255,255,255,.6)">Textiles, calzado, artículos del hogar · + FODINFA + IVA</div>
</div>
<div class="cat-card" style="background:rgba(139,92,246,.1);border:1px solid rgba(139,92,246,.3)">
<div class="cat-name" style="color:#C4B5FD">Categoría D</div>
<div class="cat-rate" style="color:#8B5CF6">015%</div>
<div class="cat-desc" style="color:rgba(255,255,255,.6)">Electrónicos, telecomunicaciones · Puede requerir certificación INEN</div>
</div>
</div>
<div class="formula" style="margin-top:20px;text-align:left">
<span class="comment">// Peso a cobrar</span>
<span class="result">Peso_final</span> = MAX(peso_real, <span class="value">(largo × ancho × alto) / 139</span>)
<span class="comment">// Costos</span>
Flete = Peso_final × <span class="value">$3.50/lb</span>
Seguro = valor_declarado × <span class="value">0.02</span>
FODINFA = valor_declarado × <span class="value">0.005</span>
Arancel = valor_declarado × <span class="value">% categoría</span>
IVA = (valor + FODINFA + Arancel) × <span class="value">0.15</span>
<span class="result">TOTAL</span> = Flete + Seguro + FODINFA + Arancel + IVA</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 16 — FLUJO NOTIFICACIONES ═══════════════════════════ -->
<div class="slide slide-dark" id="s16">
<div class="slide-num">16 / 20</div><div class="slide-section">Flujo del Sistema</div>
<div class="s-wrap" style="align-items:center">
<div class="tag">Flujo de Notificaciones</div>
<h2 class="stitle" style="text-align:center">Notificaciones <em>automáticas</em> multicanal</h2>
<div class="g2" style="margin-top:32px;max-width:800px;align-items:start">
<div class="flow" style="gap:6px">
<div class="flow-step active"><div class="flow-num">1</div><div class="flow-text">Cambio de estado del paquete en base de datos</div></div>
<div class="flow-arrow"></div>
<div class="flow-step active"><div class="flow-num">2</div><div class="flow-text">Sistema detecta el evento y activa el motor de notificaciones</div></div>
<div class="flow-arrow"></div>
<div class="flow-step done"><div class="flow-num g">3</div><div class="flow-text">Envío paralelo a todos los canales configurados del usuario</div></div>
<div class="flow-arrow"></div>
<div class="flow-step done"><div class="flow-num g">4</div><div class="flow-text">Log de auditoría inmutable registra el evento con timestamp UTC</div></div>
</div>
<div style="display:flex;flex-direction:column;gap:12px">
<div class="card" style="padding:14px 18px;display:flex;gap:12px;align-items:center">
<span style="font-size:1.4rem">✉️</span>
<div><strong style="font-size:.85rem;display:block">Correo electrónico</strong><span style="font-size:.75rem;color:rgba(255,255,255,.45)">Detalle completo del estado · SendGrid / SES</span></div>
</div>
<div class="card" style="padding:14px 18px;display:flex;gap:12px;align-items:center">
<span style="font-size:1.4rem">💬</span>
<div><strong style="font-size:.85rem;display:block">WhatsApp Business API</strong><span style="font-size:.75rem;color:rgba(255,255,255,.45)">Mensaje directo al número del cliente</span></div>
</div>
<div class="card" style="padding:14px 18px;display:flex;gap:12px;align-items:center">
<span style="font-size:1.4rem">📱</span>
<div><strong style="font-size:.85rem;display:block">SMS</strong><span style="font-size:.75rem;color:rgba(255,255,255,.45)">Resumen corto · SMS Gateway API</span></div>
</div>
<div class="card" style="padding:14px 18px;display:flex;gap:12px;align-items:center">
<span style="font-size:1.4rem">🔔</span>
<div><strong style="font-size:.85rem;display:block">Push (portal web)</strong><span style="font-size:.75rem;color:rgba(255,255,255,.45)">Notificación en tiempo real en el dashboard</span></div>
</div>
</div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 17 — INTEGRACIONES ═══════════════════════════ -->
<div class="slide slide-blue" id="s17">
<div class="slide-num">17 / 20</div><div class="slide-section">Integraciones</div>
<div class="s-wrap" style="text-align:center">
<div class="tag">Integraciones Externas</div>
<h2 class="stitle">9 integraciones <em>clave</em></h2>
<div class="int-grid" style="margin-top:28px">
<div class="int-item">
<span class="int-icon">🛒</span>
<div><span class="int-name">Amazon SP-API</span><span class="int-proto">REST API · Datos del producto</span></div>
</div>
<div class="int-item">
<span class="int-icon">🛃</span>
<div><span class="int-name">WebService SENAE</span><span class="int-proto">SOAP / REST · Declaraciones DSI/DAI</span></div>
</div>
<div class="int-item">
<span class="int-icon">💳</span>
<div><span class="int-name">Pasarela de Pagos</span><span class="int-proto">REST API · Stripe / PayPhone</span></div>
</div>
<div class="int-item">
<span class="int-icon">💬</span>
<div><span class="int-name">WhatsApp Business</span><span class="int-proto">REST API · Notificaciones + Soporte</span></div>
</div>
<div class="int-item">
<span class="int-icon">✉️</span>
<div><span class="int-name">Email (SendGrid/SES)</span><span class="int-proto">SMTP / REST · Notificaciones</span></div>
</div>
<div class="int-item">
<span class="int-icon">📱</span>
<div><span class="int-name">SMS Gateway</span><span class="int-proto">REST API · Notificaciones cortas</span></div>
</div>
<div class="int-item">
<span class="int-icon">🚚</span>
<div><span class="int-name">Courier (FedEx/DHL)</span><span class="int-proto">REST API · Estado físico del envío</span></div>
</div>
<div class="int-item">
<span class="int-icon">🏭</span>
<div><span class="int-name">Software de Bodega</span><span class="int-proto">REST API · Sync estados en tiempo real</span></div>
</div>
<div class="int-item">
<span class="int-icon">🏷️</span>
<div><span class="int-name">Normas INEN</span><span class="int-proto">REST / Web · Certificaciones</span></div>
</div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 18 — REQS NO FUNCIONALES ═══════════════════════════ -->
<div class="slide slide-dark" id="s18">
<div class="slide-num">18 / 20</div><div class="slide-section">Calidad</div>
<div class="s-wrap" style="text-align:center">
<div class="tag">Requerimientos No Funcionales</div>
<h2 class="stitle">Calidad y <em>Rendimiento</em></h2>
<div class="nf-list" style="margin-top:24px">
<div class="nf-item"><span class="nf-key">Disponibilidad</span><span class="nf-val">99.9% uptime (SLA garantizado)</span></div>
<div class="nf-item"><span class="nf-key">Tiempo de respuesta</span><span class="nf-val">{"<"} 2 segundos para operaciones normales</span></div>
<div class="nf-item"><span class="nf-key">Escalabilidad</span><span class="nf-val">Multi-tenant · preparado para múltiples empresas y miles de usuarios</span></div>
<div class="nf-item"><span class="nf-key">Seguridad</span><span class="nf-val">ISO/IEC 27001 · OWASP Top 10 · TLS 1.3 · AES-256 · MFA obligatorio · WAF</span></div>
<div class="nf-item"><span class="nf-key">Accesibilidad</span><span class="nf-val">100% web · responsive mobile-first · accesible desde cualquier dispositivo</span></div>
<div class="nf-item"><span class="nf-key">Respaldo</span><span class="nf-val">Backups automáticos diarios · retención mínima 90 días</span></div>
<div class="nf-item"><span class="nf-key">Recuperación</span><span class="nf-val">RTO {"<"} 4 horas · RPO {"<"} 1 hora</span></div>
<div class="nf-item"><span class="nf-key">Auditoría</span><span class="nf-val">Todos los eventos registrados con trazabilidad completa e inmutable</span></div>
<div class="nf-item"><span class="nf-key">Multi-idioma</span><span class="nf-val">Español (clientes Ecuador) · Inglés (operadores NJ)</span></div>
<div class="nf-item"><span class="nf-key">Zona horaria</span><span class="nf-val">EST (New Jersey) y ECT (Ecuador) — mostrado según ubicación del usuario</span></div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 19 — NAVEGACIÓN WEB ═══════════════════════════ -->
<div class="slide slide-dark" id="s19">
<div class="slide-num">19 / 20</div><div class="slide-section">Estructura Web</div>
<div class="s-wrap" style="text-align:center">
<div class="tag">Navegación del Sitio</div>
<h2 class="stitle">Estructura de <em>rutas</em></h2>
<div class="g2" style="margin-top:28px;max-width:860px;align-items:start">
<div>
<p style="font-size:.78rem;font-weight:700;color:rgba(255,255,255,.35);margin-bottom:12px;letter-spacing:.08em;text-transform:uppercase">Área Pública</p>
<div style="font-family:'JetBrains Mono',monospace;font-size:.78rem;background:rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.1);border-radius:10px;padding:18px 20px;line-height:2.2;color:rgba(255,255,255,.7)">
<span style="color:#7AADFF">/ </span>Landing Page principal<br/>
<span style="color:#7AADFF">/como-funciona</span><br/>
<span style="color:#7AADFF">/calculadora</span><br/>
<span style="color:#7AADFF">/tarifas</span><br/>
<span style="color:#7AADFF">/quienes-somos</span><br/>
<span style="color:#FDB87A">/casillero/</span>como-usar · calculadora · registro<br/>
<span style="color:#FF6B00">/carga-pesada/</span>como-funciona · cotizacion · inen<br/>
<span style="color:#6EE7B7">/tracking</span> <span style="color:rgba(255,255,255,.3)">← sin login</span>
</div>
</div>
<div>
<p style="font-size:.78rem;font-weight:700;color:rgba(255,255,255,.35);margin-bottom:12px;letter-spacing:.08em;text-transform:uppercase">Área Autenticada</p>
<div style="font-family:'JetBrains Mono',monospace;font-size:.78rem;background:rgba(0,0,0,.4);border:1px solid rgba(0,87,255,.3);border-radius:10px;padding:18px 20px;line-height:2.2;color:rgba(255,255,255,.7)">
<span style="color:#7AADFF">/portal/dashboard</span><br/>
<span style="color:#7AADFF">/portal/mi-casillero</span> 📦<br/>
<span style="color:#7AADFF">/portal/pre-alerta</span> 📄<br/>
<span style="color:#7AADFF">/portal/mis-paquetes</span> 🔍<br/>
<span style="color:#7AADFF">/portal/calculadora</span> 💰<br/>
<span style="color:#7AADFF">/portal/perfil</span><br/>
<span style="color:#C4B5FD">/admin/</span>usuarios · tarifas · reportes<br/>
<span style="color:#FDE68A">/bodega/</span>paquetes · verificacion
</div>
</div>
</div>
</div>
</div>
<!-- ═══════════════════════════ SLIDE 20 — CIERRE ═══════════════════════════ -->
<div class="slide slide-hero" id="s20">
<div class="slide-num">20 / 20</div>
<div class="s-wrap" style="text-align:center">
<div class="tag">Resumen</div>
<h1 class="hero-title" style="font-size:clamp(2rem,5vw,3.5rem);max-width:700px">
Un sistema completo, seguro y <em>escalable</em>
</h1>
<p class="sub" style="text-align:center;margin-top:16px">
Diseñado para crecer con Moraworld Imports desde el primer día.
</p>
<div class="ending-grid">
<div class="ending-item"><span>🏗️</span><p>Arquitectura Multi-Tenant ISO 27001</p></div>
<div class="ending-item"><span>👥</span><p>6 roles con permisos granulares</p></div>
<div class="ending-item"><span>📦</span><p>8 módulos integrados</p></div>
<div class="ending-item"><span>🔁</span><p>5 flujos de usuario documentados</p></div>
<div class="ending-item"><span>🛃</span><p>Integración directa con SENAE</p></div>
<div class="ending-item"><span>📍</span><p>11 estados de tracking en tiempo real</p></div>
<div class="ending-item"><span>🔗</span><p>9 integraciones externas</p></div>
<div class="ending-item"><span>💰</span><p>Calculadora SENAE (4x4, B, C, D)</p></div>
<div class="ending-item"><span>🌐</span><p>100% web · mobile-first · responsive</p></div>
</div>
<div style="margin-top:32px;display:flex;gap:12px;flex-wrap:wrap;justify-content:center">
<span style="background:rgba(0,87,255,.2);border:1px solid rgba(0,87,255,.4);color:#7AADFF;font-size:.75rem;font-weight:700;padding:6px 16px;border-radius:999px;">ISO/IEC 27001</span>
<span style="background:rgba(16,185,129,.15);border:1px solid rgba(16,185,129,.3);color:#6EE7B7;font-size:.75rem;font-weight:700;padding:6px 16px;border-radius:999px;">SENAE Autorizado</span>
<span style="background:rgba(255,107,0,.15);border:1px solid rgba(255,107,0,.3);color:#FDB87A;font-size:.75rem;font-weight:700;padding:6px 16px;border-radius:999px;">Cumplimiento INEN</span>
<span style="background:rgba(139,92,246,.15);border:1px solid rgba(139,92,246,.3);color:#C4B5FD;font-size:.75rem;font-weight:700;padding:6px 16px;border-radius:999px;">LOPDP Ecuador</span>
<span style="background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);color:rgba(255,255,255,.7);font-size:.75rem;font-weight:700;padding:6px 16px;border-radius:999px;">Multi-Tenant</span>
</div>
<p style="margin-top:28px;font-size:.75rem;color:rgba(255,255,255,.2);font-family:'JetBrains Mono',monospace">
Moraworld Imports S.A.S. · Mora Global Import LLC · v1.1 · Mayo 2026
</p>
</div>
</div>
</div><!-- /deck -->
<script>
const TOTAL = 20;
let cur = 1;
function go(n){
const prev = document.getElementById('s'+cur);
if(prev) prev.classList.add('exit');
setTimeout(()=>{ if(prev){ prev.classList.remove('active','exit'); }}, 480);
cur = Math.max(1, Math.min(n, TOTAL));
const next = document.getElementById('s'+cur);
if(next){ next.classList.add('active'); }
document.getElementById('progress').style.width = ((cur/TOTAL)*100)+'%';
document.getElementById('counter').textContent = cur + ' / ' + TOTAL;
document.getElementById('btn-prev').style.opacity = cur===1 ? '.2':'1';
document.getElementById('btn-prev').style.pointerEvents = cur===1 ? 'none':'all';
document.getElementById('btn-next').style.opacity = cur===TOTAL ? '.2':'1';
document.getElementById('btn-next').style.pointerEvents = cur===TOTAL ? 'none':'all';
}
function next(){ go(cur+1); }
function prev(){ go(cur-1); }
document.addEventListener('keydown', e=>{
if(e.key==='ArrowRight'||e.key==='ArrowDown'||e.key===' ') { e.preventDefault(); next(); }
if(e.key==='ArrowLeft'||e.key==='ArrowUp') { e.preventDefault(); prev(); }
if(e.key==='Home') go(1);
if(e.key==='End') go(TOTAL);
});
// Touch swipe
let tx=0;
document.addEventListener('touchstart',e=>{ tx=e.touches[0].clientX; },{passive:true});
document.addEventListener('touchend',e=>{
const dx=tx-e.changedTouches[0].clientX;
if(Math.abs(dx)>50){ dx>0?next():prev(); }
},{passive:true});
// Init
go(1);
</script>
</body>
</html>