# 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.