- AgriTech e rastreabilidade
- SaaS multi-empresa
FAMS Mahala – plano gratuito multi-empresa
O FAMS como SaaS: registo self-service, dados isolados por empresa e limites por plano.
- Período
- 2026
- Estado
- Em produção
- Papel
- Programador backend: roles por empresa, isolamento de dados, limites do plano, registo e deploy
Problema
Cada cliente FAMS precisava de um servidor e de uma instalação próprios. Para cooperativas e pequenas empresas isso era caro demais, e não havia forma de experimentar o sistema sem um projecto de implementação.
Solução
Uma única instalação partilhada, com cada empresa isolada por company_id e um plano gratuito com limites. As empresas registam-se sozinhas num formulário de dois passos. Quando crescem, há um caminho para exportar a empresa para uma instalação dedicada.
Decisões técnicas
01
Esquema partilhado com company_id
Em vez de uma base de dados por empresa, todas partilham tabelas com company_id e um global scope Eloquent (escrito por um colega) filtra as queries. Uma só migração serve todos os tenants.
02
Roles Spatie por empresa
O Edson estendeu o modelo Role do Spatie com company_id, para que cada empresa defina os seus próprios supervisores e técnicos sem ver os papéis das outras.
03
Limites do plano no servidor
Um trait EnforcesPlanLimits e um PlanLimitService bloqueiam a criação de membros, agentes, campos e compras acima do plano, com HTTP 422 e mensagem traduzida. O serviço tem testes unitários.
04
Retirar os atalhos de instalação única
O código antigo assumia uma empresa por servidor (Company::first()). O Edson trocou essas chamadas pela empresa do utilizador autenticado em controladores, exportações e providers.
Imagens
01 / 02 — Página de entrada do FAMS Mahala com o slogan 'Do papel aos dados' e os limites do plano gratuito
Tecnologias
- Laravel
- PHP
- MySQL
- GitHub Actions
Resultados verificáveis
- produtores no plano gratuito (até 2 utilizadores, 0 MZN)
- 500
- mahala.fams.co.mz (abre noutro separador)
- modelos com company_id
- 24
O que aprendi
Passar de uma instalação por cliente para multi-empresa é sobretudo caçar pressupostos escondidos: cada Company::first() ou config de empresa era um sítio onde os dados de uma empresa podiam aparecer noutra.
ODS

ODS 2 · Fome Zero e Agricultura Sustentávelprincipal
O plano gratuito leva o cadastro e o acompanhamento de pequenos produtores a cooperativas e pequenas empresas que não tinham orçamento para um servidor próprio.

ODS 8 · Trabalho Digno e Crescimento Económicoprincipal
Empresas registam-se sozinhas em minutos e só pagam quando crescem, baixando o custo de digitalizar a operação e os pagamentos.

ODS 9 · Indústria, Inovação e Infra-estruturascomplementar
Uma só instalação multi-empresa partilha a mesma infra-estrutura digital entre muitas organizações, em vez de um servidor por cliente.
