🗄️ Gestão Revolucionária de Cilindros: QR Code, ANVISA e Rastreabilidade para Gases Medicinais, Industriais e GLP.

Otimize a gestão de cilindros de gases medicinais, industriais e GLP com o Ondevou Gases. Nossa solução oferece rastreabilidade completa por QR Code, controle de validade, conformidade com a ANVISA e controle total do ciclo de vida dos cilindros, aumentando a eficiência, reduzindo custos e garantindo a segurança de seus processos.

📋 28 colunas 🔗 11 relacionamentos 🎮 8 controles 👁️ view_cilindros 📝 1 com putdata 📱 QR Code 🔑 PRIMARY KEY 🎮 1 ações externas 📱 GetCollector

📋 Estrutura da Tabela

A tabela cilindros possui 28 colunas.

🔑 Id PRIMARY KEY
🔑 PRIMARY KEY🔒 Somente leitura💾 Grava🔗 getdata📋 Auditoria
Campo Tabela id
Campo VIEW / Exibido id_cilindro 🔹 Alias na VIEW: id_cilindro
Tipo number (readonly - PRIMARY KEY)
Data Table cilindros,auditor_cilindro 📋 Grava em auditoria
Descrição

Campo id

🔑 PRIMARY KEY

Campo na tabela: id

Alias na VIEW: id_cilindro

Readonly: ✅ Gerado automaticamente pelo sistema

Grava em auditoria: ✅ Sim

Getdata: ✅ Busca dados do registro

Launch: ✅ Abre documento relacionado

Formsearch: ✅ Permite busca avançada

Coleta QR Code: ✅ Permite leitura via QR Code

📱 qrcode: Gerar QR Code Documento
📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou id
  • Alias OndeVou id_cilindro
  • Tabela OndeVou cilindros,auditor_cilindro
🔗 Getdata
  • {
      "view": "view_cilindros",
      "data": "view_cilindros",
      "text-empty-search": "sim",
      "data-update-full-fields": "sim",
      "campo-data-id": "id_cilindro",
      "campo-data-value-input": "id_cilindro,referencia_cilindro,nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade,nome_situacao,nome_localizacao",
      "campo-data-input-select-view": "id_cilindro,referencia_cilindro,nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade,nome_situacao,nome_localizacao",
      "query": {
        "select": "* from view_cilindros",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(ativo is null) and (unaccent(LOWER(concat(id_cilindro,` `,referencia_cilindro,` `,nome_tipo,` `,nome_aplicacao,` `,nome_capacidade,` `,nome_unidade_capacidade))) ilike `%",
              "right": "%`) and (participante = 1)"
            }
          }
        },
        "order": "id_cilindro desc"
      }
    }
🚀 Launch
  • {
      "type": "qrcode",
      "menu": {
        "data-id": "28"
      },
      "formsearch": {
        "id_cilindro": "id_cilindro"
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
🎮 Controls Acao
  • {
      "qrcode": {
        "acao": "getQRcode",
        "messagem": "Gerar QR Code"
      }
    }
  • Alias: id_cilindro
  • Tabelas: cilindros, auditor_cilindro ✅
  • Launch: ✓
  • ControlsAcao: ✓
  • FormSearch: ✓
  • 🔑 PRIMARY KEY
  • VIEW: id_cilindro
  • 📋 Auditoria
  • 🔗 Getdata
  • 🚀 Launch
  • 📋 FormSearch
  • 📱 Coleta QR Code
📋 qrcode
🔒 Somente leitura📋 Somente view📱 QRCode: Cilindro
Campo Tabela qrcode
Campo VIEW / Exibido qrcode ⚠️ (somente view)
Tipo canvas (QR Code: Cilindro)
Data Table qrcode
Descrição

Campo qrcode

📱 QR Code

Tipo: Cilindro (cl)

Texto: Campos referencia

Formato: ondevou_cl_{participante}_{id}

Uso: Identificação física do registro. Clique para imprimir.

Geração: Automática ao salvar o registro. Biblioteca QRious.

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados text
  • Tipo de input canvas
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou qrcode
  • Tabela OndeVou qrcode
  • Tabelas: qrcode (só view)
  • QRCode: Cilindro
  • QRCode Texto: referencia
📋 Data hora inclusão
🔒 Somente leitura📋 Somente view
Campo Tabela data_hora_inclusao_cilindro
Campo VIEW / Exibido data_hora_inclusao_cilindro ⚠️ (somente view)
Tipo date
Data Table view_cilindros
Descrição

Campo data hora inclusão

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados date
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou data_hora_inclusao_cilindro
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
📋 Participante
✅ Obrigatório🔒 Somente leitura💾 Grava
Campo Tabela participante
Campo VIEW / Exibido participante
Tipo text
Data Table cilindros,auditor_cilindro
Descrição

Campo participante

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados text
Validacao
  • Obrigatório ✅ Sim
  • Somente leitura 🔒 Sim
⚙️ Comportamento
  • Valor padrão 1
📊 Dados
  • Campo OndeVou participante
  • Tabela OndeVou cilindros,auditor_cilindro
  • Tabelas: cilindros, auditor_cilindro ✅
  • Value: 1
📋 Ativo
📋 Somente view
Campo Tabela ativo
Campo VIEW / Exibido ativo ⚠️ (somente view)
Tipo text
Data Table view_cilindros
Descrição

Campo ativo

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados text
📊 Dados
  • Campo OndeVou ativo
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
📋 Validade
💾 Grava
Campo Tabela data_validade
Campo VIEW / Exibido data_validade
Tipo date
Data Table cilindros
Descrição

Campo validade

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados date
  • Tipo de input date
📊 Dados
  • Campo OndeVou data_validade
  • Tabela OndeVou cilindros
  • Tabelas: cilindros ✅
📋 Referência
✅ Obrigatório💾 Grava
Campo Tabela referencia
Campo VIEW / Exibido referencia_cilindro
Tipo text
Data Table cilindros
Descrição

Caso seja de terceiro pode colocar CL-TER

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados text
  • Placeholder Caso seja de terceiro pode colocar CL-TER
Validacao
  • Obrigatório ✅ Sim
📊 Dados
  • Campo OndeVou referencia
  • Alias OndeVou referencia_cilindro
  • Tabela OndeVou cilindros
🔍 Formsearch
  • {
      "required": ""
    }
  • Alias: referencia_cilindro
  • Tabelas: cilindros ✅
  • FormSearch: ✓
  • Placeholder: Caso seja de terceiro pode colocar CL-TER
📋 Descrição
✅ Obrigatório🔒 Somente leitura👁️ Oculto💾 Grava
Campo Tabela descricao
Campo VIEW / Exibido descricao_cilindro
Tipo text
Data Table cilindros
Descrição

Gere a descrição automaticamente

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados text
  • Placeholder Gere a descrição automaticamente
  • Label adicional <a href="javascript:void(0);" title="Criar descrição automática" onclick="setInputValueDescricaoCilindro(this);"><i class="fa fa-link" aria-hidden="true"></i></a> 🔗 HTML
Validacao
  • Obrigatório ✅ Sim
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou descricao
  • Alias OndeVou descricao_cilindro
  • Tabela OndeVou cilindros
  • Alias: descricao_cilindro
  • Tabelas: cilindros ✅
  • Hidden: ✓ (dados ocultos)
  • AfterLabel: ✓
  • Placeholder: Gere a descrição automaticamente
📋 Produto
🔒 Somente leitura📋 Somente view
Campo Tabela
Campo VIEW / Exibido nome_tipo + nome_aplicacao + nome_capacidade + nome_unidade_capacidade
Tipo text (concatenação)
Data Table view_cilindros
Descrição

Campo produto

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados text
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou nome_tipo,nome_aplicacao,nome_capacidade,nome_u...
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
📋 Situação
✅ Obrigatório🔒 Somente leitura💾 Grava🔗 getdata
Campo Tabela id_situacao
Campo VIEW / Exibido nome_situacao (ID: id_situacao)
Tipo number (getdata)
Data Table cilindros,auditor_cilindro
Descrição

Campo situação

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Obrigatório ✅ Sim
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou nome_situacao
  • ID OndeVou id_situacao
  • ID Default OndeVou 2
  • Tabela OndeVou cilindros,auditor_cilindro
🔗 Getdata
  • {
      "view": "view_cilindros_situacao",
      "data": "view_cilindros_situacao",
      "data-update-full-fields": "sim",
      "text-empty-search": "sim",
      "campo-data-id": "id_situacao",
      "campo-data-value-input": "nome_situacao",
      "campo-data-input-select-view": "nome_situacao",
      "query": {
        "select": "* from view_cilindros_situacao",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(unaccent(LOWER(concat(id_situacao,` `,nome_situacao))) ilike `%",
              "right": "%`)"
            }
          }
        }
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
  • ID: id_situacao
  • Tabelas: cilindros, auditor_cilindro ✅
  • Default: 2
  • FormSearch: ✓
📋 Localização
✅ Obrigatório🔒 Somente leitura💾 Grava🔗 getdata
Campo Tabela id_localizacao
Campo VIEW / Exibido nome_localizacao (ID: id_localizacao)
Tipo number (getdata)
Data Table cilindros,auditor_cilindro
Descrição

Campo localização

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Obrigatório ✅ Sim
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou nome_localizacao
  • ID OndeVou id_localizacao
  • ID Default OndeVou 1
  • Tabela OndeVou cilindros,auditor_cilindro
🔗 Getdata
  • {
      "view": "view_cilindros_localizacao",
      "data": "view_cilindros_localizacao",
      "text-empty-search": "sim",
      "data-update-full-fields": "sim",
      "campo-data-id": "id_localizacao",
      "campo-data-value-input": "nome_localizacao",
      "campo-data-input-select-view": "nome_localizacao",
      "query": {
        "select": "* from view_cilindros_localizacao",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(unaccent(LOWER(concat(id_localizacao,` `,nome_localizacao))) ilike `%",
              "right": "%`)"
            }
          }
        }
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
  • ID: id_localizacao
  • Tabelas: cilindros, auditor_cilindro ✅
  • Default: 1
  • FormSearch: ✓
📋 Endereço
💾 Grava🔗 getdata
Campo Tabela id_endereco
Campo VIEW / Exibido nome_endereco (ID: id_endereco)
Tipo number (getdata)
Data Table cilindros
Descrição

Campo endereço

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
📊 Dados
  • Campo OndeVou nome_endereco
  • ID OndeVou id_endereco
  • Tabela OndeVou cilindros
🔗 Getdata
  • {
      "view": "view_cilindros_enderecos",
      "data": "view_cilindros_enderecos",
      "text-empty-search": "sim",
      "campo-data-id": "id_endereco",
      "campo-data-value-input": "id_endereco,referencia_endereco,nome_endereco",
      "campo-data-input-select-view": "id_endereco,referencia_endereco,nome_endereco",
      "query": {
        "select": "* from view_cilindros_enderecos",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(unaccent(LOWER(concat(id_endereco,` `,referencia_endereco,` `,nome_endereco))) ilike `%",
              "right": "%`) and (participante=`1`)"
            }
          }
        }
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
  • ID: id_endereco
  • Tabelas: cilindros ✅
  • FormSearch: ✓
📋 Lote produção
🔒 Somente leitura📋 Somente view
Campo Tabela id_lote_producao
Campo VIEW / Exibido id_lote_producao ⚠️ (somente view)
Tipo number
Data Table view_cilindros
Descrição

