Olá, Flávio. Como vai?
Excelente lógica! Você estruturou muito bem as etapas do seu algoritmo. A ideia de usar o valor 0 como um "ponto de parada" (também chamado de condição de sentinela) é uma prática muito comum e eficiente na programação para encerrar laços de repetição quando não sabemos de antemão quantas entradas o usuário vai digitar.
Analisando a sua estrutura, há apenas um detalhe importante na ordem do seu Processamento que pode gerar um pequeno "bug" conceitual: do jeito que foi descrito, se o usuário digitar 0, o programa primeiro vai somar esse 0 à variável somatória e só depois vai sair do laço. Na matemática isso não altera o resultado (somar zero não muda o valor), mas se fosse um sistema de multiplicação ou outra operação, poderia causar problemas.
Por isso, a boa prática na lógica de programação é verificar a condição de saída imediatamente após a entrada do dado, e só realizar a soma se o valor for válido (diferente de zero).
Para ilustrar perfeitamente como esse fluxo funciona de forma contínua, preparei o desenho desse fluxo e a tradução dele em pseudocódigo:
Fluxo do Algoritmo
Pseudocódigo Corrigido
Início
Definir somatoria = 0
Definir despesa = -1 // Inicializa com um valor qualquer diferente de 0
Enquanto despesa != 0 Faça
Exibir "Digite o valor da despesa (ou 0 para sair): "
Ler despesa
Se despesa != 0 Então
somatoria = somatoria + despesa
FimSe
FimEnquanto
Exibir "A somatória das despesas é: " + somatoria
Fim
Note que ao colocar a estrutura Se despesa != 0 antes de somar, garantimos que o número usado para sair do programa não passe pelo processamento de soma desnecessariamente.
Você está pegando os fundamentos do pensamento computacional muito rápido. Parabéns pelo desenvolvimento do algoritmo!
Espero que possa ter lhe ajudado!