<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Criei um CRM — Blog AreaCli</title><link>https://blog.areacli.com/tags/criei-um-crm/</link><description>Negócios e tecnologia vistos de dentro de uma operação de crédito e cobrança: estratégia, dados, canais digitais e produto.</description><language>pt-BR</language><lastBuildDate>Sun, 18 Oct 2026 23:24:12 -0300</lastBuildDate><atom:link href="https://blog.areacli.com/tags/criei-um-crm/index.xml" rel="self" type="application/rss+xml"/><item><title>Exemplo de especificação funcional: um CRM de cobrança</title><link>https://blog.areacli.com/exemplo-especificacao-funcional/</link><guid isPermaLink="true">https://blog.areacli.com/exemplo-especificacao-funcional/</guid><pubDate>Sun, 18 Oct 2026 23:18:00 -0300</pubDate><dc:creator>Paulo Castilho</dc:creator><category>Tecnologia</category><description>&lt;p&gt;Especificação funcional real do primeiro incremento de um CRM de cobrança: regras com valores, critérios de aceite e cada decisão com alternativas.&lt;/p&gt;&lt;p&gt;Uma especificação funcional diz o que o sistema faz, para quem e com que regras, sem dizer como ele é construído. Este artigo traz uma especificação real e completa: a do primeiro incremento do CRM de cobrança da série &lt;a href="https://blog.areacli.com/criei-um-crm-com-ia/"&gt;Criei um CRM&lt;/a&gt;, aprovada antes de qualquer linha de código. Ela tem 29 regras com exemplos, 26 critérios de aceite e 9 premissas registradas. A maior parte deste texto, porém, trata das decisões: as alternativas apresentadas, os prós e contras de cada uma e o que foi escolhido. É nelas que uma especificação ganha ou perde valor.&lt;/p&gt;&#10;&lt;h2 id="o-incremento-a-carteira-chega-por-planilha"&gt;O incremento: a carteira chega por planilha&lt;a class="ancora" href="#o-incremento-a-carteira-chega-por-planilha" aria-label="Link para a seção: O incremento: a carteira chega por planilha"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;O primeiro incremento resolve um problema concreto. O credor, uma escola ou uma clínica, por exemplo, tem os clientes em atraso numa planilha exportada do sistema de faturamento. Enquanto a lista fica ali, ninguém sabe ao certo quanto está vencido, há quanto tempo, com quem e quanto ainda vai vencer.&lt;/p&gt;&#10;&lt;p&gt;O objetivo é que o gestor envie a planilha e, em poucos segundos, veja a carteira organizada: quantos devedores, quanto está vencido e a vencer, em que faixa de atraso, e a ficha de cada devedor com seus contratos e títulos. O critério de sucesso também está escrito: uma planilha de 10 mil títulos fictícios entra sem intervenção manual, cada linha recusada aparece com o motivo, e os totais da tela batem com os da planilha.&lt;/p&gt;&#10;&lt;p&gt;O formato do arquivo faz parte da especificação: CSV separado por ponto e vírgula, que é o padrão do Excel em português, com números e datas no formato brasileiro. As colunas obrigatórias são documento, nome, título, vencimento e valor; telefone, e-mail, contrato e descrição são opcionais.&lt;/p&gt;&#10;&lt;h2 id="a-estrutura-da-especificacao"&gt;A estrutura da especificação&lt;a class="ancora" href="#a-estrutura-da-especificacao" aria-label="Link para a seção: A estrutura da especificação"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;O documento segue o modelo descrito em &lt;a href="https://blog.areacli.com/especificacao-de-software/"&gt;especificação de software: como fazer sem travar a empresa&lt;/a&gt;: problema e objetivo, quem usa, regras de negócio com exemplos, critérios de aceite, casos de exceção, fora do escopo, restrições e decisões. Duas seções foram acrescentadas por causa do objetivo da série:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Premissas assumidas.&lt;/strong&gt; O que foi dado como certo sem passar pela área que validaria, e o que acontece se estiver errado.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Área que decidiria cada ponto numa empresa.&lt;/strong&gt; Ao lado de cada decisão, quem a tomaria numa organização com jurídico, financeiro, operação, comercial e TI. Aqui, quem decide sou eu. Numa empresa, essa coluna mostra quem precisa estar na reunião.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Uma regra entrou no meio do caminho e virou regra do projeto: &lt;strong&gt;a especificação descreve comportamento, não infraestrutura&lt;/strong&gt;. A primeira versão citava memória, contêiner e o servidor em que a demonstração iria rodar. Uma especificação assim fica presa a um ambiente e precisa ser reescrita quando o sistema muda de lugar. O desempenho continua na especificação, mas só como tempo percebido pelo usuário.&lt;/p&gt;&#10;&lt;h2 id="regras-escritas-com-valores"&gt;Regras escritas com valores&lt;a class="ancora" href="#regras-escritas-com-valores" aria-label="Link para a seção: Regras escritas com valores"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Cada regra tem um exemplo concreto. É a diferença entre &amp;ldquo;o sistema valida o CPF&amp;rdquo; e uma regra que o desenvolvedor, humano ou IA, não consegue interpretar de dois jeitos. Algumas das 29:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Regra&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Exemplo&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O devedor é identificado pelo documento sem máscara&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;529.982.247-25&lt;/code&gt; e &lt;code&gt;52998224725&lt;/code&gt; são o mesmo devedor&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CPF e CNPJ com dígito verificador válido, inclusive o CNPJ alfanumérico&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;111.111.111-11&lt;/code&gt; recusado; &lt;code&gt;12.ABC.345/01DE-35&lt;/code&gt; aceito se o dígito conferir&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O vencimento pode ser passado ou futuro; vencido e a vencer são recalculados todo dia&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Hoje = 18/10/2026: &lt;code&gt;17/10/2026&lt;/code&gt; vencido com 1 dia de atraso; &lt;code&gt;10/12/2026&lt;/code&gt; a vencer&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Valor maior que zero, com até duas casas, guardado em centavos&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;1.234,56&lt;/code&gt; vira 123456 centavos; &lt;code&gt;12,345&lt;/code&gt; recusado&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O mesmo título repetido no arquivo: vale a primeira linha&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Linha 15 recusada: &amp;ldquo;título repetido na linha 8&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O devedor entra na faixa do seu título vencido mais atrasado&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Títulos com 38 e 95 dias de atraso: faixa 91–180&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;O CNPJ alfanumérico é um exemplo de regra que passaria batido. Pela Instrução Normativa RFB nº 2.229, de outubro de 2024, a &lt;a href="https://www.gov.br/receitafederal/pt-br/acesso-a-informacao/acoes-e-programas/programas-e-atividades/cnpj-alfanumerico" rel="noopener"&gt;Receita Federal passou a atribuir CNPJ com letras&lt;/a&gt; às novas inscrições a partir de julho de 2026; os números já existentes não mudam. Uma validação &amp;ldquo;só números&amp;rdquo;, copiada de qualquer exemplo antigo, recusaria esses clientes, e o defeito só apareceria quando o primeiro deles entrasse na carteira.&lt;/p&gt;&#10;&lt;h2 id="criterios-de-aceite-no-formato-dado-quando-entao"&gt;Critérios de aceite no formato dado, quando, então&lt;a class="ancora" href="#criterios-de-aceite-no-formato-dado-quando-entao" aria-label="Link para a seção: Critérios de aceite no formato dado, quando, então"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Cada critério vira um teste automatizado, com o mesmo nome. Três dos 26:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Dado&lt;/strong&gt; uma carteira com os títulos A, B e C ativos&#10;&lt;strong&gt;quando&lt;/strong&gt; o gestor escolhe batimento e confere um arquivo com os títulos B e D&#10;&lt;strong&gt;então&lt;/strong&gt; a conferência informa que A e C serão retirados, com quantidade e valor, antes de qualquer gravação.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Dado&lt;/strong&gt; um título a vencer em 18/10/2026, com vencimento 20/10/2026&#10;&lt;strong&gt;quando&lt;/strong&gt; o operador abre a ficha em 21/10/2026&#10;&lt;strong&gt;então&lt;/strong&gt; o título aparece como vencido, com 1 dia de atraso, sem nova importação.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Dado&lt;/strong&gt; um usuário inexistente&#10;&lt;strong&gt;quando&lt;/strong&gt; alguém tenta entrar com ele&#10;&lt;strong&gt;então&lt;/strong&gt; a mensagem é exatamente a mesma de uma senha errada.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="as-decisoes-com-alternativas"&gt;As decisões, com alternativas&lt;a class="ancora" href="#as-decisoes-com-alternativas" aria-label="Link para a seção: As decisões, com alternativas"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Todas as decisões seguiram o mesmo formato: a ferramenta de IA que escreve o código e os rascunhos (o Claude Code) apresentava as opções, o impacto de cada uma e uma recomendação, e eu escolhia. Abaixo estão as que mudaram o sistema de forma visível.&lt;/p&gt;&#10;&lt;h3 id="o-titulo-que-some-do-arquivo-novo"&gt;O título que some do arquivo novo&lt;a class="ancora" href="#o-titulo-que-some-do-arquivo-novo" aria-label="Link para a seção: O título que some do arquivo novo"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;Foi a decisão com mais versões erradas. A pergunta: um título estava na carteira e não aparece na planilha nova. O que acontece?&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Versão&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Regra&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Problema&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Primeiro rascunho&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Nada muda&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Se o título foi pago, o sistema continua mandando cobrar quem pagou. Cobrança indevida, que o &lt;a href="https://www.planalto.gov.br/ccivil_03/leis/l8078compilado.htm" rel="noopener"&gt;Código de Defesa do Consumidor&lt;/a&gt; (art. 42) pune com devolução em dobro&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Correção proposta&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Marcar como &amp;ldquo;provavelmente pago ou cancelado&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Troca uma suposição por outra; um título renegociado ou cancelado inflaria o indicador de recuperação&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Versão aprovada&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Depende do modo de importação&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Nenhum: o sistema registra só o que sabe&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;A versão aprovada não estava entre as opções. Ela veio de quem conhece cobrança: a carga pode ser &lt;strong&gt;incremental&lt;/strong&gt;, em que o arquivo traz só inclusões e atualizações, ou de &lt;strong&gt;batimento&lt;/strong&gt;, em que o arquivo representa a carteira inteira. Na incremental, um título ausente não significa nada. No batimento, ele passa a &lt;strong&gt;retirado&lt;/strong&gt;, e só isso: o sistema não presume pagamento, cancelamento ou renegociação, porque o arquivo não traz essa informação.&lt;/p&gt;&#10;&lt;h3 id="a-protecao-contra-um-batimento-com-arquivo-incompleto"&gt;A proteção contra um batimento com arquivo incompleto&lt;a class="ancora" href="#a-protecao-contra-um-batimento-com-arquivo-incompleto" aria-label="Link para a seção: A proteção contra um batimento com arquivo incompleto"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;O batimento resolveu um problema e criou o oposto. Se alguém exportar a carteira com um filtro esquecido, só um mês ou só uma unidade, o batimento retira em massa títulos ainda devidos, e a cobrança deles para.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Opção&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;A favor&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Contra&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Segundo passo de confirmação quando mais de 20% da carteira for retirada (recomendada)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Protege contra o erro grosseiro sem incomodar no dia a dia&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Recortes errados pequenos passam&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Segundo passo sempre&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Máxima segurança&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Vira clique automático e perde efeito&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Limite configurável&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Flexível&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Exige tela de configuração e alguém que saiba escolher o número&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Só a conferência (escolhida)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Menos código; a conferência já mostra quantos títulos e quanto valor serão retirados&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O risco fica com quem confirma&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Escolhi a praticidade, e a especificação diz isso com todas as letras: a conferência é a única barreira. Numa empresa, essa troca passaria pela operação, pela TI e provavelmente pela auditoria interna.&lt;/p&gt;&#10;&lt;h3 id="o-modo-que-vem-marcado"&gt;O modo que vem marcado&lt;a class="ancora" href="#o-modo-que-vem-marcado" aria-label="Link para a seção: O modo que vem marcado"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Opção&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;A favor&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Contra&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Nenhum padrão, escolha obrigatória (recomendada)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O batimento nunca acontece por descuido&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Um clique a mais em toda importação&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Incremental (escolhida)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O modo que não retira nada é o padrão&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Quem queria batimento e esqueceu fica com títulos que deveriam ter saído&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Batimento&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Combina com quem sempre exporta tudo&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Um arquivo só de inclusões retiraria a carteira quase inteira&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Fixo por credor&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Reflete a rotina do faturamento&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Exige configuração e impede a carga avulsa no outro modo&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="titulos-a-vencer"&gt;Títulos a vencer&lt;a class="ancora" href="#titulos-a-vencer" aria-label="Link para a seção: Títulos a vencer"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;O rascunho recusava títulos a vencer: &amp;ldquo;o título tem que estar em atraso&amp;rdquo;. A pergunta apresentou a recusa como a opção mais segura. A resposta foi uma correção: &amp;ldquo;E se o credor tem por regra negociar todo o contrato? Você não pode assumir que tem erro ou risco.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;A regra mudou: títulos a vencer são parte legítima da carteira. A correção trouxe duas regras que não existiam. A primeira é a coluna opcional &lt;strong&gt;contrato&lt;/strong&gt;, sem a qual o acordo do incremento 4 não conseguiria negociar o contrato inteiro. A segunda é uma configuração por credor para o lugar do a vencer nos totais:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Opção&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;A favor&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Contra&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Colunas vencido e a vencer separadas&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Não mistura atraso com saldo futuro&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Não serve a todos os credores&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Total único&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Simples&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Indicadores de atraso menos claros&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Depende do credor (escolhida), padrão separado&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Atende políticas diferentes e já prepara a fase de assessorias&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Mais configuração&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="o-mesmo-documento-com-nomes-diferentes"&gt;O mesmo documento com nomes diferentes&lt;a class="ancora" href="#o-mesmo-documento-com-nomes-diferentes" aria-label="Link para a seção: O mesmo documento com nomes diferentes"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;Esta decisão foi tomada e revista na mesma noite.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Opção&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;A favor&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Contra&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Recusar só as linhas divergentes (recomendação inicial)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Obriga a corrigir na origem&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O devedor entra pela metade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Aceitar e avisar&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Nenhum título perdido&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Um CPF digitado errado junta dívidas de duas pessoas&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Recusar todas as linhas do devedor (primeira escolha)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O mais seguro contra mistura de pessoas&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Recusa por acento ou espaço a mais&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Normalizar e, se ainda divergir, recusar o devedor (escolha final)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Diferenças triviais deixam de travar a carga; o caso suspeito continua bloqueado&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Uma etapa de normalização a especificar e testar&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;A primeira escolha foi feita sem as causas comuns de divergência à vista: acento, abreviação, sobrenome de casada. A pergunta não as trazia. Quando vieram, a regra ganhou a normalização: &amp;ldquo;MARIA DA SILVA&amp;rdquo; e &amp;ldquo;Maria da Silva&amp;rdquo; passam a ser o mesmo nome.&lt;/p&gt;&#10;&lt;h3 id="a-decisao-que-so-apareceu-combinando-regras"&gt;A decisão que só apareceu combinando regras&lt;a class="ancora" href="#a-decisao-que-so-apareceu-combinando-regras" aria-label="Link para a seção: A decisão que só apareceu combinando regras"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;Ao montar o questionário, apareceu uma decisão que nenhuma regra isolada mostrava. No batimento, um título existente cuja linha foi recusada, por uma data digitada errada, por exemplo, some do conjunto válido e seria retirado. Somado à regra anterior, um erro de grafia no nome retiraria todas as dívidas daquele devedor.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Opção&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;A favor&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Contra&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Não retirar e listar à parte (escolhida)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Um erro de digitação não interrompe a cobrança&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O arquivo deixa de ser a verdade absoluta&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Retirar&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Regra simples&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Um acento retira todas as dívidas de uma pessoa&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Recusar o batimento inteiro&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Máxima segurança&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Um erro pequeno bloqueia a carga&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="faixas-de-atraso-limites-e-tempo-de-espera"&gt;Faixas de atraso, limites e tempo de espera&lt;a class="ancora" href="#faixas-de-atraso-limites-e-tempo-de-espera" aria-label="Link para a seção: Faixas de atraso, limites e tempo de espera"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Decisão&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Recomendação&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Escolha&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Por quê&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Faixas de atraso&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Seis faixas fixas (1–30, 31–60, 61–90, 91–180, 181–360, mais de 360)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Configuráveis pelo gestor&lt;/strong&gt;, começando pelas seis&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Credores diferentes acompanham faixas diferentes&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Limite do arquivo&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10 MB ou 50 mil linhas&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;50 MB ou 200 mil linhas&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Já pensando nas assessorias&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Espera com 200 mil linhas&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Primeiro &amp;ldquo;5 minutos e 512 MB de memória&amp;rdquo;; depois 2 + 2 minutos&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Até 2 minutos para conferir e 2 para confirmar&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A primeira recomendação misturava infraestrutura com comportamento&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;O tempo de espera teve uma pergunta no meio: &amp;ldquo;esses números são realistas?&amp;rdquo;. A resposta honesta foi que nenhum dos dois tinha sido medido, e que 5 minutos era folgado demais. A meta final vai ser verificada por teste automatizado com uma carteira fictícia de 200 mil linhas.&lt;/p&gt;&#10;&lt;h3 id="o-login-que-mudou-de-incremento"&gt;O login que mudou de incremento&lt;a class="ancora" href="#o-login-que-mudou-de-incremento" aria-label="Link para a seção: O login que mudou de incremento"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;O mapa original deixava o login para o segundo incremento. Quando decidi que o ambiente de desenvolvimento seria a própria demonstração publicada, o primeiro incremento ficaria aberto na internet sem login. A recomendação foi proteger pela infraestrutura, com uma senha no servidor web, e manter a especificação como estava. Preferi antecipar o login. A especificação aprovada ganhou uma revisão com o motivo, seis regras e sete critérios novos, antes de qualquer código.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Decisão&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Escolha&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Alternativa descartada&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Quem cria usuários&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Administrador, por comando, fora da interface&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tela de usuários (antecipa o incremento 2) ou o painel administrativo pronto do framework (fora da marca e da acessibilidade)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Expiração da sessão&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;30 minutos sem uso, 8 horas no máximo&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8 horas sem uso, ou ao fechar o navegador&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tentativas erradas&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Bloqueio de 15 minutos após 5 erros, com mensagem que não revela se o usuário existe&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Atraso crescente, ou nenhuma regra no sistema&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Senha&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Mínimo de 12 caracteres, sem senhas comuns, sem exigir símbolo nem troca periódica&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Mínimo de 8 com maiúscula, número, símbolo e troca a cada 90 dias&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;A regra de senha segue a linha das &lt;a href="https://pages.nist.gov/800-63-4/sp800-63b.html" rel="noopener"&gt;diretrizes de identidade digital do NIST (SP 800-63B)&lt;/a&gt;, que desaconselham regras de composição e troca periódica obrigatória, porque levam a senhas previsíveis como &amp;ldquo;Senha@2026&amp;rdquo;.&lt;/p&gt;&#10;&lt;h3 id="as-que-seguiram-a-recomendacao"&gt;As que seguiram a recomendação&lt;a class="ancora" href="#as-que-seguiram-a-recomendacao" aria-label="Link para a seção: As que seguiram a recomendação"&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Decisão&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Escolha&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Importação com linhas recusadas&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Parcial: entram as válidas, depois de uma conferência que não grava nada&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Título existente com valor diferente&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Atualiza e registra antes, depois, quem e quando&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Título retirado que volta num arquivo posterior&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Volta a ativo, com as duas datas no histórico&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Contrato&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Coluna opcional que agrupa os títulos na ficha&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="as-premissas-que-ficaram-registradas"&gt;As premissas que ficaram registradas&lt;a class="ancora" href="#as-premissas-que-ficaram-registradas" aria-label="Link para a seção: As premissas que ficaram registradas"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Cada premissa diz a área que a validaria e o custo de estar errada. Algumas delas:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Premissa&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Quem validaria&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Se estiver errada&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O documento identifica o devedor de forma única&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Operação&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Escolas e clínicas têm responsável financeiro diferente do aluno ou do paciente; titular e responsável ficam misturados&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;O número do título não muda entre exportações&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TI do faturamento&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Toda reimportação duplica a carteira&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;No batimento, o credor exporta sempre a carteira inteira&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TI e operação&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Um recorte diferente retira títulos ainda devidos&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Nome diferente entre uma carga e outra é atualização cadastral&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Operação&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Um CPF digitado errado troca o nome de outro devedor&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Mostrar o CPF completo na ficha é aceitável&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Jurídico e encarregado de dados (LGPD)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Exposição de dado pessoal além do necessário&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Nenhuma delas impede o desenvolvimento. Todas ficam visíveis, com dono, em vez de virarem uma regra que ninguém lembra de ter decidido.&lt;/p&gt;&#10;&lt;h2 id="o-que-ficou-fora"&gt;O que ficou fora&lt;a class="ancora" href="#o-que-ficou-fora" aria-label="Link para a seção: O que ficou fora"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;O que não está no incremento também está escrito: perfis de gestor e operador, recuperação de senha por e-mail, verificação em duas etapas, cadastro manual de devedor, multa e juros, baixa de pagamentos, exportação e o motivo da retirada de um título. A seção de fora do escopo é a que mais evita discussão depois: quando alguém perguntar por que o sistema não calcula juros, a resposta está no documento, com o incremento em que isso vai entrar.&lt;/p&gt;&#10;&lt;h2 id="em-numeros"&gt;Em números&lt;a class="ancora" href="#em-numeros" aria-label="Link para a seção: Em números"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Item&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Quantidade&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Regras com exemplos&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;29&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Critérios de aceite&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;26&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Premissas registradas&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;9&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Decisões de especificação&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;19&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Decisões que contrariaram a recomendação ou ficaram fora das opções&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Premissas do rascunho corrigidas na revisão&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;A especificação foi aprovada antes do plano técnico, que escolhe linguagem, banco e arquitetura. O próximo artigo da série trata dessas escolhas e de um conflito entre duas regras do próprio projeto: usar só versões publicadas há pelo menos duas semanas e não rodar com falha de segurança conhecida.&lt;/p&gt;&#10;</description></item><item><title>Criei um CRM com IA: especificação antes do código</title><link>https://blog.areacli.com/criei-um-crm-com-ia/</link><guid isPermaLink="true">https://blog.areacli.com/criei-um-crm-com-ia/</guid><pubDate>Sun, 18 Oct 2026 23:11:00 -0300</pubDate><dc:creator>Paulo Castilho</dc:creator><category>Tecnologia</category><description>&lt;p&gt;Começa a série Criei um CRM: um CRM de cobrança feito com IA e especificação, mostrando as premissas, os impasses e os erros que viram atraso.&lt;/p&gt;&lt;p&gt;Esta série acompanha a construção de um CRM de cobrança do zero até uma demonstração publicada, com o código escrito por um assistente de IA e cada regra decidida antes, numa especificação. O objetivo não é mostrar que a IA programa rápido. É mostrar o que acontece antes do código: as premissas que quem especifica assume sem perceber, as decisões que numa empresa passariam por outras áreas, os impasses e as trocas que, num projeto comum, viram atraso ou &amp;ldquo;passam batido&amp;rdquo; até estourar na homologação ou na produção.&lt;/p&gt;&#10;&lt;p&gt;Cada artigo cobre um incremento do sistema. Este primeiro explica o que vai ser construído, como o trabalho está organizado e por que os erros vão aparecer no texto.&lt;/p&gt;&#10;&lt;h2 id="o-que-vai-ser-construido"&gt;O que vai ser construído&lt;a class="ancora" href="#o-que-vai-ser-construido" aria-label="Link para a seção: O que vai ser construído"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Um CRM de cobrança: um sistema para quem tem clientes em atraso organizar a carteira, registrar cada contato com o devedor, negociar e acompanhar o que foi recuperado. É diferente do CRM de vendas, que acompanha oportunidades até o fechamento; aqui o ciclo começa depois do vencimento.&lt;/p&gt;&#10;&lt;p&gt;O primeiro usuário é um credor, uma pequena ou média empresa que cobra os próprios clientes: escola, clínica, academia, distribuidora. Numa fase posterior, o sistema passa a atender uma assessoria de cobrança, que cobra em nome de vários credores. O modelo de dados já nasce preparado para isso, embora as primeiras telas mostrem um credor só.&lt;/p&gt;&#10;&lt;p&gt;Ficam de fora, por decisão:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;emissão de boleto, Pix ou qualquer movimentação de dinheiro;&lt;/li&gt;&#10;&lt;li&gt;envio real de SMS, WhatsApp ou e-mail a devedores (a demonstração registra o envio, mas não envia nada);&lt;/li&gt;&#10;&lt;li&gt;negativação em birôs de crédito, protesto e cobrança judicial;&lt;/li&gt;&#10;&lt;li&gt;dados pessoais reais. Todo CPF e CNPJ da demonstração é gerado, válido no formato e sem dono.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;A demonstração vai ficar em &lt;code&gt;crm.areacli.com&lt;/code&gt;, com login de demonstração divulgado aqui quando estiver no ar.&lt;/p&gt;&#10;&lt;p&gt;A escolha do tema não foi a recomendada. Na primeira conversa, a sugestão foi um CRM de vendas para pequenas empresas, que tem mais busca e cabe facilmente numa demonstração. Preferi cobrança, que conheço por dentro. O custo é um domínio com mais regra legal, do &lt;a href="https://www.planalto.gov.br/ccivil_03/leis/l8078compilado.htm" rel="noopener"&gt;Código de Defesa do Consumidor&lt;/a&gt; à LGPD. O ganho é que as armadilhas de cobrança são exatamente o tipo de história que esta série quer contar.&lt;/p&gt;&#10;&lt;h2 id="o-metodo-especificar-por-incremento"&gt;O método: especificar por incremento&lt;a class="ancora" href="#o-metodo-especificar-por-incremento" aria-label="Link para a seção: O método: especificar por incremento"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;O projeto aplica o que defendi em &lt;a href="https://blog.areacli.com/spec-driven-development/"&gt;spec-driven development: IA sem especificação sai caro&lt;/a&gt; e em &lt;a href="https://blog.areacli.com/especificacao-de-software/"&gt;especificação de software: como fazer sem travar a empresa&lt;/a&gt;. Na prática, são cinco regras:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Nenhum código sem especificação aprovada.&lt;/strong&gt; A especificação diz o que o sistema faz, com regras, exemplos com valores e critérios de aceite no formato &amp;ldquo;dado, quando, então&amp;rdquo;. Cada critério vira um teste automatizado.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Especificação por incremento, não do sistema inteiro.&lt;/strong&gt; Existe um mapa curto do todo e uma especificação detalhada só do próximo pedaço.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Cada decisão em aberto tem dono e prazo.&lt;/strong&gt; Nunca &amp;ldquo;o desenvolvimento decide&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Decisões técnicas ficam registradas&lt;/strong&gt; com o contexto, as opções consideradas e o motivo da escolha.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Mudou a regra, muda a especificação primeiro&lt;/strong&gt;, com o motivo, e só depois o código.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;O que torna o projeto diferente de um relato comum é uma sexta regra: ao fim de cada sessão de trabalho, um diário registra o que foi feito, o que foi decidido e, principalmente, o que deu errado. É dele que saem os artigos.&lt;/p&gt;&#10;&lt;h2 id="quem-decide-e-quem-escreve"&gt;Quem decide e quem escreve&lt;a class="ancora" href="#quem-decide-e-quem-escreve" aria-label="Link para a seção: Quem decide e quem escreve"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;O código e os rascunhos de especificação são escritos pelo Claude Code, assistente de programação da Anthropic. As decisões são minhas. O fluxo de cada decisão é sempre o mesmo: a ferramenta apresenta as opções, o impacto de cada uma e uma recomendação, e eu escolho. Nenhuma escolha de produto, de regra de negócio ou de tecnologia é feita pela ferramenta.&lt;/p&gt;&#10;&lt;p&gt;Essa divisão não é decorativa. Em uma noite de trabalho, entre o escopo do produto e a especificação do primeiro incremento, foram tomadas 35 decisões. Em 9 delas, a escolha final contrariou a recomendação ou ficou fora das opções apresentadas. Em quatro casos, a recomendação partia de uma premissa errada, e a correção veio de quem conhece a operação.&lt;/p&gt;&#10;&lt;p&gt;Também é por isso que a série vai mostrar trechos da conversa. Uma pergunta mal formulada embute a resposta, e isso só aparece quando se lê a pergunta.&lt;/p&gt;&#10;&lt;h2 id="o-que-a-serie-quer-mostrar"&gt;O que a série quer mostrar&lt;a class="ancora" href="#o-que-a-serie-quer-mostrar" aria-label="Link para a seção: O que a série quer mostrar"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Num projeto de software, uma parte grande das regras nunca chega a ser discutida. Alguém assume, o desenvolvedor implementa o que parece razoável e a regra passa a existir sem dono. Numa empresa, várias dessas regras seriam decididas em conjunto com o jurídico, o financeiro, a operação, o comercial e a TI. Aqui, quem decide sou eu, mas cada especificação registra duas coisas que normalmente ficam implícitas:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;as premissas assumidas&lt;/strong&gt;, com a área que as validaria e o que acontece se estiverem erradas;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;a área que decidiria cada ponto&lt;/strong&gt; numa empresa, ao lado de quem decidiu de fato.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Um exemplo do primeiro incremento mostra por que isso importa. A carteira entra no sistema por uma planilha exportada do faturamento do credor. A pergunta parecia simples: o que fazer com um título que estava na carteira e não aparece no arquivo novo?&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A primeira versão da regra dizia que nada muda. Parece prudente, porque não apaga nada. Mas o título que sumiu pode ter sido pago, e o sistema continuaria mandando cobrar quem já pagou, uma cobrança indevida que o &lt;a href="https://www.planalto.gov.br/ccivil_03/leis/l8078compilado.htm" rel="noopener"&gt;artigo 42 do Código de Defesa do Consumidor&lt;/a&gt; pune com devolução em dobro.&lt;/li&gt;&#10;&lt;li&gt;A correção proposta foi marcar o título como &amp;ldquo;provavelmente pago ou cancelado&amp;rdquo;. Também errada: trocou uma suposição por outra.&lt;/li&gt;&#10;&lt;li&gt;A versão final veio de quem conhece cobrança. A importação pode ser &lt;strong&gt;incremental&lt;/strong&gt;, em que o arquivo traz só inclusões e atualizações e a ausência não significa nada, ou de &lt;strong&gt;batimento&lt;/strong&gt;, em que o arquivo representa a carteira inteira. Só no batimento o título ausente é &amp;ldquo;retirado&amp;rdquo;, e o sistema não presume o motivo, porque o arquivo não traz essa informação.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Nenhuma das três versões é absurda. As duas primeiras passariam numa revisão apressada e só seriam percebidas quando um cliente reclamasse ou quando um indicador de recuperação aparecesse inflado. É esse tipo de decisão que a série vai expor, incremento por incremento.&lt;/p&gt;&#10;&lt;h2 id="os-sete-incrementos-previstos"&gt;Os sete incrementos previstos&lt;a class="ancora" href="#os-sete-incrementos-previstos" aria-label="Link para a seção: Os sete incrementos previstos"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;#&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Incremento&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Carteira: importar a planilha, consultar devedores e títulos, com login&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Perfis, gestão de usuários e demonstração com dados fictícios renovados todo dia&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Acionamentos (contatos com o devedor) e fila de trabalho do operador&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Promessas de pagamento e acordos, com política de desconto e parcelamento&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Pagamentos e indicadores de recuperação&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Régua de cobrança: ações programadas por dias de atraso&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;7&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Vários credores: a versão para assessorias de cobrança&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;O mapa pode mudar. Quando mudar, o motivo vai aparecer aqui.&lt;/p&gt;&#10;&lt;h2 id="as-restricoes-do-projeto"&gt;As restrições do projeto&lt;a class="ancora" href="#as-restricoes-do-projeto" aria-label="Link para a seção: As restrições do projeto"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Algumas regras valem para todo o sistema e explicam escolhas que vão aparecer ao longo da série:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Acessibilidade WCAG 2.2 nível AA&lt;/strong&gt; em todas as telas, verificada por teste automatizado.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Privacidade por padrão:&lt;/strong&gt; sem cookies de rastreamento, sem serviços de terceiros sem decisão registrada e documento do devedor mascarado nas listas.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Versões travadas e publicadas há pelo menos duas semanas&lt;/strong&gt;, para não instalar um pacote recém-publicado com defeito ou adulterado. A exceção, decidida já no primeiro dia, são correções de segurança da mesma linha de versão: obedecer à regra à risca significaria rodar com falhas conhecidas.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;A especificação descreve comportamento, não infraestrutura.&lt;/strong&gt; Onde o sistema roda, com quanta memória e em que servidor é decisão técnica, registrada à parte. Essa regra também nasceu de um erro, que fica para o próximo artigo.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="o-que-cada-artigo-vai-trazer"&gt;O que cada artigo vai trazer&lt;a class="ancora" href="#o-que-cada-artigo-vai-trazer" aria-label="Link para a seção: O que cada artigo vai trazer"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Cada artigo da série vai cobrir um incremento com a mesma estrutura: o problema daquele pedaço do sistema, as decisões tomadas e as alternativas descartadas, as premissas que se mostraram erradas, o que foi construído e como verificar na demonstração.&lt;/p&gt;&#10;&lt;p&gt;O segundo artigo traz &lt;a href="https://blog.areacli.com/exemplo-especificacao-funcional/"&gt;a especificação funcional do primeiro incremento&lt;/a&gt;: por que um CRM de cobrança começa por uma planilha, e não por uma tela, e quantas decisões de negócio cabem numa importação de arquivo que parecia trivial.&lt;/p&gt;&#10;</description></item></channel></rss>