Campo lote produção

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou id_lote_producao
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
📋 Descrição do lote produção
🔒 Somente leitura👁️ Oculto📋 Somente view
Campo Tabela nome_lote_producao
Campo VIEW / Exibido nome_lote_producao ⚠️ (somente view)
Tipo text
Data Table view_cilindros
Descrição

Campo descrição do lote produção

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados text
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou nome_lote_producao
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
  • Hidden: ✓ (dados ocultos)
📋 Último enchimento
🔒 Somente leitura📋 Somente view
Campo Tabela data_hora_inclusao_enchimento
Campo VIEW / Exibido data_hora_inclusao_enchimento ⚠️ (somente view)
Tipo date
Data Table view_cilindros
Descrição

Campo último enchimento

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados date
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou data_hora_inclusao_enchimento
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
📋 Fabricante
✅ Obrigatório💾 Grava🔗 getdata📝 putdata
Campo Tabela id_fabricante
Campo VIEW / Exibido nome_fabricante (ID: id_fabricante)
Tipo number (getdata)
Data Table cilindros
Descrição

Campo fabricante

Putdata
{
  "tabela": "cilindros_fabricantes",
  "unique": "nome",
  "fields": {
    "nome": "nome_fabricante"
  }
}
📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Obrigatório ✅ Sim
📊 Dados
  • Campo OndeVou nome_fabricante
  • ID OndeVou id_fabricante
  • Tabela OndeVou cilindros
🔗 Getdata
  • {
      "view": "view_cilindros_fabricantes",
      "data": "view_cilindros_fabricantes",
      "text-empty-search": "sim",
      "campo-data-id": "id_fabricante",
      "campo-data-value-input": "nome_fabricante",
      "campo-data-input-select-view": "nome_fabricante",
      "query": {
        "select": "* from view_cilindros_fabricantes",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(unaccent(LOWER(concat(id_fabricante,` `,nome_fabricante))) ilike `%",
              "right": "%`)"
            }
          }
        }
      }
    }
📝 Putdata
  • {
      "tabela": "cilindros_fabricantes",
      "unique": "nome",
      "fields": {
        "nome": "nome_fabricante"
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
  • ID: id_fabricante
  • Tabelas: cilindros ✅
  • FormSearch: ✓
📋 Propriedade
✅ Obrigatório💾 Grava🔗 getdata
Campo Tabela id_propriedade
Campo VIEW / Exibido nome_propriedade (ID: id_propriedade)
Tipo number (getdata)
Data Table cilindros
Descrição

Campo propriedade

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Obrigatório ✅ Sim
📊 Dados
  • Campo OndeVou nome_propriedade
  • ID OndeVou id_propriedade
  • Tabela OndeVou cilindros
🔗 Getdata
  • {
      "view": "view_cilindros_propriedades",
      "data": "view_cilindros_propriedades",
      "text-empty-search": "sim",
      "campo-data-id": "id_propriedade",
      "campo-data-value-input": "nome_propriedade",
      "campo-data-input-select-view": "nome_propriedade",
      "query": {
        "select": "* from view_cilindros_propriedades",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(unaccent(LOWER(concat(id_propriedade,` `,nome_propriedade))) ilike `%",
              "right": "%`)"
            }
          }
        }
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
  • ID: id_propriedade
  • Tabelas: cilindros ✅
  • FormSearch: ✓
📋 Proprietário
💾 Grava🔗 getdata
Campo Tabela id_participante
Campo VIEW / Exibido razao_social_cliente (ID: id_participante_cliente)
Tipo number (getdata)
Data Table cilindros
Descrição

Campo proprietário

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
📊 Dados
  • Campo OndeVou razao_social_cliente
  • ID OndeVou id_participante
  • ID Alias OndeVou id_participante_cliente
  • Tabela OndeVou cilindros
🔗 Getdata
  • {
      "view": "view_participantes_privado",
      "data": "view_participantes_privado",
      "campo-data-id": "id_participante",
      "campo-data-value-input": "id_participante,razao_social",
      "campo-data-input-select-view": "id_participante,codigo_erplinux_cliente,codigo_erplinux_fornecedor,razao_social,nome_fantasia,cnpj,cpf,cep,cep_erplinux,nome_bairro,nome_cidade,sigla_uf",
      "query": {
        "select": "* from view_participantes_privado",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(unaccent(LOWER(concat(id_participante,` `,codigo_erplinux_cliente,` `,codigo_erplinux_fornecedor,` `,razao_social,` `,nome_fantasia,` `,cnpj,` `,cpf,` `,cep,` `,cep_erplinux,` `,nome_bairro,` `,nome_cidade,` `,sigla_uf))) ilike `%",
              "right": "%`) and (participante=`1`)"
            }
          }
        }
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
  • ID: id_participante
  • ID VIEW: id_participante_cliente
  • Tabelas: cilindros ✅
  • FormSearch: ✓
📋 Data
🔒 Somente leitura👁️ Oculto📋 Somente view
Campo Tabela data_inclusao_cilindro
Campo VIEW / Exibido data_inclusao_cilindro ⚠️ (somente view)
Tipo date
Data Table view_cilindros
Descrição

Campo data

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados date
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou data_inclusao_cilindro
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
  • Hidden: ✓ (dados ocultos)
📋 Cheio
🔒 Somente leitura👁️ Oculto📋 Somente view
Campo Tabela cheio
Campo VIEW / Exibido cheio ⚠️ (somente view)
Tipo number
Data Table view_cilindros
Descrição

Campo cheio

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou cheio
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
  • Hidden: ✓ (dados ocultos)
📋 Vazio
🔒 Somente leitura👁️ Oculto📋 Somente view
Campo Tabela vazio
Campo VIEW / Exibido vazio ⚠️ (somente view)
Tipo number
Data Table view_cilindros
Descrição

Campo vazio

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou vazio
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
  • Hidden: ✓ (dados ocultos)
📋 Tipo
✅ Obrigatório👁️ Oculto💾 Grava🔗 getdata
Campo Tabela id_tipo
Campo VIEW / Exibido nome_tipo (ID: id_tipo)
Tipo number (getdata)
Data Table cilindros
Descrição

Campo tipo

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Obrigatório ✅ Sim
📊 Dados
  • Campo OndeVou nome_tipo
  • ID OndeVou id_tipo
  • Tabela OndeVou cilindros
🔗 Getdata
  • {
      "view": "view_cilindros_tipos",
      "data": "view_cilindros_tipos",
      "text-empty-search": "sim",
      "campo-data-id": "id_tipo",
      "campo-data-value-input": "nome_tipo",
      "campo-data-input-select-view": "nome_tipo",
      "query": {
        "select": "* from view_cilindros_tipos",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(unaccent(LOWER(concat(id_tipo,` `,nome_tipo))) ilike `%",
              "right": "%`)"
            }
          }
        }
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
  • ID: id_tipo
  • Tabelas: cilindros ✅
  • Hidden: ✓ (dados ocultos)
  • FormSearch: ✓
📋 Aplicação
✅ Obrigatório👁️ Oculto💾 Grava🔗 getdata
Campo Tabela id_aplicacao
Campo VIEW / Exibido nome_aplicacao (ID: id_aplicacao)
Tipo number (getdata)
Data Table cilindros
Descrição

Campo aplicação

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Obrigatório ✅ Sim
📊 Dados
  • Campo OndeVou nome_aplicacao
  • ID OndeVou id_aplicacao
  • Tabela OndeVou cilindros
🔗 Getdata
  • {
      "view": "view_cilindros_aplicacoes",
      "data": "view_cilindros_aplicacoes",
      "text-empty-search": "sim",
      "campo-data-id": "id_aplicacao",
      "campo-data-value-input": "nome_aplicacao",
      "campo-data-input-select-view": "nome_aplicacao",
      "query": {
        "select": "* from view_cilindros_aplicacoes",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(unaccent(LOWER(concat(id_aplicacao,` `,nome_aplicacao))) ilike `%",
              "right": "%`)"
            }
          }
        }
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
  • ID: id_aplicacao
  • Tabelas: cilindros ✅
  • Hidden: ✓ (dados ocultos)
  • FormSearch: ✓
📋 Capacidade
✅ Obrigatório👁️ Oculto💾 Grava🔗 getdata
Campo Tabela id_capacidade
Campo VIEW / Exibido nome_capacidade (ID: id_capacidade)
Tipo number (getdata)
Data Table cilindros
Descrição

Campo capacidade

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Obrigatório ✅ Sim
📊 Dados
  • Campo OndeVou nome_capacidade
  • ID OndeVou id_capacidade
  • Tabela OndeVou cilindros
🔗 Getdata
  • {
      "view": "view_cilindros_capacidades",
      "data": "view_cilindros_capacidades",
      "text-empty-search": "sim",
      "campo-data-id": "id_capacidade",
      "campo-data-value-input": "nome_capacidade",
      "campo-data-input-select-view": "nome_capacidade",
      "query": {
        "select": "* from view_cilindros_capacidades",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(unaccent(LOWER(concat(id_capacidade,` `,nome_capacidade))) ilike `%",
              "right": "%`)"
            }
          }
        }
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
  • ID: id_capacidade
  • Tabelas: cilindros ✅
  • Hidden: ✓ (dados ocultos)
  • FormSearch: ✓
📋 Unidade
✅ Obrigatório👁️ Oculto💾 Grava🔗 getdata
Campo Tabela id_unidade_capacidade
Campo VIEW / Exibido nome_unidade_capacidade (ID: id_unidade_capacidade)
Tipo number (getdata)
Data Table cilindros
Descrição

Campo unidade

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados number
Validacao
  • Obrigatório ✅ Sim
📊 Dados
  • Campo OndeVou nome_unidade_capacidade
  • ID OndeVou id_unidade_capacidade
  • Tabela OndeVou cilindros
🔗 Getdata
  • {
      "view": "view_cilindros_unidade_capacidade",
      "data": "view_cilindros_unidade_capacidade",
      "text-empty-search": "sim",
      "campo-data-id": "id_unidade_capacidade",
      "campo-data-value-input": "nome_unidade_capacidade",
      "campo-data-input-select-view": "nome_unidade_capacidade",
      "query": {
        "select": "* from view_cilindros_unidade_capacidade",
        "where": {
          "and": {
            "texto_digitado": {
              "left": "(unaccent(LOWER(concat(id_unidade_capacidade,` `,nome_unidade_capacidade))) ilike `%",
              "right": "%`)"
            }
          }
        }
      }
    }
🔍 Formsearch
  • {
      "required": ""
    }
  • ID: id_unidade_capacidade
  • Tabelas: cilindros ✅
  • Hidden: ✓ (dados ocultos)
  • FormSearch: ✓
📋 Tipo, aplicação e capacidade
🔒 Somente leitura👁️ Oculto📋 Somente view
Campo Tabela
Campo VIEW / Exibido nome_tipo + nome_aplicacao + nome_capacidade
Tipo text (concatenação)
Data Table view_cilindros
Descrição

Campo tipo, aplicação e capacidade

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados text
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou nome_tipo,nome_aplicacao,nome_capacidade
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
  • Hidden: ✓ (dados ocultos)
📋 Tipo, aplicação e unidade
🔒 Somente leitura👁️ Oculto📋 Somente view
Campo Tabela
Campo VIEW / Exibido nome_tipo + nome_aplicacao + nome_unidade_capacidade
Tipo text (concatenação)
Data Table view_cilindros
Descrição

Campo tipo, aplicação e unidade

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados text
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou nome_tipo,nome_aplicacao,nome_unidade_capacidade
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
  • Hidden: ✓ (dados ocultos)
