ACCEPTANCE CRITERIA (30/30)
☑ AC1.1: Importar `decryptPII` de `src/utils/encryption.ts` em todas as rotas CRM que retornam dados de customers
☑ AC1.2: Aplicar `decryptPII()` nos resultados de `customers.ts` (listagem e busca)
☑ AC1.3: Aplicar `decryptPII()` nos resultados de `ficha360.ts` (dados do cliente na ficha)
☑ AC1.4: Aplicar `decryptPII()` nos resultados de `conversations.ts` (nomes de clientes em conversas)
☑ AC1.5: Aplicar `decryptPII()` nos resultados de `deals.ts` (nomes de clientes vinculados a deals)
☑ AC1.6: Funcao aplicada APENAS em campos PII (nao em phone_number, metadata, etc.)
☑ AC1.7: Clientes do Kommo (texto puro) continuam exibindo corretamente apos decriptacao (funcao deve ser idempotente — se nao e ciphertext, retorna o valor original)
☑ AC1.8: Verificar via curl que nomes dos 64 clientes do bot aparecem legiveis
☑ AC2.1: Busca por nome em `customers.ts` deve funcionar para clientes criptografados E nao-criptografados
☑ AC2.2: Estrategia: decriptar nomes em memoria e filtrar, OU adicionar busca por `phone_number` como alternativa
☑ AC2.3: Se busca em memoria: limitar a paginacao razoavel (nao carregar todos os 4.016 clientes de uma vez)
☑ AC2.4: Busca por telefone (`phone_number ILIKE '%{term}%'`) DEVE funcionar como fallback
☑ AC2.5: Verificar via curl que busca retorna resultados corretos
☑ AC3.1: Verificar se coluna `note_type` existe na tabela `attendant_notes` na VPS (migration 025 pode ja ter sido executada)
☑ AC3.2: Se coluna NAO existe: criar migration `030_add_note_type_column.sql` com `ALTER TABLE attendant_notes ADD COLUMN IF NOT EXISTS note_type VARCHAR(20) DEFAULT 'general'`
☑ AC3.3: Se coluna JA existe: verificar que o INSERT em `ficha360.ts` usa valor compativel
☑ AC3.4: Garantir que `crm_user` tem permissao de INSERT na tabela `attendant_notes`
☑ AC3.5: Verificar via curl que criacao de nota funciona sem erro
☑ AC4.1: Criar arquivo `src/config/crm-database.ts` com pool dedicado usando `crm_user`
☑ AC4.2: Pool CRM usa variaveis de ambiente separadas: `CRM_DB_USER`, `CRM_DB_PASSWORD` (ou fallback para `crm_user` hardcoded)
☑ AC4.3: NAO modificar `src/config/database.ts` — o pool principal do bot DEVE continuar usando `propek_user`
☑ AC4.4: Atualizar todas as rotas em `src/api/crm/` para usar o pool CRM em vez do pool principal
☑ AC4.5: Configurar `CRM_DB_USER=crm_user` e `CRM_DB_PASSWORD` nas env vars da VPS (pm2 ecosystem ou .env)
☑ AC4.6: Verificar que RLS policies (Story 9.1) estao ativas para `crm_user`
☑ AC4.7: Bot WhatsApp continua operando normalmente apos a mudanca
☑ AC5.1: Nenhuma credencial hardcoded no codigo (usar env vars)
☑ AC5.2: Senha do `crm_user` NUNCA logada ou exibida
☑ AC5.3: Bot WhatsApp continua online (verificar pm2 status)
☑ AC5.4: Restart do bot via pm2 apos deploy das mudancas
☑ AC5.5: Todas as queries CRM usam parameterized queries ($1, $2)
ARQUIVOS (7)
propek-whatsapp-bot/src/api/crm/customers.ts MODIFY
propek-whatsapp-bot/src/api/crm/ficha360.ts MODIFY
propek-whatsapp-bot/src/api/crm/conversations.ts MODIFY
propek-whatsapp-bot/src/api/crm/deals.ts MODIFY
propek-whatsapp-bot/src/config/crm-database.ts CREATE
apps/crm/migrations/030_add_note_type_column.sql SKIP
docs/stories/active/story-9.9-crm-bug-fixes-sprint1.md UPDATE