A tarefa é exibida como concluída, mas o download é um arquivo vazio? Status de execução e entrega separados
O botão diz "Concluído", mas quando clico em download, recebo um arquivo vazio? O problema muitas vezes não é o texto do prompt, mas o back-end apenas lembra que o algoritmo foi executado, e não se a entrega está pronta. Somente separando o status de execução e o status de entrega o front-end pode informar ao usuário o progresso real. Este artigo explica claramente a ideia de divisão.
A página de tarefas exibe "Concluído", mas quando clico em download, recebo um arquivo vazio. Muitas vezes, o problema não é o texto do prompt em si, mas o backend apenas registra o final da execução do algoritmo e não registra se a entrega está pronta. Este artigo foi escrito para desenvolvedores que realizam processamento de documentos, tarefas assíncronas ou integração de tradução. Após a leitura, você saberá como separar o status de execução e o status de entrega para que o front-end possa mostrar o real progresso ao usuário.
Os exemplos neste artigo usam amostras sintéticas e o código foi verificado em um ambiente isolado. Isto não representa uma garantia de todos os arquivos reais ou efeitos do produto. Antes de processar documentos importantes, guarde os originais e revise-os de acordo com os limites e itens de aceitação do texto.
O download é um arquivo vazio, mas a tarefa é exibida como concluída? Conclusão de uma frase
Primeiro divida o "processamento concluído" em três estados: processamento, produto e aceitação e, em seguida, deixe o front-end exibir apenas o estado confirmado.
| sua situação | Práticas recomendadas | razão |
|---|---|---|
| A tarefa terminou, mas o arquivo ainda não foi gerado | Entre no estado "Produto pronto" e ele poderá ser baixado sem mostrá-lo antecipadamente. | O fim do processamento significa apenas que o cálculo foi interrompido, mas não significa que existam arquivos que possam ser localizados. |
| O arquivo foi gerado, mas o conteúdo ainda não foi verificado | Continue "Verificando resultados" e aguarde a aceitação | A prontidão do produto não significa cumprir o contrato de entrega |
| Falha na tarefa | Exibir o estágio e o motivo da falha e fornecer as ações correspondentes | A falha também deve ter etapas e não pode ser escondida com um ícone giratório |
| Download retorna HTTP 200 | Continue verificando o tipo, tamanho, análise de disponibilidade e conteúdo esperado | 200 pode corresponder a uma página de login, erro JSON ou um documento em branco |
Pelo menos diferencie entre processamento, produto e aceitação
O fim do processamento significa que o cálculo foi interrompido; o produto está pronto, o que significa que o arquivo pode ser localizado; e a aceitação é concluída, o que significa que o arquivo atende ao contrato de entrega. Todos os três não ocorrem necessariamente ao mesmo tempo.
A falha também deve ter etapas e não pode ser ocultada por um ícone giratório permanente. O usuário sabe se ocorreu um erro durante o processamento, geração ou verificação, portanto, sabe se deve esperar, tentar novamente ou reparar a entrada.
📊 Comparação principal
| estado | Perguntas respondidas | Os usuários podem receber promessas de downloads? |
|---|---|---|
| Fim do processamento | Se o cálculo parou | Não |
| Produto pronto | Se existem arquivos locativos | Não, ainda precisa ser verificado |
| Aceitação concluída | Se os documentos atendem ao acordo de entrega | Sim, você pode |
Rejeitar explicitamente o sucesso do salto
from enum import Enum
class State(Enum):
PROCESSING = "processing"
ARTIFACT_READY = "artifact_ready"
VERIFIED = "verified"
FAILED = "failed"
def transition(state, event):
allowed = {
(State.PROCESSING, "stored"): State.ARTIFACT_READY,
(State.PROCESSING, "error"): State.FAILED,
(State.ARTIFACT_READY, "checks_passed"): State.VERIFIED,
(State.ARTIFACT_READY, "error"): State.FAILED,
}
if (state, event) not in allowed:
raise ValueError("invalid state transition")
return allowed[(state, event)]
s = transition(State.PROCESSING, "stored")
assert s is State.ARTIFACT_READY
assert transition(s, "checks_passed") is State.VERIFIED
assert transition(s, "error") is State.FAILED
try:
transition(State.PROCESSING, "checks_passed")
except ValueError:
pass
else:
raise AssertionError("cannot skip artifact readiness")
Essa máquina de estados sintéticos não inclui cancelamento de fila, recalibração ou exclusão expirada. A implementação em produção deve ser baseada na expansão do negócio, não em condensar todos os eventos em um binário "sucesso/fracasso".
Mensagens assíncronas também podem ser duplicadas ou fora de ordem, exigindo a cooperação do número de versão, transações e poderes. Caso contrário, mensagens antigas podem sobrescrever novos estados, e a mesma tarefa pode ser escrita repetidamente.
Prompts frontend devem corresponder a fatos
Cada estado frontend deve corresponder a fatos que o backend pode confirmar e fornecer ações acionáveis correspondentes.
| Status | Os usuários podem ver | Ações disponíveis |
|---|---|---|
| processing | Processando | Verifique seu progresso ou cancele |
| artifact_ready | Os resultados estão sendo revisados | Não há compromisso prévio de utilizá-lo |
| verified | Arquivos disponíveis para download | Baixe e veja as instruções de aceitação |
| failed | Estágios de falha e suas causas | Corrija ou tente novamente conforme a causa |
O download bem-sucedido não significa que o conteúdo está correto
O HTTP 200 pode devolver páginas de login, JSON incorreto ou documentos em branco. A aceitação deve pelo menos marcar os seguintes itens:
- Tipo: Se o formato de arquivo atende às expectativas
- Tamanho: Se o arquivo está vazio ou possui uma anomalia significativa
- Disponibilidade de Análise Sintática: Se arquivos podem ser abertos e analisados normalmente
- Conteúdo Esperado: Se o conteúdo corresponde aos requisitos da tarefa
Para tradução, integridade linguística e revisão terminológica são verificações de nível mais alto e não devem ser substituídas por "abertura de arquivos".
Mantenha a transparência ao integrar capacidades de tradução
Após a conexão com o OmniDoc (Entrada de Produto), produtos proprietários ainda devem manter seu próprio status de armazenamento e entrega. Após concluir a tarefa da plataforma, ela pode primeiro ser mapeada para "Começar a receber resultados" e exibida com sucesso após confirmar que o arquivo está disponível. Isso está mais alinhado com a experiência real do usuário do que transmitir diretamente um estado.
Referências: Python enum
🎯 Qual método combina com você?
Se você ......
Se sua tarefa é apenas processamento backend e você não entrega documentos externamente,
Apenas as etapas de conclusão e falha do processamento são registradas; produtos e aceitação podem ser temporariamente omitidos.
Se você precisar que os usuários baixem os resultados
Você deve esperar até que o produto esteja pronto e passe pela aceitação antes de aparecer como baixável.
Se você se conectar a uma plataforma de processamento de terceiros
Mapee a conclusão da plataforma para "Começar a receber resultados", confirme o arquivo e então exiba-o como bem-sucedido.
Se a tarefa puder ser repetida ou fora de ordem, ela deve ser devolvida
Adicionar um número de versão ao estado e garantir que o estado avance apenas por meio de transações e poderes.
❓ Perguntas Frequentes (FAQ)
1. A tarefa mostra 'Concluído', então por que ainda não posso baixá-la?
Porque a conclusão do processamento significa apenas que o cálculo para, e é necessário confirmar que o produto está pronto e passar pela aceitação antes que o documento atenda ao acordo de entrega.
2. Se o download devolver HTTP 200, isso significa que o arquivo está ok?
Não necessariamente. O HTTP 200 pode retornar páginas de login, JSON incorreto ou documentos em branco, e você também precisa verificar o tipo, tamanho, disponibilidade de análise e conteúdo esperado.
3. Por que trazer estágios para o estado fracassado?
A fase de falha pode informar os usuários se o problema está no manuseio, geração ou verificação, facilitando para eles decidirem se devem esperar, tentar novamente ou corrigir a entrada.
4. É suficiente que uma tarefa de tradução esteja aberta enquanto o arquivo pode ser aberto?
Não o suficiente. A integridade da linguagem e a revisão terminológica são verificações de nível mais alto e não devem ser substituídas por "abertura de arquivos".
📝 Resumo
Ao separar os estados de execução e entrega, a interface pode informar os usuários sobre o progresso real. Somente quando o produto estiver pronto e passar pela aceitação deve ser mostrado como baixável.
Experimente agora: Envie seu documento para começar a traduzir, preservando a formatação original