📋 Tipo e aplicação
🔒 Somente leitura👁️ Oculto📋 Somente view
Campo Tabela
Campo VIEW / Exibido nome_tipo + nome_aplicacao
Tipo text (concatenação)
Data Table view_cilindros
Descrição

Campo tipo e aplicação

📋 Todos os Atributos
🎨 Formatacao
  • Tipo de dados text
Validacao
  • Somente leitura 🔒 Sim
📊 Dados
  • Campo OndeVou nome_tipo,nome_aplicacao
  • Tabela OndeVou view_cilindros
  • Tabelas: view_cilindros (só view)
  • Hidden: ✓ (dados ocultos)
📌 Legenda: 🔑 PRIMARY KEY ✅ Obrigatório 🔒 Somente leitura 👁️ Oculto 💾 Grava 📋 Somente view 🔗 getdata 📝 putdata 🔢 AutoInc 📱 QR Code 📋 Auditoria 📱 GetCollector

🔗 Relacionamentos

Tabelas relacionadas via getdata.

cilindros · Principal: Id 📄
cilindros_situacao · Auxiliar: Situação 📄
cilindros_localizacao · Auxiliar: Localização 📄
cilindros_enderecos · Auxiliar: Endereço 📄
cilindros_fabricantes · Auxiliar: Fabricante 📄
cilindros_propriedades · Auxiliar: Propriedade 📄
participantes_privado · Auxiliar: Proprietário 📄
cilindros_tipos · Auxiliar: Tipo 📄
cilindros_aplicacoes · Auxiliar: Aplicação 📄
cilindros_capacidades · Auxiliar: Capacidade 📄
cilindros_unidade_capacidade · Auxiliar: Unidade 📄

🔍 Filtros (formsearch)

Campos disponíveis para filtragem na busca.

Apenas meus cilindros checkbox
Data validade inicial date
Data validade final date
Data Inicial date
Data Final date

🎮 Controles Disponíveis

Ações que o usuário pode realizar na tabela.

📂 Controle
🔘 Info info 🔘 Add add 🔘 Copy copy 🔘 Edit edit 💾 Salvar save 🔘 Delete delete 🔘 Remove remove
📂 Documento
📱 Gerar QR Code qrcode

👁️ View Associada

Nome: view_cilindros

📱 GetCollector - Coleta de Dados

A tabela cilindros possui suporte a coleta de dados via QR Code através do sistema GetCollector.

Configuração (JSON expandido)

{
  "qrcode": {
    "qrcode-type": [
      "cl"
    ]
  },
  "table-setups": {
    "search": "nao",
    "html": "nao",
    "controls": [
      "info",
      "remove"
    ]
  }
}

Tipos de QR Code

  • cl: Cilindro

Detalhes

  • Table Add: addTableColetar_dados_leituras

📱 QR Code

A tabela cilindros possui geração automática de QR Code.

Configuração

'qrcode': {
    'input': {
        'readonly': 'readonly',
        'type': 'canvas',
        'qrcode-type': 'cl',
        'qrcode-text-fields': 'referencia',
        'data-type-ondevou': 'text',
        'data-field-ondevou': 'qrcode',
        'data-table-ondevou': 'qrcode'
    }
}

Como funciona

  • Geração automática: Ao salvar o registro
  • Formato: ondevou_cl_{participante}_{id}
  • Uso: Identificação física do registro

🔑 PRIMARY KEY - Campo Id

O campo Id é a chave primária da tabela cilindros.

Configuração

'Id': {
    'input': {
        'readonly': 'readonly',
        'data-type-ondevou': 'number',
        'data-field-ondevou': 'id',
        "data-field-alias-ondevou": "id_cilindro",
        'data-table-ondevou': 'cilindros,auditor_cilindro'
    }
}

Comportamento

  • 🔒 Readonly: Campo não editável
  • 📊 Tipo: number
  • 🔹 Alias na VIEW: id_cilindro
  • 📋 Auditoria: Grava em cilindros,auditor_cilindro
  • 🔗 Getdata: Busca dados do registro
  • 🚀 Launch: Abre documento relacionado

🎮 Controls-Ação

📂 Documento
qrcode: Gerar QR Code getQRcode

💾 JSON da Tabela

Estrutura completa em JSON para integração com APIs e IAs.

