Bem-vindo(a) ao Desafio!
Na Biofy Technologies, estamos constantemente buscando inovações para otimizar processos e agregar inteligência aos nossos produtos. Este desafio foi criado para entendermos suas habilidades em desenvolvimento de backend, sua familiaridade com arquiteturas de serviços e sua capacidade de integrar soluções de Inteligência Artificial em uma aplicação prática.
Estamos mais interessados em ver como você estrutura seu código, resolve problemas e aplica as melhores práticas do que em uma solução final "perfeita".
Objetivo Principal
Desenvolver uma API RESTful em Python que permita o upload de um contrato (em formato `.pdf` ou `.docx`), processe o documento utilizando uma API de IA para extrair informações-chave e armazene esses dados em um banco de dados para consulta posterior.
Contexto da Aplicação
Imagine um sistema interno que precisa automatizar a análise preliminar de contratos. Em vez de um analista ler cada documento manualmente para extrair dados básicos, sua aplicação fará esse trabalho pesado, identificando as partes envolvidas, valores, obrigações principais e cláusulas de rescisão.
Requisitos Funcionais
1. Autenticação e Autorização
- Endpoint de Login: Crie um endpoint (`/login`) que receba um usuário/senha e retorne um token **JWT**.
- Autorização via JWT: Todos os outros endpoints devem ser protegidos e acessíveis apenas com um token JWT válido no cabeçalho `Authorization: Bearer
`.
2. Upload e Processamento de Contrato
- Endpoint de Upload: Crie um endpoint (`/contracts/upload`) que aceite arquivos `.pdf` ou `.docx`.
- Análise com IA: Envie o texto extraído para a API do Gemini ou Groq para extrair:
- Nome das Partes
- Valores Monetários
- Obrigações Principais
- Dados Adicionais Importantes (objeto, vigência)
- Cláusula de Rescisão
- Persistência: Salve o resultado da análise e o nome do arquivo em um banco de dados.
3. Consulta de Contratos
- Endpoint de Consulta: Crie um endpoint (`/contracts/{contract_name}`) para recuperar os dados de um contrato específico pelo nome do arquivo.
Stack Tecnológica Sugerida
Você tem liberdade para escolher as ferramentas, mas aqui estão algumas sugestões alinhadas com as práticas de mercado:
Python 3.x
FastAPI / Flask
PostgreSQL / SQLite
Gemini / Groq API
PyPDF2 / python-docx
PyJWT
Critérios de Avaliação
- ✔Qualidade e Organização do Código: Código limpo, legível e seguindo a PEP 8.
- ✔Design da API: Aderência aos princípios REST, uso correto de verbos e status HTTP.
- ✔Implementação de Autenticação/Autorização: Lógica de JWT segura e correta.
- ✔Integração com a IA: Qualidade do prompt e tratamento da resposta.
- ✔Modelagem do Banco de Dados: Estrutura lógica da tabela/documento.
- ✔Tratamento de Erros: Lida com cenários de falha de forma robusta.
- ✔Instruções de Uso: Clareza do `README.md` para configurar e executar.
O que Entregar?
1. Repositório Git
O link para um repositório Git (GitHub, GitLab, etc.) contendo todo o código-fonte da aplicação.
2. Arquivo README.md
Um `README.md` detalhado com descrição da solução, instruções de instalação e exemplos de uso dos endpoints.
Pontos Bônus (Opcional)
- Uso de Docker para conteinerizar a aplicação.
- Criação de testes unitários ou de integração.
- Implementação de um sistema de migrations (ex: Alembic).
- Uma interface de frontend, por mais simples que seja.