Anatomia de um serviço
Cada serviço (Service) tem um conjunto de atributos que cobrem o essencial:
- Nome e descrição em texto livre.
- Foto (
thumbnail_path) usada na página pública. - Duração base (
base_duration_min) — tempo de bloco padrão. - Capacidade (
max_participants) — relevante para aulas e recursos partilhados. - Estado (
active) — para retirar serviços do público sem apagar histórico.
Modelos de preço
O FIRO suporta vários modos de pricing para cobrir realidades diferentes (price_type):
- Fixo
fixed— um valor único. Ex.: corte de cabelo 18 €. - "A partir de"
from— preço base com possibilidade de subir consoante caso. Ex.: pintura "a partir de 35 €". - Intervalo
range— faixa entrebase_priceeprice_max. Ex.: tatuagem entre 60 € e 250 €.
Serviços gratuitos ou sob orçamento
O atributo zero_price_label controla como aparece um serviço com preço zero:
- Free — exibido como "Grátis".
- On quote — exibido como "Sob orçamento".
Útil para diagnósticos iniciais, primeira consulta gratuita, casos que pedem orçamento individual.
IVA e taxas configuráveis
Cada tenant tem o seu próprio conjunto de taxas de IVA (VatRate):
- Por defeito: 0%, 6%, 13%, 23% (taxas portuguesas correntes).
- Cada taxa tem rótulo, ordenação, um flag de "default" e estado activo/inactivo.
- Cada serviço aponta a uma taxa via
vat_rate_id.
Preço com ou sem IVA
O atributo price_includes_vat diz se o preço apresentado já inclui IVA ou se é a base. O sistema calcula correctamente em ambos os modos para o cálculo do total e dos relatórios.
Categorias
Os serviços agrupam-se em ServiceCategory. As categorias são usadas:
- Na página pública para organizar a oferta visualmente.
- No backoffice para filtrar e gerir em lote.
- Em promoções com scope "categoria" (todos os serviços de uma categoria entram no desconto).
Categorias típicas: "Cabelo", "Barba", "Cor", "Tratamentos", "Estética facial", "Corpo" — cada negócio define as suas.
Add-ons e extras
Addons são extras independentes que se ligam a serviços via M2M. Cada add-on tem:
- Preço próprio que entra no total da marcação.
- Duração extra que estica o slot reservado.
O fluxo público sugere os add-ons relevantes ao escolher o serviço. É o mecanismo de upsell mais directo: tratamento extra no corte, máscara extra na limpeza facial, sessão estendida.
Quem pode fazer cada serviço
A relação staff-serviço é M2M (service_staff). Permite cenários como:
- Apenas certos profissionais fazem coloração; o slot só aparece para esses.
- Todos podem fazer corte, mas só dois fazem alisamentos químicos.
- Recurso "cabine 2" reservada a tratamentos específicos.
Duração override por staff
O pivot tem duration_override_min — uma profissional sénior pode demorar 30 min num serviço onde a junior demora 50. O motor calcula slots com a duração correcta para a pessoa escolhida.
Recursos: salas, cabines e equipamentos
Para serviços onde o que se reserva é um espaço ou equipamento, há o conceito de Resource (com tipos via ResourceType):
- Salas — gabinetes, cabines, salas de aula.
- Equipamentos — máquinas, cadeiras, mesas de tratamento.
- Capacidade e localização próprias.
Modos que envolvem recursos
O serviço pode estar configurado como requires_resource (só recurso, sem profissional) ou requires_staff_and_resource (ambos). O motor de slots cruza disponibilidades.
Disponibilidade ao nível do serviço
Além do horário do staff, há ServiceAvailabilitySchedule — horários por dia da semana ao nível do serviço, opcionalmente por staff. Cobre regras como:
- "Coloração só de manhã" — embora a profissional trabalhe o dia todo.
- "Aulas de pilates apenas terça e quinta às 19h."
- "Massagens à tarde, atendimento de manhã."
Campos personalizados por serviço
O atributo custom_fields_config_json permite definir campos extra que o cliente preenche ao marcar:
- "Cor de cabelo desejada" para uma pintura.
- "Tamanho aproximado" para uma tatuagem.
- "Alergias conhecidas" para tratamentos específicos.
Os valores ficam guardados na linha da marcação para o profissional consultar antes do atendimento.
O que dizer ao lead
A maioria das ferramentas trata todos os serviços iguais. O FIRO modela diferenças reais — e isso aparece no preço final, no IVA correcto e na agenda mais limpa.
- "O teu IVA, à tua maneira" — taxas configuráveis e cálculo correcto consoante esteja incluído no preço ou não.
- "Profissional sénior demora menos? O sistema sabe." — duração override por staff é um detalhe que toca quem já lida com agenda real.
- "Vendes pacotes? Vendes orçamentos?" — preço "a partir de", intervalos, sob orçamento. Não tens de mentir ao cliente.
- "Add-ons como mecanismo de upsell" — explica que cada add-on adiciona automaticamente tempo e valor, sem fricção.
Â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
- Catálogo com categorias, preços e IVA
- 3 modelos de preço + free / sob orçamento
- Add-ons com duração e preço extra
- Recursos (salas, equipamentos) e tipos
- Horários ao nível de serviço
- Campos personalizados por serviço
A caminho
- Pacotes pré-pagos com saldo contável de sessões
- Variantes ao nível do serviço (ex.: "corto curto / médio / longo")
- Pricing dinâmico por hora ou dia da semana
- Bundles / combos com preço promocional automático
Perguntas frequentes
O preço pode incluir já o IVA ou tenho de calcular à parte?
Cada serviço tem o flag price_includes_vat. Mostras o que faz mais sentido ao teu cliente — o backoffice e os relatórios calculam sempre correctamente.
Posso ter o mesmo serviço com preço diferente para profissionais diferentes?
Hoje a duração varia por profissional (override). Pricing por staff está no roadmap — entretanto cria-se com nomes diferenciados ("Corte com sénior", "Corte com junior").
Como aparece um serviço gratuito na página pública?
Defines o preço a zero e escolhes o zero_price_label: "free" mostra "Grátis", "on_quote" mostra "Sob orçamento".
Recursos podem ser reservados sem profissional?
Sim. Configuras o serviço como requires_resource e o slot só verifica a disponibilidade do recurso — útil para cabines de bronzeamento ou salas de coworking.
Os add-ons ficam guardados no histórico do cliente?
Sim. Cada add-on aplicado fica registado na linha da marcação e entra no histórico de transações.
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.