code Clique para ver o JSON completo 81 KB
{
  "table-id": "cilindros",
  "data-table-ondevou": "cilindros",
  "data-table-auditor": "auditor_cilindro",
  "data-field-auditor": "id_cilindro",
  "data-table-getdata": "sim",
  "data-table-update": "nao",
  "readonly": "sim",
  "table-class": "highlight",
  "controls": [
    "info",
    "add",
    "copy",
    "edit",
    "save",
    "qrcode",
    "delete",
    "remove"
  ],
  "html": {
    "div": {
      "before": "",
      "after": ""
    }
  },
  "entidade": {
    "page": "cilindro",
    "title": "Cilindro",
    "table": "cilindros",
    "campo_id": "id_cilindro",
    "view": "view_cilindros",
    "where_post": "",
    "function": "getCilindroQrCode",
    "ogTitle": "Gestão Revolucionária de Cilindros: QR Code, ANVISA e Rastreabilidade para Gases Medicinais, Industriais e GLP.",
    "ogDescription": "Otimize a gestão de cilindros de gases medicinais, industriais e GLP com o Ondevou Gases. Nossa solução oferece rastreabilidade completa por QR Code, controle de validade, conformidade com a ANVISA e controle total do ciclo de vida dos cilindros, aumentando a eficiência, reduzindo custos e garantindo a segurança de seus processos.",
    "ogImage": "",
    "ogUrl": "https://ondevou.com/cilindro",
    "ogKeywords": "cilindro, gases medicinais, gases industriais, GLP, rastreabilidade, QR Code, controle de validade, ANVISA, gestão de cilindros, ondevou, onde, onde ir, software",
    "sobre": {},
    "posts": {
      "1": {
        "id_post": "1",
        "nome_rotina": "Sobre OndeVou Cilindros",
        "descricao": "OndeVou Cilindros é uma solução online para o controle físico, rastreabilidade e validade de cilindros de gases medicinais, industriais e GLP. Com foco em garantir a segurança, evitar perdas e atender às exigências da ANVISA, nosso sistema permite registrar e monitorar todas as movimentações dos cilindros ao longo do seu ciclo de vida.",
        "id_rotina": "",
        "id_membro": "",
        "nome_membro": "Firmino Moreira Gusmão",
        "razao_social": "ONDEVOU.COM TECNOLOGIA LTDA",
        "cnpj": "17.058.605/0001-36",
        "razao_social_cliente": "",
        "nome_fantasia_cliente": "",
        "tabela_origem": "",
        "id_origem": "",
        "data_criacao": 1786541044834,
        "link_post": {
          "title": "Saiba mais sobre o OndeVou Cilindros",
          "url": "plataforma/produto/cilindros",
          "onclick": "navClose();startMenu(this);return false;",
          "menu": "493"
        }
      }
    }
  },
  "routines": {
    "getMarker": "getCilindroQrCode",
    "summary": "getResumoCilindros",
    "add": "25",
    "edit": "26"
  },
  "pdf": {
    "format": "a3",
    "orientation": "landscape",
    "columns-remove": [
      "qrcode",
      "Participante"
    ]
  },
  "search": {
    "id_search_cilindro": {
      "data-type-ondevou": "number",
      "texto_label": "Cilindro",
      "data-field-ondevou": "id_search_cilindro",
      "data-table-ondevou": "view_cilindros",
      "getcollector": "{\"qrcode\":\"{\\\"qrcode-type\\\":[\\\"cl\\\"]}\",\"table-setups\":\"{\\\"search\\\":\\\"nao\\\",\\\"html\\\":\\\"nao\\\",\\\"controls\\\":[\\\"info\\\",\\\"remove\\\"]}\"}",
      "getdata": "{\"view\":\"view_cilindros\",\"data\":\"view_cilindros\",\"text-empty-search\":\"sim\",\"data-update-full-fields\":\"sim\",\"campo-data-id\":\"id_cilindro\",\"campo-data-value-input\":\"id_cilindro,referencia_cilindro,nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade,nome_situacao,nome_localizacao\",\"campo-data-input-select-view\":\"id_cilindro,referencia_cilindro,nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade,nome_situacao,nome_localizacao\",\"query\":{\"select\":\"* from view_cilindros\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(ativo is null) and (unaccent(LOWER(concat(id_cilindro,` `,referencia_cilindro,` `,nome_tipo,` `,nome_aplicacao,` `,nome_capacidade,` `,nome_unidade_capacidade))) ilike `%\",\"right\":\"%`) and (participante = 1)\"}}},\"order\":\"id_cilindro desc\"}}"
    }
  },
  "headers": {
    "Id": {
      "width": "70px"
    },
    "qrcode": {
      "width": "100px",
      "align": "left",
      "class": "qrcode"
    },
    "Data hora inclusão": {
      "width": "100px"
    },
    "Participante": {
      "width": "100px"
    },
    "Ativo": {
      "width": "50px"
    },
    "Validade": {
      "width": "100px"
    },
    "Referência": {
      "width": "100px"
    },
    "Descrição": {
      "type": "hidden",
      "width": "200px"
    },
    "Produto": {
      "width": "200px"
    },
    "Situação": {
      "width": "70px"
    },
    "Localização": {
      "width": "100px"
    },
    "Endereço": {
      "width": "150px"
    },
    "Lote produção": {
      "width": "70px"
    },
    "Descrição do lote produção": {
      "type": "hidden"
    },
    "Último enchimento": {
      "width": "100px"
    },
    "Fabricante": {
      "width": "110px"
    },
    "Propriedade": {
      "width": "110px"
    },
    "Proprietário": {
      "width": "200px"
    },
    "Data": {
      "type": "hidden"
    },
    "Cheio": {
      "type": "hidden"
    },
    "Vazio": {
      "type": "hidden"
    },
    "Tipo": {
      "type": "hidden"
    },
    "Aplicação": {
      "type": "hidden"
    },
    "Capacidade": {
      "type": "hidden"
    },
    "Unidade": {
      "type": "hidden"
    },
    "Tipo, aplicação e capacidade": {
      "type": "hidden"
    },
    "Tipo, aplicação e unidade": {
      "type": "hidden"
    },
    "Tipo e aplicação": {
      "type": "hidden"
    }
  },
  "columns": {
    "Id": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "number",
        "data-field-ondevou": "id",
        "data-field-alias-ondevou": "id_cilindro",
        "data-table-ondevou": "cilindros,auditor_cilindro",
        "controls-acao": {
          "qrcode": {
            "acao": "getQRcode",
            "messagem": "Gerar QR Code"
          }
        },
        "formsearch": {
          "required": "",
          "getcollector": "{\"modal\":\"\",\"qrcode\":\"{\\\"qrcode-type\\\":[\\\"cl\\\"]}\",\"table-add\":\"addTableColetar_dados_leituras\",\"table-setups\":\"{\\\"search\\\":\\\"nao\\\",\\\"html\\\":\\\"nao\\\",\\\"controls\\\":[\\\"info\\\",\\\"remove\\\"]}\"}"
        },
        "launch": {
          "type": "qrcode",
          "menu": {
            "data-id": "28"
          },
          "formsearch": {
            "id_cilindro": "id_cilindro"
          }
        },
        "getdata": "{\"view\":\"view_cilindros\",\"data\":\"view_cilindros\",\"text-empty-search\":\"sim\",\"data-update-full-fields\":\"sim\",\"campo-data-id\":\"id_cilindro\",\"campo-data-value-input\":\"id_cilindro,referencia_cilindro,nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade,nome_situacao,nome_localizacao\",\"campo-data-input-select-view\":\"id_cilindro,referencia_cilindro,nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade,nome_situacao,nome_localizacao\",\"query\":{\"select\":\"* from view_cilindros\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(ativo is null) and (unaccent(LOWER(concat(id_cilindro,` `,referencia_cilindro,` `,nome_tipo,` `,nome_aplicacao,` `,nome_capacidade,` `,nome_unidade_capacidade))) ilike `%\",\"right\":\"%`) and (participante = 1)\"}}},\"order\":\"id_cilindro desc\"}}"
      }
    },
    "qrcode": {
      "input": {
        "readonly": "readonly",
        "type": "canvas",
        "qrcode-type": "cl",
        "qrcode-text-fields": "referencia",
        "data-type-ondevou": "text",
        "data-field-ondevou": "qrcode",
        "data-table-ondevou": "qrcode"
      }
    },
    "Data hora inclusão": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "date",
        "data-field-ondevou": "data_hora_inclusao_cilindro",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Participante": {
      "input": {
        "readonly": "readonly",
        "required": "required",
        "data-type-ondevou": "text",
        "value": "1",
        "data-field-ondevou": "participante",
        "data-table-ondevou": "cilindros,auditor_cilindro"
      }
    },
    "Ativo": {
      "input": {
        "data-type-ondevou": "text",
        "data-field-ondevou": "ativo",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Validade": {
      "input": {
        "data-type-ondevou": "date",
        "type": "date",
        "data-field-ondevou": "data_validade",
        "data-table-ondevou": "cilindros"
      }
    },
    "Referência": {
      "input": {
        "required": "required",
        "data-type-ondevou": "text",
        "data-field-ondevou": "referencia",
        "placeholder": "Caso seja de terceiro pode colocar CL-TER",
        "data-field-alias-ondevou": "referencia_cilindro",
        "data-field-getdata": "referencia_cilindro",
        "data-table-ondevou": "cilindros",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Descrição": {
      "input": {
        "required": "required",
        "readonly": "readonly",
        "data-type-ondevou": "text",
        "data-field-ondevou": "descricao",
        "placeholder": "Gere a descrição automaticamente",
        "after_texto_label": "<a href=\"javascript:void(0);\" title=\"Criar descrição automática\" onclick=\"setInputValueDescricaoCilindro(this);\"><i class=\"fa fa-link\" aria-hidden=\"true\"></i></a>",
        "data-field-alias-ondevou": "descricao_cilindro",
        "data-table-ondevou": "cilindros"
      }
    },
    "Produto": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "text",
        "data-field-ondevou": "nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Situação": {
      "input": {
        "readonly": "readonly",
        "required": "required",
        "data-type-ondevou": "number",
        "data-id-field-ondevou": "id_situacao",
        "data-id-field-ondevou-default": "2",
        "data-field-ondevou": "nome_situacao",
        "data-table-ondevou": "cilindros,auditor_cilindro",
        "getdata": "{\"view\":\"view_cilindros_situacao\",\"data\":\"view_cilindros_situacao\",\"data-update-full-fields\":\"sim\",\"text-empty-search\":\"sim\",\"campo-data-id\":\"id_situacao\",\"campo-data-value-input\":\"nome_situacao\",\"campo-data-input-select-view\":\"nome_situacao\",\"query\":{\"select\":\"* from view_cilindros_situacao\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(unaccent(LOWER(concat(id_situacao,` `,nome_situacao))) ilike `%\",\"right\":\"%`)\"}}}}}",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Localização": {
      "input": {
        "readonly": "readonly",
        "required": "required",
        "data-type-ondevou": "number",
        "data-id-field-ondevou": "id_localizacao",
        "data-id-field-ondevou-default": "1",
        "data-field-ondevou": "nome_localizacao",
        "data-table-ondevou": "cilindros,auditor_cilindro",
        "getdata": "{\"view\":\"view_cilindros_localizacao\",\"data\":\"view_cilindros_localizacao\",\"text-empty-search\":\"sim\",\"data-update-full-fields\":\"sim\",\"campo-data-id\":\"id_localizacao\",\"campo-data-value-input\":\"nome_localizacao\",\"campo-data-input-select-view\":\"nome_localizacao\",\"query\":{\"select\":\"* from view_cilindros_localizacao\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(unaccent(LOWER(concat(id_localizacao,` `,nome_localizacao))) ilike `%\",\"right\":\"%`)\"}}}}}",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Endereço": {
      "input": {
        "data-type-ondevou": "number",
        "data-id-field-ondevou": "id_endereco",
        "data-field-ondevou": "nome_endereco",
        "data-table-ondevou": "cilindros",
        "getdata": "{\"view\":\"view_cilindros_enderecos\",\"data\":\"view_cilindros_enderecos\",\"text-empty-search\":\"sim\",\"campo-data-id\":\"id_endereco\",\"campo-data-value-input\":\"id_endereco,referencia_endereco,nome_endereco\",\"campo-data-input-select-view\":\"id_endereco,referencia_endereco,nome_endereco\",\"query\":{\"select\":\"* from view_cilindros_enderecos\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(unaccent(LOWER(concat(id_endereco,` `,referencia_endereco,` `,nome_endereco))) ilike `%\",\"right\":\"%`) and (participante=`1`)\"}}}}}",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Lote produção": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "number",
        "data-field-ondevou": "id_lote_producao",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Descrição do lote produção": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "text",
        "data-field-ondevou": "nome_lote_producao",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Último enchimento": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "date",
        "data-field-ondevou": "data_hora_inclusao_enchimento",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Fabricante": {
      "input": {
        "required": "required",
        "data-type-ondevou": "number",
        "data-id-field-ondevou": "id_fabricante",
        "data-field-ondevou": "nome_fabricante",
        "data-table-ondevou": "cilindros",
        "getdata": "{\"view\":\"view_cilindros_fabricantes\",\"data\":\"view_cilindros_fabricantes\",\"text-empty-search\":\"sim\",\"campo-data-id\":\"id_fabricante\",\"campo-data-value-input\":\"nome_fabricante\",\"campo-data-input-select-view\":\"nome_fabricante\",\"query\":{\"select\":\"* from view_cilindros_fabricantes\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(unaccent(LOWER(concat(id_fabricante,` `,nome_fabricante))) ilike `%\",\"right\":\"%`)\"}}}}}",
        "putdata": "{\"tabela\":\"cilindros_fabricantes\",\"unique\":\"nome\",\"fields\":{\"nome\":\"nome_fabricante\"}}",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Propriedade": {
      "input": {
        "required": "required",
        "data-type-ondevou": "number",
        "data-id-field-ondevou": "id_propriedade",
        "data-field-ondevou": "nome_propriedade",
        "data-table-ondevou": "cilindros",
        "getdata": "{\"view\":\"view_cilindros_propriedades\",\"data\":\"view_cilindros_propriedades\",\"text-empty-search\":\"sim\",\"campo-data-id\":\"id_propriedade\",\"campo-data-value-input\":\"nome_propriedade\",\"campo-data-input-select-view\":\"nome_propriedade\",\"query\":{\"select\":\"* from view_cilindros_propriedades\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(unaccent(LOWER(concat(id_propriedade,` `,nome_propriedade))) ilike `%\",\"right\":\"%`)\"}}}}}",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Proprietário": {
      "input": {
        "data-type-ondevou": "number",
        "data-id-field-ondevou": "id_participante",
        "data-id-field-alias-ondevou": "id_participante_cliente",
        "data-field-ondevou": "razao_social_cliente",
        "data-table-ondevou": "cilindros",
        "getdata": "{\"view\":\"view_participantes_privado\",\"data\":\"view_participantes_privado\",\"campo-data-id\":\"id_participante\",\"campo-data-value-input\":\"id_participante,razao_social\",\"campo-data-input-select-view\":\"id_participante,codigo_erplinux_cliente,codigo_erplinux_fornecedor,razao_social,nome_fantasia,cnpj,cpf,cep,cep_erplinux,nome_bairro,nome_cidade,sigla_uf\",\"query\":{\"select\":\"* from view_participantes_privado\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(unaccent(LOWER(concat(id_participante,` `,codigo_erplinux_cliente,` `,codigo_erplinux_fornecedor,` `,razao_social,` `,nome_fantasia,` `,cnpj,` `,cpf,` `,cep,` `,cep_erplinux,` `,nome_bairro,` `,nome_cidade,` `,sigla_uf))) ilike `%\",\"right\":\"%`) and (participante=`1`)\"}}}}}",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Data": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "date",
        "data-field-ondevou": "data_inclusao_cilindro",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Cheio": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "number",
        "data-field-ondevou": "cheio",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Vazio": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "number",
        "data-field-ondevou": "vazio",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Tipo": {
      "input": {
        "required": "required",
        "data-type-ondevou": "number",
        "data-id-field-ondevou": "id_tipo",
        "data-field-ondevou": "nome_tipo",
        "data-table-ondevou": "cilindros",
        "getdata": "{\"view\":\"view_cilindros_tipos\",\"data\":\"view_cilindros_tipos\",\"text-empty-search\":\"sim\",\"campo-data-id\":\"id_tipo\",\"campo-data-value-input\":\"nome_tipo\",\"campo-data-input-select-view\":\"nome_tipo\",\"query\":{\"select\":\"* from view_cilindros_tipos\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(unaccent(LOWER(concat(id_tipo,` `,nome_tipo))) ilike `%\",\"right\":\"%`)\"}}}}}",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Aplicação": {
      "input": {
        "required": "required",
        "data-type-ondevou": "number",
        "data-id-field-ondevou": "id_aplicacao",
        "data-field-ondevou": "nome_aplicacao",
        "data-table-ondevou": "cilindros",
        "getdata": "{\"view\":\"view_cilindros_aplicacoes\",\"data\":\"view_cilindros_aplicacoes\",\"text-empty-search\":\"sim\",\"campo-data-id\":\"id_aplicacao\",\"campo-data-value-input\":\"nome_aplicacao\",\"campo-data-input-select-view\":\"nome_aplicacao\",\"query\":{\"select\":\"* from view_cilindros_aplicacoes\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(unaccent(LOWER(concat(id_aplicacao,` `,nome_aplicacao))) ilike `%\",\"right\":\"%`)\"}}}}}",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Capacidade": {
      "input": {
        "required": "required",
        "data-type-ondevou": "number",
        "data-id-field-ondevou": "id_capacidade",
        "data-field-ondevou": "nome_capacidade",
        "data-table-ondevou": "cilindros",
        "getdata": "{\"view\":\"view_cilindros_capacidades\",\"data\":\"view_cilindros_capacidades\",\"text-empty-search\":\"sim\",\"campo-data-id\":\"id_capacidade\",\"campo-data-value-input\":\"nome_capacidade\",\"campo-data-input-select-view\":\"nome_capacidade\",\"query\":{\"select\":\"* from view_cilindros_capacidades\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(unaccent(LOWER(concat(id_capacidade,` `,nome_capacidade))) ilike `%\",\"right\":\"%`)\"}}}}}",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Unidade": {
      "input": {
        "required": "required",
        "data-type-ondevou": "number",
        "data-id-field-ondevou": "id_unidade_capacidade",
        "data-field-ondevou": "nome_unidade_capacidade",
        "data-table-ondevou": "cilindros",
        "getdata": "{\"view\":\"view_cilindros_unidade_capacidade\",\"data\":\"view_cilindros_unidade_capacidade\",\"text-empty-search\":\"sim\",\"campo-data-id\":\"id_unidade_capacidade\",\"campo-data-value-input\":\"nome_unidade_capacidade\",\"campo-data-input-select-view\":\"nome_unidade_capacidade\",\"query\":{\"select\":\"* from view_cilindros_unidade_capacidade\",\"where\":{\"and\":{\"texto_digitado\":{\"left\":\"(unaccent(LOWER(concat(id_unidade_capacidade,` `,nome_unidade_capacidade))) ilike `%\",\"right\":\"%`)\"}}}}}",
        "formsearch": {
          "required": ""
        }
      }
    },
    "Tipo, aplicação e capacidade": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "text",
        "data-field-ondevou": "nome_tipo,nome_aplicacao,nome_capacidade",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Tipo, aplicação e unidade": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "text",
        "data-field-ondevou": "nome_tipo,nome_aplicacao,nome_unidade_capacidade",
        "data-table-ondevou": "view_cilindros"
      }
    },
    "Tipo e aplicação": {
      "input": {
        "readonly": "readonly",
        "data-type-ondevou": "text",
        "data-field-ondevou": "nome_tipo,nome_aplicacao",
        "data-table-ondevou": "view_cilindros"
      }
    }
  },
  "formsearch": {
    "data-table-ondevou": "view_cilindros",
    "data-view-ondevou": "view_cilindros",
    "data-where-order": "order by id_cilindro desc",
    "input": {
      "participante": {
        "data-field-ondevou": "participante",
        "data-type-ondevou": "number",
        "type": "checkbox",
        "texto_label": "Apenas meus cilindros",
        "data-where-true": "participante in (`1`)"
      },
      "data_validade_inicial": {
        "data-field-ondevou": "data_validade_inicial",
        "data-type-ondevou": "date",
        "type": "date",
        "class": "datepicker",
        "texto_label": "Data validade inicial",
        "data-field-where": "data_validade"
      },
      "data_validade_final": {
        "data-field-ondevou": "data_validade_final",
        "data-type-ondevou": "date",
        "type": "date",
        "class": "datepicker",
        "texto_label": "Data validade final",
        "data-field-where": "data_validade"
      },
      "data_inicial": {
        "data-field-ondevou": "data_inicial",
        "data-type-ondevou": "date",
        "type": "date",
        "class": "datepicker",
        "texto_label": "Data Inicial",
        "data-field-where": "data"
      },
      "data_final": {
        "data-field-ondevou": "data_final",
        "data-type-ondevou": "date",
        "type": "date",
        "class": "datepicker",
        "texto_label": "Data Final",
        "data-field-where": "data"
      }
    }
  },
  "graficos": {
    "1": {
      "data": {
        "Cilindros": {
          "type": "bar",
          "name": "Cilindros",
          "x": "nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade",
          "y": "count",
          "texttemplate": "%{y}"
        },
        "Cheio": {
          "type": "bar",
          "name": "Cheio",
          "x": "nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade",
          "y": "cheio",
          "texttemplate": "%{y}"
        },
        "Vazio": {
          "type": "bar",
          "name": "Vazio",
          "x": "nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade",
          "y": "vazio",
          "texttemplate": "%{y}"
        }
      },
      "layout": {
        "title": {
          "text": "Tipo, aplicação, capacidade e unidade"
        }
      }
    },
    "2": {
      "data": {
        "Cilindros": {
          "type": "bar",
          "name": "Cilindros",
          "x": "nome_tipo,nome_aplicacao,nome_capacidade",
          "y": "count",
          "texttemplate": "%{y}"
        },
        "Cheio": {
          "type": "bar",
          "name": "Cheio",
          "x": "nome_tipo,nome_aplicacao,nome_capacidade",
          "y": "cheio",
          "texttemplate": "%{y}"
        },
        "Vazio": {
          "type": "bar",
          "name": "Vazio",
          "x": "nome_tipo,nome_aplicacao,nome_capacidade",
          "y": "vazio",
          "texttemplate": "%{y}"
        }
      },
      "layout": {
        "title": {
          "text": "Tipo, aplicação, capacidade"
        }
      }
    },
    "3": {
      "data": {
        "Cilindros": {
          "type": "bar",
          "name": "Cilindros",
          "x": "nome_tipo,nome_aplicacao",
          "y": "count",
          "texttemplate": "%{y}"
        },
        "Cheio": {
          "type": "bar",
          "name": "Cheio",
          "x": "nome_tipo,nome_aplicacao",
          "y": "cheio",
          "texttemplate": "%{y}"
        },
        "Vazio": {
          "type": "bar",
          "name": "Vazio",
          "x": "nome_tipo,nome_aplicacao",
          "y": "vazio",
          "texttemplate": "%{y}"
        }
      },
      "layout": {
        "title": {
          "text": "Tipo e aplicação"
        }
      }
    },
    "4": {
      "data": {
        "Cilindros": {
          "type": "bar",
          "name": "Cilindros",
          "x": "nome_tipo",
          "y": "count",
          "texttemplate": "%{y}"
        },
        "Cheio": {
          "type": "bar",
          "name": "Cheio",
          "x": "nome_tipo",
          "y": "cheio",
          "texttemplate": "%{y}"
        },
        "Vazio": {
          "type": "bar",
          "name": "Vazio",
          "x": "nome_tipo",
          "y": "vazio",
          "texttemplate": "%{y}"
        }
      },
      "layout": {
        "title": {
          "text": "Tipo"
        }
      }
    },
    "5": {
      "data": {
        "Cilindros": {
          "type": "bar",
          "name": "Cilindros",
          "x": "nome_aplicacao",
          "y": "count",
          "texttemplate": "%{y}"
        },
        "Cheio": {
          "type": "bar",
          "name": "Cheio",
          "x": "nome_aplicacao",
          "y": "cheio",
          "texttemplate": "%{y}"
        },
        "Vazio": {
          "type": "bar",
          "name": "Vazio",
          "x": "nome_aplicacao",
          "y": "vazio",
          "texttemplate": "%{y}"
        }
      },
      "layout": {
        "title": {
          "text": "Aplicação"
        }
      }
    },
    "6": {
      "data": {
        "Cilindros": {
          "type": "bar",
          "name": "Cilindros",
          "x": "data_inclusao_cilindro",
          "y": "count",
          "texttemplate": "%{y}"
        },
        "Cheio": {
          "type": "bar",
          "name": "Cheio",
          "x": "data_inclusao_cilindro",
          "y": "cheio",
          "texttemplate": "%{y}"
        },
        "Vazio": {
          "type": "bar",
          "name": "Vazio",
          "x": "data_inclusao_cilindro",
          "y": "vazio",
          "texttemplate": "%{y}"
        }
      },
      "layout": {
        "title": {
          "text": "Data cadastro"
        }
      }
    }
  },
  "dashboard": {
    "enabled": true,
    "theme": "modern",
    "layout": "free",
    "auto_refresh": false,
    "header": {
      "logo": {
        "src": "img/ondevou_plataforma.png",
        "alt": "OndeVou Plataforma",
        "class": "dashboard-logo-img"
      },
      "title": "GESTÃO DE CILINDROS - CADASTRO MASTER",
      "subtitle": "Visão completa do parque de cilindros, status, localização e propriedade",
      "filters_area": {
        "container_id": "dashboard-filters-area",
        "empty_message": "Sem filtros"
      },
      "actions": [
        {
          "type": "button",
          "container_id": "dashboard-atualizar-dados",
          "class": "dashboard-btn dashboard-btn-sm dashboard-btn-primary",
          "icon": "fas fa-sync-alt",
          "text": "Atualizar",
          "action": "dashboard_refreshData",
          "title": "Atualizar Dados"
        },
        {
          "type": "button",
          "container_id": "dashboard-voltar-dados",
          "class": "dashboard-btn dashboard-btn-sm dashboard-btn-outline",
          "icon": "fas fa-table",
          "text": "Voltar para dados",
          "action": "voltarParaDadosFromDashboard",
          "title": "Voltar para dados"
        },
        {
          "type": "button",
          "container_id": "dashboard-auto-refresh",
          "class": "dashboard-btn dashboard-btn-sm dashboard-btn-info",
          "icon": "fas fa-clock",
          "text": "Auto-Refresh",
          "action": "dashboard_toggleAutoRefresh",
          "title": "Alternar escuta automática de dados"
        }
      ]
    },
    "sections": {
      "bloco1_1_resumo_geral": {
        "type": "summary_cards_full",
        "title": "RESUMO GERAL - TODOS OS CILINDROS",
        "class": "dashboard-section dashboard-section-full-width",
        "icon": "🏭",
        "config": {
          "container_id": "cards-resumo-geral",
          "size": "full",
          "cards": [
            {
              "title": "TOTAL CADASTRADO",
              "value": "COUNT:id_cilindro",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🏭",
              "color": "#2c3e50"
            },
            {
              "title": "ATIVOS",
              "value": "COUNT:id_cilindro",
              "filters": "ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "✅",
              "color": "#27ae60"
            },
            {
              "title": "INATIVOS",
              "value": "COUNT:id_cilindro",
              "filters": "ativo = \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "⚠️",
              "color": "#e74c3c"
            },
            {
              "title": "CILINDROS PRÓPRIOS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 1 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🏭",
              "color": "#3498db"
            },
            {
              "title": "CILINDROS DE TERCEIROS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 2 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🤝",
              "color": "#f39c12"
            },
            {
              "title": "DIAS COM CADASTROS",
              "group_by": "data_inclusao_cilindro",
              "value": "METRICA_AGRUPAMENTO:total_grupos",
              "format": "numero",
              "decimals": 0,
              "suffix": " dias",
              "icon": "📅",
              "color": "#3498db",
              "description": "Quantos dias tiveram pelo menos 1 cadastro"
            },
            {
              "title": "CADASTROS/DIA",
              "group_by": "data_inclusao_cilindro",
              "value": "METRICA_AGRUPAMENTO:media",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil/dia",
              "icon": "📈",
              "color": "#22c55e"
            },
            {
              "title": "TAXA DE OCUPAÇÃO INTERNA",
              "value": "CALC:(count(id_cilindro where id_localizacao = 1)/count(id_cilindro where ativo != \"N\"))*100",
              "format": "numero",
              "decimals": 1,
              "suffix": "%",
              "icon": "📊",
              "color": "#f39c12"
            },
            {
              "title": "INTERNO",
              "value": "COUNT:id_cilindro",
              "filters": "id_localizacao = 1 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🏢",
              "color": "#3498db"
            },
            {
              "title": "ROTA",
              "value": "COUNT:id_cilindro",
              "filters": "id_localizacao = 2 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🚚",
              "color": "#f39c12"
            },
            {
              "title": "CLIENTE",
              "value": "COUNT:id_cilindro",
              "filters": "id_localizacao = 3 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "👥",
              "color": "#27ae60"
            },
            {
              "title": "EMPRESTADO",
              "value": "COUNT:id_cilindro",
              "filters": "id_localizacao = 4 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🤝",
              "color": "#9b59b6"
            },
            {
              "title": "TOTAL CHEIOS (Interno + Rota)",
              "value": "COUNT:id_cilindro",
              "filters": "id_situacao = 1 AND id_localizacao IN (1,2) AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🟢",
              "color": "#27ae60"
            },
            {
              "title": "TOTAL VAZIOS (Interno + Rota)",
              "value": "COUNT:id_cilindro",
              "filters": "id_situacao = 2 AND id_localizacao IN (1,2) AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🔴",
              "color": "#e74c3c"
            },
            {
              "title": "% OCUPAÇÃO DE CHEIOS",
              "value": "CALC:(count(id_cilindro where id_situacao = 1 and id_localizacao in (1,2) and ativo != \"N\")/count(id_cilindro where id_localizacao in (1,2) and ativo != \"N\")*100)",
              "format": "numero",
              "decimals": 1,
              "suffix": "%",
              "icon": "📊",
              "color": "#27ae60"
            }
          ]
        }
      },
      "bloco1_2_resumo_proprios": {
        "type": "summary_cards_full",
        "title": "RESUMO - CILINDROS PRÓPRIOS",
        "class": "dashboard-section dashboard-section-full-width",
        "icon": "🏭",
        "config": {
          "container_id": "cards-resumo-proprios",
          "size": "full",
          "cards": [
            {
              "title": "TOTAL PRÓPRIOS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 1",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🏭",
              "color": "#2c3e50"
            },
            {
              "title": "ATIVOS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 1 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "✅",
              "color": "#27ae60"
            },
            {
              "title": "INATIVOS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 1 AND ativo = \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "⚠️",
              "color": "#e74c3c"
            },
            {
              "title": "CADASTROS PRÓPRIOS/DIA",
              "value": "CALC:count(id_cilindro)/count_distinct(date(data_inclusao_cilindro))",
              "filters": "id_propriedade = 1 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil/dia",
              "icon": "📈",
              "color": "#22c55e"
            },
            {
              "title": "INTERNO",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 1 AND id_localizacao = 1 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🏢",
              "color": "#3498db"
            },
            {
              "title": "ROTA",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 1 AND id_localizacao = 2 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🚚",
              "color": "#f39c12"
            },
            {
              "title": "CLIENTE",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 1 AND id_localizacao = 3 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "👥",
              "color": "#27ae60"
            },
            {
              "title": "EMPRESTADO",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 1 AND id_localizacao = 4 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🤝",
              "color": "#9b59b6"
            },
            {
              "title": "CHEIOS PRÓPRIOS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 1 AND id_situacao = 1 AND id_localizacao IN (1,2) AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🟢",
              "color": "#27ae60"
            },
            {
              "title": "VAZIOS PRÓPRIOS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 1 AND id_situacao = 2 AND id_localizacao IN (1,2) AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🔴",
              "color": "#e74c3c"
            }
          ]
        }
      },
      "bloco1_3_resumo_terceiros": {
        "type": "summary_cards_full",
        "title": "RESUMO - CILINDROS DE TERCEIROS",
        "class": "dashboard-section dashboard-section-full-width",
        "icon": "🤝",
        "config": {
          "container_id": "cards-resumo-terceiros",
          "size": "full",
          "cards": [
            {
              "title": "TOTAL TERCEIROS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 2",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🤝",
              "color": "#2c3e50"
            },
            {
              "title": "ATIVOS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 2 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "✅",
              "color": "#27ae60"
            },
            {
              "title": "INATIVOS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 2 AND ativo = \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "⚠️",
              "color": "#e74c3c"
            },
            {
              "title": "CADASTROS TERCEIROS/DIA",
              "value": "CALC:count(id_cilindro)/count_distinct(date(data_inclusao_cilindro))",
              "filters": "id_propriedade = 2 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil/dia",
              "icon": "📈",
              "color": "#22c55e"
            },
            {
              "title": "INTERNO",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 2 AND id_localizacao = 1 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🏢",
              "color": "#3498db"
            },
            {
              "title": "ROTA",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 2 AND id_localizacao = 2 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🚚",
              "color": "#f39c12"
            },
            {
              "title": "CLIENTE",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 2 AND id_localizacao = 3 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "👥",
              "color": "#27ae60"
            },
            {
              "title": "EMPRESTADO",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 2 AND id_localizacao = 4 AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🤝",
              "color": "#9b59b6"
            },
            {
              "title": "CHEIOS TERCEIROS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 2 AND id_situacao = 1 AND id_localizacao IN (1,2) AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🟢",
              "color": "#27ae60"
            },
            {
              "title": "VAZIOS TERCEIROS",
              "value": "COUNT:id_cilindro",
              "filters": "id_propriedade = 2 AND id_situacao = 2 AND id_localizacao IN (1,2) AND ativo != \"N\"",
              "format": "numero",
              "decimals": 0,
              "suffix": " cil",
              "icon": "🔴",
              "color": "#e74c3c"
            }
          ]
        }
      },
      "bloco2_1_metricas_estoque_geral": {
        "type": "summary_cards_grid",
        "title": "MÉTRICAS DE ESTOQUE - GERAL",
        "class": "dashboard-section dashboard-section-full-width",
        "icon": "📦",
        "config": {
          "container_id": "cards-metricas-estoque-geral",
          "size": "full",
          "sections": [
            {
              "title": "📊 ANÁLISE DE CHEIOS",
              "cards": [
                {
                  "title": "TOTAL CHEIOS (Interno + Rota)",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_situacao = 1 AND id_localizacao IN (1,2) AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🟢",
                  "color": "#27ae60"
                },
                {
                  "title": "CHEIOS - INTERNO",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_localizacao = 1 AND id_situacao = 1 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🏢",
                  "color": "#27ae60"
                },
                {
                  "title": "CHEIOS - ROTA",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_localizacao = 2 AND id_situacao = 1 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🚚",
                  "color": "#27ae60"
                }
              ]
            },
            {
              "title": "📊 ANÁLISE DE VAZIOS",
              "cards": [
                {
                  "title": "TOTAL VAZIOS (Interno + Rota)",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_situacao = 2 AND id_localizacao IN (1,2) AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🔴",
                  "color": "#e74c3c"
                },
                {
                  "title": "VAZIOS - INTERNO",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_localizacao = 1 AND id_situacao = 2 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🏢",
                  "color": "#e74c3c"
                },
                {
                  "title": "VAZIOS - ROTA",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_localizacao = 2 AND id_situacao = 2 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🚚",
                  "color": "#e74c3c"
                }
              ]
            },
            {
              "title": "📊 FORA DA EMPRESA",
              "cards": [
                {
                  "title": "COM CLIENTE",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_localizacao = 3 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "👥",
                  "color": "#95a5a6"
                },
                {
                  "title": "EMPRESTADO",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_localizacao = 4 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🤝",
                  "color": "#95a5a6"
                }
              ]
            }
          ]
        }
      },
      "bloco2_2_metricas_estoque_proprios": {
        "type": "summary_cards_grid",
        "title": "MÉTRICAS DE ESTOQUE - PRÓPRIOS",
        "class": "dashboard-section dashboard-section-full-width",
        "icon": "📦",
        "config": {
          "container_id": "cards-metricas-estoque-proprios",
          "size": "full",
          "sections": [
            {
              "title": "📊 ANÁLISE DE CHEIOS - PRÓPRIOS",
              "cards": [
                {
                  "title": "TOTAL CHEIOS PRÓPRIOS",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND id_situacao = 1 AND id_localizacao IN (1,2) AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🟢",
                  "color": "#27ae60"
                },
                {
                  "title": "CHEIOS PRÓPRIOS - INTERNO",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND id_localizacao = 1 AND id_situacao = 1 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🏢",
                  "color": "#27ae60"
                },
                {
                  "title": "CHEIOS PRÓPRIOS - ROTA",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND id_localizacao = 2 AND id_situacao = 1 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🚚",
                  "color": "#27ae60"
                }
              ]
            },
            {
              "title": "📊 ANÁLISE DE VAZIOS - PRÓPRIOS",
              "cards": [
                {
                  "title": "TOTAL VAZIOS PRÓPRIOS",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND id_situacao = 2 AND id_localizacao IN (1,2) AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🔴",
                  "color": "#e74c3c"
                },
                {
                  "title": "VAZIOS PRÓPRIOS - INTERNO",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND id_localizacao = 1 AND id_situacao = 2 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🏢",
                  "color": "#e74c3c"
                },
                {
                  "title": "VAZIOS PRÓPRIOS - ROTA",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND id_localizacao = 2 AND id_situacao = 2 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🚚",
                  "color": "#e74c3c"
                }
              ]
            },
            {
              "title": "📊 FORA - PRÓPRIOS",
              "cards": [
                {
                  "title": "PRÓPRIOS - CLIENTE",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND id_localizacao = 3 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "👥",
                  "color": "#95a5a6"
                },
                {
                  "title": "PRÓPRIOS - EMPRESTADO",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND id_localizacao = 4 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🤝",
                  "color": "#95a5a6"
                }
              ]
            }
          ]
        }
      },
      "bloco2_3_metricas_estoque_terceiros": {
        "type": "summary_cards_grid",
        "title": "MÉTRICAS DE ESTOQUE - TERCEIROS",
        "class": "dashboard-section dashboard-section-full-width",
        "icon": "📦",
        "config": {
          "container_id": "cards-metricas-estoque-terceiros",
          "size": "full",
          "sections": [
            {
              "title": "📊 ANÁLISE DE CHEIOS - TERCEIROS",
              "cards": [
                {
                  "title": "TOTAL CHEIOS TERCEIROS",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND id_situacao = 1 AND id_localizacao IN (1,2) AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🟢",
                  "color": "#27ae60"
                },
                {
                  "title": "CHEIOS TERCEIROS - INTERNO",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND id_localizacao = 1 AND id_situacao = 1 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🏢",
                  "color": "#27ae60"
                },
                {
                  "title": "CHEIOS TERCEIROS - ROTA",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND id_localizacao = 2 AND id_situacao = 1 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🚚",
                  "color": "#27ae60"
                }
              ]
            },
            {
              "title": "📊 ANÁLISE DE VAZIOS - TERCEIROS",
              "cards": [
                {
                  "title": "TOTAL VAZIOS TERCEIROS",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND id_situacao = 2 AND id_localizacao IN (1,2) AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🔴",
                  "color": "#e74c3c"
                },
                {
                  "title": "VAZIOS TERCEIROS - INTERNO",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND id_localizacao = 1 AND id_situacao = 2 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🏢",
                  "color": "#e74c3c"
                },
                {
                  "title": "VAZIOS TERCEIROS - ROTA",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND id_localizacao = 2 AND id_situacao = 2 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🚚",
                  "color": "#e74c3c"
                }
              ]
            },
            {
              "title": "📊 FORA - TERCEIROS",
              "cards": [
                {
                  "title": "TERCEIROS - CLIENTE",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND id_localizacao = 3 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "👥",
                  "color": "#95a5a6"
                },
                {
                  "title": "TERCEIROS - EMPRESTADO",
                  "value": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND id_localizacao = 4 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🤝",
                  "color": "#95a5a6"
                }
              ]
            }
          ]
        }
      },
      "bloco3_perfil_cilindros": {
        "type": "summary_cards_grid",
        "title": "PERFIL DOS CILINDROS",
        "class": "dashboard-section dashboard-section-full-width",
        "icon": "📋",
        "config": {
          "container_id": "cards-perfil-cilindros",
          "size": "full",
          "sections": [
            {
              "title": "🏭 ANÁLISE POR FABRICANTE",
              "cards": [
                {
                  "title": "FABRICANTES DIFERENTES",
                  "value": "COUNT_DISTINCT:nome_fabricante",
                  "filters": "ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "icon": "🔧",
                  "color": "#3b82f6"
                },
                {
                  "title": "FABRICANTE PRINCIPAL",
                  "group_by": "nome_fabricante",
                  "value": "METRICA_AGRUPAMENTO:moda",
                  "filters": "ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥇",
                  "color": "#f1c40f"
                },
                {
                  "title": "2º FABRICANTE",
                  "group_by": "nome_fabricante",
                  "value": "METRICA_AGRUPAMENTO:segundo",
                  "filters": "ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥈",
                  "color": "#95a5a6"
                },
                {
                  "title": "3º FABRICANTE",
                  "group_by": "nome_fabricante",
                  "value": "METRICA_AGRUPAMENTO:terceiro",
                  "filters": "ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥉",
                  "color": "#d35400"
                }
              ]
            },
            {
              "title": "🧪 ANÁLISE POR TIPO DE GÁS",
              "cards": [
                {
                  "title": "TIPOS DIFERENTES",
                  "value": "COUNT_DISTINCT:nome_tipo",
                  "filters": "ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "icon": "🧪",
                  "color": "#3b82f6"
                },
                {
                  "title": "TIPO MAIS COMUM",
                  "group_by": "nome_tipo",
                  "value": "METRICA_AGRUPAMENTO:moda",
                  "filters": "ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥇",
                  "color": "#f1c40f"
                },
                {
                  "title": "2º TIPO",
                  "group_by": "nome_tipo",
                  "value": "METRICA_AGRUPAMENTO:segundo",
                  "filters": "ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥈",
                  "color": "#95a5a6"
                },
                {
                  "title": "3º TIPO",
                  "group_by": "nome_tipo",
                  "value": "METRICA_AGRUPAMENTO:terceiro",
                  "filters": "ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥉",
                  "color": "#d35400"
                }
              ]
            },
            {
              "title": "🎯 ANÁLISE POR APLICAÇÃO",
              "cards": [
                {
                  "title": "APLICAÇÕES DIFERENTES",
                  "value": "COUNT_DISTINCT:nome_aplicacao",
                  "filters": "ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "icon": "🎯",
                  "color": "#8b5cf6"
                },
                {
                  "title": "APLICAÇÃO PRINCIPAL",
                  "group_by": "nome_aplicacao",
                  "value": "METRICA_AGRUPAMENTO:moda",
                  "filters": "ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥇",
                  "color": "#f1c40f"
                },
                {
                  "title": "2ª APLICAÇÃO",
                  "group_by": "nome_aplicacao",
                  "value": "METRICA_AGRUPAMENTO:segundo",
                  "filters": "ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥈",
                  "color": "#95a5a6"
                },
                {
                  "title": "3ª APLICAÇÃO",
                  "group_by": "nome_aplicacao",
                  "value": "METRICA_AGRUPAMENTO:terceiro",
                  "filters": "ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥉",
                  "color": "#d35400"
                }
              ]
            },
            {
              "title": "📏 ANÁLISE POR CAPACIDADE",
              "cards": [
                {
                  "title": "CAPACIDADES DIFERENTES",
                  "value": "COUNT_DISTINCT:nome_capacidade",
                  "filters": "ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "icon": "📏",
                  "color": "#f97316"
                },
                {
                  "title": "CAPACIDADE MAIS COMUM",
                  "group_by": "nome_capacidade",
                  "value": "METRICA_AGRUPAMENTO:moda",
                  "filters": "ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥇",
                  "color": "#f1c40f"
                },
                {
                  "title": "CAPACIDADE MÉDIA",
                  "value": "AVG:nome_capacidade",
                  "filters": "ativo != \"N\"",
                  "format": "numero",
                  "decimals": 1,
                  "suffix": " L",
                  "icon": "📊",
                  "color": "#3498db"
                }
              ]
            }
          ]
        }
      },
      "bloco4_analise_validade": {
        "type": "summary_cards_grid",
        "title": "ANÁLISE DE VALIDADE DOS CILINDROS",
        "class": "dashboard-section dashboard-section-full-width",
        "icon": "⏰",
        "config": {
          "container_id": "cards-analise-validade",
          "size": "full",
          "sections": [
            {
              "title": "📊 VISÃO GERAL",
              "cards": [
                {
                  "title": "TOTAL CADASTRADOS ATIVOS",
                  "value": "COUNT:id_cilindro",
                  "filters": "ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🏭",
                  "color": "#2c3e50"
                },
                {
                  "title": "CILINDROS COM VALIDADE",
                  "value": "COUNT:id_cilindro",
                  "filters": "dias_ate_validade IS NOT NULL AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "✅",
                  "color": "#27ae60"
                },
                {
                  "title": "SEM VALIDADE CADASTRADA",
                  "value": "COUNT:id_cilindro",
                  "filters": "dias_ate_validade IS NULL AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "⚠️",
                  "color": "#f39c12"
                },
                {
                  "title": "% COM VALIDADE",
                  "value": "CALC:(COUNT(id_cilindro where dias_ate_validade IS NOT NULL)/COUNT(id_cilindro))*100",
                  "filters": "ativo != \"N\"",
                  "format": "numero",
                  "decimals": 1,
                  "suffix": "%",
                  "icon": "📊",
                  "color": "#3498db"
                }
              ]
            },
            {
              "title": "⏳ STATUS DE VENCIMENTO",
              "cards": [
                {
                  "title": "VENCIDOS",
                  "value": "COUNT:id_cilindro",
                  "filters": "dias_ate_validade < 0 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "❌",
                  "color": "#e74c3c"
                },
                {
                  "title": "VENCENDO HOJE",
                  "value": "COUNT:id_cilindro",
                  "filters": "dias_ate_validade = 0 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "⚠️",
                  "color": "#f39c12"
                },
                {
                  "title": "A VENCER (1-10 dias)",
                  "value": "COUNT:id_cilindro",
                  "filters": "dias_ate_validade BETWEEN 1 AND 10 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🟡",
                  "color": "#f1c40f"
                },
                {
                  "title": "A VENCER (11-30 dias)",
                  "value": "COUNT:id_cilindro",
                  "filters": "dias_ate_validade BETWEEN 11 AND 30 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🟢",
                  "color": "#2ecc71"
                },
                {
                  "title": "A VENCER (31-90 dias)",
                  "value": "COUNT:id_cilindro",
                  "filters": "dias_ate_validade BETWEEN 31 AND 90 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "🔵",
                  "color": "#3498db"
                },
                {
                  "title": "VENCE EM +90 DIAS",
                  "value": "COUNT:id_cilindro",
                  "filters": "dias_ate_validade > 90 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "icon": "💚",
                  "color": "#16a085"
                }
              ]
            },
            {
              "title": "📊 ESTATÍSTICAS",
              "cards": [
                {
                  "title": "MÉDIA DE DIAS PARA VENCER",
                  "value": "AVG:dias_ate_validade",
                  "filters": "dias_ate_validade > 0 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " dias",
                  "icon": "📈",
                  "color": "#3498db"
                },
                {
                  "title": "VALIDADE MAIS PRÓXIMA",
                  "value": "MIN:dias_ate_validade",
                  "filters": "dias_ate_validade > 0 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " dias",
                  "icon": "⏰",
                  "color": "#e67e22"
                },
                {
                  "title": "VALIDADE MAIS DISTANTE",
                  "value": "MAX:dias_ate_validade",
                  "filters": "dias_ate_validade > 0 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " dias",
                  "icon": "📅",
                  "color": "#27ae60"
                }
              ]
            },
            {
              "title": "🧪 ANÁLISE POR TIPO",
              "cards": [
                {
                  "title": "TIPO COM MAIOR VALIDADE MÉDIA",
                  "group_by": "nome_tipo",
                  "value": "AVG:dias_ate_validade",
                  "filters": "dias_ate_validade > 0 AND ativo != \"N\"",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " dias",
                  "icon": "🏆",
                  "color": "#f1c40f"
                },
                {
                  "title": "TIPO COM MAIS VENCIDOS",
                  "group_by": "nome_tipo",
                  "value": "METRICA_AGRUPAMENTO:moda",
                  "filters": "dias_ate_validade < 0 AND ativo != \"N\"",
                  "format": "texto",
                  "icon": "🥇",
                  "color": "#e74c3c"
                }
              ]
            }
          ]
        }
      },
      "bloco5_evolucao_cadastros": {
        "type": "charts_grid_section",
        "title": "📈 EVOLUÇÃO DE CADASTROS",
        "class": "dashboard-section dashboard-section-full-width",
        "grid_class": "dashboard-section-grid-3",
        "icon": "📊",
        "config": {
          "container_id": "evolucao-cadastros-grid",
          "charts": [
            {
              "type": "chart_bar_aggregated_evolution",
              "config": {
                "container_id": "evolucao-geral",
                "data_config": {
                  "campo_data": "data_inclusao_cilindro",
                  "operation": "COUNT:id_cilindro",
                  "filters": "ativo != \"N\"",
                  "granularidade": "mensal"
                },
                "display_config": {
                  "title": "📅 TOTAL GERAL",
                  "layout": "vertical",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "height": "350px",
                  "color": "#2c3e50"
                }
              }
            },
            {
              "type": "chart_bar_aggregated_evolution",
              "config": {
                "container_id": "evolucao-proprios",
                "data_config": {
                  "campo_data": "data_inclusao_cilindro",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND ativo != \"N\"",
                  "granularidade": "mensal"
                },
                "display_config": {
                  "title": "🏭 PRÓPRIOS",
                  "layout": "vertical",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "height": "350px",
                  "color": "#3498db"
                }
              }
            },
            {
              "type": "chart_bar_aggregated_evolution",
              "config": {
                "container_id": "evolucao-terceiros",
                "data_config": {
                  "campo_data": "data_inclusao_cilindro",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND ativo != \"N\"",
                  "granularidade": "mensal"
                },
                "display_config": {
                  "title": "🤝 TERCEIROS",
                  "layout": "vertical",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "height": "350px",
                  "color": "#f39c12"
                }
              }
            }
          ]
        }
      },
      "bloco6_ranking_membros": {
        "type": "charts_grid_section",
        "title": "👥 PRODUTIVIDADE POR MEMBRO",
        "class": "dashboard-section dashboard-section-full-width",
        "grid_class": "dashboard-section-grid-3",
        "icon": "🏆",
        "config": {
          "container_id": "ranking-membros-grid",
          "charts": [
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "ranking-geral",
                "data_config": {
                  "group_by": "nome_membro",
                  "operation": "COUNT:id_cilindro",
                  "filters": "ativo != \"N\""
                },
                "display_config": {
                  "title": "🏆 GERAL",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#2c3e50"
                }
              }
            },
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "ranking-proprios",
                "data_config": {
                  "group_by": "nome_membro",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND ativo != \"N\""
                },
                "display_config": {
                  "title": "🏭 PRÓPRIOS",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#3498db"
                }
              }
            },
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "ranking-terceiros",
                "data_config": {
                  "group_by": "nome_membro",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND ativo != \"N\""
                },
                "display_config": {
                  "title": "🤝 TERCEIROS",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#f39c12"
                }
              }
            }
          ]
        }
      },
      "bloco7_analise_produto": {
        "type": "charts_grid_section",
        "title": "ANÁLISE POR PRODUTO",
        "class": "dashboard-section dashboard-section-full-width",
        "grid_class": "dashboard-section-grid-3",
        "icon": "🏭",
        "config": {
          "container_id": "analise-produto-grid",
          "charts": [
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "produto-geral",
                "data_config": {
                  "group_by": "nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade",
                  "operation": "COUNT:id_cilindro",
                  "filters": "ativo != \"N\""
                },
                "display_config": {
                  "title": "🏆 GERAL",
                  "subtitle": "Todos os produtos",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#2c3e50"
                }
              }
            },
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "produto-proprios",
                "data_config": {
                  "group_by": "nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND ativo != \"N\""
                },
                "display_config": {
                  "title": "🏭 PRÓPRIOS",
                  "subtitle": "Apenas cilindros próprios",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#3498db"
                }
              }
            },
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "produto-terceiros",
                "data_config": {
                  "group_by": "nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND ativo != \"N\""
                },
                "display_config": {
                  "title": "🤝 TERCEIROS",
                  "subtitle": "Apenas cilindros de terceiros",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#f39c12"
                }
              }
            }
          ]
        }
      },
      "bloco8_analise_tipo_aplicacao": {
        "type": "charts_grid_section",
        "title": "ANÁLISE POR TIPO + APLICAÇÃO",
        "class": "dashboard-section dashboard-section-full-width",
        "grid_class": "dashboard-section-grid-3",
        "icon": "🎯",
        "config": {
          "container_id": "analise-tipo-aplicacao-grid",
          "charts": [
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "tipo-aplicacao-geral",
                "data_config": {
                  "group_by": "nome_tipo,nome_aplicacao",
                  "operation": "COUNT:id_cilindro",
                  "filters": "ativo != \"N\""
                },
                "display_config": {
                  "title": "🏆 GERAL",
                  "subtitle": "Todos os tipos + aplicações",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#2c3e50"
                }
              }
            },
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "tipo-aplicacao-proprios",
                "data_config": {
                  "group_by": "nome_tipo,nome_aplicacao",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND ativo != \"N\""
                },
                "display_config": {
                  "title": "🏭 PRÓPRIOS",
                  "subtitle": "Apenas cilindros próprios",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#3498db"
                }
              }
            },
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "tipo-aplicacao-terceiros",
                "data_config": {
                  "group_by": "nome_tipo,nome_aplicacao",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND ativo != \"N\""
                },
                "display_config": {
                  "title": "🤝 TERCEIROS",
                  "subtitle": "Apenas cilindros de terceiros",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#f39c12"
                }
              }
            }
          ]
        }
      },
      "bloco9_analise_tipo_gas": {
        "type": "charts_grid_section",
        "title": "ANÁLISE POR TIPO DE GÁS",
        "class": "dashboard-section dashboard-section-full-width",
        "grid_class": "dashboard-section-grid-3",
        "icon": "🧪",
        "config": {
          "container_id": "analise-tipo-gas-grid",
          "charts": [
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "tipo-gas-geral",
                "data_config": {
                  "group_by": "nome_tipo",
                  "operation": "COUNT:id_cilindro",
                  "filters": "ativo != \"N\""
                },
                "display_config": {
                  "title": "🏆 GERAL",
                  "subtitle": "Todos os tipos de gás",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#2c3e50"
                }
              }
            },
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "tipo-gas-proprios",
                "data_config": {
                  "group_by": "nome_tipo",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND ativo != \"N\""
                },
                "display_config": {
                  "title": "🏭 PRÓPRIOS",
                  "subtitle": "Apenas cilindros próprios",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#3498db"
                }
              }
            },
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "tipo-gas-terceiros",
                "data_config": {
                  "group_by": "nome_tipo",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND ativo != \"N\""
                },
                "display_config": {
                  "title": "🤝 TERCEIROS",
                  "subtitle": "Apenas cilindros de terceiros",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#f39c12"
                }
              }
            }
          ]
        }
      },
      "bloco10_analise_aplicacao": {
        "type": "charts_grid_section",
        "title": "ANÁLISE POR APLICAÇÃO",
        "class": "dashboard-section dashboard-section-full-width",
        "grid_class": "dashboard-section-grid-3",
        "icon": "🎯",
        "config": {
          "container_id": "analise-aplicacao-grid",
          "charts": [
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "aplicacao-geral",
                "data_config": {
                  "group_by": "nome_aplicacao",
                  "operation": "COUNT:id_cilindro",
                  "filters": "ativo != \"N\""
                },
                "display_config": {
                  "title": "🏆 GERAL",
                  "subtitle": "Todas as aplicações",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#2c3e50"
                }
              }
            },
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "aplicacao-proprios",
                "data_config": {
                  "group_by": "nome_aplicacao",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 1 AND ativo != \"N\""
                },
                "display_config": {
                  "title": "🏭 PRÓPRIOS",
                  "subtitle": "Apenas cilindros próprios",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#3498db"
                }
              }
            },
            {
              "type": "chart_bar_aggregated",
              "config": {
                "container_id": "aplicacao-terceiros",
                "data_config": {
                  "group_by": "nome_aplicacao",
                  "operation": "COUNT:id_cilindro",
                  "filters": "id_propriedade = 2 AND ativo != \"N\""
                },
                "display_config": {
                  "title": "🤝 TERCEIROS",
                  "subtitle": "Apenas cilindros de terceiros",
                  "layout": "ranking",
                  "format": "numero",
                  "decimals": 0,
                  "suffix": " cil",
                  "sort_order": "DESC",
                  "limit": 10,
                  "height": "400px",
                  "color": "#f39c12"
                }
              }
            }
          ]
        }
      }
    }
  },
  "url_documentacao": "/docs/ondevou-db-cilindros.html",
  "nome_tabela": "cilindros"
}

