Plataforma nginstack

Plataforma de desenvolvimento web voltada para a criação de sistemas de gestão

Visão geral

  • Foco nas funcionalidades necessárias para a construção de sistemas de gestão
  • Desenvolvimento em JavaScript ( #1 no ranking de linguagens mais populares no Stack Overflow Developer Survey)
  • Multiplataforma: Windows e Linux
  • Modelo de dados integrado e customizável

Visão geral

  • Criação de novos processos, telas e relatórios de forma simples, sem duplicação de regras de negócio
  • Interface web padronizada e coerente em todo o sistema
  • Rastreabilidade e auditoria das modificações dos dados
  • Integração com outros sistemas por meio de APIs HTTP

Baixo custo de propriedade

  • Componentes livres de royalties, incluindo bibliotecas de gráficos, grade de dados e geração de relatórios
  • Suporte ao PostgreSQL, além do Oracle e Microsoft SQL Server
  • Distribuição de processamento como estratégia de redução de custos de servidores
  • Atualização simples e automatizada

Principais componentes

  • Servidor de aplicação Engine
  • Web Framework
  • REST Framework
  • Ambiente de Desenvolvimento Integrado (IDE)

Engine

  • Servidor de aplicação especializado para sistemas de gestão
  • Servidor web próprio integrado (HTTP e HTTPS)
  • Executável nativo x86 (32 e 64 bits)
  • Possibilidade de deployment distribuído, com servidor central e de borda (edge server)
  • Conexão nativa com PostgreSQL, Oracle e Microsoft SQL Server
  • Dialeto SQL comum que garante interoperabilidade entre os SGBDs

Engine

  • Banco de dados local embarcado (IDO)
  • Runtime Javascript nativo
  • Comunicação com periféricos (ex. impressoras, leitores, etc.)
  • Integração com a Java Virtual Machine
  • Distribuição e atualização automática do executável

Runtime Javascript

  • Dialeto similar ao padrão ECMAScript
  • Paradigma de programação síncrono, modelo mental mais fácil de desenvolvimento
  • Suporte a módulos CommonJS
  • Diversos módulos nativos disponíveis: DataSet, File, XML DOM, Socket, SerialPort, Zip, Email, WebSocket, Objetos COM, Barcode, XMLHttpRequest, Crypto e muitos outros
  • Possibilidade de uso do interpretador V8 do Google Chrome e Node.js

Cache Local

  • Banco de dados local embarcado (IDO), criptografado, auto gerenciado e com réplica parcial da base de dados
  • Armazena os registros das tabelas cadastrais do sistema, evitando o acesso à base de dados para obter informações frequentemente acessadas
  • Sincronização automática com o SGBD

Servidor de borda (edge)

  • Engines podem ser instalados de forma distribuída
  • Comunicação entre servidores através de protocolo otimizado e seguro
  • Permite redundância off-line de algumas aplicações
  • Redução da latência ao possibilitar a execução dos processos e regras de negócio em um servidor mais próximo do usuário

Sistema de arquivos virtual

  • Processos, relatórios, configurações e regras de negócios são gravados em arquivos JavaScript em um sistema de arquivos virtual armazenado na base de dados
  • Scripts podem ser armazenados em um formato textual puro ou em pacotes Jaz, formato de distribuição de módulos Javascript com compressão e encriptação de dados
  • Códigos-fontes são protegidos pela mesma política de backup da base de dados

Modelo de dados

  • Tabelas, campos e regras de negócio são declaradas em JavaScript em um modelo hierárquico de classes de dados
  • A hierarquia de classes define as entidades de dados, como clientes, fornecedores, produtos e pedidos
  • Classes filhas herdam as configurações das classes mães

Modelo de dados

Árvore de classes

Modelo de dados

  • Todos os processos, grades e relatórios compartilham as regras definidas no modelo de dados
  • Customizações no modelo de dados são refletidas nas telas padrões do sistema
  • Atualização automatizada do esquema da base de dados a partir das definições de classes, campos e índices

Fontes de dados

  • Objetos que têm o objetivo de centralizar regras e conceitos não triviais existentes nas consultas à base de dados
  • Permitem a construção de relatórios sem exigir conhecimento específico do modelo de dados
  • Relatórios criados a partir de fontes de dados podem ser agendados pelos usuários, permitindo o envio de e-mails diários, semanais ou mensais com os resultados operacionais da empresa

Fontes de dados

  • Relatórios podem ser criados a partir de uma fonte de dados utilizando uma sintaxe declarativa
{
  dataSourceQueryKey: -1897035941, // Vendas de Materiais e Produtos por Classe de Recurso
  type: 'report',
  filters: [
    {name: 'PED_ESTABELECI.EMPRESA', label: 'Empresa'},
    {name: 'PED_ESTABELECI', label: 'Estabelecimento'},
    {name: 'PED_RECURSO.CLASSE', label: 'Classe do Recurso', 
      classKey: -1897050565 /* Materiais e Produtos */},
    {name: 'PED_RECURSO', label: 'Recurso'},
    {name: 'PED_EMISSAOMOV_START', label: 'Início', required: true, group: 'Período'},
    {name: 'PED_EMISSAOMOV_END', label: 'Fim', required: true, group: 'Período'}
  ],
  columns: [
    {name: 'PED_ESTABELECI.NOME', label: 'Estabelecimento', useToGroup: true},
    {name: 'PED_REPRESENTA.NOME', label: 'Representante', useToGroup: true},
    {name: 'PED_RECURSO.CLASSE!URL', label: 'Classe', useToGroup: true},
    {name: 'PED_QUANTIDADE', label: 'Quantidade'},
    {name: 'PED_XRENTABILIDADE', label: 'Rentabilidade'},
    {name: 'PED_XTOTALSEMACRESCIMO', label: 'Total menos Acréscimo Financeiro'}
  ]
}

Fontes de dados

  • Relatório criado a partir do exemplo

Filtros de uma visualização de fonte de dados

Fontes de dados

  • Resultado do relatório criado a partir do exemplo

Resultado de uma visualização de fonte de dados

Modelo de segurança

  • Controle de usuários próprio armazenado na base de dados, com algoritmo de hash para senhas
  • Integração com serviços de autenticação externos via OpenID Connect ou Windows Active Directory
  • Grupos de usuários são utilizados para representar o organograma da empresa
  • Papéis pré-definidos com as permissões necessárias para as principais funções
  • Tokens de autorização para controlar o uso de APIs HTTP

Modelo de segurança

  • Permissões de acesso podem ser configuradas em vários níveis:
    • de forma simples, indicando os processos e relatórios visíveis no menu do usuário
    • de forma mais detalhada, indicando as ações permitidas por classe de dados (ver, inserir, alterar, excluir, aprovar, etc)
  • Permissões configuradas nas classes de dados são aplicadas automaticamente em todos os processos, telas e relatórios do sistema

Rastreabilidade

  • Todas as tabelas do sistema possuem os campos
    • Chave: identificador único de um registro na base de dados
    • Classe: indica a classe de dados do registro e as regras de negócio associadas a ele
    • Versão: versão corrente do registro

Rastreabilidade

  • Todas as modificações realizadas são registradas em uma tabela de log transacional
  • Alterações de usuários podem ser consultadas ou desfeitas a partir do log transacional
  • Retenção do log transacional é configurada por classe de dados

Chave

  • Chaves são números inteiros
    • valores positivos: registros específicos da base de dados, como clientes, produtos, pedidos, etc
    • valores negativos: registros criados pelo fornecedor do sistema ou por customizações. Eles somente podem ser modificados pela equipe de desenvolvimento responsável

Chave

  • Registros de chave negativa podem ser transportados de uma base de dados para outra, permitindo a criação de bases de desenvolvimento e homologação para as customizações
  • Os produtos e módulos do sistema consistem de um conjunto de registros de chaves negativas que são inseridos e modificados pelos processos de atualização

Versão

  • Identificador sequencial único associado à um conjunto atômico de alterações realizadas na base de dados em uma ou mais tabelas
  • Utilizado para impedir alterações conflitantes de registros da base

Customizações

  • As customizações empregam as mesmas tecnologias utilizadas no desenvolvimento do sistema
  • Podem ser criadas novas classes de dados, opções de menu, processos e relatórios
  • Chaves negativas exclusivas do cliente (produto Custom) simplifica a criação de ambientes isolados de desenvolvimento, homologação e produção

Web Framework

  • Framework Javascript para o desenvolvimento de interfaces e relatórios
  • Garante a consistência visual do sistema
  • Paradigma server-side: desenvolvedor se abstrai do código executado no navegador e as regras de negócio são executadas de forma segura no Engine
  • Paradigma stateful: sessão do usuário é preservada, evitando a restauração de dados a cada interação do usuário

Web Framework

  • Componentes ricos de interação com o usuário:
    • Grades, campos, formulários, botões, links e gráficos
    • Relatórios e processos (conjunto de telas e fluxos)
  • Processos e relatórios podem ser criados ou modificados sem reiniciar o servidor (hot update)

Grade de dados

  • Principal componente de entrada de dados em um sistema de gestão
  • As configurações de campos, validações e regras de negócios são importadas automaticamente do modelo de dados, garantindo a consistência de todos os processos que manipulem a mesma classe de dados

Exemplo de uso


this.interaction('main', function () {
  // Obtém os registros de clientes visíveis para o usuário
  const ds = classes.getCachedDataSet(
    -2007889000,    // Classe de clientes
    session.userKey // Usuário logado na sessão
  );
  // Cria uma grade para exibir registros da classe "Clientes"
  const grid = this.grid('clientes', ds, -2007889000);
  // Escreve a grade na interface
  grid.write();
});

Resultado visual

Grade de clientes

REST Framework

  • Permite o desenvolvimento de APIs HTTP utilizando o padrão REST
  • Utilizado para criar integrações com outros sistemas
  • Rotas definidas por URLs são associadas a objetos controladores responsáveis por tratar a entrada e saída de dados
  • APIs objeto-relacionais simplificam a manipulação dos dados, aplicando as regras de negócio e permissões configuradas

Ambiente de desenvolvimento integrado

  • Editor e depurador de código integrado ao Engine
  • Code completion
  • Forte integração com banco de dados
  • Navegação e edição do sistema de arquivos virtual
  • Extensão para o Visual Studio Code

Atualização

  • Atualizações mensais de versão da plataforma
  • A atualização é enviada para o servidor central e distribuída automaticamente para os demais servidores de aplicação instalados

Mais informações