@startuml uml-package-diagram !include _style.iuml skinparam packageStyle rectangle title Diagrama UML de Paquetes — Monorepo ExpressMX top to bottom direction package "apps" as appsGroup { package "@expressmx/web\nNext.js 16 / RSC" as web <> package "@expressmx/mobile-client\nExpo / RN" as mclient <> package "@expressmx/mobile-provider\nExpo / RN" as mprov <> } package "packages" as packagesGroup { package "@expressmx/database\npg + queries SQL" as db <> package "@expressmx/validations\nZod schemas" as validations <> package "@expressmx/types\ntipos compartidos" as types <> package "@expressmx/utils\nhelpers puros" as utils <> } package "packages/config" as configGroup { package "@expressmx/config-typescript" as tsConfig <> package "@expressmx/config-eslint" as esConfig <> } package "migrations" as migrationsGroup <> { note as migNote 001 auth_credentials_and_reset 002 fix_usuarios_uuid_default 003 pins_soporte_cliente 004 rbac_permisos_zero_trust 005 audit_correlacion 006 support_itsm end note } package "docs" as docsGroup <> { note as docsNote architecture errors mobile-client sessions auth-recovery design-source end note } package "infra (no implementado)" as infraGroup <> { note as infraNote docker (vacio) k8s (vacio) end note } ' Runtime dependencies web ..> db web ..> validations web ..> types web ..> utils mclient ..> validations mclient ..> types mclient ..> utils mprov ..> validations mprov ..> types mprov ..> utils types ..> validations ' Dev dependencies (resumido en flecha agregada) appsGroup ..> tsConfig : <> appsGroup ..> esConfig : <> packagesGroup ..> tsConfig : <> ' Logical db ..> migrationsGroup : <> docsGroup ..> packagesGroup : <> docsGroup ..> appsGroup : <> note right of mclient Apps moviles NUNCA importan @expressmx/database (regla de arquitectura). Hablan al backend por REST + JWT. end note footer Fuente: pnpm-workspace.yaml + apps/*/package.json + packages/*/package.json @enduml