📝 SQL CREATE TABLE - Estrutura Completa

Comando SQL COMPLETO para criar a tabela cilindros no PostgreSQL. Esta estrutura foi extraída DIRETAMENTE do banco de dados.

🏗️ Estrutura Completa

📋 19 colunas 🔗 2 constraints 📑 15 índices ⚡ 0 triggers
code Clique para ver o SQL completo ✅ COMPLETO
-- ============================================================
-- ESTRUTURA COMPLETA DA TABELA cilindros
-- Fonte: PostgreSQL - 12/08/2026 10:24:04
-- ============================================================

CREATE TABLE public.cilindros (
    id integer NOT NULL DEFAULT nextval('cilindros_id_seq'::regclass),
    id_propriedade integer,
    id_tipo integer,
    id_aplicacao integer,
    id_capacidade integer,
    descricao varchar(255),
    referencia varchar(255),
    foto_capa varchar(255),
    foto_perfil varchar(255),
    participante integer,
    id_participante integer,
    id_fabricante integer,
    id_situacao integer DEFAULT 2,
    id_localizacao integer DEFAULT 1,
    id_unidade_capacidade integer,
    id_endereco integer DEFAULT 1,
    data timestamp DEFAULT now(),
    data_validade date,
    ativo varchar(1),
    CONSTRAINT cilindros_pkey PRIMARY KEY (id),
    CONSTRAINT 2200_221018_1_not_null CHECK (id IS NOT NULL)
);

