Paso a paso
Dos de las cinco pestañas con candado rojo de Configuración —Empresas y Convenios Marco— son la consola con la que el equipo de Marko da de alta clientes, les asigna plan, cobra créditos y mantiene el catálogo global de convenios marco que después cada empresa elige como «adjudicados» en Mi Empresa. No es una pantalla para un proveedor del Estado: es infraestructura interna de Marko sobre la plataforma entera. Este manual recorre las dos pestañas sin dejar nada creado ni modificado en QA, y cierra con dónde vive —fuera de esta pantalla— el otro acceso transversal, el rol Staff.
Saber moverte por el listado de empresas de la plataforma, sus siete acciones por fila, y el catálogo global de convenios marco — sin tocar nada real.
Sólo cuentas con el flag admin de plataforma de Marko. Ni el rol Administrador de una empresa (que por dentro es MANAGER) ni el rol staff por sí solo llegan a esta pestaña completa.
Nada que preparar en la pantalla. Fuera de ella, criterio: desde aquí se crean y modifican empresas y convenios de toda la plataforma de verdad.
~10 minutos para recorrer las dos pestañas completas sin guardar nada.
admin de Marko, Configuración muestra 20 pestañas en vez de 15: las cinco
marcadas en rojo con un candado —Perfiles de Usuario, Empresas, General, Convenios
Marco y Catálogo BQ— son exclusivas de esa marca. Un Administrador de empresa normal ve las otras 15
y ninguna de esas cinco; documentado con detalle en el
manual de Perfiles de Usuario, que cubre otra de las cinco.Abre Configuración en el menú lateral y pulsa la pestaña Empresas, marcada en rojo con un candado, a continuación de Perfiles de Usuario.
Escribe en Buscar empresa para filtrar por nombre, RUT o código, o elige un estado de pago del desplegable.
id del documento en
la base de datos); el filtro de estado ofrece Gratis, Trial, Activo, Suspendido,
Vencido y Sin estado — esta última para empresas antiguas que nunca llegaron a tener el campo.Pulsa + Crear empresa. Se abre la ventana Nueva empresa, con el Paso 1: Validar empresa — el método por defecto es OC Ganada.
id de la empresa.Cambia el Método de validación a RUT de la empresa.
Ej: 76123456-7.Escribe un RUT y pulsa Validar empresa.
validateCompanyFromRUT responde 403 en el ambiente de
QA y la pantalla pinta el código crudo del error de Firebase en vez de un mensaje legible. Con OC Ganada
y un código inventado, el aviso es más claro: «No se encontraron datos válidos para la OC … en la API
OCDS.» — ambos verificados en vivo, sin completar nunca la validación con datos reales.finalizeCompanyCreation, no exige sesión autenticada del lado del servidor. Por ambas razones el
formulario se abrió, se probó con datos inventados y se cerró sin pulsar Crear: no quedó ninguna empresa
nueva en QA.En cualquier fila, pulsa el botón ⋮ del extremo derecho.
Pulsa Editar para revisar los datos de la empresa: razón social, nombre comercial, RUT, giro, dirección, comuna y, más abajo, los datos de contacto.
Vuelve al menú ⋮ y pulsa Configurar Plan.
Pulsa Configurar compras ágiles y baja hasta Días mínimos antes del cierre para notificar.
& y $, contexto
del negocio), más un campo que sólo aparece aquí: «Días mínimos antes del cierre para notificar»,
con la nota «Solo para admin: define con cuantos dias de anticipacion minima se envia una
notificacion.»Pulsa Cargar créditos.
Pulsa Habilitar indicadores operativos.
company_id, y avisa que el prerrequisito es haber corrido antes «Migrar datos a BigQuery»
para esa empresa. Ninguno de los dos se ejecutó para este manual.Pulsa Acuerdo de Servicio.
Vuelve a Configuración y pulsa la pestaña Convenios Marco, también marcada en rojo con candado.
configuration/convenios_marco), no dentro de ninguna empresa. Lo que
edites aquí queda disponible para que cualquier empresa de la plataforma lo marque como «adjudicado» en
Mi Empresa.Baja para ver la tabla del catálogo.
Pulsa + Agregar convenio.
ej: aseo-2025), Nombre (ej: Aseo (2025)) y URL de
productos (https://…). Al confirmar con Crear convenio el ID sólo acepta
minúsculas, números y guiones; el Nombre pide 3 caracteres como mínimo; la URL tiene que empezar
por http:// o https://. Si el ID ya existe en el catálogo, el aviso dice «Ya existe
un convenio con ese ID.» y no crea nada.Cierra esa ventana y pulsa Editar sobre un convenio ya existente.
Pulsa Eliminar sobre una fila.
El otro acceso transversal de Marko —además del flag admin que abre esta pestaña— es
staff: el equipo comercial interno, que ve todas las empresas pero sólo sus datos comerciales, nunca
los operativos. Vale la pena aclararlo aquí porque comparte pestaña con este manual: un usuario staff puro
(sin admin y sin rol en ninguna empresa) entra a Configuración y ve únicamente la
pestaña Empresas — company-settings.component.ts se la recorta a esa sola pestaña, con sólo
dos de las siete acciones habilitadas: Configurar Plan y Acuerdo de Servicio. Nada de Crear,
Editar, Configurar compras ágiles, Cargar créditos, Migrar a BigQuery ni
Indicadores operativos, y ninguna otra pestaña del hub.
No hay ninguna casilla en la interfaz para asignarlo. A diferencia de los roles de empresa —que se
marcan desde Cuentas → Administrar roles— el flag staff se escribe a mano, directo en el
documento de la cuenta:
accounts/{uid}
staff: true // habilita el acceso transversal comercial
admin: false // NO es administrador de plataforma
active: true // una cuenta desactivada no opera, aunque sea staff
roles: {} // sin roles: no pertenece a ninguna empresa cliente
Es a propósito: son cuentas del equipo interno de Marko, no de clientes, y por eso no viven en un flujo de
alta pensado para invitar personas a una empresa. Si a una cuenta staff se le asigna además un rol
en alguna empresa, deja de comportarse como «staff puro» y pasa a navegar como un usuario normal de esa empresa
— pierde el acceso transversal.
| Acceso | Alcance | Ve companies con el SDK | Credenciales de integración |
|---|---|---|---|
roles[companyId] | Una empresa | Sólo la propia | ❌ |
staff: true | Todas, sólo campos comerciales, vía Cloud Function | ❌ (las reglas se lo niegan) | ❌ |
admin: true | Todas, documento completo | ✅ | ✅ |
admin para estoLas reglas de
Firestore le dan a admin lectura y escritura sobre companies/{id}/{document=**} completo
— facturas, banco, inventario, todo. Fusionar ambos roles, o darle a staff el mismo alcance,
expondría al equipo comercial datos operativos de cada cliente que no necesita para vender. El detalle completo
—auditoría en staffAccessLog, guards de navegación, qué ve y qué no— es del manual dedicado al CRM,
no de éste.Las dos pestañas de este manual dicen «Empresas» y «Convenios Marco», sin nada en el nombre que avise que son distintas del resto de Configuración. Por dentro sí lo son.
| Punto | Detalle |
|---|---|
| Ruta | company-settings → pestañas Empresas y Convenios Marco, marcadas en rojo con candado. |
| Quién las ve completas | Sólo cuentas con admin: true — el flag de plataforma. company-settings.component.ts lo resuelve con un atajo explícito: if (this.user.admin) return true; antes de mirar ningún rol de empresa. |
| Un Administrador de empresa | No las ve completas. Lo que la app llama «Administrador» de una empresa guarda por dentro el rol MANAGER; ninguna cuenta de empresa llega a tener el string "ADMIN" en roles[companyId], así que la única puerta real es el flag de plataforma. |
Un usuario staff puro | Ve sólo Empresas, recortada a dos acciones (Plan y Acuerdo de Servicio). Ver «Rol Staff» arriba. |
| Alcance | Toda la plataforma de Marko, no una empresa. Empresas lista y modifica cualquier cliente; Convenios Marco es un catálogo global compartido por todos. |
deleteCompany() sigue en el código
(companies.component.ts) pero ningún botón lo llama — se ve en el HTML de la fila
(companies.component.html) que ese botón fue retirado. Hoy no hay forma de borrar una empresa desde
Configuración.validateCompanyFromRUT); validar por OC Ganada exige un código de OC real y ganado, que este
manual nunca usó por el riesgo de reclamar una empresa ajena.finalizeCompanyCreation es
un onCall que no comprueba context.auth; en teoría cualquiera que lo invoque con un
companyDataInput válido puede crear una empresa, sin pasar por esta pantalla ni por ninguna cuenta
de plataforma.| Punto | Regla |
|---|---|
| Dónde está | Configuración → Empresas / Convenios Marco, pestañas marcadas en rojo con candado. |
| Quién entra completo | Sólo cuentas con admin: true (flag de plataforma). |
| Acceso recortado | staff: true puro → sólo Empresas, sólo Configurar Plan y Acuerdo de Servicio. |
| Acciones por empresa | Editar, Configurar compras ágiles, Configurar Plan, Acuerdo de Servicio, Cargar créditos, Migrar datos a BigQuery, Habilitar/Configurar indicadores operativos. |
| Acción que falta | Eliminar empresa — código muerto, sin botón. |
| Estados de pago | Gratis, Trial, Activo, Suspendido, Vencido, Sin estado (empresas sin el campo). |
| Convenios Marco — alcance | Catálogo global en configuration/convenios_marco, compartido por toda la plataforma. |
| Convenios Marco — validaciones | ID único en minúsculas/números/guiones (^[a-z0-9-]+$); Nombre mínimo 3 caracteres; URL debe empezar por http:// o https://. |
| Convenios Marco — borrado | Definitivo, sin soft delete. |
| Rol Staff — dónde se asigna | A mano, en accounts/{uid}.staff = true. No hay casilla en la interfaz. |
| Qué NO hace por sí sola | No borra empresas (no existe el botón); no valida en línea; no confirma antes de migrar a BigQuery ni de activar indicadores. Ver «Lo que todavía no hace». |
| Lo que ves | Qué pasa y qué hacer |
|---|---|
| No tengo las pestañas Empresas ni Convenios Marco | Tu cuenta no lleva el flag admin de plataforma. Si eres del equipo comercial y sólo necesitas plan y Acuerdo de Servicio, pide el flag staff en vez de admin. |
| Sólo veo la pestaña Empresas, y con dos acciones | Es lo esperado para una cuenta staff pura: da y quita a propósito. Ver «Rol Staff» arriba. |
| Al validar por RUT sale «internal» | No es tu error: validateCompanyFromRUT devuelve 403 en QA. Repórtalo en vez de reintentar. |
| Al validar por OC sale «No se encontraron datos válidos para la OC … en la API OCDS.» | El código de OC no existe o la API de Mercado Público no lo tiene indexado todavía (pasa con OC muy recientes). Confírmalo en el portal antes de insistir. |
| Esta empresa ya está creada en Marko | La OC o el RUT ya corresponden a una empresa existente en la plataforma. Búscala en el listado en vez de crearla de nuevo. |
| Por favor, complete todos los campos requeridos. | Falta algún campo obligatorio del formulario; el aviso no dice cuál, salvo que sea el logo (ahí sí hace scroll hasta el campo). |
| Ya existe un convenio con ese ID. | El ID del convenio no es único dentro del catálogo global; cambia el ID (no el nombre) y vuelve a intentar. |
| No se pudo guardar el convenio. / No se pudo eliminar el convenio. | Falló la escritura del catálogo. Vuelve a intentarlo; si insiste, revisa tu conexión. |
| El botón de tres puntos de una fila no abre nada | No visto en este manual — si ocurre, recarga la pestaña antes de reportarlo como bug. |