feat(alta): borrador, pre-llenado desde cotización y liga remota de firma

- Borradores por vendedor (guardar/continuar/eliminar), se limpia al registrar
- Pre-llenado con ?cotizacion=<id> (cliente, contacto, proyecto, montos);
  botón 'Iniciar alta' en Mis cotizaciones del cotizador
- Liga remota pública /client/firma/<token> (JWT scope firma-remota, 72h,
  rate limit, solo datos mínimos sin PLD): firma digital + subida de
  documentos que prende checkboxes en Monday Apartado
- Tokens de liga no sirven como sesión y viceversa
- Tests: api 228, alta 82, cotizador 82
This commit is contained in:
2026-08-28 07:29:22 +00:00
parent 4f31d1c171
commit 59944668a8
18 changed files with 1589 additions and 33 deletions

View File

@@ -7,17 +7,24 @@ import '@fontsource/inter/500.css'
import '@fontsource/inter/700.css'
import './index.css'
import AltaClientePage from './pages/AltaClientePage'
import FirmaRemotaPage from './pages/FirmaRemotaPage'
import AuthGate from './components/AuthGate'
createRoot(document.getElementById('root')!).render(
<StrictMode>
<BrowserRouter basename="/client">
<AuthGate>
<Routes>
<Route path="/" element={<AltaClientePage />} />
<Route path="*" element={<AltaClientePage />} />
</Routes>
</AuthGate>
<Routes>
{/* Ruta pública de la liga remota: sin login (el token va en la URL) */}
<Route path="/firma/:token" element={<FirmaRemotaPage />} />
<Route
path="*"
element={
<AuthGate>
<AltaClientePage />
</AuthGate>
}
/>
</Routes>
</BrowserRouter>
</StrictMode>,
)