-- ============================================================
-- ÍNDICES
-- ============================================================
CREATE UNIQUE INDEX cilindros_pk_id ON public.cilindros USING btree (id);
CREATE INDEX idx_cilindros_id_aplicacao ON public.cilindros USING btree (id_aplicacao);
CREATE INDEX idx_cilindros_id_capacidade ON public.cilindros USING btree (id_capacidade);
CREATE INDEX idx_cilindros_id_endereco ON public.cilindros USING btree (id_endereco);
CREATE INDEX idx_cilindros_id_fabricante ON public.cilindros USING btree (id_fabricante);
CREATE INDEX idx_cilindros_id_localizacao ON public.cilindros USING btree (id_localizacao);
CREATE INDEX idx_cilindros_id_participante ON public.cilindros USING btree (id_participante);
CREATE INDEX idx_cilindros_id_propriedade ON public.cilindros USING btree (id_propriedade);
CREATE INDEX idx_cilindros_id_situacao ON public.cilindros USING btree (id_situacao);
CREATE INDEX idx_cilindros_id_tipo ON public.cilindros USING btree (id_tipo);
CREATE INDEX idx_cilindros_id_unidade_capacidade ON public.cilindros USING btree (id_unidade_capacidade);
CREATE INDEX idx_cilindros_p_data ON public.cilindros USING btree (participante, data DESC);
CREATE INDEX idx_cilindros_p_id ON public.cilindros USING btree (participante, id DESC);
CREATE INDEX idx_cilindros_p_id_participante ON public.cilindros USING btree (participante, id_participante);
CREATE INDEX idx_cilindros_participante ON public.cilindros USING btree (participante);

