feat(core,crm): gestión de compañías en el CRM + soporte hub_admin sin tenant

Las compañías (a76.company) se gestionan en el CRM, ligadas a un tenant del
Workspace. Cambios:

- my-companies: por MEMBRESÍA (user_tenants ∪ user_company_roles), así el hub_admin
  sin tenant en el token ve las compañías que creó/se le asignaron; para usuarios
  con tenant, autocrea una por defecto en el primer acceso.
- POST /auth/companies: da de alta una compañía bajo un tenant + asigna al usuario.
  GET /auth/assignable-tenants: tenants elegibles (hub_admin: todos; usuario: el suyo).
- security.validate_access_to_resource: si el token no trae tenant (hub_admin),
  resuelve el tenant desde la compañía activa (a76.company.tenant_id) → puede operar
  por compañía seleccionada.
- set-active: fija sso_tenant_id/pub con el tenant de la compañía (override).
- Pantalla "Compañías" (nav) para crear/listar/seleccionar.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ernesto Herrera
2026-07-17 11:44:36 -06:00
parent 0b6848bbdd
commit 63ad2e2ecd
6 changed files with 335 additions and 59 deletions

View File

@@ -7,6 +7,7 @@ import {
Ship,
Receipt,
Building2,
Building,
} from '@lucide/svelte';
export type SystemContext = 'fixed_asset' | 'inventory';
@@ -70,6 +71,11 @@ export function getNavMain(): NavMainItem[] {
{ title: 'Facturas y cobranza', url: '/dashboard/fin/facturas' },
],
},
{
title: 'Compañías',
url: '/dashboard/companias',
icon: Building,
},
{
title: 'Workspace',
url: '/dashboard/workspace/organizaciones',