Admin
Panel de operación del laboratorio (Lab OS) — Next.js 16 App Router, Tailwind 4, shadcn/ui. Route groups, server actions y rutas API internas.
El admin (apps/admin) es el panel de operación que usa cada laboratorio (el "Lab OS"):
recepción, facturación, catálogo, resultados, inventario, caja, turnos, etc. Es una app por
tenant: el usuario inicia sesión y trabaja sobre su laboratorio.
| Stack | Next.js 16 (App Router), Tailwind 4, shadcn/ui |
| Puerto local | 3000 |
| Producción | admin.ixiclinic.com (Vercel) |
| Paquete | @ixiclinic/admin |
Nota: Esta versión de Next.js (16.2.1) tiene cambios de ruptura frente al conocimiento habitual. Antes de escribir código de Next, lee la guía relevante en
node_modules/next/dist/docs/.
Route groups (apps/admin/src/app/)
La app usa route groups para separar layouts:
| Grupo | Contenido |
|---|---|
(auth)/ | login, register (sin sidebar). |
(admin)/ | Gestión super-admin de tenants: admin/, admin/tenants, admin/support. |
(dashboard)/ | El workspace principal del tenant (ver abajo). |
(portal)/ | Redirección pública de QR: r/. |
(public)/ | Vistas sin autenticación: kiosk/[id], screen/[id]. |
Secciones del (dashboard)
dashboard, billing (incluye la subsección fiscal billing/dgii), catalog, patients,
orders, results, inventory, settings, qc, reports, doctors, import, website,
appointments, samples, queue, companies, notifications, recetas, services,
encuentros, actividades, y workspace/[id] (la pantalla del escritorio del Lab OS).
Comunicación con el API
Todo el acceso al API es server-side, vía apps/admin/src/lib/api-client.ts
(apiGet, apiPost, apiPatch, apiPut, apiDelete). Las cabeceras de auth se inyectan
desde cookies httpOnly y hay refresco automático de token ante un 401. No hay llamadas al API
desde el cliente: toda la obtención de datos pasa por server actions.
Server actions (46)
Viven en apps/admin/src/actions/ — una por dominio. Por ejemplo: auth.ts, billing.ts,
catalog.ts, orders.ts, results.ts, patients.ts, inventory.ts, cash.ts, queue.ts,
notifications.ts, ecf.ts, encounters.ts, programs.ts, prescriptions.ts, printing.ts,
chat.ts, impersonation.ts, preferences.ts, website.ts, slider.ts, etc.
Regla no negociable: no uses estado de cliente ni
fetchdesde el navegador para datos del API. Crea/usa una server action enapps/admin/src/actions/.
Rutas API de Next (apps/admin/src/app/api/)
Además de las server actions, el admin tiene rutas API de Next para tareas que no encajan en una action (generación de binarios, búsqueda):
| Ruta | Para qué |
|---|---|
results/[orderId]/pdf, results/qr/[qr]/pdf | PDF de resultados (@react-pdf/renderer). |
invoices/[invoiceId]/pdf | PDF de factura. |
cash/sessions/[sessionId]/pdf | PDF de cierre de caja. |
encounters/[encounterId]/pdf | PDF del encuentro clínico. |
templates/[id]/preview, templates/preview-draft | Previsualización de plantillas. |
search | Búsqueda global. |
Nota: La lógica fiscal e-CF (DGII) ya no vive en
apps/admin/src/lib/dgii. La generación y firma del XML está en el móduloecfdel API; el admin solo tiene la actionactions/ecf.tsy la UI en(dashboard)/billing/dgii.
UI stack
shadcn/ui (estilo base-nova) sobre @base-ui/react + Tailwind 4 + CVA
(class-variance-authority). Los formularios usan react-hook-form con
@hookform/resolvers/zod; las tablas usan @tanstack/react-table; los gráficos recharts; las
notificaciones sonner. Tiempo real con socket.io-client. Los componentes se organizan por
dominio en apps/admin/src/components/.
Los validadores Zod viven en apps/admin/src/lib/validators/ (auth, billing, catalog,
insurance, inventory, orders, patient, qc, results), con z.infer para extraer los
tipos.
Auth y middleware
El admin usa cookies httpOnly para los JWT. El control de acceso (auth + RBAC + allowlist de
rutas públicas como /r, /kiosk, /screen) vive en apps/admin/src/proxy.ts (en Next 16 es
proxy.ts, no middleware.ts). Detalle del flujo en
Autenticación.
Añadir una pantalla
Para el paso a paso (ruta, action, validador, tabla), ver Añadir una pantalla al admin.
Build y despliegue
Despliega automáticamente en Vercel al hacer push a main. Ver Operaciones.
API
Backend REST de ixiclinic — Fastify 5, Drizzle ORM, PostgreSQL y Zod 4. Patrón de módulos, cadena de plugins, tiempo real y despliegue.
Console
Panel SaaS interno de ixiclinic — mismo stack que el admin pero para gestionar clientes, planes, demos y organizaciones. Cookies saas- y endpoints /api/saas/*.