diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..d31ec15 --- /dev/null +++ b/404.html @@ -0,0 +1,2355 @@ + + + + + + + + + + + + + + + + + + + PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/analise/IRENA_IEA_NREL/irena_iea_nrel/index.html b/analise/IRENA_IEA_NREL/irena_iea_nrel/index.html new file mode 100644 index 0000000..74477d0 --- /dev/null +++ b/analise/IRENA_IEA_NREL/irena_iea_nrel/index.html @@ -0,0 +1,2524 @@ + + + + + + + + + + + + + + + + + + + + + + + IRENA, IEA e NREL - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Ir para o conteúdo + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

IRENA (International Renewable Energy Agency – Agência Internacional de Energia Renovável)

+

Definição

+

fornece anualmente um relatório que fornece dados mais atualmente populares e análises sobre tecnologia, inovação, política, financiamento e investimento em energia renovável.

+

https://www.irena.org/Data

+

Dados Disponíveis

+

Fornece números totais de emprego no setor de energia renovável por tecnologia no mundo todo, mas só fornece esses gráficos no formato pdf e power point e os dados são de 2012 até o ano mais recente (2021 atualmente) na página https://www.irena.org/Data/View-data-by-topic/Benefits/Employment-Time-Series

+

Fornece números totais de emprego no setor de energia renovável por tecnologia e por país, fornece esses gráficos no formato excel e os dados são do ano mais recente (2021 atualmente) na página https://www.irena.org/Data/View-data-by-topic/Benefits/Renewable-Energy-Employment-by-Country

+

Também fornece o potencial de geração de energia por fontes renováveis e a geração de energia por fontes renováveis divididas por tipos de fontes renováveis e por país. Fornece os dados 2000 até ano mais recente (2022 atualmente) e no formato excel, a página é https://www.irena.org/Data/View-data-by-topic/Capacity-and-Generation/Country-Rankings

+

Fornece a participação de fontes renováveis na matriz elétrica país dos anos de 2000 até o ano mais recente (atualmente 2021). Fornece os dados no formato excel ou csv, a página é https://www.irena.org/Data/View-data-by-topic/Capacity-and-Generation/Technologies.

+

Fornece a quantidade emissões evitadas por país, por tecnologia e dos anos de 2000 até o ano mais recente (atualmente 2020). Não fornece opção de baixar os dados em algum formato, a página é https://www.irena.org/Data/View-data-by-topic/Climate-Change/Avoided-Emissions-Calculator.

+

Fornece a média global dos custo totais, fatores de capacidade e LCOE (Levelized Cost of Energy – Custo Nivelado de Energia) por tecnologias além de também fornecer os valores anuais de 2010 até o ano mais atual (2020 atualmente). Fornece os dados no formato excel na página https://www.irena.org/Data/View-data-by-topic/Costs/Global-Trends.

+

Fornece LCOE (Levelized Cost of Energy – Custo Nivelado de Energia) médio global com os valores de leilão por tecnologia de 2010 até o ano mais atual (2023 atualmente). Supostamente oferece a opção de baixar os dados em excel mas o ícone com a opção de baixar leva para uma página não relacionada https://www.irena.org/Data/View-data-by-topic/Costs/Global-LCOE-and-Auction-values.

+

Fornece LCOE médio de projetos eólicos por país de 1984 até o ano mais recente (atualmente é 2019). Supostamente oferece a opção de baixar os dados em excel mas o ícone com a opção de baixar leva para uma página não relacionada https://www.irena.org/Data/View-data-by-topic/Costs/Wind-Costs.

+

Fornece informações sobre os investimentos nas tecnologias do ano de 2013 até o ano mais recente (atualmente é 2022) globalmente. Oferece a opção de baixar os dados em formato excel na página +https://www.irena.org/Data/View-data-by-topic/Finance-and-Investment/Investment-trends.

+

Fornece informações sobre os investimentos públicos em renováveis do ano de 2000 até o ano mais atual (atualmente é 2020) globalmente. Oferece a opção de baixar os dados no formato excel na página https://www.irena.org/Data/View-data-by-topic/Finance-and-Investment/Renewable-Energy-Finance-Flows.

+

Fornece dados sobre consumo final de renovável por país e por tecnologia do ano de 2020 até o ano mais recente (2021). Supostamente oferece a opção de baixar os dados em formato excel mas quando clica no ícone não carrega na página https://www.irena.org/Data/View-data-by-topic/Renewable-Energy-Balances/Final-Renewable-Energy-Consumption.

+

IEA

+

Fornece dados sobre as tecnologias em determinado país e quando produziam nos anos de 2000 à 2021, tendo até 2027 uma projeção da produção de energia de determinada tecnologia. +Não tem dados disponíveis para baixar +https://www.iea.org/data-and-statistics/data-tools/renewables-data-explorer

+

NREL

+

Fornece diversos dados mais não relacionados ao tema de transição energética, mas voltado ao tema de energia relacionado ao tema de energia solar +https://www.nrel.gov/research/data-tools.html

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/analise/image.png b/analise/image.png new file mode 100644 index 0000000..7d73d0b Binary files /dev/null and b/analise/image.png differ diff --git a/analise/pne_2050/mapa_do_caminho_transicao_energetica.png b/analise/pne_2050/mapa_do_caminho_transicao_energetica.png new file mode 100644 index 0000000..08833e7 Binary files /dev/null and b/analise/pne_2050/mapa_do_caminho_transicao_energetica.png differ diff --git a/analise/pne_2050/papel_e_atuacao_do_governo.png b/analise/pne_2050/papel_e_atuacao_do_governo.png new file mode 100644 index 0000000..7c0dfad Binary files /dev/null and b/analise/pne_2050/papel_e_atuacao_do_governo.png differ diff --git a/analise/pne_2050/pne_2050/index.html b/analise/pne_2050/pne_2050/index.html new file mode 100644 index 0000000..de6efed --- /dev/null +++ b/analise/pne_2050/pne_2050/index.html @@ -0,0 +1,2683 @@ + + + + + + + + + + + + + + + + + + + + + + + PNE 2050 - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Ir para o conteúdo + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Plano Nacional de Energia 2050

+

​Definição

+

Primeiramente, o plano nacional de energia 2050 é um instrumento de suporte ao desenho da estratégia de longo prazo do planejador em relação à expansão do setor energético do Brasil. Ele é desenvolvido pela EPE de acordo com as diretrizes do Ministério de Minas e Energia

+

"Ao lançar o PNE, o Governo Federal enuncia os termos de uma estratégia de longo prazo para o setor energético, e com isso chama à construção de grandes consensos com a sociedade e as empresas, em prol do desenvolvimento do País."

+

​Introdução

+

Associadas a tais mudanças, foram elaborados dois grandes cenários, formando um cone de incertezas para o desenho da estratégia de longo prazo: o primeiro, chamado de Desafio da Expansão , que reflete requisitos de expansão do setor de energia para atendimento a um crescimento da demanda de energia mais expressivo. No segundo, chamado de Estagnação , analisam as consequências de um cenário em que o consumo de energia per capita mantêm-se inalterado ao longo de todo o período. Neste caso, a questão da expansão da produção é menos premente, embora ainda reste a necessidade de se desenhar a politica energética mais adequada para atender ao crescimento vegetativo da demanda.

+

O foco do relatório está voltado para o cenário Desafio da Expansão, uma vez que tal contexto impõe ao planejador, além da necessidade de reforçar e aperfeiçoar os mecanismos e as políticas vigentes, também buscar soluções inovadoras que permitam o estabelecimento de uma estratégia de expansão de longo prazo do setor energético de forma a garantir o fornecimento de energia à sociedade nesse horizonte, atendendo critérios de segurança energética, retorno adequado aos investimentos, disponibilidade de acesso à população e socioambientais.

+

O cenário de Estagnação, embora tenha seus desafios intrínsecos relativos a um ambiente econômico e de desenvolvimento mais adverso, não constitui, do ponto de vista do planejador do setor de energia, uma preocupação iminente em termos de expansão da capacidade de atendimento da demanda de energia, visto o aumento da oferta de energia verificado nos últimos anos. Assim, sua atenção poderia estar mais concentrada, por exemplo, em discussões sobre o perfil mais adequado da matriz energética nacional, de acordo com algum critério de interesse ( ex. emissões de gases de efeito estufa)

+

1. Estrutura do relatório do PNE 2050

+

Uma parte importante também do relatório é a sua estrutura, que conforme disposto no inciso 1 do capítulo de introdução, é constituída de duas partes:

+
    +
  • Na primeira parte são apresentados os principais fatores que condicionam (e, em vários casos são condicionados por) a evolução do setor de energia e que foram, portanto, denominadas questões transversais. Vale ressaltar também que são descritos os resultados finais do exercício de análise a longo prazo e os principais direcionamentos para o desenho da estratégia de longo prazo.
  • +
  • Na segunda parte, a análise é organizada por tipo de tecnologia, infraestrutura de transporte de energia e por segmentos de consumo.
  • +
+

Na introdução do PNE 2050, é exibida uma tabela que contem o tipo de fatores condicionantes ( ou condicionados), suas palavras-chaves e uma breve sinopse. Fatores estes que são utilizados para o estudo de cenários que o PNE 2050 avalia.

+

2. Contexto do PNE 2050

+

Nesta parte do capítulo de introdução, é feita uma comparação entre o PNE 2050 e o PNE 2030. Nessa comparação podemos perceber o que motivou a criação de uma nova estratégia, trata-se de dois fatores que se fortalecerem com o início do século XXI: a busca por maior eficiência energética e o respeito a questões socioambientais. O capítulo também trata de questões que o PNE 2030 ajudou a contribuir e serviu como diretriz.

+

"Três diferenças podem ser elencadas em relação ao PNE 2030: a abordagem do problema, o reconhecimento da imprevisibilidade inerente do futuro e a perspectiva de abundância de recursos no horizonte de longo prazo."

+

"Assim, mais fundamental do que a discussão de quantos cenários serão avaliados e qual a matriz energética resultante em 2050 em cada um deles é estabelecer as orientações de longo prazo que permitam a todos os agentes do setor tomar suas decisões de modo a alcançar o melhor resultado para o desenvolvimento do setor de energia".

+

Existem questões que o PNE 2050 tenta se pautar durante sua elaboração, estas questões são limitadas por dois cenários:

+
    +
  • cenário Desafio da Expansão, definido como aquele em que as autoridades do setor de energia precisam lidar com uma expansão significativa da demanda de energia ao desenhar sua estratégia para o setor.
  • +
  • O cenário de Estagnação, em que a questão da expansão não é tão relevante, mas ainda assim há um espaço para avaliar a evolução da matriz de energia.
  • +
+

3. Papel e Atuação do Governo: Princípios para o Setor de Energia +Papel e Atuação do Governo: Dez princípios para o Setor de Energia

+

​Produção e Uso de Energia

+

Nesta seção, são apresentados as principais considerações no tratamento do panorama em relação a produção e ao uso de energia no horizonte de 2050.

+

Destaca-se nesta seção que o Brasil, em um futuro não tão remoto, deve se tornar, de um demandante líquido de energia para um ofertante líquido de energia, visto que o país atualmente produz mais do que demanda de energia. O grande desafio aparece quando se vislumbra um cenário de transição energética mundial, onde as incógnitas ficam para os pontos de tecnologia e fontes que suprirão estas novas demandas. Mas, é certo que o Brasil, devido a sua grande riqueza natural e de recursos, suprirá sua demanda energética atual e futura no horizonte de 2050.

+

Administração da abundância (1): a disponibilidade total de recursos supera largamente a demanda de energia total no horizonte até 2050.

+

Tendo em vista essa abundância, um dos pontos que o PNE 2050 aborda é a administração desta abundância energética. "Seguramente, tal tarefa leva em conta as implicações econômicas que surgirão de o País se tornar grande produtor de energia, com grande riqueza de fontes distintas de energia".

+

Administração da abundância (2): só a parcela dos recursos mais facilmente acessíveis excede em 60% a demanda de energia total acumulada do período. " […] Caso não haja economicidade, o poder público pode avaliar a criação e a implementação de políticas no sentido de aproveitamento de determinadas fontes. Logo, a facilidade de aproveitamento dos recursos torna-se tão relevante quanto o seu potencial."

+

Administração da abundância (3): o aproveitamento de boa parte dos recursos implicará desafios significativos.

+

​Questões Transversais

+

O texto discute os fatores que devem ser considerados no planejamento energético de longo prazo em meio a grandes transformações. Estas mudanças estão relacionadas à chamada transição energética, caracterizada pela descarbonização das matrizes energéticas para combater as mudanças climáticas, descentralização dos recursos energéticos e maior digitalização na produção e uso de energia. Além disso, o papel do consumidor também está mudando devido aos avanços tecnológicos e novos modelos de negócios.

+

Esses fatores foram agrupados como questões transversais que influenciam a expansão da produção e uso de energia no Brasil. O texto aborda cada questão transversal, suas relações com as políticas energéticas vigentes e os principais desafios que podem afetar a estratégia de atuação no longo prazo do tomador de decisão no setor de energia. As recomendações sugeridas são apresentadas para cada questão, divididas ao longo das próximas décadas para atingir a maturidade na execução do plano de ação.

+

Questões Transversais Abordadas

+

Neste Relatório de Resumo só será abordado a área de interesse do TCU, ou seja o setor de transição energética.

+

​ Transição Energética

+

O texto aborda a temática da Transição Energética e suas implicações no contexto mundial. A transição energética envolve mudanças na matriz energética global, direcionando para uma economia de baixo carbono e maior eficiência energética. Isso implica na substituição gradual de fontes intensivas em emissão de carbono por fontes renováveis, eletrificação dos processos de conversão de energia e maior automação e digitalização. Além disso, a transição energética também impacta tecnologias, padrões de consumo, relações socioeconômicas e a geopolítica da energia.

+

O processo de transição envolve diversas dimensões e é complexo, podendo levar um longo tempo para se concretizar. As principais fontes que desempenharão um papel relevante nesse processo são a eletrificação (com destaque para as energias renováveis), os biocombustíveis, a eficiência energética catalisada pela digitalização e o gás natural( como combustível de transição).

+

Além disso, o hidrogênio é considerado uma alternativa relevante para atender setores de consumo que têm dificuldade em serem atendidos por eletricidade ou biocombustíveis, sendo que a rota verde de produção (eletrólise da água com fontes renováveis de eletricidade) é vista como a mais relevante internacionalmente para produção de hidrogênio dentro de outras alternativas.

+

Para cumprir os objetivos do Acordo de Paris e descarbonizar o sistema energético mundial, é necessário investir cada vez mais em fontes renováveis e integrá-las aos setores que demandam energia. Porém, é importante garantir a competição entre diferentes soluções que atendam às necessidades do sistema, incluindo o gerenciamento da variabilidade das fontes renováveis.

+

Políticas em vigor para o Setor de Energia:

+

Não há políticas específicas para transição energética no Brasil, mas há uma série de políticas que afetam e favorecem a transição energética, são elas: Política Nacional sobre Mudança do Clima – PNMC, Lei 12.187 de 2009; Contribuição Nacionalmente Determinada – NDC; Política Nacional de Biocombustíveis – RenovaBio, Lei nº 13.576, de 26 de dezembro de 2017; Novo Mercado de Gás, Decreto nº 9.616/2018 (que altera o Decreto nº 7.382/2010), Resolução CNPE nº16/2019, Termo de Compromisso de Cessação – TCC Petrobras-CADE, Ajuste SINIEF/CONFAZ nº 03/2018, Decreto nº 9.934/2019; Modernização do Setor Elétrico, Consulta Pública nº 33/2017 , Portaria nº 187/2019, PLS 232/2016 e PL 1.917/2015.

+

Existem também outras políticas, programas, iniciativas e ações que se relacionam indiretamente ao tema da transição energética.

+

Mapa do Caminho: Transição Energética

+

Desafios para o Tomador de Decisão no Setor de Energia

+

O texto aborda os desafios que o tomador de decisão no setor de energia enfrenta durante a transição energética. Os principais pontos são:

+
    +
  1. Desenho de mercado e arcabouço regulatório: As barreiras não econômicas, como falta de informação, aversão ao risco tecnológico e normas associadas ao paradigma tecnológico anterior, dificultam a potencialização da transição energética.
  2. +
  3. Incertezas sobre a evolução do setor: A inovação em curso, incluindo eletrificação, automação, conectividade e descarbonização, traz desafios econômicos e competitivos. É fundamental monitorar as incertezas tecnológicas, econômicas e ambientais para evitar trajetórias rígidas que possam implicar em riscos futuros.
  4. +
  5. Multiplicidade de dimensões da transição: A transição energética oferece oportunidades de negócios associadas às vantagens competitivas do Brasil, mas também requer alinhamento estratégico para criar um ambiente de negócios atrativo e inovador. Desenvolver a capacitação em tecnologias como digitalização, automação e segurança cibernética é essencial. Além disso, coordenar políticas setoriais de energia com outras esferas, como econômica, científico-tecnológica e ambiental, é um desafio importante.
  6. +
+

Recomendações para o Tomador de Decisão no Setor de Energia

+

As recomendações para o tomador de decisão no setor de energia se dividem em duas categorias: aquelas que reforçam as vantagens competitivas do Brasil e as que desenvolvem novas vantagens e gerenciam as incertezas da transição energética.

+
    +
  1. Promover a sinergia de políticas públicas e desenhos de mercado associados: É importante garantir que as políticas públicas e desenhos de mercado sejam coerentes e sinérgicos entre si. Devem ser incentivadas políticas que promovam a eficiência energética, o uso de biocombustíveis, a eletrificação de frotas e transportes não motorizados, além de investimentos em tecnologias de hidrogênio. Além disso, é necessário alinhar as políticas energéticas com as políticas ambientais e compromissos internacionais relacionados às mudanças climáticas e desenvolvimento sustentável.
  2. +
  3. Adequar arranjos institucionais, regulatórios e de desenho de mercado apropriados para potencializar a transição energética: A transição energética requer aprimoramentos nos arranjos institucionais e regulatórios para internalizar as externalidades ambientais nos preços de energia e tornar o mercado mais aberto, competitivo e ágil. As distribuidoras de energia têm um papel central nesse processo, especialmente por meio de iniciativas de digitalização e remuneração adequada aos serviços prestados. O fomento à inovação tecnológica e o desenvolvimento de nichos de inovação também são fundamentais.
  4. +
  5. Desenvolver estratégias flexíveis para lidar com incertezas e baseadas nas vantagens competitivas do País, priorizando políticas sem arrependimento que evitem trancamento tecnológico: O Brasil deve aproveitar suas vantagens competitivas na transição energética e usar isso como base para desenvolver ou migrar competências. Priorizar políticas sem arrependimento, ou seja, políticas que trazem benefícios independentemente do caminho tecnológico escolhido, é essencial para evitar riscos e trancamento tecnológico. Em vez de definir uma rota tecnológica específica, é mais adequado estabelecer políticas que promovam resultados e competição entre diferentes rotas tecnológicas, permitindo a inovação e a superação de tecnologias específicas.
  6. +
  7. Reforçar alianças e redes estratégicas internacionais para desenvolver maior flexibilidade nas escolhas estratégicas associadas a transição energética: O Brasil possui relações diplomáticas e econômicas amplas com diversos países, o que lhe confere margem para estabelecer parcerias e projetos em diferentes áreas e com países distintos. Essas alianças e redes estratégicas fortalecem o país em termos geopolíticos e proporcionam maior flexibilidade nas escolhas estratégicas relacionadas à transição energética, gerando diversidade de caminhos e graus de liberdade nas decisões. Essa pluralidade de ações é um ativo relevante para o processo de transição energética
  8. +
  9. Articular as políticas energéticas com políticas de CT&I e educação, desenvolvimento de novas capacitações e vantagens competitivas: É importante reforçar a ligação entre o planejamento energético nacional e o sistema nacional de inovação, políticas de ciência, tecnologia e inovação (CT&I) e educação. Isso permitirá criar um ambiente de negócios propício à inovação em mercados abertos e competitivos, possibilitando que as instituições de CT&I coloquem suas inovações no mercado e as disseminem de forma mais ampla.
  10. +
+

Conclusão

+

O Plano Nacional de Energia 2050 é um importante instrumento de suporte para a estratégia de longo prazo do setor energético brasileiro. Elaborado pela EPE e seguindo as diretrizes do Ministério de Minas e Energia, o plano busca construir consensos com a sociedade e as empresas em prol do desenvolvimento do país.

+

O relatório abordou dois grandes cenários: o Desafio da Expansão e a Estagnação. Dado o contexto de transição energética mundial, o foco concentrou-se no Desafio da Expansão, que demanda aprimoramentos nas políticas e mecanismos vigentes e busca de soluções inovadoras para garantir o fornecimento de energia à sociedade de forma segura e sustentável.

+

A transição energética é um tema central no relatório, envolvendo a substituição gradual de fontes intensivas em emissão de carbono por renováveis, a eletrificação, a eficiência energética e o uso de gás natural como combustível de transição. O Brasil, com sua abundância de recursos naturais, tem o potencial de se tornar um ofertante líquido de energia, o que implica em administrar essa abundância de forma econômica e sustentável.

+

O tomador de decisão no setor de energia enfrenta diversos desafios, como o desenho de mercado e arcabouço regulatório adequados, a gestão das incertezas sobre o futuro do setor e a coordenação entre diferentes políticas setoriais. Para superar esses desafios, o relatório apresenta recomendações que enfatizam a sinergia entre políticas públicas, o desenvolvimento de estratégias flexíveis baseadas nas vantagens competitivas do país, a busca por políticas sem arrependimento e a criação de alianças internacionais estratégicas.

+

Por fim, é fundamental articular as políticas energéticas com as de ciência, tecnologia e inovação, bem como investir em novas capacitações e vantagens competitivas. Dessa forma, o Brasil poderá enfrentar os desafios da transição energética com sucesso, promovendo um futuro sustentável e próspero para o setor energético do país.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/analise/pne_2050/questoes_transversais_abordadas.png b/analise/pne_2050/questoes_transversais_abordadas.png new file mode 100644 index 0000000..5c20428 Binary files /dev/null and b/analise/pne_2050/questoes_transversais_abordadas.png differ diff --git a/analise/projetos_similares/index.html b/analise/projetos_similares/index.html new file mode 100644 index 0000000..c000fa8 --- /dev/null +++ b/analise/projetos_similares/index.html @@ -0,0 +1,2574 @@ + + + + + + + + + + + + + + + + + + + + + + + Projetos Similares - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Ir para o conteúdo + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Projetos Similares

+

Nesta análise, apresentaremos uma compilação de projetos semelhantes ao nosso, buscando inspiração e aprimoramento das funcionalides. Através desta análise, exploraremos diferentes abordagens e soluções adotadas por outros projetos para enfrentar problemas semelhantes aos nossos.

+

WRI - SINAPSE

+

É um sistema capaz de simular os efeitos de emissão de gases de efeito estufa (GEE) diretos e indiretos conforme as políticas setoriais. +Ou seja, o usuário insere um cenário e pode combinar com outros e ter uma simulação dos resultados. Por exemplo: se as exigências nos padrões de emissões dos veículos fossem maiores ou se o desmatamento ilegal chegasse a zero, quanto seria a redução de emissões do Brasil em 2050?

+

Alt text

+

LIMITAÇÕES

+
    +
  • +

    A incerteza de resultados cresce +proporcionalmente ao conjunto de políticas +inseridas nos cenários. Os dados de entrada +na ferramenta devem ser estudados, medidos +ou simulados sob determinado conjunto de +hipóteses.

    +
  • +
  • +

    O modelo não avalia adicionalidades de +medidas. O usuário pode, livremente, testar o +impacto da inserção dos 50 instrumentos de políticas +públicas disponíveis na ferramenta, embora muitas +não sejam adicionais.

    +
  • +
  • +

    Caracterizar o nível de incerteza, +numericamente, não é possível. +Limites de incerteza não foram associados aos dados +de entrada. Portanto, não é possível estimar o +grau de incerteza relativo aos dados de saída +(resultados). Como alternativa, o modelo oferece +suporte à análise de Monte Carlo, que pode medir a +sensibilidade dos resultados a alterações nos dados +de entrada

    +
  • +
  • +

    A ferramenta simula o impacto e não as +metas de políticas públicas. O EPS Brasil é +um modelo que permite a simulação de cenários +futuros, ou seja, de construção de trajetórias +possíveis. Contudo, esses cenários factíveis estão +sob a influência do operador da ferramenta do EPS +Brasil, o qual faz a inserção e estabelece o nível +de adoção de políticas.

    +
  • +
  • +

    São limitadas as opções de políticas para +o setor agrícola, florestas e outros usos +da terra. Na versão adaptada para o Brasil +não foi possível adicionar, sobretudo, políticas +da agricultura de baixo carbono.

    +
  • +
  • +

    Diversas técnicas são usadas para evitar +dupla contagem de impacto de políticas, e +essas técnicas envolvem trade-offs. Políticas +que alteram preços, como é o caso da taxação de +carbono, alteram a demanda por bens ou serviços e +as decisões dos compradores que procuram novos +equipamentos.

    +
  • +
+

FUTUROS DESENVOLVIMENTOS

+

No momento, a ferramenta contempla somente dois +cenários: BAU e políticas de P&D sem arrependimento.

+
    +
  • +

    pode ser aprimorada a fim de permitir variações quanto ao +grau de implementação dessas políticas, em especial +no nível de desmatamento

    +
  • +
  • +

    Ademais, pode apresentar impactos adicionais decorrentes de políticas, tais como +a geração de emprego e renda associada à mitigação de +emissões de GEE.

    +
  • +
  • +

    Ainda, o modelo poderá ter o ano-base atualizado com vistas a produzir informações que +sejam recorrentemente utilizadas para a proposição de +políticas climáticas e de desenvolvimento sustentável.

    +
  • +
  • +

    podem ser adicionadas políticas de +incentivo à agricultura de baixo carbono

    +
  • +
  • +

    No setor florestal, podem ser consideradas políticas de +incentivo ao plantio de florestas comerciais, assim como +plantio misto de espécies exóticas e nativas

    +
  • +
  • +

    ao nível do setor de transportes, podem ser +considerados mandatos de vendas de veículos híbridos +flex, levando em conta a vocação do país na produção +de etanol

    +
  • +
  • +

    E, no caso do setor energético, incentivos à +produção de biocombustíveis de segunda geração, que +futuramente deverão encontrar nichos de consumo nos +transportes aéreo e marítimo, tendo em vista metas de +redução de emissões que terão que cumprir.

    +
  • +
+

FONTE DE DADOS ÚTEIS

+

Podem ser afetados por limitações dos dados disponíveis. Mas existem algumas fontes que podemos usar no nosso projeto. +OBS: Os dados abaixo contém apenas uma amostra dos dados totais disponíveis.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DESCRIÇÃOValores específicos para o Brasil?Fonte de dados
Custo social do carbonoNãoUS Gov.
Custo da geração solar distribuídaNãoNREL; EnerNex, 2015
Eficiência de conversão elétrica por combustívelSimKoberle et al., 2018
Importação e exportação de eletricidadeSimEPE; ONS
Custo de substituição de combustível como fração do custo de construçãoNãoHerald News; ENN
Uso de água por tipo de plantaNãoPNNL
Capacidade da bateria por tipo de veículoNãoIrena; Lindon, 2016; Lambert, 2016
Capacidade total de geração solar e eólicaNãoIEA; Bloomberg, 2017a
Subsídios a combustíveis no cenário BAUSimKhanna et al., 2016; IISD;ODI
Taxa de importação por combustíveSimKPMG
Potencial de captura de CO2 direta do arParcialmenteRealmonte et al., 2019; IBGE
Elasticidades de produçãoNãoDamodaran, 2014; RFF
PopulaçãoSimIBGE
+

Bibliografia

+

https://www.wribrasil.org.br/sites/default/files/wribrasil-nota-tecnica-eps-brasil-pt.pdf

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/analise/rich_picture/index.html b/analise/rich_picture/index.html new file mode 100644 index 0000000..40db017 --- /dev/null +++ b/analise/rich_picture/index.html @@ -0,0 +1,2574 @@ + + + + + + + + + + + + + + + + + + + + + + + Rich Picture - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Ir para o conteúdo + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Rich Picture

+

Introdução

+

O richpicture é uma técnica visual usada principalmente na engenharia de requisitos para capturar de maneira gráfica e ilustrativa a complexidade e a interação entre diferentes elementos de um sistema, processo ou situação. O rich picture é uma técnica flexível que pode ser adaptada para diferentes contextos e projetos. Ele pode ser usado como ponto de partida para análise mais detalhada.

+

Rich Picture Eduardo

+
+ +
+ +

Legenda

+

Ator

+

Um ator em um Rich Picture é uma representação visual de uma entidade externa que interage com o sistema ou contexto em questão. Isso pode ser uma pessoa, um grupo de pessoas, uma organização, um sistema automatizado, ou qualquer coisa que tenha um papel influente ou impacto dentro do cenário, mas que não faz parte do sistema em si.

+
+ +
+ +

Operação

+

Refere-se a uma ação ou atividade que está ocorrendo dentro do sistema ou contexto que está sendo representado na imagem. Pode ser um processo, uma tarefa, uma interação entre elementos ou qualquer tipo de ação que contribui para o funcionamento do sistema.

+
+ +
+ +

Seta

+

As setas em um Rich Picture são usadas para representar conexões ou fluxos entre diferentes elementos do sistema. Elas podem indicar direções de interações, influências, trocas de informações, fluxos de trabalho, feedback e muitos outros tipos de relacionamentos entre os componentes do cenário.

+
+ +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/assets/BalancoPotencia.png b/assets/BalancoPotencia.png new file mode 100644 index 0000000..0056840 Binary files /dev/null and b/assets/BalancoPotencia.png differ diff --git a/assets/CapInstGerFonteBrasil.jpeg b/assets/CapInstGerFonteBrasil.jpeg new file mode 100644 index 0000000..de30f9d Binary files /dev/null and b/assets/CapInstGerFonteBrasil.jpeg differ diff --git a/assets/CompCapInstaladaPaises.jpeg b/assets/CompCapInstaladaPaises.jpeg new file mode 100644 index 0000000..fc899fe Binary files /dev/null and b/assets/CompCapInstaladaPaises.jpeg differ diff --git a/assets/CompGerPaises.jpeg b/assets/CompGerPaises.jpeg new file mode 100644 index 0000000..c0fd0a0 Binary files /dev/null and b/assets/CompGerPaises.jpeg differ diff --git a/assets/ConsMedAnReg.jpeg b/assets/ConsMedAnReg.jpeg new file mode 100644 index 0000000..bc9b5ba Binary files /dev/null and b/assets/ConsMedAnReg.jpeg differ diff --git a/assets/ConsMedSubReg.jpeg b/assets/ConsMedSubReg.jpeg new file mode 100644 index 0000000..269778f Binary files /dev/null and b/assets/ConsMedSubReg.jpeg differ diff --git a/assets/ConsResSubReg.jpeg b/assets/ConsResSubReg.jpeg new file mode 100644 index 0000000..00c9c7e Binary files /dev/null and b/assets/ConsResSubReg.jpeg differ diff --git a/assets/Emissoes.jpeg b/assets/Emissoes.jpeg new file mode 100644 index 0000000..726224a Binary files /dev/null and b/assets/Emissoes.jpeg differ diff --git a/assets/GeracaoPeriodoMedio.png b/assets/GeracaoPeriodoMedio.png new file mode 100644 index 0000000..c147a91 Binary files /dev/null and b/assets/GeracaoPeriodoMedio.png differ diff --git a/assets/Geracao_energia.png b/assets/Geracao_energia.png new file mode 100644 index 0000000..957fbc1 Binary files /dev/null and b/assets/Geracao_energia.png differ diff --git a/assets/GraficoBEN.jpeg b/assets/GraficoBEN.jpeg new file mode 100644 index 0000000..1eb6a5d Binary files /dev/null and b/assets/GraficoBEN.jpeg differ diff --git a/assets/PainelTCU.png b/assets/PainelTCU.png new file mode 100644 index 0000000..f1a996a Binary files /dev/null and b/assets/PainelTCU.png differ diff --git a/assets/PipelineTCU.png b/assets/PipelineTCU.png new file mode 100644 index 0000000..a40e428 Binary files /dev/null and b/assets/PipelineTCU.png differ diff --git a/assets/PotenciaAcumulada.png b/assets/PotenciaAcumulada.png new file mode 100644 index 0000000..50de045 Binary files /dev/null and b/assets/PotenciaAcumulada.png differ diff --git a/assets/consumo_residencial.png b/assets/consumo_residencial.png new file mode 100644 index 0000000..a183f41 Binary files /dev/null and b/assets/consumo_residencial.png differ diff --git a/assets/consumo_total_epe.png b/assets/consumo_total_epe.png new file mode 100644 index 0000000..382cc96 Binary files /dev/null and b/assets/consumo_total_epe.png differ diff --git a/assets/custoPorTecnologia.png b/assets/custoPorTecnologia.png new file mode 100644 index 0000000..5a531fe Binary files /dev/null and b/assets/custoPorTecnologia.png differ diff --git a/assets/dash_empregabilidade.png b/assets/dash_empregabilidade.png new file mode 100644 index 0000000..09ebb03 Binary files /dev/null and b/assets/dash_empregabilidade.png differ diff --git a/assets/estudo_subsidios.png b/assets/estudo_subsidios.png new file mode 100644 index 0000000..d0f0cf6 Binary files /dev/null and b/assets/estudo_subsidios.png differ diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000..1cf13b9 Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/investimentoporTecnologia.png b/assets/investimentoporTecnologia.png new file mode 100644 index 0000000..76b2f90 Binary files /dev/null and b/assets/investimentoporTecnologia.png differ diff --git a/assets/javascripts/bundle.cd18aaf1.min.js b/assets/javascripts/bundle.cd18aaf1.min.js new file mode 100644 index 0000000..07521cc --- /dev/null +++ b/assets/javascripts/bundle.cd18aaf1.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Si=Object.create;var ur=Object.defineProperty;var Ti=Object.getOwnPropertyDescriptor;var Oi=Object.getOwnPropertyNames,kt=Object.getOwnPropertySymbols,Mi=Object.getPrototypeOf,dr=Object.prototype.hasOwnProperty,Zr=Object.prototype.propertyIsEnumerable;var Xr=(e,t,r)=>t in e?ur(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,R=(e,t)=>{for(var r in t||(t={}))dr.call(t,r)&&Xr(e,r,t[r]);if(kt)for(var r of kt(t))Zr.call(t,r)&&Xr(e,r,t[r]);return e};var eo=(e,t)=>{var r={};for(var o in e)dr.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&kt)for(var o of kt(e))t.indexOf(o)<0&&Zr.call(e,o)&&(r[o]=e[o]);return r};var hr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Li=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Oi(t))!dr.call(e,n)&&n!==r&&ur(e,n,{get:()=>t[n],enumerable:!(o=Ti(t,n))||o.enumerable});return e};var Ht=(e,t,r)=>(r=e!=null?Si(Mi(e)):{},Li(t||!e||!e.__esModule?ur(r,"default",{value:e,enumerable:!0}):r,e));var to=(e,t,r)=>new Promise((o,n)=>{var i=c=>{try{a(r.next(c))}catch(p){n(p)}},s=c=>{try{a(r.throw(c))}catch(p){n(p)}},a=c=>c.done?o(c.value):Promise.resolve(c.value).then(i,s);a((r=r.apply(e,t)).next())});var oo=hr((br,ro)=>{(function(e,t){typeof br=="object"&&typeof ro!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(br,function(){"use strict";function e(r){var o=!0,n=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(C){return!!(C&&C!==document&&C.nodeName!=="HTML"&&C.nodeName!=="BODY"&&"classList"in C&&"contains"in C.classList)}function c(C){var it=C.type,Ue=C.tagName;return!!(Ue==="INPUT"&&s[it]&&!C.readOnly||Ue==="TEXTAREA"&&!C.readOnly||C.isContentEditable)}function p(C){C.classList.contains("focus-visible")||(C.classList.add("focus-visible"),C.setAttribute("data-focus-visible-added",""))}function l(C){C.hasAttribute("data-focus-visible-added")&&(C.classList.remove("focus-visible"),C.removeAttribute("data-focus-visible-added"))}function f(C){C.metaKey||C.altKey||C.ctrlKey||(a(r.activeElement)&&p(r.activeElement),o=!0)}function u(C){o=!1}function d(C){a(C.target)&&(o||c(C.target))&&p(C.target)}function v(C){a(C.target)&&(C.target.classList.contains("focus-visible")||C.target.hasAttribute("data-focus-visible-added"))&&(n=!0,window.clearTimeout(i),i=window.setTimeout(function(){n=!1},100),l(C.target))}function b(C){document.visibilityState==="hidden"&&(n&&(o=!0),z())}function z(){document.addEventListener("mousemove",G),document.addEventListener("mousedown",G),document.addEventListener("mouseup",G),document.addEventListener("pointermove",G),document.addEventListener("pointerdown",G),document.addEventListener("pointerup",G),document.addEventListener("touchmove",G),document.addEventListener("touchstart",G),document.addEventListener("touchend",G)}function K(){document.removeEventListener("mousemove",G),document.removeEventListener("mousedown",G),document.removeEventListener("mouseup",G),document.removeEventListener("pointermove",G),document.removeEventListener("pointerdown",G),document.removeEventListener("pointerup",G),document.removeEventListener("touchmove",G),document.removeEventListener("touchstart",G),document.removeEventListener("touchend",G)}function G(C){C.target.nodeName&&C.target.nodeName.toLowerCase()==="html"||(o=!1,K())}document.addEventListener("keydown",f,!0),document.addEventListener("mousedown",u,!0),document.addEventListener("pointerdown",u,!0),document.addEventListener("touchstart",u,!0),document.addEventListener("visibilitychange",b,!0),z(),r.addEventListener("focus",d,!0),r.addEventListener("blur",v,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var Vr=hr((Ot,Dr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Ot=="object"&&typeof Dr=="object"?Dr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Ot=="object"?Ot.ClipboardJS=r():t.ClipboardJS=r()})(Ot,function(){return function(){var e={686:function(o,n,i){"use strict";i.d(n,{default:function(){return wi}});var s=i(279),a=i.n(s),c=i(370),p=i.n(c),l=i(817),f=i.n(l);function u(W){try{return document.execCommand(W)}catch(O){return!1}}var d=function(O){var S=f()(O);return u("cut"),S},v=d;function b(W){var O=document.documentElement.getAttribute("dir")==="rtl",S=document.createElement("textarea");S.style.fontSize="12pt",S.style.border="0",S.style.padding="0",S.style.margin="0",S.style.position="absolute",S.style[O?"right":"left"]="-9999px";var $=window.pageYOffset||document.documentElement.scrollTop;return S.style.top="".concat($,"px"),S.setAttribute("readonly",""),S.value=W,S}var z=function(O,S){var $=b(O);S.container.appendChild($);var F=f()($);return u("copy"),$.remove(),F},K=function(O){var S=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},$="";return typeof O=="string"?$=z(O,S):O instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(O==null?void 0:O.type)?$=z(O.value,S):($=f()(O),u("copy")),$},G=K;function C(W){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?C=function(S){return typeof S}:C=function(S){return S&&typeof Symbol=="function"&&S.constructor===Symbol&&S!==Symbol.prototype?"symbol":typeof S},C(W)}var it=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=O.action,$=S===void 0?"copy":S,F=O.container,Q=O.target,_e=O.text;if($!=="copy"&&$!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(Q!==void 0)if(Q&&C(Q)==="object"&&Q.nodeType===1){if($==="copy"&&Q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if($==="cut"&&(Q.hasAttribute("readonly")||Q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(_e)return G(_e,{container:F});if(Q)return $==="cut"?v(Q):G(Q,{container:F})},Ue=it;function Pe(W){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Pe=function(S){return typeof S}:Pe=function(S){return S&&typeof Symbol=="function"&&S.constructor===Symbol&&S!==Symbol.prototype?"symbol":typeof S},Pe(W)}function di(W,O){if(!(W instanceof O))throw new TypeError("Cannot call a class as a function")}function Jr(W,O){for(var S=0;S0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof F.action=="function"?F.action:this.defaultAction,this.target=typeof F.target=="function"?F.target:this.defaultTarget,this.text=typeof F.text=="function"?F.text:this.defaultText,this.container=Pe(F.container)==="object"?F.container:document.body}},{key:"listenClick",value:function(F){var Q=this;this.listener=p()(F,"click",function(_e){return Q.onClick(_e)})}},{key:"onClick",value:function(F){var Q=F.delegateTarget||F.currentTarget,_e=this.action(Q)||"copy",Ct=Ue({action:_e,container:this.container,target:this.target(Q),text:this.text(Q)});this.emit(Ct?"success":"error",{action:_e,text:Ct,trigger:Q,clearSelection:function(){Q&&Q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(F){return fr("action",F)}},{key:"defaultTarget",value:function(F){var Q=fr("target",F);if(Q)return document.querySelector(Q)}},{key:"defaultText",value:function(F){return fr("text",F)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(F){var Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return G(F,Q)}},{key:"cut",value:function(F){return v(F)}},{key:"isSupported",value:function(){var F=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],Q=typeof F=="string"?[F]:F,_e=!!document.queryCommandSupported;return Q.forEach(function(Ct){_e=_e&&!!document.queryCommandSupported(Ct)}),_e}}]),S}(a()),wi=Ei},828:function(o){var n=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,c){for(;a&&a.nodeType!==n;){if(typeof a.matches=="function"&&a.matches(c))return a;a=a.parentNode}}o.exports=s},438:function(o,n,i){var s=i(828);function a(l,f,u,d,v){var b=p.apply(this,arguments);return l.addEventListener(u,b,v),{destroy:function(){l.removeEventListener(u,b,v)}}}function c(l,f,u,d,v){return typeof l.addEventListener=="function"?a.apply(null,arguments):typeof u=="function"?a.bind(null,document).apply(null,arguments):(typeof l=="string"&&(l=document.querySelectorAll(l)),Array.prototype.map.call(l,function(b){return a(b,f,u,d,v)}))}function p(l,f,u,d){return function(v){v.delegateTarget=s(v.target,f),v.delegateTarget&&d.call(l,v)}}o.exports=c},879:function(o,n){n.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},n.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||n.node(i[0]))},n.string=function(i){return typeof i=="string"||i instanceof String},n.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(o,n,i){var s=i(879),a=i(438);function c(u,d,v){if(!u&&!d&&!v)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(v))throw new TypeError("Third argument must be a Function");if(s.node(u))return p(u,d,v);if(s.nodeList(u))return l(u,d,v);if(s.string(u))return f(u,d,v);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function p(u,d,v){return u.addEventListener(d,v),{destroy:function(){u.removeEventListener(d,v)}}}function l(u,d,v){return Array.prototype.forEach.call(u,function(b){b.addEventListener(d,v)}),{destroy:function(){Array.prototype.forEach.call(u,function(b){b.removeEventListener(d,v)})}}}function f(u,d,v){return a(document.body,u,d,v)}o.exports=c},817:function(o){function n(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),p=document.createRange();p.selectNodeContents(i),c.removeAllRanges(),c.addRange(p),s=c.toString()}return s}o.exports=n},279:function(o){function n(){}n.prototype={on:function(i,s,a){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var c=this;function p(){c.off(i,p),s.apply(a,arguments)}return p._=s,this.on(i,p,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),c=0,p=a.length;for(c;c{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var $a=/["'&<>]/;Un.exports=Ra;function Ra(e){var t=""+e,r=$a.exec(t);if(!r)return t;var o,n="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(p[0]===6||p[0]===2)){r=0;continue}if(p[0]===3&&(!i||p[1]>i[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function N(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],s;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(a){s={error:a}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o1||a(u,d)})})}function a(u,d){try{c(o[u](d))}catch(v){f(i[0][3],v)}}function c(u){u.value instanceof Ze?Promise.resolve(u.value.v).then(p,l):f(i[0][2],u)}function p(u){a("next",u)}function l(u){a("throw",u)}function f(u,d){u(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function ao(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof we=="function"?we(e):e[Symbol.iterator](),r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r);function o(i){r[i]=e[i]&&function(s){return new Promise(function(a,c){s=e[i](s),n(a,c,s.done,s.value)})}}function n(i,s,a,c){Promise.resolve(c).then(function(p){i({value:p,done:a})},s)}}function k(e){return typeof e=="function"}function at(e){var t=function(o){Error.call(o),o.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var Rt=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(o,n){return n+1+") "+o.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function De(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,o,n,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=we(s),c=a.next();!c.done;c=a.next()){var p=c.value;p.remove(this)}}catch(b){t={error:b}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var l=this.initialTeardown;if(k(l))try{l()}catch(b){i=b instanceof Rt?b.errors:[b]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var u=we(f),d=u.next();!d.done;d=u.next()){var v=d.value;try{so(v)}catch(b){i=i!=null?i:[],b instanceof Rt?i=D(D([],N(i)),N(b.errors)):i.push(b)}}}catch(b){o={error:b}}finally{try{d&&!d.done&&(n=u.return)&&n.call(u)}finally{if(o)throw o.error}}}if(i)throw new Rt(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)so(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&De(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&De(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var gr=Ie.EMPTY;function Pt(e){return e instanceof Ie||e&&"closed"in e&&k(e.remove)&&k(e.add)&&k(e.unsubscribe)}function so(e){k(e)?e():e.unsubscribe()}var Ae={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],o=2;o0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var o=this,n=this,i=n.hasError,s=n.isStopped,a=n.observers;return i||s?gr:(this.currentObservers=null,a.push(r),new Ie(function(){o.currentObservers=null,De(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var o=this,n=o.hasError,i=o.thrownError,s=o.isStopped;n?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new P;return r.source=this,r},t.create=function(r,o){return new bo(r,o)},t}(P);var bo=function(e){ie(t,e);function t(r,o){var n=e.call(this)||this;return n.destination=r,n.source=o,n}return t.prototype.next=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,r)},t.prototype.error=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,r)},t.prototype.complete=function(){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||o===void 0||o.call(r)},t.prototype._subscribe=function(r){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(r))!==null&&n!==void 0?n:gr},t}(x);var yt={now:function(){return(yt.delegate||Date).now()},delegate:void 0};var Et=function(e){ie(t,e);function t(r,o,n){r===void 0&&(r=1/0),o===void 0&&(o=1/0),n===void 0&&(n=yt);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,o),i}return t.prototype.next=function(r){var o=this,n=o.isStopped,i=o._buffer,s=o._infiniteTimeWindow,a=o._timestampProvider,c=o._windowTime;n||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(r),n=this,i=n._infiniteTimeWindow,s=n._buffer,a=s.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,o,n):(r.actions.push(this),r._scheduled||(r._scheduled=lt.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,o,n);var s=r.actions;o!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==o&&(lt.cancelAnimationFrame(o),r._scheduled=void 0)},t}(jt);var xo=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var o=this._scheduled;this._scheduled=void 0;var n=this.actions,i;r=r||n.shift();do if(i=r.execute(r.state,r.delay))break;while((r=n[0])&&r.id===o&&n.shift());if(this._active=!1,i){for(;(r=n[0])&&r.id===o&&n.shift();)r.unsubscribe();throw i}},t}(Wt);var Oe=new xo(go);var L=new P(function(e){return e.complete()});function Nt(e){return e&&k(e.schedule)}function Or(e){return e[e.length-1]}function Qe(e){return k(Or(e))?e.pop():void 0}function Me(e){return Nt(Or(e))?e.pop():void 0}function Ut(e,t){return typeof Or(e)=="number"?e.pop():t}var mt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Dt(e){return k(e==null?void 0:e.then)}function Vt(e){return k(e[pt])}function zt(e){return Symbol.asyncIterator&&k(e==null?void 0:e[Symbol.asyncIterator])}function qt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ii(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Kt=Ii();function Qt(e){return k(e==null?void 0:e[Kt])}function Yt(e){return io(this,arguments,function(){var r,o,n,i;return $t(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,Ze(r.read())];case 3:return o=s.sent(),n=o.value,i=o.done,i?[4,Ze(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,Ze(n)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Bt(e){return k(e==null?void 0:e.getReader)}function I(e){if(e instanceof P)return e;if(e!=null){if(Vt(e))return Fi(e);if(mt(e))return ji(e);if(Dt(e))return Wi(e);if(zt(e))return yo(e);if(Qt(e))return Ni(e);if(Bt(e))return Ui(e)}throw qt(e)}function Fi(e){return new P(function(t){var r=e[pt]();if(k(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function ji(e){return new P(function(t){for(var r=0;r=2;return function(o){return o.pipe(e?M(function(n,i){return e(n,i,o)}):ue,xe(1),r?He(t):Fo(function(){return new Jt}))}}function jo(){for(var e=[],t=0;t=2,!0))}function le(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new x}:t,o=e.resetOnError,n=o===void 0?!0:o,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(p){var l,f,u,d=0,v=!1,b=!1,z=function(){f==null||f.unsubscribe(),f=void 0},K=function(){z(),l=u=void 0,v=b=!1},G=function(){var C=l;K(),C==null||C.unsubscribe()};return g(function(C,it){d++,!b&&!v&&z();var Ue=u=u!=null?u:r();it.add(function(){d--,d===0&&!b&&!v&&(f=Hr(G,c))}),Ue.subscribe(it),!l&&d>0&&(l=new tt({next:function(Pe){return Ue.next(Pe)},error:function(Pe){b=!0,z(),f=Hr(K,n,Pe),Ue.error(Pe)},complete:function(){v=!0,z(),f=Hr(K,s),Ue.complete()}}),I(C).subscribe(l))})(p)}}function Hr(e,t){for(var r=[],o=2;oe.next(document)),e}function q(e,t=document){return Array.from(t.querySelectorAll(e))}function U(e,t=document){let r=se(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function se(e,t=document){return t.querySelector(e)||void 0}function Re(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}var ia=_(h(document.body,"focusin"),h(document.body,"focusout")).pipe(ke(1),V(void 0),m(()=>Re()||document.body),J(1));function Zt(e){return ia.pipe(m(t=>e.contains(t)),X())}function Je(e){return{x:e.offsetLeft,y:e.offsetTop}}function Do(e){return _(h(window,"load"),h(window,"resize")).pipe(Ce(0,Oe),m(()=>Je(e)),V(Je(e)))}function er(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return _(h(e,"scroll"),h(window,"resize")).pipe(Ce(0,Oe),m(()=>er(e)),V(er(e)))}function Vo(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Vo(e,r)}function T(e,t,...r){let o=document.createElement(e);if(t)for(let n of Object.keys(t))typeof t[n]!="undefined"&&(typeof t[n]!="boolean"?o.setAttribute(n,t[n]):o.setAttribute(n,""));for(let n of r)Vo(o,n);return o}function tr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function ht(e){let t=T("script",{src:e});return H(()=>(document.head.appendChild(t),_(h(t,"load"),h(t,"error").pipe(E(()=>Mr(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),A(()=>document.head.removeChild(t)),xe(1))))}var zo=new x,aa=H(()=>typeof ResizeObserver=="undefined"?ht("https://unpkg.com/resize-observer-polyfill"):j(void 0)).pipe(m(()=>new ResizeObserver(e=>{for(let t of e)zo.next(t)})),E(e=>_(Ve,j(e)).pipe(A(()=>e.disconnect()))),J(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ye(e){return aa.pipe(w(t=>t.observe(e)),E(t=>zo.pipe(M(({target:r})=>r===e),A(()=>t.unobserve(e)),m(()=>he(e)))),V(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function qo(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var Ko=new x,sa=H(()=>j(new IntersectionObserver(e=>{for(let t of e)Ko.next(t)},{threshold:0}))).pipe(E(e=>_(Ve,j(e)).pipe(A(()=>e.disconnect()))),J(1));function rr(e){return sa.pipe(w(t=>t.observe(e)),E(t=>Ko.pipe(M(({target:r})=>r===e),A(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function Qo(e,t=16){return dt(e).pipe(m(({y:r})=>{let o=he(e),n=bt(e);return r>=n.height-o.height-t}),X())}var or={drawer:U("[data-md-toggle=drawer]"),search:U("[data-md-toggle=search]")};function Yo(e){return or[e].checked}function Ke(e,t){or[e].checked!==t&&or[e].click()}function We(e){let t=or[e];return h(t,"change").pipe(m(()=>t.checked),V(t.checked))}function ca(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function pa(){return _(h(window,"compositionstart").pipe(m(()=>!0)),h(window,"compositionend").pipe(m(()=>!1))).pipe(V(!1))}function Bo(){let e=h(window,"keydown").pipe(M(t=>!(t.metaKey||t.ctrlKey)),m(t=>({mode:Yo("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),M(({mode:t,type:r})=>{if(t==="global"){let o=Re();if(typeof o!="undefined")return!ca(o,r)}return!0}),le());return pa().pipe(E(t=>t?L:e))}function pe(){return new URL(location.href)}function ot(e,t=!1){if(te("navigation.instant")&&!t){let r=T("a",{href:e.href});document.body.appendChild(r),r.click(),r.remove()}else location.href=e.href}function Go(){return new x}function Jo(){return location.hash.slice(1)}function nr(e){let t=T("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function la(e){return _(h(window,"hashchange"),e).pipe(m(Jo),V(Jo()),M(t=>t.length>0),J(1))}function Xo(e){return la(e).pipe(m(t=>se(`[id="${t}"]`)),M(t=>typeof t!="undefined"))}function Fr(e){let t=matchMedia(e);return Xt(r=>t.addListener(()=>r(t.matches))).pipe(V(t.matches))}function Zo(){let e=matchMedia("print");return _(h(window,"beforeprint").pipe(m(()=>!0)),h(window,"afterprint").pipe(m(()=>!1))).pipe(V(e.matches))}function jr(e,t){return e.pipe(E(r=>r?t():L))}function ir(e,t){return new P(r=>{let o=new XMLHttpRequest;o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(r.next(o.response),r.complete()):r.error(new Error(o.statusText))}),o.addEventListener("error",()=>{r.error(new Error("Network Error"))}),o.addEventListener("abort",()=>{r.error(new Error("Request aborted"))}),typeof(t==null?void 0:t.progress$)!="undefined"&&(o.addEventListener("progress",n=>{if(n.lengthComputable)t.progress$.next(n.loaded/n.total*100);else{let i=Number(o.getResponseHeader("Content-Length"))||0;t.progress$.next(n.loaded/i*100)}}),t.progress$.next(5)),o.send()})}function Ne(e,t){return ir(e,t).pipe(E(r=>r.text()),m(r=>JSON.parse(r)),J(1))}function en(e,t){let r=new DOMParser;return ir(e,t).pipe(E(o=>o.text()),m(o=>r.parseFromString(o,"text/xml")),J(1))}function tn(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function rn(){return _(h(window,"scroll",{passive:!0}),h(window,"resize",{passive:!0})).pipe(m(tn),V(tn()))}function on(){return{width:innerWidth,height:innerHeight}}function nn(){return h(window,"resize",{passive:!0}).pipe(m(on),V(on()))}function an(){return B([rn(),nn()]).pipe(m(([e,t])=>({offset:e,size:t})),J(1))}function ar(e,{viewport$:t,header$:r}){let o=t.pipe(ee("size")),n=B([o,r]).pipe(m(()=>Je(e)));return B([r,t,n]).pipe(m(([{height:i},{offset:s,size:a},{x:c,y:p}])=>({offset:{x:s.x-c,y:s.y-p+i},size:a})))}function ma(e){return h(e,"message",t=>t.data)}function fa(e){let t=new x;return t.subscribe(r=>e.postMessage(r)),t}function sn(e,t=new Worker(e)){let r=ma(t),o=fa(t),n=new x;n.subscribe(o);let i=o.pipe(Z(),re(!0));return n.pipe(Z(),qe(r.pipe(Y(i))),le())}var ua=U("#__config"),vt=JSON.parse(ua.textContent);vt.base=`${new URL(vt.base,pe())}`;function me(){return vt}function te(e){return vt.features.includes(e)}function be(e,t){return typeof t!="undefined"?vt.translations[e].replace("#",t.toString()):vt.translations[e]}function Ee(e,t=document){return U(`[data-md-component=${e}]`,t)}function oe(e,t=document){return q(`[data-md-component=${e}]`,t)}function da(e){let t=U(".md-typeset > :first-child",e);return h(t,"click",{once:!0}).pipe(m(()=>U(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function cn(e){if(!te("announce.dismiss")||!e.childElementCount)return L;if(!e.hidden){let t=U(".md-typeset",e);__md_hash(t.innerHTML)===__md_get("__announce")&&(e.hidden=!0)}return H(()=>{let t=new x;return t.subscribe(({hash:r})=>{e.hidden=!0,__md_set("__announce",r)}),da(e).pipe(w(r=>t.next(r)),A(()=>t.complete()),m(r=>R({ref:e},r)))})}function ha(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function pn(e,t){let r=new x;return r.subscribe(({hidden:o})=>{e.hidden=o}),ha(e,t).pipe(w(o=>r.next(o)),A(()=>r.complete()),m(o=>R({ref:e},o)))}function ba(e,t){let r=H(()=>B([Do(e),dt(t)])).pipe(m(([{x:o,y:n},i])=>{let{width:s,height:a}=he(e);return{x:o-i.x+s/2,y:n-i.y+a/2}}));return Zt(e).pipe(E(o=>r.pipe(m(n=>({active:o,offset:n})),xe(+!o||1/0))))}function ln(e,t,{target$:r}){let[o,n]=Array.from(e.children);return H(()=>{let i=new x,s=i.pipe(Z(),re(!0));return i.subscribe({next({offset:a}){e.style.setProperty("--md-tooltip-x",`${a.x}px`),e.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),rr(e).pipe(Y(s)).subscribe(a=>{e.toggleAttribute("data-md-visible",a)}),_(i.pipe(M(({active:a})=>a)),i.pipe(ke(250),M(({active:a})=>!a))).subscribe({next({active:a}){a?e.prepend(o):o.remove()},complete(){e.prepend(o)}}),i.pipe(Ce(16,Oe)).subscribe(({active:a})=>{o.classList.toggle("md-tooltip--active",a)}),i.pipe(Pr(125,Oe),M(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?e.style.setProperty("--md-tooltip-0",`${-a}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),h(n,"click").pipe(Y(s),M(a=>!(a.metaKey||a.ctrlKey))).subscribe(a=>{a.stopPropagation(),a.preventDefault()}),h(n,"mousedown").pipe(Y(s),ne(i)).subscribe(([a,{active:c}])=>{var p;if(a.button!==0||a.metaKey||a.ctrlKey)a.preventDefault();else if(c){a.preventDefault();let l=e.parentElement.closest(".md-annotation");l instanceof HTMLElement?l.focus():(p=Re())==null||p.blur()}}),r.pipe(Y(s),M(a=>a===o),ze(125)).subscribe(()=>e.focus()),ba(e,t).pipe(w(a=>i.next(a)),A(()=>i.complete()),m(a=>R({ref:e},a)))})}function Wr(e){return T("div",{class:"md-tooltip",id:e},T("div",{class:"md-tooltip__inner md-typeset"}))}function mn(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return T("aside",{class:"md-annotation",tabIndex:0},Wr(t),T("a",{href:r,class:"md-annotation__index",tabIndex:-1},T("span",{"data-md-annotation-id":e})))}else return T("aside",{class:"md-annotation",tabIndex:0},Wr(t),T("span",{class:"md-annotation__index",tabIndex:-1},T("span",{"data-md-annotation-id":e})))}function fn(e){return T("button",{class:"md-clipboard md-icon",title:be("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}function Nr(e,t){let r=t&2,o=t&1,n=Object.keys(e.terms).filter(c=>!e.terms[c]).reduce((c,p)=>[...c,T("del",null,p)," "],[]).slice(0,-1),i=me(),s=new URL(e.location,i.base);te("search.highlight")&&s.searchParams.set("h",Object.entries(e.terms).filter(([,c])=>c).reduce((c,[p])=>`${c} ${p}`.trim(),""));let{tags:a}=me();return T("a",{href:`${s}`,class:"md-search-result__link",tabIndex:-1},T("article",{class:"md-search-result__article md-typeset","data-md-score":e.score.toFixed(2)},r>0&&T("div",{class:"md-search-result__icon md-icon"}),r>0&&T("h1",null,e.title),r<=0&&T("h2",null,e.title),o>0&&e.text.length>0&&e.text,e.tags&&e.tags.map(c=>{let p=a?c in a?`md-tag-icon md-tag--${a[c]}`:"md-tag-icon":"";return T("span",{class:`md-tag ${p}`},c)}),o>0&&n.length>0&&T("p",{class:"md-search-result__terms"},be("search.result.term.missing"),": ",...n)))}function un(e){let t=e[0].score,r=[...e],o=me(),n=r.findIndex(l=>!`${new URL(l.location,o.base)}`.includes("#")),[i]=r.splice(n,1),s=r.findIndex(l=>l.scoreNr(l,1)),...c.length?[T("details",{class:"md-search-result__more"},T("summary",{tabIndex:-1},T("div",null,c.length>0&&c.length===1?be("search.result.more.one"):be("search.result.more.other",c.length))),...c.map(l=>Nr(l,1)))]:[]];return T("li",{class:"md-search-result__item"},p)}function dn(e){return T("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>T("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?tr(r):r)))}function Ur(e){let t=`tabbed-control tabbed-control--${e}`;return T("div",{class:t,hidden:!0},T("button",{class:"tabbed-button",tabIndex:-1,"aria-hidden":"true"}))}function hn(e){return T("div",{class:"md-typeset__scrollwrap"},T("div",{class:"md-typeset__table"},e))}function va(e){let t=me(),r=new URL(`../${e.version}/`,t.base);return T("li",{class:"md-version__item"},T("a",{href:`${r}`,class:"md-version__link"},e.title))}function bn(e,t){return T("div",{class:"md-version"},T("button",{class:"md-version__current","aria-label":be("select.version")},t.title),T("ul",{class:"md-version__list"},e.map(va)))}function ga(e){return e.tagName==="CODE"?q(".c, .c1, .cm",e):[e]}function xa(e){let t=[];for(let r of ga(e)){let o=[],n=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=n.nextNode();i;i=n.nextNode())o.push(i);for(let i of o){let s;for(;s=/(\(\d+\))(!)?/.exec(i.textContent);){let[,a,c]=s;if(typeof c=="undefined"){let p=i.splitText(s.index);i=p.splitText(a.length),t.push(p)}else{i.textContent=a,t.push(i);break}}}}return t}function vn(e,t){t.append(...Array.from(e.childNodes))}function sr(e,t,{target$:r,print$:o}){let n=t.closest("[id]"),i=n==null?void 0:n.id,s=new Map;for(let a of xa(t)){let[,c]=a.textContent.match(/\((\d+)\)/);se(`:scope > li:nth-child(${c})`,e)&&(s.set(c,mn(c,i)),a.replaceWith(s.get(c)))}return s.size===0?L:H(()=>{let a=new x,c=a.pipe(Z(),re(!0)),p=[];for(let[l,f]of s)p.push([U(".md-typeset",f),U(`:scope > li:nth-child(${l})`,e)]);return o.pipe(Y(c)).subscribe(l=>{e.hidden=!l,e.classList.toggle("md-annotation-list",l);for(let[f,u]of p)l?vn(f,u):vn(u,f)}),_(...[...s].map(([,l])=>ln(l,t,{target$:r}))).pipe(A(()=>a.complete()),le())})}function gn(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return gn(t)}}function xn(e,t){return H(()=>{let r=gn(e);return typeof r!="undefined"?sr(r,e,t):L})}var En=Ht(Vr());var ya=0;function wn(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return wn(t)}}function yn(e){return ye(e).pipe(m(({width:t})=>({scrollable:bt(e).width>t})),ee("scrollable"))}function Sn(e,t){let{matches:r}=matchMedia("(hover)"),o=H(()=>{let n=new x;if(n.subscribe(({scrollable:s})=>{s&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")}),En.default.isSupported()&&(e.closest(".copy")||te("content.code.copy")&&!e.closest(".no-copy"))){let s=e.closest("pre");s.id=`__code_${ya++}`,s.insertBefore(fn(s.id),e)}let i=e.closest(".highlight");if(i instanceof HTMLElement){let s=wn(i);if(typeof s!="undefined"&&(i.classList.contains("annotate")||te("content.code.annotate"))){let a=sr(s,e,t);return yn(e).pipe(w(c=>n.next(c)),A(()=>n.complete()),m(c=>R({ref:e},c)),qe(ye(i).pipe(m(({width:c,height:p})=>c&&p),X(),E(c=>c?a:L))))}}return yn(e).pipe(w(s=>n.next(s)),A(()=>n.complete()),m(s=>R({ref:e},s)))});return te("content.lazy")?rr(e).pipe(M(n=>n),xe(1),E(()=>o)):o}function Ea(e,{target$:t,print$:r}){let o=!0;return _(t.pipe(m(n=>n.closest("details:not([open])")),M(n=>e===n),m(()=>({action:"open",reveal:!0}))),r.pipe(M(n=>n||!o),w(()=>o=e.open),m(n=>({action:n?"open":"close"}))))}function Tn(e,t){return H(()=>{let r=new x;return r.subscribe(({action:o,reveal:n})=>{e.toggleAttribute("open",o==="open"),n&&e.scrollIntoView()}),Ea(e,t).pipe(w(o=>r.next(o)),A(()=>r.complete()),m(o=>R({ref:e},o)))})}var On=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:#0000}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel rect,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel rect{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color);stroke-width:.05rem}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}g #flowchart-circleEnd,g #flowchart-circleStart,g #flowchart-crossEnd,g #flowchart-crossStart,g #flowchart-pointEnd,g #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.attributeBoxEven,.attributeBoxOdd{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{fill:var(--md-mermaid-sequence-actor-bg-color);stroke:var(--md-mermaid-sequence-actor-border-color)}text.actor>tspan{fill:var(--md-mermaid-sequence-actor-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-mermaid-sequence-actor-line-color)}.actor-man circle,.actor-man line{fill:var(--md-mermaid-sequence-actorman-bg-color);stroke:var(--md-mermaid-sequence-actorman-line-color)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-sequence-message-line-color)}.note{fill:var(--md-mermaid-sequence-note-bg-color);stroke:var(--md-mermaid-sequence-note-border-color)}.loopText,.loopText>tspan,.messageText,.noteText>tspan{stroke:none;font-family:var(--md-mermaid-font-family)!important}.messageText{fill:var(--md-mermaid-sequence-message-fg-color)}.loopText,.loopText>tspan{fill:var(--md-mermaid-sequence-loop-fg-color)}.noteText>tspan{fill:var(--md-mermaid-sequence-note-fg-color)}#arrowhead path{fill:var(--md-mermaid-sequence-message-line-color);stroke:none}.loopLine{fill:var(--md-mermaid-sequence-loop-bg-color);stroke:var(--md-mermaid-sequence-loop-border-color)}.labelBox{fill:var(--md-mermaid-sequence-label-bg-color);stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-sequence-label-fg-color);font-family:var(--md-mermaid-font-family)}.sequenceNumber{fill:var(--md-mermaid-sequence-number-fg-color)}rect.rect{fill:var(--md-mermaid-sequence-box-bg-color);stroke:none}rect.rect+text.text{fill:var(--md-mermaid-sequence-box-fg-color)}defs #sequencenumber{fill:var(--md-mermaid-sequence-number-bg-color)!important}";var zr,Sa=0;function Ta(){return typeof mermaid=="undefined"||mermaid instanceof Element?ht("https://unpkg.com/mermaid@10.6.1/dist/mermaid.min.js"):j(void 0)}function Mn(e){return e.classList.remove("mermaid"),zr||(zr=Ta().pipe(w(()=>mermaid.initialize({startOnLoad:!1,themeCSS:On,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),J(1))),zr.subscribe(()=>to(this,null,function*(){e.classList.add("mermaid");let t=`__mermaid_${Sa++}`,r=T("div",{class:"mermaid"}),o=e.textContent,{svg:n,fn:i}=yield mermaid.render(t,o),s=r.attachShadow({mode:"closed"});s.innerHTML=n,e.replaceWith(r),i==null||i(s)})),zr.pipe(m(()=>({ref:e})))}var Ln=T("table");function _n(e){return e.replaceWith(Ln),Ln.replaceWith(hn(e)),j({ref:e})}function Oa(e){let t=q(":scope > input",e),r=t.find(o=>o.checked)||t[0];return _(...t.map(o=>h(o,"change").pipe(m(()=>U(`label[for="${o.id}"]`))))).pipe(V(U(`label[for="${r.id}"]`)),m(o=>({active:o})))}function An(e,{viewport$:t}){let r=Ur("prev");e.append(r);let o=Ur("next");e.append(o);let n=U(".tabbed-labels",e);return H(()=>{let i=new x,s=i.pipe(Z(),re(!0));return B([i,ye(e)]).pipe(Ce(1,Oe),Y(s)).subscribe({next([{active:a},c]){let p=Je(a),{width:l}=he(a);e.style.setProperty("--md-indicator-x",`${p.x}px`),e.style.setProperty("--md-indicator-width",`${l}px`);let f=er(n);(p.xf.x+c.width)&&n.scrollTo({left:Math.max(0,p.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),B([dt(n),ye(n)]).pipe(Y(s)).subscribe(([a,c])=>{let p=bt(n);r.hidden=a.x<16,o.hidden=a.x>p.width-c.width-16}),_(h(r,"click").pipe(m(()=>-1)),h(o,"click").pipe(m(()=>1))).pipe(Y(s)).subscribe(a=>{let{width:c}=he(n);n.scrollBy({left:c*a,behavior:"smooth"})}),te("content.tabs.link")&&i.pipe(je(1),ne(t)).subscribe(([{active:a},{offset:c}])=>{let p=a.innerText.trim();if(a.hasAttribute("data-md-switching"))a.removeAttribute("data-md-switching");else{let l=e.offsetTop-c.y;for(let u of q("[data-tabs]"))for(let d of q(":scope > input",u)){let v=U(`label[for="${d.id}"]`);if(v!==a&&v.innerText.trim()===p){v.setAttribute("data-md-switching",""),d.click();break}}window.scrollTo({top:e.offsetTop-l});let f=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([p,...f])])}}),i.pipe(Y(s)).subscribe(()=>{for(let a of q("audio, video",e))a.pause()}),Oa(e).pipe(w(a=>i.next(a)),A(()=>i.complete()),m(a=>R({ref:e},a)))}).pipe(rt(ae))}function Cn(e,{viewport$:t,target$:r,print$:o}){return _(...q(".annotate:not(.highlight)",e).map(n=>xn(n,{target$:r,print$:o})),...q("pre:not(.mermaid) > code",e).map(n=>Sn(n,{target$:r,print$:o})),...q("pre.mermaid",e).map(n=>Mn(n)),...q("table:not([class])",e).map(n=>_n(n)),...q("details",e).map(n=>Tn(n,{target$:r,print$:o})),...q("[data-tabs]",e).map(n=>An(n,{viewport$:t})))}function Ma(e,{alert$:t}){return t.pipe(E(r=>_(j(!0),j(!1).pipe(ze(2e3))).pipe(m(o=>({message:r,active:o})))))}function kn(e,t){let r=U(".md-typeset",e);return H(()=>{let o=new x;return o.subscribe(({message:n,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=n}),Ma(e,t).pipe(w(n=>o.next(n)),A(()=>o.complete()),m(n=>R({ref:e},n)))})}function La({viewport$:e}){if(!te("header.autohide"))return j(!1);let t=e.pipe(m(({offset:{y:n}})=>n),Le(2,1),m(([n,i])=>[nMath.abs(i-n.y)>100),m(([,[n]])=>n),X()),o=We("search");return B([e,o]).pipe(m(([{offset:n},i])=>n.y>400&&!i),X(),E(n=>n?r:j(!1)),V(!1))}function Hn(e,t){return H(()=>B([ye(e),La(t)])).pipe(m(([{height:r},o])=>({height:r,hidden:o})),X((r,o)=>r.height===o.height&&r.hidden===o.hidden),J(1))}function $n(e,{header$:t,main$:r}){return H(()=>{let o=new x,n=o.pipe(Z(),re(!0));return o.pipe(ee("active"),Ge(t)).subscribe(([{active:i},{hidden:s}])=>{e.classList.toggle("md-header--shadow",i&&!s),e.hidden=s}),r.subscribe(o),t.pipe(Y(n),m(i=>R({ref:e},i)))})}function _a(e,{viewport$:t,header$:r}){return ar(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:o}})=>{let{height:n}=he(e);return{active:o>=n}}),ee("active"))}function Rn(e,t){return H(()=>{let r=new x;r.subscribe({next({active:n}){e.classList.toggle("md-header__title--active",n)},complete(){e.classList.remove("md-header__title--active")}});let o=se(".md-content h1");return typeof o=="undefined"?L:_a(o,t).pipe(w(n=>r.next(n)),A(()=>r.complete()),m(n=>R({ref:e},n)))})}function Pn(e,{viewport$:t,header$:r}){let o=r.pipe(m(({height:i})=>i),X()),n=o.pipe(E(()=>ye(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),ee("bottom"))));return B([o,n,t]).pipe(m(([i,{top:s,bottom:a},{offset:{y:c},size:{height:p}}])=>(p=Math.max(0,p-Math.max(0,s-c,i)-Math.max(0,p+c-a)),{offset:s-i,height:p,active:s-i<=c})),X((i,s)=>i.offset===s.offset&&i.height===s.height&&i.active===s.active))}function Aa(e){let t=__md_get("__palette")||{index:e.findIndex(r=>matchMedia(r.getAttribute("data-md-color-media")).matches)};return j(...e).pipe(ce(r=>h(r,"change").pipe(m(()=>r))),V(e[Math.max(0,t.index)]),m(r=>({index:e.indexOf(r),color:{scheme:r.getAttribute("data-md-color-scheme"),primary:r.getAttribute("data-md-color-primary"),accent:r.getAttribute("data-md-color-accent")}})),J(1))}function In(e){let t=T("meta",{name:"theme-color"});document.head.appendChild(t);let r=T("meta",{name:"color-scheme"});return document.head.appendChild(r),H(()=>{let o=new x;o.subscribe(i=>{document.body.setAttribute("data-md-color-switching","");for(let[s,a]of Object.entries(i.color))document.body.setAttribute(`data-md-color-${s}`,a);for(let s=0;s{let i=Ee("header"),s=window.getComputedStyle(i);return r.content=s.colorScheme,s.backgroundColor.match(/\d+/g).map(a=>(+a).toString(16).padStart(2,"0")).join("")})).subscribe(i=>t.content=`#${i}`),o.pipe(Se(ae)).subscribe(()=>{document.body.removeAttribute("data-md-color-switching")});let n=q("input",e);return Aa(n).pipe(w(i=>o.next(i)),A(()=>o.complete()),m(i=>R({ref:e},i)))})}function Fn(e,{progress$:t}){return H(()=>{let r=new x;return r.subscribe(({value:o})=>{e.style.setProperty("--md-progress-value",`${o}`)}),t.pipe(w(o=>r.next({value:o})),A(()=>r.complete()),m(o=>({ref:e,value:o})))})}var qr=Ht(Vr());function Ca(e){e.setAttribute("data-md-copying","");let t=e.closest("[data-copy]"),r=t?t.getAttribute("data-copy"):e.innerText;return e.removeAttribute("data-md-copying"),r.trimEnd()}function jn({alert$:e}){qr.default.isSupported()&&new P(t=>{new qr.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||Ca(U(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(w(t=>{t.trigger.focus()}),m(()=>be("clipboard.copied"))).subscribe(e)}function ka(e){if(e.length<2)return[""];let[t,r]=[...e].sort((n,i)=>n.length-i.length).map(n=>n.replace(/[^/]+$/,"")),o=0;if(t===r)o=t.length;else for(;t.charCodeAt(o)===r.charCodeAt(o);)o++;return e.map(n=>n.replace(t.slice(0,o),""))}function cr(e){let t=__md_get("__sitemap",sessionStorage,e);if(t)return j(t);{let r=me();return en(new URL("sitemap.xml",e||r.base)).pipe(m(o=>ka(q("loc",o).map(n=>n.textContent))),de(()=>L),He([]),w(o=>__md_set("__sitemap",o,sessionStorage,e)))}}function Wn(e){let t=se("[rel=canonical]",e);typeof t!="undefined"&&(t.href=t.href.replace("//localhost:","//127.0.0.1:"));let r=new Map;for(let o of q(":scope > *",e)){let n=o.outerHTML;for(let i of["href","src"]){let s=o.getAttribute(i);if(s===null)continue;let a=new URL(s,t==null?void 0:t.href),c=o.cloneNode();c.setAttribute(i,`${a}`),n=c.outerHTML;break}r.set(n,o)}return r}function Nn({location$:e,viewport$:t,progress$:r}){let o=me();if(location.protocol==="file:")return L;let n=cr().pipe(m(l=>l.map(f=>`${new URL(f,o.base)}`))),i=h(document.body,"click").pipe(ne(n),E(([l,f])=>{if(!(l.target instanceof Element))return L;let u=l.target.closest("a");if(u===null)return L;if(u.target||l.metaKey||l.ctrlKey)return L;let d=new URL(u.href);return d.search=d.hash="",f.includes(`${d}`)?(l.preventDefault(),j(new URL(u.href))):L}),le());i.pipe(xe(1)).subscribe(()=>{let l=se("link[rel=icon]");typeof l!="undefined"&&(l.href=l.href)}),h(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}),i.pipe(ne(t)).subscribe(([l,{offset:f}])=>{history.scrollRestoration="manual",history.replaceState(f,""),history.pushState(null,"",l)}),i.subscribe(e);let s=e.pipe(V(pe()),ee("pathname"),je(1),E(l=>ir(l,{progress$:r}).pipe(de(()=>(ot(l,!0),L))))),a=new DOMParser,c=s.pipe(E(l=>l.text()),E(l=>{let f=a.parseFromString(l,"text/html");for(let b of["[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...te("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let z=se(b),K=se(b,f);typeof z!="undefined"&&typeof K!="undefined"&&z.replaceWith(K)}let u=Wn(document.head),d=Wn(f.head);for(let[b,z]of d)z.getAttribute("rel")==="stylesheet"||z.hasAttribute("src")||(u.has(b)?u.delete(b):document.head.appendChild(z));for(let b of u.values())b.getAttribute("rel")==="stylesheet"||b.hasAttribute("src")||b.remove();let v=Ee("container");return Fe(q("script",v)).pipe(E(b=>{let z=f.createElement("script");if(b.src){for(let K of b.getAttributeNames())z.setAttribute(K,b.getAttribute(K));return b.replaceWith(z),new P(K=>{z.onload=()=>K.complete()})}else return z.textContent=b.textContent,b.replaceWith(z),L}),Z(),re(f))}),le());return h(window,"popstate").pipe(m(pe)).subscribe(e),e.pipe(V(pe()),Le(2,1),M(([l,f])=>l.pathname===f.pathname&&l.hash!==f.hash),m(([,l])=>l)).subscribe(l=>{var f,u;history.state!==null||!l.hash?window.scrollTo(0,(u=(f=history.state)==null?void 0:f.y)!=null?u:0):(history.scrollRestoration="auto",nr(l.hash),history.scrollRestoration="manual")}),e.pipe(Cr(i),V(pe()),Le(2,1),M(([l,f])=>l.pathname===f.pathname&&l.hash===f.hash),m(([,l])=>l)).subscribe(l=>{history.scrollRestoration="auto",nr(l.hash),history.scrollRestoration="manual",history.back()}),c.pipe(ne(e)).subscribe(([,l])=>{var f,u;history.state!==null||!l.hash?window.scrollTo(0,(u=(f=history.state)==null?void 0:f.y)!=null?u:0):nr(l.hash)}),t.pipe(ee("offset"),ke(100)).subscribe(({offset:l})=>{history.replaceState(l,"")}),c}var Vn=Ht(Dn());function zn(e){let t=e.separator.split("|").map(n=>n.replace(/(\(\?[!=<][^)]+\))/g,"").length===0?"\uFFFD":n).join("|"),r=new RegExp(t,"img"),o=(n,i,s)=>`${i}${s}`;return n=>{n=n.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator}|)(${n.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return s=>(0,Vn.default)(s).replace(i,o).replace(/<\/mark>(\s+)]*>/img,"$1")}}function Mt(e){return e.type===1}function pr(e){return e.type===3}function qn(e,t){let r=sn(e);return _(j(location.protocol!=="file:"),We("search")).pipe($e(o=>o),E(()=>t)).subscribe(({config:o,docs:n})=>r.next({type:0,data:{config:o,docs:n,options:{suggest:te("search.suggest")}}})),r}function Kn({document$:e}){let t=me(),r=Ne(new URL("../versions.json",t.base)).pipe(de(()=>L)),o=r.pipe(m(n=>{let[,i]=t.base.match(/([^/]+)\/?$/);return n.find(({version:s,aliases:a})=>s===i||a.includes(i))||n[0]}));r.pipe(m(n=>new Map(n.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),E(n=>h(document.body,"click").pipe(M(i=>!i.metaKey&&!i.ctrlKey),ne(o),E(([i,s])=>{if(i.target instanceof Element){let a=i.target.closest("a");if(a&&!a.target&&n.has(a.href)){let c=a.href;return!i.target.closest(".md-version")&&n.get(c)===s?L:(i.preventDefault(),j(c))}}return L}),E(i=>{let{version:s}=n.get(i);return cr(new URL(i)).pipe(m(a=>{let p=pe().href.replace(t.base,"");return a.includes(p.split("#")[0])?new URL(`../${s}/${p}`,t.base):new URL(i)}))})))).subscribe(n=>ot(n,!0)),B([r,o]).subscribe(([n,i])=>{U(".md-header__topic").appendChild(bn(n,i))}),e.pipe(E(()=>o)).subscribe(n=>{var s;let i=__md_get("__outdated",sessionStorage);if(i===null){i=!0;let a=((s=t.version)==null?void 0:s.default)||"latest";Array.isArray(a)||(a=[a]);e:for(let c of a)for(let p of n.aliases.concat(n.version))if(new RegExp(c,"i").test(p)){i=!1;break e}__md_set("__outdated",i,sessionStorage)}if(i)for(let a of oe("outdated"))a.hidden=!1})}function Ia(e,{worker$:t}){let{searchParams:r}=pe();r.has("q")&&(Ke("search",!0),e.value=r.get("q"),e.focus(),We("search").pipe($e(i=>!i)).subscribe(()=>{let i=pe();i.searchParams.delete("q"),history.replaceState({},"",`${i}`)}));let o=Zt(e),n=_(t.pipe($e(Mt)),h(e,"keyup"),o).pipe(m(()=>e.value),X());return B([n,o]).pipe(m(([i,s])=>({value:i,focus:s})),J(1))}function Qn(e,{worker$:t}){let r=new x,o=r.pipe(Z(),re(!0));B([t.pipe($e(Mt)),r],(i,s)=>s).pipe(ee("value")).subscribe(({value:i})=>t.next({type:2,data:i})),r.pipe(ee("focus")).subscribe(({focus:i})=>{i&&Ke("search",i)}),h(e.form,"reset").pipe(Y(o)).subscribe(()=>e.focus());let n=U("header [for=__search]");return h(n,"click").subscribe(()=>e.focus()),Ia(e,{worker$:t}).pipe(w(i=>r.next(i)),A(()=>r.complete()),m(i=>R({ref:e},i)),J(1))}function Yn(e,{worker$:t,query$:r}){let o=new x,n=Qo(e.parentElement).pipe(M(Boolean)),i=e.parentElement,s=U(":scope > :first-child",e),a=U(":scope > :last-child",e);We("search").subscribe(l=>a.setAttribute("role",l?"list":"presentation")),o.pipe(ne(r),$r(t.pipe($e(Mt)))).subscribe(([{items:l},{value:f}])=>{switch(l.length){case 0:s.textContent=f.length?be("search.result.none"):be("search.result.placeholder");break;case 1:s.textContent=be("search.result.one");break;default:let u=tr(l.length);s.textContent=be("search.result.other",u)}});let c=o.pipe(w(()=>a.innerHTML=""),E(({items:l})=>_(j(...l.slice(0,10)),j(...l.slice(10)).pipe(Le(4),Ir(n),E(([f])=>f)))),m(un),le());return c.subscribe(l=>a.appendChild(l)),c.pipe(ce(l=>{let f=se("details",l);return typeof f=="undefined"?L:h(f,"toggle").pipe(Y(o),m(()=>f))})).subscribe(l=>{l.open===!1&&l.offsetTop<=i.scrollTop&&i.scrollTo({top:l.offsetTop})}),t.pipe(M(pr),m(({data:l})=>l)).pipe(w(l=>o.next(l)),A(()=>o.complete()),m(l=>R({ref:e},l)))}function Fa(e,{query$:t}){return t.pipe(m(({value:r})=>{let o=pe();return o.hash="",r=r.replace(/\s+/g,"+").replace(/&/g,"%26").replace(/=/g,"%3D"),o.search=`q=${r}`,{url:o}}))}function Bn(e,t){let r=new x,o=r.pipe(Z(),re(!0));return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),h(e,"click").pipe(Y(o)).subscribe(n=>n.preventDefault()),Fa(e,t).pipe(w(n=>r.next(n)),A(()=>r.complete()),m(n=>R({ref:e},n)))}function Gn(e,{worker$:t,keyboard$:r}){let o=new x,n=Ee("search-query"),i=_(h(n,"keydown"),h(n,"focus")).pipe(Se(ae),m(()=>n.value),X());return o.pipe(Ge(i),m(([{suggest:a},c])=>{let p=c.split(/([\s-]+)/);if(a!=null&&a.length&&p[p.length-1]){let l=a[a.length-1];l.startsWith(p[p.length-1])&&(p[p.length-1]=l)}else p.length=0;return p})).subscribe(a=>e.innerHTML=a.join("").replace(/\s/g," ")),r.pipe(M(({mode:a})=>a==="search")).subscribe(a=>{switch(a.type){case"ArrowRight":e.innerText.length&&n.selectionStart===n.value.length&&(n.value=e.innerText);break}}),t.pipe(M(pr),m(({data:a})=>a)).pipe(w(a=>o.next(a)),A(()=>o.complete()),m(()=>({ref:e})))}function Jn(e,{index$:t,keyboard$:r}){let o=me();try{let n=qn(o.search,t),i=Ee("search-query",e),s=Ee("search-result",e);h(e,"click").pipe(M(({target:c})=>c instanceof Element&&!!c.closest("a"))).subscribe(()=>Ke("search",!1)),r.pipe(M(({mode:c})=>c==="search")).subscribe(c=>{let p=Re();switch(c.type){case"Enter":if(p===i){let l=new Map;for(let f of q(":first-child [href]",s)){let u=f.firstElementChild;l.set(f,parseFloat(u.getAttribute("data-md-score")))}if(l.size){let[[f]]=[...l].sort(([,u],[,d])=>d-u);f.click()}c.claim()}break;case"Escape":case"Tab":Ke("search",!1),i.blur();break;case"ArrowUp":case"ArrowDown":if(typeof p=="undefined")i.focus();else{let l=[i,...q(":not(details) > [href], summary, details[open] [href]",s)],f=Math.max(0,(Math.max(0,l.indexOf(p))+l.length+(c.type==="ArrowUp"?-1:1))%l.length);l[f].focus()}c.claim();break;default:i!==Re()&&i.focus()}}),r.pipe(M(({mode:c})=>c==="global")).subscribe(c=>{switch(c.type){case"f":case"s":case"/":i.focus(),i.select(),c.claim();break}});let a=Qn(i,{worker$:n});return _(a,Yn(s,{worker$:n,query$:a})).pipe(qe(...oe("search-share",e).map(c=>Bn(c,{query$:a})),...oe("search-suggest",e).map(c=>Gn(c,{worker$:n,keyboard$:r}))))}catch(n){return e.hidden=!0,Ve}}function Xn(e,{index$:t,location$:r}){return B([t,r.pipe(V(pe()),M(o=>!!o.searchParams.get("h")))]).pipe(m(([o,n])=>zn(o.config)(n.searchParams.get("h"))),m(o=>{var s;let n=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let a=i.nextNode();a;a=i.nextNode())if((s=a.parentElement)!=null&&s.offsetHeight){let c=a.textContent,p=o(c);p.length>c.length&&n.set(a,p)}for(let[a,c]of n){let{childNodes:p}=T("span",null,c);a.replaceWith(...Array.from(p))}return{ref:e,nodes:n}}))}function ja(e,{viewport$:t,main$:r}){let o=e.closest(".md-grid"),n=o.offsetTop-o.parentElement.offsetTop;return B([r,t]).pipe(m(([{offset:i,height:s},{offset:{y:a}}])=>(s=s+Math.min(n,Math.max(0,a-i))-n,{height:s,locked:a>=i+n})),X((i,s)=>i.height===s.height&&i.locked===s.locked))}function Kr(e,o){var n=o,{header$:t}=n,r=eo(n,["header$"]);let i=U(".md-sidebar__scrollwrap",e),{y:s}=Je(i);return H(()=>{let a=new x,c=a.pipe(Z(),re(!0)),p=a.pipe(Ce(0,Oe));return p.pipe(ne(t)).subscribe({next([{height:l},{height:f}]){i.style.height=`${l-2*s}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),p.pipe($e()).subscribe(()=>{for(let l of q(".md-nav__link--active[href]",e)){if(!l.clientHeight)continue;let f=l.closest(".md-sidebar__scrollwrap");if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=he(f);f.scrollTo({top:u-d/2})}}}),ge(q("label[tabindex]",e)).pipe(ce(l=>h(l,"click").pipe(Se(ae),m(()=>l),Y(c)))).subscribe(l=>{let f=U(`[id="${l.htmlFor}"]`);U(`[aria-labelledby="${l.id}"]`).setAttribute("aria-expanded",`${f.checked}`)}),ja(e,r).pipe(w(l=>a.next(l)),A(()=>a.complete()),m(l=>R({ref:e},l)))})}function Zn(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return St(Ne(`${r}/releases/latest`).pipe(de(()=>L),m(o=>({version:o.tag_name})),He({})),Ne(r).pipe(de(()=>L),m(o=>({stars:o.stargazers_count,forks:o.forks_count})),He({}))).pipe(m(([o,n])=>R(R({},o),n)))}else{let r=`https://api.github.com/users/${e}`;return Ne(r).pipe(m(o=>({repositories:o.public_repos})),He({}))}}function ei(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return Ne(r).pipe(de(()=>L),m(({star_count:o,forks_count:n})=>({stars:o,forks:n})),He({}))}function ti(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,o]=t;return Zn(r,o)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,o]=t;return ei(r,o)}return L}var Wa;function Na(e){return Wa||(Wa=H(()=>{let t=__md_get("__source",sessionStorage);if(t)return j(t);if(oe("consent").length){let o=__md_get("__consent");if(!(o&&o.github))return L}return ti(e.href).pipe(w(o=>__md_set("__source",o,sessionStorage)))}).pipe(de(()=>L),M(t=>Object.keys(t).length>0),m(t=>({facts:t})),J(1)))}function ri(e){let t=U(":scope > :last-child",e);return H(()=>{let r=new x;return r.subscribe(({facts:o})=>{t.appendChild(dn(o)),t.classList.add("md-source__repository--active")}),Na(e).pipe(w(o=>r.next(o)),A(()=>r.complete()),m(o=>R({ref:e},o)))})}function Ua(e,{viewport$:t,header$:r}){return ye(document.body).pipe(E(()=>ar(e,{header$:r,viewport$:t})),m(({offset:{y:o}})=>({hidden:o>=10})),ee("hidden"))}function oi(e,t){return H(()=>{let r=new x;return r.subscribe({next({hidden:o}){e.hidden=o},complete(){e.hidden=!1}}),(te("navigation.tabs.sticky")?j({hidden:!1}):Ua(e,t)).pipe(w(o=>r.next(o)),A(()=>r.complete()),m(o=>R({ref:e},o)))})}function Da(e,{viewport$:t,header$:r}){let o=new Map,n=q("[href^=\\#]",e);for(let a of n){let c=decodeURIComponent(a.hash.substring(1)),p=se(`[id="${c}"]`);typeof p!="undefined"&&o.set(a,p)}let i=r.pipe(ee("height"),m(({height:a})=>{let c=Ee("main"),p=U(":scope > :first-child",c);return a+.8*(p.offsetTop-c.offsetTop)}),le());return ye(document.body).pipe(ee("height"),E(a=>H(()=>{let c=[];return j([...o].reduce((p,[l,f])=>{for(;c.length&&o.get(c[c.length-1]).tagName>=f.tagName;)c.pop();let u=f.offsetTop;for(;!u&&f.parentElement;)f=f.parentElement,u=f.offsetTop;let d=f.offsetParent;for(;d;d=d.offsetParent)u+=d.offsetTop;return p.set([...c=[...c,l]].reverse(),u)},new Map))}).pipe(m(c=>new Map([...c].sort(([,p],[,l])=>p-l))),Ge(i),E(([c,p])=>t.pipe(kr(([l,f],{offset:{y:u},size:d})=>{let v=u+d.height>=Math.floor(a.height);for(;f.length;){let[,b]=f[0];if(b-p=u&&!v)f=[l.pop(),...f];else break}return[l,f]},[[],[...c]]),X((l,f)=>l[0]===f[0]&&l[1]===f[1])))))).pipe(m(([a,c])=>({prev:a.map(([p])=>p),next:c.map(([p])=>p)})),V({prev:[],next:[]}),Le(2,1),m(([a,c])=>a.prev.length{let i=new x,s=i.pipe(Z(),re(!0));if(i.subscribe(({prev:a,next:c})=>{for(let[p]of c)p.classList.remove("md-nav__link--passed"),p.classList.remove("md-nav__link--active");for(let[p,[l]]of a.entries())l.classList.add("md-nav__link--passed"),l.classList.toggle("md-nav__link--active",p===a.length-1)}),te("toc.follow")){let a=_(t.pipe(ke(1),m(()=>{})),t.pipe(ke(250),m(()=>"smooth")));i.pipe(M(({prev:c})=>c.length>0),Ge(o.pipe(Se(ae))),ne(a)).subscribe(([[{prev:c}],p])=>{let[l]=c[c.length-1];if(l.offsetHeight){let f=qo(l);if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=he(f);f.scrollTo({top:u-d/2,behavior:p})}}})}return te("navigation.tracking")&&t.pipe(Y(s),ee("offset"),ke(250),je(1),Y(n.pipe(je(1))),Tt({delay:250}),ne(i)).subscribe(([,{prev:a}])=>{let c=pe(),p=a[a.length-1];if(p&&p.length){let[l]=p,{hash:f}=new URL(l.href);c.hash!==f&&(c.hash=f,history.replaceState({},"",`${c}`))}else c.hash="",history.replaceState({},"",`${c}`)}),Da(e,{viewport$:t,header$:r}).pipe(w(a=>i.next(a)),A(()=>i.complete()),m(a=>R({ref:e},a)))})}function Va(e,{viewport$:t,main$:r,target$:o}){let n=t.pipe(m(({offset:{y:s}})=>s),Le(2,1),m(([s,a])=>s>a&&a>0),X()),i=r.pipe(m(({active:s})=>s));return B([i,n]).pipe(m(([s,a])=>!(s&&a)),X(),Y(o.pipe(je(1))),re(!0),Tt({delay:250}),m(s=>({hidden:s})))}function ii(e,{viewport$:t,header$:r,main$:o,target$:n}){let i=new x,s=i.pipe(Z(),re(!0));return i.subscribe({next({hidden:a}){e.hidden=a,a?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(Y(s),ee("height")).subscribe(({height:a})=>{e.style.top=`${a+16}px`}),h(e,"click").subscribe(a=>{a.preventDefault(),window.scrollTo({top:0})}),Va(e,{viewport$:t,main$:o,target$:n}).pipe(w(a=>i.next(a)),A(()=>i.complete()),m(a=>R({ref:e},a)))}function ai({document$:e,tablet$:t}){e.pipe(E(()=>q(".md-toggle--indeterminate")),w(r=>{r.indeterminate=!0,r.checked=!1}),ce(r=>h(r,"change").pipe(Rr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),ne(t)).subscribe(([r,o])=>{r.classList.remove("md-toggle--indeterminate"),o&&(r.checked=!1)})}function za(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function si({document$:e}){e.pipe(E(()=>q("[data-md-scrollfix]")),w(t=>t.removeAttribute("data-md-scrollfix")),M(za),ce(t=>h(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function ci({viewport$:e,tablet$:t}){B([We("search"),t]).pipe(m(([r,o])=>r&&!o),E(r=>j(r).pipe(ze(r?400:100))),ne(e)).subscribe(([r,{offset:{y:o}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${o}px`;else{let n=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",n&&window.scrollTo(0,n)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let o=e[r];typeof o=="string"?o=document.createTextNode(o):o.parentNode&&o.parentNode.removeChild(o),r?t.insertBefore(this.previousSibling,o):t.replaceChild(o,this)}}}));function qa(){return location.protocol==="file:"?ht(`${new URL("search/search_index.js",Qr.base)}`).pipe(m(()=>__index),J(1)):Ne(new URL("search/search_index.json",Qr.base))}document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var nt=Uo(),_t=Go(),gt=Xo(_t),Yr=Bo(),Te=an(),lr=Fr("(min-width: 960px)"),li=Fr("(min-width: 1220px)"),mi=Zo(),Qr=me(),fi=document.forms.namedItem("search")?qa():Ve,Br=new x;jn({alert$:Br});var Gr=new x;te("navigation.instant")&&Nn({location$:_t,viewport$:Te,progress$:Gr}).subscribe(nt);var pi;((pi=Qr.version)==null?void 0:pi.provider)==="mike"&&Kn({document$:nt});_(_t,gt).pipe(ze(125)).subscribe(()=>{Ke("drawer",!1),Ke("search",!1)});Yr.pipe(M(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=se("link[rel=prev]");typeof t!="undefined"&&ot(t);break;case"n":case".":let r=se("link[rel=next]");typeof r!="undefined"&&ot(r);break;case"Enter":let o=Re();o instanceof HTMLLabelElement&&o.click()}});ai({document$:nt,tablet$:lr});si({document$:nt});ci({viewport$:Te,tablet$:lr});var Xe=Hn(Ee("header"),{viewport$:Te}),Lt=nt.pipe(m(()=>Ee("main")),E(e=>Pn(e,{viewport$:Te,header$:Xe})),J(1)),Ka=_(...oe("consent").map(e=>pn(e,{target$:gt})),...oe("dialog").map(e=>kn(e,{alert$:Br})),...oe("header").map(e=>$n(e,{viewport$:Te,header$:Xe,main$:Lt})),...oe("palette").map(e=>In(e)),...oe("progress").map(e=>Fn(e,{progress$:Gr})),...oe("search").map(e=>Jn(e,{index$:fi,keyboard$:Yr})),...oe("source").map(e=>ri(e))),Qa=H(()=>_(...oe("announce").map(e=>cn(e)),...oe("content").map(e=>Cn(e,{viewport$:Te,target$:gt,print$:mi})),...oe("content").map(e=>te("search.highlight")?Xn(e,{index$:fi,location$:_t}):L),...oe("header-title").map(e=>Rn(e,{viewport$:Te,header$:Xe})),...oe("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?jr(li,()=>Kr(e,{viewport$:Te,header$:Xe,main$:Lt})):jr(lr,()=>Kr(e,{viewport$:Te,header$:Xe,main$:Lt}))),...oe("tabs").map(e=>oi(e,{viewport$:Te,header$:Xe})),...oe("toc").map(e=>ni(e,{viewport$:Te,header$:Xe,main$:Lt,target$:gt})),...oe("top").map(e=>ii(e,{viewport$:Te,header$:Xe,main$:Lt,target$:gt})))),ui=nt.pipe(E(()=>Qa),qe(Ka),J(1));ui.subscribe();window.document$=nt;window.location$=_t;window.target$=gt;window.keyboard$=Yr;window.viewport$=Te;window.tablet$=lr;window.screen$=li;window.print$=mi;window.alert$=Br;window.progress$=Gr;window.component$=ui;})(); +//# sourceMappingURL=bundle.cd18aaf1.min.js.map + diff --git a/assets/javascripts/bundle.cd18aaf1.min.js.map b/assets/javascripts/bundle.cd18aaf1.min.js.map new file mode 100644 index 0000000..8bfddbb --- /dev/null +++ b/assets/javascripts/bundle.cd18aaf1.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["node_modules/focus-visible/dist/focus-visible.js", "node_modules/clipboard/dist/clipboard.js", "node_modules/escape-html/index.js", "src/templates/assets/javascripts/bundle.ts", "node_modules/rxjs/node_modules/tslib/tslib.es6.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/EmptyError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/fromEventPattern.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/catchError.ts", "node_modules/rxjs/src/internal/operators/scanInternals.ts", "node_modules/rxjs/src/internal/operators/combineLatest.ts", "node_modules/rxjs/src/internal/operators/combineLatestWith.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/throwIfEmpty.ts", "node_modules/rxjs/src/internal/operators/endWith.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/first.ts", "node_modules/rxjs/src/internal/operators/merge.ts", "node_modules/rxjs/src/internal/operators/mergeWith.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/sample.ts", "node_modules/rxjs/src/internal/operators/scan.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/skip.ts", "node_modules/rxjs/src/internal/operators/skipUntil.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/takeWhile.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/throttle.ts", "node_modules/rxjs/src/internal/operators/throttleTime.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/templates/assets/javascripts/browser/document/index.ts", "src/templates/assets/javascripts/browser/element/_/index.ts", "src/templates/assets/javascripts/browser/element/focus/index.ts", "src/templates/assets/javascripts/browser/element/offset/_/index.ts", "src/templates/assets/javascripts/browser/element/offset/content/index.ts", "src/templates/assets/javascripts/utilities/h/index.ts", "src/templates/assets/javascripts/utilities/round/index.ts", "src/templates/assets/javascripts/browser/script/index.ts", "src/templates/assets/javascripts/browser/element/size/_/index.ts", "src/templates/assets/javascripts/browser/element/size/content/index.ts", "src/templates/assets/javascripts/browser/element/visibility/index.ts", "src/templates/assets/javascripts/browser/toggle/index.ts", "src/templates/assets/javascripts/browser/keyboard/index.ts", "src/templates/assets/javascripts/browser/location/_/index.ts", "src/templates/assets/javascripts/browser/location/hash/index.ts", "src/templates/assets/javascripts/browser/media/index.ts", "src/templates/assets/javascripts/browser/request/index.ts", "src/templates/assets/javascripts/browser/viewport/offset/index.ts", "src/templates/assets/javascripts/browser/viewport/size/index.ts", "src/templates/assets/javascripts/browser/viewport/_/index.ts", "src/templates/assets/javascripts/browser/viewport/at/index.ts", "src/templates/assets/javascripts/browser/worker/index.ts", "src/templates/assets/javascripts/_/index.ts", "src/templates/assets/javascripts/components/_/index.ts", "src/templates/assets/javascripts/components/announce/index.ts", "src/templates/assets/javascripts/components/consent/index.ts", "src/templates/assets/javascripts/components/content/annotation/_/index.ts", "src/templates/assets/javascripts/templates/tooltip/index.tsx", "src/templates/assets/javascripts/templates/annotation/index.tsx", "src/templates/assets/javascripts/templates/clipboard/index.tsx", "src/templates/assets/javascripts/templates/search/index.tsx", "src/templates/assets/javascripts/templates/source/index.tsx", "src/templates/assets/javascripts/templates/tabbed/index.tsx", "src/templates/assets/javascripts/templates/table/index.tsx", "src/templates/assets/javascripts/templates/version/index.tsx", "src/templates/assets/javascripts/components/content/annotation/list/index.ts", "src/templates/assets/javascripts/components/content/annotation/block/index.ts", "src/templates/assets/javascripts/components/content/code/_/index.ts", "src/templates/assets/javascripts/components/content/details/index.ts", "src/templates/assets/javascripts/components/content/mermaid/index.css", "src/templates/assets/javascripts/components/content/mermaid/index.ts", "src/templates/assets/javascripts/components/content/table/index.ts", "src/templates/assets/javascripts/components/content/tabs/index.ts", "src/templates/assets/javascripts/components/content/_/index.ts", "src/templates/assets/javascripts/components/dialog/index.ts", "src/templates/assets/javascripts/components/header/_/index.ts", "src/templates/assets/javascripts/components/header/title/index.ts", "src/templates/assets/javascripts/components/main/index.ts", "src/templates/assets/javascripts/components/palette/index.ts", "src/templates/assets/javascripts/components/progress/index.ts", "src/templates/assets/javascripts/integrations/clipboard/index.ts", "src/templates/assets/javascripts/integrations/sitemap/index.ts", "src/templates/assets/javascripts/integrations/instant/index.ts", "src/templates/assets/javascripts/integrations/search/highlighter/index.ts", "src/templates/assets/javascripts/integrations/search/worker/message/index.ts", "src/templates/assets/javascripts/integrations/search/worker/_/index.ts", "src/templates/assets/javascripts/integrations/version/index.ts", "src/templates/assets/javascripts/components/search/query/index.ts", "src/templates/assets/javascripts/components/search/result/index.ts", "src/templates/assets/javascripts/components/search/share/index.ts", "src/templates/assets/javascripts/components/search/suggest/index.ts", "src/templates/assets/javascripts/components/search/_/index.ts", "src/templates/assets/javascripts/components/search/highlight/index.ts", "src/templates/assets/javascripts/components/sidebar/index.ts", "src/templates/assets/javascripts/components/source/facts/github/index.ts", "src/templates/assets/javascripts/components/source/facts/gitlab/index.ts", "src/templates/assets/javascripts/components/source/facts/_/index.ts", "src/templates/assets/javascripts/components/source/_/index.ts", "src/templates/assets/javascripts/components/tabs/index.ts", "src/templates/assets/javascripts/components/toc/index.ts", "src/templates/assets/javascripts/components/top/index.ts", "src/templates/assets/javascripts/patches/indeterminate/index.ts", "src/templates/assets/javascripts/patches/scrollfix/index.ts", "src/templates/assets/javascripts/patches/scrolllock/index.ts", "src/templates/assets/javascripts/polyfills/index.ts"], + "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"focus-visible\"\n\nimport {\n EMPTY,\n NEVER,\n Observable,\n Subject,\n defer,\n delay,\n filter,\n map,\n merge,\n mergeWith,\n shareReplay,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"./_\"\nimport {\n at,\n getActiveElement,\n getOptionalElement,\n requestJSON,\n setLocation,\n setToggle,\n watchDocument,\n watchKeyboard,\n watchLocation,\n watchLocationTarget,\n watchMedia,\n watchPrint,\n watchScript,\n watchViewport\n} from \"./browser\"\nimport {\n getComponentElement,\n getComponentElements,\n mountAnnounce,\n mountBackToTop,\n mountConsent,\n mountContent,\n mountDialog,\n mountHeader,\n mountHeaderTitle,\n mountPalette,\n mountProgress,\n mountSearch,\n mountSearchHiglight,\n mountSidebar,\n mountSource,\n mountTableOfContents,\n mountTabs,\n watchHeader,\n watchMain\n} from \"./components\"\nimport {\n SearchIndex,\n setupClipboardJS,\n setupInstantNavigation,\n setupVersionSelector\n} from \"./integrations\"\nimport {\n patchIndeterminate,\n patchScrollfix,\n patchScrolllock\n} from \"./patches\"\nimport \"./polyfills\"\n\n/* ----------------------------------------------------------------------------\n * Functions - @todo refactor\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch search index\n *\n * @returns Search index observable\n */\nfunction fetchSearchIndex(): Observable {\n if (location.protocol === \"file:\") {\n return watchScript(\n `${new URL(\"search/search_index.js\", config.base)}`\n )\n .pipe(\n // @ts-ignore - @todo fix typings\n map(() => __index),\n shareReplay(1)\n )\n } else {\n return requestJSON(\n new URL(\"search/search_index.json\", config.base)\n )\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Yay, JavaScript is available */\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Set up navigation observables and subjects */\nconst document$ = watchDocument()\nconst location$ = watchLocation()\nconst target$ = watchLocationTarget(location$)\nconst keyboard$ = watchKeyboard()\n\n/* Set up media observables */\nconst viewport$ = watchViewport()\nconst tablet$ = watchMedia(\"(min-width: 960px)\")\nconst screen$ = watchMedia(\"(min-width: 1220px)\")\nconst print$ = watchPrint()\n\n/* Retrieve search index, if search is enabled */\nconst config = configuration()\nconst index$ = document.forms.namedItem(\"search\")\n ? fetchSearchIndex()\n : NEVER\n\n/* Set up Clipboard.js integration */\nconst alert$ = new Subject()\nsetupClipboardJS({ alert$ })\n\n/* Set up progress indicator */\nconst progress$ = new Subject()\n\n/* Set up instant navigation, if enabled */\nif (feature(\"navigation.instant\"))\n setupInstantNavigation({ location$, viewport$, progress$ })\n .subscribe(document$)\n\n/* Set up version selector */\nif (config.version?.provider === \"mike\")\n setupVersionSelector({ document$ })\n\n/* Always close drawer and search on navigation */\nmerge(location$, target$)\n .pipe(\n delay(125)\n )\n .subscribe(() => {\n setToggle(\"drawer\", false)\n setToggle(\"search\", false)\n })\n\n/* Set up global keyboard handlers */\nkeyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getOptionalElement(\"link[rel=prev]\")\n if (typeof prev !== \"undefined\")\n setLocation(prev)\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getOptionalElement(\"link[rel=next]\")\n if (typeof next !== \"undefined\")\n setLocation(next)\n break\n\n /* Expand navigation, see https://bit.ly/3ZjG5io */\n case \"Enter\":\n const active = getActiveElement()\n if (active instanceof HTMLLabelElement)\n active.click()\n }\n })\n\n/* Set up patches */\npatchIndeterminate({ document$, tablet$ })\npatchScrollfix({ document$ })\npatchScrolllock({ viewport$, tablet$ })\n\n/* Set up header and main area observable */\nconst header$ = watchHeader(getComponentElement(\"header\"), { viewport$ })\nconst main$ = document$\n .pipe(\n map(() => getComponentElement(\"main\")),\n switchMap(el => watchMain(el, { viewport$, header$ })),\n shareReplay(1)\n )\n\n/* Set up control component observables */\nconst control$ = merge(\n\n /* Consent */\n ...getComponentElements(\"consent\")\n .map(el => mountConsent(el, { target$ })),\n\n /* Dialog */\n ...getComponentElements(\"dialog\")\n .map(el => mountDialog(el, { alert$ })),\n\n /* Header */\n ...getComponentElements(\"header\")\n .map(el => mountHeader(el, { viewport$, header$, main$ })),\n\n /* Color palette */\n ...getComponentElements(\"palette\")\n .map(el => mountPalette(el)),\n\n /* Progress bar */\n ...getComponentElements(\"progress\")\n .map(el => mountProgress(el, { progress$ })),\n\n /* Search */\n ...getComponentElements(\"search\")\n .map(el => mountSearch(el, { index$, keyboard$ })),\n\n /* Repository information */\n ...getComponentElements(\"source\")\n .map(el => mountSource(el))\n)\n\n/* Set up content component observables */\nconst content$ = defer(() => merge(\n\n /* Announcement bar */\n ...getComponentElements(\"announce\")\n .map(el => mountAnnounce(el)),\n\n /* Content */\n ...getComponentElements(\"content\")\n .map(el => mountContent(el, { viewport$, target$, print$ })),\n\n /* Search highlighting */\n ...getComponentElements(\"content\")\n .map(el => feature(\"search.highlight\")\n ? mountSearchHiglight(el, { index$, location$ })\n : EMPTY\n ),\n\n /* Header title */\n ...getComponentElements(\"header-title\")\n .map(el => mountHeaderTitle(el, { viewport$, header$ })),\n\n /* Sidebar */\n ...getComponentElements(\"sidebar\")\n .map(el => el.getAttribute(\"data-md-type\") === \"navigation\"\n ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))\n : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))\n ),\n\n /* Navigation tabs */\n ...getComponentElements(\"tabs\")\n .map(el => mountTabs(el, { viewport$, header$ })),\n\n /* Table of contents */\n ...getComponentElements(\"toc\")\n .map(el => mountTableOfContents(el, {\n viewport$, header$, main$, target$\n })),\n\n /* Back-to-top button */\n ...getComponentElements(\"top\")\n .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))\n))\n\n/* Set up component observables */\nconst component$ = document$\n .pipe(\n switchMap(() => content$),\n mergeWith(control$),\n shareReplay(1)\n )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n\n/* ----------------------------------------------------------------------------\n * Exports\n * ------------------------------------------------------------------------- */\n\nwindow.document$ = document$ /* Document observable */\nwindow.location$ = location$ /* Location subject */\nwindow.target$ = target$ /* Location target observable */\nwindow.keyboard$ = keyboard$ /* Keyboard observable */\nwindow.viewport$ = viewport$ /* Viewport observable */\nwindow.tablet$ = tablet$ /* Media tablet observable */\nwindow.screen$ = screen$ /* Media screen observable */\nwindow.print$ = print$ /* Media print observable */\nwindow.alert$ = alert$ /* Alert subject */\nwindow.progress$ = progress$ /* Progress indicator subject */\nwindow.component$ = component$ /* Component observable */\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n", "/**\n * Returns true if the object is a function.\n * @param value The value to check\n */\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n", "/**\n * Used to create Error subclasses until the community moves away from ES5.\n *\n * This is because compiling from TypeScript down to ES5 has issues with subclassing Errors\n * as well as other built-in types: https://github.com/Microsoft/TypeScript/issues/12123\n *\n * @param createImpl A factory function to create the actual constructor implementation. The returned\n * function should be a named function that calls `_super` internally.\n */\nexport function createErrorClass(createImpl: (_super: any) => any): T {\n const _super = (instance: any) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface UnsubscriptionError extends Error {\n readonly errors: any[];\n}\n\nexport interface UnsubscriptionErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (errors: any[]): UnsubscriptionError;\n}\n\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport const UnsubscriptionError: UnsubscriptionErrorCtor = createErrorClass(\n (_super) =>\n function UnsubscriptionErrorImpl(this: any, errors: (Error | string)[]) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n }\n);\n", "/**\n * Removes an item from an array, mutating it.\n * @param arr The array to remove the item from\n * @param item The item to remove\n */\nexport function arrRemove(arr: T[] | undefined | null, item: T) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { SubscriptionLike, TeardownLogic, Unsubscribable } from './types';\nimport { arrRemove } from './util/arrRemove';\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements SubscriptionLike {\n /** @nocollapse */\n public static EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n */\n public closed = false;\n\n private _parentage: Subscription[] | Subscription | null = null;\n\n /**\n * The list of registered finalizers to execute upon unsubscription. Adding and removing from this\n * list occurs in the {@link #add} and {@link #remove} methods.\n */\n private _finalizers: Exclude[] | null = null;\n\n /**\n * @param initialTeardown A function executed first as part of the finalization\n * process that is kicked off when {@link #unsubscribe} is called.\n */\n constructor(private initialTeardown?: () => void) {}\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe(): void {\n let errors: any[] | undefined;\n\n if (!this.closed) {\n this.closed = true;\n\n // Remove this from it's parents.\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n\n const { initialTeardown: initialFinalizer } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n\n const { _finalizers } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors ?? [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n\n /**\n * Adds a finalizer to this subscription, so that finalization will be unsubscribed/called\n * when this subscription is unsubscribed. If this subscription is already {@link #closed},\n * because it has already been unsubscribed, then whatever finalizer is passed to it\n * will automatically be executed (unless the finalizer itself is also a closed subscription).\n *\n * Closed Subscriptions cannot be added as finalizers to any subscription. Adding a closed\n * subscription to a any subscription will result in no operation. (A noop).\n *\n * Adding a subscription to itself, or adding `null` or `undefined` will not perform any\n * operation at all. (A noop).\n *\n * `Subscription` instances that are added to this instance will automatically remove themselves\n * if they are unsubscribed. Functions and {@link Unsubscribable} objects that you wish to remove\n * will need to be removed manually with {@link #remove}\n *\n * @param teardown The finalization logic to add to this subscription.\n */\n add(teardown: TeardownLogic): void {\n // Only add the finalizer if it's not undefined\n // and don't add a subscription to itself.\n if (teardown && teardown !== this) {\n if (this.closed) {\n // If this subscription is already closed,\n // execute whatever finalizer is handed to it automatically.\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription) {\n // We don't add closed subscriptions, and we don't add the same subscription\n // twice. Subscription unsubscribe is idempotent.\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = this._finalizers ?? []).push(teardown);\n }\n }\n }\n\n /**\n * Checks to see if a this subscription already has a particular parent.\n * This will signal that this subscription has already been added to the parent in question.\n * @param parent the parent to check for\n */\n private _hasParent(parent: Subscription) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n\n /**\n * Adds a parent to this subscription so it can be removed from the parent if it\n * unsubscribes on it's own.\n *\n * NOTE: THIS ASSUMES THAT {@link _hasParent} HAS ALREADY BEEN CHECKED.\n * @param parent The parent subscription to add\n */\n private _addParent(parent: Subscription) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n\n /**\n * Called on a child when it is removed via {@link #remove}.\n * @param parent The parent to remove\n */\n private _removeParent(parent: Subscription) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n\n /**\n * Removes a finalizer from this subscription that was previously added with the {@link #add} method.\n *\n * Note that `Subscription` instances, when unsubscribed, will automatically remove themselves\n * from every other `Subscription` they have been added to. This means that using the `remove` method\n * is not a common thing and should be used thoughtfully.\n *\n * If you add the same finalizer instance of a function or an unsubscribable object to a `Subscription` instance\n * more than once, you will need to call `remove` the same number of times to remove all instances.\n *\n * All finalizer instances are removed to free up memory upon unsubscription.\n *\n * @param teardown The finalizer to remove from this subscription\n */\n remove(teardown: Exclude): void {\n const { _finalizers } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\n\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\n\nexport function isSubscription(value: any): value is Subscription {\n return (\n value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe))\n );\n}\n\nfunction execFinalizer(finalizer: Unsubscribable | (() => void)) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n", "import { Subscriber } from './Subscriber';\nimport { ObservableNotification } from './types';\n\n/**\n * The {@link GlobalConfig} object for RxJS. It is used to configure things\n * like how to react on unhandled errors.\n */\nexport const config: GlobalConfig = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n\n/**\n * The global configuration object for RxJS, used to configure things\n * like how to react on unhandled errors. Accessible via {@link config}\n * object.\n */\nexport interface GlobalConfig {\n /**\n * A registration point for unhandled errors from RxJS. These are errors that\n * cannot were not handled by consuming code in the usual subscription path. For\n * example, if you have this configured, and you subscribe to an observable without\n * providing an error handler, errors from that subscription will end up here. This\n * will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onUnhandledError: ((err: any) => void) | null;\n\n /**\n * A registration point for notifications that cannot be sent to subscribers because they\n * have completed, errored or have been explicitly unsubscribed. By default, next, complete\n * and error notifications sent to stopped subscribers are noops. However, sometimes callers\n * might want a different behavior. For example, with sources that attempt to report errors\n * to stopped subscribers, a caller can configure RxJS to throw an unhandled error instead.\n * This will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onStoppedNotification: ((notification: ObservableNotification, subscriber: Subscriber) => void) | null;\n\n /**\n * The promise constructor used by default for {@link Observable#toPromise toPromise} and {@link Observable#forEach forEach}\n * methods.\n *\n * @deprecated As of version 8, RxJS will no longer support this sort of injection of a\n * Promise constructor. If you need a Promise implementation other than native promises,\n * please polyfill/patch Promise as you see appropriate. Will be removed in v8.\n */\n Promise?: PromiseConstructorLike;\n\n /**\n * If true, turns on synchronous error rethrowing, which is a deprecated behavior\n * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\n * call in a try/catch block. It also enables producer interference, a nasty bug\n * where a multicast can be broken for all observers by a downstream consumer with\n * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BUY TIME\n * FOR MIGRATION REASONS.\n *\n * @deprecated As of version 8, RxJS will no longer support synchronous throwing\n * of unhandled errors. All errors will be thrown on a separate call stack to prevent bad\n * behaviors described above. Will be removed in v8.\n */\n useDeprecatedSynchronousErrorHandling: boolean;\n\n /**\n * If true, enables an as-of-yet undocumented feature from v5: The ability to access\n * `unsubscribe()` via `this` context in `next` functions created in observers passed\n * to `subscribe`.\n *\n * This is being removed because the performance was severely problematic, and it could also cause\n * issues when types other than POJOs are passed to subscribe as subscribers, as they will likely have\n * their `this` context overwritten.\n *\n * @deprecated As of version 8, RxJS will no longer support altering the\n * context of next functions provided as part of an observer to Subscribe. Instead,\n * you will have access to a subscription or a signal or token that will allow you to do things like\n * unsubscribe and test closed status. Will be removed in v8.\n */\n useDeprecatedNextContext: boolean;\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearTimeoutFunction = (handle: TimerHandle) => void;\n\ninterface TimeoutProvider {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n delegate:\n | {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n }\n | undefined;\n}\n\nexport const timeoutProvider: TimeoutProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setTimeout(handler: () => void, timeout?: number, ...args) {\n const { delegate } = timeoutProvider;\n if (delegate?.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return (delegate?.clearTimeout || clearTimeout)(handle as any);\n },\n delegate: undefined,\n};\n", "import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\n\n/**\n * Handles an error on another job either with the user-configured {@link onUnhandledError},\n * or by throwing it on that new job so it can be picked up by `window.onerror`, `process.on('error')`, etc.\n *\n * This should be called whenever there is an error that is out-of-band with the subscription\n * or when an error hits a terminal boundary of the subscription and no error handler was provided.\n *\n * @param err the error to report\n */\nexport function reportUnhandledError(err: any) {\n timeoutProvider.setTimeout(() => {\n const { onUnhandledError } = config;\n if (onUnhandledError) {\n // Execute the user-configured error handler.\n onUnhandledError(err);\n } else {\n // Throw so it is picked up by the runtime's uncaught error mechanism.\n throw err;\n }\n });\n}\n", "/* tslint:disable:no-empty */\nexport function noop() { }\n", "import { CompleteNotification, NextNotification, ErrorNotification } from './types';\n\n/**\n * A completion object optimized for memory use and created to be the\n * same \"shape\" as other notifications in v8.\n * @internal\n */\nexport const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined) as CompleteNotification)();\n\n/**\n * Internal use only. Creates an optimized error notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function errorNotification(error: any): ErrorNotification {\n return createNotification('E', undefined, error) as any;\n}\n\n/**\n * Internal use only. Creates an optimized next notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function nextNotification(value: T) {\n return createNotification('N', value, undefined) as NextNotification;\n}\n\n/**\n * Ensures that all notifications created internally have the same \"shape\" in v8.\n *\n * TODO: This is only exported to support a crazy legacy test in `groupBy`.\n * @internal\n */\nexport function createNotification(kind: 'N' | 'E' | 'C', value: any, error: any) {\n return {\n kind,\n value,\n error,\n };\n}\n", "import { config } from '../config';\n\nlet context: { errorThrown: boolean; error: any } | null = null;\n\n/**\n * Handles dealing with errors for super-gross mode. Creates a context, in which\n * any synchronously thrown errors will be passed to {@link captureError}. Which\n * will record the error such that it will be rethrown after the call back is complete.\n * TODO: Remove in v8\n * @param cb An immediately executed function.\n */\nexport function errorContext(cb: () => void) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context!;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n // This is the general non-deprecated path for everyone that\n // isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)\n cb();\n }\n}\n\n/**\n * Captures errors only in super-gross mode.\n * @param err the error to capture\n */\nexport function captureError(err: any) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { Observer, ObservableNotification } from './types';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber\n */\nexport class Subscriber extends Subscription implements Observer {\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param next The `next` callback of an Observer.\n * @param error The `error` callback of an\n * Observer.\n * @param complete The `complete` callback of an\n * Observer.\n * @return A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n * @nocollapse\n * @deprecated Do not use. Will be removed in v8. There is no replacement for this\n * method, and there is no reason to be creating instances of `Subscriber` directly.\n * If you have a specific use case, please file an issue.\n */\n static create(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber {\n return new SafeSubscriber(next, error, complete);\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected isStopped: boolean = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected destination: Subscriber | Observer; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * There is no reason to directly create an instance of Subscriber. This type is exported for typings reasons.\n */\n constructor(destination?: Subscriber | Observer) {\n super();\n if (destination) {\n this.destination = destination;\n // Automatically chain subscriptions together here.\n // if destination is a Subscription, then it is a Subscriber.\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param {T} [value] The `next` value.\n * @return {void}\n */\n next(value?: T): void {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value!);\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached `Error`. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param {any} [err] The `error` exception.\n * @return {void}\n */\n error(err?: any): void {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n * @return {void}\n */\n complete(): void {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n\n unsubscribe(): void {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null!;\n }\n }\n\n protected _next(value: T): void {\n this.destination.next(value);\n }\n\n protected _error(err: any): void {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n\n protected _complete(): void {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\n\n/**\n * This bind is captured here because we want to be able to have\n * compatibility with monoid libraries that tend to use a method named\n * `bind`. In particular, a library called Monio requires this.\n */\nconst _bind = Function.prototype.bind;\n\nfunction bind any>(fn: Fn, thisArg: any): Fn {\n return _bind.call(fn, thisArg);\n}\n\n/**\n * Internal optimization only, DO NOT EXPOSE.\n * @internal\n */\nclass ConsumerObserver implements Observer {\n constructor(private partialObserver: Partial>) {}\n\n next(value: T): void {\n const { partialObserver } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n\n error(err: any): void {\n const { partialObserver } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n }\n\n complete(): void {\n const { partialObserver } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\n\nexport class SafeSubscriber extends Subscriber {\n constructor(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((e?: any) => void) | null,\n complete?: (() => void) | null\n ) {\n super();\n\n let partialObserver: Partial>;\n if (isFunction(observerOrNext) || !observerOrNext) {\n // The first argument is a function, not an observer. The next\n // two arguments *could* be observers, or they could be empty.\n partialObserver = {\n next: (observerOrNext ?? undefined) as (((value: T) => void) | undefined),\n error: error ?? undefined,\n complete: complete ?? undefined,\n };\n } else {\n // The first argument is a partial observer.\n let context: any;\n if (this && config.useDeprecatedNextContext) {\n // This is a deprecated path that made `this.unsubscribe()` available in\n // next handler functions passed to subscribe. This only exists behind a flag\n // now, as it is *very* slow.\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context),\n };\n } else {\n // The \"normal\" path. Just use the partial observer directly.\n partialObserver = observerOrNext;\n }\n }\n\n // Wrap the partial observer to ensure it's a full observer, and\n // make sure proper error handling is accounted for.\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\n\nfunction handleUnhandledError(error: any) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n // Ideal path, we report this as an unhandled error,\n // which is thrown on a new call stack.\n reportUnhandledError(error);\n }\n}\n\n/**\n * An error handler used when no error handler was supplied\n * to the SafeSubscriber -- meaning no error handler was supplied\n * do the `subscribe` call on our observable.\n * @param err The error to handle\n */\nfunction defaultErrorHandler(err: any) {\n throw err;\n}\n\n/**\n * A handler for notifications that cannot be sent to a stopped subscriber.\n * @param notification The notification being sent\n * @param subscriber The stopped subscriber\n */\nfunction handleStoppedNotification(notification: ObservableNotification, subscriber: Subscriber) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\n\n/**\n * The observer used as a stub for subscriptions where the user did not\n * pass any arguments to `subscribe`. Comes with the default error handling\n * behavior.\n */\nexport const EMPTY_OBSERVER: Readonly> & { closed: true } = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n", "/**\n * Symbol.observable or a string \"@@observable\". Used for interop\n *\n * @deprecated We will no longer be exporting this symbol in upcoming versions of RxJS.\n * Instead polyfill and use Symbol.observable directly *or* use https://www.npmjs.com/package/symbol-observable\n */\nexport const observable: string | symbol = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n", "/**\n * This function takes one parameter and just returns it. Simply put,\n * this is like `(x: T): T => x`.\n *\n * ## Examples\n *\n * This is useful in some cases when using things like `mergeMap`\n *\n * ```ts\n * import { interval, take, map, range, mergeMap, identity } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(5));\n *\n * const result$ = source$.pipe(\n * map(i => range(i)),\n * mergeMap(identity) // same as mergeMap(x => x)\n * );\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * Or when you want to selectively apply an operator\n *\n * ```ts\n * import { interval, take, identity } from 'rxjs';\n *\n * const shouldLimit = () => Math.random() < 0.5;\n *\n * const source$ = interval(1000);\n *\n * const result$ = source$.pipe(shouldLimit() ? take(5) : identity);\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * @param x Any value that is returned by this function\n * @returns The value passed as the first parameter to this function\n */\nexport function identity(x: T): T {\n return x;\n}\n", "import { identity } from './identity';\nimport { UnaryFunction } from '../types';\n\nexport function pipe(): typeof identity;\nexport function pipe(fn1: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction, fn3: UnaryFunction): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction,\n ...fns: UnaryFunction[]\n): UnaryFunction;\n\n/**\n * pipe() can be called on one or more functions, each of which can take one argument (\"UnaryFunction\")\n * and uses it to return a value.\n * It returns a function that takes one argument, passes it to the first UnaryFunction, and then\n * passes the result to the next one, passes that result to the next one, and so on. \n */\nexport function pipe(...fns: Array>): UnaryFunction {\n return pipeFromArray(fns);\n}\n\n/** @internal */\nexport function pipeFromArray(fns: Array>): UnaryFunction {\n if (fns.length === 0) {\n return identity as UnaryFunction;\n }\n\n if (fns.length === 1) {\n return fns[0];\n }\n\n return function piped(input: T): R {\n return fns.reduce((prev: any, fn: UnaryFunction) => fn(prev), input as any);\n };\n}\n", "import { Operator } from './Operator';\nimport { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription, Subscription } from './Subscription';\nimport { TeardownLogic, OperatorFunction, Subscribable, Observer } from './types';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n *\n * @class Observable\n */\nexport class Observable implements Subscribable {\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n source: Observable | undefined;\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n operator: Operator | undefined;\n\n /**\n * @constructor\n * @param {Function} subscribe the function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe?: (this: Observable, subscriber: Subscriber) => TeardownLogic) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n // HACK: Since TypeScript inherits static properties too, we have to\n // fight against TypeScript here so Subject can have a different static create signature\n /**\n * Creates a new Observable by calling the Observable constructor\n * @owner Observable\n * @method create\n * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n * @return {Observable} a new observable\n * @nocollapse\n * @deprecated Use `new Observable()` instead. Will be removed in v8.\n */\n static create: (...args: any[]) => any = (subscribe?: (subscriber: Subscriber) => TeardownLogic) => {\n return new Observable(subscribe);\n };\n\n /**\n * Creates a new Observable, with this Observable instance as the source, and the passed\n * operator defined as the new observable's operator.\n * @method lift\n * @param operator the operator defining the operation to take on the observable\n * @return a new observable with the Operator applied\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * If you have implemented an operator using `lift`, it is recommended that you create an\n * operator by simply returning `new Observable()` directly. See \"Creating new operators from\n * scratch\" section here: https://rxjs.dev/guide/operators\n */\n lift(operator?: Operator): Observable {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n\n subscribe(observerOrNext?: Partial> | ((value: T) => void)): Subscription;\n /** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\n subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * Use it when you have all these Observables, but still nothing is happening.\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to Observable's constructor, but most of the time it is\n * a library implementation, which defines what will be emitted by an Observable, and when it be will emitted. This means\n * that calling `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * the thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * of the following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular, do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, if the `error` method is not provided and an error happens,\n * it will be thrown asynchronously. Errors thrown asynchronously cannot be caught using `try`/`catch`. Instead,\n * use the {@link onUnhandledError} configuration option or use a runtime handler (like `window.onerror` or\n * `process.on('error)`) to be notified of unhandled errors. Because of this, it's recommended that you provide\n * an `error` method to avoid missing thrown errors.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where the first function is equivalent\n * of a `next` method, the second of an `error` method and the third of a `complete` method. Just as in case of an Observer,\n * if you do not need to listen for something, you can omit a function by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to the `error` function, as with an Observer, if not provided, errors emitted by an Observable will be thrown asynchronously.\n *\n * You can, however, subscribe with no parameters at all. This may be the case where you're not interested in terminal events\n * and you also handled emissions internally by using operators (e.g. using `tap`).\n *\n * Whichever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop the work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a `scheduler`.\n *\n * #### Examples\n *\n * Subscribe with an {@link guide/observer Observer}\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() {\n * // We actually could just remove this method,\n * // since we do not really care about errors right now.\n * },\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Subscribe with functions ({@link deprecations/subscribe-arguments deprecated})\n *\n * ```ts\n * import { of } from 'rxjs'\n *\n * let sum = 0;\n *\n * of(1, 2, 3).subscribe(\n * value => {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * () => console.log('Sum equals: ' + sum)\n * );\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Cancel a subscription\n *\n * ```ts\n * import { interval } from 'rxjs';\n *\n * const subscription = interval(1000).subscribe({\n * next(num) {\n * console.log(num)\n * },\n * complete() {\n * // Will not be called, even when cancelling subscription.\n * console.log('completed!');\n * }\n * });\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 'unsubscribed!' after 2.5s\n * ```\n *\n * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n * or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n * Observable.\n * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown asynchronously as unhandled.\n * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n * @return {Subscription} a subscription reference to the registered handlers\n * @method subscribe\n */\n subscribe(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n ): Subscription {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(\n operator\n ? // We're dealing with a subscription in the\n // operator chain to one of our lifted operators.\n operator.call(subscriber, source)\n : source\n ? // If `source` has a value, but `operator` does not, something that\n // had intimate knowledge of our API, like our `Subject`, must have\n // set it. We're going to just call `_subscribe` directly.\n this._subscribe(subscriber)\n : // In all other cases, we're likely wrapping a user-provided initializer\n // function, so we need to catch errors and handle them appropriately.\n this._trySubscribe(subscriber)\n );\n });\n\n return subscriber;\n }\n\n /** @internal */\n protected _trySubscribe(sink: Subscriber): TeardownLogic {\n try {\n return this._subscribe(sink);\n } catch (err) {\n // We don't need to return anything in this case,\n // because it's just going to try to `add()` to a subscription\n // above.\n sink.error(err);\n }\n }\n\n /**\n * Used as a NON-CANCELLABLE means of subscribing to an observable, for use with\n * APIs that expect promises, like `async/await`. You cannot unsubscribe from this.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * #### Example\n *\n * ```ts\n * import { interval, take } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(4));\n *\n * async function getTotal() {\n * let total = 0;\n *\n * await source$.forEach(value => {\n * total += value;\n * console.log('observable -> ' + value);\n * });\n *\n * return total;\n * }\n *\n * getTotal().then(\n * total => console.log('Total: ' + total)\n * );\n *\n * // Expected:\n * // 'observable -> 0'\n * // 'observable -> 1'\n * // 'observable -> 2'\n * // 'observable -> 3'\n * // 'Total: 6'\n * ```\n *\n * @param next a handler for each value emitted by the observable\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n */\n forEach(next: (value: T) => void): Promise;\n\n /**\n * @param next a handler for each value emitted by the observable\n * @param promiseCtor a constructor function used to instantiate the Promise\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n * @deprecated Passing a Promise constructor will no longer be available\n * in upcoming versions of RxJS. This is because it adds weight to the library, for very\n * little benefit. If you need this functionality, it is recommended that you either\n * polyfill Promise, or you create an adapter to convert the returned native promise\n * to whatever promise implementation you wanted. Will be removed in v8.\n */\n forEach(next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise;\n\n forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n }) as Promise;\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): TeardownLogic {\n return this.source?.subscribe(subscriber);\n }\n\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @method Symbol.observable\n * @return {Observable} this instance of the observable\n */\n [Symbol_observable]() {\n return this;\n }\n\n /* tslint:disable:max-line-length */\n pipe(): Observable;\n pipe(op1: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction,\n ...operations: OperatorFunction[]\n ): Observable;\n /* tslint:enable:max-line-length */\n\n /**\n * Used to stitch together functional operators into a chain.\n * @method pipe\n * @return {Observable} the Observable result of all of the operators having\n * been called in the order they were passed in.\n *\n * ## Example\n *\n * ```ts\n * import { interval, filter, map, scan } from 'rxjs';\n *\n * interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x));\n * ```\n */\n pipe(...operations: OperatorFunction[]): Observable {\n return pipeFromArray(operations)(this);\n }\n\n /* tslint:disable:max-line-length */\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: typeof Promise): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: PromiseConstructorLike): Promise;\n /* tslint:enable:max-line-length */\n\n /**\n * Subscribe to this Observable and get a Promise resolving on\n * `complete` with the last emission (if any).\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * @method toPromise\n * @param [promiseCtor] a constructor function used to instantiate\n * the Promise\n * @return A Promise that resolves with the last value emit, or\n * rejects on an error. If there were no emissions, Promise\n * resolves with undefined.\n * @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise\n */\n toPromise(promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n let value: T | undefined;\n this.subscribe(\n (x: T) => (value = x),\n (err: any) => reject(err),\n () => resolve(value)\n );\n }) as Promise;\n }\n}\n\n/**\n * Decides between a passed promise constructor from consuming code,\n * A default configured promise constructor, and the native promise\n * constructor and returns it. If nothing can be found, it will throw\n * an error.\n * @param promiseCtor The optional promise constructor to passed by consuming code\n */\nfunction getPromiseCtor(promiseCtor: PromiseConstructorLike | undefined) {\n return promiseCtor ?? config.Promise ?? Promise;\n}\n\nfunction isObserver(value: any): value is Observer {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\n\nfunction isSubscriber(value: any): value is Subscriber {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n", "import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorFunction } from '../types';\nimport { isFunction } from './isFunction';\n\n/**\n * Used to determine if an object is an Observable with a lift function.\n */\nexport function hasLift(source: any): source is { lift: InstanceType['lift'] } {\n return isFunction(source?.lift);\n}\n\n/**\n * Creates an `OperatorFunction`. Used to define operators throughout the library in a concise way.\n * @param init The logic to connect the liftedSource to the subscriber at the moment of subscription.\n */\nexport function operate(\n init: (liftedSource: Observable, subscriber: Subscriber) => (() => void) | void\n): OperatorFunction {\n return (source: Observable) => {\n if (hasLift(source)) {\n return source.lift(function (this: Subscriber, liftedSource: Observable) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n", "import { Subscriber } from '../Subscriber';\n\n/**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional teardown logic here. This will only be called on teardown if the\n * subscriber itself is not already closed. This is called after all other teardown logic is executed.\n */\nexport function createOperatorSubscriber(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n onFinalize?: () => void\n): Subscriber {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\n\n/**\n * A generic helper for allowing operators to be created with a Subscriber and\n * use closures to capture necessary state from the operator function itself.\n */\nexport class OperatorSubscriber extends Subscriber {\n /**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional finalization logic here. This will only be called on finalization if the\n * subscriber itself is not already closed. This is called after all other finalization logic is executed.\n * @param shouldUnsubscribe An optional check to see if an unsubscribe call should truly unsubscribe.\n * NOTE: This currently **ONLY** exists to support the strange behavior of {@link groupBy}, where unsubscription\n * to the resulting observable does not actually disconnect from the source if there are active subscriptions\n * to any grouped observable. (DO NOT EXPOSE OR USE EXTERNALLY!!!)\n */\n constructor(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n private onFinalize?: () => void,\n private shouldUnsubscribe?: () => boolean\n ) {\n // It's important - for performance reasons - that all of this class's\n // members are initialized and that they are always initialized in the same\n // order. This will ensure that all OperatorSubscriber instances have the\n // same hidden class in V8. This, in turn, will help keep the number of\n // hidden classes involved in property accesses within the base class as\n // low as possible. If the number of hidden classes involved exceeds four,\n // the property accesses will become megamorphic and performance penalties\n // will be incurred - i.e. inline caches won't be used.\n //\n // The reasons for ensuring all instances have the same hidden class are\n // further discussed in this blog post from Benedikt Meurer:\n // https://benediktmeurer.de/2018/03/23/impact-of-polymorphism-on-component-based-frameworks-like-react/\n super(destination);\n this._next = onNext\n ? function (this: OperatorSubscriber, value: T) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (this: OperatorSubscriber, err: any) {\n try {\n onError(err);\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function (this: OperatorSubscriber) {\n try {\n onComplete();\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n\n unsubscribe() {\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const { closed } = this;\n super.unsubscribe();\n // Execute additional teardown if we have any and we didn't already do so.\n !closed && this.onFinalize?.();\n }\n }\n}\n", "import { Subscription } from '../Subscription';\n\ninterface AnimationFrameProvider {\n schedule(callback: FrameRequestCallback): Subscription;\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n delegate:\n | {\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n }\n | undefined;\n}\n\nexport const animationFrameProvider: AnimationFrameProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n schedule(callback) {\n let request = requestAnimationFrame;\n let cancel: typeof cancelAnimationFrame | undefined = cancelAnimationFrame;\n const { delegate } = animationFrameProvider;\n if (delegate) {\n request = delegate.requestAnimationFrame;\n cancel = delegate.cancelAnimationFrame;\n }\n const handle = request((timestamp) => {\n // Clear the cancel function. The request has been fulfilled, so\n // attempting to cancel the request upon unsubscription would be\n // pointless.\n cancel = undefined;\n callback(timestamp);\n });\n return new Subscription(() => cancel?.(handle));\n },\n requestAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.requestAnimationFrame || requestAnimationFrame)(...args);\n },\n cancelAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.cancelAnimationFrame || cancelAnimationFrame)(...args);\n },\n delegate: undefined,\n};\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface ObjectUnsubscribedError extends Error {}\n\nexport interface ObjectUnsubscribedErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ObjectUnsubscribedError;\n}\n\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor = createErrorClass(\n (_super) =>\n function ObjectUnsubscribedErrorImpl(this: any) {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n }\n);\n", "import { Operator } from './Operator';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A Subject is a special type of Observable that allows values to be\n * multicasted to many Observers. Subjects are like EventEmitters.\n *\n * Every Subject is an Observable and an Observer. You can subscribe to a\n * Subject, and you can call next to feed values as well as error and complete.\n */\nexport class Subject extends Observable implements SubscriptionLike {\n closed = false;\n\n private currentObservers: Observer[] | null = null;\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n observers: Observer[] = [];\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n isStopped = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n hasError = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n thrownError: any = null;\n\n /**\n * Creates a \"subject\" by basically gluing an observer to an observable.\n *\n * @nocollapse\n * @deprecated Recommended you do not use. Will be removed at some point in the future. Plans for replacement still under discussion.\n */\n static create: (...args: any[]) => any = (destination: Observer, source: Observable): AnonymousSubject => {\n return new AnonymousSubject(destination, source);\n };\n\n constructor() {\n // NOTE: This must be here to obscure Observable's constructor.\n super();\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n lift(operator: Operator): Observable {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator as any;\n return subject as any;\n }\n\n /** @internal */\n protected _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n\n next(value: T) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n\n error(err: any) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.error(err);\n }\n }\n });\n }\n\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.complete();\n }\n }\n });\n }\n\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null!;\n }\n\n get observed() {\n return this.observers?.length > 0;\n }\n\n /** @internal */\n protected _trySubscribe(subscriber: Subscriber): TeardownLogic {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n\n /** @internal */\n protected _innerSubscribe(subscriber: Subscriber) {\n const { hasError, isStopped, observers } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n\n /**\n * Creates a new Observable with this Subject as the source. You can do this\n * to create custom Observer-side logic of the Subject and conceal it from\n * code that uses the Observable.\n * @return {Observable} Observable that the Subject casts to\n */\n asObservable(): Observable {\n const observable: any = new Observable();\n observable.source = this;\n return observable;\n }\n}\n\n/**\n * @class AnonymousSubject\n */\nexport class AnonymousSubject extends Subject {\n constructor(\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n public destination?: Observer,\n source?: Observable\n ) {\n super();\n this.source = source;\n }\n\n next(value: T) {\n this.destination?.next?.(value);\n }\n\n error(err: any) {\n this.destination?.error?.(err);\n }\n\n complete() {\n this.destination?.complete?.();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n return this.source?.subscribe(subscriber) ?? EMPTY_SUBSCRIPTION;\n }\n}\n", "import { TimestampProvider } from '../types';\n\ninterface DateTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const dateTimestampProvider: DateTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n", "import { Subject } from './Subject';\nimport { TimestampProvider } from './types';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * A variant of {@link Subject} that \"replays\" old values to new subscribers by emitting them when they first subscribe.\n *\n * `ReplaySubject` has an internal buffer that will store a specified number of values that it has observed. Like `Subject`,\n * `ReplaySubject` \"observes\" values by having them passed to its `next` method. When it observes a value, it will store that\n * value for a time determined by the configuration of the `ReplaySubject`, as passed to its constructor.\n *\n * When a new subscriber subscribes to the `ReplaySubject` instance, it will synchronously emit all values in its buffer in\n * a First-In-First-Out (FIFO) manner. The `ReplaySubject` will also complete, if it has observed completion; and it will\n * error if it has observed an error.\n *\n * There are two main configuration items to be concerned with:\n *\n * 1. `bufferSize` - This will determine how many items are stored in the buffer, defaults to infinite.\n * 2. `windowTime` - The amount of time to hold a value in the buffer before removing it from the buffer.\n *\n * Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values\n * are less than 2 seconds old, you could do so with a `new ReplaySubject(3, 2000)`.\n *\n * ### Differences with BehaviorSubject\n *\n * `BehaviorSubject` is similar to `new ReplaySubject(1)`, with a couple of exceptions:\n *\n * 1. `BehaviorSubject` comes \"primed\" with a single value upon construction.\n * 2. `ReplaySubject` will replay values, even after observing an error, where `BehaviorSubject` will not.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n * @see {@link shareReplay}\n */\nexport class ReplaySubject extends Subject {\n private _buffer: (T | number)[] = [];\n private _infiniteTimeWindow = true;\n\n /**\n * @param bufferSize The size of the buffer to replay on subscription\n * @param windowTime The amount of time the buffered items will stay buffered\n * @param timestampProvider An object with a `now()` method that provides the current timestamp. This is used to\n * calculate the amount of time something has been buffered.\n */\n constructor(\n private _bufferSize = Infinity,\n private _windowTime = Infinity,\n private _timestampProvider: TimestampProvider = dateTimestampProvider\n ) {\n super();\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n\n next(value: T): void {\n const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._trimBuffer();\n\n const subscription = this._innerSubscribe(subscriber);\n\n const { _infiniteTimeWindow, _buffer } = this;\n // We use a copy here, so reentrant code does not mutate our array while we're\n // emitting it to a new subscriber.\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i] as T);\n }\n\n this._checkFinalizedStatuses(subscriber);\n\n return subscription;\n }\n\n private _trimBuffer() {\n const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;\n // If we don't have an infinite buffer size, and we're over the length,\n // use splice to truncate the old buffer values off. Note that we have to\n // double the size for instances where we're not using an infinite time window\n // because we're storing the values and the timestamps in the same array.\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n\n // Now, if we're not in an infinite time window, remove all values where the time is\n // older than what is allowed.\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n // Search the array for the first timestamp that isn't expired and\n // truncate the buffer up to that point.\n for (let i = 1; i < _buffer.length && (_buffer[i] as number) <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Subscription } from '../Subscription';\nimport { SchedulerAction } from '../types';\n\n/**\n * A unit of work to be executed in a `scheduler`. An action is typically\n * created from within a {@link SchedulerLike} and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action extends Subscription {\n * new (scheduler: Scheduler, work: (state?: T) => void);\n * schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n *\n * @class Action\n */\nexport class Action extends Subscription {\n constructor(scheduler: Scheduler, work: (this: SchedulerAction, state?: T) => void) {\n super();\n }\n /**\n * Schedules this action on its parent {@link SchedulerLike} for execution. May be passed\n * some context object, `state`. May happen at some point in the future,\n * according to the `delay` parameter, if specified.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler.\n * @return {void}\n */\n public schedule(state?: T, delay: number = 0): Subscription {\n return this;\n }\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetIntervalFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearIntervalFunction = (handle: TimerHandle) => void;\n\ninterface IntervalProvider {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n delegate:\n | {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n }\n | undefined;\n}\n\nexport const intervalProvider: IntervalProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setInterval(handler: () => void, timeout?: number, ...args) {\n const { delegate } = intervalProvider;\n if (delegate?.setInterval) {\n return delegate.setInterval(handler, timeout, ...args);\n }\n return setInterval(handler, timeout, ...args);\n },\n clearInterval(handle) {\n const { delegate } = intervalProvider;\n return (delegate?.clearInterval || clearInterval)(handle as any);\n },\n delegate: undefined,\n};\n", "import { Action } from './Action';\nimport { SchedulerAction } from '../types';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncAction extends Action {\n public id: TimerHandle | undefined;\n public state?: T;\n // @ts-ignore: Property has no initializer and is not definitely assigned\n public delay: number;\n protected pending: boolean = false;\n\n constructor(protected scheduler: AsyncScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (this.closed) {\n return this;\n }\n\n // Always replace the current state with the new state.\n this.state = state;\n\n const id = this.id;\n const scheduler = this.scheduler;\n\n //\n // Important implementation note:\n //\n // Actions only execute once by default, unless rescheduled from within the\n // scheduled callback. This allows us to implement single and repeat\n // actions via the same code path, without adding API surface area, as well\n // as mimic traditional recursion but across asynchronous boundaries.\n //\n // However, JS runtimes and timers distinguish between intervals achieved by\n // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n // serial `setTimeout` calls can be individually delayed, which delays\n // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n // guarantee the interval callback will be invoked more precisely to the\n // interval period, regardless of load.\n //\n // Therefore, we use `setInterval` to schedule single and repeat actions.\n // If the action reschedules itself with the same delay, the interval is not\n // canceled. If the action doesn't reschedule, or reschedules with a\n // different delay, the interval will be canceled after scheduled callback\n // execution.\n //\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n\n // Set the pending flag indicating that this action has been scheduled, or\n // has recursively rescheduled itself.\n this.pending = true;\n\n this.delay = delay;\n // If this action has already an async Id, don't request a new one.\n this.id = this.id ?? this.requestAsyncId(scheduler, this.id, delay);\n\n return this;\n }\n\n protected requestAsyncId(scheduler: AsyncScheduler, _id?: TimerHandle, delay: number = 0): TimerHandle {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n\n protected recycleAsyncId(_scheduler: AsyncScheduler, id?: TimerHandle, delay: number | null = 0): TimerHandle | undefined {\n // If this action is rescheduled with the same delay time, don't clear the interval id.\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n // Otherwise, if the action's delay time is different from the current delay,\n // or the action has been rescheduled before it's executed, clear the interval id\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n\n return undefined;\n }\n\n /**\n * Immediately executes this action and the `work` it contains.\n * @return {any}\n */\n public execute(state: T, delay: number): any {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n // Dequeue if the action didn't reschedule itself. Don't call\n // unsubscribe(), because the action could reschedule later.\n // For example:\n // ```\n // scheduler.schedule(function doWork(counter) {\n // /* ... I'm a busy worker bee ... */\n // var originalAction = this;\n // /* wait 100ms before rescheduling the action */\n // setTimeout(function () {\n // originalAction.schedule(counter + 1);\n // }, 100);\n // }, 1000);\n // ```\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n\n protected _execute(state: T, _delay: number): any {\n let errored: boolean = false;\n let errorValue: any;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n // HACK: Since code elsewhere is relying on the \"truthiness\" of the\n // return here, we can't have it return \"\" or 0 or false.\n // TODO: Clean this up when we refactor schedulers mid-version-8 or so.\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n\n unsubscribe() {\n if (!this.closed) {\n const { id, scheduler } = this;\n const { actions } = scheduler;\n\n this.work = this.state = this.scheduler = null!;\n this.pending = false;\n\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n\n this.delay = null!;\n super.unsubscribe();\n }\n }\n}\n", "import { Action } from './scheduler/Action';\nimport { Subscription } from './Subscription';\nimport { SchedulerLike, SchedulerAction } from './types';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an `Action`.\n *\n * ```ts\n * class Scheduler {\n * now(): number;\n * schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @class Scheduler\n * @deprecated Scheduler is an internal implementation detail of RxJS, and\n * should not be used directly. Rather, create your own class and implement\n * {@link SchedulerLike}. Will be made internal in v8.\n */\nexport class Scheduler implements SchedulerLike {\n public static now: () => number = dateTimestampProvider.now;\n\n constructor(private schedulerActionCtor: typeof Action, now: () => number = Scheduler.now) {\n this.now = now;\n }\n\n /**\n * A getter method that returns a number representing the current time\n * (at the time this function was called) according to the scheduler's own\n * internal clock.\n * @return {number} A number that represents the current time. May or may not\n * have a relation to wall-clock time. May or may not refer to a time unit\n * (e.g. milliseconds).\n */\n public now: () => number;\n\n /**\n * Schedules a function, `work`, for execution. May happen at some point in\n * the future, according to the `delay` parameter, if specified. May be passed\n * some context object, `state`, which will be passed to the `work` function.\n *\n * The given arguments will be processed an stored as an Action object in a\n * queue of actions.\n *\n * @param {function(state: ?T): ?Subscription} work A function representing a\n * task, or some unit of work to be executed by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler itself.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @return {Subscription} A subscription in order to be able to unsubscribe\n * the scheduled work.\n */\n public schedule(work: (this: SchedulerAction, state?: T) => void, delay: number = 0, state?: T): Subscription {\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Action } from './Action';\nimport { AsyncAction } from './AsyncAction';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncScheduler extends Scheduler {\n public actions: Array> = [];\n /**\n * A flag to indicate whether the Scheduler is currently executing a batch of\n * queued actions.\n * @type {boolean}\n * @internal\n */\n public _active: boolean = false;\n /**\n * An internal ID used to track the latest asynchronous task such as those\n * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n * others.\n * @type {any}\n * @internal\n */\n public _scheduled: TimerHandle | undefined;\n\n constructor(SchedulerAction: typeof Action, now: () => number = Scheduler.now) {\n super(SchedulerAction, now);\n }\n\n public flush(action: AsyncAction): void {\n const { actions } = this;\n\n if (this._active) {\n actions.push(action);\n return;\n }\n\n let error: any;\n this._active = true;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()!)); // exhaust the scheduler queue\n\n this._active = false;\n\n if (error) {\n while ((action = actions.shift()!)) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\n/**\n *\n * Async Scheduler\n *\n * Schedule task as if you used setTimeout(task, duration)\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asapScheduler} scheduler.\n *\n * ## Examples\n * Use async scheduler to delay task\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * const task = () => console.log('it works!');\n *\n * asyncScheduler.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n * ```\n *\n * Use async scheduler to repeat task in intervals\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * function task(state) {\n * console.log(state);\n * this.schedule(state + 1, 1000); // `this` references currently executing Action,\n * // which we reschedule with new state and delay\n * }\n *\n * asyncScheduler.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n * ```\n */\n\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\n\n/**\n * @deprecated Renamed to {@link asyncScheduler}. Will be removed in v8.\n */\nexport const async = asyncScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nimport { SchedulerAction } from '../types';\nimport { animationFrameProvider } from './animationFrameProvider';\nimport { TimerHandle } from './timerHandle';\n\nexport class AnimationFrameAction extends AsyncAction {\n constructor(protected scheduler: AnimationFrameScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If an animation frame has already been requested, don't request another\n // one. If an animation frame hasn't been requested yet, request one. Return\n // the current animation frame request id.\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined)));\n }\n\n protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle | undefined {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if (delay != null ? delay > 0 : this.delay > 0) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue has no remaining actions with the same async id,\n // cancel the requested animation frame and set the scheduled flag to\n // undefined so the next AnimationFrameAction will request its own.\n const { actions } = scheduler;\n if (id != null && actions[actions.length - 1]?.id !== id) {\n animationFrameProvider.cancelAnimationFrame(id as number);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AnimationFrameScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction): void {\n this._active = true;\n // The async id that effects a call to flush is stored in _scheduled.\n // Before executing an action, it's necessary to check the action's async\n // id to determine whether it's supposed to be executed in the current\n // flush.\n // Previous implementations of this method used a count to determine this,\n // but that was unsound, as actions that are unsubscribed - i.e. cancelled -\n // are removed from the actions array and that can shift actions that are\n // scheduled to be executed in a subsequent flush into positions at which\n // they are executed within the current flush.\n const flushId = this._scheduled;\n this._scheduled = undefined;\n\n const { actions } = this;\n let error: any;\n action = action || actions.shift()!;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n\n this._active = false;\n\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\n\n/**\n *\n * Animation Frame Scheduler\n *\n * Perform task when `window.requestAnimationFrame` would fire\n *\n * When `animationFrame` scheduler is used with delay, it will fall back to {@link asyncScheduler} scheduler\n * behaviour.\n *\n * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.\n * It makes sure scheduled task will happen just before next browser content repaint,\n * thus performing animations as efficiently as possible.\n *\n * ## Example\n * Schedule div height animation\n * ```ts\n * // html:
\n * import { animationFrameScheduler } from 'rxjs';\n *\n * const div = document.querySelector('div');\n *\n * animationFrameScheduler.schedule(function(height) {\n * div.style.height = height + \"px\";\n *\n * this.schedule(height + 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * }, 0, 0);\n *\n * // You will see a div element growing in height\n * ```\n */\n\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\n\n/**\n * @deprecated Renamed to {@link animationFrameScheduler}. Will be removed in v8.\n */\nexport const animationFrame = animationFrameScheduler;\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\n/**\n * A simple Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * Just emits 'complete', and nothing else.\n *\n * ![](empty.png)\n *\n * A simple Observable that only emits the complete notification. It can be used\n * for composing with other Observables, such as in a {@link mergeMap}.\n *\n * ## Examples\n *\n * Log complete notification\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n *\n * EMPTY.subscribe({\n * next: () => console.log('Next'),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Outputs\n * // Complete!\n * ```\n *\n * Emit the number 7, then complete\n *\n * ```ts\n * import { EMPTY, startWith } from 'rxjs';\n *\n * const result = EMPTY.pipe(startWith(7));\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // 7\n * ```\n *\n * Map and flatten only odd numbers to the sequence `'a'`, `'b'`, `'c'`\n *\n * ```ts\n * import { interval, mergeMap, of, EMPTY } from 'rxjs';\n *\n * const interval$ = interval(1000);\n * const result = interval$.pipe(\n * mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : EMPTY),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval, e.g. (0, 1, 2, 3, ...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1, print a, b, c (each on its own)\n * // if x % 2 is not equal to 1, nothing will be output\n * ```\n *\n * @see {@link Observable}\n * @see {@link NEVER}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const EMPTY = new Observable((subscriber) => subscriber.complete());\n\n/**\n * @param scheduler A {@link SchedulerLike} to use for scheduling\n * the emission of the complete notification.\n * @deprecated Replaced with the {@link EMPTY} constant or {@link scheduled} (e.g. `scheduled([], scheduler)`). Will be removed in v8.\n */\nexport function empty(scheduler?: SchedulerLike) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler: SchedulerLike) {\n return new Observable((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport function isScheduler(value: any): value is SchedulerLike {\n return value && isFunction(value.schedule);\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\n\nfunction last(arr: T[]): T | undefined {\n return arr[arr.length - 1];\n}\n\nexport function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\n\nexport function popScheduler(args: any[]): SchedulerLike | undefined {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\n\nexport function popNumber(args: any[], defaultValue: number): number {\n return typeof last(args) === 'number' ? args.pop()! : defaultValue;\n}\n", "export const isArrayLike = ((x: any): x is ArrayLike => x && typeof x.length === 'number' && typeof x !== 'function');", "import { isFunction } from \"./isFunction\";\n\n/**\n * Tests to see if the object is \"thennable\".\n * @param value the object to test\n */\nexport function isPromise(value: any): value is PromiseLike {\n return isFunction(value?.then);\n}\n", "import { InteropObservable } from '../types';\nimport { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\nexport function isInteropObservable(input: any): input is InteropObservable {\n return isFunction(input[Symbol_observable]);\n}\n", "import { isFunction } from './isFunction';\n\nexport function isAsyncIterable(obj: any): obj is AsyncIterable {\n return Symbol.asyncIterator && isFunction(obj?.[Symbol.asyncIterator]);\n}\n", "/**\n * Creates the TypeError to throw if an invalid object is passed to `from` or `scheduled`.\n * @param input The object that was passed.\n */\nexport function createInvalidObservableTypeError(input: any) {\n // TODO: We should create error codes that can be looked up, so this can be less verbose.\n return new TypeError(\n `You provided ${\n input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`\n } where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`\n );\n}\n", "export function getSymbolIterator(): symbol {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator' as any;\n }\n\n return Symbol.iterator;\n}\n\nexport const iterator = getSymbolIterator();\n", "import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being an Iterable */\nexport function isIterable(input: any): input is Iterable {\n return isFunction(input?.[Symbol_iterator]);\n}\n", "import { ReadableStreamLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport async function* readableStreamLikeToAsyncGenerator(readableStream: ReadableStreamLike): AsyncGenerator {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n return;\n }\n yield value!;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function isReadableStreamLike(obj: any): obj is ReadableStreamLike {\n // We don't want to use instanceof checks because they would return\n // false for instances from another Realm, like an + +

Histórico de versão

+ + + + + + + + + + + + + + + + + +
VersãoDataDescriçãoAutor
1.011/08/2023Criação do documentoEduardo Gurgel
+ + + + + + + + + + + + + + +
+ + +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/dashboards/dashboards/index.html b/dashboards/dashboards/index.html new file mode 100644 index 0000000..cdf9493 --- /dev/null +++ b/dashboards/dashboards/index.html @@ -0,0 +1,3035 @@ + + + + + + + + + + + + + + + + + + + + + + + Gráficos - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Dashboard

+

Introdução

+

Neste documento, apresentaremos as Dashboards criadas com a utilização das nossas fontes de dados. Também é disponibilizado o Repositorio, nele é possível vê as planilhas na qual extraimos os dados e o arquivo do PowerBi, mas o acesso é permitido somente a usuários que tenham o e-mail @aluno.unb.br.

+

Painel

+

Este é o modelo do painel que será usado para manipular os indicadores.

+

+ +

+

Figura 1: Painel TCU
+

+

1. Potência Acumulada Por Cenário do Plano Nacional de Energia 2050

+

Realizado com Dados do Plano Nacional de Energia 2050 de 2050 à 2015.

+
+ Potência Acumulada Por Cenário - PNE 2050 + +
+ +

+ +

+

Figura 2: Potência Acumulada (MW) por Cenário
+

+

2. Geração Período Médio Por Cenário do Plano Nacional de Energia 2050

+

Realizado com Dados do Plano Nacional de Energia 2050 de 2050 à 2015.

+
+ Potência Acumulada Por Cenário - PNE 2050 + +
+ +

+ +

+

Figura 3: Geração Período Médio (MW Médios)
+

+

3. Balanço de Potência Por Cenário do Plano Nacional de Energia 2050

+

Realizado com Dados do Plano Nacional de Energia 2050 de 2050 à 2015.

+
+ Potência Acumulada Por Cenário - PNE 2050 + +
+ +

+ +

+

Figura 4: Balanço de Potência (MW)
+

+

4. Participação por setor na matriz energética brasileira e mundial

+

Realizados com Dados do Energy Statistics Data Browser - IEA.

+
+ Energy Statistics Data Browser - IEA + +
+ +
+ +
+ +

Figura 5: Participação por setor na matriz energética brasileira

+

5. Empregabilidade ao longos dos anos e Empregabilidade das tecnologias ao longos dos anos

+

Realizado com Dados do Renewable Energy and Jobs de 2022 à 2013

+
+ Empregabilidade - Irena + +
+ +

+ +

+

Figura 6: Apresentação da Dash de Empregabilidade
+

+

6. Geração de energia por Tecnologia Brasil

+

Realizado com Dados do Operador Nacional do Sistema Elétrico - Geração Energia

+
+ Geração Energia - ONS + +
+ +

+ +

+

Figura 7: Visualização da Geração de energia por Tecnologia Brasil
+

+

7. Consumo Total EPE

+

Realizados com Dados da Empresa de Pesquisa Energética - EPE.

+
+ Empresa de Pesquisa Energética - EPE + +
+ +
+ +
+

Figura 8: Visualização do Consumo Total EPE
+

+

8. Variáveis estudadas no Balanço Energético Nacional

+

Realizados com Dados da Empresa de Pesquisa Energética - EPE.

+
+ Empresa de Pesquisa Energética - EPE + + + +
+ +
+ +
+ +

Figura 9: Visualização de todas as variáveis do Balanço Energético Nacional

+

9. Variáveis estudadas no Anuário Estatístico de Energia Elétrica

+

Realizados com Dados da Empresa de Pesquisa Energética - EPE. Todas as visualizações abaixo foram geradas a partir dos dados acima.

+
+ Empresa de Pesquisa Energética - EPE + +
+ +

Capacidade Instalada de Geração Elétrica

+
+ +
+ +

Figura 10: Capacidade Instalada de Geração Elétrica para os 10 Países com Maior Capacidade Instalada por Fonte do Último Ano

+

Geração Elétrica para os 10 Países com Maior Geração Elétrica

+
+ +
+ +

Figura 11: Geração Elétrica para os 10 Países com Maior Geração Elétrica por Fonte do Último Ano

+

Capacidade Instalada de Geração Elétrica e Geração Elétrica por Fonte no Brasil

+
+ +
+ +

Figura 12: Capacidade Instalada de Geração Elétrica e Geração Elétrica por Fonte no Brasil

+

Emissões Provenientes da Geração Elétrica do SIN, Sistema Isolado e Autoprodução

+
+ +
+ +

Figura 13: Emissões Provenientes da Geração Elétrica do SIN, Sistema Isolado e Autoprodução

+

Consumo Médio Total de Energia Elétrica por Subsistema e por Região

+
+ +
+ +

Figura 14: Consumo Médio Total de Energia Elétrica por Subsistema e por Região (kWh/mês)

+

Consumo Médio Residencial de Energia Elétrica por Subsistema e por Região

+
+ +
+ +

Figura 15: Consumo Médio Residencial de Energia Elétrica por Subsistema e por Região (kWh/mês)

+

Consumo Médio Anual de Energia Elétrica Per Capita por Subsistema e por Região

+
+ +
+ +

Figura 16: Consumo Médio Anual de Energia Elétrica Per Capita por Subsistema e por Região (kWh/hab)

+

8. Emissões de GEE Brasil

+

Realizados com Dados da Empresa de Pesquisa Energética - EPE. Todas as visualizações abaixo foram geradas a partir dos dados acima.

+
+ +
+ +

Figura 17: Emissões de GEE Brasil

+
+ Empresa de Pesquisa Energética - EPE + +
+ +

9. Evolução das fontes de Tecnologia

+

Realizados com Dados da Empresa de Pesquisa Energética - EPE. Todas as visualizações abaixo foram geradas a partir dos dados acima.

+
+ Empresa de Pesquisa Energética - EPE + +
+ +
+ +
+ +

Figura 18: Evolução das fontes de tecnologia

+

10. Custo por Tecnologia

+

Realizados com Dados do Our World in Data. Todas as visualizações abaixo foram geradas a partir dos dados acima.

+
+ Our World in Data + +
+
+ +
+

Figura 19: Custo por Tecnologia e Pais(US$/kilowatt-hour)

+

11. Custo por Investimento

+

Realizados com Dados do Our World in Data. Todas as visualizações abaixo foram geradas a partir dos dados acima.

+
+ Our World in Data + +
+
+ +
+

Figura 20: Investimento por Tecnologia no undo(US$ por Ano)

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/elicitacao/cenarios/index.html b/elicitacao/cenarios/index.html new file mode 100644 index 0000000..ee89502 --- /dev/null +++ b/elicitacao/cenarios/index.html @@ -0,0 +1,2744 @@ + + + + + + + + + + + + + + + + + + + + + + + Cenários - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Cenarios

+

Introdução

+

+Um cenário é basicamente uma história sobre pessoas realizando uma +atividade (Rosson e Carroll, 2002), e a partir deste pretexto, vamos adotar a técnica para descrever os cenários que o e-Título tange e pode ser acessível para cada função. +

+ +

Objetivo

+

+Os cenários podem ser utilizados em diversas etapas do processo, com diferentes objetivos: para descrever uma história num domínio de atividade, visando capturar requisitos e auxiliar no entendimento da atividade, levantar questões sobre a introdução de tecnologia, explorar diferentes soluções de design e avaliar se um produto satisfaz a necessidade dos seus usuários (Rosson e Carroll, 2002). +O objetivo da adoção da técnica neste projeto é tentar prever possíveis cenários que atinjam nossos casos de uso ou não, fazendo com que tenhamos a noção se nossa diagramação dos casos de uso tangem todos os casos que podem ser feitos em diferentes cenários pelos seu usuários, sendo uma técnica que requer menos custo e tempo quando comparados com modelos e protótipos complexos. Um cenário descreve o comportamento e a experiência de um ator(es). +

+ +

Cenários

+

C01: Visualizar Balanço Energético

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CenárioDescrição
TítuloVisualizar Balanço Energético
ObjetivoPermitir que os usuários visualizem o Balanço Energético
ContextoLocal: No PowerBi
Pré-condição: ter o software rodando e inserir o valor que deseja investir em determinada tecnologia
Pós-condição: Usuário consulta fontes e tecnologias.
RecursosConexão de internet, aplicativo instalado
EpisódiosUsuário entra no aplicativo
Usuário visualiza o Balanço Energético
Usuário visualiza as tabelas relacionadas as tecnologias como produção,importação e exportação
ExceçãoDados inexistente
+
Tabela 1 - Descrição das características do Cenário 01
+ +

+

C02: Consultar Fontes e Tecnologias

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CenárioDescrição
TítuloConsultar Fontes e Tecnologias
ObjetivoPermitir que os usuários consultem Fontes e Tecnologias.
ContextoLocal: No PowerBi
Pré-condição: ter o software rodando e inserir o valor que deseja investir em determinada tecnologia
Pós-condição: Usuário consulta fontes e tecnologias.
RecursosConexão de internet, aplicativo instalado
EpisódiosUsuário entra no aplicativo
Usuário seleciona as fontes e tecnologias
Usuário visualiza a fonte de determinada tecnologia e sua respectiva geração planejada entre 2015,2030,2040 e 2050
ExceçãoDados inexistente
+
Tabela 2 - Descrição das características do Cenário 02
+ +

+

C03: Inserir possível valor de investimento por tecnologia

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CenárioDescrição
TítuloInserir possível valor de investimento por tecnologia
ObjetivoPermitir que os usuários inseriram possível valor de investimento por tecnologia
ContextoLocal: No PowerBi
Pré-condição: ter o software rodando e inserir o valor que deseja investir em determinada tecnologia
Pós-condição: Usuário visualiza o valor da produção e emissão
AtoresUsuário do TCU.
RecursosConexão de internet, aplicativo instalado
EpisódiosUsuário entra no aplicativo
Usuário insere os valores de investimento para determinada tecnologia
Usuário visualiza projeção até 2050, relacionado as emissões dessa tecnologia, e os impactos positivos e negativos
ExceçãoDados inexistente
+
Tabela 3 - Descrição das características do Cenário 03
+ +

+

C04: Simular emissões

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CenárioDescrição
TítuloSimular emissões
ObjetivoPermitir que os usuários simulem emissões.
ContextoLocal: No PowerBi
Pré-condição: ter o software rodando
Pós-condição: Usuário visualiza as emissões de determinada tecnologia .
AtoresUsuário do TCU.
RecursosConexão de internet, aplicativo instalado
EpisódiosUsuário entra no aplicativo
Usuário seleciona os criterios da tecnologias que deseja vê as emissões
ExceçãoDados inexistente
+
Tabela 4 - Descrição das características do Cenário 04
+ +

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/elicitacao/entrevista/index.html b/elicitacao/entrevista/index.html new file mode 100644 index 0000000..290f5b5 --- /dev/null +++ b/elicitacao/entrevista/index.html @@ -0,0 +1,2702 @@ + + + + + + + + + + + + + + + + + + + + + + + Entrevista - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+ +
+
+ + + +
+
+ + + + + + + +

Entrevista

+

Introdução

+

Uma entrevista realizada com o cliente é um processo de interação entre um profissional ou equipe e um cliente, com o objetivo de coletar informações relevantes, compreender necessidades, expectativas, desafios e objetivos específicos do cliente. Essa interação ocorre frequentemente em diversos contextos, como negócios, serviços de consultoria, design, desenvolvimento de produtos, pesquisa de mercado, entre outros.

+

Metodologia

+

A entrevista com o cliente ocorre a cada duas semanas, durante às terças de forma virtual, via Teams. +Os entrevistados são profissionais da área de TI, energia. +Atuam no Tribunal de Contas da União.

+

Durante a entrevista, foi utilizado principalmente perguntas abertas para +permitir que os entrevistados expressassem livremente suas opiniões. Além disso foi apresentado uma proposta de protótipo, com objetivo de motiva-los a entender como resultaria o projeto final.

+

Foi utilizada a metodologia 5W2H (Tabela 1) é uma técnica de gerenciamento e planejamento que visa estabelecer um conjunto de diretrizes claras e abrangentes para a execução de projetos, tarefas ou ações.

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AcrônimoPergunta
WhatO quê
WhyPor quê
WhoQuem
WhenQuando
WhereOnde
HowComo
How muchQuanto
+

+

Perguntas feitas na entrevista utilizando a técnica 5W2H:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TipoPerguntas
What(O quê):1. Qual seria a frequência de uso ou acesso aos dados?
2. O que você acha que não deve faltar em uma dashboard?
Why(Por quê):3. Por que você usaria a dashboard, existe algum motivo específico?
Who(Quem):4. Com quem você pretende compartilhar ou exibir a dashboard?
Where(Onde):5. Você pretende usar apenas no local de trabalho para visualizar os dados, ou também em outro local, em casa?
When(Quando):6. Quando você pretende usar a dashboard? Somente no horário de trabalho ou outro horário?
How(Como):7. A partir do protótipo apresentado, como a dashboardo poderia ser melhorada? Você tem alguma sugestão de aprimoramento?
+

Requisitos elicitados

+

Legenda

+
    +
  • ENT: Entrevista
  • +
  • RF: Requisito funcional
  • +
  • RNF: Requisito não funcional
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdentificadorRequisitoTipo
ENT01Visualizar os dados de Potência Acumulada do Brasil e do MundoRF
ENT02Visualizar os dados de Geração Período Médio do BrasilRF
ENT03Visualizar os dados de Custo de Operação do Brasil e do MundoRF
ENT04Visualizar a fonte de dados de cada gráficoRF
ENT05Filtrar os dados atualizados de empregabilidade por fonte/tecnologiaRF
ENT06Filtrar os dados atualizados da matriz energética do BrasilRF
ENT07Filtrar uma matriz energética e verificar seu nível de emissõesRF
ENT08Filtrar a fonte de dados de cada gráficoRF
ENT09Simular diferentes cenários de demanda, para avaliar seu impacto nas projeções de emissãoRF
ENT10Comparar dados de Emissões Equivalentes de CO2 do Brasil e do mundoRF
ENT11Comparar dados de Custo de Operação do Brasil e do MundoRF
ENT12Comparar dados de Consumo de Gás Natural do Brasil e do MundoRF
ENT13Comparar dados atualizados de empregabilidadeRF
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/elicitacao/lexico/index.html b/elicitacao/lexico/index.html new file mode 100644 index 0000000..afd216b --- /dev/null +++ b/elicitacao/lexico/index.html @@ -0,0 +1,2529 @@ + + + + + + + + + + + + + + + + + + + + + + + Lexico - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Léxico

+

Introdução

+

Trata-se de uma técnica que procura descrever os símbolos de uma linguagem. O principal objetivo a ser perseguido pelos Engenheiros de Requisitos é a identificação de palavras ou frases peculiares ao meio social da aplicação sob estudo.

+

Metodologia

+

A metodologia é baseada no material apresentado em aula, sendo uso o slide dos professores Milene e Maurício. Trata-se de uma técnica que procura descrever os símbolos de uma linguagem. O principal objetivo a ser perseguido pelos Engenheiros de Requisitos é a identificação de palavras ou frases peculiares ao meio social da aplicação sob estudo.

+

Resultado

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DefiniçãoSinônimo(s)NoçãoImpactoClassificação
DadosBaseos dados são uma coleção de valores discretos que transmitem informações, descrevendo quantidade, qualidade, fatos, estatísticas, outras unidades básicas de significado, ou simplesmente sequências de símbolos que podem ser posteriormente interpretados.Os gráficos são construidos utilizando dadosEstado
Usuariopessoa,clientePessoa que utiliza o aplicativoUsuario visualiza os gráficosObjeto
FonteorigemO que dá origem a algo ou é o princípio de alguma coisa; origem, causaos dados foram extradaidos de tal FonteObjeto
VisualizarobservarTransformar conceitos abstratos em imagens mentalmente visíveisos graficos são visualizadosObjeto
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/elicitacao/personas/index.html b/elicitacao/personas/index.html new file mode 100644 index 0000000..2940ec9 --- /dev/null +++ b/elicitacao/personas/index.html @@ -0,0 +1,2712 @@ + + + + + + + + + + + + + + + + + + + + + + + Personas - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Personas

+

Introdução

+

As personas são possíveis usuários que podem interagir com um produto, aplicativo ou sistema. Tem por objetivo ajudar equipes de desenvolvimento e design a compreender melhor as necessidades, características e comportamentos dos diferentes tipos de usuários. As personas são baseadas em dados reais, como pesquisas de mercado, entrevistas, análises de dados e feedback de clientes.

+

Ao elaborar uma persona, pode incluir diversos dados, como idade, interesse, objetivo, profissão e até mesmo grau de escolaridade. A elaboração de personas ajuda a equipe a ter uma visão mais clara de quem são os usuários-alvo e como eles podem interagir com o produto ou serviço. Isso orienta o desenvolvimento e o design, garantindo que as decisões tomadas estejam alinhadas às necessidades reais dos usuários.

+

Perfil do usuário

+

O perfil do usuário é uma representação detalhada das características, preferências, comportamentos e necessidades de um indivíduo que interage com um produto, serviço ou sistema. Ele abrange informações demográficas, como idade, gênero e localização, além de dados psicográficos, como interesses, valores, estilo de vida e comportamento de consumo. +O perfil do usuário ajuda a equipe de desenvolvimento a compreender quem são os usuários-alvo e como eles se encaixam no contexto do produto ou serviço.

+

Personas

+

João Oliveira (Persona Primária)

+
+ +
+ +
+ +
+ Figura 1: João Oliveira (persona primária). +
Fonte: Thispersondoesnotexist +
+
+ +


+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InformaçãoPersona
NomeJoão Oliveira.
Idade35 Anos.
GêneroMasculino.
LocalidadeBrasília, DF, Brasil.
ProfissãoPesquisador em Energias Renováveis
CaracterísticaMestrado em Engenharia Elétrica, trabalha em instituição de pesquisa
NecessidadesAcesso a dados detalhados e atualizados sobre a transição energética, busca por gráficos, estatísticas e análises aprofundadas para suas pesquisas e relatórios acadêmicos.
+

Maria Silva (Persona Secundária)

+
+ +
+ +
+ +
+ Figura 1: Maria Silva (persona secundária). +
Fonte: Thispersondoesnotexist +
+
+ +


+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InformaçãoPersona
NomeMaria Silva
Idade28 Anos.
GêneroFeminino.
LocalidadeSão Paulo, SP, Brasil.
ProfissãoJornalista Especializada em Meio Ambiente
CaracterísticaEscreve para revistas e portais de notícias
NecessidadesAcesso a dados confiáveis e atualizados sobre a transição energética para embasar suas matérias, busca por informações que possam ser comunicadas de forma clara ao público.
+

Carlos Souza (Antipersona)

+
+ +
+ +
+ +
+ Figura 1: Carlos Souza (Antipersona). +
Fonte: Thispersondoesnotexist +
+
+ +


+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InformaçãoPersona
NomeCarlos Souza
Idade50 Anos.
GêneroMasculino.
LocalidadeRio de Janeiro, RJ, Brasil.
ProfissãoEmpresário do Setor de Combustíveis Fósseis
CaracterísticaCético em relação às energias renováveis
MotivaçãoNão acredita nos benefícios da transição energética, não tem interesse em informações que promovam energias alternativas.
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/elicitacao/priorizacao/MoScoW/index.html b/elicitacao/priorizacao/MoScoW/index.html new file mode 100644 index 0000000..9282675 --- /dev/null +++ b/elicitacao/priorizacao/MoScoW/index.html @@ -0,0 +1,2616 @@ + + + + + + + + + + + + + + + + + + + + + + + MoScoW - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

MoScoW

+

Introdução

+

O método de priorização de MoSCoW é uma técnica utilizada em gerenciamento de projetos para classificar os requisitos do projeto em ordem de prioridade. Os requisitos foram classificados de acordo com sua importância e relevância para o sucesso do projeto Simplenote.

+
    +
  • +

    Must Have: Esses são os requisitos ou funcionalidades essenciais e cruciais para o sucesso do projeto. Se qualquer um desses itens não for atendido, o projeto não será considerado bem-sucedido.

    +
  • +
  • +

    Should Have: Esses requisitos ou funcionalidades são importantes, mas não são essenciais como os "Must Have". Eles são considerados valiosos e adicionam valor ao projeto, mas o projeto ainda pode ser considerado concluído se alguns deles não forem atendidos.

    +
  • +
  • +

    Could Have: Esses requisitos ou funcionalidades são desejáveis, mas não são necessários para o sucesso do projeto. Se houver tempo e recursos disponíveis após a conclusão dos itens "Must Have" e "Should Have", esses itens podem ser considerados.

    +
  • +
  • +

    Won't Have (Não Terá): Também conhecido como "Would Have", esses são os requisitos ou funcionalidades que foram decididos que não serão incluídos no projeto atual. Isso pode ser devido a restrições de tempo, recursos ou prioridades.

    +
  • +
+

Legenda

+
    +
  • RF: Requisito funcional
  • +
  • RNF: Requisito não funcional
  • +
+

Must Have

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TipoRequisitoElicitação
RF01O usúario deve poder visualizar dados de Potência Acumulada do BrasilEntrevista
RF02O usúario deve poder visualizar os dados de Balanço de Potência do BrasilEntrevista
RF03O usúario deve poder visualizar os dados de Emissões Equivalentes de CO2 do BrasilStorytelling
RF04O usúario deve poder visualizar os dados de Consumo de Gás Natural do BrasilEntrevista
RF05O usúario deve poder visualizar os dados de Custo de Operação do BrasilEntrevista
RF06O usúario deve poder filtrar os dados atualizados de empregabilidade por fonte/tecnologiaStorytelling
RNF07O sistema deve ser simples e intuitivoStorytelling
RF08O usuário deve poder sincronizar dadosEntrevista
RF09O usuário deve poder filtrar os dados atualizados da matriz energética do BrasilEntrevista
+

Should Have

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TipoRequisitoElicitação
RF12O usuário deveria poder visualizar a fonte de dados de cada gráficoEntrevista
RNF13O sistema deveria exportar a dashboard em excelStorytelling
RNF14O usuário deveria poder acessar a dashboard sem internetEntrevista
RF15O usuário deveria poder pesquisar pelos seus gráficosEntrevista
RNF16A dashboard deveria ser compatível com dispositivos móveisEntrevista
RF18O usuário deveria poder definir cores para suas dashboardsEntrevista
+

Could Have

+ + + + + + + + + + + + + + + + + + + + + + + + + +
TipoRequisitoElicitação
RF21O usuario poderia ver uma mensagem sobre os indicadores do gráfico--
RF22O usuario poderia definir templates para suas visualizaçõesEntrevista
RF23O usuario poderia separar suas dashboards por filtrosEntrevista
+

Won't Have

+ + + + + + + + + + + + + + + + + + + + +
TipoRequisitoElicitação
RF29O usuário não poderá adicionar outra fonte de dados--
RF30O usuário não terá como inserir gráficos na dashboard--
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/elicitacao/storytelling/index.html b/elicitacao/storytelling/index.html new file mode 100644 index 0000000..2d5c40a --- /dev/null +++ b/elicitacao/storytelling/index.html @@ -0,0 +1,2612 @@ + + + + + + + + + + + + + + + + + + + + + + + Storytelling - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Storytelling

+

Introdução

+

A técnica do storytelling está baseada na criação de uma narrativa visual envolvente e impactante é essencial para transmitir de maneira eficaz os objetivos, resultados e significado do nosso projeto aos stakeholders e à equipe. Esta issue tem como objetivo desenvolver uma estratégia de storytelling que capte a atenção, transmita a mensagem-chave e conecte os elementos do projeto de forma coesa.

+

Narrativas

+

História de João Oliveira

+

Como um pesquisador em energias renováveis, desejo ter acesso a uma plataforma que forneça dados detalhados e atualizados sobre a transição energética. Eu gostaria de visualizar gráficos, estatísticas e análises aprofundadas que possam enriquecer minhas pesquisas e relatórios acadêmicos, permitindo-me tomar decisões informadas e contribuir para o avanço das energias renováveis.

+

História de Maria Silva

+

Sendo uma jornalista especializada em meio ambiente, necessito de uma fonte confiável de dados sobre a transição energética para embasar minhas matérias. Preciso acessar informações claras e atualizadas que possam ser comunicadas de forma compreensível ao público. Uma plataforma que me forneça gráficos visuais e estatísticas relevantes seria essencial para criar reportagens informativas e envolventes.

+

História de Carlos Souza

+

Enquanto empresário do setor de combustíveis fósseis, não tenho interesse nas energias renováveis e sou cético em relação à transição energética. Desejo que a plataforma me proporcione informações que estejam alinhadas com minha visão, sem promover energias alternativas. Isso me ajudaria a manter minha perspectiva e tomar decisões de negócios de acordo com as fontes de energia que considero mais relevantes.

+

Elicitação de Requisitos

+

Com base nas histórias criadas usando a técnica de storytelling, foi possível elicitar os requisitos presentes na tabela 1:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NúmeroRequisitoClassificação
ST01O usúario deve poder visualizar os dados de Emissões Equivalentes de CO2 do BrasilRF
ST02O sistema deveria exportar a dashboard em excelRNF
ST03O usuário deveria poder visualizar a fonte de dados de cada gráficoRF
ST04A dashboard deveria ser compatível com dispositivos móveisRNF
ST05O sistema deve ser simples e intuitivoRNF
ST06O usuário deve poder visualizar os dados de Consumo de Gás Natural do BrasilRF
ST07Ser capaz de funcionar sem internetRNF
+

Tabela 1: Requisitos elicitados

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/fonte_dados/dicionario/index.html b/fonte_dados/dicionario/index.html new file mode 100644 index 0000000..d5fb57f --- /dev/null +++ b/fonte_dados/dicionario/index.html @@ -0,0 +1,5721 @@ + + + + + + + + + + + + + + + + + + + + + + + Dicionário de Dados - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Dicionário de Dados

+

Introdução

+

Um Dicionário de Dados é uma ferramenta essencial para organizar, descrever e padronizar informações relacionadas a sistemas de dados e software. Ele fornece uma visão detalhada das estruturas de dados, incluindo definições, formatos e relacionamentos, facilitando a colaboração e garantindo a qualidade e integridade dos dados em projetos de TI e gerenciamento de informações. +Nesse documento, adicionamos o dicionário relacionado as tabelas presentes no banco de dados com separação por página do dashboard.

+

Página de Capacidade Instalada

+

Tabela: PotAcumPNE

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
Fonte_TecnologiaFonte ou TecnologiaNVARCHAR(50)Fonte ou Tecnologia da análiseNÃO NULO
Ano_2015Ano de 2015FLOATQuantidade no ano de 2015 (MW)NÃO NULO
Ano_2030Ano de 2030INTQuantidade no ano de 2030(MW)NÃO NULO
Ano_2040Ano de 2040INTQuantidade no ano de 2040(MW)NÃO NULO
Ano_2050Ano de 2050INTQuantidade no ano de 2050(MW)NÃO NULO
CenárioCenário do PNENVARCHAR(150)Cenário do PNE de análiseNÃO NULO
+

Página de Geração Período Médio

+

Tabela: GerPerMedPNE

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
Fonte_TecnologiaFonte ou TecnologiaNVARCHAR(50)Fonte ou Tecnologia da análiseNÃO NULO
Ano_2015Ano de 2015FLOATQuantidade no ano de 2015 (MW Médios)NÃO NULO
Ano_2030Ano de 2030INTQuantidade no ano de 2030 (MW Médios)NÃO NULO
Ano_2040Ano de 2040INTQuantidade no ano de 2040 (MW Médios)NÃO NULO
Ano_2050Ano de 2050INTQuantidade no ano de 2050 (MW Médios)NÃO NULO
CenárioCenário do PNENVARCHAR(150)Cenário do PNE de análise (MW Médios)NÃO NULO
+

Página de Balanço de Potência

+

Tabela: AtendPontaPNE

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
Fonte_TecnologiaFonte ou TecnologiaNVARCHAR(50)Fonte ou Tecnologia da análiseNÃO NULO
Ano_2015Ano de 2015FLOATQuantidade no ano de 2015 (MW)NÃO NULO
Ano_2030Ano de 2030INTQuantidade no ano de 2030 (MW)NÃO NULO
Ano_2040Ano de 2040INTQuantidade no ano de 2040 (MW)NÃO NULO
Ano_2050Ano de 2050INTQuantidade no ano de 2050 (MW)NÃO NULO
CenárioCenário do PNENVARCHAR(150)Cenário do PNE de análiseNÃO NULO
+

Tabela: DemMax(MW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
Demanda_MáximaDemanda MáximaINTQuantidade em MW de DemandaNÃO NULO
RegiãoRegiãoNVARCHAR(50)Região de análiseNÃO NULO
AnoAno de análiseSMALLINTAno de análiseNÃO NULO
+

Página de Matriz Energética

+

Tabela: Matriz energética - Brasil

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoSMALLINTAno de análiseNÃO NULO
CarvãoCarvãoINTQuantidade vinda do carvãoNÃO NULO
Gás NaturalGás NaturalINTQuantidade vinda do Gás NaturalNÃO NULO
NuclearNuclearINTQuantidade vinda de energia NuclearNÃO NULO
HidroHidroINTQuantidade vinda de HidroNÃO NULO
Biocombustíveis e resíduosBiocombustíveis e resíduosINTQuantidade vinda de Biocombustíveis e resíduosNÃO NULO
ÓleoÓleoINTQuantidade vinda de óleoNÃO NULO
Eólica, solar, etc.Eólica, solar, etc.INTQuantidade vinda de Eólica, solar, etc.NÃO NULO
UnidadesUnidadesNVARCHAR(50)Unidade de medidaNÃO NULO
+

Tabela: Matriz energética - Mundo

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoSMALLINTAno de análiseNÃO NULO
CarvãoCarvãoINTQuantidade vinda do carvãoNÃO NULO
Gás NaturalGás NaturalINTQuantidade vinda do Gás NaturalNÃO NULO
NuclearNuclearINTQuantidade vinda de energia NuclearNÃO NULO
HidroHidroINTQuantidade vinda de HidroNÃO NULO
Biocombustíveis e resíduosBiocombustíveis e resíduosINTQuantidade vinda de Biocombustíveis e resíduosNÃO NULO
ÓleoÓleoINTQuantidade vinda de óleoNÃO NULO
Eólica, solar, etc.Eólica, solar, etc.INTQuantidade vinda de Eólica, solar, etc.NÃO NULO
UnidadesUnidadesNVARCHAR(50)Unidade de medidaNÃO NULO
+

Página de Empregabilidade

+

Tabela: Empregabilidade no Brasil

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
PaisPaisNVARCHAR(50)País de análiseNÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
TecnologiaTecnologiaNVARCHAR(50)Tecnologia de análiseNÃO NULO
EmpregabilidadeEmpregabilidadeSMALLINTNumero de empregabilidade (MIL)
+

Página de Consumo Total EPE

+

Tabela: CT_Consumo_GWh

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
nomMesNome do mêsNVARCHAR(50)Mês de análise
Ano_2016Ano de 2016FLOATQuantidade no ano de 2016
Ano_2017Ano de 2017NVARCHAR(50)Quantidade no ano de 2017
Ano_2018Ano de 2018NVARCHAR(50)Quantidade no ano de 2018
Ano_2019Ano de 2019FLOATQuantidade no ano de 2019
Ano_2020Ano de 2020FLOATQuantidade no ano de 2020
Ano_2021Ano de 2021FLOATQuantidade no ano de 2021
Ano_2022Ano de 2022FLOATQuantidade no ano de 2022
Ano_2023Ano de 2023FLOATQuantidade no ano de 2023
+

Tabela: CT_Consumo_Médio_por_classe

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
nomMesNome do mêsNVARCHAR(50)Mês de análise
Ano_2016Ano de 2016FLOATQuantidade no ano de 2016
Ano_2017Ano de 2017NVARCHAR(50)Quantidade no ano de 2017
Ano_2018Ano de 2018NVARCHAR(50)Quantidade no ano de 2018
Ano_2019Ano de 2019FLOATQuantidade no ano de 2019
Ano_2020Ano de 2020FLOATQuantidade no ano de 2020
Ano_2021Ano de 2021FLOATQuantidade no ano de 2021
Ano_2022Ano de 2022FLOATQuantidade no ano de 2022
Ano_2023Ano de 2023FLOATQuantidade no ano de 2023
+

Tabela: CT_Consumo_acumulado_região_GWh

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
nomRegiaoNome RegiãoNVARCHAR(50)Região de análise
ValorTotalValor TotalFLOATQuantidade de consumo
+

Página BEN

+

Tabela: BEN_total

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
CONTAContaNVARCHAR(50)Ramo analisadoNÃO NULO
PRODUÇÃOProduçãoINTQuantidade de produçãoNÃO NULO
IMPORTAÇÃOImportaçãoINTQuantidade de importaçãoNÃO NULO
VARIAÇÃO_DE_ESTOQUESVariação de EstoquesSMALLINTQuantidade da variação de estoquesNÃO NULO
EXPORTAÇÃOExportaçãoINTQuantidade de exportaçãoNÃO NULO
NÃO_APROVEITADANão AproveitadaSMALLINTQuantidade não aproveitadaNÃO NULO
REINJEÇÃOReinjeçãoSMALLINTQuantidade reinjetadaNÃO NULO
CONSUMO_FINAL_NÃO_ENERGÉTICOConsumo Final Não EnergéticoSMALLINTQuantidade do consumo final não energéticoNÃO NULO
SETOR_ENERGÉTICOSetor EnergéticoSMALLINTQuantidade no setor energéticoNÃO NULO
RESIDENCIALResidencialSMALLINTQuantidade residencialNÃO NULO
COMERCIALComercialSMALLINTQuantidade comercialNÃO NULO
PÚBLICOPúblicoSMALLINTQuantidade no setor públicoNÃO NULO
AGROPECUÁRIOAgropecuárioSMALLINTQuantidade no setor agropecuárioNÃO NULO
RODOVIÁRIORodoviárioINTQuantidade no setor rodoviárioNÃO NULO
FERROVIÁRIOFerroviárioSMALLINTQuantidade no setor ferroviárioNÃO NULO
AÉREOAéroSMALLINTQuantidade no setor aéroNÃO NULO
HIDROVIÁRIOHidroviárioSMALLINTQuantidade no setor hidroviárioNÃO NULO
INDUSTRIAL_TOTALIndustrial TotalSMALLINTQuantidade industrial totalNÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Página Extras - PNE

+

Tabela: EmTotPNE

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
PeríodoPeríodoNVARCHAR(50)Período de análiseNÃO NULO
Ano_2015Ano de 2015FLOATQuantidade de emissões no ano de 2015NÃO NULO
Ano_2030Ano de 2030TINYINTQuantidade de emissões no ano de 2030NÃO NULO
Ano_2040Ano de 2040TINYINTQuantidade de emissões no ano de 2040NÃO NULO
Ano_2050Ano de 2050TINYINTQuantidade de emissões no ano de 2050NÃO NULO
CenárioCenárioNVARCHAR(50)Cenário PNENÃO NULO
+

Tabela: CustoTotPNE

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
Tipo_ExpansãoTipo de expansãoNVARCHAR(50)Tipo de expansão analisadaNÃO NULO
Ano_2012Ano de 2012FLOATCusto total no ano de 2012NÃO NULO
Ano_2015Ano de 2015SMALLINTCusto total no ano de 2015NÃO NULO
CenárioCenárioNVARCHAR(150)Cenário do PNENÃO NULO
+

Tabela:ConsGasNatPNE

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
PeríodoPeríodoNVARCHAR(50)Período médioNÃO NULO
Ano_2015Ano de 2015FLOATConsumo de Gás Natural no ano de 2015 (Mm^3/dia)NÃO NULO
Ano_2030Ano de 2030TINYINTConsumo de Gás Natural no ano de 2030 (Mm^3/dia)NÃO NULO
Ano_2040Ano de 2040TINYINTConsumo de Gás Natural no ano de 2040 (Mm^3/dia)NÃO NULO
Ano_2050Ano de 2050SMALLINTConsumo de Gás Natural no ano de 2050 (Mm^3/dia)NÃO NULO
CenárioCenárioNVARCHAR(150)Cenário do PNENÃO NULO
+

Página Mundo

+

Tabela: Capacidade_Instalada_Matriz_Eletrica_BR_ONS

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoSMALLINTAno de análise
EólicaEólicaFLOATCapacidade instalada na geração Eólica
TérmicaTérmicaFLOATCapacidade instalada na geração Térmica
HidráulicaHidráulicaFLOATCapacidade instalada na geração Hidráulica
NuclearNuclearFLOATCapacidade instalada na geração Nuclear
SolarSolarFLOATCapacidade instalada na geração Solar
MMGDMMGDFLOATCapacidade instalada na geração MMGD
+

Tabela: CapInstBioPaises(GW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoNVARCHAR(50)Ano de análiseNÃO NULO
PaísPaísTINYINTPaís de análiseNÃO NULO
Capacidade_InstaladaCapacidade InstaladaSMALLINTQuantidade de Capacidade instalada (GW)NÃO NULO
+

Tabela: CapInstBioPaises(GW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoNVARCHAR(50)Ano de análiseNÃO NULO
PaísPaísTINYINTPaís de análiseNÃO NULO
Capacidade_InstaladaCapacidade InstaladaSMALLINTQuantidade de Capacidade instalada de geração biomassa (GW)NÃO NULO
+

Tabela: CapInstEolPaises(GW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoNVARCHAR(50)Ano de análiseNÃO NULO
PaísPaísTINYINTPaís de análiseNÃO NULO
Capacidade_InstaladaCapacidade InstaladaSMALLINTQuantidade de Capacidade instalada de geração eólica (GW)NÃO NULO
+

Tabela:CapInstFonte(MW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoNVARCHAR(50)Ano de análiseNÃO NULO
PaísPaísTINYINTPaís de análiseNÃO NULO
Capacidade_InstaladaCapacidade InstaladaSMALLINTQuantidade de Capacidade instalada (MW)NÃO NULO
+

Tabela: CapInstNucPaises (GW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoNVARCHAR(50)Ano de análiseNÃO NULO
PaísPaísTINYINTPaís de análiseNÃO NULO
Capacidade_InstaladaCapacidade InstaladaSMALLINTQuantidade de Capacidade instalada de geração nuclear(GW)NÃO NULO
+

Tabela: CapInstRenPaises(GW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoNVARCHAR(50)Ano de análiseNÃO NULO
PaísPaísTINYINTPaís de análiseNÃO NULO
Capacidade_InstaladaCapacidade InstaladaSMALLINTQuantidade de Capacidade instalada (GW)NÃO NULO
+

Tabela: CapInstSolPaises(GW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoNVARCHAR(50)Ano de análiseNÃO NULO
PaísPaísTINYINTPaís de análiseNÃO NULO
Capacidade_InstaladaCapacidade InstaladaSMALLINTQuantidade de Capacidade instalada de geração solar (GW)NÃO NULO
+

Tabela: CapInstTermFosPaises(GW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoNVARCHAR(50)Ano de análiseNÃO NULO
PaísPaísTINYINTPaís de análiseNÃO NULO
Capacidade_InstaladaCapacidade InstaladaSMALLINTQuantidade de Capacidade instalada de térmica fóssil (GW)NÃO NULO
+

Tabela: CapInstTermFosPaises(GW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoNVARCHAR(50)Ano de análiseNÃO NULO
PaísPaísTINYINTPaís de análiseNÃO NULO
Capacidade_InstaladaCapacidade InstaladaSMALLINTQuantidade de Capacidade instalada de térmica fóssil (GW)NÃO NULO
+

Tabela: CapInstHidPaises(GW)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
AnoAnoNVARCHAR(50)Ano de análiseNÃO NULO
PaísPaísTINYINTPaís de análiseNÃO NULO
Capacidade_InstaladaCapacidade InstaladaSMALLINTQuantidade de Capacidade instalada de hidrelétrica (GW)NÃO NULO
+

Tabela:GerBioPaises(TWh)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
PaísPaísNVARCHAR(50)País de análiseNÃO NULO
GeraçãoGeraçãoTINYINTQuantidade de geração - biomassa (TWh)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela:GerEolPaises(TWh)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
PaísPaísNVARCHAR(50)País de análiseNÃO NULO
GeraçãoGeraçãoTINYINTQuantidade de geração - eólica(TWh)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela:GerHidPaises(TWh)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
PaísPaísNVARCHAR(50)País de análiseNÃO NULO
GeraçãoGeraçãoTINYINTQuantidade de geração - hidrelétrica (TWh)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela:GerRenPaises(TWh)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
PaísPaísNVARCHAR(50)País de análiseNÃO NULO
GeraçãoGeraçãoTINYINTQuantidade de geração - fontes renováveis (TWh)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela:GerSolPaises(TWh)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
PaísPaísNVARCHAR(50)País de análiseNÃO NULO
GeraçãoGeraçãoTINYINTQuantidade de geração - solar (TWh)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela:GerTermFosPaises(TWh)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
PaísPaísNVARCHAR(50)País de análiseNÃO NULO
GeraçãoGeraçãoTINYINTQuantidade de geração - térmica fossilr (TWh)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Página Brasil

+

Tabela:GelElFonte(GWh)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
FonteFonteNVARCHAR(50)Fonte de análiseNÃO NULO
GeraçãoGeraçãoINTQuantidade de geração elétrica (TWh)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela:EmGEESistIso(MtCO2)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
FonteFonteNVARCHAR(50)Fonte de análiseNÃO NULO
Emissões_GEEEmissão de GEEINTQuantidade de emissão de GEE (MtCO2)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela:EmGEEGerEl(MtCO2)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
FonteFonteNVARCHAR(50)Fonte de análiseNÃO NULO
Emissões_GEEEmissão de GEEINTQuantidade de emissão de GEE (MtCO2)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela:EmGEESIN(MtCO2)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
FonteFonteNVARCHAR(50)Fonte de análiseNÃO NULO
Emissões_GEEEmissão de GEEINTQuantidade de emissão de GEE (MtCO2)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela: ConsMedResReg(kWh_mes)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
RegiãoRegiãoNVARCHAR(50)Fonte de análiseNÃO NULO
Consumo_médio_residencialConsumo Médio ResidencialFLOATQuantidade de consumo médio residencial (kWH/mês)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela: ConsMedResSubsis(kWh_mes)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
RegiãoRegiãoNVARCHAR(50)Fonte de análiseNÃO NULO
Consumo_médio_residencialConsumo Médio ResidencialFLOATQuantidade de consumo médio residencial no subsistema (kWH/mês)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela:ConsMedTotReg(kWh_mes)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
RegiãoRegiãoNVARCHAR(50)Fonte de análiseNÃO NULO
Consumo_médio_residencialConsumo Médio ResidencialFLOATQuantidade de consumo médio residencial na região (kWH/mês)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela: ConsMedTotSubsis(kWh_mes)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
RegiãoRegiãoNVARCHAR(50)Fonte de análiseNÃO NULO
Consumo_médio_residencialConsumo Médio ResidencialFLOATQuantidade de consumo médio residencial na região (kWH/mês)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela: ConsMedAnPerCapReg(kWh_hab)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
RegiãoRegiãoNVARCHAR(50)Região de análiseNÃO NULO
Consumo_médio_anual_per_capitaConsumo Médio Anual Per CapitaFLOATConsumo Médio Anual Per Capita l na região (kWh_hab)NÃO NULO
AnoAnoSMALLINTAno de análiseNÃO NULO
+

Tabela: emissoes_co2_Br

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
CO2_GWP_SAR_GgGWP - SAR Gg (CO2e)NVARCHAR(50)Setor de análise
Ano_1991Ano 1991INTQuantidade de emissões em 1991
Ano_1992Ano 1992INTQuantidade de emissões em 1992
Ano_1993Ano 1993INTQuantidade de emissões em 1993
Ano_1994Ano 1994INTQuantidade de emissões em 1994
Ano_1995Ano 1995INTQuantidade de emissões em 1995
Ano_1996Ano 1996INTQuantidade de emissões em 1996
Ano_1997Ano 1997INTQuantidade de emissões em 1997
Ano_1998Ano 1998INTQuantidade de emissões em 1998
Ano_1999Ano 1999INTQuantidade de emissões em 1999
Ano_2000Ano 2000INTQuantidade de emissões em 2000
Ano_2001Ano 2001INTQuantidade de emissões em 2001
Ano_2002Ano 2002INTQuantidade de emissões em 2002
Ano_2003Ano 2003INTQuantidade de emissões em 2003
Ano_2004Ano 2004INTQuantidade de emissões em 2004
Ano_2005Ano 2005INTQuantidade de emissões em 2005
Ano_2006Ano 2006INTQuantidade de emissões em 2006
Ano_2007Ano 2007INTQuantidade de emissões em 2007
Ano_2008Ano 2008INTQuantidade de emissões em 2008
Ano_2009Ano 2009INTQuantidade de emissões em 2009
Ano_2010Ano 2010INTQuantidade de emissões em 2010
Ano_2011Ano 2011INTQuantidade de emissões em 2011
Ano_2012Ano 2012INTQuantidade de emissões em 2012
Ano_2013Ano 2013INTQuantidade de emissões em 2013
Ano_2014Ano 2014INTQuantidade de emissões em 2014
Ano_2015Ano 2015INTQuantidade de emissões em 2015
Ano_2016Ano 2016INTQuantidade de emissões em 2016
Ano_2017Ano 2017INTQuantidade de emissões em 2017
Ano_2018Ano 2018INTQuantidade de emissões em 2018
Ano_2019Ano 2019INTQuantidade de emissões em 2019
Ano_2020Ano 2020INTQuantidade de emissões em 2020
+

Tabela: Evolucao_Energia_1970_2022

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DADONOME DO CAMPOTIPO DO DADODESCRIÇÃORESTRIÇÃO
ANOAnoVARCHAR(150)Ano de análise
NÃO_RENOVÁVELNão RenovávelVARCHAR(150)Produção de enregia - Não renováveis ( 103tep)
PETRÓLEOPetróleoVARCHAR(150)Produção de enregia - Petróleo ( 103tep)
GÁS_NATURALGás NaturalVARCHAR(150)Produção de enregia - Gás Natural ( 103tep)
CARVÃO_VAPORCarvão - VaporVARCHAR(150)Produção de enregia -Carvão vapor ( 103tep)
CARVÃO_METALÚRGICOCarvão - MetaluigicoVARCHAR(150)Produção de enregia - Carvão metalúrgico ( 103tep)
UR NIO_U3O8Urânio U3O8VARCHAR(150)Produção de enregia - Urânio ( 103tep)
RENOVÁVELRenovávelVARCHAR(150)Produção de enregia - Renovaveis ( 103tep)
ENERGIA_HIDRÁULICAEnergia HidráulicaVARCHAR(150)Produção de enregia - Energia Hidráulica( 103tep)
LENHALenhaVARCHAR(150)Produção de enregia - Lenha ( 103tep)
PRODUTOS_DA_CANAProdutos da CanaVARCHAR(150)Produção de enregia - Produtos da Cana ( 103tep)
EÓLICAEólicaVARCHAR(150)Produção de enregia - Eólica ( 103tep)
SOLARSolarVARCHAR(150)Produção de enregia - Solar ( 103tep)
OUTRAS_RENOVÁVEISOutras RenováveisVARCHAR(150)Produção de enregia - Outras Renováveis ( 103tep)
TOTALTotalVARCHAR(150)Produção de enregia - Total ( 103tep)
+

Histórico de versão

+ + + + + + + + + + + + + + + + + +
VersãoDataDescriçãoAutor
1.004/07/2023Criação do documento e adição de conteúdoUgor Brandão
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/fonte_dados/estudos_subsidio/index.html b/fonte_dados/estudos_subsidio/index.html new file mode 100644 index 0000000..aed0e71 --- /dev/null +++ b/fonte_dados/estudos_subsidio/index.html @@ -0,0 +1,2502 @@ + + + + + + + + + + + + + + + + + + + + + + + Estudos Subsidios - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Estudo sobre Subsídios para Transição Energética

+

Alt text

+

Figura 1: Origem da pesquisa sobre subsidios Fonte: Aline/TCU (2023).

+

Fontes Mencionadas

+
    +
  • IEA
  • +
  • INESC
  • +
  • BNDES
  • +
+

Dados Encontrados

+

Renovaveis

+
    +
  • Nota: Não encontrado
  • +
+

Fosseis

+

BNDES

+
    +
  • Nota: Financiamento por setores, podendo ser extraidos via api
  • +
+

Aneel

+
    +
  • Nota: Subsidios no setor de energia elétrica dos anos de 2018 até 2023, Subsidios por tipo, região, ano, distribuidora e região.
  • +
+

Dados sobre Operações de Financiamento

+ +

Dados sobre Investimentos Energéticos (Ano de 2022)

+ +

Documento sobre Investimentos Energéticos

+

Financing clean energy transitions in emerging and developing economies

+
    +
  • Reduções de emissões de CO2 em cenários climáticos da AIE em relação aos STEPS nos EMDEs
  • +
  • Curva de custo de redução das emissões EMDE evitadas na FDS 2020 2030
  • +
  • Investimento em energia EMDE por tipo de fornecedor
  • +
+

World Energy Investment 2022

+

Share of Clean Energy Investment

+
    +
  • Mundo/Brasil: Link
  • +
+

Investimento Total por Região no Cenário de Desenvolvimento Sustentável

+

Empresas e Programas Relacionados

+

Empresas Habilitadas pelo PADIS

+ +

Sub-rogação da Conta de Consumo de Combustíveis (CCC)

+ +

Biocombustível Social

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/fonte_dados/fonte_dados/index.html b/fonte_dados/fonte_dados/index.html new file mode 100644 index 0000000..9c7d398 --- /dev/null +++ b/fonte_dados/fonte_dados/index.html @@ -0,0 +1,3054 @@ + + + + + + + + + + + + + + + + + + + + + + + Fonte de dados - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Fonte de dados

+

Introdução

+

Neste documento, apresentamos as fontes de dados encontradas e sua relevância para o nosso projeto de análise.

+

Legenda

+

Abaixo estão listadas algumas legendas que serão utilizadas nas tabelas dos requisitos a seguir.

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LegendaArtefato
TabelaO nome da tabela que contém o campo.
CampoO nome do campo ou coluna na tabela.
DescriçãoUma breve descrição do campo e das informações que ele representa.
Tipo de DadoO tipo de dado armazenado no campo (inteiro, texto, data, decimal, etc.).
RestriçõesQuaisquer restrições ou regras aplicáveis ao campo (chave primária, chave estrangeira, formato válido, etc.).
+

+

Fonte de dados

+

As tabelas contidas dentros dos toggles evidenciam o dados que encontramos.

+
+ Operador Nacional do Sistema Elétrico - Geração Energia + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosOperador Nacional do Sistema Elétrico
Tipo de dados.xlsx
+
+ +
+ Anuário Estatístico de Energia Elétrica + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosEmpresa de Pesquisa Energética
Relatório SínteseRelatório Síntese.pdf +
Tipo de dados.xlsx
+
+ +
+ Balanço Energético Nacional 2023 + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosEmpresa de Pesquisa energética
Relatório SínteseRelatório Síntese.pdf +
Tipo de dados.csv
+ +
+ +
+ Plano Nacional de Energia 2050 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosEmpresa de Pesquisa energética
Relatório SínteseRelatório Síntese.pdf +
Tipo de dados.pdf, .csv
+ +
+ +
+ Renewable Energy and Jobs - Annual Review 2022 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInternational Renewable Energy Agency
Relatório 2022Renewable Energy and Jobs - Annual Review 2022 +
Tipo de dados.pdf, .csv
+
+ +
+ Renewable Energy and Jobs - Annual Review 2021 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInternational Renewable Energy Agency
Relatório 2021Renewable Energy and Jobs - Annual Review 2021 +
Tipo de dados.pdf
+
+ +
+ Renewable Energy and Jobs - Annual Review 2020 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInternational Renewable Energy Agency
Relatório 2020Renewable Energy and Jobs - Annual Review 2020 +
Tipo de dados.pdf
+
+ +
+ Renewable Energy and Jobs - Annual Review 2019 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInternational Renewable Energy Agency
Relatório 2019Renewable Energy and Jobs - Annual Review 2019 +
Tipo de dados.pdf
+
+ +
+ Renewable Energy and Jobs - Annual Review 2018 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInternational Renewable Energy Agency
Relatório 2018Renewable Energy and Jobs - Annual Review 2018 +
Tipo de dados.pdf
+
+ +
+ Renewable Energy and Jobs - Annual Review 2017 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInternational Renewable Energy Agency
Relatório 2017Renewable Energy and Jobs - Annual Review 2017 +
Tipo de dados.pdf
+
+ +
+ Renewable Energy and Jobs - Annual Review 2016 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInternational Renewable Energy Agency
Relatório 2016Renewable Energy and Jobs - Annual Review 2016 +
Tipo de dados.pdf
+
+ +
+ Renewable Energy and Jobs - Annual Review 2015 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInternational Renewable Energy Agency
Relatório 2015Renewable Energy and Jobs - Annual Review 2015 +
Tipo de dados.pdf
+
+ +
+ Renewable Energy and Jobs - Annual Review 2014 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInternational Renewable Energy Agency
Relatório 2014Renewable Energy and Jobs - Annual Review 2014 +
Tipo de dados.pdf
+
+ +
+ Renewable Energy and Jobs - Annual Review 2013 + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInternational Renewable Energy Agency
Relatório 2013Renewable Energy and Jobs - Annual Review 2013 +
Tipo de dados.pdf
+
+ +
+ Sistema de Informações Energéticas - Ministério de Minas e Energia + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosSistema de Informações Energéticas - Ministério de Minas e Energia
Matriz de Balanço energético NacionalSistema de Informações Energéticas - Ministério de Minas e Energia +
Tipo de dados.xlsx
+
+
+ Global Trends in Renewable Energy Investment 2019 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInvestment in solar energy technology. + +
Custo de Investimento por TecnologiaGlobal Trends in Renewable Energy Investment 2019 +
Tipo de dados.xlsx
+
+ +
+ Renewable Power Generation Costs in 2021 + + + + + + + + + + + + + + + + + + + + + + +
AnexosReferência
Referência dos dadosInvestment in solar energy technology. + +
Custo por TecnologiaRenewable Power Generation Costs in 2021 +
Tipo de dados.xlsx
+
+ + +


+

Histórico de versão

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VersãoDataDescriçãoAutor(es)
1.009/07/2023Criação do documentoEduardo
1.110/07/2023Adição da fonte Plano Nacional de EnergiaVictório
1.302/08/2023Adição das fontes do IrenaCaio Vitor
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..c9cb3bc --- /dev/null +++ b/index.html @@ -0,0 +1,2778 @@ + + + + + + + + + + + + + + + + + + + + + PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Pipeline de Dados

+

Pipeline de dados e análises para modelagem de curvas de custo de marginal de abatimento do carbono das diversas alternativas do setor energético brasileiro para fins de suportar avaliação de custo-efetividade de políticas de transição energética do país.

+

Mentores: Aline, TCU

+

Painel

+

📊 Acesse o painel

+

+

https://github.com/ResidenciaTICBrisa/04_PipelineTCU/assets/51385738/4ffb7fb4-638c-4a2a-8292-6032c8efb94c

+

Sobre o projeto

+

+

O pipeline de dados é um projeto que tem o objetivo de reunir fontes de dados em um painel centralizado e eficiente, possibilitando a coleta, processamento e transformação de informações de diversas origens. +No contexto da transição energética brasileira, o pipeline de dados desempenha um papel fundamental, à medida que o Brasil se compromete com a transformação de sua matriz energética até o ano de 2050, surge a necessidade de monitorar, analisar e tomar decisões informadas se torna ainda mais crucial. +Esse projeto pode ser utilizado para modelar diferentes cenários de transição energética, levando em consideração variáveis como investimentos em infraestrutura, impactos ambientais e socioeconômicos. Essa análise abrangente auxilia na formulação de estratégias políticas e na definição de metas realistas para alcançar os objetivos da transição até 2050.

+ +

Resultados Esperados

+

+

levantamento de dados públicos de fontes nacionais e internacionais, arquitetura, análises e propostas de curva de custo marginal de abatimento de carbono das diversas alternativas para transição energética brasileira, de forma a auxiliar a auditoria do processo, realizado pelo MCTI e MME, pelo TCU.

+

BRISA

+

+

A BRISA Sociedade para o Desenvolvimento da Tecnologia da Informação, em parceria com a UnB campus Gama e LAPPIS, vai capacitar estudantes de cursos de tecnologias, graduação e ensino técnico, para se tornarem desenvolvedores de sistemas nas tecnologias mais atuais de informática e comunicações. A BRISA conta com recursos da Lei de Informática, através de Programa Prioritário do Ministério da Ciência, Tecnologia e inovações – MCTI, coordenado pela Softex.

+

Tecnologias

+

+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
Microsoft AzureData FactorySQL ServerPower Bi
+ +

Visualização do PowerBi e Fontes de Dados

+

+

Por Questões de Permissão disponíveis apenas para membros da organização "@unb.br"

+

Página no Share Point

+

Clique aqui para acessar o painel

+

Rodando o Projeto

+

+

Clonando o Projeto

+
$ git clone https://github.com/ResidenciaTICBrisa/04_PipelineTCU.git
+$ cd scripts
+
+

Instalando o Python

+

Python Download

+

Rodando os scripts em Python

+
$ python main.py
+
+

Colaboradores

+

+ + + + + + + +
+ + Foto Caio Vitor
+ + Caio Vitor + +
+
+ + Foto Eduardo Gurgel
+ + Eduardo Gurgel + +
+
+ + Foto Pedro Braga
+ + Pedro Braga + +
+
+ + Foto Ugor Costa
+ + Ugor Costa + +
+
+ + Foto Victor
+ + Victor Lázaro + +
+
+ +


+

Licença

+

+

MIT

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/modelagem/agil/backlog/index.html b/modelagem/agil/backlog/index.html new file mode 100644 index 0000000..515cb56 --- /dev/null +++ b/modelagem/agil/backlog/index.html @@ -0,0 +1,2755 @@ + + + + + + + + + + + + + + + + + + + + + + + Backlog do Produto - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Backlog do Produto

+

Introdução

+

O backlog do produto é uma lista dinâmica e priorizada de todas as funcionalidades, requisitos, melhorias e correções que precisam ser desenvolvidas em um projeto. Ele serve como um repositório central de todas as necessidades e demandas dos usuários, stakeholders e equipe de desenvolvimento.

+

Essa lista é organizada em ordem de prioridade, com os itens mais importantes ou de maior valor estratégico no topo. O backlog do produto evolui ao longo do tempo, à medida que novas informações são obtidas, prioridades mudam e o projeto se adapta às necessidades do mercado.

+

Metodologia

+

A metodologia do backlog do produto é uma abordagem estruturada e colaborativa para gerenciar as demandas e requisitos de um produto ou projeto de forma ágil. Ela é parte fundamental da metodologia Scrum e outras metodologias ágeis, onde o desenvolvimento é orientado por ciclos curtos de trabalho chamados sprints.

+

Etapa de Pré-rastreabilidade

+ +

Etapa de elicitação

+ +

Etapa de Priorização

+ +

Elicitação de Requisitos

+

Serão apresentados todos os requisitos funcionais elicitados durante o processo de elicitação.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdentificadorRequisitoRastreabilidade
RF01O usúario deve poder visualizar os dados de Emissões Equivalentes de CO2 do BrasilST01
RFN01O sistema deveria exportar a dashboard em excelST02
RFN02O usuário deveria poder Visualizar a fonte de dados de cada gráficoST03
RFN03A dashboard deveria ser compatível com dispositivos móveisST04
RF02O sistema deve ser simples e intuitivoST06
RF03O usúario deve poder visualizar os dados de Consumo de Gás Natural do BrasilST07
RF04Ser capaz de funcionar sem internetST08
RF05Visualizar os dados de Potência Acumulada do Brasil e do MundoENT01
RF06Visualizar os dados de Geração Período Médio do BrasilENT02
RF7Visualizar os dados de Custo de Operação do Brasil e do MundoENT03
RF8Visualizar a fonte de dados de cada gráficoENT04
RF9Filtrar os dados atualizados de empregabilidade por fonte/tecnologiaENT06
RF10Filtrar os dados atualizados da matriz energética do BrasilENT07
RF11Filtrar uma matriz energética e verificar seu nível de emissõesENT08
RF12Filtrar a fonte de dados de cada gráficoENT09
RF13Simular diferentes cenários de demanda, para avaliar seu impacto nas projeções de emissãoENT10
RF14Comparar dados de Emissões Equivalentes de CO2 do Brasil e do mundoENT11
RF15Comparar dados de Custo de Operação do Brasil e do MundoENT12
RF16Comparar dados de Consumo de Gás Natural do Brasil e do MundoENT13
RF17Comparar dados atualizados de empregabilidadeENT14
+

Temas

+

Especifica-se dois grandes temas que reunem os épicos.

+
    +
  • Visualização: Está relacionado à visualização geral dos indicadores da dashboard.
  • +
  • Dashboard: Trata sobre as funcionalidades da dashboard em si, envolvendo sistema e funcionalidades.
  • +
+

Épicos

+

+ + + + + + + + + + + + + + + + + + + + + + + + + +
TemaÉpicosID
VisualizaçãoVisualização de dados: Todas as funcionalidades relacionadas as Visualizações de dados.EP01
DashboardFiltrar dados: Funcionalidades relacionadas à Filtragem de dados.EP02
Simular cenário: Envolve as funcionalidades relacionadas a simulação de cenáriosEP03
Comparar cenário: Envolve as funcionalidades relacionadas a comparação de cenáriosEP04
+ +

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/modelagem/arquitetura/index.html b/modelagem/arquitetura/index.html new file mode 100644 index 0000000..b3dfaa3 --- /dev/null +++ b/modelagem/arquitetura/index.html @@ -0,0 +1,2469 @@ + + + + + + + + + + + + + + + + + + + + + + + Arquitetura - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Arquitetura dashboard

+

Descrição

+

A arquitetura de stream de dados é uma abordagem moderna e eficiente para lidar com a ingestão, processamento e análise em tempo real de grandes volumes de dados em constante fluxo. Essa arquitetura é amplamente adotada em ambientes que exigem respostas em tempo real e insights acionáveis a partir dos dados gerados por diversas fontes, como sensores, aplicativos web, dispositivos móveis e sistemas distribuídos.

+

Figma

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/modelagem/prototipo/index.html b/modelagem/prototipo/index.html new file mode 100644 index 0000000..b6bc53e --- /dev/null +++ b/modelagem/prototipo/index.html @@ -0,0 +1,2469 @@ + + + + + + + + + + + + + + + + + + + + + + + Protótipo - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Protótipo Dashboard

+

Descrição

+

O protótipo foi realizado no figma, demonstrando a viabilidade e funcionalidade do projeto. Agora, com base nos resultados obtidos, estamos prontos para avançar para a próxima fase de desenvolvimento, onde aperfeiçoaremos ainda mais o produto e o prepararemos para sua implementação final.

+

Figma

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/modelagem/requisitos/index.html b/modelagem/requisitos/index.html new file mode 100644 index 0000000..7066658 --- /dev/null +++ b/modelagem/requisitos/index.html @@ -0,0 +1,3506 @@ + + + + + + + + + + + + + + + + + + + + + + + Requisitos - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Requisitos

+

Introdução

+

Neste documento, apresentamos os requisitos propostos para a elaboração do pipeline, que desempenhará um papel fundamental no garantir um bom funcionamento do produto final. O pipeline é uma estrutura crucial para o fluxo contínuo de dados e informações dentro do sistema, permitindo a automatização de processos, a integração de diferentes componentes e a otimização do fluxo de trabalho.

+

Os requisitos aqui descritos abrangem uma ampla gama de aspectos, desde a captura e ingestão de dados até o processamento, transformação e entrega dos mesmos. É essencial que o pipeline seja capaz de lidar com diferentes tipos de dados, como texto, imagens, áudio e vídeo, de forma eficiente e confiável.

+

Legenda

+

Abaixo estão listadas algumas legendas que serão utilizadas nas tabelas dos requisitos a seguir.

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LegendaArtefato
BBrainstorming
CCenários
EÉpico
ENTEntrevista
ESEspecificação Suplementar
GLOGlossário
INTIntrospecção
LLéxico
PPersonas
QQuestionário
RFRequisitos Funcionais
RNFRequisitos não Funcionais
STStorytelling
UCCasos de Uso
USHistórias de usuário
+
+

Tabela 1: Sigla de cada etapa (Fonte: autor, 2023).

+
+ +

Requisitos funcionais

+

As tabelas contidas dentros dos toggles evidenciam as informações já citadas dos requisitos funcionais elicitados durante o projeto. Tabelas a seguir:

+
+ RF01 - Selecionar um cenário de política + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ +
+ +
+ RF02 - Começar um novo cenário + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ + + +
+ +
+ RF03 - Salvar o cenário + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ + +
+ +
+ RF04 - Renomear o cenário + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ +
+ +
+ RF05 - Deletar o cenário + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ +
+ +
+ RF06 - Fazer o download dos gráficos e configurações de políticas + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ + + +
+ +
+ RF07 - Compartilhar o cenário + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ +
+ +
+ RF08 - Alternar a visualização dos gráficos entre um ou dois + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ +
+ +
+ RF09 - Selecionar cenários e compará-los + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ +
+ +
+ RF10 - Selecionar o gráfico + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ +
+ +
+ RF11 - Filtrar a busca + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ +
+ +
+ RF12 - Visualizar detalhes da curva + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ +
+ +
+ RF13 - Visualizar 'minha conta' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ +
+ +
+ RF14 - Acessar guia de uso + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TópicoReferência
ÉpicoE1
História de usuárioUS01 +
TemaNotas
Elicitação/
Léxico
Caso de UsoUC01
CenárioC01
Funcionalidade
+ + +
+ +


+

Requisitos não funcionais

+

São os critérios ou restrições que definem qualidades ou características do sistema que não estão diretamente relacionadas às funcionalidades específicas do sistema, mas são importantes para garantir seu desempenho, segurança, usabilidade, confiabilidade, entre outros aspectos.

+
+ RNF01 - A aplicação exibirá os dados seguros + + + + + + + + + + + + + + + + + +
TópicoReferência
Performance
Especificação SuplementarPerformance +
Elicitação +
+ + +
+ +
+ RNF02 - A aplicação terá acesso por usuário senha + + + + + + + + + + + + + + + + + +
TópicoReferência
Performance
Especificação SuplementarPerformance +
Elicitação +
+ + +
+ +
+ RNF03 - A aplicação irá gerar os gráficos de forma eficiente + + + + + + + + + + + + + +
TópicoReferência
Especificação SuplementarPerformance +
Elicitação +
+ + +
+ +

Bibliografia

+
+

[1] SERRANO, Milene; SERRANO, Maurício. Requisitos - Aula 24. 2019. Acessado em: 04/07/2023
+

+
+

Histórico de versão

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VersãoDataDescriçãoAutor(es)
1.004/07/2023Criação do documentoEduardo
1.1-Adição de alguns requisitos funcionais=
1.2-Adicionando requisitos não funcionais=
1.3-Adicionando mais requisitos não funcionais=
1.4-Adicionando vídeos das funcionalidades=
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/painel/painel/index.html b/painel/painel/index.html new file mode 100644 index 0000000..fdbce18 --- /dev/null +++ b/painel/painel/index.html @@ -0,0 +1,2391 @@ + + + + + + + + + + + + + + + + + + + + + + + Painel - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ +
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/pipeline/pipeline/index.html b/pipeline/pipeline/index.html new file mode 100644 index 0000000..f9dca89 --- /dev/null +++ b/pipeline/pipeline/index.html @@ -0,0 +1,2629 @@ + + + + + + + + + + + + + + + + + + + + + + + Pipeline - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Pipeline

+

Arquitetura

+

Na engenharia de software e na automação de processos, um pipeline refere-se a um conjunto de tarefas automatizadas que são executadas sequencialmente para processar, transformar ou mover dados de uma etapa para outra. Cada etapa desse pipeline pode ser responsável por uma parte específica do processo.

+

+ +

+

+
Figura 1: Arquitetura geral
+

+

Pipeline

+

+ +

+

Figura 2: Pipeline de processamento

+

Extração

+

Dados brutos são frequentemente encontrados em arquivos no formato XLSX. Esses arquivos, também conhecidos como planilhas do Microsoft Excel, são uma das formas mais comuns de armazenar informações em formato tabular.

+

Nesta etapa, os dados brutos relacionados ao setor energético brasileiro são coletados de fontes de dados no formato XLSX. Esses arquivos podem conter informações como produção de energia, consumo, fontes de energia, emissões de carbono, entre outros. A extração é realizada a partir desses arquivos e os dados são obtidos para análise.

+

Transformação

+

Após a extração, os dados brutos precisam ser limpos e preparados para análise. Isso envolve várias tarefas, como:

+

Formatação dos dados:

+

Garantir que os dados estejam em um formato consistente e coerente, como datas no mesmo padrão, valores numéricos com a mesma precisão, etc.

+

Seleção de tabelas relevantes:

+

Identificar quais partes dos dados são pertinentes para a análise da transição energética até 2050 e descartar informações irrelevantes.

+

Transformação de tipos de dados:

+

Converter os tipos de dados, se necessário, para que sejam compatíveis com o banco de dados do SQL Server. Por exemplo, converter datas para o formato apropriado.

+

Carregamento

+

Com os dados limpos e transformados, eles são carregados no banco de dados do SQL Server. Isso envolve a inserção dos dados nas tabelas apropriadas do banco de dados, garantindo que a estrutura das tabelas corresponda aos dados transformados.

+

Visualização

+

Após o carregamento dos dados no banco de dados, eles estão prontos para serem visualizados e analisados. Para isso, os dados são conectados a um painel de visualização, como o Power BI. Nesse painel, é possível criar gráficos, tabelas e outros elementos visuais que permitem aos usuários entender e explorar os dados relacionados à transição energética do Brasil até 2050.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 0000000..ead6d76 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["pt"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Pipeline de Dados","text":"

Pipeline de dados e an\u00e1lises para modelagem de curvas de custo de marginal de abatimento do carbono das diversas alternativas do setor energ\u00e9tico brasileiro para fins de suportar avalia\u00e7\u00e3o de custo-efetividade de pol\u00edticas de transi\u00e7\u00e3o energ\u00e9tica do pa\u00eds.

Mentores: Aline, TCU

"},{"location":"#painel","title":"Painel","text":"

\ud83d\udcca Acesse o painel

https://github.com/ResidenciaTICBrisa/04_PipelineTCU/assets/51385738/4ffb7fb4-638c-4a2a-8292-6032c8efb94c

"},{"location":"#sobre-o-projeto","title":"Sobre o projeto","text":"

O pipeline de dados \u00e9 um projeto que tem o objetivo de reunir fontes de dados em um painel centralizado e eficiente, possibilitando a coleta, processamento e transforma\u00e7\u00e3o de informa\u00e7\u00f5es de diversas origens. No contexto da transi\u00e7\u00e3o energ\u00e9tica brasileira, o pipeline de dados desempenha um papel fundamental, \u00e0 medida que o Brasil se compromete com a transforma\u00e7\u00e3o de sua matriz energ\u00e9tica at\u00e9 o ano de 2050, surge a necessidade de monitorar, analisar e tomar decis\u00f5es informadas se torna ainda mais crucial. Esse projeto pode ser utilizado para modelar diferentes cen\u00e1rios de transi\u00e7\u00e3o energ\u00e9tica, levando em considera\u00e7\u00e3o vari\u00e1veis como investimentos em infraestrutura, impactos ambientais e socioecon\u00f4micos. Essa an\u00e1lise abrangente auxilia na formula\u00e7\u00e3o de estrat\u00e9gias pol\u00edticas e na defini\u00e7\u00e3o de metas realistas para alcan\u00e7ar os objetivos da transi\u00e7\u00e3o at\u00e9 2050.

  • Pipeline
  • Elicita\u00e7\u00e3o
  • Fonte de dados
  • Planejamento
  • Backlog
  • Roadmap
"},{"location":"#resultados-esperados","title":"Resultados Esperados","text":"

levantamento de dados p\u00fablicos de fontes nacionais e internacionais, arquitetura, an\u00e1lises e propostas de curva de custo marginal de abatimento de carbono das diversas alternativas para transi\u00e7\u00e3o energ\u00e9tica brasileira, de forma a auxiliar a auditoria do processo, realizado pelo MCTI e MME, pelo TCU.

"},{"location":"#brisa","title":"BRISA","text":"

A BRISA Sociedade para o Desenvolvimento da Tecnologia da Informa\u00e7\u00e3o, em parceria com a UnB campus Gama e LAPPIS, vai capacitar estudantes de cursos de tecnologias, gradua\u00e7\u00e3o e ensino t\u00e9cnico, para se tornarem desenvolvedores de sistemas nas tecnologias mais atuais de inform\u00e1tica e comunica\u00e7\u00f5es. A BRISA conta com recursos da Lei de Inform\u00e1tica, atrav\u00e9s de Programa Priorit\u00e1rio do Minist\u00e9rio da Ci\u00eancia, Tecnologia e inova\u00e7\u00f5es \u2013 MCTI, coordenado pela Softex.

"},{"location":"#tecnologias","title":"Tecnologias","text":"Microsoft Azure Data Factory SQL Server Power Bi"},{"location":"#visualizacao-do-powerbi-e-fontes-de-dados","title":"Visualiza\u00e7\u00e3o do PowerBi e Fontes de Dados","text":"

Por Quest\u00f5es de Permiss\u00e3o dispon\u00edveis apenas para membros da organiza\u00e7\u00e3o \"@unb.br\"

P\u00e1gina no Share Point

Clique aqui para acessar o painel

"},{"location":"#rodando-o-projeto","title":"Rodando o Projeto","text":""},{"location":"#clonando-o-projeto","title":"Clonando o Projeto","text":"
$ git clone https://github.com/ResidenciaTICBrisa/04_PipelineTCU.git\n$ cd scripts\n
"},{"location":"#instalando-o-python","title":"Instalando o Python","text":"

Python Download

"},{"location":"#rodando-os-scripts-em-python","title":"Rodando os scripts em Python","text":"
$ python main.py\n
"},{"location":"#colaboradores","title":"Colaboradores","text":" Caio Vitor Eduardo Gurgel Pedro Braga Ugor Costa Victor L\u00e1zaro "},{"location":"#licenca","title":"Licen\u00e7a","text":"

MIT

"},{"location":"analise/projetos_similares/","title":"Projetos Similares","text":"

Nesta an\u00e1lise, apresentaremos uma compila\u00e7\u00e3o de projetos semelhantes ao nosso, buscando inspira\u00e7\u00e3o e aprimoramento das funcionalides. Atrav\u00e9s desta an\u00e1lise, exploraremos diferentes abordagens e solu\u00e7\u00f5es adotadas por outros projetos para enfrentar problemas semelhantes aos nossos.

"},{"location":"analise/projetos_similares/#wri-sinapse","title":"WRI - SINAPSE","text":"

\u00c9 um sistema capaz de simular os efeitos de emiss\u00e3o de gases de efeito estufa (GEE) diretos e indiretos conforme as pol\u00edticas setoriais. Ou seja, o usu\u00e1rio insere um cen\u00e1rio e pode combinar com outros e ter uma simula\u00e7\u00e3o dos resultados. Por exemplo: se as exig\u00eancias nos padr\u00f5es de emiss\u00f5es dos ve\u00edculos fossem maiores ou se o desmatamento ilegal chegasse a zero, quanto seria a redu\u00e7\u00e3o de emiss\u00f5es do Brasil em 2050?

"},{"location":"analise/projetos_similares/#limitacoes","title":"LIMITA\u00c7\u00d5ES","text":"
  • A incerteza de resultados cresce proporcionalmente ao conjunto de pol\u00edticas inseridas nos cen\u00e1rios. Os dados de entrada na ferramenta devem ser estudados, medidos ou simulados sob determinado conjunto de hip\u00f3teses.

  • O modelo n\u00e3o avalia adicionalidades de medidas. O usu\u00e1rio pode, livremente, testar o impacto da inser\u00e7\u00e3o dos 50 instrumentos de pol\u00edticas p\u00fablicas dispon\u00edveis na ferramenta, embora muitas n\u00e3o sejam adicionais.

  • Caracterizar o n\u00edvel de incerteza, numericamente, n\u00e3o \u00e9 poss\u00edvel. Limites de incerteza n\u00e3o foram associados aos dados de entrada. Portanto, n\u00e3o \u00e9 poss\u00edvel estimar o grau de incerteza relativo aos dados de sa\u00edda (resultados). Como alternativa, o modelo oferece suporte \u00e0 an\u00e1lise de Monte Carlo, que pode medir a sensibilidade dos resultados a altera\u00e7\u00f5es nos dados de entrada

  • A ferramenta simula o impacto e n\u00e3o as metas de pol\u00edticas p\u00fablicas. O EPS Brasil \u00e9 um modelo que permite a simula\u00e7\u00e3o de cen\u00e1rios futuros, ou seja, de constru\u00e7\u00e3o de trajet\u00f3rias poss\u00edveis. Contudo, esses cen\u00e1rios fact\u00edveis est\u00e3o sob a influ\u00eancia do operador da ferramenta do EPS Brasil, o qual faz a inser\u00e7\u00e3o e estabelece o n\u00edvel de ado\u00e7\u00e3o de pol\u00edticas.

  • S\u00e3o limitadas as op\u00e7\u00f5es de pol\u00edticas para o setor agr\u00edcola, florestas e outros usos da terra. Na vers\u00e3o adaptada para o Brasil n\u00e3o foi poss\u00edvel adicionar, sobretudo, pol\u00edticas da agricultura de baixo carbono.

  • Diversas t\u00e9cnicas s\u00e3o usadas para evitar dupla contagem de impacto de pol\u00edticas, e essas t\u00e9cnicas envolvem trade-offs. Pol\u00edticas que alteram pre\u00e7os, como \u00e9 o caso da taxa\u00e7\u00e3o de carbono, alteram a demanda por bens ou servi\u00e7os e as decis\u00f5es dos compradores que procuram novos equipamentos.

"},{"location":"analise/projetos_similares/#futuros-desenvolvimentos","title":"FUTUROS DESENVOLVIMENTOS","text":"

No momento, a ferramenta contempla somente dois cen\u00e1rios: BAU e pol\u00edticas de P&D sem arrependimento.

  • pode ser aprimorada a fim de permitir varia\u00e7\u00f5es quanto ao grau de implementa\u00e7\u00e3o dessas pol\u00edticas, em especial no n\u00edvel de desmatamento

  • Ademais, pode apresentar impactos adicionais decorrentes de pol\u00edticas, tais como a gera\u00e7\u00e3o de emprego e renda associada \u00e0 mitiga\u00e7\u00e3o de emiss\u00f5es de GEE.

  • Ainda, o modelo poder\u00e1 ter o ano-base atualizado com vistas a produzir informa\u00e7\u00f5es que sejam recorrentemente utilizadas para a proposi\u00e7\u00e3o de pol\u00edticas clim\u00e1ticas e de desenvolvimento sustent\u00e1vel.

  • podem ser adicionadas pol\u00edticas de incentivo \u00e0 agricultura de baixo carbono

  • No setor florestal, podem ser consideradas pol\u00edticas de incentivo ao plantio de florestas comerciais, assim como plantio misto de esp\u00e9cies ex\u00f3ticas e nativas

  • ao n\u00edvel do setor de transportes, podem ser considerados mandatos de vendas de ve\u00edculos h\u00edbridos flex, levando em conta a voca\u00e7\u00e3o do pa\u00eds na produ\u00e7\u00e3o de etanol

  • E, no caso do setor energ\u00e9tico, incentivos \u00e0 produ\u00e7\u00e3o de biocombust\u00edveis de segunda gera\u00e7\u00e3o, que futuramente dever\u00e3o encontrar nichos de consumo nos transportes a\u00e9reo e mar\u00edtimo, tendo em vista metas de redu\u00e7\u00e3o de emiss\u00f5es que ter\u00e3o que cumprir.

"},{"location":"analise/projetos_similares/#fonte-de-dados-uteis","title":"FONTE DE DADOS \u00daTEIS","text":"

Podem ser afetados por limita\u00e7\u00f5es dos dados dispon\u00edveis. Mas existem algumas fontes que podemos usar no nosso projeto. OBS: Os dados abaixo cont\u00e9m apenas uma amostra dos dados totais dispon\u00edveis.

DESCRI\u00c7\u00c3O Valores espec\u00edficos para o Brasil? Fonte de dados Custo social do carbono N\u00e3o US Gov. Custo da gera\u00e7\u00e3o solar distribu\u00edda N\u00e3o NREL; EnerNex, 2015 Efici\u00eancia de convers\u00e3o el\u00e9trica por combust\u00edvel Sim Koberle et al., 2018 Importa\u00e7\u00e3o e exporta\u00e7\u00e3o de eletricidade Sim EPE; ONS Custo de substitui\u00e7\u00e3o de combust\u00edvel como fra\u00e7\u00e3o do custo de constru\u00e7\u00e3o N\u00e3o Herald News; ENN Uso de \u00e1gua por tipo de planta N\u00e3o PNNL Capacidade da bateria por tipo de ve\u00edculo N\u00e3o Irena; Lindon, 2016; Lambert, 2016 Capacidade total de gera\u00e7\u00e3o solar e e\u00f3lica N\u00e3o IEA; Bloomberg, 2017a Subs\u00eddios a combust\u00edveis no cen\u00e1rio BAU Sim Khanna et al., 2016; IISD;ODI Taxa de importa\u00e7\u00e3o por combust\u00edve Sim KPMG Potencial de captura de CO2 direta do ar Parcialmente Realmonte et al., 2019; IBGE Elasticidades de produ\u00e7\u00e3o N\u00e3o Damodaran, 2014; RFF Popula\u00e7\u00e3o Sim IBGE"},{"location":"analise/projetos_similares/#bibliografia","title":"Bibliografia","text":"

https://www.wribrasil.org.br/sites/default/files/wribrasil-nota-tecnica-eps-brasil-pt.pdf

"},{"location":"analise/rich_picture/","title":"Rich Picture","text":""},{"location":"analise/rich_picture/#introducao","title":"Introdu\u00e7\u00e3o","text":"

O richpicture \u00e9 uma t\u00e9cnica visual usada principalmente na engenharia de requisitos para capturar de maneira gr\u00e1fica e ilustrativa a complexidade e a intera\u00e7\u00e3o entre diferentes elementos de um sistema, processo ou situa\u00e7\u00e3o. O rich picture \u00e9 uma t\u00e9cnica flex\u00edvel que pode ser adaptada para diferentes contextos e projetos. Ele pode ser usado como ponto de partida para an\u00e1lise mais detalhada.

"},{"location":"analise/rich_picture/#rich-picture-eduardo","title":"Rich Picture Eduardo","text":""},{"location":"analise/rich_picture/#legenda","title":"Legenda","text":""},{"location":"analise/rich_picture/#ator","title":"Ator","text":"

Um ator em um Rich Picture \u00e9 uma representa\u00e7\u00e3o visual de uma entidade externa que interage com o sistema ou contexto em quest\u00e3o. Isso pode ser uma pessoa, um grupo de pessoas, uma organiza\u00e7\u00e3o, um sistema automatizado, ou qualquer coisa que tenha um papel influente ou impacto dentro do cen\u00e1rio, mas que n\u00e3o faz parte do sistema em si.

"},{"location":"analise/rich_picture/#operacao","title":"Opera\u00e7\u00e3o","text":"

Refere-se a uma a\u00e7\u00e3o ou atividade que est\u00e1 ocorrendo dentro do sistema ou contexto que est\u00e1 sendo representado na imagem. Pode ser um processo, uma tarefa, uma intera\u00e7\u00e3o entre elementos ou qualquer tipo de a\u00e7\u00e3o que contribui para o funcionamento do sistema.

"},{"location":"analise/rich_picture/#seta","title":"Seta","text":"

As setas em um Rich Picture s\u00e3o usadas para representar conex\u00f5es ou fluxos entre diferentes elementos do sistema. Elas podem indicar dire\u00e7\u00f5es de intera\u00e7\u00f5es, influ\u00eancias, trocas de informa\u00e7\u00f5es, fluxos de trabalho, feedback e muitos outros tipos de relacionamentos entre os componentes do cen\u00e1rio.

"},{"location":"analise/IRENA_IEA_NREL/irena_iea_nrel/","title":"IRENA (International Renewable Energy Agency \u2013 Ag\u00eancia Internacional de Energia Renov\u00e1vel)","text":""},{"location":"analise/IRENA_IEA_NREL/irena_iea_nrel/#definicao","title":"Defini\u00e7\u00e3o","text":"

fornece anualmente um relat\u00f3rio que fornece dados mais atualmente populares e an\u00e1lises sobre tecnologia, inova\u00e7\u00e3o, pol\u00edtica, financiamento e investimento em energia renov\u00e1vel.

https://www.irena.org/Data

"},{"location":"analise/IRENA_IEA_NREL/irena_iea_nrel/#dados-disponiveis","title":"Dados Dispon\u00edveis","text":"

Fornece n\u00fameros totais de emprego no setor de energia renov\u00e1vel por tecnologia no mundo todo, mas s\u00f3 fornece esses gr\u00e1ficos no formato pdf e power point e os dados s\u00e3o de 2012 at\u00e9 o ano mais recente (2021 atualmente) na p\u00e1gina https://www.irena.org/Data/View-data-by-topic/Benefits/Employment-Time-Series

Fornece n\u00fameros totais de emprego no setor de energia renov\u00e1vel por tecnologia e por pa\u00eds, fornece esses gr\u00e1ficos no formato excel e os dados s\u00e3o do ano mais recente (2021 atualmente) na p\u00e1gina https://www.irena.org/Data/View-data-by-topic/Benefits/Renewable-Energy-Employment-by-Country

Tamb\u00e9m fornece o potencial de gera\u00e7\u00e3o de energia por fontes renov\u00e1veis e a gera\u00e7\u00e3o de energia por fontes renov\u00e1veis divididas por tipos de fontes renov\u00e1veis e por pa\u00eds. Fornece os dados 2000 at\u00e9 ano mais recente (2022 atualmente) e no formato excel, a p\u00e1gina \u00e9 https://www.irena.org/Data/View-data-by-topic/Capacity-and-Generation/Country-Rankings

Fornece a participa\u00e7\u00e3o de fontes renov\u00e1veis na matriz el\u00e9trica pa\u00eds dos anos de 2000 at\u00e9 o ano mais recente (atualmente 2021). Fornece os dados no formato excel ou csv, a p\u00e1gina \u00e9 https://www.irena.org/Data/View-data-by-topic/Capacity-and-Generation/Technologies.

Fornece a quantidade emiss\u00f5es evitadas por pa\u00eds, por tecnologia e dos anos de 2000 at\u00e9 o ano mais recente (atualmente 2020). N\u00e3o fornece op\u00e7\u00e3o de baixar os dados em algum formato, a p\u00e1gina \u00e9 https://www.irena.org/Data/View-data-by-topic/Climate-Change/Avoided-Emissions-Calculator.

Fornece a m\u00e9dia global dos custo totais, fatores de capacidade e LCOE (Levelized Cost of Energy \u2013 Custo Nivelado de Energia) por tecnologias al\u00e9m de tamb\u00e9m fornecer os valores anuais de 2010 at\u00e9 o ano mais atual (2020 atualmente). Fornece os dados no formato excel na p\u00e1gina https://www.irena.org/Data/View-data-by-topic/Costs/Global-Trends.

Fornece LCOE (Levelized Cost of Energy \u2013 Custo Nivelado de Energia) m\u00e9dio global com os valores de leil\u00e3o por tecnologia de 2010 at\u00e9 o ano mais atual (2023 atualmente). Supostamente oferece a op\u00e7\u00e3o de baixar os dados em excel mas o \u00edcone com a op\u00e7\u00e3o de baixar leva para uma p\u00e1gina n\u00e3o relacionada https://www.irena.org/Data/View-data-by-topic/Costs/Global-LCOE-and-Auction-values.

Fornece LCOE m\u00e9dio de projetos e\u00f3licos por pa\u00eds de 1984 at\u00e9 o ano mais recente (atualmente \u00e9 2019). Supostamente oferece a op\u00e7\u00e3o de baixar os dados em excel mas o \u00edcone com a op\u00e7\u00e3o de baixar leva para uma p\u00e1gina n\u00e3o relacionada https://www.irena.org/Data/View-data-by-topic/Costs/Wind-Costs.

Fornece informa\u00e7\u00f5es sobre os investimentos nas tecnologias do ano de 2013 at\u00e9 o ano mais recente (atualmente \u00e9 2022) globalmente. Oferece a op\u00e7\u00e3o de baixar os dados em formato excel na p\u00e1gina https://www.irena.org/Data/View-data-by-topic/Finance-and-Investment/Investment-trends.

Fornece informa\u00e7\u00f5es sobre os investimentos p\u00fablicos em renov\u00e1veis do ano de 2000 at\u00e9 o ano mais atual (atualmente \u00e9 2020) globalmente. Oferece a op\u00e7\u00e3o de baixar os dados no formato excel na p\u00e1gina https://www.irena.org/Data/View-data-by-topic/Finance-and-Investment/Renewable-Energy-Finance-Flows.

Fornece dados sobre consumo final de renov\u00e1vel por pa\u00eds e por tecnologia do ano de 2020 at\u00e9 o ano mais recente (2021). Supostamente oferece a op\u00e7\u00e3o de baixar os dados em formato excel mas quando clica no \u00edcone n\u00e3o carrega na p\u00e1gina https://www.irena.org/Data/View-data-by-topic/Renewable-Energy-Balances/Final-Renewable-Energy-Consumption.

"},{"location":"analise/IRENA_IEA_NREL/irena_iea_nrel/#iea","title":"IEA","text":"

Fornece dados sobre as tecnologias em determinado pa\u00eds e quando produziam nos anos de 2000 \u00e0 2021, tendo at\u00e9 2027 uma proje\u00e7\u00e3o da produ\u00e7\u00e3o de energia de determinada tecnologia. N\u00e3o tem dados dispon\u00edveis para baixar https://www.iea.org/data-and-statistics/data-tools/renewables-data-explorer

"},{"location":"analise/IRENA_IEA_NREL/irena_iea_nrel/#nrel","title":"NREL","text":"

Fornece diversos dados mais n\u00e3o relacionados ao tema de transi\u00e7\u00e3o energ\u00e9tica, mas voltado ao tema de energia relacionado ao tema de energia solar https://www.nrel.gov/research/data-tools.html

"},{"location":"analise/pne_2050/pne_2050/","title":"Plano Nacional de Energia 2050","text":""},{"location":"analise/pne_2050/pne_2050/#definicao","title":"\u200bDefini\u00e7\u00e3o","text":"

Primeiramente, o plano nacional de energia 2050 \u00e9 um instrumento de suporte ao desenho da estrat\u00e9gia de longo prazo do planejador em rela\u00e7\u00e3o \u00e0 expans\u00e3o do setor energ\u00e9tico do Brasil. Ele \u00e9 desenvolvido pela EPE de acordo com as diretrizes do Minist\u00e9rio de Minas e Energia

\"Ao lan\u00e7ar o PNE, o Governo Federal enuncia os termos de uma estrat\u00e9gia de longo prazo para o setor energ\u00e9tico, e com isso chama \u00e0 constru\u00e7\u00e3o de grandes consensos com a sociedade e as empresas, em prol do desenvolvimento do Pa\u00eds.\"

"},{"location":"analise/pne_2050/pne_2050/#introducao","title":"\u200bIntrodu\u00e7\u00e3o","text":"

Associadas a tais mudan\u00e7as, foram elaborados dois grandes cen\u00e1rios, formando um cone de incertezas para o desenho da estrat\u00e9gia de longo prazo: o primeiro, chamado de Desafio da Expans\u00e3o , que reflete requisitos de expans\u00e3o do setor de energia para atendimento a um crescimento da demanda de energia mais expressivo. No segundo, chamado de Estagna\u00e7\u00e3o , analisam as consequ\u00eancias de um cen\u00e1rio em que o consumo de energia per capita mant\u00eam-se inalterado ao longo de todo o per\u00edodo. Neste caso, a quest\u00e3o da expans\u00e3o da produ\u00e7\u00e3o \u00e9 menos premente, embora ainda reste a necessidade de se desenhar a politica energ\u00e9tica mais adequada para atender ao crescimento vegetativo da demanda.

O foco do relat\u00f3rio est\u00e1 voltado para o cen\u00e1rio Desafio da Expans\u00e3o, uma vez que tal contexto imp\u00f5e ao planejador, al\u00e9m da necessidade de refor\u00e7ar e aperfei\u00e7oar os mecanismos e as pol\u00edticas vigentes, tamb\u00e9m buscar solu\u00e7\u00f5es inovadoras que permitam o estabelecimento de uma estrat\u00e9gia de expans\u00e3o de longo prazo do setor energ\u00e9tico de forma a garantir o fornecimento de energia \u00e0 sociedade nesse horizonte, atendendo crit\u00e9rios de seguran\u00e7a energ\u00e9tica, retorno adequado aos investimentos, disponibilidade de acesso \u00e0 popula\u00e7\u00e3o e socioambientais.

O cen\u00e1rio de Estagna\u00e7\u00e3o, embora tenha seus desafios intr\u00ednsecos relativos a um ambiente econ\u00f4mico e de desenvolvimento mais adverso, n\u00e3o constitui, do ponto de vista do planejador do setor de energia, uma preocupa\u00e7\u00e3o iminente em termos de expans\u00e3o da capacidade de atendimento da demanda de energia, visto o aumento da oferta de energia verificado nos \u00faltimos anos. Assim, sua aten\u00e7\u00e3o poderia estar mais concentrada, por exemplo, em discuss\u00f5es sobre o perfil mais adequado da matriz energ\u00e9tica nacional, de acordo com algum crit\u00e9rio de interesse ( ex. emiss\u00f5es de gases de efeito estufa)

1. Estrutura do relat\u00f3rio do PNE 2050

Uma parte importante tamb\u00e9m do relat\u00f3rio \u00e9 a sua estrutura, que conforme disposto no inciso 1 do cap\u00edtulo de introdu\u00e7\u00e3o, \u00e9 constitu\u00edda de duas partes:

  • Na primeira parte s\u00e3o apresentados os principais fatores que condicionam (e, em v\u00e1rios casos s\u00e3o condicionados por) a evolu\u00e7\u00e3o do setor de energia e que foram, portanto, denominadas quest\u00f5es transversais. Vale ressaltar tamb\u00e9m que s\u00e3o descritos os resultados finais do exerc\u00edcio de an\u00e1lise a longo prazo e os principais direcionamentos para o desenho da estrat\u00e9gia de longo prazo.
  • Na segunda parte, a an\u00e1lise \u00e9 organizada por tipo de tecnologia, infraestrutura de transporte de energia e por segmentos de consumo.

Na introdu\u00e7\u00e3o do PNE 2050, \u00e9 exibida uma tabela que contem o tipo de fatores condicionantes ( ou condicionados), suas palavras-chaves e uma breve sinopse. Fatores estes que s\u00e3o utilizados para o estudo de cen\u00e1rios que o PNE 2050 avalia.

2. Contexto do PNE 2050

Nesta parte do cap\u00edtulo de introdu\u00e7\u00e3o, \u00e9 feita uma compara\u00e7\u00e3o entre o PNE 2050 e o PNE 2030. Nessa compara\u00e7\u00e3o podemos perceber o que motivou a cria\u00e7\u00e3o de uma nova estrat\u00e9gia, trata-se de dois fatores que se fortalecerem com o in\u00edcio do s\u00e9culo XXI: a busca por maior efici\u00eancia energ\u00e9tica e o respeito a quest\u00f5es socioambientais. O cap\u00edtulo tamb\u00e9m trata de quest\u00f5es que o PNE 2030 ajudou a contribuir e serviu como diretriz.

\"Tr\u00eas diferen\u00e7as podem ser elencadas em rela\u00e7\u00e3o ao PNE 2030: a abordagem do problema, o reconhecimento da imprevisibilidade inerente do futuro e a perspectiva de abund\u00e2ncia de recursos no horizonte de longo prazo.\"

\"Assim, mais fundamental do que a discuss\u00e3o de quantos cen\u00e1rios ser\u00e3o avaliados e qual a matriz energ\u00e9tica resultante em 2050 em cada um deles \u00e9 estabelecer as orienta\u00e7\u00f5es de longo prazo que permitam a todos os agentes do setor tomar suas decis\u00f5es de modo a alcan\u00e7ar o melhor resultado para o desenvolvimento do setor de energia\".

Existem quest\u00f5es que o PNE 2050 tenta se pautar durante sua elabora\u00e7\u00e3o, estas quest\u00f5es s\u00e3o limitadas por dois cen\u00e1rios:

  • cen\u00e1rio Desafio da Expans\u00e3o, definido como aquele em que as autoridades do setor de energia precisam lidar com uma expans\u00e3o significativa da demanda de energia ao desenhar sua estrat\u00e9gia para o setor.
  • O cen\u00e1rio de Estagna\u00e7\u00e3o, em que a quest\u00e3o da expans\u00e3o n\u00e3o \u00e9 t\u00e3o relevante, mas ainda assim h\u00e1 um espa\u00e7o para avaliar a evolu\u00e7\u00e3o da matriz de energia.

3. Papel e Atua\u00e7\u00e3o do Governo: Princ\u00edpios para o Setor de Energia

"},{"location":"analise/pne_2050/pne_2050/#producao-e-uso-de-energia","title":"\u200bProdu\u00e7\u00e3o e Uso de Energia","text":"

Nesta se\u00e7\u00e3o, s\u00e3o apresentados as principais considera\u00e7\u00f5es no tratamento do panorama em rela\u00e7\u00e3o a produ\u00e7\u00e3o e ao uso de energia no horizonte de 2050.

Destaca-se nesta se\u00e7\u00e3o que o Brasil, em um futuro n\u00e3o t\u00e3o remoto, deve se tornar, de um demandante l\u00edquido de energia para um ofertante l\u00edquido de energia, visto que o pa\u00eds atualmente produz mais do que demanda de energia. O grande desafio aparece quando se vislumbra um cen\u00e1rio de transi\u00e7\u00e3o energ\u00e9tica mundial, onde as inc\u00f3gnitas ficam para os pontos de tecnologia e fontes que suprir\u00e3o estas novas demandas. Mas, \u00e9 certo que o Brasil, devido a sua grande riqueza natural e de recursos, suprir\u00e1 sua demanda energ\u00e9tica atual e futura no horizonte de 2050.

Administra\u00e7\u00e3o da abund\u00e2ncia (1): a disponibilidade total de recursos supera largamente a demanda de energia total no horizonte at\u00e9 2050.

Tendo em vista essa abund\u00e2ncia, um dos pontos que o PNE 2050 aborda \u00e9 a administra\u00e7\u00e3o desta abund\u00e2ncia energ\u00e9tica. \"Seguramente, tal tarefa leva em conta as implica\u00e7\u00f5es econ\u00f4micas que surgir\u00e3o de o Pa\u00eds se tornar grande produtor de energia, com grande riqueza de fontes distintas de energia\".

Administra\u00e7\u00e3o da abund\u00e2ncia (2): s\u00f3 a parcela dos recursos mais facilmente acess\u00edveis excede em 60% a demanda de energia total acumulada do per\u00edodo. \" [\u2026] Caso n\u00e3o haja economicidade, o poder p\u00fablico pode avaliar a cria\u00e7\u00e3o e a implementa\u00e7\u00e3o de pol\u00edticas no sentido de aproveitamento de determinadas fontes. Logo, a facilidade de aproveitamento dos recursos torna-se t\u00e3o relevante quanto o seu potencial.\"

Administra\u00e7\u00e3o da abund\u00e2ncia (3): o aproveitamento de boa parte dos recursos implicar\u00e1 desafios significativos.

"},{"location":"analise/pne_2050/pne_2050/#questoes-transversais","title":"\u200bQuest\u00f5es Transversais","text":"

O texto discute os fatores que devem ser considerados no planejamento energ\u00e9tico de longo prazo em meio a grandes transforma\u00e7\u00f5es. Estas mudan\u00e7as est\u00e3o relacionadas \u00e0 chamada transi\u00e7\u00e3o energ\u00e9tica, caracterizada pela descarboniza\u00e7\u00e3o das matrizes energ\u00e9ticas para combater as mudan\u00e7as clim\u00e1ticas, descentraliza\u00e7\u00e3o dos recursos energ\u00e9ticos e maior digitaliza\u00e7\u00e3o na produ\u00e7\u00e3o e uso de energia. Al\u00e9m disso, o papel do consumidor tamb\u00e9m est\u00e1 mudando devido aos avan\u00e7os tecnol\u00f3gicos e novos modelos de neg\u00f3cios.

Esses fatores foram agrupados como quest\u00f5es transversais que influenciam a expans\u00e3o da produ\u00e7\u00e3o e uso de energia no Brasil. O texto aborda cada quest\u00e3o transversal, suas rela\u00e7\u00f5es com as pol\u00edticas energ\u00e9ticas vigentes e os principais desafios que podem afetar a estrat\u00e9gia de atua\u00e7\u00e3o no longo prazo do tomador de decis\u00e3o no setor de energia. As recomenda\u00e7\u00f5es sugeridas s\u00e3o apresentadas para cada quest\u00e3o, divididas ao longo das pr\u00f3ximas d\u00e9cadas para atingir a maturidade na execu\u00e7\u00e3o do plano de a\u00e7\u00e3o.

Neste Relat\u00f3rio de Resumo s\u00f3 ser\u00e1 abordado a \u00e1rea de interesse do TCU, ou seja o setor de transi\u00e7\u00e3o energ\u00e9tica.

"},{"location":"analise/pne_2050/pne_2050/#transicao-energetica","title":"\u200b Transi\u00e7\u00e3o Energ\u00e9tica","text":"

O texto aborda a tem\u00e1tica da Transi\u00e7\u00e3o Energ\u00e9tica e suas implica\u00e7\u00f5es no contexto mundial. A transi\u00e7\u00e3o energ\u00e9tica envolve mudan\u00e7as na matriz energ\u00e9tica global, direcionando para uma economia de baixo carbono e maior efici\u00eancia energ\u00e9tica. Isso implica na substitui\u00e7\u00e3o gradual de fontes intensivas em emiss\u00e3o de carbono por fontes renov\u00e1veis, eletrifica\u00e7\u00e3o dos processos de convers\u00e3o de energia e maior automa\u00e7\u00e3o e digitaliza\u00e7\u00e3o. Al\u00e9m disso, a transi\u00e7\u00e3o energ\u00e9tica tamb\u00e9m impacta tecnologias, padr\u00f5es de consumo, rela\u00e7\u00f5es socioecon\u00f4micas e a geopol\u00edtica da energia.

O processo de transi\u00e7\u00e3o envolve diversas dimens\u00f5es e \u00e9 complexo, podendo levar um longo tempo para se concretizar. As principais fontes que desempenhar\u00e3o um papel relevante nesse processo s\u00e3o a eletrifica\u00e7\u00e3o (com destaque para as energias renov\u00e1veis), os biocombust\u00edveis, a efici\u00eancia energ\u00e9tica catalisada pela digitaliza\u00e7\u00e3o e o g\u00e1s natural( como combust\u00edvel de transi\u00e7\u00e3o).

Al\u00e9m disso, o hidrog\u00eanio \u00e9 considerado uma alternativa relevante para atender setores de consumo que t\u00eam dificuldade em serem atendidos por eletricidade ou biocombust\u00edveis, sendo que a rota verde de produ\u00e7\u00e3o (eletr\u00f3lise da \u00e1gua com fontes renov\u00e1veis de eletricidade) \u00e9 vista como a mais relevante internacionalmente para produ\u00e7\u00e3o de hidrog\u00eanio dentro de outras alternativas.

Para cumprir os objetivos do Acordo de Paris e descarbonizar o sistema energ\u00e9tico mundial, \u00e9 necess\u00e1rio investir cada vez mais em fontes renov\u00e1veis e integr\u00e1-las aos setores que demandam energia. Por\u00e9m, \u00e9 importante garantir a competi\u00e7\u00e3o entre diferentes solu\u00e7\u00f5es que atendam \u00e0s necessidades do sistema, incluindo o gerenciamento da variabilidade das fontes renov\u00e1veis.

"},{"location":"analise/pne_2050/pne_2050/#politicas-em-vigor-para-o-setor-de-energia","title":"Pol\u00edticas em vigor para o Setor de Energia:","text":"

N\u00e3o h\u00e1 pol\u00edticas espec\u00edficas para transi\u00e7\u00e3o energ\u00e9tica no Brasil, mas h\u00e1 uma s\u00e9rie de pol\u00edticas que afetam e favorecem a transi\u00e7\u00e3o energ\u00e9tica, s\u00e3o elas: Pol\u00edtica Nacional sobre Mudan\u00e7a do Clima \u2013 PNMC, Lei 12.187 de 2009; Contribui\u00e7\u00e3o Nacionalmente Determinada \u2013 NDC; Pol\u00edtica Nacional de Biocombust\u00edveis \u2013 RenovaBio, Lei n\u00ba 13.576, de 26 de dezembro de 2017; Novo Mercado de G\u00e1s, Decreto n\u00ba 9.616/2018 (que altera o Decreto n\u00ba 7.382/2010), Resolu\u00e7\u00e3o CNPE n\u00ba16/2019, Termo de Compromisso de Cessa\u00e7\u00e3o \u2013 TCC Petrobras-CADE, Ajuste SINIEF/CONFAZ n\u00ba 03/2018, Decreto n\u00ba 9.934/2019; Moderniza\u00e7\u00e3o do Setor El\u00e9trico, Consulta P\u00fablica n\u00ba 33/2017 , Portaria n\u00ba 187/2019, PLS 232/2016 e PL 1.917/2015.

Existem tamb\u00e9m outras pol\u00edticas, programas, iniciativas e a\u00e7\u00f5es que se relacionam indiretamente ao tema da transi\u00e7\u00e3o energ\u00e9tica.

"},{"location":"analise/pne_2050/pne_2050/#desafios-para-o-tomador-de-decisao-no-setor-de-energia","title":"Desafios para o Tomador de Decis\u00e3o no Setor de Energia","text":"

O texto aborda os desafios que o tomador de decis\u00e3o no setor de energia enfrenta durante a transi\u00e7\u00e3o energ\u00e9tica. Os principais pontos s\u00e3o:

  1. Desenho de mercado e arcabou\u00e7o regulat\u00f3rio: As barreiras n\u00e3o econ\u00f4micas, como falta de informa\u00e7\u00e3o, avers\u00e3o ao risco tecnol\u00f3gico e normas associadas ao paradigma tecnol\u00f3gico anterior, dificultam a potencializa\u00e7\u00e3o da transi\u00e7\u00e3o energ\u00e9tica.
  2. Incertezas sobre a evolu\u00e7\u00e3o do setor: A inova\u00e7\u00e3o em curso, incluindo eletrifica\u00e7\u00e3o, automa\u00e7\u00e3o, conectividade e descarboniza\u00e7\u00e3o, traz desafios econ\u00f4micos e competitivos. \u00c9 fundamental monitorar as incertezas tecnol\u00f3gicas, econ\u00f4micas e ambientais para evitar trajet\u00f3rias r\u00edgidas que possam implicar em riscos futuros.
  3. Multiplicidade de dimens\u00f5es da transi\u00e7\u00e3o: A transi\u00e7\u00e3o energ\u00e9tica oferece oportunidades de neg\u00f3cios associadas \u00e0s vantagens competitivas do Brasil, mas tamb\u00e9m requer alinhamento estrat\u00e9gico para criar um ambiente de neg\u00f3cios atrativo e inovador. Desenvolver a capacita\u00e7\u00e3o em tecnologias como digitaliza\u00e7\u00e3o, automa\u00e7\u00e3o e seguran\u00e7a cibern\u00e9tica \u00e9 essencial. Al\u00e9m disso, coordenar pol\u00edticas setoriais de energia com outras esferas, como econ\u00f4mica, cient\u00edfico-tecnol\u00f3gica e ambiental, \u00e9 um desafio importante.
"},{"location":"analise/pne_2050/pne_2050/#recomendacoes-para-o-tomador-de-decisao-no-setor-de-energia","title":"Recomenda\u00e7\u00f5es para o Tomador de Decis\u00e3o no Setor de Energia","text":"

As recomenda\u00e7\u00f5es para o tomador de decis\u00e3o no setor de energia se dividem em duas categorias: aquelas que refor\u00e7am as vantagens competitivas do Brasil e as que desenvolvem novas vantagens e gerenciam as incertezas da transi\u00e7\u00e3o energ\u00e9tica.

  1. Promover a sinergia de pol\u00edticas p\u00fablicas e desenhos de mercado associados: \u00c9 importante garantir que as pol\u00edticas p\u00fablicas e desenhos de mercado sejam coerentes e sin\u00e9rgicos entre si. Devem ser incentivadas pol\u00edticas que promovam a efici\u00eancia energ\u00e9tica, o uso de biocombust\u00edveis, a eletrifica\u00e7\u00e3o de frotas e transportes n\u00e3o motorizados, al\u00e9m de investimentos em tecnologias de hidrog\u00eanio. Al\u00e9m disso, \u00e9 necess\u00e1rio alinhar as pol\u00edticas energ\u00e9ticas com as pol\u00edticas ambientais e compromissos internacionais relacionados \u00e0s mudan\u00e7as clim\u00e1ticas e desenvolvimento sustent\u00e1vel.
  2. Adequar arranjos institucionais, regulat\u00f3rios e de desenho de mercado apropriados para potencializar a transi\u00e7\u00e3o energ\u00e9tica: A transi\u00e7\u00e3o energ\u00e9tica requer aprimoramentos nos arranjos institucionais e regulat\u00f3rios para internalizar as externalidades ambientais nos pre\u00e7os de energia e tornar o mercado mais aberto, competitivo e \u00e1gil. As distribuidoras de energia t\u00eam um papel central nesse processo, especialmente por meio de iniciativas de digitaliza\u00e7\u00e3o e remunera\u00e7\u00e3o adequada aos servi\u00e7os prestados. O fomento \u00e0 inova\u00e7\u00e3o tecnol\u00f3gica e o desenvolvimento de nichos de inova\u00e7\u00e3o tamb\u00e9m s\u00e3o fundamentais.
  3. Desenvolver estrat\u00e9gias flex\u00edveis para lidar com incertezas e baseadas nas vantagens competitivas do Pa\u00eds, priorizando pol\u00edticas sem arrependimento que evitem trancamento tecnol\u00f3gico: O Brasil deve aproveitar suas vantagens competitivas na transi\u00e7\u00e3o energ\u00e9tica e usar isso como base para desenvolver ou migrar compet\u00eancias. Priorizar pol\u00edticas sem arrependimento, ou seja, pol\u00edticas que trazem benef\u00edcios independentemente do caminho tecnol\u00f3gico escolhido, \u00e9 essencial para evitar riscos e trancamento tecnol\u00f3gico. Em vez de definir uma rota tecnol\u00f3gica espec\u00edfica, \u00e9 mais adequado estabelecer pol\u00edticas que promovam resultados e competi\u00e7\u00e3o entre diferentes rotas tecnol\u00f3gicas, permitindo a inova\u00e7\u00e3o e a supera\u00e7\u00e3o de tecnologias espec\u00edficas.
  4. Refor\u00e7ar alian\u00e7as e redes estrat\u00e9gicas internacionais para desenvolver maior flexibilidade nas escolhas estrat\u00e9gicas associadas a transi\u00e7\u00e3o energ\u00e9tica: O Brasil possui rela\u00e7\u00f5es diplom\u00e1ticas e econ\u00f4micas amplas com diversos pa\u00edses, o que lhe confere margem para estabelecer parcerias e projetos em diferentes \u00e1reas e com pa\u00edses distintos. Essas alian\u00e7as e redes estrat\u00e9gicas fortalecem o pa\u00eds em termos geopol\u00edticos e proporcionam maior flexibilidade nas escolhas estrat\u00e9gicas relacionadas \u00e0 transi\u00e7\u00e3o energ\u00e9tica, gerando diversidade de caminhos e graus de liberdade nas decis\u00f5es. Essa pluralidade de a\u00e7\u00f5es \u00e9 um ativo relevante para o processo de transi\u00e7\u00e3o energ\u00e9tica
  5. Articular as pol\u00edticas energ\u00e9ticas com pol\u00edticas de CT&I e educa\u00e7\u00e3o, desenvolvimento de novas capacita\u00e7\u00f5es e vantagens competitivas: \u00c9 importante refor\u00e7ar a liga\u00e7\u00e3o entre o planejamento energ\u00e9tico nacional e o sistema nacional de inova\u00e7\u00e3o, pol\u00edticas de ci\u00eancia, tecnologia e inova\u00e7\u00e3o (CT&I) e educa\u00e7\u00e3o. Isso permitir\u00e1 criar um ambiente de neg\u00f3cios prop\u00edcio \u00e0 inova\u00e7\u00e3o em mercados abertos e competitivos, possibilitando que as institui\u00e7\u00f5es de CT&I coloquem suas inova\u00e7\u00f5es no mercado e as disseminem de forma mais ampla.
"},{"location":"analise/pne_2050/pne_2050/#conclusao","title":"Conclus\u00e3o","text":"

O Plano Nacional de Energia 2050 \u00e9 um importante instrumento de suporte para a estrat\u00e9gia de longo prazo do setor energ\u00e9tico brasileiro. Elaborado pela EPE e seguindo as diretrizes do Minist\u00e9rio de Minas e Energia, o plano busca construir consensos com a sociedade e as empresas em prol do desenvolvimento do pa\u00eds.

O relat\u00f3rio abordou dois grandes cen\u00e1rios: o Desafio da Expans\u00e3o e a Estagna\u00e7\u00e3o. Dado o contexto de transi\u00e7\u00e3o energ\u00e9tica mundial, o foco concentrou-se no Desafio da Expans\u00e3o, que demanda aprimoramentos nas pol\u00edticas e mecanismos vigentes e busca de solu\u00e7\u00f5es inovadoras para garantir o fornecimento de energia \u00e0 sociedade de forma segura e sustent\u00e1vel.

A transi\u00e7\u00e3o energ\u00e9tica \u00e9 um tema central no relat\u00f3rio, envolvendo a substitui\u00e7\u00e3o gradual de fontes intensivas em emiss\u00e3o de carbono por renov\u00e1veis, a eletrifica\u00e7\u00e3o, a efici\u00eancia energ\u00e9tica e o uso de g\u00e1s natural como combust\u00edvel de transi\u00e7\u00e3o. O Brasil, com sua abund\u00e2ncia de recursos naturais, tem o potencial de se tornar um ofertante l\u00edquido de energia, o que implica em administrar essa abund\u00e2ncia de forma econ\u00f4mica e sustent\u00e1vel.

O tomador de decis\u00e3o no setor de energia enfrenta diversos desafios, como o desenho de mercado e arcabou\u00e7o regulat\u00f3rio adequados, a gest\u00e3o das incertezas sobre o futuro do setor e a coordena\u00e7\u00e3o entre diferentes pol\u00edticas setoriais. Para superar esses desafios, o relat\u00f3rio apresenta recomenda\u00e7\u00f5es que enfatizam a sinergia entre pol\u00edticas p\u00fablicas, o desenvolvimento de estrat\u00e9gias flex\u00edveis baseadas nas vantagens competitivas do pa\u00eds, a busca por pol\u00edticas sem arrependimento e a cria\u00e7\u00e3o de alian\u00e7as internacionais estrat\u00e9gicas.

Por fim, \u00e9 fundamental articular as pol\u00edticas energ\u00e9ticas com as de ci\u00eancia, tecnologia e inova\u00e7\u00e3o, bem como investir em novas capacita\u00e7\u00f5es e vantagens competitivas. Dessa forma, o Brasil poder\u00e1 enfrentar os desafios da transi\u00e7\u00e3o energ\u00e9tica com sucesso, promovendo um futuro sustent\u00e1vel e pr\u00f3spero para o setor energ\u00e9tico do pa\u00eds.

"},{"location":"comunicacao/documentacao_sprints/rituais_da_equipe/","title":"Rituais da Equipe","text":""},{"location":"comunicacao/documentacao_sprints/rituais_da_equipe/#review-timebox-de-40-minutos","title":"Review: Timebox de 40 minutos","text":"

A equipe, junto a um stackholder, realiza uma revis\u00e3o das entregas. Realizado todas as quintas-feiras \u00e0s 11:00 ou 12:00

"},{"location":"comunicacao/documentacao_sprints/rituais_da_equipe/#retro-planning-timebox-de-1-hora-e-30-minutos","title":"Retro + Planning: Timebox de 1 hora e 30 minutos","text":"

Primeiramente ocorre uma retrospectiva do ocorrido em uma sprint, nela s\u00e3o debatidos pontos positivos e negativos, al\u00e9m de poss\u00edveis a\u00e7\u00f5es para evitar futuros problemas e melhor a produtividade da equipe. Logo em seguida ocorre a Sprint Planning, onde s\u00e3o divididas as tarefas e squads encarregados para o trabalho nas pr\u00f3ximas issues. Realizada todas as sextas-feiras \u00e0s 11:00

"},{"location":"comunicacao/documentacao_sprints/rituais_da_equipe/#daily-timebox-de-15-minutos","title":"Daily: Timebox de 15 minutos","text":"

Espa\u00e7o de tempo voltado para que os integrantes da equipe compartilhem um pouco mais detalhadamente o andamento das atividades, dificuldades encontradas e como est\u00e1 o andamento .

Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 09/08/2023 Cria\u00e7\u00e3o do documento Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint1/","title":"Sprint 01 ( 18/06 - 25/06 )","text":""},{"location":"comunicacao/documentacao_sprints/sprint1/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint1/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Preparar para as reuni\u00f5es com os clientes no dia 27/06 das 09:00 at\u00e9 as 11:00.

"},{"location":"comunicacao/documentacao_sprints/sprint1/#us","title":"US","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint1/#_1","title":"Sprint 1","text":"Tarefa Respons\u00e1veis Reuni\u00e3o com a Aline do Tcu Caio Vitor,Eduardo Gurgel,Victor L\u00e1zaro,Pedro Braga,Ugor Costa Trazer perguntas e solu\u00e7\u00f5es para o problema de transi\u00e7\u00e3o energ\u00e9tica Caio Vitor,Eduardo Gurgel,Victor L\u00e1zaro,Pedro Braga,Ugor Costa Pesquisa sobre fontes de dados Caio Vitor,Eduardo Gurgel,Victor L\u00e1zaro,Pedro Braga,Ugor Costa"},{"location":"comunicacao/documentacao_sprints/sprint1/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint1/#resultado-entregue","title":"Resultado entregue","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint1/#observacoes","title":"Observa\u00e7\u00f5es","text":"

Foram descobertas dashboards como o SINAPSE e o SIRENE.

"},{"location":"comunicacao/documentacao_sprints/sprint1/#retrospective","title":"Retrospective","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint1/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint10/","title":"Sprint 10 (17/08 - 24/08)","text":""},{"location":"comunicacao/documentacao_sprints/sprint10/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint10/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Adicionar gr\u00e1ficos e abas de visualiza\u00e7\u00e3o ao dashboard no powerpoint, fazer extra\u00e7\u00f5es de dados, pesquisar fontes de dados e upar tabelas no SLQServer.

"},{"location":"comunicacao/documentacao_sprints/sprint10/#us","title":"US","text":"

US01 - Visualizar os dados de Pot\u00eancia Acumulada do Brasil e do Mundo US02 - Visualizar os dados de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio do Brasil e do Mundo

"},{"location":"comunicacao/documentacao_sprints/sprint10/#_1","title":"Sprint 10","text":"Tarefa Respons\u00e1veis Encontrar fonte de dados de Pot\u00eancia Acumulada do Mundo Pedro Braga e Ugor Brand\u00e3o Fazer script de web-scraping de Pot\u00eancia Acumulada do Mundo Pedro Braga e Ugor Brand\u00e3o Fazer gr\u00e1fico/tabela com dados de Pot\u00eancia Acumulada do Mundo no Power BI Pedro Braga e Ugor Brand\u00e3o Fazer script de web-scraping de dados de Pot\u00eancia Acumulada do Brasil Vict\u00f3rio L\u00e1zaro e Ugor Brand\u00e3o Fazer gr\u00e1fico/tabela com dados de Pot\u00eancia Acumulada do Brasil no Power BI Vict\u00f3rio L\u00e1zaro e Ugor Brand\u00e3o Fazer script de web-scraping de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio do Mundo Pedro Braga e Ugor Brand\u00e3o Fazer gr\u00e1fico/tabela com dados de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio do Mundo no Power BI Pedro Braga e Ugor Brand\u00e3o Fazer script de web-scraping de dados de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio do Brasil Vict\u00f3rio L\u00e1zaro e Caio Vitor Fazer Gr\u00e1fico/Tabela com dados de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio do Brasil no PowerBI Vict\u00f3rio L\u00e1zaro e Caio Vitor Encontrar fonte de dados de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio do Mundo Pedro Braga e Ugor Brand\u00e3o Elicita\u00e7\u00e3o de Requisitos Eduardo Gurgel Cria\u00e7\u00e3o de Vers\u00e3o iterativa do projeto Eduardo Gurgel"},{"location":"comunicacao/documentacao_sprints/sprint10/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint10/#resultado-entregue","title":"Resultado entregue","text":"

Foram conclu\u00eddas todas as US da Sprint e foram levantados requisitos adicionais ao projeto, al\u00e9m da vers\u00e3o interativa sendo disponibilizada para os usu\u00e1rios.

"},{"location":"comunicacao/documentacao_sprints/sprint10/#observacoes","title":"Observa\u00e7\u00f5es","text":"

N\u00e3o se Aplica

"},{"location":"comunicacao/documentacao_sprints/sprint10/#retrospective","title":"Retrospective","text":""},{"location":"comunicacao/documentacao_sprints/sprint10/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga 2.0 20/08/2023 Adi\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints 8 e 9 Pedro Braga 3.0 18/09/2023 Adi\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints 10, 11, 12 e 13 Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint11/","title":"Sprint 11 (24/08 - 31/08)","text":""},{"location":"comunicacao/documentacao_sprints/sprint11/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint11/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Adicionar gr\u00e1ficos e abas de visualiza\u00e7\u00e3o ao dashboard no powerpoint, fazer extra\u00e7\u00f5es de dados, pesquisar fontes de dados e upar tabelas no SLQServer.

"},{"location":"comunicacao/documentacao_sprints/sprint11/#us","title":"US","text":"

US04 - Visualizar os dados de Emiss\u00f5es Equivalentes de CO2 do Brasil e do Mundo

~~US03 - Visualizar os dados de Balan\u00e7o de Pot\u00eancia do Brasil e do Mundo~~ (Removido)

"},{"location":"comunicacao/documentacao_sprints/sprint11/#_1","title":"Sprint 13","text":"Tarefa Respons\u00e1veis Encontrar fonte de dados de Balan\u00e7o de Pot\u00eancia do Mundo Eduardo Gurgel e Pedro Braga Fazer script de web-scraping de Balan\u00e7o de Pot\u00eancia do Mundo Eduardo Gurgel e Pedro Braga Fazer gr\u00e1fico/tabela com dados de Balan\u00e7o de Pot\u00eancia do Mundo no Power BI Eduardo Gurgel e Pedro Braga Consumo de G\u00e1s Natural no Brasil Vict\u00f3rio L\u00e1zaro e Caio Vitor Consumo de G\u00e1s Natural do Mundo Vict\u00f3rio L\u00e1zaro e Caio Vitor Custo de Opera\u00e7\u00e3o do Sistema El\u00e9trico no Brasil Vict\u00f3rio L\u00e1zaro e Caio Vitor Fazer script de web-scraping de dados de Emiss\u00f5es Equivalentes de CO2 do Mundo Ugor Brand\u00e3o Fazer script de web-scraping de dados de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio do Brasil Vict\u00f3rio L\u00e1zaro e Caio Vitor Fazer Gr\u00e1fico/Tabela com dados de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio do Brasil no PowerBI Vict\u00f3rio L\u00e1zaro e Caio Vitor Emiss\u00f5es Equivalentes de CO2 do Mundo Eduardo Gurgel e Ugor Brand\u00e3o Emiss\u00f5es Equivalentes de CO2 do Brasil Eduardo Gurgel e Ugor Brand\u00e3o"},{"location":"comunicacao/documentacao_sprints/sprint11/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint11/#resultado-entregue","title":"Resultado entregue","text":"

Foram conclu\u00eddas todas as US da Sprint.

"},{"location":"comunicacao/documentacao_sprints/sprint11/#observacoes","title":"Observa\u00e7\u00f5es","text":"

N\u00e3o se Aplica

"},{"location":"comunicacao/documentacao_sprints/sprint11/#retrospective","title":"Retrospective","text":""},{"location":"comunicacao/documentacao_sprints/sprint11/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga 2.0 20/08/2023 Adi\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints 8 e 9 Pedro Braga 3.0 18/09/2023 Adi\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints 10, 11, 12 e 13 Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint12/","title":"Sprint 12 (31/08 - 07/09)","text":""},{"location":"comunicacao/documentacao_sprints/sprint12/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint12/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Adicionar gr\u00e1ficos e abas de visualiza\u00e7\u00e3o ao dashboard no powerpoint, fazer extra\u00e7\u00f5es de dados, pesquisar fontes de dados e upar tabelas no SLQServer.

"},{"location":"comunicacao/documentacao_sprints/sprint12/#us","title":"US","text":"

US05 - Visualizar os dados de Consumo de G\u00e1s Natural do Brasil e do Mundo

US03 - Visualizar os dados de Balan\u00e7o de Pot\u00eancia do Brasil e do Mundo

"},{"location":"comunicacao/documentacao_sprints/sprint12/#_1","title":"Sprint 12","text":"Tarefa Respons\u00e1veis Adicionar dados de Consumo de G\u00e1s Natural do BEN ao Banco de Dados Caio Vitor e Vict\u00f3rio L\u00e1zaro Adicionar FUncionalidade de projetar emiss\u00f5es ao PowerBI Vict\u00f3rio L\u00e1zaro Adicionar dados do BEN ao PowerBI Caio Vitor e Vict\u00f3rio L\u00e1zaro Visualiza\u00e7\u00e3o Consumo total por regi\u00e3o (GWh) Eduardo Gurgel Elaborar apresenta\u00e7\u00e3o do Projeto Caio Vitor e Pedro Braga Encontrar Fonte de dados de Balan\u00e7o de Pot\u00eancia do Mundo Eduardo Gurgel e Pedro Braga Fazer gr\u00e1fico/tabela com dados de Gera\u00e7\u00e3o Per\u00edodo m\u00e9dio do Mundo no PowerBi Pedro Braga e Ugor Brand\u00e3o Fazer Script de web-scrapping de Balan\u00e7o de Pot\u00eancia do Mundo Eduardo Gurgel e Pedro Braga Fazer gr\u00e1fico/tabela com dados de Balan\u00e7o de Pot\u00eancia do Mundo no Power BI Eduardo Gurgel e Pedro Braga Fazer script de web-scraping de dados de Emiss\u00f5es Equivalentes de CO2 do Mundo Ugor Brand\u00e3o \u230b Defini\u00e7\u00e3o da Ferramenta de ETL(Data Factory) Eduardo Gurgel Refatora\u00e7\u00e3o da arquitetura do Projeto Eduardo Gurgel"},{"location":"comunicacao/documentacao_sprints/sprint12/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint12/#resultado-entregue","title":"Resultado entregue","text":"

Foram conclu\u00eddas todas as US da Sprint.

"},{"location":"comunicacao/documentacao_sprints/sprint12/#observacoes","title":"Observa\u00e7\u00f5es","text":"

N\u00e3o se Aplica

"},{"location":"comunicacao/documentacao_sprints/sprint12/#retrospective","title":"Retrospective","text":""},{"location":"comunicacao/documentacao_sprints/sprint12/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga 2.0 20/08/2023 Adi\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints 8 e 9 Pedro Braga 3.0 18/09/2023 Adi\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints 10, 11, 12 e 13 Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint13/","title":"Sprint 12 (07/09 - 14/09)","text":""},{"location":"comunicacao/documentacao_sprints/sprint13/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint13/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Adicionar gr\u00e1ficos e abas de visualiza\u00e7\u00e3o ao dashboard no powerpoint, fazer extra\u00e7\u00f5es de dados, pesquisar fontes de dados e upar tabelas no SLQServer.

"},{"location":"comunicacao/documentacao_sprints/sprint13/#us","title":"US","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint13/#_1","title":"Sprint 12 (07/09 - 14/09)","text":"Tarefa Respons\u00e1veis Colocar Tabelas que est\u00e3o no Sharepoint no Banco de Dados Caio Vitor e Vict\u00f3rio L\u00e1zaro Adicionar dados do Anu\u00e1rio Estat\u00edstico de Eletricidade ao PowerBI Vict\u00f3rio L\u00e1zaro e Ugor Brand\u00e3o Implementar vers\u00e3o inicial DataFactory Eduardo Gurgel Adicionar dados de emiss\u00e3o de GEE do Sirene Eduardo Gurgel Elaborar Apresenta\u00e7\u00e3o do Projeto Pedro Braga, Caio Vitor e Vict\u00f3rio L\u00e1zaro Reformula\u00e7\u00e3o do Backlog Eduardo Gurgel"},{"location":"comunicacao/documentacao_sprints/sprint13/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint13/#resultado-entregue","title":"Resultado entregue","text":"

Foram conclu\u00eddas todas as US da Sprint. Apresenta\u00e7\u00e3o feita para os stackholders, diretores e coordenadores do projeto.

"},{"location":"comunicacao/documentacao_sprints/sprint13/#observacoes","title":"Observa\u00e7\u00f5es","text":"

A reformula\u00e7\u00e3o do Backlog Mudou algumas perspectivas do projeto e metas/objetos.

"},{"location":"comunicacao/documentacao_sprints/sprint13/#retrospective","title":"Retrospective","text":""},{"location":"comunicacao/documentacao_sprints/sprint13/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga 2.0 20/08/2023 Adi\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints 8 e 9 Pedro Braga 3.0 18/09/2023 Adi\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints 10, 11, 12 e 13 Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint2/","title":"Sprint 2 ( 25/06 - 02/07 )","text":""},{"location":"comunicacao/documentacao_sprints/sprint2/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint2/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Entrevistas com o cliente para compreen\u00e7\u00e3o do problema.

"},{"location":"comunicacao/documentacao_sprints/sprint2/#us","title":"US","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint2/#_1","title":"Sprint 2","text":"Tarefa Respons\u00e1veis Elicita\u00e7\u00e3o de Requisitos Caio Vitor,Eduardo Gurgel,Victor L\u00e1zaro,Pedro Braga,Ugor Costa Cria\u00e7\u00e3o do Github Pages Caio Vitor,Eduardo Gurgel,Victor L\u00e1zaro,Pedro Braga,Ugor Costa"},{"location":"comunicacao/documentacao_sprints/sprint2/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint2/#resultado-entregue","title":"Resultado entregue","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint2/#observacoes","title":"Observa\u00e7\u00f5es","text":"

N\u00e3o possui.

"},{"location":"comunicacao/documentacao_sprints/sprint2/#retrospectiva","title":"Retrospectiva","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint2/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint3/","title":"Sprint 3 ( 02/07 - 09/07 )","text":""},{"location":"comunicacao/documentacao_sprints/sprint3/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint3/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Preparar para reuni\u00e3o com a coordenadora Juliana buscando solucionar d\u00favidas em rela\u00e7\u00e3o \u00e0 parte energ\u00e9tica do projeto; Mapeamento de Fonte de dados que sejam relevantes para o projeto.

"},{"location":"comunicacao/documentacao_sprints/sprint3/#us","title":"US","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint3/#_1","title":"Sprint 3","text":"Tarefa Respons\u00e1veis Agendamento de Reuni\u00e3o com a Coordenadora Juliana Caio Vitor,Pedro Braga Levantamento de Requisitos Eduardo Gurgel Elabora\u00e7\u00e3o de D\u00favidas com a Coordenadora Juliana Caio Vitor,Eduardo Gurgel,Victor L\u00e1zaro,Pedro Braga,Ugor Costa Mapeamento de Fonte de Dados Eduardo Gurgel, Vict\u00f3rio L\u00e1zaro e Ugor Costa"},{"location":"comunicacao/documentacao_sprints/sprint3/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint3/#resultado-entregue","title":"Resultado Entregue","text":"

Relat\u00f3rios referentes a an\u00e1lise do SINAPSE e SIRENE, plataformas utilizadas pelo Minist\u00e9rio da Ci\u00eancia, Tecnologia e Inova\u00e7\u00e3o; Pontos abordados pela professora Juliana: - Vari\u00e1veis de importa\u00e7\u00e3o x Vari\u00e1veis de exporta\u00e7\u00e3o x Vari\u00e1veis de produ\u00e7\u00e3o - Extrapola\u00e7\u00e3o at\u00e9 2050

"},{"location":"comunicacao/documentacao_sprints/sprint3/#observacoes","title":"Observa\u00e7\u00f5es","text":"

N\u00e3o possui.

"},{"location":"comunicacao/documentacao_sprints/sprint3/#retrospective","title":"Retrospective","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint3/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint4/","title":"Sprint 04 ( 09/07 - 16/07 )","text":""},{"location":"comunicacao/documentacao_sprints/sprint4/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint4/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Compreens\u00e3o do problema enfrentado pelo TCU no processo de auditoria da transi\u00e7\u00e3o energ\u00e9tica, visto que haviam inconsist\u00eancias nos problemas antes levantados, podendo-se perceber que os problemas antes levantados j\u00e1 haviam solu\u00e7\u00f5es.

"},{"location":"comunicacao/documentacao_sprints/sprint4/#us","title":"US","text":"

N\u00e3o se Aplica.

Tarefa Respons\u00e1veis Elabora\u00e7\u00e3o de Question\u00e1rio para reuni\u00e3o com o TCU Caio Vitor, Eduardo Gurgel e Pedro Braga Elabora\u00e7\u00e3o do Diagrama de Fluxo do projeto Eduardo Gurgel"},{"location":"comunicacao/documentacao_sprints/sprint4/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint4/#resultado-entregue","title":"Resultado Entregue","text":"

Foi visto que era necess\u00e1rio, para compreender melhor os problemas: - Levantar dados PNE e BEN, modelar pain\u00e9is (verifica\u00e7\u00e3o de planejado/executado; modelar curvas de custo de abatimento). - Estudar fontes, funcionamento e modelagem do Sirene e Sinapse. - Realizar an\u00e1lise comparativa de potencias de PNE/BEN x Sirene e Sinapse. - Exibir se as emiss\u00f5es cumprem as metas.

"},{"location":"comunicacao/documentacao_sprints/sprint4/#observacoes","title":"Observa\u00e7\u00f5es","text":"

N\u00e3o possui.

"},{"location":"comunicacao/documentacao_sprints/sprint4/#retrospective","title":"Retrospective","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint4/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint5/","title":"Sprint 05 ( 16/07 - 23/07 )","text":""},{"location":"comunicacao/documentacao_sprints/sprint5/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint5/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Analisar a base de dados SIE, SINAPSE e SIRENE.

"},{"location":"comunicacao/documentacao_sprints/sprint5/#us","title":"US","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint5/#_1","title":"Sprint 5","text":"Tarefa Respons\u00e1veis Compara\u00e7\u00e3o SIE x SIRENE Vict\u00f3rio L\u00e1zaro, Ugor Costa e Caio Victor An\u00e1lise curvas MACC sinapse Eduardo Gurgel e Pedro Braga Documenta\u00e7\u00e3o sobre IRENA,IEA,NREl Caio Vitor e Vict\u00f3rio L\u00e1zaro"},{"location":"comunicacao/documentacao_sprints/sprint5/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint5/#resultado-entregue","title":"Resultado Entregue","text":"

Foram entregues uma an\u00e1lise sobre o SINAPSE e apresentados lacunas na plataforma, um web-scrapping para o SIE e in\u00edcio da configura\u00e7\u00e3o de web-scrapping para o SINAPSE.

"},{"location":"comunicacao/documentacao_sprints/sprint5/#observacoes","title":"Observa\u00e7\u00f5es","text":"

N\u00e3o possui.

"},{"location":"comunicacao/documentacao_sprints/sprint5/#retrospective","title":"Retrospective","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint5/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint6/","title":"Sprint 6 (23/07 - 30/07)","text":""},{"location":"comunicacao/documentacao_sprints/sprint6/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint6/#objetivo-da-sprint","title":"Objetivo da Sprint","text":"

Analisar profundamente as bases de dados do PNE 2050, IRENA, IEA e NREL para obter dados,informa\u00e7\u00f5es e m\u00e9todos ut\u00e9is para o processo de auditoria do TCU.

"},{"location":"comunicacao/documentacao_sprints/sprint6/#us","title":"US","text":"

N\u00e3o se aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint6/#_1","title":"Sprint 6","text":"Tarefa Respons\u00e1veis Analisar o Plano Nacional de Energia 2050 Eduardo Gurgel, Pedro Braga, Ugor Documenta\u00e7\u00e3o sobre IRENA,IEA,NREl Caio Vitor e Vict\u00f3rio L\u00e1zaro Cria\u00e7\u00e3o do prototipo no FIGMA Eduardo Gurgel"},{"location":"comunicacao/documentacao_sprints/sprint6/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint6/#resultado-entregue","title":"Resultado Entregue","text":"

Relat\u00f3rios de An\u00e1lise do PNE 2050 apresentando cen\u00e1rios, vari\u00e1veis de an\u00e1lise e etc; Relat\u00f3rios de an\u00e1lise do IRENA, IEA e NREL.

"},{"location":"comunicacao/documentacao_sprints/sprint6/#observacoes","title":"Observa\u00e7\u00f5es","text":"

Ficou em d\u00e9bito a entrega do prot\u00f3tipo do dashboard no FIGMA devido a d\u00favida do cliente em rela\u00e7\u00e3o a tecnologia a ser utilizada (Python GUI ou PowerBI)

"},{"location":"comunicacao/documentacao_sprints/sprint6/#retrospective","title":"Retrospective","text":"

N\u00e3o se aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint6/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint7/","title":"Sprint 7 (30/07 - 06/08)","text":""},{"location":"comunicacao/documentacao_sprints/sprint7/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint7/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Adicionar Atribui\u00e7\u00f5es repassadas pela coordenadora Carla Aguiar e iniciar a elabora\u00e7\u00e3o do Dashboard no PowerBI.

"},{"location":"comunicacao/documentacao_sprints/sprint7/#us","title":"US","text":"

N\u00e3o se aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint7/#_1","title":"Sprint 7","text":"Tarefa Respons\u00e1veis Elabora\u00e7\u00e3o do Dashboard Empregabilidade Caio Vitor Elabora\u00e7\u00e3o do Dashboard Participa\u00e7\u00e3o de Energia Renovavel na Matriz Energ\u00e9tica Pedro Braga e Ugor Costa Elabora\u00e7\u00e3o do Dashboard Participa\u00e7\u00e3o por setor na Matriz Energ\u00e9tica Pedro Braga e Ugor Costa Elabora\u00e7\u00e3o do Dashboard de Cen\u00e1rios PNE 2050 Vict\u00f3rio L\u00e1zaro Elabora\u00e7\u00e3o do Dashboard do Custo de Implementa\u00e7\u00e3o por Setor Eduardo Gurgel"},{"location":"comunicacao/documentacao_sprints/sprint7/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint7/#resultado-entregue","title":"Resultado entregue","text":"

Dashboards referentes a Empregabilidade por setor, Potencia acumulada por Cen\u00e1rio, Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio Por Cen\u00e1rio do Plano Nacional de Energia 2050, Balan\u00e7o de Pot\u00eancia Por Cen\u00e1rio do Plano Nacional de Energia 2050 e Balan\u00e7o de pot\u00eancia. Atribui\u00e7\u00f5es de Scrum Master, Product Manager, L\u00edder T\u00e9cnico, Community Manager e Devops/Arquiteto/Automa\u00e7\u00f5es.

"},{"location":"comunicacao/documentacao_sprints/sprint7/#observacoes","title":"Observa\u00e7\u00f5es","text":"

N\u00e3o possui.

"},{"location":"comunicacao/documentacao_sprints/sprint7/#retrospective","title":"Retrospective","text":"

N\u00e3o se Aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint7/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint8/","title":"Sprint 8 (03/08 - 10/08)","text":""},{"location":"comunicacao/documentacao_sprints/sprint8/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint8/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Ap\u00f3s as atribui\u00e7\u00f5es, foi necess\u00e1rio a documenta\u00e7\u00e3o das sprints passadas. Foi definido como objetivo desta sprint, concluir os prot\u00f3tipos do projeto, elaborar o roadmap do projeto, desenhar a arquitetura de stream de dados do projeto.

"},{"location":"comunicacao/documentacao_sprints/sprint8/#us","title":"US","text":"

N\u00e3o se aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint8/#_1","title":"Sprint 8","text":"Tarefa Respons\u00e1veis Documentar Sprints Backlog at\u00e9 o momento atual Caio Vitor e Pedro Braga Desenhar Roadmap do Projeto Eduardo Gurgel, Pedro Braga e Vict\u00f3rio L\u00e1zaro Desenhar Arquitetura de Stream de dados e Arquitetura do projeto Eduardo Gurgel"},{"location":"comunicacao/documentacao_sprints/sprint8/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint8/#resultado-entregue","title":"Resultado entregue","text":"

As documenta\u00e7\u00f5es de todas as sprints, menos a atual, foram elaboradas e integradas \u00e0 documenta\u00e7\u00e3o do projeto, o desenho da arquitetura de stream de dados e a arquitetura do projeto foram conclu\u00eddas e adicionadas \u00e0 documenta\u00e7\u00e3o e o prot\u00f3tipo do dashboard foi criado e adicionado \u00e0 documenta\u00e7\u00e3o.

"},{"location":"comunicacao/documentacao_sprints/sprint8/#observacoes","title":"Observa\u00e7\u00f5es","text":"

Foi feita uma valida\u00e7\u00e3o do desenho da arquitetura de dados com o cliente e foi solicitado uma nova arquitetura exigindo o uso das tecnologias Power Automate e SharePoint da Microsoft.

"},{"location":"comunicacao/documentacao_sprints/sprint8/#retrospective","title":"Retrospective","text":""},{"location":"comunicacao/documentacao_sprints/sprint8/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga 2.0 20/08/2023 Adi\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints 8 e 9 Pedro Braga"},{"location":"comunicacao/documentacao_sprints/sprint9/","title":"Sprint 9 (10/08 - 17/08)","text":""},{"location":"comunicacao/documentacao_sprints/sprint9/#planning","title":"Planning","text":""},{"location":"comunicacao/documentacao_sprints/sprint9/#objetivos-da-sprint","title":"Objetivos da Sprint","text":"

Finalizar o Backlog do produto, cria\u00e7\u00e3o de UserStorys/Requisitos utilizando m\u00e9todos de brainstorm, personas e storytelling, obter dados do BEN 2016 e disponibilizar a documenta\u00e7\u00e3o para o TCU no sharepoint do projeto.

"},{"location":"comunicacao/documentacao_sprints/sprint9/#us","title":"US","text":"

N\u00e3o se aplica.

"},{"location":"comunicacao/documentacao_sprints/sprint9/#_1","title":"Sprint 9","text":"Tarefa Respons\u00e1veis Brainstorm,Rich Picture, L\u00e9xico e Personas Caio Vitor, Eduardo Gurgel e Pedro Braga Desenhar Roadmap do projeto Eduardo Gurgel e Pedro Braga Prioriza\u00e7\u00e3o moScoW Eduardo Gurgel Casos de Uso Eduardo Gurgel e Pedro Braga Cen\u00e1rios, Prioriza\u00e7\u00e3o e Storytelling Eduardo Gurgel Adi\u00e7\u00e3o ao Product Backlog Eduardo Gurgel, Pedro Braga e Vict\u00f3rio L\u00e1zaro"},{"location":"comunicacao/documentacao_sprints/sprint9/#review","title":"Review","text":""},{"location":"comunicacao/documentacao_sprints/sprint9/#resultado-entregue","title":"Resultado entregue","text":"

O backlog foi entrege em sua vers\u00e3o incial, faltou a adi\u00e7\u00e3o das User Storys que foram criadas ao roadmap e as prioriza\u00e7\u00f5es de cada Sprint. Foi entregue tamb\u00e9m a cria\u00e7\u00e3o da vers\u00e3o incial do PowerBi referente a participa\u00e7\u00e3o por setor na matriz energ\u00e9tica brasileira, de responsabilidade dos membros Pedro Braga e Ugor costa.

"},{"location":"comunicacao/documentacao_sprints/sprint9/#observacoes","title":"Observa\u00e7\u00f5es","text":"

O levantamento de requisitos ficou como d\u00e9bito t\u00e9cnico e algumas das abordagens designadas n\u00e3o foram completamente adotadas.

"},{"location":"comunicacao/documentacao_sprints/sprint9/#retrospective","title":"Retrospective","text":""},{"location":"comunicacao/documentacao_sprints/sprint9/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/08/2023 Cria\u00e7\u00e3o do documento Caio Vitor, Pedro Braga 1.1 09/08/2023 Adi\u00e7\u00e3o de Relat\u00f3rios referentes as Sprints 3,4 e 5 Pedro Braga 1.2 18/08/2023 Reorganiza\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints por sprint Pedro Braga 2.0 20/08/2023 Adi\u00e7\u00e3o da documenta\u00e7\u00e3o das sprints 8 e 9 Pedro Braga"},{"location":"comunicacao/reunioes/reuniao1/reuniao/","title":"Reuni\u00e3o 1 - Reuni\u00e3o de apresenta\u00e7\u00e3o","text":"

Nesta semana realizamos a reuni\u00e3o com os mentores (TCU) e tamb\u00e9m a primeira reuni\u00e3o do grupo do projeto

Per\u00edodo: De 19/06/2023 at\u00e9 23/06/2023

"},{"location":"comunicacao/reunioes/reuniao1/reuniao/#informacoes","title":"informa\u00e7\u00f5es","text":"

Reuni\u00e3o para conhecer o cliente realizada dia 22/06, 10h - 12h

"},{"location":"comunicacao/reunioes/reuniao1/reuniao/#presentes","title":"Presentes","text":"Participantes Presente Caio Vitor Presente Eduardo Gurgel Presente Pedro Braga Presente Ugor Costa Presente Victor L\u00e1zaro Presente"},{"location":"comunicacao/reunioes/reuniao1/reuniao/#atividades","title":"Atividades","text":"Atividade Respons\u00e1veis Apresenta\u00e7\u00e3o da equipe Toda a equipe"},{"location":"comunicacao/reunioes/reuniao1/reuniao/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 26/06/2023 Cria\u00e7\u00e3o do documento Eduardo 1.1 26/06/2023 Adicionando artefatos trabalhados na sprint Eduardo 1.2 03/07/2023 Atualiza\u00e7\u00e3o do documento Eduardo"},{"location":"comunicacao/reunioes/reuniao2/acompanhamento/","title":"Reuni\u00e3o 2 - Reuni\u00e3o de acompanhamento","text":"

Nos reunimos com os monitores do projeto para discutir o que foi realizado no projeto at\u00e9 o momento

Per\u00edodo: De 26/06/2023 at\u00e9 30/06/2023

"},{"location":"comunicacao/reunioes/reuniao2/acompanhamento/#informacoes","title":"informa\u00e7\u00f5es","text":"

Reuni\u00e3o para conhecer as regras de neg\u00f3cio dia 30/06, 12h \u00e0s 13h

"},{"location":"comunicacao/reunioes/reuniao2/acompanhamento/#presentes","title":"Presentes","text":"Participantes Presente Caio Vitor Presente Eduardo Gurgel Presente Pedro Braga Presente Ugor Costa Presente Victor L\u00e1zaro Presente"},{"location":"comunicacao/reunioes/reuniao2/acompanhamento/#atividades","title":"Atividades","text":"Data Atividade Respons\u00e1veis 27/06/2023 Acompanhamento do projeto Toda a equipe"},{"location":"comunicacao/reunioes/reuniao2/acompanhamento/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 26/06/2023 Cria\u00e7\u00e3o do documento Eduardo 1.1 26/06/2023 Adicionando artefatos trabalhados na sprint Eduardo 1.2 03/07/2023 Atualiza\u00e7\u00e3o do documento Eduardo"},{"location":"comunicacao/reunioes/reuniao2/reuniao/","title":"Reuni\u00e3o com a equipe de neg\u00f3cio do TCU","text":"

Nesta semana realizamos a reuni\u00e3o com os respons\u00e1veis pelas regras de neg\u00f3cio do (TCU) e tamb\u00e9m definimos os pr\u00f3ximos passos do projeto.

"},{"location":"comunicacao/reunioes/reuniao2/reuniao/#cronograma-de-atividades","title":"Cronograma de atividades","text":"

Per\u00edodo: De 26/06/2023 at\u00e9 30/06/2023

"},{"location":"comunicacao/reunioes/reuniao2/reuniao/#informacoes","title":"informa\u00e7\u00f5es","text":"

Reuni\u00e3o para conhecer as regras de neg\u00f3cio dia 27/06, 10h - 12h

"},{"location":"comunicacao/reunioes/reuniao2/reuniao/#presentes","title":"Presentes","text":"Participantes Presente Caio Vitor Presente Eduardo Gurgel Presente Pedro Braga Presente Ugor Costa Presente Victor L\u00e1zaro Presente"},{"location":"comunicacao/reunioes/reuniao2/reuniao/#atividades","title":"Atividades","text":"Data Atividade Respons\u00e1veis 27/06/2023 Apresenta\u00e7\u00e3o das regras de neg\u00f3cio Toda a equipe"},{"location":"comunicacao/reunioes/reuniao2/reuniao/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 26/06/2023 Cria\u00e7\u00e3o do documento Eduardo 1.1 26/06/2023 Adicionando artefatos trabalhados na sprint Eduardo 1.2 03/07/2023 Atualiza\u00e7\u00e3o do documento Eduardo"},{"location":"comunicacao/reunioes/reuniao3/reuniao/","title":"Reuni\u00e3o 3","text":"

Nesta semana realizamos a reuni\u00e3o com os mentores (TCU) e tamb\u00e9m a primeira reuni\u00e3o do grupo do projeto

Per\u00edodo: De 19/06/2023 at\u00e9 23/06/2023

"},{"location":"comunicacao/reunioes/reuniao3/reuniao/#informacoes","title":"informa\u00e7\u00f5es","text":"

Reuni\u00e3o para conhecer o cliente realizada dia 22/06, 10h - 12h

"},{"location":"comunicacao/reunioes/reuniao3/reuniao/#presentes","title":"Presentes","text":"Participantes Presente Caio Vitor Presente Eduardo Gurgel Presente Pedro Braga Presente Ugor Costa Presente Victor L\u00e1zaro Presente"},{"location":"comunicacao/reunioes/reuniao3/reuniao/#atividades","title":"Atividades","text":"Atividade Respons\u00e1veis Apresenta\u00e7\u00e3o da equipe Toda a equipe"},{"location":"comunicacao/reunioes/reuniao3/reuniao/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 26/06/2023 Cria\u00e7\u00e3o do documento Eduardo 1.1 26/06/2023 Adicionando artefatos trabalhados na sprint Eduardo 1.2 03/07/2023 Atualiza\u00e7\u00e3o do documento Eduardo"},{"location":"comunicacao/reunioes/reuniao4/reuniao/","title":"Reuni\u00e3o 4","text":"

Nesta semana realizamos a primeira reuni\u00e3o de acompanhamento com os monitores

Per\u00edodo: De 26/06/2023 at\u00e9 30/06/2023

"},{"location":"comunicacao/reunioes/reuniao4/reuniao/#informacoes","title":"informa\u00e7\u00f5es","text":"
  • Reuni\u00e3o com o TCU - 27/06
  • Reuni\u00e3o de acompanhamento com os monitores 30/06
"},{"location":"comunicacao/reunioes/reuniao4/reuniao/#presentes","title":"Presentes","text":"Participantes Presente Caio Vitor Presente Eduardo Gurgel Presente Pedro Braga Presente Ugor Costa Presente Victor L\u00e1zaro Presente"},{"location":"comunicacao/reunioes/reuniao5/reuniao/","title":"Reuni\u00e3o 5","text":"

Nesta semana realizamos a reuni\u00e3o com o TCU para validar as fontes de dados que encontramos e a reuni\u00e3o com a equipe para tomar decis\u00f5es do projeto.

Per\u00edodo: De 03/07/2023 at\u00e9 07/07/2023

"},{"location":"comunicacao/reunioes/reuniao5/reuniao/#informacoes","title":"informa\u00e7\u00f5es","text":"
  • Reuni\u00e3o com o TCU - 05/07
  • Reuni\u00e3o da equipe 07/07
"},{"location":"comunicacao/reunioes/reuniao5/reuniao/#presentes","title":"Presentes","text":"Participantes Presente Caio Vitor Presente Eduardo Gurgel Presente Pedro Braga Presente Ugor Costa Presente Victor L\u00e1zaro Presente"},{"location":"comunicacao/reunioes/reuniao6/reuniao/","title":"Reuni\u00e3o 6","text":"

Nesta semana realizamos a reuni\u00e3o com o TCU para verificar: Levantar dados PNE e BEN, modelar pain\u00e9is (verifica\u00e7\u00e3o de planejado/executado; modelar curvas de custo de abatimento); Fontes, funcionamento e modelagem do Sirene e Sinapse; Realizar an\u00e1lise comparativa de potencias de PNE/BEN x Sirene e Sinapse. E a reuni\u00e3o de acompanhamento com os monitores.

Per\u00edodo: De 10/07/2023 at\u00e9 14/07/2023

"},{"location":"comunicacao/reunioes/reuniao6/reuniao/#informacoes","title":"informa\u00e7\u00f5es","text":"
  • Reuni\u00e3o com o TCU - 11/07
  • Reuni\u00e3o de acompanhamento - 14/07
"},{"location":"comunicacao/reunioes/reuniao6/reuniao/#presentes","title":"Presentes","text":"Participantes Presente Caio Vitor Presente Eduardo Gurgel Presente Pedro Braga Presente Ugor Costa Presente Victor L\u00e1zaro Presente"},{"location":"comunicacao/reunioes/reuniao7/reuniao/","title":"Reuni\u00e3o 03/08","text":""},{"location":"comunicacao/reunioes/reuniao7/reuniao/#pautas-da-reuniao","title":"Pautas da reuni\u00e3o","text":"
  • Atribui\u00e7\u00f5es
  • Andamento
"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#atribuicoes","title":"Atribui\u00e7\u00f5es","text":""},{"location":"comunicacao/reunioes/reuniao7/reuniao/#scrum-master","title":"Scrum Master","text":"

Este indiv\u00edduo tem como fun\u00e7\u00e3o garantir que os rituais propostos pela equipe com base na metodologia Scrum sejam fielmente seguidos. Al\u00e9m de monitorar os membros do grupo, impulsionar e resolver eventuais conflitos. Pode-se resumir como \"L\u00edder\" da equipe Scrum. - Membro respons\u00e1vel: Pedro Braga @Stain19

"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#product-manager","title":"Product manager","text":"

Este indiv\u00edduo tem como compet\u00eancia detalhar o roadmap do projeto, elaborar issues, organizar o GitProject e marcar reuni\u00f5es com os stackholders. - Membro Respons\u00e1vel: Eduardo Gurgel @EduardoGurgel

"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#lider-tecnico","title":"L\u00edder T\u00e9cnico","text":"

Este indiv\u00edduo tem como compet\u00eancia direcionar os estudos da equipe e garimpar conte\u00fados, tutoriais e treinamentos relacionados ao projeto. Al\u00e9m de documentar decis\u00f5es t\u00e9cnicas e garantir que os conte\u00fados t\u00e9cnicos aprendidos circulem entre os membros do grupo. - Membro Respons\u00e1vel: Ugor Brand\u00e3o @ubrando

"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#community-manager","title":"Community manager","text":"

Este indiv\u00edduo tem como compet\u00eancia organizar, planejar e estruturar a documenta\u00e7\u00e3o afim de transparecer o andamento do projeto com stackholders. Sua fun\u00e7\u00e3o deve ser trabalhada pr\u00f3xima ao product manager. Cabe a ele organizar o GitPage do projeto 04-PipelineTCU - Membro Respons\u00e1vel: Caio Vitor @caiozim112

"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#devopsarquiteturaautomacoes","title":"Devops/Arquitetura/Automa\u00e7\u00f5es","text":"

Este indiv\u00edduo tem como compet\u00eancia lidar com as automa\u00e7\u00f5es que o projeto ter\u00e1, decidir e organizar a arquitetura utilizada no projeto e disponibilizar o projeto ao cliente(TCU), deploy, integra\u00e7\u00e3o, etc. - Membro Respons\u00e1vel: Vict\u00f3rio L\u00e1zaro @Victor-oss

"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#revisao-da-sprint-6","title":"Revis\u00e3o da Sprint 6","text":""},{"location":"comunicacao/reunioes/reuniao7/reuniao/#realizado","title":"Realizado","text":""},{"location":"comunicacao/reunioes/reuniao7/reuniao/#caio-victor","title":"Caio Victor","text":"
  • Feita a an\u00e1lise da base de dados do IRENA de acordo com a issue #26
  • Adi\u00e7\u00e3o de dados de renda relacionada \u00e0 setor energ\u00e9tico no PowerBI
"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#eduardo-gurgel","title":"Eduardo Gurgel","text":"
  • Elabora\u00e7\u00e3o de um roadmap para an\u00e1lise da estrutura do projeto. Foram aferidas quais tecnologias poderiam ser utilizadas para processamento de grandes quantidades de dados.
"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#pedro-henrique-braga","title":"Pedro Henrique Braga","text":"
  • Foi feito um estudo sobre o PNE 2050 afim de verificar e avaliar quais dados s\u00e3o relevantes para auditoria realizada pelo TCU e afins.
  • Contribui\u00e7\u00e3o para Cria\u00e7\u00e3o do Parsing para coleta de dados de entrada dispon\u00edveis pelo PNE, feito em pareamento com o Vict\u00f3rio L\u00e1zaro.
"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#ugor-brandao","title":"Ugor Brand\u00e3o","text":"
  • Foi feito o parsing de dados do Balan\u00e7o Energ\u00e9tico Nacional e os dados foram dispostos no PowerBi
"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#victorio-lazaro","title":"Vict\u00f3rio L\u00e1zaro","text":"
  • Estudou-se a base de dados do IRENA para aferi\u00e7\u00e3o de dados de renda e empregabilidade relacionados \u00e0s fontes erneg\u00e9ticas.

  • Cria\u00e7\u00e3o do parsing dos dados de entrada do PNE.

  • Adi\u00e7\u00e3o dos dados ao PowerBi

"},{"location":"comunicacao/reunioes/reuniao7/reuniao/#presentes-na-reuniao","title":"Presentes na reuni\u00e3o","text":"
  • [x] Caio Victor
  • [x] Eduardo Gurgel
  • [x] Pedro Henrique Braga
  • [x] Ugor Brand\u00e3o
  • [x] Vict\u00f3rio L\u00e1zaro
"},{"location":"cronograma/cronograma/","title":"Cronograma","text":""},{"location":"cronograma/cronograma/#introducao","title":"Introdu\u00e7\u00e3o","text":"

\u2003\u2003O cronograma \u00e9 uma ferramenta que tem como objetivo organizar as atividades, os recursos e os prazos de um projeto de forma visual, neste caso, em tabelas. Os cronogramas a seguir foram constru\u00eddos a partir das datas e prazos estimulados pelos integrantes do Projeto.

"},{"location":"cronograma/cronograma/#cronograma-geral","title":"Cronograma geral","text":"Etapa T\u00edtulo Descri\u00e7\u00e3o In\u00edcio Entrega 1 Levantamento das bases de dados/Organiza\u00e7\u00e3o do Projeto

Bases de dados que usaremos no Projeto, Planejamento do Projeto, Equipe, Ferramentas do Projeto, Elicita\u00e7\u00e3o de Requisitos

19/06 23/07 2 An\u00e1lise dos dados

Cria\u00e7\u00e3o da Aplica\u00e7\u00e3o

24/07 27/10 3 Relat\u00f3rio/Apresenta\u00e7\u00e3o Final

Cria\u00e7\u00e3o do Relat\u00f3rio que ser\u00e1 apresentado ao final do Projeto

27/10 27/11 Tabela 1 - Cronograma geral da equipe.

OBS: A Respectiva Etapas das sprints est\u00e3o documentadas na ata de Comunica\u00e7\u00e3o

"},{"location":"cronograma/cronograma/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/07/2023 Cria\u00e7\u00e3o do documento Caio Vitor Carneiro"},{"location":"cronograma/roadmap/","title":"Roadmap","text":""},{"location":"cronograma/roadmap/#introducao","title":"Introdu\u00e7\u00e3o","text":"

\u2003\u2003O roadmap \u00e9 uma ferramenta visual que nos auxilia na orienta\u00e7\u00e3o e no planejamento ao longo do projeto, e descreve a trajet\u00f3ria para o desenvolvimento e conclus\u00e3o do projeto ao longo do tempo. Ele tem uma import\u00e2ncia significativa em v\u00e1rias etapas do ciclo de vida de um projeto e oferece diversos benef\u00edcios.

\u2003\u2003Al\u00e9m disso, o roadmap desempenha um papel estrat\u00e9gico ao ajudar na defini\u00e7\u00e3o de prioridades e metas, o que facilita na designa\u00e7\u00e3o de tarefas.

"},{"location":"cronograma/roadmap/#roadmap-do-projeto","title":"Roadmap do projeto","text":""},{"location":"cronograma/roadmap/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 11/08/2023 Cria\u00e7\u00e3o do documento Eduardo Gurgel"},{"location":"dashboards/dashboards/","title":"Dashboard","text":""},{"location":"dashboards/dashboards/#introducao","title":"Introdu\u00e7\u00e3o","text":"

Neste documento, apresentaremos as Dashboards criadas com a utiliza\u00e7\u00e3o das nossas fontes de dados. Tamb\u00e9m \u00e9 disponibilizado o Repositorio, nele \u00e9 poss\u00edvel v\u00ea as planilhas na qual extraimos os dados e o arquivo do PowerBi, mas o acesso \u00e9 permitido somente a usu\u00e1rios que tenham o e-mail @aluno.unb.br.

"},{"location":"dashboards/dashboards/#painel","title":"Painel","text":"

Este \u00e9 o modelo do painel que ser\u00e1 usado para manipular os indicadores.

Figura 1: Painel TCU

"},{"location":"dashboards/dashboards/#1-potencia-acumulada-por-cenario-do-plano-nacional-de-energia-2050","title":"1. Pot\u00eancia Acumulada Por Cen\u00e1rio do Plano Nacional de Energia 2050","text":"

Realizado com Dados do Plano Nacional de Energia 2050 de 2050 \u00e0 2015.

Pot\u00eancia Acumulada Por Cen\u00e1rio - PNE 2050

Figura 2: Pot\u00eancia Acumulada (MW) por Cen\u00e1rio

"},{"location":"dashboards/dashboards/#2-geracao-periodo-medio-por-cenario-do-plano-nacional-de-energia-2050","title":"2. Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio Por Cen\u00e1rio do Plano Nacional de Energia 2050","text":"

Realizado com Dados do Plano Nacional de Energia 2050 de 2050 \u00e0 2015.

Pot\u00eancia Acumulada Por Cen\u00e1rio - PNE 2050

Figura 3: Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio (MW M\u00e9dios)

"},{"location":"dashboards/dashboards/#3-balanco-de-potencia-por-cenario-do-plano-nacional-de-energia-2050","title":"3. Balan\u00e7o de Pot\u00eancia Por Cen\u00e1rio do Plano Nacional de Energia 2050","text":"

Realizado com Dados do Plano Nacional de Energia 2050 de 2050 \u00e0 2015.

Pot\u00eancia Acumulada Por Cen\u00e1rio - PNE 2050

Figura 4: Balan\u00e7o de Pot\u00eancia (MW)

"},{"location":"dashboards/dashboards/#4-participacao-por-setor-na-matriz-energetica-brasileira-e-mundial","title":"4. Participa\u00e7\u00e3o por setor na matriz energ\u00e9tica brasileira e mundial","text":"

Realizados com Dados do Energy Statistics Data Browser - IEA.

Energy Statistics Data Browser - IEA

Figura 5: Participa\u00e7\u00e3o por setor na matriz energ\u00e9tica brasileira

"},{"location":"dashboards/dashboards/#5-empregabilidade-ao-longos-dos-anos-e-empregabilidade-das-tecnologias-ao-longos-dos-anos","title":"5. Empregabilidade ao longos dos anos e Empregabilidade das tecnologias ao longos dos anos","text":"

Realizado com Dados do Renewable Energy and Jobs de 2022 \u00e0 2013

Empregabilidade - Irena

Figura 6: Apresenta\u00e7\u00e3o da Dash de Empregabilidade

"},{"location":"dashboards/dashboards/#6-geracao-de-energia-por-tecnologia-brasil","title":"6. Gera\u00e7\u00e3o de energia por Tecnologia Brasil","text":"

Realizado com Dados do Operador Nacional do Sistema El\u00e9trico - Gera\u00e7\u00e3o Energia

Gera\u00e7\u00e3o Energia - ONS

Figura 7: Visualiza\u00e7\u00e3o da Gera\u00e7\u00e3o de energia por Tecnologia Brasil

"},{"location":"dashboards/dashboards/#7-consumo-total-epe","title":"7. Consumo Total EPE","text":"

Realizados com Dados da Empresa de Pesquisa Energ\u00e9tica - EPE.

Empresa de Pesquisa Energ\u00e9tica - EPE

Figura 8: Visualiza\u00e7\u00e3o do Consumo Total EPE

"},{"location":"dashboards/dashboards/#8-variaveis-estudadas-no-balanco-energetico-nacional","title":"8. Vari\u00e1veis estudadas no Balan\u00e7o Energ\u00e9tico Nacional","text":"

Realizados com Dados da Empresa de Pesquisa Energ\u00e9tica - EPE.

Empresa de Pesquisa Energ\u00e9tica - EPE

Figura 9: Visualiza\u00e7\u00e3o de todas as vari\u00e1veis do Balan\u00e7o Energ\u00e9tico Nacional

"},{"location":"dashboards/dashboards/#9-variaveis-estudadas-no-anuario-estatistico-de-energia-eletrica","title":"9. Vari\u00e1veis estudadas no Anu\u00e1rio Estat\u00edstico de Energia El\u00e9trica","text":"

Realizados com Dados da Empresa de Pesquisa Energ\u00e9tica - EPE. Todas as visualiza\u00e7\u00f5es abaixo foram geradas a partir dos dados acima.

Empresa de Pesquisa Energ\u00e9tica - EPE"},{"location":"dashboards/dashboards/#capacidade-instalada-de-geracao-eletrica","title":"Capacidade Instalada de Gera\u00e7\u00e3o El\u00e9trica","text":"

Figura 10: Capacidade Instalada de Gera\u00e7\u00e3o El\u00e9trica para os 10 Pa\u00edses com Maior Capacidade Instalada por Fonte do \u00daltimo Ano

"},{"location":"dashboards/dashboards/#geracao-eletrica-para-os-10-paises-com-maior-geracao-eletrica","title":"Gera\u00e7\u00e3o El\u00e9trica para os 10 Pa\u00edses com Maior Gera\u00e7\u00e3o El\u00e9trica","text":"

Figura 11: Gera\u00e7\u00e3o El\u00e9trica para os 10 Pa\u00edses com Maior Gera\u00e7\u00e3o El\u00e9trica por Fonte do \u00daltimo Ano

"},{"location":"dashboards/dashboards/#capacidade-instalada-de-geracao-eletrica-e-geracao-eletrica-por-fonte-no-brasil","title":"Capacidade Instalada de Gera\u00e7\u00e3o El\u00e9trica e Gera\u00e7\u00e3o El\u00e9trica por Fonte no Brasil","text":"

Figura 12: Capacidade Instalada de Gera\u00e7\u00e3o El\u00e9trica e Gera\u00e7\u00e3o El\u00e9trica por Fonte no Brasil

"},{"location":"dashboards/dashboards/#emissoes-provenientes-da-geracao-eletrica-do-sin-sistema-isolado-e-autoproducao","title":"Emiss\u00f5es Provenientes da Gera\u00e7\u00e3o El\u00e9trica do SIN, Sistema Isolado e Autoprodu\u00e7\u00e3o","text":"

Figura 13: Emiss\u00f5es Provenientes da Gera\u00e7\u00e3o El\u00e9trica do SIN, Sistema Isolado e Autoprodu\u00e7\u00e3o

"},{"location":"dashboards/dashboards/#consumo-medio-total-de-energia-eletrica-por-subsistema-e-por-regiao","title":"Consumo M\u00e9dio Total de Energia El\u00e9trica por Subsistema e por Regi\u00e3o","text":"

Figura 14: Consumo M\u00e9dio Total de Energia El\u00e9trica por Subsistema e por Regi\u00e3o (kWh/m\u00eas)

"},{"location":"dashboards/dashboards/#consumo-medio-residencial-de-energia-eletrica-por-subsistema-e-por-regiao","title":"Consumo M\u00e9dio Residencial de Energia El\u00e9trica por Subsistema e por Regi\u00e3o","text":"

Figura 15: Consumo M\u00e9dio Residencial de Energia El\u00e9trica por Subsistema e por Regi\u00e3o (kWh/m\u00eas)

"},{"location":"dashboards/dashboards/#consumo-medio-anual-de-energia-eletrica-per-capita-por-subsistema-e-por-regiao","title":"Consumo M\u00e9dio Anual de Energia El\u00e9trica Per Capita por Subsistema e por Regi\u00e3o","text":"

Figura 16: Consumo M\u00e9dio Anual de Energia El\u00e9trica Per Capita por Subsistema e por Regi\u00e3o (kWh/hab)

"},{"location":"dashboards/dashboards/#8-emissoes-de-gee-brasil","title":"8. Emiss\u00f5es de GEE Brasil","text":"

Realizados com Dados da Empresa de Pesquisa Energ\u00e9tica - EPE. Todas as visualiza\u00e7\u00f5es abaixo foram geradas a partir dos dados acima.

Figura 17: Emiss\u00f5es de GEE Brasil

Empresa de Pesquisa Energ\u00e9tica - EPE"},{"location":"dashboards/dashboards/#9-evolucao-das-fontes-de-tecnologia","title":"9. Evolu\u00e7\u00e3o das fontes de Tecnologia","text":"

Realizados com Dados da Empresa de Pesquisa Energ\u00e9tica - EPE. Todas as visualiza\u00e7\u00f5es abaixo foram geradas a partir dos dados acima.

Empresa de Pesquisa Energ\u00e9tica - EPE

Figura 18: Evolu\u00e7\u00e3o das fontes de tecnologia

"},{"location":"dashboards/dashboards/#10-custo-por-tecnologia","title":"10. Custo por Tecnologia","text":"

Realizados com Dados do Our World in Data. Todas as visualiza\u00e7\u00f5es abaixo foram geradas a partir dos dados acima.

Our World in Data

Figura 19: Custo por Tecnologia e Pais(US$/kilowatt-hour)

"},{"location":"dashboards/dashboards/#11-custo-por-investimento","title":"11. Custo por Investimento","text":"

Realizados com Dados do Our World in Data. Todas as visualiza\u00e7\u00f5es abaixo foram geradas a partir dos dados acima.

Our World in Data

Figura 20: Investimento por Tecnologia no undo(US$ por Ano)

"},{"location":"elicitacao/cenarios/","title":"Cenarios","text":""},{"location":"elicitacao/cenarios/#introducao","title":"Introdu\u00e7\u00e3o","text":"

Um cen\u00e1rio \u00e9 basicamente uma hist\u00f3ria sobre pessoas realizando uma atividade (Rosson e Carroll, 2002), e a partir deste pretexto, vamos adotar a t\u00e9cnica para descrever os cen\u00e1rios que o e-T\u00edtulo tange e pode ser acess\u00edvel para cada fun\u00e7\u00e3o.

"},{"location":"elicitacao/cenarios/#objetivo","title":"Objetivo","text":"

Os cen\u00e1rios podem ser utilizados em diversas etapas do processo, com diferentes objetivos: para descrever uma hist\u00f3ria num dom\u00ednio de atividade, visando capturar requisitos e auxiliar no entendimento da atividade, levantar quest\u00f5es sobre a introdu\u00e7\u00e3o de tecnologia, explorar diferentes solu\u00e7\u00f5es de design e avaliar se um produto satisfaz a necessidade dos seus usu\u00e1rios (Rosson e Carroll, 2002). O objetivo da ado\u00e7\u00e3o da t\u00e9cnica neste projeto \u00e9 tentar prever poss\u00edveis cen\u00e1rios que atinjam nossos casos de uso ou n\u00e3o, fazendo com que tenhamos a no\u00e7\u00e3o se nossa diagrama\u00e7\u00e3o dos casos de uso tangem todos os casos que podem ser feitos em diferentes cen\u00e1rios pelos seu usu\u00e1rios, sendo uma t\u00e9cnica que requer menos custo e tempo quando comparados com modelos e prot\u00f3tipos complexos. Um cen\u00e1rio descreve o comportamento e a experi\u00eancia de um ator(es).

"},{"location":"elicitacao/cenarios/#cenarios_1","title":"Cen\u00e1rios","text":""},{"location":"elicitacao/cenarios/#c01-visualizar-balanco-energetico","title":"C01: Visualizar Balan\u00e7o Energ\u00e9tico","text":"

Cen\u00e1rio Descri\u00e7\u00e3o T\u00edtulo Visualizar Balan\u00e7o Energ\u00e9tico Objetivo Permitir que os usu\u00e1rios visualizem o Balan\u00e7o Energ\u00e9tico Contexto Local: No PowerBi Pr\u00e9-condi\u00e7\u00e3o: ter o software rodando e inserir o valor que deseja investir em determinada tecnologia P\u00f3s-condi\u00e7\u00e3o: Usu\u00e1rio consulta fontes e tecnologias. Recursos Conex\u00e3o de internet, aplicativo instalado Epis\u00f3dios Usu\u00e1rio entra no aplicativo Usu\u00e1rio visualiza o Balan\u00e7o Energ\u00e9tico Usu\u00e1rio visualiza as tabelas relacionadas as tecnologias como produ\u00e7\u00e3o,importa\u00e7\u00e3o e exporta\u00e7\u00e3o Exce\u00e7\u00e3o Dados inexistente Tabela 1 - Descri\u00e7\u00e3o das caracter\u00edsticas do Cen\u00e1rio 01

"},{"location":"elicitacao/cenarios/#c02-consultar-fontes-e-tecnologias","title":"C02: Consultar Fontes e Tecnologias","text":"

Cen\u00e1rio Descri\u00e7\u00e3o T\u00edtulo Consultar Fontes e Tecnologias Objetivo Permitir que os usu\u00e1rios consultem Fontes e Tecnologias. Contexto Local: No PowerBi Pr\u00e9-condi\u00e7\u00e3o: ter o software rodando e inserir o valor que deseja investir em determinada tecnologia P\u00f3s-condi\u00e7\u00e3o: Usu\u00e1rio consulta fontes e tecnologias. Recursos Conex\u00e3o de internet, aplicativo instalado Epis\u00f3dios Usu\u00e1rio entra no aplicativo Usu\u00e1rio seleciona as fontes e tecnologias Usu\u00e1rio visualiza a fonte de determinada tecnologia e sua respectiva gera\u00e7\u00e3o planejada entre 2015,2030,2040 e 2050 Exce\u00e7\u00e3o Dados inexistente Tabela 2 - Descri\u00e7\u00e3o das caracter\u00edsticas do Cen\u00e1rio 02

"},{"location":"elicitacao/cenarios/#c03-inserir-possivel-valor-de-investimento-por-tecnologia","title":"C03: Inserir poss\u00edvel valor de investimento por tecnologia","text":"

Cen\u00e1rio Descri\u00e7\u00e3o T\u00edtulo Inserir poss\u00edvel valor de investimento por tecnologia Objetivo Permitir que os usu\u00e1rios inseriram poss\u00edvel valor de investimento por tecnologia Contexto Local: No PowerBi Pr\u00e9-condi\u00e7\u00e3o: ter o software rodando e inserir o valor que deseja investir em determinada tecnologia P\u00f3s-condi\u00e7\u00e3o: Usu\u00e1rio visualiza o valor da produ\u00e7\u00e3o e emiss\u00e3o Atores Usu\u00e1rio do TCU. Recursos Conex\u00e3o de internet, aplicativo instalado Epis\u00f3dios Usu\u00e1rio entra no aplicativo Usu\u00e1rio insere os valores de investimento para determinada tecnologia Usu\u00e1rio visualiza proje\u00e7\u00e3o at\u00e9 2050, relacionado as emiss\u00f5es dessa tecnologia, e os impactos positivos e negativos Exce\u00e7\u00e3o Dados inexistente Tabela 3 - Descri\u00e7\u00e3o das caracter\u00edsticas do Cen\u00e1rio 03

"},{"location":"elicitacao/cenarios/#c04-simular-emissoes","title":"C04: Simular emiss\u00f5es","text":"

Cen\u00e1rio Descri\u00e7\u00e3o T\u00edtulo Simular emiss\u00f5es Objetivo Permitir que os usu\u00e1rios simulem emiss\u00f5es. Contexto Local: No PowerBi Pr\u00e9-condi\u00e7\u00e3o: ter o software rodando P\u00f3s-condi\u00e7\u00e3o: Usu\u00e1rio visualiza as emiss\u00f5es de determinada tecnologia . Atores Usu\u00e1rio do TCU. Recursos Conex\u00e3o de internet, aplicativo instalado Epis\u00f3dios Usu\u00e1rio entra no aplicativo Usu\u00e1rio seleciona os criterios da tecnologias que deseja v\u00ea as emiss\u00f5es Exce\u00e7\u00e3o Dados inexistente Tabela 4 - Descri\u00e7\u00e3o das caracter\u00edsticas do Cen\u00e1rio 04

"},{"location":"elicitacao/entrevista/","title":"Entrevista","text":""},{"location":"elicitacao/entrevista/#introducao","title":"Introdu\u00e7\u00e3o","text":"

Uma entrevista realizada com o cliente \u00e9 um processo de intera\u00e7\u00e3o entre um profissional ou equipe e um cliente, com o objetivo de coletar informa\u00e7\u00f5es relevantes, compreender necessidades, expectativas, desafios e objetivos espec\u00edficos do cliente. Essa intera\u00e7\u00e3o ocorre frequentemente em diversos contextos, como neg\u00f3cios, servi\u00e7os de consultoria, design, desenvolvimento de produtos, pesquisa de mercado, entre outros.

"},{"location":"elicitacao/entrevista/#metodologia","title":"Metodologia","text":"

A entrevista com o cliente ocorre a cada duas semanas, durante \u00e0s ter\u00e7as de forma virtual, via Teams. Os entrevistados s\u00e3o profissionais da \u00e1rea de TI, energia. Atuam no Tribunal de Contas da Uni\u00e3o.

Durante a entrevista, foi utilizado principalmente perguntas abertas para permitir que os entrevistados expressassem livremente suas opini\u00f5es. Al\u00e9m disso foi apresentado uma proposta de prot\u00f3tipo, com objetivo de motiva-los a entender como resultaria o projeto final.

Foi utilizada a metodologia 5W2H (Tabela 1) \u00e9 uma t\u00e9cnica de gerenciamento e planejamento que visa estabelecer um conjunto de diretrizes claras e abrangentes para a execu\u00e7\u00e3o de projetos, tarefas ou a\u00e7\u00f5es.

Acr\u00f4nimo Pergunta What O qu\u00ea Why Por qu\u00ea Who Quem When Quando Where Onde How Como How much Quanto

"},{"location":"elicitacao/entrevista/#perguntas-feitas-na-entrevista-utilizando-a-tecnica-5w2h","title":"Perguntas feitas na entrevista utilizando a t\u00e9cnica 5W2H:","text":"Tipo Perguntas What(O qu\u00ea): 1. Qual seria a frequ\u00eancia de uso ou acesso aos dados? 2. O que voc\u00ea acha que n\u00e3o deve faltar em uma dashboard? Why(Por qu\u00ea): 3. Por que voc\u00ea usaria a dashboard, existe algum motivo espec\u00edfico? Who(Quem): 4. Com quem voc\u00ea pretende compartilhar ou exibir a dashboard? Where(Onde): 5. Voc\u00ea pretende usar apenas no local de trabalho para visualizar os dados, ou tamb\u00e9m em outro local, em casa? When(Quando): 6. Quando voc\u00ea pretende usar a dashboard? Somente no hor\u00e1rio de trabalho ou outro hor\u00e1rio? How(Como): 7. A partir do prot\u00f3tipo apresentado, como a dashboardo poderia ser melhorada? Voc\u00ea tem alguma sugest\u00e3o de aprimoramento?"},{"location":"elicitacao/entrevista/#requisitos-elicitados","title":"Requisitos elicitados","text":""},{"location":"elicitacao/entrevista/#legenda","title":"Legenda","text":"
  • ENT: Entrevista
  • RF: Requisito funcional
  • RNF: Requisito n\u00e3o funcional
Identificador Requisito Tipo ENT01 Visualizar os dados de Pot\u00eancia Acumulada do Brasil e do Mundo RF ENT02 Visualizar os dados de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio do Brasil RF ENT03 Visualizar os dados de Custo de Opera\u00e7\u00e3o do Brasil e do Mundo RF ENT04 Visualizar a fonte de dados de cada gr\u00e1fico RF ENT05 Filtrar os dados atualizados de empregabilidade por fonte/tecnologia RF ENT06 Filtrar os dados atualizados da matriz energ\u00e9tica do Brasil RF ENT07 Filtrar uma matriz energ\u00e9tica e verificar seu n\u00edvel de emiss\u00f5es RF ENT08 Filtrar a fonte de dados de cada gr\u00e1fico RF ENT09 Simular diferentes cen\u00e1rios de demanda, para avaliar seu impacto nas proje\u00e7\u00f5es de emiss\u00e3o RF ENT10 Comparar dados de Emiss\u00f5es Equivalentes de CO2 do Brasil e do mundo RF ENT11 Comparar dados de Custo de Opera\u00e7\u00e3o do Brasil e do Mundo RF ENT12 Comparar dados de Consumo de G\u00e1s Natural do Brasil e do Mundo RF ENT13 Comparar dados atualizados de empregabilidade RF"},{"location":"elicitacao/lexico/","title":"L\u00e9xico","text":""},{"location":"elicitacao/lexico/#introducao","title":"Introdu\u00e7\u00e3o","text":"

Trata-se de uma t\u00e9cnica que procura descrever os s\u00edmbolos de uma linguagem. O principal objetivo a ser perseguido pelos Engenheiros de Requisitos \u00e9 a identifica\u00e7\u00e3o de palavras ou frases peculiares ao meio social da aplica\u00e7\u00e3o sob estudo.

"},{"location":"elicitacao/lexico/#metodologia","title":"Metodologia","text":"

A metodologia \u00e9 baseada no material apresentado em aula, sendo uso o slide dos professores Milene e Maur\u00edcio. Trata-se de uma t\u00e9cnica que procura descrever os s\u00edmbolos de uma linguagem. O principal objetivo a ser perseguido pelos Engenheiros de Requisitos \u00e9 a identifica\u00e7\u00e3o de palavras ou frases peculiares ao meio social da aplica\u00e7\u00e3o sob estudo.

"},{"location":"elicitacao/lexico/#resultado","title":"Resultado","text":"Defini\u00e7\u00e3o Sin\u00f4nimo(s) No\u00e7\u00e3o Impacto Classifica\u00e7\u00e3o Dados Base os dados s\u00e3o uma cole\u00e7\u00e3o de valores discretos que transmitem informa\u00e7\u00f5es, descrevendo quantidade, qualidade, fatos, estat\u00edsticas, outras unidades b\u00e1sicas de significado, ou simplesmente sequ\u00eancias de s\u00edmbolos que podem ser posteriormente interpretados. Os gr\u00e1ficos s\u00e3o construidos utilizando dados Estado Usuario pessoa,cliente Pessoa que utiliza o aplicativo Usuario visualiza os gr\u00e1ficos Objeto Fonte origem O que d\u00e1 origem a algo ou \u00e9 o princ\u00edpio de alguma coisa; origem, causa os dados foram extradaidos de tal Fonte Objeto Visualizar observar Transformar conceitos abstratos em imagens mentalmente vis\u00edveis os graficos s\u00e3o visualizados Objeto"},{"location":"elicitacao/personas/","title":"Personas","text":""},{"location":"elicitacao/personas/#introducao","title":"Introdu\u00e7\u00e3o","text":"

As personas s\u00e3o poss\u00edveis usu\u00e1rios que podem interagir com um produto, aplicativo ou sistema. Tem por objetivo ajudar equipes de desenvolvimento e design a compreender melhor as necessidades, caracter\u00edsticas e comportamentos dos diferentes tipos de usu\u00e1rios. As personas s\u00e3o baseadas em dados reais, como pesquisas de mercado, entrevistas, an\u00e1lises de dados e feedback de clientes.

Ao elaborar uma persona, pode incluir diversos dados, como idade, interesse, objetivo, profiss\u00e3o e at\u00e9 mesmo grau de escolaridade. A elabora\u00e7\u00e3o de personas ajuda a equipe a ter uma vis\u00e3o mais clara de quem s\u00e3o os usu\u00e1rios-alvo e como eles podem interagir com o produto ou servi\u00e7o. Isso orienta o desenvolvimento e o design, garantindo que as decis\u00f5es tomadas estejam alinhadas \u00e0s necessidades reais dos usu\u00e1rios.

"},{"location":"elicitacao/personas/#perfil-do-usuario","title":"Perfil do usu\u00e1rio","text":"

O perfil do usu\u00e1rio \u00e9 uma representa\u00e7\u00e3o detalhada das caracter\u00edsticas, prefer\u00eancias, comportamentos e necessidades de um indiv\u00edduo que interage com um produto, servi\u00e7o ou sistema. Ele abrange informa\u00e7\u00f5es demogr\u00e1ficas, como idade, g\u00eanero e localiza\u00e7\u00e3o, al\u00e9m de dados psicogr\u00e1ficos, como interesses, valores, estilo de vida e comportamento de consumo. O perfil do usu\u00e1rio ajuda a equipe de desenvolvimento a compreender quem s\u00e3o os usu\u00e1rios-alvo e como eles se encaixam no contexto do produto ou servi\u00e7o.

"},{"location":"elicitacao/personas/#personas_1","title":"Personas","text":""},{"location":"elicitacao/personas/#joao-oliveira-persona-primaria","title":"Jo\u00e3o Oliveira (Persona Prim\u00e1ria)","text":"Figura 1: Jo\u00e3o Oliveira (persona prim\u00e1ria). Fonte: Thispersondoesnotexist Informa\u00e7\u00e3o Persona Nome Jo\u00e3o Oliveira. Idade 35 Anos. G\u00eanero Masculino. Localidade Bras\u00edlia, DF, Brasil. Profiss\u00e3o Pesquisador em Energias Renov\u00e1veis Caracter\u00edstica Mestrado em Engenharia El\u00e9trica, trabalha em institui\u00e7\u00e3o de pesquisa Necessidades Acesso a dados detalhados e atualizados sobre a transi\u00e7\u00e3o energ\u00e9tica, busca por gr\u00e1ficos, estat\u00edsticas e an\u00e1lises aprofundadas para suas pesquisas e relat\u00f3rios acad\u00eamicos."},{"location":"elicitacao/personas/#maria-silva-persona-secundaria","title":"Maria Silva (Persona Secund\u00e1ria)","text":"Figura 1: Maria Silva (persona secund\u00e1ria). Fonte: Thispersondoesnotexist Informa\u00e7\u00e3o Persona Nome Maria Silva Idade 28 Anos. G\u00eanero Feminino. Localidade S\u00e3o Paulo, SP, Brasil. Profiss\u00e3o Jornalista Especializada em Meio Ambiente Caracter\u00edstica Escreve para revistas e portais de not\u00edcias Necessidades Acesso a dados confi\u00e1veis e atualizados sobre a transi\u00e7\u00e3o energ\u00e9tica para embasar suas mat\u00e9rias, busca por informa\u00e7\u00f5es que possam ser comunicadas de forma clara ao p\u00fablico."},{"location":"elicitacao/personas/#carlos-souza-antipersona","title":"Carlos Souza (Antipersona)","text":"Figura 1: Carlos Souza (Antipersona). Fonte: Thispersondoesnotexist Informa\u00e7\u00e3o Persona Nome Carlos Souza Idade 50 Anos. G\u00eanero Masculino. Localidade Rio de Janeiro, RJ, Brasil. Profiss\u00e3o Empres\u00e1rio do Setor de Combust\u00edveis F\u00f3sseis Caracter\u00edstica C\u00e9tico em rela\u00e7\u00e3o \u00e0s energias renov\u00e1veis Motiva\u00e7\u00e3o N\u00e3o acredita nos benef\u00edcios da transi\u00e7\u00e3o energ\u00e9tica, n\u00e3o tem interesse em informa\u00e7\u00f5es que promovam energias alternativas."},{"location":"elicitacao/storytelling/","title":"Storytelling","text":""},{"location":"elicitacao/storytelling/#introducao","title":"Introdu\u00e7\u00e3o","text":"

A t\u00e9cnica do storytelling est\u00e1 baseada na cria\u00e7\u00e3o de uma narrativa visual envolvente e impactante \u00e9 essencial para transmitir de maneira eficaz os objetivos, resultados e significado do nosso projeto aos stakeholders e \u00e0 equipe. Esta issue tem como objetivo desenvolver uma estrat\u00e9gia de storytelling que capte a aten\u00e7\u00e3o, transmita a mensagem-chave e conecte os elementos do projeto de forma coesa.

"},{"location":"elicitacao/storytelling/#narrativas","title":"Narrativas","text":""},{"location":"elicitacao/storytelling/#historia-de-joao-oliveira","title":"Hist\u00f3ria de Jo\u00e3o Oliveira","text":"

Como um pesquisador em energias renov\u00e1veis, desejo ter acesso a uma plataforma que forne\u00e7a dados detalhados e atualizados sobre a transi\u00e7\u00e3o energ\u00e9tica. Eu gostaria de visualizar gr\u00e1ficos, estat\u00edsticas e an\u00e1lises aprofundadas que possam enriquecer minhas pesquisas e relat\u00f3rios acad\u00eamicos, permitindo-me tomar decis\u00f5es informadas e contribuir para o avan\u00e7o das energias renov\u00e1veis.

"},{"location":"elicitacao/storytelling/#historia-de-maria-silva","title":"Hist\u00f3ria de Maria Silva","text":"

Sendo uma jornalista especializada em meio ambiente, necessito de uma fonte confi\u00e1vel de dados sobre a transi\u00e7\u00e3o energ\u00e9tica para embasar minhas mat\u00e9rias. Preciso acessar informa\u00e7\u00f5es claras e atualizadas que possam ser comunicadas de forma compreens\u00edvel ao p\u00fablico. Uma plataforma que me forne\u00e7a gr\u00e1ficos visuais e estat\u00edsticas relevantes seria essencial para criar reportagens informativas e envolventes.

"},{"location":"elicitacao/storytelling/#historia-de-carlos-souza","title":"Hist\u00f3ria de Carlos Souza","text":"

Enquanto empres\u00e1rio do setor de combust\u00edveis f\u00f3sseis, n\u00e3o tenho interesse nas energias renov\u00e1veis e sou c\u00e9tico em rela\u00e7\u00e3o \u00e0 transi\u00e7\u00e3o energ\u00e9tica. Desejo que a plataforma me proporcione informa\u00e7\u00f5es que estejam alinhadas com minha vis\u00e3o, sem promover energias alternativas. Isso me ajudaria a manter minha perspectiva e tomar decis\u00f5es de neg\u00f3cios de acordo com as fontes de energia que considero mais relevantes.

"},{"location":"elicitacao/storytelling/#elicitacao-de-requisitos","title":"Elicita\u00e7\u00e3o de Requisitos","text":"

Com base nas hist\u00f3rias criadas usando a t\u00e9cnica de storytelling, foi poss\u00edvel elicitar os requisitos presentes na tabela 1:

N\u00famero Requisito Classifica\u00e7\u00e3o ST01 O us\u00faario deve poder visualizar os dados de Emiss\u00f5es Equivalentes de CO2 do Brasil RF ST02 O sistema deveria exportar a dashboard em excel RNF ST03 O usu\u00e1rio deveria poder visualizar a fonte de dados de cada gr\u00e1fico RF ST04 A dashboard deveria ser compat\u00edvel com dispositivos m\u00f3veis RNF ST05 O sistema deve ser simples e intuitivo RNF ST06 O usu\u00e1rio deve poder visualizar os dados de Consumo de G\u00e1s Natural do Brasil RF ST07 Ser capaz de funcionar sem internet RNF

Tabela 1: Requisitos elicitados

"},{"location":"elicitacao/priorizacao/MoScoW/","title":"MoScoW","text":""},{"location":"elicitacao/priorizacao/MoScoW/#introducao","title":"Introdu\u00e7\u00e3o","text":"

O m\u00e9todo de prioriza\u00e7\u00e3o de MoSCoW \u00e9 uma t\u00e9cnica utilizada em gerenciamento de projetos para classificar os requisitos do projeto em ordem de prioridade. Os requisitos foram classificados de acordo com sua import\u00e2ncia e relev\u00e2ncia para o sucesso do projeto Simplenote.

  • Must Have: Esses s\u00e3o os requisitos ou funcionalidades essenciais e cruciais para o sucesso do projeto. Se qualquer um desses itens n\u00e3o for atendido, o projeto n\u00e3o ser\u00e1 considerado bem-sucedido.

  • Should Have: Esses requisitos ou funcionalidades s\u00e3o importantes, mas n\u00e3o s\u00e3o essenciais como os \"Must Have\". Eles s\u00e3o considerados valiosos e adicionam valor ao projeto, mas o projeto ainda pode ser considerado conclu\u00eddo se alguns deles n\u00e3o forem atendidos.

  • Could Have: Esses requisitos ou funcionalidades s\u00e3o desej\u00e1veis, mas n\u00e3o s\u00e3o necess\u00e1rios para o sucesso do projeto. Se houver tempo e recursos dispon\u00edveis ap\u00f3s a conclus\u00e3o dos itens \"Must Have\" e \"Should Have\", esses itens podem ser considerados.

  • Won't Have (N\u00e3o Ter\u00e1): Tamb\u00e9m conhecido como \"Would Have\", esses s\u00e3o os requisitos ou funcionalidades que foram decididos que n\u00e3o ser\u00e3o inclu\u00eddos no projeto atual. Isso pode ser devido a restri\u00e7\u00f5es de tempo, recursos ou prioridades.

"},{"location":"elicitacao/priorizacao/MoScoW/#legenda","title":"Legenda","text":"
  • RF: Requisito funcional
  • RNF: Requisito n\u00e3o funcional
"},{"location":"elicitacao/priorizacao/MoScoW/#must-have","title":"Must Have","text":"Tipo Requisito Elicita\u00e7\u00e3o RF01 O us\u00faario deve poder visualizar dados de Pot\u00eancia Acumulada do Brasil Entrevista RF02 O us\u00faario deve poder visualizar os dados de Balan\u00e7o de Pot\u00eancia do Brasil Entrevista RF03 O us\u00faario deve poder visualizar os dados de Emiss\u00f5es Equivalentes de CO2 do Brasil Storytelling RF04 O us\u00faario deve poder visualizar os dados de Consumo de G\u00e1s Natural do Brasil Entrevista RF05 O us\u00faario deve poder visualizar os dados de Custo de Opera\u00e7\u00e3o do Brasil Entrevista RF06 O us\u00faario deve poder filtrar os dados atualizados de empregabilidade por fonte/tecnologia Storytelling RNF07 O sistema deve ser simples e intuitivo Storytelling RF08 O usu\u00e1rio deve poder sincronizar dados Entrevista RF09 O usu\u00e1rio deve poder filtrar os dados atualizados da matriz energ\u00e9tica do Brasil Entrevista"},{"location":"elicitacao/priorizacao/MoScoW/#should-have","title":"Should Have","text":"Tipo Requisito Elicita\u00e7\u00e3o RF12 O usu\u00e1rio deveria poder visualizar a fonte de dados de cada gr\u00e1fico Entrevista RNF13 O sistema deveria exportar a dashboard em excel Storytelling RNF14 O usu\u00e1rio deveria poder acessar a dashboard sem internet Entrevista RF15 O usu\u00e1rio deveria poder pesquisar pelos seus gr\u00e1ficos Entrevista RNF16 A dashboard deveria ser compat\u00edvel com dispositivos m\u00f3veis Entrevista RF18 O usu\u00e1rio deveria poder definir cores para suas dashboards Entrevista"},{"location":"elicitacao/priorizacao/MoScoW/#could-have","title":"Could Have","text":"Tipo Requisito Elicita\u00e7\u00e3o RF21 O usuario poderia ver uma mensagem sobre os indicadores do gr\u00e1fico -- RF22 O usuario poderia definir templates para suas visualiza\u00e7\u00f5es Entrevista RF23 O usuario poderia separar suas dashboards por filtros Entrevista"},{"location":"elicitacao/priorizacao/MoScoW/#wont-have","title":"Won't Have","text":"Tipo Requisito Elicita\u00e7\u00e3o RF29 O usu\u00e1rio n\u00e3o poder\u00e1 adicionar outra fonte de dados -- RF30 O usu\u00e1rio n\u00e3o ter\u00e1 como inserir gr\u00e1ficos na dashboard --"},{"location":"fonte_dados/dicionario/","title":"Dicion\u00e1rio de Dados","text":""},{"location":"fonte_dados/dicionario/#introducao","title":"Introdu\u00e7\u00e3o","text":"

Um Dicion\u00e1rio de Dados \u00e9 uma ferramenta essencial para organizar, descrever e padronizar informa\u00e7\u00f5es relacionadas a sistemas de dados e software. Ele fornece uma vis\u00e3o detalhada das estruturas de dados, incluindo defini\u00e7\u00f5es, formatos e relacionamentos, facilitando a colabora\u00e7\u00e3o e garantindo a qualidade e integridade dos dados em projetos de TI e gerenciamento de informa\u00e7\u00f5es. Nesse documento, adicionamos o dicion\u00e1rio relacionado as tabelas presentes no banco de dados com separa\u00e7\u00e3o por p\u00e1gina do dashboard.

"},{"location":"fonte_dados/dicionario/#pagina-de-capacidade-instalada","title":"P\u00e1gina de Capacidade Instalada","text":""},{"location":"fonte_dados/dicionario/#tabela-potacumpne","title":"Tabela: PotAcumPNE","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Fonte_Tecnologia Fonte ou Tecnologia NVARCHAR(50) Fonte ou Tecnologia da an\u00e1lise N\u00c3O NULO Ano_2015 Ano de 2015 FLOAT Quantidade no ano de 2015 (MW) N\u00c3O NULO Ano_2030 Ano de 2030 INT Quantidade no ano de 2030(MW) N\u00c3O NULO Ano_2040 Ano de 2040 INT Quantidade no ano de 2040(MW) N\u00c3O NULO Ano_2050 Ano de 2050 INT Quantidade no ano de 2050(MW) N\u00c3O NULO Cen\u00e1rio Cen\u00e1rio do PNE NVARCHAR(150) Cen\u00e1rio do PNE de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#pagina-de-geracao-periodo-medio","title":"P\u00e1gina de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio","text":""},{"location":"fonte_dados/dicionario/#tabela-gerpermedpne","title":"Tabela: GerPerMedPNE","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Fonte_Tecnologia Fonte ou Tecnologia NVARCHAR(50) Fonte ou Tecnologia da an\u00e1lise N\u00c3O NULO Ano_2015 Ano de 2015 FLOAT Quantidade no ano de 2015 (MW M\u00e9dios) N\u00c3O NULO Ano_2030 Ano de 2030 INT Quantidade no ano de 2030 (MW M\u00e9dios) N\u00c3O NULO Ano_2040 Ano de 2040 INT Quantidade no ano de 2040 (MW M\u00e9dios) N\u00c3O NULO Ano_2050 Ano de 2050 INT Quantidade no ano de 2050 (MW M\u00e9dios) N\u00c3O NULO Cen\u00e1rio Cen\u00e1rio do PNE NVARCHAR(150) Cen\u00e1rio do PNE de an\u00e1lise (MW M\u00e9dios) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#pagina-de-balanco-de-potencia","title":"P\u00e1gina de Balan\u00e7o de Pot\u00eancia","text":""},{"location":"fonte_dados/dicionario/#tabela-atendpontapne","title":"Tabela: AtendPontaPNE","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Fonte_Tecnologia Fonte ou Tecnologia NVARCHAR(50) Fonte ou Tecnologia da an\u00e1lise N\u00c3O NULO Ano_2015 Ano de 2015 FLOAT Quantidade no ano de 2015 (MW) N\u00c3O NULO Ano_2030 Ano de 2030 INT Quantidade no ano de 2030 (MW) N\u00c3O NULO Ano_2040 Ano de 2040 INT Quantidade no ano de 2040 (MW) N\u00c3O NULO Ano_2050 Ano de 2050 INT Quantidade no ano de 2050 (MW) N\u00c3O NULO Cen\u00e1rio Cen\u00e1rio do PNE NVARCHAR(150) Cen\u00e1rio do PNE de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-demmaxmw","title":"Tabela: DemMax(MW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Demanda_M\u00e1xima Demanda M\u00e1xima INT Quantidade em MW de Demanda N\u00c3O NULO Regi\u00e3o Regi\u00e3o NVARCHAR(50) Regi\u00e3o de an\u00e1lise N\u00c3O NULO Ano Ano de an\u00e1lise SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#pagina-de-matriz-energetica","title":"P\u00e1gina de Matriz Energ\u00e9tica","text":""},{"location":"fonte_dados/dicionario/#tabela-matriz-energetica-brasil","title":"Tabela: Matriz energ\u00e9tica - Brasil","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO Carv\u00e3o Carv\u00e3o INT Quantidade vinda do carv\u00e3o N\u00c3O NULO G\u00e1s Natural G\u00e1s Natural INT Quantidade vinda do G\u00e1s Natural N\u00c3O NULO Nuclear Nuclear INT Quantidade vinda de energia Nuclear N\u00c3O NULO Hidro Hidro INT Quantidade vinda de Hidro N\u00c3O NULO Biocombust\u00edveis e res\u00edduos Biocombust\u00edveis e res\u00edduos INT Quantidade vinda de Biocombust\u00edveis e res\u00edduos N\u00c3O NULO \u00d3leo \u00d3leo INT Quantidade vinda de \u00f3leo N\u00c3O NULO E\u00f3lica, solar, etc. E\u00f3lica, solar, etc. INT Quantidade vinda de E\u00f3lica, solar, etc. N\u00c3O NULO Unidades Unidades NVARCHAR(50) Unidade de medida N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-matriz-energetica-mundo","title":"Tabela: Matriz energ\u00e9tica - Mundo","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO Carv\u00e3o Carv\u00e3o INT Quantidade vinda do carv\u00e3o N\u00c3O NULO G\u00e1s Natural G\u00e1s Natural INT Quantidade vinda do G\u00e1s Natural N\u00c3O NULO Nuclear Nuclear INT Quantidade vinda de energia Nuclear N\u00c3O NULO Hidro Hidro INT Quantidade vinda de Hidro N\u00c3O NULO Biocombust\u00edveis e res\u00edduos Biocombust\u00edveis e res\u00edduos INT Quantidade vinda de Biocombust\u00edveis e res\u00edduos N\u00c3O NULO \u00d3leo \u00d3leo INT Quantidade vinda de \u00f3leo N\u00c3O NULO E\u00f3lica, solar, etc. E\u00f3lica, solar, etc. INT Quantidade vinda de E\u00f3lica, solar, etc. N\u00c3O NULO Unidades Unidades NVARCHAR(50) Unidade de medida N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#pagina-de-empregabilidade","title":"P\u00e1gina de Empregabilidade","text":""},{"location":"fonte_dados/dicionario/#tabela-empregabilidade-no-brasil","title":"Tabela: Empregabilidade no Brasil","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Pais Pais NVARCHAR(50) Pa\u00eds de an\u00e1lise N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO Tecnologia Tecnologia NVARCHAR(50) Tecnologia de an\u00e1lise N\u00c3O NULO Empregabilidade Empregabilidade SMALLINT Numero de empregabilidade (MIL)"},{"location":"fonte_dados/dicionario/#pagina-de-consumo-total-epe","title":"P\u00e1gina de Consumo Total EPE","text":""},{"location":"fonte_dados/dicionario/#tabela-ct_consumo_gwh","title":"Tabela: CT_Consumo_GWh","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O nomMes Nome do m\u00eas NVARCHAR(50) M\u00eas de an\u00e1lise Ano_2016 Ano de 2016 FLOAT Quantidade no ano de 2016 Ano_2017 Ano de 2017 NVARCHAR(50) Quantidade no ano de 2017 Ano_2018 Ano de 2018 NVARCHAR(50) Quantidade no ano de 2018 Ano_2019 Ano de 2019 FLOAT Quantidade no ano de 2019 Ano_2020 Ano de 2020 FLOAT Quantidade no ano de 2020 Ano_2021 Ano de 2021 FLOAT Quantidade no ano de 2021 Ano_2022 Ano de 2022 FLOAT Quantidade no ano de 2022 Ano_2023 Ano de 2023 FLOAT Quantidade no ano de 2023"},{"location":"fonte_dados/dicionario/#tabela-ct_consumo_medio_por_classe","title":"Tabela: CT_Consumo_M\u00e9dio_por_classe","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O nomMes Nome do m\u00eas NVARCHAR(50) M\u00eas de an\u00e1lise Ano_2016 Ano de 2016 FLOAT Quantidade no ano de 2016 Ano_2017 Ano de 2017 NVARCHAR(50) Quantidade no ano de 2017 Ano_2018 Ano de 2018 NVARCHAR(50) Quantidade no ano de 2018 Ano_2019 Ano de 2019 FLOAT Quantidade no ano de 2019 Ano_2020 Ano de 2020 FLOAT Quantidade no ano de 2020 Ano_2021 Ano de 2021 FLOAT Quantidade no ano de 2021 Ano_2022 Ano de 2022 FLOAT Quantidade no ano de 2022 Ano_2023 Ano de 2023 FLOAT Quantidade no ano de 2023"},{"location":"fonte_dados/dicionario/#tabela-ct_consumo_acumulado_regiao_gwh","title":"Tabela: CT_Consumo_acumulado_regi\u00e3o_GWh","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O nomRegiao Nome Regi\u00e3o NVARCHAR(50) Regi\u00e3o de an\u00e1lise ValorTotal Valor Total FLOAT Quantidade de consumo"},{"location":"fonte_dados/dicionario/#pagina-ben","title":"P\u00e1gina BEN","text":""},{"location":"fonte_dados/dicionario/#tabela-ben_total","title":"Tabela: BEN_total","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O CONTA Conta NVARCHAR(50) Ramo analisado N\u00c3O NULO PRODU\u00c7\u00c3O Produ\u00e7\u00e3o INT Quantidade de produ\u00e7\u00e3o N\u00c3O NULO IMPORTA\u00c7\u00c3O Importa\u00e7\u00e3o INT Quantidade de importa\u00e7\u00e3o N\u00c3O NULO VARIA\u00c7\u00c3O_DE_ESTOQUES Varia\u00e7\u00e3o de Estoques SMALLINT Quantidade da varia\u00e7\u00e3o de estoques N\u00c3O NULO EXPORTA\u00c7\u00c3O Exporta\u00e7\u00e3o INT Quantidade de exporta\u00e7\u00e3o N\u00c3O NULO N\u00c3O_APROVEITADA N\u00e3o Aproveitada SMALLINT Quantidade n\u00e3o aproveitada N\u00c3O NULO REINJE\u00c7\u00c3O Reinje\u00e7\u00e3o SMALLINT Quantidade reinjetada N\u00c3O NULO CONSUMO_FINAL_N\u00c3O_ENERG\u00c9TICO Consumo Final N\u00e3o Energ\u00e9tico SMALLINT Quantidade do consumo final n\u00e3o energ\u00e9tico N\u00c3O NULO SETOR_ENERG\u00c9TICO Setor Energ\u00e9tico SMALLINT Quantidade no setor energ\u00e9tico N\u00c3O NULO RESIDENCIAL Residencial SMALLINT Quantidade residencial N\u00c3O NULO COMERCIAL Comercial SMALLINT Quantidade comercial N\u00c3O NULO P\u00daBLICO P\u00fablico SMALLINT Quantidade no setor p\u00fablico N\u00c3O NULO AGROPECU\u00c1RIO Agropecu\u00e1rio SMALLINT Quantidade no setor agropecu\u00e1rio N\u00c3O NULO RODOVI\u00c1RIO Rodovi\u00e1rio INT Quantidade no setor rodovi\u00e1rio N\u00c3O NULO FERROVI\u00c1RIO Ferrovi\u00e1rio SMALLINT Quantidade no setor ferrovi\u00e1rio N\u00c3O NULO A\u00c9REO A\u00e9ro SMALLINT Quantidade no setor a\u00e9ro N\u00c3O NULO HIDROVI\u00c1RIO Hidrovi\u00e1rio SMALLINT Quantidade no setor hidrovi\u00e1rio N\u00c3O NULO INDUSTRIAL_TOTAL Industrial Total SMALLINT Quantidade industrial total N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#pagina-extras-pne","title":"P\u00e1gina Extras - PNE","text":""},{"location":"fonte_dados/dicionario/#tabela-emtotpne","title":"Tabela: EmTotPNE","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Per\u00edodo Per\u00edodo NVARCHAR(50) Per\u00edodo de an\u00e1lise N\u00c3O NULO Ano_2015 Ano de 2015 FLOAT Quantidade de emiss\u00f5es no ano de 2015 N\u00c3O NULO Ano_2030 Ano de 2030 TINYINT Quantidade de emiss\u00f5es no ano de 2030 N\u00c3O NULO Ano_2040 Ano de 2040 TINYINT Quantidade de emiss\u00f5es no ano de 2040 N\u00c3O NULO Ano_2050 Ano de 2050 TINYINT Quantidade de emiss\u00f5es no ano de 2050 N\u00c3O NULO Cen\u00e1rio Cen\u00e1rio NVARCHAR(50) Cen\u00e1rio PNE N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-custototpne","title":"Tabela: CustoTotPNE","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Tipo_Expans\u00e3o Tipo de expans\u00e3o NVARCHAR(50) Tipo de expans\u00e3o analisada N\u00c3O NULO Ano_2012 Ano de 2012 FLOAT Custo total no ano de 2012 N\u00c3O NULO Ano_2015 Ano de 2015 SMALLINT Custo total no ano de 2015 N\u00c3O NULO Cen\u00e1rio Cen\u00e1rio NVARCHAR(150) Cen\u00e1rio do PNE N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelaconsgasnatpne","title":"Tabela:ConsGasNatPNE","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Per\u00edodo Per\u00edodo NVARCHAR(50) Per\u00edodo m\u00e9dio N\u00c3O NULO Ano_2015 Ano de 2015 FLOAT Consumo de G\u00e1s Natural no ano de 2015 (Mm^3/dia) N\u00c3O NULO Ano_2030 Ano de 2030 TINYINT Consumo de G\u00e1s Natural no ano de 2030 (Mm^3/dia) N\u00c3O NULO Ano_2040 Ano de 2040 TINYINT Consumo de G\u00e1s Natural no ano de 2040 (Mm^3/dia) N\u00c3O NULO Ano_2050 Ano de 2050 SMALLINT Consumo de G\u00e1s Natural no ano de 2050 (Mm^3/dia) N\u00c3O NULO Cen\u00e1rio Cen\u00e1rio NVARCHAR(150) Cen\u00e1rio do PNE N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#pagina-mundo","title":"P\u00e1gina Mundo","text":""},{"location":"fonte_dados/dicionario/#tabela-capacidade_instalada_matriz_eletrica_br_ons","title":"Tabela: Capacidade_Instalada_Matriz_Eletrica_BR_ONS","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano SMALLINT Ano de an\u00e1lise E\u00f3lica E\u00f3lica FLOAT Capacidade instalada na gera\u00e7\u00e3o E\u00f3lica T\u00e9rmica T\u00e9rmica FLOAT Capacidade instalada na gera\u00e7\u00e3o T\u00e9rmica Hidr\u00e1ulica Hidr\u00e1ulica FLOAT Capacidade instalada na gera\u00e7\u00e3o Hidr\u00e1ulica Nuclear Nuclear FLOAT Capacidade instalada na gera\u00e7\u00e3o Nuclear Solar Solar FLOAT Capacidade instalada na gera\u00e7\u00e3o Solar MMGD MMGD FLOAT Capacidade instalada na gera\u00e7\u00e3o MMGD"},{"location":"fonte_dados/dicionario/#tabela-capinstbiopaisesgw","title":"Tabela: CapInstBioPaises(GW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano NVARCHAR(50) Ano de an\u00e1lise N\u00c3O NULO Pa\u00eds Pa\u00eds TINYINT Pa\u00eds de an\u00e1lise N\u00c3O NULO Capacidade_Instalada Capacidade Instalada SMALLINT Quantidade de Capacidade instalada (GW) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-capinstbiopaisesgw_1","title":"Tabela: CapInstBioPaises(GW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano NVARCHAR(50) Ano de an\u00e1lise N\u00c3O NULO Pa\u00eds Pa\u00eds TINYINT Pa\u00eds de an\u00e1lise N\u00c3O NULO Capacidade_Instalada Capacidade Instalada SMALLINT Quantidade de Capacidade instalada de gera\u00e7\u00e3o biomassa (GW) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-capinsteolpaisesgw","title":"Tabela: CapInstEolPaises(GW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano NVARCHAR(50) Ano de an\u00e1lise N\u00c3O NULO Pa\u00eds Pa\u00eds TINYINT Pa\u00eds de an\u00e1lise N\u00c3O NULO Capacidade_Instalada Capacidade Instalada SMALLINT Quantidade de Capacidade instalada de gera\u00e7\u00e3o e\u00f3lica (GW) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelacapinstfontemw","title":"Tabela:CapInstFonte(MW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano NVARCHAR(50) Ano de an\u00e1lise N\u00c3O NULO Pa\u00eds Pa\u00eds TINYINT Pa\u00eds de an\u00e1lise N\u00c3O NULO Capacidade_Instalada Capacidade Instalada SMALLINT Quantidade de Capacidade instalada (MW) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-capinstnucpaises-gw","title":"Tabela: CapInstNucPaises (GW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano NVARCHAR(50) Ano de an\u00e1lise N\u00c3O NULO Pa\u00eds Pa\u00eds TINYINT Pa\u00eds de an\u00e1lise N\u00c3O NULO Capacidade_Instalada Capacidade Instalada SMALLINT Quantidade de Capacidade instalada de gera\u00e7\u00e3o nuclear(GW) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-capinstrenpaisesgw","title":"Tabela: CapInstRenPaises(GW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano NVARCHAR(50) Ano de an\u00e1lise N\u00c3O NULO Pa\u00eds Pa\u00eds TINYINT Pa\u00eds de an\u00e1lise N\u00c3O NULO Capacidade_Instalada Capacidade Instalada SMALLINT Quantidade de Capacidade instalada (GW) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-capinstsolpaisesgw","title":"Tabela: CapInstSolPaises(GW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano NVARCHAR(50) Ano de an\u00e1lise N\u00c3O NULO Pa\u00eds Pa\u00eds TINYINT Pa\u00eds de an\u00e1lise N\u00c3O NULO Capacidade_Instalada Capacidade Instalada SMALLINT Quantidade de Capacidade instalada de gera\u00e7\u00e3o solar (GW) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-capinsttermfospaisesgw","title":"Tabela: CapInstTermFosPaises(GW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano NVARCHAR(50) Ano de an\u00e1lise N\u00c3O NULO Pa\u00eds Pa\u00eds TINYINT Pa\u00eds de an\u00e1lise N\u00c3O NULO Capacidade_Instalada Capacidade Instalada SMALLINT Quantidade de Capacidade instalada de t\u00e9rmica f\u00f3ssil (GW) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-capinsttermfospaisesgw_1","title":"Tabela: CapInstTermFosPaises(GW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano NVARCHAR(50) Ano de an\u00e1lise N\u00c3O NULO Pa\u00eds Pa\u00eds TINYINT Pa\u00eds de an\u00e1lise N\u00c3O NULO Capacidade_Instalada Capacidade Instalada SMALLINT Quantidade de Capacidade instalada de t\u00e9rmica f\u00f3ssil (GW) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-capinsthidpaisesgw","title":"Tabela: CapInstHidPaises(GW)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Ano Ano NVARCHAR(50) Ano de an\u00e1lise N\u00c3O NULO Pa\u00eds Pa\u00eds TINYINT Pa\u00eds de an\u00e1lise N\u00c3O NULO Capacidade_Instalada Capacidade Instalada SMALLINT Quantidade de Capacidade instalada de hidrel\u00e9trica (GW) N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelagerbiopaisestwh","title":"Tabela:GerBioPaises(TWh)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Pa\u00eds Pa\u00eds NVARCHAR(50) Pa\u00eds de an\u00e1lise N\u00c3O NULO Gera\u00e7\u00e3o Gera\u00e7\u00e3o TINYINT Quantidade de gera\u00e7\u00e3o - biomassa (TWh) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelagereolpaisestwh","title":"Tabela:GerEolPaises(TWh)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Pa\u00eds Pa\u00eds NVARCHAR(50) Pa\u00eds de an\u00e1lise N\u00c3O NULO Gera\u00e7\u00e3o Gera\u00e7\u00e3o TINYINT Quantidade de gera\u00e7\u00e3o - e\u00f3lica(TWh) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelagerhidpaisestwh","title":"Tabela:GerHidPaises(TWh)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Pa\u00eds Pa\u00eds NVARCHAR(50) Pa\u00eds de an\u00e1lise N\u00c3O NULO Gera\u00e7\u00e3o Gera\u00e7\u00e3o TINYINT Quantidade de gera\u00e7\u00e3o - hidrel\u00e9trica (TWh) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelagerrenpaisestwh","title":"Tabela:GerRenPaises(TWh)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Pa\u00eds Pa\u00eds NVARCHAR(50) Pa\u00eds de an\u00e1lise N\u00c3O NULO Gera\u00e7\u00e3o Gera\u00e7\u00e3o TINYINT Quantidade de gera\u00e7\u00e3o - fontes renov\u00e1veis (TWh) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelagersolpaisestwh","title":"Tabela:GerSolPaises(TWh)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Pa\u00eds Pa\u00eds NVARCHAR(50) Pa\u00eds de an\u00e1lise N\u00c3O NULO Gera\u00e7\u00e3o Gera\u00e7\u00e3o TINYINT Quantidade de gera\u00e7\u00e3o - solar (TWh) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelagertermfospaisestwh","title":"Tabela:GerTermFosPaises(TWh)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Pa\u00eds Pa\u00eds NVARCHAR(50) Pa\u00eds de an\u00e1lise N\u00c3O NULO Gera\u00e7\u00e3o Gera\u00e7\u00e3o TINYINT Quantidade de gera\u00e7\u00e3o - t\u00e9rmica fossilr (TWh) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#pagina-brasil","title":"P\u00e1gina Brasil","text":""},{"location":"fonte_dados/dicionario/#tabelagelelfontegwh","title":"Tabela:GelElFonte(GWh)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Fonte Fonte NVARCHAR(50) Fonte de an\u00e1lise N\u00c3O NULO Gera\u00e7\u00e3o Gera\u00e7\u00e3o INT Quantidade de gera\u00e7\u00e3o el\u00e9trica (TWh) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelaemgeesistisomtco2","title":"Tabela:EmGEESistIso(MtCO2)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Fonte Fonte NVARCHAR(50) Fonte de an\u00e1lise N\u00c3O NULO Emiss\u00f5es_GEE Emiss\u00e3o de GEE INT Quantidade de emiss\u00e3o de GEE (MtCO2) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelaemgeegerelmtco2","title":"Tabela:EmGEEGerEl(MtCO2)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Fonte Fonte NVARCHAR(50) Fonte de an\u00e1lise N\u00c3O NULO Emiss\u00f5es_GEE Emiss\u00e3o de GEE INT Quantidade de emiss\u00e3o de GEE (MtCO2) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelaemgeesinmtco2","title":"Tabela:EmGEESIN(MtCO2)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Fonte Fonte NVARCHAR(50) Fonte de an\u00e1lise N\u00c3O NULO Emiss\u00f5es_GEE Emiss\u00e3o de GEE INT Quantidade de emiss\u00e3o de GEE (MtCO2) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-consmedresregkwh_mes","title":"Tabela: ConsMedResReg(kWh_mes)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Regi\u00e3o Regi\u00e3o NVARCHAR(50) Fonte de an\u00e1lise N\u00c3O NULO Consumo_m\u00e9dio_residencial Consumo M\u00e9dio Residencial FLOAT Quantidade de consumo m\u00e9dio residencial (kWH/m\u00eas) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-consmedressubsiskwh_mes","title":"Tabela: ConsMedResSubsis(kWh_mes)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Regi\u00e3o Regi\u00e3o NVARCHAR(50) Fonte de an\u00e1lise N\u00c3O NULO Consumo_m\u00e9dio_residencial Consumo M\u00e9dio Residencial FLOAT Quantidade de consumo m\u00e9dio residencial no subsistema (kWH/m\u00eas) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabelaconsmedtotregkwh_mes","title":"Tabela:ConsMedTotReg(kWh_mes)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Regi\u00e3o Regi\u00e3o NVARCHAR(50) Fonte de an\u00e1lise N\u00c3O NULO Consumo_m\u00e9dio_residencial Consumo M\u00e9dio Residencial FLOAT Quantidade de consumo m\u00e9dio residencial na regi\u00e3o (kWH/m\u00eas) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-consmedtotsubsiskwh_mes","title":"Tabela: ConsMedTotSubsis(kWh_mes)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Regi\u00e3o Regi\u00e3o NVARCHAR(50) Fonte de an\u00e1lise N\u00c3O NULO Consumo_m\u00e9dio_residencial Consumo M\u00e9dio Residencial FLOAT Quantidade de consumo m\u00e9dio residencial na regi\u00e3o (kWH/m\u00eas) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-consmedanpercapregkwh_hab","title":"Tabela: ConsMedAnPerCapReg(kWh_hab)","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O Regi\u00e3o Regi\u00e3o NVARCHAR(50) Regi\u00e3o de an\u00e1lise N\u00c3O NULO Consumo_m\u00e9dio_anual_per_capita Consumo M\u00e9dio Anual Per Capita FLOAT Consumo M\u00e9dio Anual Per Capita l na regi\u00e3o (kWh_hab) N\u00c3O NULO Ano Ano SMALLINT Ano de an\u00e1lise N\u00c3O NULO"},{"location":"fonte_dados/dicionario/#tabela-emissoes_co2_br","title":"Tabela: emissoes_co2_Br","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O CO2_GWP_SAR_Gg GWP - SAR Gg (CO2e) NVARCHAR(50) Setor de an\u00e1lise Ano_1991 Ano 1991 INT Quantidade de emiss\u00f5es em 1991 Ano_1992 Ano 1992 INT Quantidade de emiss\u00f5es em 1992 Ano_1993 Ano 1993 INT Quantidade de emiss\u00f5es em 1993 Ano_1994 Ano 1994 INT Quantidade de emiss\u00f5es em 1994 Ano_1995 Ano 1995 INT Quantidade de emiss\u00f5es em 1995 Ano_1996 Ano 1996 INT Quantidade de emiss\u00f5es em 1996 Ano_1997 Ano 1997 INT Quantidade de emiss\u00f5es em 1997 Ano_1998 Ano 1998 INT Quantidade de emiss\u00f5es em 1998 Ano_1999 Ano 1999 INT Quantidade de emiss\u00f5es em 1999 Ano_2000 Ano 2000 INT Quantidade de emiss\u00f5es em 2000 Ano_2001 Ano 2001 INT Quantidade de emiss\u00f5es em 2001 Ano_2002 Ano 2002 INT Quantidade de emiss\u00f5es em 2002 Ano_2003 Ano 2003 INT Quantidade de emiss\u00f5es em 2003 Ano_2004 Ano 2004 INT Quantidade de emiss\u00f5es em 2004 Ano_2005 Ano 2005 INT Quantidade de emiss\u00f5es em 2005 Ano_2006 Ano 2006 INT Quantidade de emiss\u00f5es em 2006 Ano_2007 Ano 2007 INT Quantidade de emiss\u00f5es em 2007 Ano_2008 Ano 2008 INT Quantidade de emiss\u00f5es em 2008 Ano_2009 Ano 2009 INT Quantidade de emiss\u00f5es em 2009 Ano_2010 Ano 2010 INT Quantidade de emiss\u00f5es em 2010 Ano_2011 Ano 2011 INT Quantidade de emiss\u00f5es em 2011 Ano_2012 Ano 2012 INT Quantidade de emiss\u00f5es em 2012 Ano_2013 Ano 2013 INT Quantidade de emiss\u00f5es em 2013 Ano_2014 Ano 2014 INT Quantidade de emiss\u00f5es em 2014 Ano_2015 Ano 2015 INT Quantidade de emiss\u00f5es em 2015 Ano_2016 Ano 2016 INT Quantidade de emiss\u00f5es em 2016 Ano_2017 Ano 2017 INT Quantidade de emiss\u00f5es em 2017 Ano_2018 Ano 2018 INT Quantidade de emiss\u00f5es em 2018 Ano_2019 Ano 2019 INT Quantidade de emiss\u00f5es em 2019 Ano_2020 Ano 2020 INT Quantidade de emiss\u00f5es em 2020"},{"location":"fonte_dados/dicionario/#tabela-evolucao_energia_1970_2022","title":"Tabela: Evolucao_Energia_1970_2022","text":"DADO NOME DO CAMPO TIPO DO DADO DESCRI\u00c7\u00c3O RESTRI\u00c7\u00c3O ANO Ano VARCHAR(150) Ano de an\u00e1lise N\u00c3O_RENOV\u00c1VEL N\u00e3o Renov\u00e1vel VARCHAR(150) Produ\u00e7\u00e3o de enregia - N\u00e3o renov\u00e1veis ( 103tep) PETR\u00d3LEO Petr\u00f3leo VARCHAR(150) Produ\u00e7\u00e3o de enregia - Petr\u00f3leo ( 103tep) G\u00c1S_NATURAL G\u00e1s Natural VARCHAR(150) Produ\u00e7\u00e3o de enregia - G\u00e1s Natural ( 103tep) CARV\u00c3O_VAPOR Carv\u00e3o - Vapor VARCHAR(150) Produ\u00e7\u00e3o de enregia -Carv\u00e3o vapor ( 103tep) CARV\u00c3O_METAL\u00daRGICO Carv\u00e3o - Metaluigico VARCHAR(150) Produ\u00e7\u00e3o de enregia - Carv\u00e3o metal\u00fargico ( 103tep) UR NIO_U3O8 Ur\u00e2nio U3O8 VARCHAR(150) Produ\u00e7\u00e3o de enregia - Ur\u00e2nio ( 103tep) RENOV\u00c1VEL Renov\u00e1vel VARCHAR(150) Produ\u00e7\u00e3o de enregia - Renovaveis ( 103tep) ENERGIA_HIDR\u00c1ULICA Energia Hidr\u00e1ulica VARCHAR(150) Produ\u00e7\u00e3o de enregia - Energia Hidr\u00e1ulica( 103tep) LENHA Lenha VARCHAR(150) Produ\u00e7\u00e3o de enregia - Lenha ( 103tep) PRODUTOS_DA_CANA Produtos da Cana VARCHAR(150) Produ\u00e7\u00e3o de enregia - Produtos da Cana ( 103tep) E\u00d3LICA E\u00f3lica VARCHAR(150) Produ\u00e7\u00e3o de enregia - E\u00f3lica ( 103tep) SOLAR Solar VARCHAR(150) Produ\u00e7\u00e3o de enregia - Solar ( 103tep) OUTRAS_RENOV\u00c1VEIS Outras Renov\u00e1veis VARCHAR(150) Produ\u00e7\u00e3o de enregia - Outras Renov\u00e1veis ( 103tep) TOTAL Total VARCHAR(150) Produ\u00e7\u00e3o de enregia - Total ( 103tep)"},{"location":"fonte_dados/dicionario/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor 1.0 04/07/2023 Cria\u00e7\u00e3o do documento e adi\u00e7\u00e3o de conte\u00fado Ugor Brand\u00e3o"},{"location":"fonte_dados/estudos_subsidio/","title":"Estudo sobre Subs\u00eddios para Transi\u00e7\u00e3o Energ\u00e9tica","text":"

Figura 1: Origem da pesquisa sobre subsidios Fonte: Aline/TCU (2023).

"},{"location":"fonte_dados/estudos_subsidio/#fontes-mencionadas","title":"Fontes Mencionadas","text":"
  • IEA
  • INESC
  • BNDES
"},{"location":"fonte_dados/estudos_subsidio/#dados-encontrados","title":"Dados Encontrados","text":"

Renovaveis

  • Nota: N\u00e3o encontrado

Fosseis

BNDES

  • Nota: Financiamento por setores, podendo ser extraidos via api

Aneel

  • Nota: Subsidios no setor de energia el\u00e9trica dos anos de 2018 at\u00e9 2023, Subsidios por tipo, regi\u00e3o, ano, distribuidora e regi\u00e3o.
"},{"location":"fonte_dados/estudos_subsidio/#dados-sobre-operacoes-de-financiamento","title":"Dados sobre Opera\u00e7\u00f5es de Financiamento","text":"
  • BNDES:BNDES
"},{"location":"fonte_dados/estudos_subsidio/#dados-sobre-investimentos-energeticos-ano-de-2022","title":"Dados sobre Investimentos Energ\u00e9ticos (Ano de 2022)","text":"
  • Mundo: World Energy Investment 2022 Datafile
  • Nota: Dados dispon\u00edveis para outros anos desde 2016
"},{"location":"fonte_dados/estudos_subsidio/#documento-sobre-investimentos-energeticos","title":"Documento sobre Investimentos Energ\u00e9ticos","text":"

Financing clean energy transitions in emerging and developing economies

  • Redu\u00e7\u00f5es de emiss\u00f5es de CO2 em cen\u00e1rios clim\u00e1ticos da AIE em rela\u00e7\u00e3o aos STEPS nos EMDEs
  • Curva de custo de redu\u00e7\u00e3o das emiss\u00f5es EMDE evitadas na FDS 2020 2030
  • Investimento em energia EMDE por tipo de fornecedor

World Energy Investment 2022

"},{"location":"fonte_dados/estudos_subsidio/#share-of-clean-energy-investment","title":"Share of Clean Energy Investment","text":"
  • Mundo/Brasil: Link
"},{"location":"fonte_dados/estudos_subsidio/#investimento-total-por-regiao-no-cenario-de-desenvolvimento-sustentavel","title":"Investimento Total por Regi\u00e3o no Cen\u00e1rio de Desenvolvimento Sustent\u00e1vel","text":""},{"location":"fonte_dados/estudos_subsidio/#empresas-e-programas-relacionados","title":"Empresas e Programas Relacionados","text":""},{"location":"fonte_dados/estudos_subsidio/#empresas-habilitadas-pelo-padis","title":"Empresas Habilitadas pelo PADIS","text":"
  • Empresas Habilitadas - Produtos Aprovados
"},{"location":"fonte_dados/estudos_subsidio/#sub-rogacao-da-conta-de-consumo-de-combustiveis-ccc","title":"Sub-roga\u00e7\u00e3o da Conta de Consumo de Combust\u00edveis (CCC)","text":"
  • Metas individuais compuls\u00f3rias por distribuidor de combust\u00edveis de redu\u00e7\u00e3o de emiss\u00f5es de gases causadores do efeito estufa por ano para a comercializa\u00e7\u00e3o de combust\u00edveis
"},{"location":"fonte_dados/estudos_subsidio/#biocombustivel-social","title":"Biocombust\u00edvel Social","text":"
  • Empresas Cadastradas
"},{"location":"fonte_dados/fonte_dados/","title":"Fonte de dados","text":""},{"location":"fonte_dados/fonte_dados/#introducao","title":"Introdu\u00e7\u00e3o","text":"

Neste documento, apresentamos as fontes de dados encontradas e sua relev\u00e2ncia para o nosso projeto de an\u00e1lise.

"},{"location":"fonte_dados/fonte_dados/#legenda","title":"Legenda","text":"

Abaixo est\u00e3o listadas algumas legendas que ser\u00e3o utilizadas nas tabelas dos requisitos a seguir.

Legenda Artefato Tabela O nome da tabela que cont\u00e9m o campo. Campo O nome do campo ou coluna na tabela. Descri\u00e7\u00e3o Uma breve descri\u00e7\u00e3o do campo e das informa\u00e7\u00f5es que ele representa. Tipo de Dado O tipo de dado armazenado no campo (inteiro, texto, data, decimal, etc.). Restri\u00e7\u00f5es Quaisquer restri\u00e7\u00f5es ou regras aplic\u00e1veis ao campo (chave prim\u00e1ria, chave estrangeira, formato v\u00e1lido, etc.).

"},{"location":"fonte_dados/fonte_dados/#fonte-de-dados_1","title":"Fonte de dados","text":"

As tabelas contidas dentros dos toggles evidenciam o dados que encontramos.

Operador Nacional do Sistema El\u00e9trico - Gera\u00e7\u00e3o Energia Anexos Refer\u00eancia Refer\u00eancia dos dados Operador Nacional do Sistema El\u00e9trico Tipo de dados .xlsx Anu\u00e1rio Estat\u00edstico de Energia El\u00e9trica Anexos Refer\u00eancia Refer\u00eancia dos dados Empresa de Pesquisa Energ\u00e9tica Relat\u00f3rio S\u00edntese Relat\u00f3rio S\u00edntese.pdf Tipo de dados .xlsx Balan\u00e7o Energ\u00e9tico Nacional 2023 Anexos Refer\u00eancia Refer\u00eancia dos dados Empresa de Pesquisa energ\u00e9tica Relat\u00f3rio S\u00edntese Relat\u00f3rio S\u00edntese.pdf Tipo de dados .csv Plano Nacional de Energia 2050 Anexos Refer\u00eancia Refer\u00eancia dos dados Empresa de Pesquisa energ\u00e9tica Relat\u00f3rio S\u00edntese Relat\u00f3rio S\u00edntese.pdf Tipo de dados .pdf, .csv Renewable Energy and Jobs - Annual Review 2022 Anexos Refer\u00eancia Refer\u00eancia dos dados International Renewable Energy Agency Relat\u00f3rio 2022 Renewable Energy and Jobs - Annual Review 2022 Tipo de dados .pdf, .csv Renewable Energy and Jobs - Annual Review 2021 Anexos Refer\u00eancia Refer\u00eancia dos dados International Renewable Energy Agency Relat\u00f3rio 2021 Renewable Energy and Jobs - Annual Review 2021 Tipo de dados .pdf Renewable Energy and Jobs - Annual Review 2020 Anexos Refer\u00eancia Refer\u00eancia dos dados International Renewable Energy Agency Relat\u00f3rio 2020 Renewable Energy and Jobs - Annual Review 2020 Tipo de dados .pdf Renewable Energy and Jobs - Annual Review 2019 Anexos Refer\u00eancia Refer\u00eancia dos dados International Renewable Energy Agency Relat\u00f3rio 2019 Renewable Energy and Jobs - Annual Review 2019 Tipo de dados .pdf Renewable Energy and Jobs - Annual Review 2018 Anexos Refer\u00eancia Refer\u00eancia dos dados International Renewable Energy Agency Relat\u00f3rio 2018 Renewable Energy and Jobs - Annual Review 2018 Tipo de dados .pdf Renewable Energy and Jobs - Annual Review 2017 Anexos Refer\u00eancia Refer\u00eancia dos dados International Renewable Energy Agency Relat\u00f3rio 2017 Renewable Energy and Jobs - Annual Review 2017 Tipo de dados .pdf Renewable Energy and Jobs - Annual Review 2016 Anexos Refer\u00eancia Refer\u00eancia dos dados International Renewable Energy Agency Relat\u00f3rio 2016 Renewable Energy and Jobs - Annual Review 2016 Tipo de dados .pdf Renewable Energy and Jobs - Annual Review 2015 Anexos Refer\u00eancia Refer\u00eancia dos dados International Renewable Energy Agency Relat\u00f3rio 2015 Renewable Energy and Jobs - Annual Review 2015 Tipo de dados .pdf Renewable Energy and Jobs - Annual Review 2014 Anexos Refer\u00eancia Refer\u00eancia dos dados International Renewable Energy Agency Relat\u00f3rio 2014 Renewable Energy and Jobs - Annual Review 2014 Tipo de dados .pdf Renewable Energy and Jobs - Annual Review 2013 Anexos Refer\u00eancia Refer\u00eancia dos dados International Renewable Energy Agency Relat\u00f3rio 2013 Renewable Energy and Jobs - Annual Review 2013 Tipo de dados .pdf Sistema de Informa\u00e7\u00f5es Energ\u00e9ticas - Minist\u00e9rio de Minas e Energia Anexos Refer\u00eancia Refer\u00eancia dos dados Sistema de Informa\u00e7\u00f5es Energ\u00e9ticas - Minist\u00e9rio de Minas e Energia Matriz de Balan\u00e7o energ\u00e9tico Nacional Sistema de Informa\u00e7\u00f5es Energ\u00e9ticas - Minist\u00e9rio de Minas e Energia Tipo de dados .xlsx Global Trends in Renewable Energy Investment 2019 Anexos Refer\u00eancia Refer\u00eancia dos dados Investment in solar energy technology. Custo de Investimento por Tecnologia Global Trends in Renewable Energy Investment 2019 Tipo de dados .xlsx Renewable Power Generation Costs in 2021 Anexos Refer\u00eancia Refer\u00eancia dos dados Investment in solar energy technology. Custo por Tecnologia Renewable Power Generation Costs in 2021 Tipo de dados .xlsx

"},{"location":"fonte_dados/fonte_dados/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor(es) 1.0 09/07/2023 Cria\u00e7\u00e3o do documento Eduardo 1.1 10/07/2023 Adi\u00e7\u00e3o da fonte Plano Nacional de Energia Vict\u00f3rio 1.3 02/08/2023 Adi\u00e7\u00e3o das fontes do Irena Caio Vitor"},{"location":"modelagem/arquitetura/","title":"Arquitetura dashboard","text":""},{"location":"modelagem/arquitetura/#descricao","title":"Descri\u00e7\u00e3o","text":"

A arquitetura de stream de dados \u00e9 uma abordagem moderna e eficiente para lidar com a ingest\u00e3o, processamento e an\u00e1lise em tempo real de grandes volumes de dados em constante fluxo. Essa arquitetura \u00e9 amplamente adotada em ambientes que exigem respostas em tempo real e insights acion\u00e1veis a partir dos dados gerados por diversas fontes, como sensores, aplicativos web, dispositivos m\u00f3veis e sistemas distribu\u00eddos.

"},{"location":"modelagem/arquitetura/#figma","title":"Figma","text":""},{"location":"modelagem/prototipo/","title":"Prot\u00f3tipo Dashboard","text":""},{"location":"modelagem/prototipo/#descricao","title":"Descri\u00e7\u00e3o","text":"

O prot\u00f3tipo foi realizado no figma, demonstrando a viabilidade e funcionalidade do projeto. Agora, com base nos resultados obtidos, estamos prontos para avan\u00e7ar para a pr\u00f3xima fase de desenvolvimento, onde aperfei\u00e7oaremos ainda mais o produto e o prepararemos para sua implementa\u00e7\u00e3o final.

"},{"location":"modelagem/prototipo/#figma","title":"Figma","text":""},{"location":"modelagem/requisitos/","title":"Requisitos","text":""},{"location":"modelagem/requisitos/#introducao","title":"Introdu\u00e7\u00e3o","text":"

Neste documento, apresentamos os requisitos propostos para a elabora\u00e7\u00e3o do pipeline, que desempenhar\u00e1 um papel fundamental no garantir um bom funcionamento do produto final. O pipeline \u00e9 uma estrutura crucial para o fluxo cont\u00ednuo de dados e informa\u00e7\u00f5es dentro do sistema, permitindo a automatiza\u00e7\u00e3o de processos, a integra\u00e7\u00e3o de diferentes componentes e a otimiza\u00e7\u00e3o do fluxo de trabalho.

Os requisitos aqui descritos abrangem uma ampla gama de aspectos, desde a captura e ingest\u00e3o de dados at\u00e9 o processamento, transforma\u00e7\u00e3o e entrega dos mesmos. \u00c9 essencial que o pipeline seja capaz de lidar com diferentes tipos de dados, como texto, imagens, \u00e1udio e v\u00eddeo, de forma eficiente e confi\u00e1vel.

"},{"location":"modelagem/requisitos/#legenda","title":"Legenda","text":"

Abaixo est\u00e3o listadas algumas legendas que ser\u00e3o utilizadas nas tabelas dos requisitos a seguir.

Legenda Artefato B Brainstorming C Cen\u00e1rios E \u00c9pico ENT Entrevista ES Especifica\u00e7\u00e3o Suplementar GLO Gloss\u00e1rio INT Introspec\u00e7\u00e3o L L\u00e9xico P Personas Q Question\u00e1rio RF Requisitos Funcionais RNF Requisitos n\u00e3o Funcionais ST Storytelling UC Casos de Uso US Hist\u00f3rias de usu\u00e1rio

Tabela 1: Sigla de cada etapa (Fonte: autor, 2023).

"},{"location":"modelagem/requisitos/#requisitos-funcionais","title":"Requisitos funcionais","text":"

As tabelas contidas dentros dos toggles evidenciam as informa\u00e7\u00f5es j\u00e1 citadas dos requisitos funcionais elicitados durante o projeto. Tabelas a seguir:

RF01 - Selecionar um cen\u00e1rio de pol\u00edtica T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF02 - Come\u00e7ar um novo cen\u00e1rio T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF03 - Salvar o cen\u00e1rio T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF04 - Renomear o cen\u00e1rio T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF05 - Deletar o cen\u00e1rio T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF06 - Fazer o download dos gr\u00e1ficos e configura\u00e7\u00f5es de pol\u00edticas T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF07 - Compartilhar o cen\u00e1rio T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF08 - Alternar a visualiza\u00e7\u00e3o dos gr\u00e1ficos entre um ou dois T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF09 - Selecionar cen\u00e1rios e compar\u00e1-los T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF10 - Selecionar o gr\u00e1fico T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF11 - Filtrar a busca T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF12 - Visualizar detalhes da curva T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF13 - Visualizar 'minha conta' T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade RF14 - Acessar guia de uso T\u00f3pico Refer\u00eancia \u00c9pico E1 Hist\u00f3ria de usu\u00e1rio US01 Tema Notas Elicita\u00e7\u00e3o / L\u00e9xico Caso de Uso UC01 Cen\u00e1rio C01 Funcionalidade

"},{"location":"modelagem/requisitos/#requisitos-nao-funcionais","title":"Requisitos n\u00e3o funcionais","text":"

S\u00e3o os crit\u00e9rios ou restri\u00e7\u00f5es que definem qualidades ou caracter\u00edsticas do sistema que n\u00e3o est\u00e3o diretamente relacionadas \u00e0s funcionalidades espec\u00edficas do sistema, mas s\u00e3o importantes para garantir seu desempenho, seguran\u00e7a, usabilidade, confiabilidade, entre outros aspectos.

RNF01 - A aplica\u00e7\u00e3o exibir\u00e1 os dados seguros T\u00f3pico Refer\u00eancia Performance Especifica\u00e7\u00e3o Suplementar Performance Elicita\u00e7\u00e3o RNF02 - A aplica\u00e7\u00e3o ter\u00e1 acesso por usu\u00e1rio senha T\u00f3pico Refer\u00eancia Performance Especifica\u00e7\u00e3o Suplementar Performance Elicita\u00e7\u00e3o RNF03 - A aplica\u00e7\u00e3o ir\u00e1 gerar os gr\u00e1ficos de forma eficiente T\u00f3pico Refer\u00eancia Especifica\u00e7\u00e3o Suplementar Performance Elicita\u00e7\u00e3o"},{"location":"modelagem/requisitos/#bibliografia","title":"Bibliografia","text":"

[1] SERRANO, Milene; SERRANO, Maur\u00edcio. Requisitos - Aula 24. 2019. Acessado em: 04/07/2023

"},{"location":"modelagem/requisitos/#historico-de-versao","title":"Hist\u00f3rico de vers\u00e3o","text":"Vers\u00e3o Data Descri\u00e7\u00e3o Autor(es) 1.0 04/07/2023 Cria\u00e7\u00e3o do documento Eduardo 1.1 - Adi\u00e7\u00e3o de alguns requisitos funcionais = 1.2 - Adicionando requisitos n\u00e3o funcionais = 1.3 - Adicionando mais requisitos n\u00e3o funcionais = 1.4 - Adicionando v\u00eddeos das funcionalidades ="},{"location":"modelagem/agil/backlog/","title":"Backlog do Produto","text":""},{"location":"modelagem/agil/backlog/#introducao","title":"Introdu\u00e7\u00e3o","text":"

O backlog do produto \u00e9 uma lista din\u00e2mica e priorizada de todas as funcionalidades, requisitos, melhorias e corre\u00e7\u00f5es que precisam ser desenvolvidas em um projeto. Ele serve como um reposit\u00f3rio central de todas as necessidades e demandas dos usu\u00e1rios, stakeholders e equipe de desenvolvimento.

Essa lista \u00e9 organizada em ordem de prioridade, com os itens mais importantes ou de maior valor estrat\u00e9gico no topo. O backlog do produto evolui ao longo do tempo, \u00e0 medida que novas informa\u00e7\u00f5es s\u00e3o obtidas, prioridades mudam e o projeto se adapta \u00e0s necessidades do mercado.

"},{"location":"modelagem/agil/backlog/#metodologia","title":"Metodologia","text":"

A metodologia do backlog do produto \u00e9 uma abordagem estruturada e colaborativa para gerenciar as demandas e requisitos de um produto ou projeto de forma \u00e1gil. Ela \u00e9 parte fundamental da metodologia Scrum e outras metodologias \u00e1geis, onde o desenvolvimento \u00e9 orientado por ciclos curtos de trabalho chamados sprints.

"},{"location":"modelagem/agil/backlog/#etapa-de-pre-rastreabilidade","title":"Etapa de Pr\u00e9-rastreabilidade","text":"
  • Rich Picture
  • Projetos Similares
"},{"location":"modelagem/agil/backlog/#etapa-de-elicitacao","title":"Etapa de elicita\u00e7\u00e3o","text":"
  • Brainstorming
  • Entrevista
  • Personas
  • Storytelling
"},{"location":"modelagem/agil/backlog/#etapa-de-priorizacao","title":"Etapa de Prioriza\u00e7\u00e3o","text":"
  • MosCow
"},{"location":"modelagem/agil/backlog/#elicitacao-de-requisitos","title":"Elicita\u00e7\u00e3o de Requisitos","text":"

Ser\u00e3o apresentados todos os requisitos funcionais elicitados durante o processo de elicita\u00e7\u00e3o.

Identificador Requisito Rastreabilidade RF01 O us\u00faario deve poder visualizar os dados de Emiss\u00f5es Equivalentes de CO2 do Brasil ST01 RFN01 O sistema deveria exportar a dashboard em excel ST02 RFN02 O usu\u00e1rio deveria poder Visualizar a fonte de dados de cada gr\u00e1fico ST03 RFN03 A dashboard deveria ser compat\u00edvel com dispositivos m\u00f3veis ST04 RF02 O sistema deve ser simples e intuitivo ST06 RF03 O us\u00faario deve poder visualizar os dados de Consumo de G\u00e1s Natural do Brasil ST07 RF04 Ser capaz de funcionar sem internet ST08 RF05 Visualizar os dados de Pot\u00eancia Acumulada do Brasil e do Mundo ENT01 RF06 Visualizar os dados de Gera\u00e7\u00e3o Per\u00edodo M\u00e9dio do Brasil ENT02 RF7 Visualizar os dados de Custo de Opera\u00e7\u00e3o do Brasil e do Mundo ENT03 RF8 Visualizar a fonte de dados de cada gr\u00e1fico ENT04 RF9 Filtrar os dados atualizados de empregabilidade por fonte/tecnologia ENT06 RF10 Filtrar os dados atualizados da matriz energ\u00e9tica do Brasil ENT07 RF11 Filtrar uma matriz energ\u00e9tica e verificar seu n\u00edvel de emiss\u00f5es ENT08 RF12 Filtrar a fonte de dados de cada gr\u00e1fico ENT09 RF13 Simular diferentes cen\u00e1rios de demanda, para avaliar seu impacto nas proje\u00e7\u00f5es de emiss\u00e3o ENT10 RF14 Comparar dados de Emiss\u00f5es Equivalentes de CO2 do Brasil e do mundo ENT11 RF15 Comparar dados de Custo de Opera\u00e7\u00e3o do Brasil e do Mundo ENT12 RF16 Comparar dados de Consumo de G\u00e1s Natural do Brasil e do Mundo ENT13 RF17 Comparar dados atualizados de empregabilidade ENT14"},{"location":"modelagem/agil/backlog/#temas","title":"Temas","text":"

Especifica-se dois grandes temas que reunem os \u00e9picos.

  • Visualiza\u00e7\u00e3o: Est\u00e1 relacionado \u00e0 visualiza\u00e7\u00e3o geral dos indicadores da dashboard.
  • Dashboard: Trata sobre as funcionalidades da dashboard em si, envolvendo sistema e funcionalidades.
"},{"location":"modelagem/agil/backlog/#epicos","title":"\u00c9picos","text":"

Tema \u00c9picos ID Visualiza\u00e7\u00e3o Visualiza\u00e7\u00e3o de dados: Todas as funcionalidades relacionadas as Visualiza\u00e7\u00f5es de dados. EP01 Dashboard Filtrar dados: Funcionalidades relacionadas \u00e0 Filtragem de dados. EP02 Simular cen\u00e1rio: Envolve as funcionalidades relacionadas a simula\u00e7\u00e3o de cen\u00e1rios EP03 Comparar cen\u00e1rio: Envolve as funcionalidades relacionadas a compara\u00e7\u00e3o de cen\u00e1rios EP04

"},{"location":"painel/painel/","title":"Acesso o Painel","text":"

\ud83d\udcca Acesse o painel

"},{"location":"pipeline/pipeline/","title":"Pipeline","text":""},{"location":"pipeline/pipeline/#arquitetura","title":"Arquitetura","text":"

Na engenharia de software e na automa\u00e7\u00e3o de processos, um pipeline refere-se a um conjunto de tarefas automatizadas que s\u00e3o executadas sequencialmente para processar, transformar ou mover dados de uma etapa para outra. Cada etapa desse pipeline pode ser respons\u00e1vel por uma parte espec\u00edfica do processo.

Figura 1: Arquitetura geral"},{"location":"pipeline/pipeline/#pipeline_1","title":"Pipeline","text":"

Figura 2: Pipeline de processamento

"},{"location":"pipeline/pipeline/#extracao","title":"Extra\u00e7\u00e3o","text":"

Dados brutos s\u00e3o frequentemente encontrados em arquivos no formato XLSX. Esses arquivos, tamb\u00e9m conhecidos como planilhas do Microsoft Excel, s\u00e3o uma das formas mais comuns de armazenar informa\u00e7\u00f5es em formato tabular.

Nesta etapa, os dados brutos relacionados ao setor energ\u00e9tico brasileiro s\u00e3o coletados de fontes de dados no formato XLSX. Esses arquivos podem conter informa\u00e7\u00f5es como produ\u00e7\u00e3o de energia, consumo, fontes de energia, emiss\u00f5es de carbono, entre outros. A extra\u00e7\u00e3o \u00e9 realizada a partir desses arquivos e os dados s\u00e3o obtidos para an\u00e1lise.

"},{"location":"pipeline/pipeline/#transformacao","title":"Transforma\u00e7\u00e3o","text":"

Ap\u00f3s a extra\u00e7\u00e3o, os dados brutos precisam ser limpos e preparados para an\u00e1lise. Isso envolve v\u00e1rias tarefas, como:

"},{"location":"pipeline/pipeline/#formatacao-dos-dados","title":"Formata\u00e7\u00e3o dos dados:","text":"

Garantir que os dados estejam em um formato consistente e coerente, como datas no mesmo padr\u00e3o, valores num\u00e9ricos com a mesma precis\u00e3o, etc.

"},{"location":"pipeline/pipeline/#selecao-de-tabelas-relevantes","title":"Sele\u00e7\u00e3o de tabelas relevantes:","text":"

Identificar quais partes dos dados s\u00e3o pertinentes para a an\u00e1lise da transi\u00e7\u00e3o energ\u00e9tica at\u00e9 2050 e descartar informa\u00e7\u00f5es irrelevantes.

"},{"location":"pipeline/pipeline/#transformacao-de-tipos-de-dados","title":"Transforma\u00e7\u00e3o de tipos de dados:","text":"

Converter os tipos de dados, se necess\u00e1rio, para que sejam compat\u00edveis com o banco de dados do SQL Server. Por exemplo, converter datas para o formato apropriado.

"},{"location":"pipeline/pipeline/#carregamento","title":"Carregamento","text":"

Com os dados limpos e transformados, eles s\u00e3o carregados no banco de dados do SQL Server. Isso envolve a inser\u00e7\u00e3o dos dados nas tabelas apropriadas do banco de dados, garantindo que a estrutura das tabelas corresponda aos dados transformados.

"},{"location":"pipeline/pipeline/#visualizacao","title":"Visualiza\u00e7\u00e3o","text":"

Ap\u00f3s o carregamento dos dados no banco de dados, eles est\u00e3o prontos para serem visualizados e analisados. Para isso, os dados s\u00e3o conectados a um painel de visualiza\u00e7\u00e3o, como o Power BI. Nesse painel, \u00e9 poss\u00edvel criar gr\u00e1ficos, tabelas e outros elementos visuais que permitem aos usu\u00e1rios entender e explorar os dados relacionados \u00e0 transi\u00e7\u00e3o energ\u00e9tica do Brasil at\u00e9 2050.

"},{"location":"sobre/post-mortem/","title":"Post Mortem","text":""},{"location":"sobre/post-mortem/#descricao","title":"Descri\u00e7\u00e3o","text":"

Post Mortem \u00e9 utilizada no contexto de projetos de software para se referir a uma an\u00e1lise retrospectiva feita ap\u00f3s a conclus\u00e3o do projeto. Um \"post-mortem\" tem o objetivo de avaliar o que correu bem durante o projeto, identificar \u00e1reas de melhoria e, em \u00faltima inst\u00e2ncia, aprender li\u00e7\u00f5es valiosas para projetos futuros.

"},{"location":"sobre/post-mortem/#o-que-aprendi","title":"O que aprendi","text":"Membro Melhorias Caio - Utiliza\u00e7\u00e3o de scripts de extra\u00e7\u00e3o de dados utilizando Python Ex: Selenium - Inser\u00e7\u00e3o de dados dentro de um banco de dados - Consulta de dados dentro de um banco de dados - Cria\u00e7\u00e3o de dashboards interativas no PowerBi - Utiliza\u00e7\u00e3o de ferramentas de extra\u00e7\u00e3o de dados usando Python - Cria\u00e7\u00e3o de modelos de pipeline dados no Azure Eduardo - Elabora\u00e7\u00e3o de pipelines - Extra\u00e7\u00e3o de dados com python usando Beautiful Soup - Orquestra\u00e7\u00e3o de scripts com gitactions - Manipula\u00e7\u00e3o de inst\u00e2ncias em nuvem - Tratamento de dados com SQL - Implementa\u00e7\u00e3o de um Data Wharehouse - Visualiza\u00e7\u00e3o de dados com Power BI e Linguagem DAX - Cria\u00e7\u00e3o de prot\u00f3tipo com o figma - Elicita\u00e7\u00e3o de requisitos com o cliente real - Repassar o conhecimento atrav\u00e9s de tutoriais Pedro - Organiza\u00e7\u00e3o, ger\u00eancia de projetos e lideran\u00e7a com base na Metodologia \u00c1gil Scrum - Conhecimento sobre a situa\u00e7\u00e3o atual do processo de transi\u00e7\u00e3o energ\u00e9tica no Brasil - Utiliza\u00e7\u00e3o do SGBD MicrosoftServer - Utiliza\u00e7\u00e3o do GitHub Actions - Melhor Utiliza\u00e7\u00e3o do git e github - Comunica\u00e7\u00e3o clara e concisa com clientes e demais interessados - Uso de frameworks de web-scrapping e handlers, como scrapy, Selenium, Beautiful Soup, requests e Pandas Uso e Densenvolvimento no PowerBI - Cria\u00e7\u00e3o e Elabora\u00e7\u00e3o de documentos - Levantamento de Requisitos Victorio - Elabora\u00e7\u00e3o de pipelines com Azure Data Factory - Extra\u00e7\u00e3o de dados com python usando Beautiful Soup, requests, requests-html - Orquestra\u00e7\u00e3o de scripts com gitactions - Tratamento de dados com SQL - Leitura e tratamento de arquivos excel com pandas - Visualiza\u00e7\u00e3o de dados com Power BI e Linguagem DAX - Elicita\u00e7\u00e3o e descoberta de requisitos com cliente real - Verifica\u00e7\u00e3o e valida\u00e7\u00e3o de requisitos com cliente real Ugor - Ultiliza\u00e7\u00e3o de scripts para estra\u00e7\u00e3o de dados - Cria\u00e7\u00e3o de pain\u00e9is Power BI - Inser\u00e7\u00e3o de dados dentro de um banco de dados - Tratamento de dados - Utiliza\u00e7\u00e3o de ferramentas de extra\u00e7\u00e3o de dados usando Python - Cria\u00e7\u00e3o de modelos de pipeline dados no Azure"},{"location":"sobre/post-mortem/#contribuicao-no-projeto","title":"Contribui\u00e7\u00e3o no Projeto","text":"Membro Contribui\u00e7\u00f5es Caio - Cria\u00e7\u00e3o de Requisitos - Media\u00e7\u00e3o das reuni\u00f5es com o TCU- Procurar fontes de relev\u00e2ncia para o projeto- Documenta\u00e7\u00e3o no Github Pages de atas Ex: Elicita\u00e7\u00e3o,Fonte de Dados- Extra\u00e7\u00e3o de Dados EX: Irena,ONS- Cria\u00e7\u00f5es e refatora\u00e7\u00f5es da Dashboard do Projeto Eduardo - Exporta\u00e7\u00e3o do banco de dados - Tutoriais Azure, SQL e Banco de dados - Scripts de extra\u00e7\u00e3o e carga - Publica\u00e7\u00e3o da Dashboard - Pipeline Datafactory - Carga de dados SQL - Prot\u00f3tpio Dashbard - Implementar e evoluir a Dashboard - Modelagem e elicita\u00e7\u00e3o de requisitos - Mapeamento dos dados - Orquestra\u00e7\u00e3o dos dados - MVP do projeto - Diagrama de fluxo Pedro - Ajuda na Cria\u00e7\u00e3o do cronograma geral da equipe - Ajuda na Elabora\u00e7\u00e3o do backlog e Cria\u00e7\u00e3o roadmap,backlog e sprintbacklog do projeto no Github Projects - An\u00e1lise do PNE 2050 e elabora\u00e7\u00e3o de relat\u00f3rio sobre an\u00e1lise PNE 2050 - Organiza\u00e7\u00e3o da equipe nas sprints e aloca\u00e7\u00e3o de tarefas - Documenta\u00e7\u00e3o das sprints do projeto, rituais da equipe e outras atividades relacionadas ao SCRUM - Ajuda na Estrutura\u00e7\u00e3o da Documenta\u00e7\u00e3o - Desenvolvimento na Dashboard (Backlog Antigo) - Desenvolvimento de scripts para extra\u00e7\u00e3o dos dados da pipeline - Pesquisa sobre os dados de CBIO Victorio - Cria\u00e7\u00e3o de Requisitos - Elicita\u00e7\u00e3o e descoberta de fontes de dados para o projeto - Extra\u00e7\u00e3o e tratamento de dados Ex: PNE 2050, BEN, Anu\u00e1rio Estat\u00edstico de Energia El\u00e9trica, Anu\u00e1rio Estat\u00edstico da ANP, PCBIO - Pipeline Datafactory - Carga de dados SQL - Implementa\u00e7\u00e3o da Dashboard - Orquestra\u00e7\u00e3o da execu\u00e7\u00e3o dos scripts pelo Git Actions Ugor - Procurar fontes de relev\u00e2ncia para o projeto - Documenta\u00e7\u00e3o no Github Pages (Dicion\u00e1rio de dados) - Refatora\u00e7\u00f5es da Dashboard do Projeto Montagem de p\u00e1ginas no dashboard"},{"location":"sobre/post-mortem/#o-que-deveria-ter-feito-melhor","title":"O que deveria ter feito melhor","text":"Membro Melhorias Caio - Entender melhor o problema do cliente - Conversar melhor com outros membros sobre solu\u00e7\u00e3o de problemas- Focar em issues de maior impacto dentro do projeto- Pegar uma maior quantidade de issues Eduardo - Poderia comparecer mais nas daylies - Conciliar melhor o projeto com trabalho e faculdade - Poderia ter escolhido uma op\u00e7\u00e3o Open Source - Distribuir melhor as demandas com os outros membros - Orientar/comunicar melhor com os outros membros. - Optar por fazer tutoriais ao vivo ao inv\u00e9s de v\u00eddeo. Pedro - Organiza\u00e7\u00e3o Pessoal; - Ger\u00eancia do Projeto; - Contribuir com a melhora da motiva\u00e7\u00e3o e engajamento da equipe com o projeto; - Melhorar a compreens\u00e3o de responsabilidades e atividades de um Scrum Master; - Melhorar em Apresenta\u00e7\u00f5es ao p\u00fablico - Ter aprofundado melhor no estudo em rela\u00e7\u00e3o ao uso das ferramentas do projeto - Ter engajado mais no projeto - Trabalhar com um projeto open-source Victorio - Ser mais assertivo na hora de elicitar o problema do cliente - Me comunicar melhor com a equipe Ugor Estudo do problema antes de propor o produto - Organiza\u00e7\u00e3o de tempo - Comunica\u00e7\u00e3o entre os membros da equipe - Diviss\u00e3o de issues por sprint mais pontuais"},{"location":"sobre/post-mortem/#quais-foram-as-fraquezas-e-como-aprimora-las","title":"Quais foram as fraquezas e como aprimor\u00e1-las","text":"Membro Fraquezas Aprimoramento Caio Procrastina\u00e7\u00e3o: Adiar tarefas importantes.Gest\u00e3o do Tempo: M\u00e1 administra\u00e7\u00e3o do tempo, resultando em atrasos.Impaci\u00eancia: Dificuldade em lidar com situa\u00e7\u00f5es que exigem paci\u00eancia. Procrastina\u00e7\u00e3o: Estabelecer metas claras, criar um cronograma, e dividir grandes tarefas em partes menores.Gest\u00e3o do Tempo: Utilizar t\u00e9cnicas de gerenciamento de tempo, como a t\u00e9cnica Pomodoro, estabelecer prioridades clarasImpaci\u00eancia: Praticar a paci\u00eancia em situa\u00e7\u00f5es cotidianas, visualizar objetivos a longo prazo e entender que o progresso leva tempo. Eduardo Gest\u00e3o de tempo Conciliar o projeto com trabalho/faculdade/est\u00e1gio Comunica\u00e7\u00e3o: Comunicar com o grupo atividades que estou fazendo/repassar atividades Gest\u00e3o de tempo: Poderia ter produzido mais Comunica\u00e7\u00e3o: Repassar mais tarefas que acabei fazendo. Pedro Gest\u00e3o de Tempo: N\u00e3o planejar, organizar e priorizar as atividades relacionadas ao projeto. Disciplina e const\u00e2ncia: N\u00e3o ser fiel aos hor\u00e1rios estipulados para dedica\u00e7\u00e3o ao projeto Gest\u00e3o de Tempo: Planejar previamente o que realizar no projeto e definir o escopo de aprendizado com o projeto; Organizar hor\u00e1rios pessoais di\u00e1rios, semanais e mensais e cumpri-los, definir estrat\u00e9gias para o projeto; Priorizar atividades e conciliar com a faculdade. Disciplina e const\u00e2ncia: Manter o compromisso com o projeto e n\u00e3o tolerar deslisos, desvios, etc. Victorio Comunica\u00e7\u00e3o com o cliente: N\u00e3o entender o problema do cliente e esperar o cliente fornecer os requisitos do projeto Comunica\u00e7\u00e3o: Comunicar com o grupo atividades que estou fazendo/repassar atividades Comunica\u00e7\u00e3o com o cliente: Entender o problema do cliente e n\u00e3o se deixar desviar por sugest\u00f5es pouco realistas do cliente sobre o que deve ser o projeto Comunica\u00e7\u00e3o: Repassar mais tarefas que fiz Ugor Gest\u00e3o do Tempo: M\u00e1 administra\u00e7\u00e3o do tempo, resultando em atrasos.Comunica\u00e7\u00e3o: Dificulade dem posicionamentos quanto ao processo Procrastina\u00e7\u00e3o: Adiar tarefas importantes. Proatividade: Propor mais ideias ao inv\u00e9s de apenas segui-las. Gest\u00e3o do Tempo: Organizar a tarefas da semana por dia e trabalhar de forma pontual. Comunica\u00e7\u00e3o: Exercitar a comunica\u00e7\u00e3o dentro de futuros projetos. Procrastina\u00e7\u00e3o: Realizar as tarefas conforme o tempo planejado e reservado. Proatividade: Propor mais ideias ao inv\u00e9s de apenas segui-las."},{"location":"sobre/post-mortem/#retrospectiva","title":"Retrospectiva","text":""},{"location":"sobre/post-mortem/#relato-de-experiencia-caio","title":"Relato de Experi\u00eancia - Caio","text":"

Durante o desenvolvimento do projeto, tive a oportunidade de ampliar meus horizontes ao atuar como Community Manager, explorando uma \u00e1rea na qual nunca havia mergulhado anteriormente. Essa experi\u00eancia permitiu-me entender perspectivas diferentes das minhas habituais e proporcionou contribui\u00e7\u00f5es significativas \u00e0 comunidade externa.

Ao desempenhar o papel de Community Manager, enfrentei desafios intrigantes, especialmente no uso de ferramentas de extra\u00e7\u00e3o de dados. Inicialmente, encontrei dificuldades para resolver esses problemas de maneira eficiente. No entanto, atrav\u00e9s de conversas e colabora\u00e7\u00e3o com outros membros da equipe, conseguimos n\u00e3o apenas superar esses obst\u00e1culos, mas tamb\u00e9m encontrar solu\u00e7\u00f5es ideais que beneficiaram todo o projeto.

Essa jornada n\u00e3o apenas me proporcionou um aprendizado valioso em uma nova \u00e1rea, mas tamb\u00e9m destacou a import\u00e2ncia da colabora\u00e7\u00e3o e da troca de conhecimento dentro da comunidade.

Com o aprendizado do projeto, consegui uma vaga de est\u00e1gio na Ag\u00eancia de Avia\u00e7\u00e3o Civil (ANAC), atuando como analista de dados e utilizando ferramentas semelhantes \u00e0s que usamos durante o desenvolvimento do projeto.

"},{"location":"sobre/post-mortem/#relato-de-experiencia-eduardo","title":"Relato de Experi\u00eancia - Eduardo","text":"

O projeto foi fundamental para o meu aprendizado, consegui desenvolver habilidades variadas, enfrentar desafios da rotina e colocar em pr\u00e1tica todo conhecimento te\u00f3rico que adquiri durante o curso de Engenharia de Software.

Aprendi a configurar servi\u00e7os, gerenciar instancias virtuais e utilizar o azure para armazenar e processar dados. Tamb\u00e9m aprendi a projetar e otimizar bancos de dados, executar consultas e manter a integridade dos dados. Todo esse conhecimento adquirido foi muito importante para mim, pois antes de come\u00e7ar o projeto eu n\u00e3o tinha ideia do que se tratava um (ETL), ent\u00e3o foi um desafio que acabei superando,e repassando meu conhecimento para os outros integrantes do grupo atrav\u00e9s de tutoriais.

Como Product Owner, meu progresso ao longo do projeto foi marcada por uma evolu\u00e7\u00e3o cont\u00ednua e desafiadora. Principalmente para entender o que o cliente desejava, esse foi um desafio que demandou um tempo consider\u00e1vel e um esfor\u00e7o significativo da equipe. No entanto, n\u00f3s acabamos definindo o MVP e estabelecendo melhorias para o produto, o que foi fundamental para uma melhor divis\u00e3o de tarefas e finaliza\u00e7\u00e3o do projeto.

No geral, o projeto desempenhou um papel fundamental em minha trajet\u00f3ria de desenvolvimento profissional, espero muito que seja uma ferramenta \u00fatil no contexto da transi\u00e7\u00e3o energ\u00e9tica brasileira, e sem d\u00favida ser\u00e1 um destaque em meu portf\u00f3lio. Al\u00e9m disso, muito dos conceitos que eu vi durante o projeto foram fundamentais para que eu conseguisse receber algumas propostas de trabalho e tamb\u00e9m ser aprovado no concurso da Dataprev.

"},{"location":"sobre/post-mortem/#relato-de-experiencia-pedro","title":"Relato de Experi\u00eancia - Pedro","text":"

O projeto foi essencial ao me proporcionar conhecimento pr\u00e1tico de trabalho com clientes reais, comunica\u00e7\u00e3o entre equipe e com stackholders, habilidades t\u00e9cnicas, entedimento de metodologias \u00e1geis e como vender produtos e trabalhos relacionados a \u00e1rea de software. Al\u00e9m disso tudo, o projeto pode me mostrar os meus pontos fracos, os quais posso trabalhar em cima e evoluir a mim mesmo como profissional. Tive a oportunidade de desenvolver minhas habilidades de programa\u00e7\u00e3o com a extra\u00e7\u00e3o de dados em python, com os frameworks beautifulsoup juntamente com requests, Selenium e scrapy. Aprender sobre o uso do PowerBI, Microsoft SQLServer foram boas oportunidades, mesmo sendo softwares de licen\u00e7a fechada. O uso constante do Git e Github puderam melhorar meus conhecimentos nestes softwares essenciais na carreira de Desenvolvimento de Software.

"},{"location":"sobre/post-mortem/#relato-de-experiencia-victorio","title":"Relato de Experi\u00eancia - Victorio","text":"

Esta jornada me proporcionou um novo olhar sobre o potencial dos dados das fontes de dados, governamentais ou n\u00e3o, dispon\u00edveis na internet e a import\u00e2ncia de integrar esses dados em uma \u00fanica plataforma.

Desenvolvi scripts personalizados para recuperar os dados necess\u00e1rios. Essa etapa exigiu uma compreens\u00e3o s\u00f3lida dos formatos de dados espec\u00edficos e autentica\u00e7\u00e3o. Uma vez que os dados foram coletados, realizei limpeza e pr\u00e9-processamento para garantir que estivessem prontos para as pr\u00f3ximas fases.

O principal do projeto foi a implementa\u00e7\u00e3o de um pipeline ETL (Extra\u00e7\u00e3o, Transforma\u00e7\u00e3o e Carga) usando Azure Data Factory, automatizando a extra\u00e7\u00e3o regular de dados. Com os dados preparados e armazenados em um reposit\u00f3rio, criamos visualiza\u00e7\u00f5es significativas para tornar as informa\u00e7\u00f5es acess\u00edveis e \u00fateis usando o Power BI.

Essa experi\u00eancia solidificou meu conhecimento em ci\u00eancia de dados, e estou ansioso para explorar novos projetos e desafios. A experi\u00eancia tamb\u00e9m me garantiu mais conhecimento na hora de elicitar os problemas de um cliente real.

"},{"location":"sobre/post-mortem/#relato-de-experiencia-ugor","title":"Relato de Experi\u00eancia - Ugor","text":"

O projeto me proporcionou a oportunidade trabalhar em um ramo da Tecnologia da Informa\u00e7\u00e3o que ainda n\u00e3o tinha tido contato: dados. Profissionalmente, meus estudos se voltaram para essa parte de forma a moldar a vis\u00e3o de carreira, a qual se concentrava apenas na \u00e1rea de desenvolvimento.

Se faz importante destacar como a experi\u00eancia de lidar com um cliente real acrescenta em todo o processo. Frequentemente, nos encontramos com o foco no produto e dessa vez precisamos fazer estudos dirigidos para a \u00e1rea de transi\u00e7\u00e3o energ\u00e9tica para poder entender quais informa\u00e7\u00f5es seriam relevantes na constru\u00e7\u00e3o do dashboard.

Tive minha primeira experi\u00eancia montando um banco de dados real, acompanhando as extra\u00e7\u00f5es, defini\u00e7\u00e3o do dashboard al\u00e9m dos seus refinamentos. O processo se deu de forma colaborativa onde o time de desenvolvedores e o cliente constru\u00edram juntos as demandas poss\u00edveis de serem englobadas no produto final.

Dito isso, o projeto agregou pessoalmente e profissionalmente em diversas esferas diferentes. Com certeza saindo um profissional diferente do que entrou nessa jornada.

"},{"location":"tutoriais/tutoriais/","title":"Tutoriais","text":"

Neste documento, apresentaremos os treinamentos que foram desenvolvidos para a equipe com o prop\u00f3sito de capacitar os membros no uso do SQL Server, Azure e na manipula\u00e7\u00e3o de dados.Tanto para os novos membros da equipe como para aqueles que buscam aprimorar suas habilidades, os tutoriais reduzem a curva de aprendizado. Eles fornecem orienta\u00e7\u00f5es passo a passo sobre como realizar as tarefas do ETL, acelerando a adapta\u00e7\u00e3o e a efic\u00e1cia da equipe.

"},{"location":"tutoriais/tutoriais/#principais-recursos-azure-etl","title":"Principais recursos Azure ETL","text":"

Neste treinamento inclui os principais objetivos do Microsoft Azure, visando principalmente como criar uma c\u00f3pia de dados para um banco SQL Server instanciado na Azure.

"},{"location":"tutoriais/tutoriais/#como-importar-dados-sql-server","title":"Como importar dados SQL server","text":"

Este treinamento objetiva a importa\u00e7\u00e3o de planilhas/tabelas .CSV/XLSX/Flat file source para o SQL serve, visando uma manipula\u00e7\u00e3o inicial dos dados, de forma n\u00e3o automatizada.

"},{"location":"tutoriais/tutoriais/#treinamento-sql-principais-comandos-de-manipulacao","title":"Treinamento SQL - Principais comandos de manipula\u00e7\u00e3o","text":"

Este treinamento de SQL foi realizado na disciplina de EPS para membros de MDS, objetivando aprimorar os conhecimentos de manipula\u00e7\u00e3o de dados e filtragem. Mas que tamb\u00e9m \u00e9 \u00fatil para a elabora\u00e7\u00e3o de scripts automatizados no projeto atual.

"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..0f8724e --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 0000000..6862234 Binary files /dev/null and b/sitemap.xml.gz differ diff --git a/sobre/post-mortem/index.html b/sobre/post-mortem/index.html new file mode 100644 index 0000000..0e9b51c --- /dev/null +++ b/sobre/post-mortem/index.html @@ -0,0 +1,2601 @@ + + + + + + + + + + + + + + + + + + + + + Inicio - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Post Mortem

+

Descrição

+

Post Mortem é utilizada no contexto de projetos de software para se referir a uma análise retrospectiva feita após a conclusão do projeto. Um "post-mortem" tem o objetivo de avaliar o que correu bem durante o projeto, identificar áreas de melhoria e, em última instância, aprender lições valiosas para projetos futuros.

+

O que aprendi

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MembroMelhorias
Caio- Utilização de scripts de extração de dados utilizando Python Ex: Selenium
- Inserção de dados dentro de um banco de dados
- Consulta de dados dentro de um banco de dados
- Criação de dashboards interativas no PowerBi
- Utilização de ferramentas de extração de dados usando Python
- Criação de modelos de pipeline dados no Azure
Eduardo- Elaboração de pipelines
- Extração de dados com python usando Beautiful Soup
- Orquestração de scripts com gitactions
- Manipulação de instâncias em nuvem
- Tratamento de dados com SQL
- Implementação de um Data Wharehouse
- Visualização de dados com Power BI e Linguagem DAX
- Criação de protótipo com o figma
- Elicitação de requisitos com o cliente real
- Repassar o conhecimento através de tutoriais
Pedro- Organização, gerência de projetos e liderança com base na Metodologia Ágil Scrum
- Conhecimento sobre a situação atual do processo de transição energética no Brasil
- Utilização do SGBD MicrosoftServer
- Utilização do GitHub Actions
- Melhor Utilização do git e github
- Comunicação clara e concisa com clientes e demais interessados
- Uso de frameworks de web-scrapping e handlers, como scrapy, Selenium, Beautiful Soup, requests e Pandas
Uso e Densenvolvimento no PowerBI
- Criação e Elaboração de documentos
- Levantamento de Requisitos
Victorio- Elaboração de pipelines com Azure Data Factory
- Extração de dados com python usando Beautiful Soup, requests, requests-html
- Orquestração de scripts com gitactions
- Tratamento de dados com SQL
- Leitura e tratamento de arquivos excel com pandas
- Visualização de dados com Power BI e Linguagem DAX
- Elicitação e descoberta de requisitos com cliente real
- Verificação e validação de requisitos com cliente real
Ugor- Ultilização de scripts para estração de dados
- Criação de painéis Power BI
- Inserção de dados dentro de um banco de dados
- Tratamento de dados
- Utilização de ferramentas de extração de dados usando Python
- Criação de modelos de pipeline dados no Azure
+

Contribuição no Projeto

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MembroContribuições
Caio- Criação de Requisitos
- Mediação das reuniões com o TCU
- Procurar fontes de relevância para o projeto
- Documentação no Github Pages de atas Ex: Elicitação,Fonte de Dados
- Extração de Dados EX: Irena,ONS
- Criações e refatorações da Dashboard do Projeto
Eduardo- Exportação do banco de dados
- Tutoriais Azure, SQL e Banco de dados
- Scripts de extração e carga
- Publicação da Dashboard
- Pipeline Datafactory
- Carga de dados SQL
- Protótpio Dashbard
- Implementar e evoluir a Dashboard
- Modelagem e elicitação de requisitos
- Mapeamento dos dados
- Orquestração dos dados
- MVP do projeto
- Diagrama de fluxo
Pedro- Ajuda na Criação do cronograma geral da equipe
- Ajuda na Elaboração do backlog e Criação roadmap,backlog e sprintbacklog do projeto no Github Projects
- Análise do PNE 2050 e elaboração de relatório sobre análise PNE 2050
- Organização da equipe nas sprints e alocação de tarefas
- Documentação das sprints do projeto, rituais da equipe e outras atividades relacionadas ao SCRUM
- Ajuda na Estruturação da Documentação
- Desenvolvimento na Dashboard (Backlog Antigo)
- Desenvolvimento de scripts para extração dos dados da pipeline
- Pesquisa sobre os dados de CBIO
Victorio- Criação de Requisitos
- Elicitação e descoberta de fontes de dados para o projeto
- Extração e tratamento de dados Ex: PNE 2050, BEN, Anuário Estatístico de Energia Elétrica, Anuário Estatístico da ANP, PCBIO
- Pipeline Datafactory
- Carga de dados SQL
- Implementação da Dashboard
- Orquestração da execução dos scripts pelo Git Actions
Ugor- Procurar fontes de relevância para o projeto
- Documentação no Github Pages (Dicionário de dados)
- Refatorações da Dashboard do Projeto
Montagem de páginas no dashboard
+

O que deveria ter feito melhor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MembroMelhorias
Caio- Entender melhor o problema do cliente
- Conversar melhor com outros membros sobre solução de problemas
- Focar em issues de maior impacto dentro do projeto
- Pegar uma maior quantidade de issues
Eduardo- Poderia comparecer mais nas daylies
- Conciliar melhor o projeto com trabalho e faculdade
- Poderia ter escolhido uma opção Open Source
- Distribuir melhor as demandas com os outros membros
- Orientar/comunicar melhor com os outros membros.
- Optar por fazer tutoriais ao vivo ao invés de vídeo.
Pedro- Organização Pessoal;
- Gerência do Projeto;
- Contribuir com a melhora da motivação e engajamento da equipe com o projeto;
- Melhorar a compreensão de responsabilidades e atividades de um Scrum Master;
- Melhorar em Apresentações ao público
- Ter aprofundado melhor no estudo em relação ao uso das ferramentas do projeto
- Ter engajado mais no projeto
- Trabalhar com um projeto open-source
Victorio- Ser mais assertivo na hora de elicitar o problema do cliente
- Me comunicar melhor com a equipe
UgorEstudo do problema antes de propor o produto
- Organização de tempo
- Comunicação entre os membros da equipe
- Divissão de issues por sprint mais pontuais
+

Quais foram as fraquezas e como aprimorá-las

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MembroFraquezasAprimoramento
CaioProcrastinação: Adiar tarefas importantes.
Gestão do Tempo: Má administração do tempo, resultando em atrasos.
Impaciência: Dificuldade em lidar com situações que exigem paciência.
Procrastinação: Estabelecer metas claras, criar um cronograma, e dividir grandes tarefas em partes menores.
Gestão do Tempo: Utilizar técnicas de gerenciamento de tempo, como a técnica Pomodoro, estabelecer prioridades claras
Impaciência: Praticar a paciência em situações cotidianas, visualizar objetivos a longo prazo e entender que o progresso leva tempo.
EduardoGestão de tempo Conciliar o projeto com trabalho/faculdade/estágio
Comunicação: Comunicar com o grupo atividades que estou fazendo/repassar atividades
Gestão de tempo: Poderia ter produzido mais
Comunicação: Repassar mais tarefas que acabei fazendo.
PedroGestão de Tempo: Não planejar, organizar e priorizar as atividades relacionadas ao projeto.
Disciplina e constância: Não ser fiel aos horários estipulados para dedicação ao projeto
Gestão de Tempo: Planejar previamente o que realizar no projeto e definir o escopo de aprendizado com o projeto; Organizar horários pessoais diários, semanais e mensais e cumpri-los, definir estratégias para o projeto; Priorizar atividades e conciliar com a faculdade.
Disciplina e constância: Manter o compromisso com o projeto e não tolerar deslisos, desvios, etc.
VictorioComunicação com o cliente: Não entender o problema do cliente e esperar o cliente fornecer os requisitos do projeto
Comunicação: Comunicar com o grupo atividades que estou fazendo/repassar atividades
Comunicação com o cliente: Entender o problema do cliente e não se deixar desviar por sugestões pouco realistas do cliente sobre o que deve ser o projeto
Comunicação: Repassar mais tarefas que fiz
UgorGestão do Tempo: Má administração do tempo, resultando em atrasos.
Comunicação: Dificulade dem posicionamentos quanto ao processo
Procrastinação: Adiar tarefas importantes.
Proatividade: Propor mais ideias ao invés de apenas segui-las.
Gestão do Tempo: Organizar a tarefas da semana por dia e trabalhar de forma pontual.
Comunicação: Exercitar a comunicação dentro de futuros projetos.
Procrastinação: Realizar as tarefas conforme o tempo planejado e reservado.
Proatividade: Propor mais ideias ao invés de apenas segui-las.
+

Retrospectiva

+

Relato de Experiência - Caio

+

Durante o desenvolvimento do projeto, tive a oportunidade de ampliar meus horizontes ao atuar como Community Manager, explorando uma área na qual nunca havia mergulhado anteriormente. Essa experiência permitiu-me entender perspectivas diferentes das minhas habituais e proporcionou contribuições significativas à comunidade externa.

+

Ao desempenhar o papel de Community Manager, enfrentei desafios intrigantes, especialmente no uso de ferramentas de extração de dados. Inicialmente, encontrei dificuldades para resolver esses problemas de maneira eficiente. No entanto, através de conversas e colaboração com outros membros da equipe, conseguimos não apenas superar esses obstáculos, mas também encontrar soluções ideais que beneficiaram todo o projeto.

+

Essa jornada não apenas me proporcionou um aprendizado valioso em uma nova área, mas também destacou a importância da colaboração e da troca de conhecimento dentro da comunidade.

+

Com o aprendizado do projeto, consegui uma vaga de estágio na Agência de Aviação Civil (ANAC), atuando como analista de dados e utilizando ferramentas semelhantes às que usamos durante o desenvolvimento do projeto.

+

Relato de Experiência - Eduardo

+

O projeto foi fundamental para o meu aprendizado, consegui desenvolver habilidades variadas, enfrentar desafios da rotina e colocar em prática todo conhecimento teórico que adquiri durante o curso de Engenharia de Software.

+

Aprendi a configurar serviços, gerenciar instancias virtuais e utilizar o azure para armazenar e processar dados. Também aprendi a projetar e otimizar bancos de dados, executar consultas e manter a integridade dos dados. Todo esse conhecimento adquirido foi muito importante para mim, pois antes de começar o projeto eu não tinha ideia do que se tratava um (ETL), então foi um desafio que acabei superando,e repassando meu conhecimento para os outros integrantes do grupo através de tutoriais.

+

Como Product Owner, meu progresso ao longo do projeto foi marcada por uma evolução contínua e desafiadora. Principalmente para entender o que o cliente desejava, esse foi um desafio que demandou um tempo considerável e um esforço significativo da equipe. No entanto, nós acabamos definindo o MVP e estabelecendo melhorias para o produto, o que foi fundamental para uma melhor divisão de tarefas e finalização do projeto.

+

No geral, o projeto desempenhou um papel fundamental em minha trajetória de desenvolvimento profissional, espero muito que seja uma ferramenta útil no contexto da transição energética brasileira, e sem dúvida será um destaque em meu portfólio. Além disso, muito dos conceitos que eu vi durante o projeto foram fundamentais para que eu conseguisse receber algumas propostas de trabalho e também ser aprovado no concurso da Dataprev.

+

Relato de Experiência - Pedro

+

+

O projeto foi essencial ao me proporcionar conhecimento prático de trabalho com clientes reais, comunicação entre equipe e com stackholders, habilidades técnicas, entedimento de metodologias ágeis e como vender produtos e trabalhos relacionados a área de software. Além disso tudo, o projeto pode me mostrar os meus pontos fracos, os quais posso trabalhar em cima e evoluir a mim mesmo como profissional.
+Tive a oportunidade de desenvolver minhas habilidades de programação com a extração de dados em python, com os frameworks beautifulsoup juntamente com requests, Selenium e scrapy. Aprender sobre o uso do PowerBI, Microsoft SQLServer foram boas oportunidades, mesmo sendo softwares de licença fechada. O uso constante do Git e Github puderam melhorar meus conhecimentos nestes softwares essenciais na carreira de Desenvolvimento de Software.

+

Relato de Experiência - Victorio

+

Esta jornada me proporcionou um novo olhar sobre o potencial dos dados das fontes de dados, governamentais ou não, disponíveis na internet e a importância de integrar esses dados em uma única plataforma.

+

Desenvolvi scripts personalizados para recuperar os dados necessários. Essa etapa exigiu uma compreensão sólida dos formatos de dados específicos e autenticação. Uma vez que os dados foram coletados, realizei limpeza e pré-processamento para garantir que estivessem prontos para as próximas fases.

+

O principal do projeto foi a implementação de um pipeline ETL (Extração, Transformação e Carga) usando Azure Data Factory, automatizando a extração regular de dados. Com os dados preparados e armazenados em um repositório, criamos visualizações significativas para tornar as informações acessíveis e úteis usando o Power BI.

+

Essa experiência solidificou meu conhecimento em ciência de dados, e estou ansioso para explorar novos projetos e desafios. A experiência também me garantiu mais conhecimento na hora de elicitar os problemas de um cliente real.

+

Relato de Experiência - Ugor

+

O projeto me proporcionou a oportunidade trabalhar em um ramo da Tecnologia da Informação que ainda não tinha tido contato: dados. Profissionalmente, meus estudos se voltaram para essa parte de forma a moldar a visão de carreira, a qual se concentrava apenas na área de desenvolvimento.

+

Se faz importante destacar como a experiência de lidar com um cliente real acrescenta em todo o processo. Frequentemente, nos encontramos com o foco no produto e dessa vez precisamos fazer estudos dirigidos para a área de transição energética para poder entender quais informações seriam relevantes na construção do dashboard.

+

Tive minha primeira experiência montando um banco de dados real, acompanhando as extrações, definição do dashboard além dos seus refinamentos. O processo se deu de forma colaborativa onde o time de desenvolvedores e o cliente construíram juntos as demandas possíveis de serem englobadas no produto final.

+

Dito isso, o projeto agregou pessoalmente e profissionalmente em diversas esferas diferentes. Com certeza saindo um profissional diferente do que entrou nessa jornada.

+




+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/tutoriais/tutoriais/index.html b/tutoriais/tutoriais/index.html new file mode 100644 index 0000000..b18cb7f --- /dev/null +++ b/tutoriais/tutoriais/index.html @@ -0,0 +1,2493 @@ + + + + + + + + + + + + + + + + + + + + + + + Tutoriais - PipelineTCU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Tutoriais

+

Neste documento, apresentaremos os treinamentos que foram desenvolvidos para a equipe com o propósito de capacitar os membros no uso do SQL Server, Azure e na manipulação de dados.Tanto para os novos membros da equipe como para aqueles que buscam aprimorar suas habilidades, os tutoriais reduzem a curva de aprendizado. Eles fornecem orientações passo a passo sobre como realizar as tarefas do ETL, acelerando a adaptação e a eficácia da equipe.

+

Principais recursos Azure ETL

+

Neste treinamento inclui os principais objetivos do Microsoft Azure, visando principalmente como criar uma cópia de dados para um banco SQL Server instanciado na Azure.

+ + +

Como importar dados SQL server

+

Este treinamento objetiva a importação de planilhas/tabelas .CSV/XLSX/Flat file source para o SQL serve, visando uma manipulação inicial dos dados, de forma não automatizada.

+ + +

Treinamento SQL - Principais comandos de manipulação

+

Este treinamento de SQL foi realizado na disciplina de EPS para membros de MDS, objetivando aprimorar os conhecimentos de manipulação de dados e filtragem. Mas que também é útil para a elaboração de scripts automatizados no projeto atual.

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file