5.5 KiB
ADR 0001 - Separar usuario de atendimento de conta administrativa interna
Status
Accepted
Contexto
Hoje o sistema possui um conceito principal de usuario em app/db/mock_models.py (User).
Esse registro representa a identidade operacional do atendimento e nasce a partir de canais externos, como Telegram.
Ele serve para vincular conversas, pedidos, locacoes, revisoes e contexto transacional do usuario final.
Para a frente de auto-incremento de tools, precisaremos de uma area interna com login, permissao, auditoria e publicacao controlada.
Misturar essa conta interna com o User atual criaria problemas de seguranca, modelagem e isolamento de dominio.
Decisao
Vamos separar explicitamente dois dominios de identidade:
-
AtendimentoUser- Continua sendo o
Useratual do banco operacional/mock. - Representa clientes e pessoas atendidas por canais externos.
- Continua vinculado a conversa, pedido, revisao, locacao e historico operacional.
- Continua sendo o
-
StaffAccount- Sera uma nova entidade para acesso administrativo interno.
- Representa funcionarios e administradores da empresa.
- Sera usada para login no painel interno, configuracao do sistema, criacao/aprovacao de tools e auditoria.
Fronteira entre os dois tipos de conta
AtendimentoUser
- Banco: operacional/mock (
MockBase) - Origem: canal externo (
channel,external_id) - Autenticacao: indireta, via canal de atendimento
- Responsabilidade: atendimento ao cliente e contexto de negocio
- Nao deve receber credenciais de painel interno
StaffAccount
- Banco: administrativo/tools (
Base) - Origem: cadastro interno controlado
- Autenticacao: login web proprio
- Responsabilidade: administracao, configuracao e governanca de tools
- Nao deve ser usado para identificar cliente do atendimento
Racional para usar o banco administrativo/tools para StaffAccount
O projeto ja possui um banco administrativo ligado a Base, hoje usado para tools.
Como a nova frente trata de governanca do sistema e nao de jornada do cliente final, o lugar mais coerente para StaffAccount e para os metadados de geracao/publicacao e esse mesmo dominio administrativo.
Isso reduz acoplamento com o banco operacional e evita misturar seguranca interna com dados de atendimento.
Entidades alvo derivadas desta decisao
As proximas fases devem introduzir, no banco administrativo, entidades como:
StaffAccountStaffSessionou estrategia equivalente de tokenToolDraftToolGenerationJobToolValidationRunToolPublicationAuditLog
O banco operacional continua com entidades como:
UserOrderReviewScheduleRentalContractConversationTurn
Regras arquiteturais obrigatorias
- Nenhuma rota administrativa deve reutilizar
Userdo atendimento como identidade autenticada. - Nenhuma regra de atendimento deve depender de
StaffAccountpara funcionar. - O pipeline de geracao/publicacao de tools deve operar fora do caminho critico do atendimento.
- Toda ativacao de tool gerada deve ser auditavel e vinculada a um
StaffAccount. - O atendimento continua decidindo execucao com base no modelo; o painel administrativo apenas governa cadastro, validacao e publicacao.
Papel inicial de permissao
A primeira versao deve prever ao menos estes papeis:
diretor: gerencia contas internas, aprova e publica tools, altera configuracoes sensiveis e cadastra novos colaboradorescolaborador: consulta o fluxo operacional do bot, cria drafts de tools e acompanha o andamento ate a aprovacao
Estrutura tecnica sugerida
Banco administrativo (Base)
app/db/models/staff_account.pyapp/db/models/tool_draft.pyapp/db/models/tool_generation_job.pyapp/db/models/audit_log.py
Repositorios
app/repositories/staff_account_repository.pyapp/repositories/tool_draft_repository.pyapp/repositories/tool_generation_job_repository.py
Servicos
app/services/admin/auth_service.pyapp/services/admin/tool_draft_service.pyapp/services/admin/tool_generation_service.pyapp/services/admin/audit_service.py
API interna
app/api/routes/admin_auth.pyapp/api/routes/admin_tools.pyapp/api/routes/admin_audit.py
Fluxo alvo de alto nivel
StaffAccountfaz login no painel interno.- Um
colaboradorcria umToolDraftcom nome, descricao e parametros. - Um job isolado gera a implementacao e executa validacoes.
- O resultado fica disponivel para revisao humana.
- Um
diretorrevisa, aprova e publica a tool. - A tool publicada passa a integrar o registry ativo sem afetar o dominio de identidade do atendimento.
Impacto nas proximas etapas
A partir desta decisao, as proximas implementacoes devem seguir esta ordem:
- Criar
StaffAccounte autenticacao administrativa. - Criar autorizacao por papel.
- Criar entidades de draft/versionamento/validacao.
- Criar pipeline isolado de geracao.
- Criar painel e rotas administrativas.
Consequencias
Positivas
- Isola seguranca interna do atendimento ao cliente.
- Facilita auditoria e governanca.
- Evita acoplamento indevido entre canal externo e painel interno.
- Deixa clara a separacao entre operacao e administracao do sistema.
Custos
- Introduz novo conjunto de entidades e rotas.
- Exige autenticacao e autorizacao dedicadas.
- Aumenta a complexidade de bootstrap e persistencia do dominio administrativo.
Fora do escopo desta ADR
- Escolha definitiva do modelo para geracao de codigo.
- Implementacao do frontend administrativo.
- Definicao detalhada do sandbox de execucao das tools geradas.