Aula 16 – Projeto Final: O Grande Desafio 🏆
Parabéns! Você chegou à última aula do curso. Agora é hora de consolidar tudo o que aprendeu em um desafio prático que simula uma tarefa real de um Engenheiro de Dados ou Desenvolvedor Backend.
🎯 O Cenário
Você recebeu um arquivo de texto bruto (OCR) gerado a partir de notas fiscais antigas. O texto está bagunçado, com espaços extras, diferentes formatos de data e valores misturados. Sua missão é criar um "Sanitizador de Notas" usando Regex.
Dados de Exemplo:
NOTA_FISCAL #001 - DATA: 21-10-2024 - VALOR: R$ 150,00 - STATUS: Pago
nota_fiscal #002 | DATA: 22/10/2024 | VALOR: 300.00 | STATUS: pendente
NF #003; dt: 23.10.2024; val: R$ 50,50; st: PAGO
🛠️ Requisitos do Projeto
O seu algoritmo (em JS, Python ou apenas Regex) deve ser capaz de:
- Normalizar o Título: Identificar "NOTA_FISCAL", "nota_fiscal" ou "NF" e transformar tudo em "NF".
- Padronizar a Data: Converter todos os formatos (
-,/,.) para o padrão brasileiroDD/MM/AAAA. - Limpar o Valor: Extrair apenas o número decimal (ex:
150,00). - Normalizar o Status: Transformar "pendente", "Pago" ou "PAGO" em letras maiúsculas:
PAGOouPENDENTE.
📊 Estrutura de Solução Proposta
graph TD
Raw["Texto Bruto"] --> T1["Normalizar Títulos (Alternância)"]
T1 --> T2["Normalizar Datas (Grupos de Captura)"]
T2 --> T3["Extrair Valores (Dígitos e Vírgula)"]
T3 --> T4["Normalizar Status (Lower/Upper Case)"]
T4 --> Final["JSON / CSV Limpo"]
💻 Exemplo de Saída Esperada
Após o processamento, os dados devem estar assim:
- NF #001 | 21/10/2024 | 150,00 | PAGO
- NF #002 | 22/10/2024 | 300,00 | PENDENTE
- NF #003 | 23/10/2024 | 50,50 | PAGO
📝 Exercício Final: O Script Completo
Tente implementar a solução acima na linguagem de sua preferência.
Dica de Python:
import re
linha = "NOTA_FISCAL #001 - DATA: 21-10-2024 - VALOR: R$ 150,00 - STATUS: Pago"
# 1. Normalizar Título
linha = re.sub(r"(NOTA_FISCAL|nota_fiscal|NF)", "NF", linha)
# 2. Normalizar Data
linha = re.sub(r"(\d{2})[-.](\d{2})[-.](\d{4})", r"\1/\2/\3", linha)
# 3. Limpar Status
if "Pago" in linha or "PAGO" in linha:
linha = re.sub(r"STATUS: \w+", "STATUS: PAGO", linha, flags=re.I)
print(linha)
🎨 Conclusão do Curso
Expressões Regulares são uma ferramenta vital. Você não precisa memorizar tudo, mas agora você sabe: - O que procurar: Qual metacaractere resolve seu problema. - Onde testar: Usando o Regex101. - Como aplicar: Em JavaScript, Python ou no Terminal.
Continue praticando e use esse superpoder para automatizar tarefas chatas no seu dia a dia! 🚀