SQL extraído DIRETAMENTE do banco de dados

📊 Comparação: JSON Config vs Banco Real

Verifique se a configuração JSON está sincronizada com a estrutura do banco de dados.

Campo Tipo (JSON) Tipo (Banco) Status
ativo text character varying ✅ OK
cheio number - ⚠️ Só no JSON
data - timestamp without time zone ❌ Só no banco
data_hora_inclusao_cilindro date - ⚠️ Só no JSON
data_hora_inclusao_enchimento date - ⚠️ Só no JSON
data_inclusao_cilindro date - ⚠️ Só no JSON
data_validade date date ✅ OK
descricao text character varying ✅ OK
foto_capa - character varying ❌ Só no banco
foto_perfil - character varying ❌ Só no banco
id number integer ✅ OK
id_aplicacao - integer ❌ Só no banco
id_capacidade - integer ❌ Só no banco
id_endereco - integer ❌ Só no banco
id_fabricante - integer ❌ Só no banco
id_localizacao - integer ❌ Só no banco
id_lote_producao number - ⚠️ Só no JSON
id_participante - integer ❌ Só no banco
id_propriedade - integer ❌ Só no banco
id_situacao - integer ❌ Só no banco
id_tipo - integer ❌ Só no banco
id_unidade_capacidade - integer ❌ Só no banco
nome_aplicacao number - ⚠️ Só no JSON
nome_capacidade number - ⚠️ Só no JSON
nome_endereco number - ⚠️ Só no JSON
nome_fabricante number - ⚠️ Só no JSON
nome_localizacao number - ⚠️ Só no JSON
nome_lote_producao text - ⚠️ Só no JSON
nome_propriedade number - ⚠️ Só no JSON
nome_situacao number - ⚠️ Só no JSON
nome_tipo number - ⚠️ Só no JSON
nome_tipo,nome_aplicacao text - ⚠️ Só no JSON
nome_tipo,nome_aplicacao,nome_capacidade text - ⚠️ Só no JSON
nome_tipo,nome_aplicacao,nome_capacidade,nome_unidade_capacidade text - ⚠️ Só no JSON
nome_tipo,nome_aplicacao,nome_unidade_capacidade text - ⚠️ Só no JSON
nome_unidade_capacidade number - ⚠️ Só no JSON
participante text integer ✅ OK
qrcode text - ⚠️ Só no JSON
razao_social_cliente number - ⚠️ Só no JSON
referencia text character varying ✅ OK
vazio number - ⚠️ Só no JSON

