13 KiB
13 KiB
Workspace Rules
Este workspace utiliza agentes especializados.
Regra principal
- Para tarefas do ecossistema DavinTI Vitruvio em
/davinti, usevitruvio-specialistcomo agente principal sempre. - O
vitruvio-specialistdecide quando delegar para os agentes especializados de banco, mobile, libs, paineis, processos, relatorios e webservices. - Nao carregue nem force contexto de todos os agents ao mesmo tempo; delegue apenas quando o escopo estiver claramente isolado.
Comportamento esperado
- Priorize respostas produzidas pelo agente mais adequado ao dominio da tarefa.
- Se a solicitacao for simples e ja estiver no agente correto, nao faca delegacao desnecessaria.
Guia de Autocomplete – DavinTI / Vitruvio
Visão geral
- Repositório de soluções Vitruvio.
- Arquivos principais: scripts JavaScript (orquestração e widgets Vitruvio), formulários XML (
*_web_desktop,_mobile,.bpmn) e PL/SQL (PRC_VTR_*,VI_VTR_*). - Bancos Oracle usados nas integrações:
vitruvio_producao,superus_producao,davinti_producao, entre outros. - Sempre adicionar comentários nas alterações no padrão:
-- CASO [número] - [usuario] - [Data] - [breve descrição da mudança].- Exemplo:
-- CASO 32715 - Victor da Cruz - 15-09-2024 - Ajuste na query de validação de estoque para considerar reservas.- Use o número do caso para rastrear o histórico da demanda e facilitar consultas futuras, se não existir deixar XXX.
- Exemplo:
JavaScript Rhino (Vitruvio)
- Runtime Rhino: scripts de processo/form usam Rhino JavaScript (ECMAScript 5). Declarar variáveis sempre com
var;consteletnão são suportados. Métodos de array comomap,forEach,filter,reduce,indexOffuncionam normalmente. - Interop Java: Rhino permite instanciar classes Java (
new java.util.ArrayList(),java.lang.String). Utilize quando precisar de coleções Java ou interoperar com APIs da plataforma. - **Compatibilidade: **: Validações de valores de classes e métodos do Java em Rhino com 3 iguais(===) ou 3 diferentes (!==) não funcionam corretamente. Use sempre 2 iguais (==) ou 2 diferentes (!=).
- APIs padrão:
engine,execution,vFormService,sendMessageToVitruvio,db,taskService,vProcessInstanceService. Scripts carregam libs vialibService.loadScript('db'|'javadateutils'|'lib_valor_config'|'processo_util'|'util'|'threads'|'notification'|'email'|...). Sugira helpers recorrentes comodb.queryRow(sql, params),db.query(sql, params).each(function (row) { ... }),db.transaction(function () { ... }),sprDB.executeProcedure(nome, parametros),sprDB.update(sql, params),processoUtil.alterarDescricaoProcesso,threads.execute(function () { ... }),util.isEmptyOrNull,notification.criarNotificacao,sendMessageToVitruvio({ ... }). - Consultas:
db.queryretornanullquando não há linhas; se o objeto existir, já há ao menos um registro e deve ser percorrido comlista.each(...)(não utilizarsize). - Padrões de string/SQL: template strings não funcionam. Monte blocos com concatenação incremental (
var sql = " SELECT ..."; sql += " FROM ..."; sql += " WHERE ...";), respeitando identação com espaços à esquerda (sql += " AND campo = :param";). Para HTML siga o mesmo padrão (var html = ''; html += '<div>...';).reforco_abastecimento.jsmostravar sql = ""; sql += ...;somado adb.queryRow,sprDB.updatee construção deparamsparaexecuteProcedurecom objetos{ input: [{ name: 'ParChaveOrigem', type: 'number', value: ... }], output: [...] }. - Estrutura: organize helpers internos (formatação de data, filtros, builders de HTML) antes das funções expostas (
this.metodo = function () { ... }). Comentários curtos ajudam a documentar regras específicas. UseJSON.stringify/JSON.parsepara guardar estado emtb_state_panelsou variáveis do processo. - Dashboards/Widgets: replique padrões de
function AbastecimentoDashboardDados() {.js(arraysordersColumns,showBySigle, toggles HTML comsendMessageToVitruvio). Respeite colunas padrão (SECOS,CONGELADOS,PESÁVEIS,REFORÇO,FRUTAS_SECAS,PULMAO_DOCA). - React Native (
pricetotem/): único módulo fora do Rhino; quando necessário consulte o código existente emApp.tsxesrc/**, mas mantenha este guia focado em Rhino + Oracle.
WebServices Vitruvio
- Artefatos exportados de
vitruvio.script_ws_endpointficam emVitruvio/WebServices/e seguem runtime Rhino ES5. - Estrutura recorrente:
function WebService() { this.onGet = function (...) { ... }; this.onPost = function (...) { ... }; } module.exports = new WebService();. - Em GET, os parâmetros costumam vir de
params.query; em POST JSON, o padrão mais comum do acervo éJSON.parse(params.requestBody). - Para respostas JSON, prefira helper local como
enviarJsonousendResponse, comres.setStatus(...),res.setContentType('application/json; charset=UTF-8'),res.getWriter().write(JSON.stringify(obj))eflush(). - Para download ou binário, preserve
Content-Type,Content-Disposition,Content-Lengthquando aplicável e streaming viares.getOutputStream(). - Valide entrada antes de acessar filesystem ou banco; ao lidar com nomes de arquivo, bloquear path traversal (
..,/,\\) e caracteres inválidos. - Preserve contrato HTTP existente do endpoint: método, parâmetros, shape do JSON e status codes (
200,400,404,500) não devem mudar sem necessidade explícita.
Relatórios Jasper e iReport 5.6
- Artefatos exportados de
vitruvio.relatorioficam emVitruvio/Relatorios/<Nome do Relatório>/, contendojasper_template.jrxmle, quando existir,form_parametros.xml. form_parametros.xmlé umreport-form, não um formulário comum; pode conter widgets, filtros, scripts CDATA e botões que chamamvReportService.generateReportFile(...).- Preserve compatibilidade com Jasper iReport 5.6: evite migrações de schema, reformatadores agressivos ou mudanças estruturais fora do necessário.
- Nomes e caixa dos parâmetros devem permanecer alinhados entre campos da tela, mapa Java (
params.put(...)), expressões$P{...}, filtros$X{IN,...}e datasets do JRXML. - Parâmetros comuns no acervo:
java.util.Date,java.util.Collection,java.lang.String,java.lang.Long,java.lang.Integerejava.io.InputStreampara logos. - Quando o relatório for disparado por script, preserve os padrões de
Formato.PDF,Formato.XLSX,downloadutil.downloadFileoudownload.openFileNewWindowjá adotados no acervo. - Ajustes em SQL do JRXML devem continuar parametrizados; evite converter filtros do Jasper para concatenação manual dentro do template.
XML (Formulários Vitruvio)
- Sempre declarar namespace
xmlns="http://www.davinti.com.br/vitruvio/form"e schema location oficial na raiz<forms>. - Estrutura típica:
<descriptorScript>(funçãos()comthis.getDescriptorevar script = new s();),<form formKey="...">,<name>,<initScript>,<buttons>,<validators>. Scripts internos usam<![CDATA[ ... ]]>e apenasvar. - Manipule campos com
engine.getField('campo').setValue,engine.getLabel('id').setValue,engine.getWidget('id'). Configure globais viaengine.setGlobalVariable('nome', funcao);e useexecution.getVariable/ setVariablepara compartilhar dados. - Validators seguem padrão
function f() { this.isValid = function () { ... return true; }; } var validator = new f();. Usedb.transaction(function () { ... this.update(sql, params); });para inserts/updates, validando resultado e retornando mensagens string quando houver erro. - Tags recorrentes:
<grid columns="">para layout,<panel>,<input type="text" ...>,<combo>,<label id="lblTitulo">,<button>; reutilize IDs existentes (parComprador,prazo,pedidosGerados). - Em
<bind>, todo<parameter>deve terdefaultValuesempre preenchido (inclusive parastring,numberedate) para evitar falhas de binding em runtime. - Construa SQL e HTML dentro de scripts com concatenação incremental (
var sql = " SELECT ..."; sql += ...;) e utilize libs carregadas (var banco = new db('superus_producao');,var data = libService.loadScript('javadateutils');). - Ao gerar scripts dentro das tags XML, siga rigorosamente os padrões de JavaScript Rhino descritos na seção anterior. Como a estrutura é integrada ao Java, priorize scripts pequenos, legíveis e objetivos, evitando validações redundantes. Não é necessário validar a existência de campos ao utilizar engine.getField(), pois campos presentes em tela sempre serão retornados. Da mesma forma, getValue() retorna null quando o campo não está preenchido, permitindo a definição de valores padrão diretamente com o operador ||.
PL/SQL (Oracle)
- Procedures e functions seguem prefixo
PRC_VTR_/FNC_com parâmetros nomeados. Cabeçalhos usamCREATE OR REPLACE PROCEDUREe declaraçõesNUMBER(14,4). - Sempre trate exceções com
EXCEPTION WHEN NO_DATA_FOUND THEN .... Use cursores explícitos apenas quando necessário; preferirSELECT ... INTOcomNVLeCASE. - Funções auxiliares internas (
FNC_MEDIA_REGISTROS_PDV,FNC_QTD_TIPO_EMB) devem ser definidas no corpo da procedure principal, replicando padrões do arquivoPRC_VTR_CONTROLE_SUGESTAO.sql. - Use schemas explícitos (
VITRUVIO.TB_ABAST_AGRUP_DISP_PANEL,RESTaurante.SOCIN_DETALHES_CUPOM). ParâmetrosOUTdevem ser preenchidos antes de commit. - Comentários com histórico (
-- Caso 32715 - Victor da Cruz) são comuns; mantenha o formato ao adicionar novos registros.
Estrutura de diretórios (referência rápida)
Reforço abastecimento/: XML e JS de reforço promocional; integra comreforco_abastecimentoBPMN.Abastecimento - Ressuprimentos/: layouts ereforco_abastecimento.js; subpastatermo de aceite/guarda assets PNG para documentação.PCP - Grill - 43217/ePCP DRE - Perdas - 44371/: procedures Oracle (PRC_VTR_PCP_*), relatórios Jasper (.jrxml) e scripts de planejamento.Recebimento - Tolerância - 44857/:recebimento_mercadorias.jse XML mobile (Recebimento_de_Mercadorias_1.05_mobile_alt.xml).Importação ...pastas: fluxos BPMN e arquivos XML (Importa_o_1.25_web_desktop*.xml) com scripts de validação.Concluidos/: histórico de demandas; usar como referência de código legado ao construir novas features.Vitruvio/: pasta raiz para artefatos exportados e organizados por tipo.Vitruvio/Libs/: scripts.jsexportados devitruvio.script_lib; cada subpasta pode ser carregada em runtime comlibService.loadScript('sigla'), usando a sigla (nome da pasta) em minúsculo para reaproveitar funções nos scripts.Vitruvio/WebServices/: endpoints.jsexportados devitruvio.script_ws_endpoint; ao revisar integrações REST públicas, considere esta pasta como parte da base exportada.Vitruvio/Paineis/: painéis XML exportados devitruvio.painel.Vitruvio/Processos/: processos exportados devitruvio.processo_versao(BPMN e formulários web/mobile).Vitruvio/Relatorios/: relatórios exportados devitruvio.relatorio; cada relatório fica em uma subpasta própria contendojasper_template.jrxmle, quando existir,form_parametros.xml.Vitruvio/Documentacao/: documentação de referência para contexto com custo reduzido.Vitruvio/Documentação/Componentes/: documentação base por componente em arquivos.ts.
Documentação operacional (prioridade de contexto)
- Priorize consultas aos arquivos em
Vitruvio/Documentação/antes de sugerir implementações novas. - Fontes principais:
Vitruvio/Documentação/eventos-vitruvio.mdVitruvio/Documentação/queries-padroes.mdVitruvio/Documentação/Componentes/*.ts
- Objetivo: manter respostas consistentes, curtas e com menor custo de contexto.
- Ao identificar padrão novo validado em produção, atualize a documentação correspondente.
Convenções gerais
- Datas: manipular com
libService.loadScript('javadateutils')e formatarDD/MM/YYYY(TO_DATE(:data, 'DD/MM/YYYY')). - HTML embutido: estilização inline simples; evite bibliotecas externas. Use classes utilitárias (
.table-scroll,.meu-botao). - Nomes de variáveis: seguir português/portuguese (e.g.,
quantidade,comprador,lojasSelecionadas). - Bancos múltiplos: quando usar duas conexões, instanciar com nomes distintos (
var vitruvio = new db('vitruvio_producao'); var superus = new db('superus_producao');). - Dados persistidos: estados salvos em
tb_state_panels,PEDIDOS_VITRUVIO,PROCESSO_INSTANCIAdevem ser serializados comJSON.stringifye recuperar viaJSON.parse.
Como usar
- Ao pedir sugestões para arquivos
.js, priorizar padrões descritos acima e tabelas mencionadas. - Para formulários
.xml, deve montar skeletons completos com blocosdescriptorScript,form,initScript,validatorse scriptsCDATAembutidos seguindo os exemplos citados. - Em
.sql, manter formato Oracle clássico, com identação de 3 espaços e palavras-chave em maiúsculas; reutilizar nomes de colunas/tabelas existentes. - Quando houver dúvida sobre componente/evento/query, usar primeiro os guias de
Vitruvio/Documentacao/. - Na exportação unificada da base do Vitruvio, considere sempre os cinco blocos principais do ZIP:
Paineis/,Libs/,WebServices/,Processos/eRelatorios/; qualquer script de sincronização local deve preservar todos eles.