criado repositório jhonny-editor no Gitea adicionado script admin/deploy.command com commit automático atualizado admin/DEV-NOTES.md com template limpo Resumo: - 48 arquivos alterados - 26 novos - 19 modificados - 3 removidos 22 files changed, 658 insertions(+), 568 deletions(-) Arquivos: - AGENTS.md - admin/DEV-NOTES.md - admin/OpenCut.command - admin/commit.command - admin/deploy.command - admin/update.command - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/ARQUITETURA.md - code/engine/arquitetura/README.md - code/engine/gerar_relatorio_timeline.py - code/engine/integracoes/apple_speech/apple_speech_transcriber.swift - code/engine/integracoes/apple_speech/provider_de_transcricao_apple.py - code/engine/integracoes/midia/__init__.py - code/engine/integracoes/whisper/provider_de_transcricao_local.py - code/engine/scanner/__init__.py - code/engine/scanner/coordenacao/__init__.py - code/engine/scanner/descoberta/__init__.py - code/engine/scanner/modelos.py - code/engine/scanner/transcricao_da_timeline.py - code/src/tools/discovery.ts - :memory:.ses - admin/Jhonny.command - admin/inativos/OpenCut.command - admin/inativos/update.command - code/docs/glossario-analise-emocional.md - code/docs/levantamento-apple-vision-e-apple-intelligence.md - code/docs/levantamento-ferramentas-analise-visual-local.md - code/engine/arquitetura/biblioteca-inteligente-de-videos.md - code/engine/executar_scanner.py - code/engine/integracoes/huggingface/ - code/engine/integracoes/midia/extracao_de_metadados.py - code/engine/integracoes/visual/ - code/engine/requirements-visual.txt - code/engine/scanner/configuracao_visual.py - code/engine/scanner/descoberta/descoberta_de_arquivos.py - code/engine/scanner/metadados.py - code/engine/scanner/relatorio_visual.py - code/engine/scanner/retakes/ - code/engine/scanner/visual.py - code/engine/testes/test_analise_visual_local.py - code/engine/testes/test_arquivos_e_metadados.py - code/engine/testes/test_provider_de_transcricao_apple.py - code/relatorios/analise-brools/ - code/relatorios/analise-visual/ - code/relatorios/audio/arquivos/ - code/relatorios/transcricao-timeline.md
654 lines
16 KiB
Markdown
654 lines
16 KiB
Markdown
# Instrução de Arquitetura da Engine
|
|
|
|
Este documento define o papel de cada classe, suas responsabilidades e o que ela não deve fazer.
|
|
|
|
# Estrutura do módulo `scanner`
|
|
|
|
O módulo `scanner` será responsável por analisar uma timeline completa antes que qualquer decisão de edição seja tomada.
|
|
|
|
Ele deverá apenas **descobrir, processar, organizar e salvar informações** sobre o material audiovisual.
|
|
|
|
O scanner **não deverá decidir quais trechos serão cortados**, nem aplicar cortes na timeline. Essas responsabilidades pertencem aos módulos posteriores, como o motor de decisão, o gerador de plano e o aplicador.
|
|
|
|
```text
|
|
scanner/
|
|
├── coordenacao/
|
|
├── descoberta/
|
|
├── metadados/
|
|
├── audio/
|
|
├── transcricao/
|
|
├── visual/
|
|
├── cenas/
|
|
├── eventos/
|
|
├── retakes/
|
|
└── persistencia/
|
|
```
|
|
|
|
---
|
|
|
|
# 1. Submódulo `coordenacao`
|
|
|
|
O submódulo `coordenacao` será responsável por organizar a execução do scanner.
|
|
|
|
Ele não fará a análise técnica dos vídeos. Sua função será controlar o fluxo, compartilhar o contexto e garantir que as análises sejam executadas na ordem correta.
|
|
|
|
## `AnalisadorDeTimeline`
|
|
|
|
### Papel
|
|
|
|
Será a classe principal de entrada do scanner.
|
|
|
|
Ela receberá uma timeline ou uma representação dela e iniciará o processo completo de análise.
|
|
|
|
### Responsabilidades
|
|
|
|
* Receber a timeline que será analisada.
|
|
* Criar o contexto inicial da análise.
|
|
* Montar ou receber o pipeline de análises.
|
|
* Iniciar a execução do pipeline.
|
|
* Retornar o resultado completo da análise.
|
|
* Informar o status geral do processo.
|
|
* Tratar erros gerais de execução.
|
|
* Permitir que a análise seja iniciada, interrompida ou retomada futuramente.
|
|
|
|
### Não deve fazer
|
|
|
|
* Extrair áudio diretamente.
|
|
* Transcrever vídeos.
|
|
* Detectar cenas.
|
|
* Analisar imagens.
|
|
* Detectar retakes.
|
|
* Decidir cortes.
|
|
* Alterar a timeline original.
|
|
|
|
---
|
|
|
|
## `PipelineDoScanner`
|
|
|
|
### Papel
|
|
|
|
Será responsável por executar as análises na ordem definida.
|
|
|
|
Ele funcionará como o controlador do fluxo interno do scanner.
|
|
|
|
### Responsabilidades
|
|
|
|
* Receber uma lista de componentes de análise.
|
|
* Executar cada componente na ordem correta.
|
|
* Entregar o mesmo contexto para a próxima análise.
|
|
* Registrar quais análises já foram executadas.
|
|
* Permitir execução parcial ou completa.
|
|
* Identificar falhas em etapas específicas.
|
|
* Permitir que determinadas análises sejam opcionais.
|
|
* Permitir futuramente execução paralela quando não houver dependências entre as análises.
|
|
|
|
### Exemplo de ordem
|
|
|
|
```text
|
|
Descoberta da timeline
|
|
↓
|
|
Descoberta de clipes
|
|
↓
|
|
Extração de metadados
|
|
↓
|
|
Extração de áudio
|
|
↓
|
|
Transcrição
|
|
↓
|
|
Análise visual
|
|
↓
|
|
Detecção de cenas
|
|
↓
|
|
Detecção de eventos
|
|
↓
|
|
Detecção de retakes
|
|
↓
|
|
Persistência
|
|
```
|
|
|
|
### Não deve fazer
|
|
|
|
* Implementar algoritmos de análise.
|
|
* Conhecer detalhes do Whisper, OpenCV, FFmpeg ou outros providers.
|
|
* Fazer chamadas diretas para APIs de IA.
|
|
* Tomar decisões de edição.
|
|
|
|
---
|
|
|
|
## `ContextoDeAnalise`
|
|
|
|
### Papel
|
|
|
|
Será o objeto que transportará todos os dados durante o processo de análise.
|
|
|
|
Ele funcionará como um estado compartilhado entre as classes do scanner.
|
|
|
|
### Responsabilidades
|
|
|
|
* Armazenar a timeline analisada.
|
|
* Armazenar sequências, faixas e clipes.
|
|
* Armazenar caminhos dos arquivos.
|
|
* Armazenar metadados técnicos.
|
|
* Armazenar áudios extraídos.
|
|
* Armazenar transcrições.
|
|
* Armazenar quadros extraídos.
|
|
* Armazenar cenas detectadas.
|
|
* Armazenar eventos encontrados.
|
|
* Armazenar possíveis retakes.
|
|
* Armazenar avisos, erros e status.
|
|
* Armazenar informações de execução.
|
|
* Permitir que os resultados sejam serializados.
|
|
|
|
### Não deve fazer
|
|
|
|
* Executar análises.
|
|
* Chamar providers diretamente.
|
|
* Decidir cortes.
|
|
* Alterar a timeline no editor.
|
|
|
|
---
|
|
|
|
# 2. Submódulo `descoberta`
|
|
|
|
O submódulo `descoberta` será responsável por identificar o que existe na timeline e onde os arquivos estão localizados.
|
|
|
|
## `DescobertaDaTimeline`
|
|
|
|
### Papel
|
|
|
|
Será responsável por descobrir a estrutura lógica da timeline.
|
|
|
|
### Responsabilidades
|
|
|
|
* Identificar a sequência ativa.
|
|
* Identificar outras sequências, quando necessário.
|
|
* Identificar as faixas de vídeo.
|
|
* Identificar as faixas de áudio.
|
|
* Identificar os clipes presentes em cada faixa.
|
|
* Identificar a ordem dos clipes.
|
|
* Identificar o posicionamento temporal dos clipes.
|
|
* Identificar os vínculos entre áudio e vídeo.
|
|
* Identificar transições e elementos existentes.
|
|
* Identificar clipes desativados ou ocultos.
|
|
* Criar uma representação interna da timeline.
|
|
|
|
### Não deve fazer
|
|
|
|
* Analisar o conteúdo visual.
|
|
* Transcrever o áudio.
|
|
* Detectar retakes.
|
|
* Decidir se um clipe será mantido ou removido.
|
|
|
|
---
|
|
|
|
## `DescobertaDeClipes`
|
|
|
|
### Papel
|
|
|
|
Será responsável por transformar os elementos encontrados na timeline em objetos de clipe que possam ser analisados pelo sistema.
|
|
|
|
### Responsabilidades
|
|
|
|
* Criar uma representação individual para cada clipe.
|
|
* Registrar o identificador do clipe.
|
|
* Registrar a faixa em que o clipe está.
|
|
* Registrar o tempo de início e fim na timeline.
|
|
* Registrar o tempo de início e fim no arquivo original.
|
|
* Registrar a duração.
|
|
* Registrar a posição relativa.
|
|
* Registrar vínculos com outros clipes.
|
|
* Identificar clipes de vídeo, áudio, imagens ou outros tipos de mídia.
|
|
|
|
### Não deve fazer
|
|
|
|
* Analisar o conteúdo do clipe.
|
|
* Gerar transcrição.
|
|
* Detectar cenas.
|
|
* Alterar a posição do clipe.
|
|
|
|
---
|
|
|
|
## `DescobertaDeArquivos`
|
|
|
|
### Papel
|
|
|
|
Será responsável por localizar os arquivos físicos relacionados aos clipes.
|
|
|
|
### Responsabilidades
|
|
|
|
* Resolver o caminho original do arquivo.
|
|
* Verificar se o arquivo existe.
|
|
* Identificar arquivos offline.
|
|
* Identificar arquivos duplicados.
|
|
* Identificar arquivos substituídos ou relinkados.
|
|
* Normalizar caminhos.
|
|
* Registrar permissões de acesso.
|
|
* Identificar o tipo de mídia.
|
|
* Preparar os arquivos para os providers.
|
|
|
|
### Não deve fazer
|
|
|
|
* Extrair metadados detalhados.
|
|
* Transcrever áudio.
|
|
* Analisar imagens.
|
|
* Corrigir automaticamente arquivos ausentes sem autorização.
|
|
|
|
---
|
|
|
|
# 3. Submódulo `metadados`
|
|
|
|
## `ExtracaoDeMetadados`
|
|
|
|
### Papel
|
|
|
|
Será responsável por extrair informações técnicas dos arquivos de mídia.
|
|
|
|
### Responsabilidades
|
|
|
|
* Identificar resolução.
|
|
* Identificar largura e altura.
|
|
* Identificar taxa de quadros.
|
|
* Identificar duração.
|
|
* Identificar codec de vídeo.
|
|
* Identificar codec de áudio.
|
|
* Identificar quantidade de canais.
|
|
* Identificar taxa de amostragem.
|
|
* Identificar profundidade de bits.
|
|
* Identificar orientação.
|
|
* Identificar timecode.
|
|
* Identificar tamanho do arquivo.
|
|
* Identificar formato do contêiner.
|
|
* Identificar informações de gravação, quando disponíveis.
|
|
* Registrar erros de leitura.
|
|
|
|
### Não deve fazer
|
|
|
|
* Avaliar se a imagem está boa.
|
|
* Avaliar se o áudio está ruim.
|
|
* Detectar retakes.
|
|
* Decidir quais arquivos serão usados na edição.
|
|
|
|
---
|
|
|
|
# 4. Submódulo `audio`
|
|
|
|
## `ExtracaoDeAudio`
|
|
|
|
### Papel
|
|
|
|
Será responsável por preparar o áudio dos vídeos para as demais análises.
|
|
|
|
### Responsabilidades
|
|
|
|
* Extrair o áudio dos arquivos de vídeo.
|
|
* Gerar arquivos temporários ou intermediários.
|
|
* Normalizar o formato de áudio quando necessário.
|
|
* Definir taxa de amostragem adequada.
|
|
* Separar canais quando necessário.
|
|
* Associar o áudio extraído ao clipe original.
|
|
* Registrar o caminho do áudio gerado.
|
|
* Evitar extrações repetidas.
|
|
* Controlar arquivos temporários.
|
|
* Validar se o áudio foi extraído corretamente.
|
|
|
|
### Não deve fazer
|
|
|
|
* Transcrever o áudio.
|
|
* Avaliar o conteúdo da fala.
|
|
* Decidir se há um retake.
|
|
* Alterar o áudio da timeline.
|
|
|
|
---
|
|
|
|
## `AnaliseDeAudio`
|
|
|
|
### Papel
|
|
|
|
Será responsável por analisar tecnicamente e temporalmente o áudio.
|
|
|
|
### Responsabilidades
|
|
|
|
* Detectar silêncio.
|
|
* Detectar pausas.
|
|
* Medir volume.
|
|
* Medir energia sonora.
|
|
* Identificar picos de áudio.
|
|
* Identificar possíveis distorções.
|
|
* Identificar ruído.
|
|
* Identificar clipping.
|
|
* Identificar trechos com baixa inteligibilidade.
|
|
* Identificar início e fim de fala.
|
|
* Identificar sobreposição de vozes, quando possível.
|
|
* Produzir marcadores temporais de eventos sonoros.
|
|
|
|
### Não deve fazer
|
|
|
|
* Transcrever o áudio.
|
|
* Decidir automaticamente quais trechos serão cortados.
|
|
* Substituir a análise de conteúdo feita pela transcrição.
|
|
|
|
---
|
|
|
|
# 5. Submódulo `transcricao`
|
|
|
|
## `TranscricaoDeAudio`
|
|
|
|
### Papel
|
|
|
|
Será responsável por transformar o áudio em texto sincronizado com o tempo do vídeo.
|
|
|
|
### Responsabilidades
|
|
|
|
* Enviar o áudio para o provider de transcrição.
|
|
* Receber segmentos transcritos.
|
|
* Registrar texto, início e fim de cada segmento.
|
|
* Registrar palavras individuais, quando disponíveis.
|
|
* Registrar nível de confiança.
|
|
* Identificar locutores, quando suportado.
|
|
* Associar a transcrição ao clipe correto.
|
|
* Detectar falhas de transcrição.
|
|
* Permitir transcrição parcial.
|
|
* Reaproveitar transcrições já existentes.
|
|
* Preservar a sincronização temporal.
|
|
|
|
### Não deve fazer
|
|
|
|
* Decidir se uma fala deve ser cortada.
|
|
* Interpretar sozinho se o trecho é um retake.
|
|
* Alterar a timeline.
|
|
* Implementar diretamente o modelo de transcrição.
|
|
|
|
O modelo utilizado deverá ficar no módulo `providers/transcricao/`.
|
|
|
|
---
|
|
|
|
# 6. Submódulo `visual`
|
|
|
|
## Regra de acesso ao Premiere
|
|
|
|
Sempre que o Scanner precisar acessar a timeline, a sequência ativa, as faixas
|
|
ou os clipes, deve utilizar `AcessoAoEditor` em
|
|
`engine.integracoes.premiere.leitura`. Essa classe já encapsula o cliente MCP e
|
|
é a única porta de leitura do Premiere para o Engine.
|
|
|
|
O submódulo `visual` recebe uma `Timeline` de domínio pelo
|
|
`ContextoDeAnalise`; seus adapters não devem chamar o MCP, o CEP ou o UXP
|
|
diretamente. Em testes, injete uma timeline pronta ou um fake de
|
|
`AcessoAoEditor` na etapa de descoberta.
|
|
|
|
## `ExtracaoDeQuadros`
|
|
|
|
### Papel
|
|
|
|
Será responsável por selecionar e extrair quadros representativos dos vídeos.
|
|
|
|
### Responsabilidades
|
|
|
|
* Extrair o primeiro quadro.
|
|
* Extrair o quadro central.
|
|
* Extrair o último quadro.
|
|
* Extrair quadros em intervalos regulares.
|
|
* Extrair quadros próximos a eventos.
|
|
* Extrair quadros próximos a mudanças de cena.
|
|
* Redimensionar imagens para análise.
|
|
* Evitar extrações duplicadas.
|
|
* Associar cada quadro ao tempo exato do vídeo.
|
|
* Armazenar os quadros temporariamente ou em cache.
|
|
|
|
### Não deve fazer
|
|
|
|
* Interpretar o conteúdo da imagem.
|
|
* Classificar a qualidade visual.
|
|
* Detectar retakes.
|
|
* Escolher o melhor quadro para a edição.
|
|
|
|
---
|
|
|
|
## `AnaliseVisual`
|
|
|
|
### Papel
|
|
|
|
Será responsável por coordenar a interpretação do conteúdo visual dos quadros e dos vídeos.
|
|
|
|
### Responsabilidades
|
|
|
|
* Analisar enquadramento.
|
|
* Identificar objetos.
|
|
* Identificar pessoas.
|
|
* Identificar rostos, quando permitido e necessário.
|
|
* Avaliar foco.
|
|
* Avaliar exposição.
|
|
* Avaliar estabilidade.
|
|
* Identificar movimentos de câmera.
|
|
* Identificar mudanças de composição.
|
|
* Descrever o conteúdo visual.
|
|
* Comparar quadros.
|
|
* Gerar características visuais que possam ser utilizadas na detecção de cenas e retakes.
|
|
|
|
### Não deve fazer
|
|
|
|
* Detectar cortes diretamente, salvo quando isso fizer parte do provider visual.
|
|
* Decidir quais tomadas serão utilizadas.
|
|
* Alterar o vídeo.
|
|
* Implementar diretamente os modelos de visão.
|
|
|
|
---
|
|
|
|
# 7. Submódulo `cenas`
|
|
|
|
## `DeteccaoDeCenas`
|
|
|
|
### Papel
|
|
|
|
Será responsável por identificar mudanças de cena e possíveis limites entre tomadas.
|
|
|
|
### Responsabilidades
|
|
|
|
* Detectar cortes abruptos.
|
|
* Detectar transições.
|
|
* Detectar mudanças graduais.
|
|
* Identificar possíveis inícios e finais de tomadas.
|
|
* Combinar resultados de diferentes providers.
|
|
* Comparar mudanças visuais entre quadros.
|
|
* Utilizar informações de áudio quando necessário.
|
|
* Registrar o tempo de cada cena.
|
|
* Registrar o nível de confiança.
|
|
* Identificar cenas semelhantes.
|
|
* Evitar duplicidade entre resultados de providers.
|
|
|
|
### Não deve fazer
|
|
|
|
* Decidir qual cena será utilizada na edição.
|
|
* Excluir clipes.
|
|
* Aplicar cortes.
|
|
* Depender de apenas uma ferramenta específica.
|
|
|
|
A classe deverá trabalhar com contratos de providers, por exemplo:
|
|
|
|
```text
|
|
DeteccaoDeCenas
|
|
↓
|
|
ProviderDeDeteccaoDeCenas
|
|
├── ProviderPySceneDetect
|
|
├── ProviderOpenCV
|
|
└── ProviderModeloDeIA
|
|
```
|
|
|
|
---
|
|
|
|
# 8. Submódulo `eventos`
|
|
|
|
## `DeteccaoDeEventos`
|
|
|
|
### Papel
|
|
|
|
Será responsável por identificar acontecimentos relevantes dentro dos clipes.
|
|
|
|
### Responsabilidades
|
|
|
|
* Identificar início de fala.
|
|
* Identificar fim de fala.
|
|
* Identificar pausas.
|
|
* Identificar silêncio.
|
|
* Identificar risadas.
|
|
* Identificar tosse.
|
|
* Identificar interrupções.
|
|
* Identificar erros de fala.
|
|
* Identificar mudanças de assunto.
|
|
* Identificar entrada ou saída de pessoas.
|
|
* Identificar alterações importantes de imagem.
|
|
* Identificar problemas técnicos.
|
|
* Registrar cada evento com início, fim e confiança.
|
|
|
|
### Não deve fazer
|
|
|
|
* Decidir automaticamente o corte.
|
|
* Remover eventos.
|
|
* Alterar a timeline.
|
|
* Confundir evento detectado com decisão de edição.
|
|
|
|
O evento será apenas uma informação para o motor de decisão utilizar posteriormente.
|
|
|
|
---
|
|
|
|
# 9. Submódulo `retakes`
|
|
|
|
## `DeteccaoDeRetakes`
|
|
|
|
### Papel
|
|
|
|
Será responsável por identificar possíveis repetições ou versões alternativas de uma mesma gravação.
|
|
|
|
### Responsabilidades
|
|
|
|
* Comparar transcrições.
|
|
* Comparar características visuais.
|
|
* Comparar áudio.
|
|
* Comparar duração.
|
|
* Comparar sequência de falas.
|
|
* Comparar enquadramento.
|
|
* Identificar tomadas próximas temporalmente.
|
|
* Identificar grupos de tomadas semelhantes.
|
|
* Identificar possíveis erros repetidos.
|
|
* Identificar versões alternativas da mesma fala.
|
|
* Calcular nível de similaridade.
|
|
* Registrar evidências que justificam a possibilidade de retake.
|
|
* Classificar o resultado como possível, provável ou confirmado, quando houver evidências suficientes.
|
|
|
|
### Não deve fazer
|
|
|
|
* Decidir qual retake será utilizado.
|
|
* Excluir automaticamente uma tomada.
|
|
* Aplicar cortes.
|
|
* Considerar apenas a similaridade visual.
|
|
* Tratar toda repetição como erro.
|
|
|
|
O resultado deverá ser algo semelhante a:
|
|
|
|
```text
|
|
Grupo de retakes:
|
|
- Tomada 01
|
|
- Tomada 02
|
|
- Tomada 03
|
|
|
|
Evidências:
|
|
- Transcrição semelhante
|
|
- Enquadramento semelhante
|
|
- Áudio semelhante
|
|
- Intervalo temporal próximo
|
|
|
|
Confiança:
|
|
0.87
|
|
```
|
|
|
|
---
|
|
|
|
# 10. Submódulo `persistencia`
|
|
|
|
## `PersistenciaDaAnalise`
|
|
|
|
### Papel
|
|
|
|
Será responsável por salvar os resultados produzidos pelo scanner.
|
|
|
|
### Responsabilidades
|
|
|
|
* Salvar a estrutura descoberta da timeline.
|
|
* Salvar os metadados.
|
|
* Salvar os caminhos dos arquivos.
|
|
* Salvar as transcrições.
|
|
* Salvar os resultados visuais.
|
|
* Salvar as cenas.
|
|
* Salvar os eventos.
|
|
* Salvar os possíveis retakes.
|
|
* Salvar logs e avisos.
|
|
* Permitir retomada de uma análise interrompida.
|
|
* Evitar processamento duplicado.
|
|
* Versionar os resultados quando necessário.
|
|
* Exportar os dados em formato estruturado, como JSON.
|
|
|
|
### Não deve fazer
|
|
|
|
* Gerar plano de corte.
|
|
* Aplicar alterações no editor.
|
|
* Decidir quais clipes serão mantidos.
|
|
* Alterar os arquivos originais.
|
|
|
|
---
|
|
|
|
# Visão final das responsabilidades
|
|
|
|
```text
|
|
AnalisadorDeTimeline
|
|
Inicia a análise completa.
|
|
|
|
PipelineDoScanner
|
|
Controla a ordem de execução.
|
|
|
|
ContextoDeAnalise
|
|
Transporta e armazena os dados.
|
|
|
|
DescobertaDaTimeline
|
|
Descobre a estrutura da timeline.
|
|
|
|
DescobertaDeClipes
|
|
Representa os clipes encontrados.
|
|
|
|
DescobertaDeArquivos
|
|
Localiza os arquivos físicos.
|
|
|
|
ExtracaoDeMetadados
|
|
Obtém informações técnicas.
|
|
|
|
ExtracaoDeAudio
|
|
Prepara o áudio.
|
|
|
|
AnaliseDeAudio
|
|
Analisa características sonoras.
|
|
|
|
TranscricaoDeAudio
|
|
Converte fala em texto sincronizado.
|
|
|
|
ExtracaoDeQuadros
|
|
Seleciona quadros para análise.
|
|
|
|
AnaliseVisual
|
|
Interpreta o conteúdo visual.
|
|
|
|
DeteccaoDeCenas
|
|
Identifica limites e mudanças de cena.
|
|
|
|
DeteccaoDeEventos
|
|
Identifica acontecimentos relevantes.
|
|
|
|
DeteccaoDeRetakes
|
|
Identifica possíveis repetições.
|
|
|
|
PersistenciaDaAnalise
|
|
Salva todos os resultados.
|
|
```
|
|
|
|
A regra mais importante para o programador será:
|
|
|
|
> **Nenhuma classe do scanner deverá tomar decisões de edição. O scanner apenas coleta e organiza evidências. A decisão sobre cortar, manter, substituir ou reorganizar trechos será feita por outro módulo.**
|