💡 Dica: Use esta comparação para garantir que a configuração JSON está atualizada com a estrutura do banco.
📌 Legenda: ✅ OK = presente em ambos | ⚠️ Só no JSON = pode ser um campo virtual | ❌ Só no banco = falta adicionar ao JSON

💡 Como Popular a Tabela

Exemplo prático usando o padrão OndeVou.

📋 Fluxo completo padrão

// 1. Buscar dados com getData
var dados_retorno = getData({
    'query': `SELECT * FROM view_cilindros WHERE participante = ${globais.dados_fixo.participante}`,
    'view': 'view_cilindros'
});

// 2. Definir painel e slide
var painel = globais.dados_pagina.visivel.painel;
var slide = globais.dados_pagina.visivel.slide;

// 3. Encontrar a tabela no DOM
var idTable = getIdTableFromSlide({ 'table-id': 'cilindros' });

// 4. Resetar a tabela
setTableControlsReset(idTable);

// 5. Popular a tabela
setTableControlsSetValue(idTable, dados_retorno);

🏆 Propriedade Intelectual

OndeVou.com Marca Registrada

Marca Registrada

OndeVou.com®

Propriedade Intelectual Assegurada

Processo INPI:
908765967
Titular:
ONDEVOU.COM TECNOLOGIA LTDA
CNPJ:
17.058.605/0001-36
Classificação:
Classe 42 - Serviços de TI