<div style = "width:220px"


</div>
[[_TOC_]]
## _**Introdução**_ #
Informações Básicas sobre o Sistema/Área
Este documento tem por objetivo mostrar o caminho o qual os usuários precisam percorrer para a realização das ações necessárias no Sistema Financeiro.
## **_Escopo do Produto_**
O Flow é um sistema administrativo que envolve quatro pilares: Curador, Especialista, Líder de Produção e Administrativo Financeiro.
No Flow temos alguns objetivos como a criação do Produto, por quem ele e feito, cadastros de novos Especialistas e Curadores, a produção de conteudos para clientes como o nosso principal: A Ensineme, organização de contratos feitos no Flow para a criação do produto
O Curador é encarregado de convidar o Especialista para a Produção. Já o Especialista, se aceitar o convite do Curador, terá como função se cadastrar no Flow e aceitar a Produção. Antes do Especialista fazer o Produto, o Líder de Produção deverá validar o contrato e, então, o pagamento poderá prosseguir. Por fim, o Administrativo Financeiro comanda o pagamento.
### Fluxo de Negocio:

## **_Pessoas do Produto_**
**Gerente do produto**
- Administradores Financeiros
- Bruna Matieli Da Silva
- Curadores
**Techs**
- Angelo Souza de Oliveira
- Leonardo da Silva Corso
### Personas e Responsabilidades
**- Gerente do produto**: Tem o papel de ser a ligação dos clientes com os Devs. Trazendo novas demandas ou ajustes pedidos.
**- Curadores**: O Curador é o inicío do nosso processo, onde ele convida um Especialista para a Produção de algum Projeto que o Curador deseja criar.
**- Adm Financeiro**: Por mais que seja pouca coisa o Adm Financeiro tem uma suma importância, pois somente ele tem a função de comandar o pagamento no fim do nosso fluxo.
**- Developers**: Busca entender como o Flow anda, e sua estrutura de bibliotecas, saber a melhor forma de fazer os ajustes pedidos da Gerência e realizar cargas a pedido da mesma.
## Roadmap do Projeto
### **_Dashboard_**
#### Área Usuária
Todos os Usuários têm acesso ao Dashboard do sistema. O objetivo do dashboard é mostrar os contratos ativos que o usuário tem com a instituição. Caso não tenha contrato a página mostrará as informações básicas do usuário logado.
### **_Contrato_**
Nem todos os usuários tem acesso completo aos itens de menu da opção Contrato.
A opção de menu Contratos possui as seguintes subdivisões:
- Ver Contratos;
- Meus Contratos;
- Aprovar Contratos;
- Aprovar Contratos Verba;
- Permitir Pagamentos;
- Comandar Pagamentos.
#### Ver Contratos
É possível analisar todos os contratos com todas as informações do mesmo, podendo pesquisar qualquer contrato buscando por sua descrição completa ou com qualquer informação que ele possua. (Também é possível acessar o contrato na coluna de Ações)
#### Meus Contratos
Somente os contratos do usuário da conta são visualizados.
#### Aprovar Contratos
Permite aprovação do pagamento de valores diferentes do existente no contrato.
#### Aprovar Contratos Verba
Permite o aumento de verba para um tema ou produto específico após solicitação.
#### Permitir Pagamentos
Permite o pagamento do contrato selecionado, que possua a situação de Contrato Aceito, pelo Líder de Produção.
#### Comandar Pagamento
Somente o Administrador Financeiro tem acesso a este item de menu, nessa página pode-se selecionar o contrato e Comandar o Pagamento.
### **_Curadores_**
É onde podemos visualizar todos os Curadores cadastrados no sistema, podendo também visualizar os dados cadastrais de um Curador específico.
### **_Especialista_**
É onde podemos visualizar todos os Especialistas cadastrados no sistema, podendo também visualizar o perfil, os Treinamentos Realizados, assim como o status dos treinamentos.
### **_Convites_**
Em Convites é possível convidar o Especialista como também o Colaborador.
O sistema exibe as informações do Hash, Email, Nome e a Situação do convidado e também permite a ação de gerar um link do convite para enviar ao Especialista.
### **_Treinamentos_**
Em treinamentos é onde os Conteudistas e Curadores tem acesso aos treinamentos.
Temos duas opções de Treinamento: Treinamento Conteudista e Treinamento Curador.
#### Treinamento Conteudista
Logo no topo da página, temos os treinamentos disponíveis para os Conteudistas, que por sua vez, conseguem filtrar os conteúdos, marcando ou desmarcando as caixas com os tipos de treinamento desejado.
Obs.: Dependendo do usuário logado a lista muda às ofertas de treinamentos disponíveis.
#### Treinamento Curador
O usuário com perfil Curador ao acessar a página já visualiza o conteúdo de treinamento disponível para sua área.
### **_Usuarios_**
Em usuários é possível visualizar todas as informações dos usuários cadastrados no sistema.
É possível acessar as seguintes opções: Roles, Permissions, Permissões de Acesso e Ver Usuários.
#### Roles
O sistema exibe o nome, a descrição e o cliente cadastrado para cada usuário.
O sistema exibe uma opção de botão [+] que permite cadastrar novos usuários, preenchendo os campos Seleciona o Cliente, Role, Descrição e Permissões.
Ao selecionar um registro na tela o sistema exibe as opções de Editar ou Excluir o usuário selecionado.
#### Permissions
O sistema exibe o nome e a descrição das Permissions cadastradas para cada funcionalidade exibidas na tela.
O sistema exibe uma opção de botão [+] que permite cadastrar novas permissions, preenchendo os campos Permission e Descrição.
Ao selecionar um registro na tela o sistema exibe as opções de Editar ou Excluir ao Permission selecionada.
#### Permissões de Acesso
É possível selecionar a Role e visualizar/alterar as Rotas de Acesso cadastradas.
#### Ver Usuários
O sistema lista todos os usuários cadastrados, exibindo o Nome, o E-mail, o CPF, o Tipo de Usuário e as Permissões Especiais de cada registro.
É possível pesquisar e também alterar usuários ao selecionar um registro na tela.
### **_Configurações_**
Nesta opção é possível configurar todas as funcionalidades do sistema, cadastrando, alterando e/ou excluindo os registros exibidos em cada funcionalidade.
#### Áreas de Atuação:
Nesta página é possível pesquisar a atuação desejável, incluir nova área de atuação, alterar Título, Cliente e ou Colaborados do registro e/ou excluir um ou mais registros da tela.
#### Áreas do Conhecimento:
Onde aparece todas as áreas de conhecimento usadas no Flow, podemos editar o nome de cada ou exclui-las do nosso sistema.
#### Arquivos Treinamento:
Nesta tela é possível pesquisar um registro, incluir novo arquivo e/ou editar o Título, a Descrição, a Prioridade, o Projeto, o Modelo, o Serviço relacionado, o Tipo, o vídeo URL e selecionar se o treinamento é obrigatório e se está Ativo.
#### Carga:
#### Clientes:
#### Curadorias:
Aqui visualizamos todas as Curadorias do sistema Flow, podendo editar o nome de cada uma selecionada e até adicionar uma nova.
#### Cursos:
Todos os cursos que são cadastrados no nosso sistema estão aqui. Podemos editar somente o nome do curso.
###Curso Produção:
#### Disciplinas:
Temos todos os códigos de Disciplina e o titulo de cada uma cadastrados no nosso sistema, podemos edita-las somente o nome de cada uma selecionada.
#### Disciplinas Produção:
Conseguimos ver todas as produções de disciplina com seu Código, Título, Cliente, Projeto, Período e Curadoria. Podemos editar todas essas opções citadas acima.
#### Formações:
#### Instituições:
#### Modelos:
#### Período:
Aqui conseguimos observar todos os períodos cadastrados no Flow, podemos edita-los cada um selecionado e adicionar um novo período.
#### Produções:
Em Produções iram aparecer as produções realizadas, temos a opção de adicionar uma nova produção com certos detalhes.
#### Produtos:
Conseguimos observar um histórico de todos os produtos com seu modelo, profissional, valor e projeto.
#### Profissional:
Os tipos de Profissionais aparecerão aqui, podendo editar e excluir o tipo selecionado.
#### Projeto:
Todos os projetos estão nessa aba com o Cliente ao lado. Conseguimos editar o Cliente, o tipo de contrato e a modalidade.
#### Serviços:
Os serviços do sistema aparece junto com o Cliente nesta aba. Podemos adicionar um novo ou editar um ja criado.
#### Status de Redlist:
Aqui conseguimos ver os tipos de mensagem da Redlist. Podendo editar-las ou até criar novos Status de Redlist.
#### Status de Cancelamento:
Assim como o de cima, aqui são os motivos de Cancelamentos. Podendo editar-las ou criar novos motivos.
#### Tags:
#### Temas:
Todos os temas do nosso sistema ficam aqui, com o seu codígo, cliente, projeto, período, curadoria e área de atuação. Podemos editar cada uma selecionada.
#### Tipos de arquivo:
Quando o cliente precisa enviar um arquivo e daqui que vem o nome do arquivo pedido. Temos acesso aos tipos de arquivo que o sistema pede e temos a opção de criar novos.
#### Verba das Curadorias:
Conseguimos ver as verbas de cada curadoria criada no nosso sistema é o quando ja foi usado dessa verba de cada curadoria. Podemos selecionar o período de tempo para ver a verba daquele período e adicionar uma nova verba de curadoria.
### **_Minha Conta_**
Em Minha conta podemos editar dados da conta cadastrada.
#### Dados Cadastrais:
Aqui conseguimos modificar todos os dados que o usuário inseriu na hora do cadastro, é no fim temos que salva-las para atualizar as modificações
#### Alterar Senha:
O usuário consegue alterar a sua senha atual para uma nova da sua escolha.
---
### Endpoints
##### Usuários
* [POST] - /usuario
* Realiza a criação de um usuário
* [GET] - /usuario
* Realiza a criação de um usuário
* [PUT] - /usuario/:id
* Atualiza um usuário
##### Alterar Senha e Email
* [GET] - /atualizar-email-senha
* Altera senha ou email do usuário
##### Aréa de Conhecimento
* [DEL] - /area-conhecimento/:id
* Deleta um contrato
* [POST] - /area-conhecimento
* Realiza a criação de uma Aréa de conhecimento
* [PUT] - /area-conhecimento/1
* Atualiza uma aréa de conhecimento
* [GET] - /area-conhecimento
* Busca todos as aréas de conhecimento
##### Arquivos
* [POST] - /arquivo
* Realiza a criação de um arquivo
* [GET] - /arquivo/:hash
* Busca arquivo pelo hash
##### BlackList
* [DEL] - /blacklist/:id
* Deleta uma blacklist
##### Busca Usuário
* [GET] - /busca-usuario
* Busca usuário por papel (roles)
##### Carga Tema
* [GET] - /cargas-temas
* Busca todas as cargas de temas
##### Carga Disciplina Produção
* [GET] - /carga-disciplina-producao
* Busca todas as cargas de disciplina de produção
##### Carga Produção
* [DEL] - /carga-producao/:id
* Deleta uma carga produção
* [POST] - /carga-producao
* Realiza a criação de uma Carga de produção
* [PUT] - /carga-producao/:id
* Atualiza uma carga de produção
* [GET] - /carga-producao
* Busca todos as Cargas de produção
##### Certificado
* [POST] - /certificado
* Realiza a criação de um certificado
##### Cliente
* [DEL] - /cliente/:id
* Deleta um cliente pelo ID
* [POST] - /cliente
* Realiza a criação de um Cliente
* [PUT] - /cliente/:id
* Atualiza um Cliente
* [GET] - /cliente
* Busca todos os Clientes
##### Contato
* [DEL] - /contato/:id
* Deleta um contato pelo ID
##### Contrato Arquivo
* [DEL] - //contrato-arquivo/:id
* Deleta um contrato arquivo pelo ID
* [PUT] - /contrato-arquivo/:id
* Atualiza um Contrato arquivo
##### Contrato
* [POST] - /contrato
* Realiza a criação de um contrato
* [DEL] - /contrato/:id
* Deleta um contrato
* [PUT] - /contrato/:id
* Atualiza um contrato
* [GET] - /contrato
* Busca todos os contratos
##### Contrato Individual
* [POST] - /contrato-individual
* Realiza a criação de um contrato individual
##### Contrato Mudança Status
* [POST] - /contrato-mudanca-status
* Realiza a criação de um contrato mudança status
##### Contrato Especialista
* [GET] - /contrato-especialista
* Busca todos os contratos de especialista
##### Contrato Aprovação
* [POST] - /contrato-aprovacao
* Realiza a criação de um contrato aprovado
* [DEL] - /contrato-aprovacao/:id
* Deleta um contrato aprovação
* [PUT] - /contrato-aprovacao/:id
* Atualiza um contrato de aprovação
* [GET] - /contrato-aprovacao
* Busca todos os contratos de aprovação
##### Contrato Dados de Pagamento
* [POST] - /contrato-dados-pagamento
* Realiza a criação de um contrato com dados de pagamento
* [PUT] - /contrato-dados-pagamento/:id
* Atualiza um contrato de dados de pagamento
* [GET] - /contrato-dados-pagamento
* Busca todos os contratos de dados de pagamento
##### Convite
* [POST] - /convite
* Realiza a criação de um convite
* [PUT] - /convite/:id
* Atualiza um convite
* [GET] - /convite
* Busca todos os convites
##### Curadoria
* [POST] - /curadoria
* Realiza a criação de uma curadoria
* [DEL] - /curadoria/:id
* Deleta uma curadoria
* [PUT] - /curadoria/:id
* Atualiza uma curadoria
* [GET] - /curadoria
* Busca todos as curadorias
##### Confirmar Email
* [PUT] - /confirmar-email
* Confirmar o email por hash
##### Disciplina
* [POST] - /disciplina
* Realiza a criação de uma disciplina
* [DEL] - /disciplina/:id
* Deleta uma disciplina
* [PUT] - /disciplina/:id
* Atualiza uma disciplina
* [GET] - /disciplina
* Busca todos as disciplinas
##### Disciplina Produção
* [GET] - /disciplina-producao
* Busca todos as disciplinas produção
##### Dominio
* [POST] - /dominio
* Realiza a criação de um dominio
* [DEL] - /dominio/:id
* Deleta um dominio
* [PUT] - /dominio/:id
* Atualiza um dominio
* [GET] - /dominio
* Busca todos os dominios
##### Formação
* [POST] - /formacao
* Realiza a criação de uma formação
* [DEL] - /formacao/:id
* Deleta uma formação
* [PUT] - /formacao/:id
* Atualiza uma formação
* [GET] - /formacao
* Busca todas as formações
##### Instituição
* [POST] - /instituicao
* Realiza a criação de uma instituição
* [DEL] - /instituicao/:id
* Deleta uma instituição
* [PUT] - /instituicao/:id
* Atualiza uma instituição
* [GET] - /instituicao
* Busca todas as instituições
##### Modelo
* [POST] - /modelo
* Realiza a criação de um modelo
* [DEL] - /modelo/:id
* Deleta um modelo
* [PUT] - /modelo/:id
* Atualiza um modelo
* [GET] - /modelo
* Busca todos os modelos
##### Modulo
* [DEL] - /modulo/:id
* Deleta um modulo
##### Período
* [POST] - /periodo
* Realiza a criação de um período
* [DEL] - /periodo/:id
* Deleta um período
* [PUT] - /periodo/:id
* Atualiza um período
* [GET] - /periodo
* Busca todos os períodos
##### Permission
* [POST] - /permissions
* Realiza a criação de uma permission
* [DEL] - /permissions/:id
* Deleta uma permission
* [PUT] - /permissions/:id
* Atualiza uma permission
* [GET] - /permissions
* Busca todas as permissions
##### Produção
* [POST] - /producao
* Realiza a criação de uma produção
* [DEL] - /producao/:id
* Deleta uma produção
* [PUT] - /producao/:id
* Atualiza uma produção
* [GET] - /producao
* Busca todas as produções
##### Produto
* [POST] - /produto
* Realiza a criação de um produto
* [DEL] - /produto/:id
* Deleta um produto
* [PUT] - /produto/:id
* Atualiza um produto
* [GET] - /produto
* Busca todos os produtos
##### Projeto
* [POST] - /projeto
* Realiza a criação de um projeto
* [DEL] - /projeto/:id
* Deleta um projeto
* [PUT] - /projeto/:id
* Atualiza um projeto
* [GET] - /projeto
* Busca todos os projetos
##### Projeto Especialista
* [GET] - /projeto-especialista/:id
* Busca o projetos especialista pelo ID
##### Profissional
* [POST] - /profissional
* Realiza a criação de um profissional
* [DEL] - /profissional/:id
* Deleta um profissional
* [PUT] - /profissional/:id
* Atualiza um profissional
* [GET] - /profissional
* Busca todos os profissionais
##### Relatório
* [POST] - /relatorio-redlist
* Realiza a criação de um relatório
* [GET] - /relatorio-pagamento-permitido/:id
* Busca todos os relatórios de pagamento permitido pelo ID
##### Relatórios Upload
* [POST] - /relatorio-rh-consolidado
* Realiza a criação de um relatório consolidado
##### Regerar Contrato
* [PUT] - /regerar-contrato/:hash
* Regenera um contrato pela hash
##### Roles
* [POST] - /roles
* Realiza a criação de um role
* [DEL] - /roles/:id
* Deleta um role
* [PUT] - /roles/:id
* Atualiza um role
* [GET] - /roles
* Busca todos os roles
##### Rota WEB
* [POST] - /rota-web
* Realiza a criação de uma rota
* [DEL] - /rota-web/:id
* Deleta uma rota
* [PUT] - /rota-web/:id
* Atualiza uma rota
* [GET] - /rota-web
* Busca todas as rotas web
##### Rota WEB Papel
* [POST] - /rota-web-papel
* Realiza a criação de uma rota web papel
* [GET] - /rota-web-papel
* Busca todas as rotas web papel
##### Serviço
* [POST] - /servico
* Realiza a criação de um serviço
* [DEL] - /servico/:id
* Deleta um serviço
* [PUT] - /servico/:id
* Atualiza um serviço
* [GET] - /servico
* Busca todos os serviços
##### Change Password
* [PUT] - /atualizar-senha
* Atualiza senha
##### Sessão
* [POST] - /sessao
* Realiza a criação de uma sessão
##### Status Contrato
* [POST] - /status-contrato
* Realiza a criação de um status de contrato
* [DEL] - /status-contrato/:id
* Deleta um status de contrato
* [PUT] - /status-contrato/:id
* Atualiza um status de contrato
* [GET] - /status-contrato
* Busca todos os status de contrato
##### Status Cancelamento
* [POST] - /status-cancelamento
* Realiza a criação de um status de cancelamento
* [DEL] - /status-cancelamento/:id
* Deleta um status de cancelamento
* [PUT] - /status-cancelamento/:id
* Atualiza um status de cancelamento
* [GET] - /status-cancelamento
* Busca todos os status de cancelamentos
##### Status Blacklist
* [POST] - /status-blacklist
* Realiza a criação de um status de blacklist
* [DEL] - /status-blacklist/:id
* Deleta um status de blacklist
* [PUT] - /status-blacklist/:id
* Atualiza um status de blacklist
* [GET] - /status-blacklist
* Busca todos os status de blacklist
##### Tag
* [POST] - /tag
* Realiza a criação de uma tag
* [DEL] - /tag/:id
* Deleta uma tag
* [PUT] - /tag/:id
* Atualiza uma tag
* [GET] - /tag
* Busca todas as tags
##### Temas
* [POST] - /tema
* Realiza a criação de um tema
* [DEL] - /tema/:id
* Deleta um tema
* [PUT] - /tema/:id
* Atualiza um tema
* [GET] - /tema
* Busca todos os temas
##### Tipo Arquivo
* [POST] - /tipo-arquivo
* Realiza a criação de um tipo arquivo
* [DEL] - /tipo-arquivo/:id
* Deleta um tipo arquivo
* [PUT] - /tipo-arquivo/:id
* Atualiza um tipo arquivo
* [GET] - /tipo-arquivo
* Busca todos os tipos de arquivo
##### Verba
* [POST] - /verba
* Realiza a criação de uma verba
* [DEL] - /verba/:id
* Deleta uma verba
* [PUT] - /verba/:id
* Atualiza uma verba
* [GET] - /verba
* Busca todas as verbas
##### Verificar Verba
* [GET] - /verifica-verba/:id
* Verifica a verba pelo ID
---
### Detalhamento do Produto
- Diagrama do banco de dados:

---
### Arquitetura HLD - High Level Design
- Diagrama de componentes:

### Segurança do Produto
---
O Flow, em seu back-end utiliza o padrão JWT (RFC-7519) como mecanismo de transmissão e armazenamento de objetos JSON entre os níveis da aplicação, fazendo uso de um token.
Ao realizar um login, o serviço de autenticação gera um token JWT para o cliente, permitindo acesso de acordo com o tipo de perfil é o a regras de acesso a determinadas rotas.
---