Staff vs. User: dois conceitos diferentes
O FIRO separa propositadamente duas entidades:
- Staff — a pessoa visível no calendário e na página pública (nome, foto, serviços que faz). É o que o cliente vê quando escolhe "marcar com a Joana".
- User — a conta de login que acede ao backoffice. Tem email, eventualmente Google OAuth, e pertence a um ou mais tenants.
A relação entre os dois é via user_tenant. Isto suporta cenários como:
- O owner que não atende clientes (não é staff visível) mas tem login.
- A profissional que tem login no seu tenant mas não no de uma associação onde também trabalha.
- Profissional sem conta — visível como staff no calendário, sem entrar no sistema.
Os três papéis: owner, manager, staff
Cada user num tenant tem um papel (user_tenant.role):
- Owner — proprietário do tenant. Acesso total: gestão de planos, equipa, configurações, todos os módulos.
- Manager — gestor administrativo. Acesso a operação corrente: marcações, clientes, serviços, relatórios. Tipicamente sem acesso a billing.
- Staff — colaborador com vista limitada à sua agenda e marcações. Não vê o financeiro nem altera configurações.
Permissões dos colaboradores
O dono (ou um gestor com acesso à conta) escolhe, na ficha de cada colaborador, o que ele pode fazer (user_tenant.permissions):
- ver as marcações de toda a equipa;
- confirmar, recusar e alterar marcações;
- criar marcações para outros colaboradores;
- editar os dados dos clientes;
- registar pagamentos (ligado por omissão).
Por omissão o colaborador vê e trata só as suas marcações. A coluna antiga can_approve_bookings deixou de contar.
Horários por dia da semana
StaffSchedule guarda blocos de trabalho para cada profissional, por dia da semana (0–6) com hora de início e fim. Permite:
- Horários repetitivos: terça a sexta, 9h-13h e 14h-19h.
- Múltiplos blocos no mesmo dia (intervalo de almoço fica fora dos slots automaticamente).
- Cada profissional com a sua escala individual.
Horários padrão do tenant
Para arranque rápido, há default_schedules_json ao nível do tenant — um esqueleto que se aplica a novos profissionais.
Ausências e bloqueios
StaffTimeoff regista períodos em que o profissional não está disponível:
- Férias (uma semana ou um mês inteiros).
- Baixa médica.
- Formações ou eventos pontuais.
Cada registo tem start_at, end_at e um reason opcional para registo. Os slots públicos durante o período desaparecem automaticamente.
Bloqueios em modo class
Alternativamente, criam-se marcações em modo class com preço zero para bloquear apenas algumas horas (uma reunião interna, formação curta) sem mexer no horário base.
Login do staff: magic link e Google
O FIRO não usa passwords no fluxo principal — opta por mecanismos mais seguros e sem fricção:
- Magic link por email — o staff insere o email em
/staff/login, recebe um link, clica e está autenticado. Tokens com expiração e log de IP/user agent. - Google OAuth — login com a conta Google profissional/pessoal.
O login centralizado em staff.firo.pt permite que um profissional que trabalha em mais do que um tenant escolha qual abrir após autenticação.
Sincronização Google Calendar (Pro+)
Cada profissional pode ligar a sua conta Google Calendar pessoal. A integração é bidireccional:
- FIRO → Google — todas as marcações criadas aparecem como eventos no Calendar do staff.
- Google → FIRO — eventos criados no Calendar bloqueiam disponibilidade. Tentativas de criar marcação com base nesses eventos são feitas quando relevante.
Detalhes técnicos
- Tokens OAuth (
refresh_token,access_token) ficam cifrados em base de dados. - O staff conecta/desconecta em
/profile/google-calendar. - A funcionalidade pertence ao plano Pro e superiores.
Limites de equipa por plano
O número de profissionais incluídos depende do plano:
- Starter — 1 profissional. Extras avulso a 4,99 €/mês cada.
- Pro — 3 profissionais. Extras avulso a 4,99 €/mês cada.
- Business — profissionais ilimitados.
O método Tenant::maxStaffCount() calcula o limite efectivo somando o plano + extra_user_seats activos.
Vista de calendário individual
Cada user pode personalizar a sua vista de calendário (preferências guardadas em User::calendar_preferences). Suporta:
- Vista por dia, semana ou mês.
- Vista por profissional (uma coluna por staff) ou consolidada.
- Filtros por estado da marcação.
- Drag-and-drop para reagendar.
O que dizer ao lead
A pergunta "tens equipa?" é o ponto onde vendes ou perdes a venda. O modelo do FIRO é mais flexível do que parece à primeira vista.
- "Cada profissional tem a sua agenda real" — não é só ter nome no sistema; tem horários, ausências, serviços que faz e preferências de calendário próprias.
- "Login sem password é uma feature" — para quem usa Excel + WhatsApp, ouvir "magic link, igual ao Notion ou Linear" tira a barreira do "vou esquecer-me da senha".
- "O Google Calendar continua a funcionar" — o profissional não tem de abrir mão das ferramentas dele. A sincronização é bidireccional.
- "Pagas só o que precisas" — Starter para solo, Pro até 3, Business ilimitado. Extras avulso evitam upgrade prematuro de plano.
Âmbito atual & roadmap
O produto evolui semana a semana. Aqui está o que existe hoje e o que está confirmado para chegar.
Hoje no produto
- Roles owner / manager / staff
- Horários por dia da semana, múltiplos blocos
- Ausências (StaffTimeoff) com motivo
- Magic link + Google OAuth
- Google Calendar bidireccional (Pro+)
- Limites por plano + seats extra
- Vista de calendário personalizável
A caminho
- Comissões por profissional e relatório de performance
- Permissões granulares (ler-só, editar-só serviços, etc.)
- Folgas/troca de turnos com workflow
- App mobile dedicada para staff
Perguntas frequentes
Posso ter um profissional que não acede ao sistema?
Sim. Crias o staff sem associar user. Ele aparece no calendário e na página pública mas nunca faz login.
Como controlo o que cada role pode ver?
Hoje há três níveis (owner / manager / staff) + flag de aprovação de marcações. Permissões mais granulares estão no roadmap.
O login funciona em vários tenants ao mesmo tempo?
Sim. Um profissional que trabalhe em dois tenants entra em staff.firo.pt e escolhe qual abrir depois de autenticar.
Posso desligar o Google Calendar quando quiser?
Sim, em /profile/google-calendar. Os tokens são removidos da base imediatamente; eventos já criados ficam no Calendar mas a sincronização pára.
Como funciona a comissão de cada profissional?
Não há módulo de comissões nativo hoje — está no roadmap. Entretanto, os relatórios de marcações por staff dão a base para cálculo manual.
Continua à conversa com a equipa comercial
Mostramos o produto a funcionar, respondemos a dúvidas específicas do teu negócio e ajudamos-te a escolher o plano certo.