Saltar para o conteúdo
Edson Francisco
  • 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.