| (19 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
| Linha 10: | Linha 10: | ||
== Requisitos Funcionais == | == Requisitos Funcionais == | ||
<br> | <br> | ||
=== FAse 1 - 2025-1 === | |||
<br> | |||
* RF01 — Autenticação de Usuário | |||
** O sistema deve permitir login para alunos e administradores. | |||
<br> | |||
* RF02 — Dashboard do Aluno | |||
** O sistema deve exibir ao aluno um painel com acesso a funcionalidades principais. | |||
<br> | |||
* RF03 — Envio de Documentos | |||
** O aluno deve conseguir submeter documentos como certificados, relatórios, etc. | |||
** O sistema deve armazenar esses documentos no banco de dados. | |||
<br> | |||
* RF04 — Consulta de Documentos | |||
** O aluno deve conseguir visualizar o status de seus documentos e certificados enviados. | |||
<br> | |||
* RF05 — Feed de Oportunidades | |||
** O sistema deve exibir aos alunos uma lista de oportunidades de estágio, cursos, eventos, etc. | |||
<br> | |||
* RF06 — Gerenciamento de Perfil | |||
** O aluno deve conseguir visualizar e editar suas informações pessoais. | |||
<br> | |||
* RF07 — Dashboard Administrativo | |||
** O administrador deve acessar um painel com pendências e funcionalidades de gestão. | |||
<br> | |||
* RF08 — Validação de Documentos | |||
** O administrador deve visualizar documentos pendentes enviados pelos alunos. | |||
** O administrador deve aprovar ou rejeitar os documentos, podendo incluir uma justificativa. | |||
<br> | |||
* RF09 — Cadastro de Oportunidades | |||
** O administrador deve conseguir cadastrar novas oportunidades para o feed dos alunos | |||
<br> | |||
=== Fase 2 - 2025-2 === | |||
<br> | |||
* RF01: Submeter documento para o OCR | * RF01: Submeter documento para o OCR | ||
| Linha 19: | Linha 64: | ||
<br> | <br> | ||
* RNF01 — Segurança | |||
** O sistema deve proteger os dados dos usuários e documentos através de autenticação segura. | |||
** Deve haver controle de acesso (permissões diferenciadas entre alunos e administradores). | |||
<br> | |||
* RNF02 — Usabilidade | |||
** A interface deve ser intuitiva, com navegação clara para ambos os perfis de usuário. | |||
<br> | <br> | ||
= | * RNF03 — Confiabilidade | ||
** O sistema deve garantir que os documentos enviados não sejam corrompidos ou perdidos. | |||
** A informação exibida (como status de documentos) deve estar sempre atualizada com o banco de dados. | |||
<br> | |||
* RNF04 — Escalabilidade | |||
** O sistema deve suportar o crescimento no número de usuários e documentos sem perda de desempenho. | |||
<br> | |||
* RNF05 — Performance | |||
** O tempo de resposta para login, envio de documentos e visualização de painéis deve ser rápido (idealmente 2s). | |||
<br> | |||
* RNF06 — Compatibilidade | |||
** O sistema deve funcionar nos principais navegadores Chrome, Firefox, Edge). | |||
** Deve ser acessível em dispositivos móveis (responsivo). | |||
<br> | |||
* RNF07 — Manutenibilidade | |||
** O sistema deve ser estruturado para facilitar futuras atualizações e correções de bugs | |||
<h2>Melhores Práticas</h2> | |||
<p> | |||
O backend (Java) segue uma <strong>Arquitetura de Camadas (Layered Architecture)</strong>, fundamental para o desacoplamento e a manutenibilidade do sistema. A camada de <strong>Controladores (controllers)</strong> é responsável apenas por receber requisições HTTP e rotear os dados, atuando como interface entre o cliente e a lógica de negócio, sem conter regras de validação ou manipulação de dados. | |||
</p> | |||
<p> | |||
O coração da aplicação reside na camada de <strong>Serviços (services)</strong>, onde está concentrada toda a lógica de negócio (validações, cálculos e transformações). Esse isolamento garante que as regras de negócio sejam testáveis independentemente do protocolo web. | |||
</p> | |||
<p> | |||
Complementam essa estrutura as camadas de <strong>Infraestrutura (infra)</strong>, que trata de aspectos técnicos como acesso a bancos de dados, e <strong>Segurança (security)</strong>, dedicada à autenticação e autorização dos usuários. | |||
</p> | |||
<h3>Exemplo de Single Responsibility Principle (SRP)</h3> | |||
<pre> | |||
@RestController | |||
@RequestMapping("/api/certificates") | |||
public class CertificateController { | |||
private final CertificateService certificateService; | |||
@Autowired | |||
public CertificateController(CertificateService certificateService) { | |||
this.certificateService = certificateService; | |||
} | |||
@PostMapping | |||
public ResponseEntity<CertificateDTO> createCertificate(@Valid @RequestBody CertificateDTO dto) { | |||
CertificateDTO created = certificateService.createCertificate(dto); | |||
return new ResponseEntity<>(created, HttpStatus.CREATED); | |||
} | |||
} | |||
</pre> | |||
<p> | |||
No exemplo acima, o <strong>CertificateController</strong> tem uma única responsabilidade: atuar como interface HTTP, delegando toda a lógica de negócio ao <strong>CertificateService</strong>. Isso está em conformidade com o <strong>Princípio da Responsabilidade Única (SRP)</strong> do SOLID, facilitando a manutenção, testes e evolução do sistema. | |||
</p> | |||
<h3>Monorepo com Módulos Independentes</h3> | |||
<p> | |||
O projeto adota a estratégia de <strong>monorepo</strong>, onde múltiplos módulos — como backend, frontend e bibliotecas internas — são gerenciados em um único repositório. Essa abordagem facilita a integração entre as equipes, promove a <strong>reutilização de código</strong> e garante maior consistência entre os diferentes domínios do sistema. Cada módulo pode ser desenvolvido, testado e implantado de forma independente, otimizando o fluxo de trabalho e a manutenção do projeto. | |||
</p> | |||
<h3>Documentação Automática com OpenAPI/Swagger</h3> | |||
<p> | |||
A API backend é documentada automaticamente utilizando <strong>OpenAPI/Swagger</strong>. Por meio de anotações no código, toda a especificação dos endpoints é gerada de forma dinâmica, criando uma <strong>documentação viva</strong> e sempre atualizada. Isso facilita a integração com o frontend, acelera o desenvolvimento e reduz dúvidas sobre o funcionamento da API, além de servir como referência para novos desenvolvedores e para a manutenção futura. | |||
</p> | |||
= CRONOGRAMA = | |||
<br> | <br> | ||
| Linha 28: | Linha 144: | ||
|- | |- | ||
! Item !! Data !! Atividades CertificaUFU !! Realizado | ! Item !! Data !! Atividades CertificaUFU !! Realizado | ||
|- | |- | ||
| 1 || 14/11/2025 || Documentar tópico Investigação || | | 1 || 14/11/2025 || Documentar tópico Investigação || 100% | ||
|- | |- | ||
| 2 || 14/11/2025 || Documentar os Manuais || | | 2 || 14/11/2025 || Documentar os Manuais || 100% | ||
|- | |- | ||
| 3 || 14/11/2025 || Definir Proposta de Projeto || | | 3 || 14/11/2025 || Definir Proposta de Projeto || ?? | ||
|- | |- | ||
| 4 || 14/11/2025 || Validar Visão do Usuário || | | 4 || 14/11/2025 || Validar Visão do Usuário || ?? | ||
|- | |- | ||
| 5 || 17/11/2025 || Especificar RFs e RNFs - Fase 2 || | | 5 || 17/11/2025 || Especificar RFs e RNFs - Fase 2 || 100% | ||
|- | |- | ||
| 6 || 17/11/2025 || | | 6 || 17/11/2025 || RF01: Submeter documento para o OCR || 100% | ||
|- | |- | ||
| | | x || 24/11/2025 || TeckWeek || | ||
|- | |||
| 7 || 01/12/2025 || Melhores Práticas || | |||
|- | |||
| 8 || 01/12/2025 || RF01: Submeter documento para o OCR || 100% | |||
|- | |||
| 9 || 08/12/2025 || RF01: Submeter documento para o OCR || 100% | |||
|- | |||
| 10 || 08/12/2025 || RF02: Processar a resposta do OCR || 0% | |||
|- | |||
| 11 || 15/12/2025 || 2a. Entrega - Vídeo até 19/12 pelo Teams - RFs 1 e 2 || | |||
|- | |||
| 12 || || RF03: Persistir o texto pelo OCR || 100% | |||
|- | |||
| 13 || || Incrementar diferencial tecnológico || | |||
|- | |||
| 14 || 19/01/2026 || Cliente avaliando solução (Apresentação em PDF) || | |||
|- | |||
| 15 || 19/12/2025 || Vídeo encaminhado para cliente || Aguardando avaliação | |||
|- | |||
|} | |||
{| class="wikitable" | |||
|- | |||
! Item !! Data !! Atividades CertificaUFU!! Responsável | |||
|- | |||
| 1 || 09/02/2026 || xx || | |||
|- | |||
| 2 || 23/02/2026 || xx || | |||
|- | |||
| 3 || 02/03/2026 || xx || | |||
|- | |||
| 4 || 09/03/2026 || xx || | |||
|- | |- | ||
| | | 5 || 16/03/2026 || xx || | ||
|- | |- | ||
|} | |} | ||
Edição atual tal como às 20h55min de 9 de fevereiro de 2026
Fase 2
Escopo
- Otimizar o ciclo de vida das atividades complementares e de estágio na Universidade Federal de Uberlândia. A plataforma centraliza desde a divulgação de novas oportunidades de desenvolvimento para os alunos até o envio, acompanhamento e validação dos documentos comprobatórios garantindo mais agilidade e transparência para alunos e coordenadores.
Requisitos Funcionais
FAse 1 - 2025-1
- RF01 — Autenticação de Usuário
- O sistema deve permitir login para alunos e administradores.
- RF02 — Dashboard do Aluno
- O sistema deve exibir ao aluno um painel com acesso a funcionalidades principais.
- RF03 — Envio de Documentos
- O aluno deve conseguir submeter documentos como certificados, relatórios, etc.
- O sistema deve armazenar esses documentos no banco de dados.
- RF04 — Consulta de Documentos
- O aluno deve conseguir visualizar o status de seus documentos e certificados enviados.
- RF05 — Feed de Oportunidades
- O sistema deve exibir aos alunos uma lista de oportunidades de estágio, cursos, eventos, etc.
- RF06 — Gerenciamento de Perfil
- O aluno deve conseguir visualizar e editar suas informações pessoais.
- RF07 — Dashboard Administrativo
- O administrador deve acessar um painel com pendências e funcionalidades de gestão.
- RF08 — Validação de Documentos
- O administrador deve visualizar documentos pendentes enviados pelos alunos.
- O administrador deve aprovar ou rejeitar os documentos, podendo incluir uma justificativa.
- RF09 — Cadastro de Oportunidades
- O administrador deve conseguir cadastrar novas oportunidades para o feed dos alunos
Fase 2 - 2025-2
- RF01: Submeter documento para o OCR
- RF02: Processar a resposta do OCR
- RF03: Persistir o texto pelo OCR
Requisitos Não-Funcionais
- RNF01 — Segurança
- O sistema deve proteger os dados dos usuários e documentos através de autenticação segura.
- Deve haver controle de acesso (permissões diferenciadas entre alunos e administradores).
- RNF02 — Usabilidade
- A interface deve ser intuitiva, com navegação clara para ambos os perfis de usuário.
- RNF03 — Confiabilidade
- O sistema deve garantir que os documentos enviados não sejam corrompidos ou perdidos.
- A informação exibida (como status de documentos) deve estar sempre atualizada com o banco de dados.
- RNF04 — Escalabilidade
- O sistema deve suportar o crescimento no número de usuários e documentos sem perda de desempenho.
- RNF05 — Performance
- O tempo de resposta para login, envio de documentos e visualização de painéis deve ser rápido (idealmente 2s).
- RNF06 — Compatibilidade
- O sistema deve funcionar nos principais navegadores Chrome, Firefox, Edge).
- Deve ser acessível em dispositivos móveis (responsivo).
- RNF07 — Manutenibilidade
- O sistema deve ser estruturado para facilitar futuras atualizações e correções de bugs
Melhores Práticas
O backend (Java) segue uma Arquitetura de Camadas (Layered Architecture), fundamental para o desacoplamento e a manutenibilidade do sistema. A camada de Controladores (controllers) é responsável apenas por receber requisições HTTP e rotear os dados, atuando como interface entre o cliente e a lógica de negócio, sem conter regras de validação ou manipulação de dados.
O coração da aplicação reside na camada de Serviços (services), onde está concentrada toda a lógica de negócio (validações, cálculos e transformações). Esse isolamento garante que as regras de negócio sejam testáveis independentemente do protocolo web.
Complementam essa estrutura as camadas de Infraestrutura (infra), que trata de aspectos técnicos como acesso a bancos de dados, e Segurança (security), dedicada à autenticação e autorização dos usuários.
Exemplo de Single Responsibility Principle (SRP)
@RestController
@RequestMapping("/api/certificates")
public class CertificateController {
private final CertificateService certificateService;
@Autowired
public CertificateController(CertificateService certificateService) {
this.certificateService = certificateService;
}
@PostMapping
public ResponseEntity<CertificateDTO> createCertificate(@Valid @RequestBody CertificateDTO dto) {
CertificateDTO created = certificateService.createCertificate(dto);
return new ResponseEntity<>(created, HttpStatus.CREATED);
}
}
No exemplo acima, o CertificateController tem uma única responsabilidade: atuar como interface HTTP, delegando toda a lógica de negócio ao CertificateService. Isso está em conformidade com o Princípio da Responsabilidade Única (SRP) do SOLID, facilitando a manutenção, testes e evolução do sistema.
Monorepo com Módulos Independentes
O projeto adota a estratégia de monorepo, onde múltiplos módulos — como backend, frontend e bibliotecas internas — são gerenciados em um único repositório. Essa abordagem facilita a integração entre as equipes, promove a reutilização de código e garante maior consistência entre os diferentes domínios do sistema. Cada módulo pode ser desenvolvido, testado e implantado de forma independente, otimizando o fluxo de trabalho e a manutenção do projeto.
Documentação Automática com OpenAPI/Swagger
A API backend é documentada automaticamente utilizando OpenAPI/Swagger. Por meio de anotações no código, toda a especificação dos endpoints é gerada de forma dinâmica, criando uma documentação viva e sempre atualizada. Isso facilita a integração com o frontend, acelera o desenvolvimento e reduz dúvidas sobre o funcionamento da API, além de servir como referência para novos desenvolvedores e para a manutenção futura.
CRONOGRAMA
| Item | Data | Atividades CertificaUFU | Realizado |
|---|---|---|---|
| 1 | 14/11/2025 | Documentar tópico Investigação | 100% |
| 2 | 14/11/2025 | Documentar os Manuais | 100% |
| 3 | 14/11/2025 | Definir Proposta de Projeto | ?? |
| 4 | 14/11/2025 | Validar Visão do Usuário | ?? |
| 5 | 17/11/2025 | Especificar RFs e RNFs - Fase 2 | 100% |
| 6 | 17/11/2025 | RF01: Submeter documento para o OCR | 100% |
| x | 24/11/2025 | TeckWeek | |
| 7 | 01/12/2025 | Melhores Práticas | |
| 8 | 01/12/2025 | RF01: Submeter documento para o OCR | 100% |
| 9 | 08/12/2025 | RF01: Submeter documento para o OCR | 100% |
| 10 | 08/12/2025 | RF02: Processar a resposta do OCR | 0% |
| 11 | 15/12/2025 | 2a. Entrega - Vídeo até 19/12 pelo Teams - RFs 1 e 2 | |
| 12 | RF03: Persistir o texto pelo OCR | 100% | |
| 13 | Incrementar diferencial tecnológico | ||
| 14 | 19/01/2026 | Cliente avaliando solução (Apresentação em PDF) | |
| 15 | 19/12/2025 | Vídeo encaminhado para cliente | Aguardando avaliação |
| Item | Data | Atividades CertificaUFU | Responsável |
|---|---|---|---|
| 1 | 09/02/2026 | xx | |
| 2 | 23/02/2026 | xx | |
| 3 | 02/03/2026 | xx | |
| 4 | 09/03/2026 | xx | |
| 5 | 16/03/2026 | xx |