Capítulo 01 Fundamento
O que é realmente difícil no comércio digital
Não é montar uma loja — isso resolve-se numa tarde. É tudo o que acontece entre o clique e a devolução.
1.1 A ilusão da facilidade
Pôr um catálogo online nunca foi tão barato. É por isso que quase toda a gente subestima o resto — e o resto é onde os sistemas se partem:
| Parece | É |
|---|---|
| Mostrar produtos | Modelar produto, variante e unidade de venda sem se enganar (cap. 2) |
| Ter stock | Contar concorrentemente sem vender o que não existe (cap. 3) |
| Receber o pagamento | Autorizar, capturar, reconciliar e sobreviver a repetições (cap. 5) |
| Guardar a encomenda | Representar um ciclo de vida que dura semanas (cap. 8) |
| Enviar | Física, com custo, atraso e prova (cap. 10) |
| Aceitar devoluções | Um direito, não uma política (cap. 11) |
Repare que a coluna da direita é quase toda sobre tempo e concorrência. Uma loja é um sistema onde muita gente age ao mesmo tempo sobre recursos finitos, e onde o processo de cada compra continua vivo durante semanas depois de o cliente ter fechado o separador.
1.2 As constantes, e porque a apostila se organiza à volta delas
A prospectiva sobre o Futuro do Comércio Digital fecha com uma lista do que não muda. Quatro dessas constantes decidem a arquitectura de qualquer loja:
| Constante | O que impõe ao sistema |
|---|---|
| Preço, disponibilidade e confiança decidem a compra | Os três têm de estar certos ao mesmo tempo; um stock errado destrói os outros dois |
| Entregar é física | Há um piso de custo e de tempo que nenhum software remove |
| Devolução faz parte | O fluxo inverso não é excepção — é metade do desenho |
| A relação directa é o único activo que não é alugado | Ver Email, CRM e Retenção |
Num sistema comum, um erro mostra dados errados e corrige-se. Aqui, um erro move dinheiro — e mover dinheiro de volta não é a operação inversa de o mover, é um processo novo, com custo, prazo e obrigações próprias.
É por isso que a palavra que atravessa esta apostila é idempotência: fazer duas vezes a mesma coisa tem de ter o mesmo efeito que fazê-la uma vez. Num painel de administração, isso é higiene. Aqui, é a diferença entre cobrar 89 € e cobrar 178 €.
1.3 O que esta apostila é
É o «como fazer» que faltava ao lado da prospectiva. Não é um manual de nenhuma plataforma: quase tudo o que aqui está aplica-se tanto a quem constrói de raiz como a quem configura uma solução pronta — porque as decisões difíceis são as mesmas, e uma plataforma tomou-as por si sem lhe dizer quais.
Pressupõe conforto com bases de dados e APIs. API Design e Arquitetura e System Design são os vizinhos naturais, e esta apostila assume-os em vez de os repetir.
1.4 Uma advertência sobre o que se lê por aí
A maior parte do material técnico sobre comércio digital é norte-americano, e há duas áreas em que isso o torna não apenas incompleto, mas errado para quem vende na Europa: a autenticação do pagamento (cap. 6) e o direito de devolução (cap. 11). Nas duas, o que lá é opcional aqui é obrigatório — e numa delas a obrigação é de Junho de 2026.
Liste todos os pontos do seu sistema (ou do que planeia) em que uma operação move dinheiro: cobrar, reembolsar, capturar, anular. Para cada um, responda: o que acontece se esta operação for executada duas vezes? Se não souber responder a algum, encontrou o trabalho da semana.
Capítulo 02 Modelo
O catálogo: produto, variante, unidade de venda
A decisão de modelação mais cara de mudar, tomada quase sempre na primeira semana e quase sempre mal.
2.1 Três coisas que toda a gente chama «produto»
Confundir os três é a origem de metade dos problemas de catálogo. Existências pertencem à variante, nunca ao produto — «temos 40 camisolas» não é informação acionável se 38 forem tamanho XS.
Modelar variantes como colunas — cor, tamanho — funciona até chegar o
produto que tem voltagem, ou o que não tem variante nenhuma, ou o que tem três eixos. Aí
acrescenta-se atributo_1, atributo_2, e ao fim de um ano ninguém sabe o que
está em atributo_3.
Modele os eixos como dados, não como esquema: um produto tem N eixos de variação, cada eixo tem valores, e uma variante é uma combinação. Custa mais no primeiro dia e é a diferença entre acrescentar uma categoria nova numa tarde ou num trimestre.
2.2 Preço não é uma coluna
| Pergunta | Porque parte um preço único |
|---|---|
| Em que moeda? | Converter no momento da compra dá preços que dançam ao sabor do câmbio |
| Com ou sem imposto? | Em B2C europeu mostra-se com; em B2B, sem (cap. 7) |
| Para quem? | Preço de campanha, de cliente com contrato, por quantidade |
| Quando? | Uma promoção tem início e fim, e o histórico tem de sobreviver a ela |
O preço que a encomenda regista é uma cópia, não uma referência. Se a linha de encomenda apontar para o preço actual do produto, uma alteração de preço amanhã reescreve o histórico de vendas de ontem — e a factura deixa de corresponder ao que foi cobrado.
Copie para a linha de encomenda o preço, a taxa de imposto e a descrição, no momento da compra. É duplicação deliberada, e é obrigatória: a factura é um documento sobre o passado.
2.3 Estados, não apagar
Um produto que deixa de ser vendido não pode desaparecer — está em encomendas antigas, em facturas, em devoluções ainda por chegar. Nunca apague; mude o estado: rascunho, activo, descontinuado, arquivado. Só o segundo aparece na loja; todos continuam a existir para o histórico.
2.4 O que torna um catálogo encontrável
Três coisas que valem mais do que qualquer motor de busca sofisticado: atributos estruturados (não escondidos na descrição), vocabulário do cliente em vez do interno — quem procura «casaco» não procura «outerwear» —, e sinónimos com registo do que não teve resultados. A lista de pesquisas sem resultado é o documento mais útil de uma loja, e quase ninguém a lê.
Pegue no seu modelo de catálogo e tente acrescentar um produto com três eixos de variação — por exemplo cor, tamanho e material. Se precisar de alterar o esquema da base de dados, o modelo é rígido, e vai voltar a doer de cada vez que o negócio crescer para o lado.
Capítulo 03 Crítica
Existências: a corrida que vende o que não há
Funciona em desenvolvimento, funciona em testes, e parte-se exactamente no minuto em que a loja tem procura a sério.
3.1 O código que toda a gente escreve primeiro
// ler, decidir, escrever — três passos separados
var stock = repo.stockDe(sku); // lê 3
if (stock >= quantidade) { // decide: pode
repo.definirStock(sku, stock - 1); // escreve 2
criarEncomenda(...);
}
Com um cliente de cada vez, está correcto. Com sete a carregar no mesmo segundo, os sete leem
3 antes de qualquer um escrever, os sete decidem que podem, e os sete recebem confirmação.
Vendeu sete unidades de três.
3.2 A correcção, que cabe numa linha
-- ler, decidir e escrever numa só operação atómica
UPDATE variantes
SET stock = stock - :qtd
WHERE sku = :sku
AND stock >= :qtd;
-- 1 linha afectada → reservado. 0 linhas → não havia.
A base de dados decide, e decide uma vez de cada vez. O número de linhas afectadas é a resposta — não é preciso ler antes nem confiar no que se leu.
Sempre que uma decisão dependa de um valor que outra pessoa pode estar a mudar, a leitura e a escrita têm de ser a mesma operação. Ler, pensar e escrever em três passos é correcto apenas enquanto ninguém mais estiver a trabalhar — e é por isso que estes erros nunca aparecem em desenvolvimento.
O mesmo mecanismo aparece em Java e Spring a propósito de reservatórios de ligações: recursos finitos disputados em paralelo é o mesmo problema com outra roupa.
3.3 Reservar não é vender
Entre pôr no cesto e pagar passam minutos. Se o stock só descer no fim, dois clientes chegam ao pagamento com a mesma unidade. Se descer no início, um cesto abandonado bloqueia stock para sempre.
| Momento de reservar | Risco |
|---|---|
| Ao pôr no cesto | Cestos abandonados bloqueiam stock que existe |
| Ao iniciar o pagamento | Bom equilíbrio — com prazo de validade |
| Só ao confirmar | Falha depois de o cliente já ter pago |
A reserva tem de ter prazo — tipicamente 15 a 30 minutos — e alguém tem de a libertar quando expira. Uma reserva sem prazo é uma fuga: o stock desaparece do sistema sem sair do armazém, e ninguém liga a rotura ao carrinho que alguém abandonou há três semanas.
3.4 Sobrevender de propósito
Nem sempre é erro. Uma loja que reabastece depressa pode aceitar mais do que tem para não perder vendas. A diferença entre estratégia e avaria é uma só: o cliente sabe? «Envio em 3 a 5 dias» é uma promessa diferente de «em stock», e prometer a segunda para entregar a primeira é o que gasta a confiança que o capítulo 1 dizia decidir a compra.
Ponha um artigo com stock 1 e dispare dois pedidos de compra em paralelo — dois terminais, dois
curl ao mesmo tempo. Se as duas encomendas forem confirmadas, tem o problema
deste capítulo, e leva menos de um minuto a descobrir.
Capítulo 04 Modelo
O checkout como máquina de estados
Tratado como formulário, é onde se perde a maior parte das compras já decididas.
4.1 Porque não é um formulário
Um formulário submete-se e acaba. Um checkout é interrompido: o cliente fecha o separador, muda de dispositivo, é levado ao banco para se autenticar (cap. 6), volta vinte minutos depois. Cada uma dessas interrupções tem de encontrar o processo onde ficou.
4.2 O campo que não existe é o campo que não falha
| Campo | Veredicto |
|---|---|
| Criar conta antes de comprar | Tirar. É a maior causa isolada de abandono |
| Confirmar o email escrevendo-o outra vez | Tirar. Duplica o erro em vez de o apanhar |
| Código postal | Manter — e preencher a morada a partir dele |
| Telefone | Manter se a transportadora o exigir; explicar porquê |
| «Como nos conheceu?» | Tirar do checkout. Pergunte depois da compra |
Deixe comprar sem conta e ofereça a criação depois da confirmação, quando já tem o email e a morada e basta uma palavra-passe. Ganha a venda e ganha a conta — pela ordem inversa da habitual, que é a ordem que funciona.
4.3 As três coisas que têm de estar visíveis antes do botão
- O custo total. Portes que aparecem no último passo são a segunda maior causa de abandono, e a mais irritante porque é evitável.
- Quando chega. Uma data estimada vale mais do que o nome do serviço de transporte.
- Como se devolve. Não é letra pequena — é um argumento de venda, e a partir do capítulo 11 é também uma obrigação legal.
4.4 Erros que não expulsam
Validar no lado do cliente e no servidor, mostrar o erro ao lado do campo, e nunca perder o que já foi preenchido. Um checkout que devolve a página em branco depois de um erro perdeu a venda — e a irritação é lembrada muito depois de o erro ser corrigido. UX Writing e Microcopia trata do texto destas mensagens, que é onde a diferença se joga.
Comece uma compra na sua loja e, a meio do pagamento, feche o separador. Volte cinco minutos depois. Encontra o processo onde ficou, ou tem de começar do princípio? E o stock que estava reservado — foi libertado?
Capítulo 05 Técnica
Pagamentos: autorizar não é cobrar
Dois passos que quase toda a gente trata como um, e o mecanismo que impede que uma repetição custe o dobro.
5.1 Os dois momentos
| Autorização | Captura | |
|---|---|---|
| O que faz | Reserva o valor no cartão | Move o dinheiro |
| Quando | No checkout | Idealmente ao expedir |
| Se correr mal | Anula-se sem custo | Exige reembolso, que é outro processo |
| Validade | Dias — e expira | — |
Cobrar só quando o produto sai evita reembolsar tudo o que se cancela — e em muitas jurisdições cobrar antes de expedir é discutível.
Mas obriga a duas coisas: vigiar a validade da autorização, porque expira ao fim de dias, e ter um caminho para quando a captura falha depois de o cliente já ter recebido confirmação. Quem captura logo troca este problema por outro — reembolsos frequentes, que custam dinheiro e reputação junto do banco.
5.2 A chave de idempotência
O cliente carrega duas vezes. A rede repete o pedido. O seu código tenta outra vez porque não recebeu resposta. Em qualquer destes casos, sem protecção, cobra duas vezes.
POST /pagamentos
Idempotency-Key: enc_8f4c2a91-checkout // gerada UMA vez, no início
// 1ª vez → processa e guarda o resultado sob esta chave
// 2ª vez → devolve o MESMO resultado, sem cobrar de novo
Gerar a chave no momento do envio em vez de no início do processo. Assim, cada tentativa produz uma chave nova, e o sistema de pagamentos vê duas operações legitimamente diferentes.
A chave tem de nascer com a tentativa de compra e sobreviver a todas as repetições dela. Guarde-a na sessão do checkout, não a recalcule.
5.3 O webhook é a fonte de verdade, não o regresso do cliente
O padrão errado, e é o mais comum: criar a encomenda quando o cliente volta à página de sucesso. Basta o cliente fechar o separador ao voltar do banco para o dinheiro ter sido cobrado e a encomenda não existir.
| Regra do webhook | Porquê |
|---|---|
| Verificar a assinatura | Sem isso, qualquer pessoa confirma encomendas por si |
| Tratar repetições | São garantidos «pelo menos uma vez», nunca «exactamente uma» |
| Aceitar fora de ordem | A captura pode chegar antes da autorização |
| Responder depressa e processar depois | Uma resposta lenta faz o fornecedor repetir |
5.4 Reconciliar, porque os dois lados divergem sempre
Uma vez por dia, compare o que o sistema julga ter cobrado com o que o fornecedor diz ter cobrado. Vão divergir — um webhook perdido, uma captura falhada, um reembolso feito no painel do fornecedor e não no seu sistema. A pergunta não é se acontece; é se descobre no dia seguinte ou no fecho do trimestre.
Reenvie manualmente um webhook de pagamento já processado, a partir do painel do seu fornecedor. O sistema cria uma segunda encomenda, ou reconhece que já a tinha? É o teste mais rápido de saber se está protegido.
Capítulo 06 Crítica
SCA: o passo que o material americano não menciona
Na Europa, autenticar o pagamento é obrigação legal desde 2019. Quem desenha o checkout a partir de exemplos norte-americanos descobre isto tarde.
6.1 O que a lei exige
A Directiva dos Serviços de Pagamento (PSD2, 2015/2366/UE) introduziu a autenticação forte do cliente — em inglês, Strong Customer Authentication —, em vigor desde 13 de Setembro de 2019. Exige que o pagamento seja confirmado com pelo menos dois de três factores independentes:
| Factor | Exemplo |
|---|---|
| Algo que se sabe | Um código, uma palavra-passe |
| Algo que se tem | O telemóvel, o cartão físico |
| Algo que se é | Impressão digital, reconhecimento facial |
Na prática, quase sempre uma passagem pela aplicação do banco, ou por um ecrã de autenticação intermédio, a meio do pagamento.
O pagamento deixa de ser síncrono. O cliente sai do seu site, autentica-se noutro lado e volta — se voltar. Tudo o que o capítulo 4 diz sobre estados retomáveis e o capítulo 5 sobre o webhook ser a fonte de verdade existe por causa disto.
Um checkout desenhado a assumir que «carregar em pagar» devolve sucesso ou falha na mesma resposta não funciona na Europa. E o problema não aparece nos testes, porque em modo de teste quase nunca se dispara a autenticação real.
6.2 As isenções, e porque não se deve contar com elas
| Situação | Pode dispensar autenticação |
|---|---|
| Valor baixo | Até certo montante, e com contagem — ao fim de várias, pede na mesma |
| Comerciante de confiança | Se o cliente o marcou como tal no banco |
| Pagamento recorrente | A primeira autentica-se; as seguintes, tipicamente não |
| Iniciado pelo comerciante | Renovações e cobranças programadas |
Quem decide é o banco emissor, não o comerciante. Pode pedir a isenção e ser recusada. Desenhe sempre para o caso em que a autenticação acontece e trate a isenção como um bónus — o inverso produz um sistema que funciona em testes e falha com clientes reais.
6.3 O que se ganha: a responsabilidade muda de lado
Numa compra autenticada, a responsabilidade por uma contestação fraudulenta desloca-se do comerciante para o emissor. É o contrapeso ao atrito: mais um passo no checkout, e menos exposição a fraude com cartão roubado — que é o tipo de fraude que, sem autenticação, o comerciante paga sozinho, com o produto já expedido.
Antes de qualquer sistema de pontuação: morada de entrega diferente da de facturação em compras de valor alto, vários cartões no mesmo cliente em pouco tempo, e compra grande numa conta criada há minutos. Não são provas — são motivos para uma verificação manual em vez de uma recusa automática, que custa vendas legítimas.
6.4 O que aí vem, e o cuidado a ter ao ler sobre isso
Há uma revisão em curso — uma terceira directiva e um regulamento de serviços de pagamento — com acordo político alcançado em Novembro de 2025. Não estava adoptada em definitivo à data desta apostila. Vai encontrar muito texto a descrevê-la como se já fosse lei; antes de mudar um sistema por causa disso, confirme o estado do processo legislativo na fonte do capítulo 12.
O seu fornecedor de pagamentos tem cartões de teste que obrigam à autenticação. Use um e percorra o checkout até ao fim. Depois repita e abandone no ecrã do banco. O que acontece à encomenda? E ao stock reservado? As duas respostas costumam ser desagradáveis.
Capítulo 07 Técnica
Dinheiro: o capítulo que evita processos
Três decisões pequenas que, tomadas mal, produzem diferenças de cêntimos — e cêntimos em contabilidade são um problema muito maior do que parecem.
7.1 Nunca em vírgula flutuante
// o clássico, e é verdade em quase todas as linguagens
0.1 + 0.2 === 0.3 // false
0.1 + 0.2 // 0.30000000000000004
Números de vírgula flutuante são aproximações em base dois. Aplicados a dinheiro, produzem diferenças minúsculas que se acumulam e aparecem no fecho de contas, na diferença entre a soma das linhas e o total, ou numa factura que não bate certo por um cêntimo.
Guarde dinheiro como inteiro, na unidade mínima da moeda — cêntimos —, e formate
só na apresentação. 8990 é 89,90 €. Todas as contas em inteiros; a divisão só no fim, com
regra de arredondamento explícita.
Guarde sempre a moeda ao lado do valor. Um inteiro sem moeda é ambíguo, e ienes não têm casas decimais — a suposição de que «são sempre dois dígitos» é falsa.
7.2 Arredondar: onde, e uma vez só
Três linhas a 33,33 € com 23% de imposto podem dar dois totais diferentes conforme se arredonde por linha ou no fim. Nenhum está errado; ter os dois no mesmo sistema, sim.
Escolha uma regra, escreva-a, e aplique-a em todos os sítios — incluindo no que a factura mostra. Um cliente que soma as linhas e não chega ao total escreve ao apoio, e tem razão.
7.3 O IVA transfronteiriço, que apanha quem vende para fora
Desde Julho de 2021, existe um limiar único de 10 000 € por ano para o conjunto das vendas à distância a consumidores noutros Estados-membros. Abaixo dele, aplica-se tipicamente a taxa do país de origem; acima, aplica-se a taxa do país do consumidor.
| Situação | Consequência prática |
|---|---|
| Abaixo do limiar | Uma taxa. O sistema pode ser simples |
| Acima do limiar | Taxa por país de destino — o preço final varia com a morada |
| Declaração | O regime de balcão único (OSS) permite declarar tudo num só Estado-membro |
Se a taxa depende do destino, o preço com imposto não pode ser um valor fixo no catálogo — depende da morada, que só se conhece a meio do checkout. Uma loja que mostra preços com IVA (o que é a norma no B2C europeu) tem de decidir o que faz quando o total muda ao introduzir a morada.
A saída habitual é fixar o preço final e absorver a diferença de taxa na margem. É uma decisão de negócio com consequência técnica — e é muito mais barata de tomar antes de construir do que depois.
7.4 A factura é imutável
Emitida, uma factura não se altera. Corrige-se com outro documento — nota de crédito. Isto tem duas consequências no modelo do capítulo 2: os valores são copiados para o documento, e a numeração é sequencial e sem buracos. Um número reservado e não usado é um problema, e reciclá-lo é pior.
Pegue numa factura real da sua loja com várias linhas e some-as à mão. Bate certo com o total, ao cêntimo? Se não bater, tem duas regras de arredondamento a conviver no mesmo sistema, e o problema vai crescer com o volume.
Capítulo 08 Modelo
A encomenda é um ciclo, não uma linha
Uma coluna «estado» com cinco valores parece suficiente durante seis meses. Depois começa a haver linhas que a realidade não consegue descrever.
8.1 Os estados que faltam sempre
Os quatro marcados são os que quase nunca estão no primeiro desenho, e cada um deles aparece na primeira semana de operação real.
Alguém corrigir encomendas directamente na base de dados. Quando a realidade não cabe nos estados possíveis, é isso que acontece — e o histórico deixa de ser confiável exactamente nos casos que mais interessa auditar.
Se ouvir «esta encomenda está estranha, vou corrigir na base de dados», não é um problema de operação. É o modelo a dizer que não sabe representar o que aconteceu.
8.2 Transições, não atribuições
A diferença entre um sistema que se aguenta e um que não: as transições permitidas são explícitas. De entregue não se volta a a aguardar pagamento. De cancelada não se passa a expedida. Escrever a lista das transições legais — e recusar as outras — é meia hora de trabalho que impede uma categoria inteira de estados impossíveis.
É a mesma ideia dos tipos fechados que Java e Spring aplica
com sealed: tornar o estado impossível inexprimível, em vez de confiar que
ninguém o vai escrever.
8.3 Guardar o que aconteceu, não só o que é
| Só o estado actual | Estado actual e histórico |
|---|---|
| «Está devolvida» | «Foi paga às 14:12, expedida a 3, entregue a 5, devolvida a 11» |
| Impossível responder ao apoio | Responde sozinho |
| Impossível auditar | Auditável |
É o mesmo princípio dos acontecimentos contra atributos de Email, CRM e Retenção: um estado substituído apaga o passado, e em comércio o passado é o que se tem de conseguir provar.
8.4 A encomenda não é o pagamento
São dois ciclos com ritmos diferentes, e juntá-los numa tabela é o que torna impossível representar o reembolso parcial, a segunda tentativa de pagamento ou a captura que falha depois da expedição. A encomenda é o que o cliente comprou; o pagamento é uma sequência de operações de dinheiro associadas a ela. Um para muitos, sempre.
Tente representar, no seu modelo actual: (a) metade da encomenda expedida e a outra metade em rotura; (b) um artigo devolvido de três; (c) pagamento recusado, cliente tenta outra vez e resulta; (d) reembolso de 12 € de portes sem devolução de produto. Cada um que não conseguir representar é uma correcção manual à espera de acontecer.
Capítulo 09 Método aplicado · Demo
Sessenta segundos de Black Friday
Role devagar. Um minuto de tráfego real sobre um artigo com três unidades — e as cinco avarias que só existem quando há gente a sério.
Seis meses em produção sem um incidente
É a parte que interessa. Nenhuma das cinco avarias que se seguem é um erro de programação — são todas comportamentos correctos de código escrito para um mundo onde as coisas acontecem uma de cada vez. A Black Friday não introduz erros novos; revela os que já lá estavam.
Sete confirmações para três unidades
Sete pedidos leem 3 antes de qualquer um escrever. Não há excepção, não há
registo de erro, não há alerta — sete clientes recebem confirmação e quatro vão receber,
horas depois, um email a dizer que afinal não há. O custo não é o stock: é a confiança que o
capítulo 1 dizia decidir a compra.
178 € cobrados por uma camisola de 89 €
A página demorou, o cliente carregou outra vez. Sem chave de idempotência, são duas operações legítimas e diferentes aos olhos do fornecedor de pagamentos. O reembolso não é a operação inversa da cobrança — tem custo, prazo, e uma conversa com o apoio ao cliente.
Um cliente pagou e não tem encomenda
O webhook chegou em 300 ms; o cliente, com rede lenta, voltou nove segundos depois. Como a encomenda só é criada no regresso, o webhook não encontrou nada e desistiu. A ordem de chegada nunca esteve garantida — apenas nunca tinha sido posta à prova.
Duas unidades presas durante trinta minutos
Dois clientes foram levados ao banco pela autenticação obrigatória e desistiram lá. As reservas têm prazo de trinta minutos — e não há nada a libertá-las mais cedo. Durante a hora de maior procura do ano, duas unidades existem no armazém e não podem ser vendidas. Ninguém vê isto: o painel diz stock zero, e stock zero parece sucesso.
Quatro cancelamentos, dois reembolsos, uma correcção manual
E, no meio disso, a descoberta de que a máquina de estados não tem caminho para «paga e reembolsada sem nunca ter sido expedida». Alguém abre a base de dados e corrige à mão — e a partir daí o histórico dessa encomenda deixa de ser confiável, precisamente naquela que mais interessaria auditar.
Quatro decisões, nenhuma tecnologia nova
Decremento atómico, chave de idempotência gerada no início, webhook como fonte de verdade, e libertação de reservas expiradas. Todas conhecidas, todas baratas, todas adiadas pela mesma razão: durante seis meses, o sistema funcionou sem elas. É esse o argumento que parece razoável até ao minuto em que deixa de ser.
As cinco avarias têm a mesma forma: uma suposição sobre ordem ou exclusividade que era verdadeira com pouco tráfego. Só uma pessoa de cada vez. O cliente volta antes do webhook. Ninguém carrega duas vezes. Ninguém desiste a meio.
Nenhuma dessas suposições está escrita em lado nenhum, e é por isso que não são revistas. Escrevê-las é o exercício mais útil que uma equipa pode fazer antes de uma campanha.
Escreva as suposições de ordem e de exclusividade do seu sistema — o que é que este código assume que não acontece ao mesmo tempo? Para cada uma, responda: o que se parte se acontecer? É a lista de tudo o que a sua próxima campanha vai testar por si.
Capítulo 10 Operação
Entregar é física
A constante que a prospectiva identifica e que nenhum software remove: há um piso de custo e de tempo, e ele decide mais do negócio do que a tecnologia.
10.1 O custo de servir, decomposto
| Parcela | Onde se esconde |
|---|---|
| Transporte | A única que quase toda a gente conta |
| Preparação | Tempo de pessoa a recolher, verificar e embalar |
| Embalagem | Material, e o volume que ele acrescenta ao preço do transporte |
| Armazenamento | Espaço ocupado por tempo — o artigo que não roda paga renda |
| Devoluções | A parcela mais subestimada — cap. 11 |
| Apoio | Cada «onde está a minha encomenda?» tem custo real |
São uma decisão de margem disfarçada de decisão de marketing. Funcionam — reduzem o abandono do capítulo 4 — e transferem o custo para dentro do preço ou para fora da margem.
O erro caro não é oferecer portes; é oferecê-los sem saber o custo médio por encomenda e sem reparar que ele varia com o peso, o volume e o destino. Uma loja que oferece portes acima de 50 € e vende sobretudo artigos volumosos e baratos está a perder dinheiro em cada encomenda que celebra.
10.2 A promessa é um contrato
«Entrega em 2 a 3 dias úteis» é uma promessa cujo cumprimento não controla — depende da transportadora. Duas regras que reduzem quase todo o atrito:
- Prometa a partir de dados, não de brochura. Se a média real são 4 dias, prometer 2 gera contactos de apoio em cada encomenda.
- Avise antes de falhar. Um email a dizer «vai atrasar dois dias» custa muito menos do que um cliente a descobrir sozinho — e é a diferença entre um contratempo e uma queixa.
10.3 Seguimento: o email que evita o contacto
Cada «onde está a minha encomenda?» é tempo de pessoa. A maior parte evita-se com três mensagens automáticas — confirmada, expedida com código de seguimento, entregue — que são também as três de Email, CRM e Retenção que ninguém classifica como marketing e toda a gente lê.
Note a implicação do capítulo 4 da apostila de retenção: estas mensagens saem do domínio transaccional. Se partilhar domínio com as promoções, uma campanha infeliz impede o cliente de receber o código de seguimento — e aí o custo de apoio volta todo.
10.4 Onde está o stock não é onde está o número
O stock do sistema e o stock da prateleira divergem sempre: quebras, erros de contagem, artigos danificados, devoluções ainda por conferir. A pergunta não é como evitar a divergência — é com que frequência se mede.
Contagem cíclica, por amostragem contínua, em vez de um inventário anual que pára a operação. E uma regra clara sobre o que fazer quando falha: é preferível uma loja que diz «esgotado» a uma que aceita e cancela — a segunda gasta a confiança do capítulo 1 e o dinheiro do capítulo 5.
Some as seis parcelas da tabela 10.1 e divida pelo número de encomendas do último mês. Compare com o que cobra de portes. A diferença, multiplicada pelo volume, é um número que costuma mudar decisões — e quase nunca é calculado.
Capítulo 11 Crítica
Devoluções: um direito, não uma política
Na União Europeia não se decide se se aceitam devoluções. Decide-se como. E desde Junho de 2026 há uma obrigação nova que muita loja ainda não cumpre.
11.1 Os catorze dias
A Directiva dos Direitos dos Consumidores (2011/83/UE) dá ao consumidor 14 dias para se retractar de uma compra à distância, sem indicar motivo. O prazo conta a partir da recepção dos bens — não da encomenda.
| Ideia comum | O que a directiva estabelece |
|---|---|
| «A nossa política é 30 dias, somos generosos» | 14 dias são o mínimo legal. Oferecer mais é comercial; oferecer menos não é possível |
| «Só aceitamos com a embalagem intacta» | O consumidor pode examinar o bem. Pode haver responsabilidade por uso além disso, não recusa liminar |
| «Tem de explicar porquê» | Sem motivo é literal |
| «Devolvemos o valor do produto» | Inclui o custo de envio normal pago inicialmente |
Há excepções — bens personalizados, perecíveis, selados por razões de saúde já abertos, entre outras. São excepções específicas, não uma cláusula geral de escape.
A Directiva (UE) 2023/2673 introduziu na Directiva dos Direitos dos Consumidores um novo artigo 11.º-A: quando o contrato é celebrado através de uma interface em linha, o comerciante tem de disponibilizar uma função de retractação — na prática, um botão — claramente identificado, visível e disponível durante todo o prazo de retractação.
Prazo de transposição: 19 de Dezembro de 2025. Aplicação: 19 de Junho de 2026. Já está a correr.
Uma ressalva honesta: o diploma tem por objecto principal os serviços financeiros à distância, mas o artigo 11.º-A foi inserido na parte geral da directiva, e é assim que a generalidade dos comentadores o lê — aplicável a contratos à distância celebrados em linha. A extensão exacta está a ser discutida. Se vende para a UE, confirme com quem possa assinar a interpretação, porque a data já passou.
11.2 O fluxo inverso é um fluxo, não uma excepção
Cada passo precisa de estado próprio, e o reembolso tem de saber a que operação de pagamento corresponde. É por isso que o capítulo 8.4 separa encomenda de pagamento — sem essa separação, um reembolso parcial não tem onde existir.
11.3 A economia, que decide mais do que a regra
Uma devolução custa o transporte de volta, o tempo de conferência, a perda de valor do artigo e, muitas vezes, o reembolso dos portes originais. Em várias categorias, é mais barato reembolsar sem pedir o artigo de volta — e é uma decisão racional, não generosidade.
Facilitar a devolução aumenta as vendas e aumenta as devoluções. O saldo é quase sempre positivo, pela mesma razão do capítulo 4 da apostila de retenção: o atrito que se põe à saída aparece à entrada. Quem hesita em comprar por não saber se pode devolver, não compra — e essa venda perdida não aparece em relatório nenhum.
Mas há o outro lado: uma taxa de devolução muito acima da categoria não é sinal de política generosa. É sinal de que as fotografias, as medidas ou a descrição estão a prometer outra coisa — e isso corrige-se no capítulo 2, não aqui.
Abra a sua loja e procure a função de retractação do artigo 11.º-A: visível, identificada e disponível durante todo o prazo. Depois calcule o custo médio de uma devolução, com as quatro parcelas do 11.3. Se a segunda conta lhe der um número maior do que o valor do artigo, encontrou uma categoria em que reembolsar sem recolher é a decisão certa.
Capítulo 12 Ofício · Catálogo
O que fica, e onde verificar
Doze regras que sobrevivem a mudanças de plataforma, e as fontes primárias onde se confirma o que aqui está.
12.1 As doze regras
- Existências pertencem à variante, nunca ao produto.
- Modele os eixos de variação como dados, não como colunas do esquema.
- Copie o preço e a taxa para a linha de encomenda. A factura é um documento sobre o passado.
- Ler, decidir e escrever têm de ser uma só operação sempre que o valor for disputado.
- Reservas têm prazo, e alguém tem de as libertar.
- Autorizar não é capturar. Capture ao expedir e vigie a validade.
- A chave de idempotência nasce no início da compra, não no momento do envio.
- O webhook é a fonte de verdade; o regresso do cliente só mostra.
- Desenhe sempre para o caso em que a autenticação acontece. A isenção é bónus.
- Dinheiro em inteiros, com a moeda ao lado, e uma só regra de arredondamento.
- Transições explícitas. Correcções manuais na base de dados são o modelo a falhar.
- Devolução é fluxo, não excepção — e na UE é direito, não política.
Sete são sobre o que acontece ao mesmo tempo ou fora de ordem. Uma loja é um sistema onde muita gente disputa recursos finitos e onde cada compra continua viva durante semanas depois de o cliente ter fechado o separador.
É por isso que quase todas as avarias caras aparecem só com tráfego a sério, e é por isso que a lista de suposições do exercício 9.1 vale mais do que qualquer teste de carga: o teste mede o que aguenta; a lista diz o que se parte.
12.2 Catálogo: onde verificar
Directiva 2011/83/UE — Direitos dos Consumidores
Quem: União Europeia, via EUR-Lex. O quê: o texto que estabelece os 14 dias de retractação, a informação pré-contratual e as excepções.
A favor: é a fonte, e resolve num parágrafo discussões que se arrastam em fóruns; as
excepções ao direito de retractação estão lá enumeradas, não são interpretáveis à vontade.
Contra: é uma directiva — cada Estado-membro transpõe, e o detalhe aplicável é o da lei
nacional.
Directiva (UE) 2023/2673 — a função de retractação
Quem: União Europeia. O quê: o diploma que introduz o artigo 11.º-A e a obrigação do botão, aplicável desde 19 de Junho de 2026.
A favor: é obrigação em vigor e recente, e a maior parte do material sobre comércio digital
ainda não a menciona.
Contra, e é importante: o objecto principal do diploma são os serviços financeiros à distância;
a extensão exacta do artigo 11.º-A a todo o comércio em linha está a ser discutida. Leia-o
antes de aceitar qualquer resumo, incluindo este.
Serviços de pagamento — Comissão Europeia
Quem: Comissão Europeia. O quê: a página oficial sobre a PSD2 e a autenticação forte, e o estado do processo de revisão (PSD3 e regulamento).
A favor: é onde se confirma o que já é lei e o que ainda é proposta — a distinção que
o capítulo 6.4 avisa que muito texto ignora.
Contra: descreve o quadro, não a implementação; não encontra aqui como integrar nada.
Balcão Único do IVA (OSS)
Quem: Comissão Europeia. O quê: o regime que permite declarar num só Estado-membro o IVA devido em vários, e as regras de vendas à distância.
A favor: responde directamente à decisão de desenho do capítulo 7.3 — se a taxa depende do
destino, o preço com imposto não pode ser fixo.
Contra: é matéria fiscal com particularidades nacionais; a decisão final é de um contabilista,
não de quem programa.
A Sua Europa — Empresas
Quem: União Europeia. O quê: a versão praticável das obrigações de quem vende para outros Estados-membros — IVA, consumidores, contratos.
A favor: escrita para quem tem de decidir, não para juristas, e existe em português; é o
melhor ponto de partida antes de ir ao texto legal.
Contra: simplifica por desenho — para casos limite volta a precisar da fonte.
Documentação de pagamentos da Stripe
Quem: Stripe. O quê: a referência prática de fluxos de pagamento — autorização e captura, chaves de idempotência, webhooks, autenticação.
A favor: explica os conceitos melhor do que quase toda a literatura neutra, e quase
tudo se transpõe para outros fornecedores; é onde os capítulos 5 e 6 se aprofundam.
Contra: é de um fornecedor — os nomes das operações e alguns comportamentos são próprios, e
convém separar o que é do domínio do que é da Stripe.
As seis ligações foram verificadas em Setembro de 2026.
12.3 O que vem a seguir
Se o problema é a forma do sistema
Arquitetura e System Design para as fronteiras, API Design para o contrato, e Java e Spring para transacções e recursos finitos — o mesmo problema do capítulo 3 noutra roupa.
Se o problema é a procura
O Futuro do Comércio Digital é a prospectiva que esta apostila completa. Para o lado da procura, Tráfego Pago Avançado e Email, CRM e Retenção — que é onde se constrói a relação directa que o capítulo 1 nomeia como o único activo não alugado.
Se o problema é o cliente perder-se
UX Writing e Microcopia para as mensagens do checkout e dos erros, e Pesquisa com Utilizadores para descobrir onde é que ele se perde de facto.
Se o problema é medir
Experimentação, Feature Flags e A/B para testar alterações ao checkout sem se enganar, e Estatística I — Ver os Dados para ler o que sair.
12.4 A última ideia
Quase tudo o que corre mal numa loja tem a mesma forma: alguma coisa aconteceu ao mesmo tempo que outra, ou fora da ordem esperada, e o código assumia que não. As suposições não estão escritas em lado nenhum — é por isso que ninguém as revê, e por isso que a primeira campanha a sério é sempre a primeira auditoria a sério.
O resto é a constante mais antiga do comércio, que a prospectiva já dizia: preço, disponibilidade e confiança decidem a compra. Um stock que mente destrói os três de uma só vez, e nenhuma das doze regras acima existe por outra razão.