-- 0035 — a natureza do projeto: empresa do cliente, ou fonte do tenant
--
-- O PROBLEMA
--
-- Ate aqui todo projeto era a mesma coisa: um cliente final, uma empresa. O
-- desenho inteiro assume isso -- a sessao de tenant alcanca "todos os projetos
-- ativos", e uma pergunta consolidada monta UNION ALL sobre as views de cada
-- um. Medido: uma pergunta real do widget gerou
--
--   SELECT EMPRESA_RAZAOSOCIAL, COUNT(*), SUM(...)
--     FROM (SELECT * FROM ds_297_contas_receber
--           UNION ALL SELECT * FROM ds_298_contas_receber
--           UNION ALL SELECT * FROM ds_299_contas_receber ...)
--
-- Existe um segundo uso chegando, e ele NAO e uma empresa: um projeto que
-- carrega uma fonte de dados do proprio tenant -- eSocial, por exemplo --, que
-- nenhum cliente consome e que existe para a operacao do tenant.
--
-- Sem distinguir os dois, essa fonte entra no UNION acima e o eSocial aparece
-- como se fosse mais uma empresa no "faturamento por empresa". Nao e vazamento:
-- quem pergunta e o admin do tenant, que tem direito ao dado. E RESPOSTA
-- ERRADA, que neste produto e o defeito mais caro -- sai plausivel e ninguem
-- confere.
--
-- A unica saida hoje seria `status = disabled`, e ai a fonte nao pode nem ser
-- carregada. Nao ha como dizer "alcancavel pelo tenant, mas nao e uma empresa".
--
--
-- O QUE ESTA COLUNA E, E O QUE ELA NAO E
--
--   client  (padrao)  uma empresa/cliente final. Tudo que existe hoje.
--   source            uma fonte de dados do TENANT. Entra nas ferramentas
--                     marcada como fonte, e fica FORA da agregacao por empresa.
--
-- E sobre o que a coisa E, nao sobre quem alcanca. Alcance continua sendo
-- escopo (chave de projeto ve o proprio projeto; chave de tenant ve os ativos),
-- e direito de consumo continua sendo assunto da camada de concessao.
--
-- Misturar os dois seria um erro com data marcada: "nao e empresa" e "nao
-- contratou" viravam o mesmo estado, e um dia alguem liberaria a fonte do
-- eSocial para um cliente ao conceder um pacote.
--
--
-- POR QUE NAO E ENUM
--
-- VARCHAR com CHECK, como `status` ja e nesta tabela. Enum no MySQL guarda a
-- posicao, entao acrescentar valor no meio remapeia as linhas existentes em
-- silencio -- e a lista aqui vai crescer (um dia haverá "demo", "sandbox").

ALTER TABLE projects
  ADD COLUMN kind VARCHAR(16) NOT NULL DEFAULT 'client' AFTER slug;

-- Serve a leitura que mais vai usar isto: "as empresas deste tenant", que e o
-- que a sessao consolidada pergunta a cada resposta.
ALTER TABLE projects
  ADD KEY idx_projects_kind (tenant_id, kind, status);
