# Review Script
## Objetivo e motivação
Num mundo com preocupações energéticas cada vez maiores, aqueles que estão envolvidos na distribuição e produção deste recurso tão importante precisam de uma maneira melhor de analisar os dados produzidos pela sua atividade. Este conhecimento poderá ajudá-los a oferecer uma experiência melhor e a estarem melhor preparados para lidar com situações imprevistas que possam ter um impacto negativo no mercado.
## Funcionalidades
A parte mais importante do projeto consiste num **GIS** (*Geographical Information System*) que permite a um produtor ou distribuidor de energia visualizar os seus *assets* num mapa e consultar informação sobre os mesmos.
Esta informação inclui:
- Observar o fluxo de energia na rede;
- As quantidades de energia presentes em cada secção;
- Verificar se está a receber e a enviar a mesma quantidade de energia.
Para além do GIS, um utilizador também terá acesso a um painel de controlo que lhe permite comparar diversos tipos de dados com recurso a vários tipos diferentes de gráficos.
Estes dados podem ser referentes aos seus *assets*, ao mercado ou a previsões futuras obtidas através de inteligência artificial. Para além disto, o utilizador terá acesso a um sistema de alertas para limites (opcionais) que defina para as diferentes propriedades dos seus *assets*. Os alertas são entregues sob a forma de notificações quando os limites definidos são ultrapassados.
Por fim, um utilizador poderá ainda fazer simulações, criando (ou removendo) *assets* fictícios o que pode ser útil para, por exemplo, projetar expansões da rede e analisar o comportamento da rede em diferentes configurações.
## Arquitetura e tecnologias
Passando agora para uma perspetiva mais técnica, o projeto consiste numa web app com a típica estrutura **MVC** (*Model-View-Controller*), o que nos permite dividir o sistema em três componentes principais.
No *frontend* (componente *View*) vamos usar *React*, uma *framework* de JavaScript que simplifica bastante o processo de construção de uma interface gráfica. Ainda no *frontend*, tencionamos usar [nebula.gl](https://nebula.gl/) para implementar o GIS, bem como [visx](https://airbnb.io/visx/) para a visualização de todos os gráficos.
Para o *backend* (componente *Controller*) vamos usar [Node.js](https://nodejs.org/en/), um ambiente de runtime muito popular que permite a execução de Javascript fora de um browser. Para além disso, vamos também usar ExpressJS por nos permitir facilmente criar a API que será necessária para a ingestão de dados, permitindo também agilizar o desenvolvimento desta parte da aplicação.
Para além disso, como base de dados (componente *Model*) será utilizado [Neo4j](https://neo4j.com/), uma opção *NoSQL* que faz uso do paradigma de grafos, um modelo que se adequa bastante aos dados que usaremos por serem bastante voláteis e por a sua estrutura se assemelhar à de um grafo.
Por fim, vamos usar [Docker](https://www.docker.com/) para facilitar a gestão de dependências.
<!-- mencionar libraries usadas para gráficos/mapas se já estiverem escolhidas? -->
## Plano de desenvolvimento
Dada a prevalência do mapa geográfico no nosso produto, a fase inicial do desenvolvimento focar-se-á neste componente.
Será implementado um mapa geográfico com a capacidade de criação de pontos (*markers*) e conexões entre estes.
Em seguida, é desejável dar permanência a esta informação. Para que isto possa ser realizado vamos configurar uma base de dados. Além das posições dos *markers*, também manteremos informações relativas aos *assets* que eles representam, por exemplo, a capacidade de uma *solar farm*.
De seguida, é necessária a apresentação de estatísticas relativas às diversas propriedades dos *assets* do utilizador e previsões relativas às necessidades, capacidade de produção, e preço da energia no futuro. Para isto, será desenvolvido um painel com diversos gráficos que permitam uma fácil leitura destas informações. Por fim, será criada a API usada para ingestão de dados.
Relativamente ao modo como isto será divido, serão utilizadas **3 iterações** (*sprints*) de **2 semanas** cada. A primeira terá como foco o GIS e configuração da base de dados. Durante a segunda terminar-se-á o GIS dependendo do progresso realizado na primeira e também se iniciará a criação da *dashboard*. Na última terminar-se-á a *dashboard* e será elaborada a API.