Nível: Júnior
Tempo estimado: 3–5 horas
Linguagem: Python 3.10+
Você deverá desenvolver uma aplicação em Python que consuma a API PTAX do Banco Central do Brasil, gere um relatório em CSV com a cotação do dólar nos últimos 30 dias e envie esse relatório por e-mail para um destinatário configurável.
Este desafio avalia sua capacidade de:
- Consumir APIs REST externas
- Manipular e tratar dados
- Gerar arquivos estruturados
- Automatizar o envio de e-mails
- Organizar e documentar código
- O projeto deve conter um arquivo
requirements.txtcom todas as dependências necessárias - É obrigatório o uso de ambiente virtual (
venv) - O Python deve ser 3.10 ou superior
- Utilize a API pública do BACEN para obter a cotação do dólar (PTAX)
- Endpoint de referência:
https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoDolarPeriodo(dataInicial=@dataInicial,dataFinalCotacao=@dataFinalCotacao) - Consulte os dados dos últimos 30 dias a partir da data atual
- Utilize os valores de cotação de venda (
cotacaoVenda) e compra (cotacaoCompra) - Trate possíveis erros de requisição (timeout, status != 200, resposta vazia)
- O arquivo deve ser salvo localmente com o nome:
cotacao_dolar_YYYY-MM-DD.csv
(ondeYYYY-MM-DDé a data de geração do relatório) - O CSV deve conter as seguintes colunas:
| Coluna | Descrição |
|---|---|
data |
Data da cotação (DD/MM/YYYY) |
hora |
Hora da cotação (HH:MM:SS) |
cotacao_compra |
Valor de compra do dólar (R$) |
cotacao_venda |
Valor de venda do dólar (R$) |
- Utilize ponto e vírgula (
;) como separador - Encoding:
UTF-8
- O relatório CSV gerado deve ser enviado como anexo por e-mail
- Destinatário fixo:
danh.andrade@outlook.com - O e-mail deve conter:
- Assunto:
Relatório PTAX - Cotação do Dólar - DD/MM/YYYY - Corpo: mensagem em texto simples informando o período consultado e a quantidade de registros encontrados
- Anexo: o arquivo CSV gerado
- Assunto:
- As credenciais do e-mail remetente devem ser configuradas via variáveis de ambiente (não devem estar hardcoded no código)
desafio_ptax/
├── venv/ # Ambiente virtual (não versionar)
├── .env # Variáveis de ambiente (não versionar)
├── .env.example # Exemplo de variáveis de ambiente (versionar)
├── .gitignore
├── requirements.txt
├── README.md
├── main.py # Ponto de entrada da aplicação
└── src/
├── __init__.py
├── ptax.py # Módulo de consulta à API
├── relatorio.py # Módulo de geração do CSV
└── email_sender.py # Módulo de envio de e-mail
Crie um arquivo .env na raiz do projeto com as seguintes variáveis:
EMAIL_REMETENTE=seu_email@gmail.com
EMAIL_SENHA=sua_senha_de_app
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587💡 Dica: Para o Gmail, utilize uma senha de aplicativo gerada nas configurações de segurança da conta. Nunca exponha sua senha real.
Você tem liberdade para escolher as bibliotecas, mas as seguintes são sugeridas:
requests
python-dotenvBibliotecas padrão do Python que também podem ser úteis:
csv,smtplib,datetime,os
O avaliador deve conseguir rodar o projeto com os seguintes comandos:
# 1. Clonar o repositório
git clone <url-do-repositorio>
cd desafio_ptax
# 2. Criar e ativar o ambiente virtual
python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
# 3. Instalar dependências
pip install -r requirements.txt
# 4. Configurar variáveis de ambiente
cp .env.example .env
# Editar o arquivo .env com as credenciais reais
# 5. Executar
python main.py| Critério | Peso |
|---|---|
| Funcionamento correto da aplicação | Alto |
| Qualidade e organização do código | Alto |
| Tratamento de erros e exceções | Médio |
| Uso correto de variáveis de ambiente | Médio |
| Clareza do README | Médio |
| Boas práticas (funções pequenas, nomes descritivos) | Baixo |
| Uso de type hints | Bônus |
| Logs informativos durante a execução | Bônus |
- Não utilize frameworks web (Flask, FastAPI, Django, etc.)
- Não armazene credenciais diretamente no código
- Não versione o arquivo
.envnem a pastavenv/ - O código deve rodar localmente sem dependência de serviços de nuvem
- Suba o projeto em um repositório público no GitHub
- Certifique-se de que o
README.mdexplique claramente como configurar e executar - Envie o link do repositório para o avaliador
- Consulte a documentação oficial da API PTAX
- Fique atento ao formato de data esperado pela API:
MM-DD-YYYY - A API pode não retornar dados para finais de semana e feriados — trate esses casos
- Prefira funções pequenas e com responsabilidade única
- Teste manualmente cada módulo antes de integrar tudo em
main.py
Boa sorte! Em caso de dúvidas sobre o escopo do desafio, entre em contato com o avaliador.