@wibi-global/sdk 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/artifact-schema/src/biCatalog.d.ts +3 -0
- package/dist/artifact-schema/src/biCatalog.d.ts.map +1 -0
- package/dist/artifact-schema/src/biCatalog.js +36 -0
- package/dist/artifact-schema/src/biCatalog.js.map +1 -0
- package/dist/artifact-schema/src/hash.d.ts +3 -0
- package/dist/artifact-schema/src/hash.d.ts.map +1 -0
- package/dist/artifact-schema/src/hash.js +22 -0
- package/dist/artifact-schema/src/hash.js.map +1 -0
- package/dist/artifact-schema/src/index.d.ts +6 -0
- package/dist/artifact-schema/src/index.d.ts.map +1 -0
- package/dist/artifact-schema/src/index.js +6 -0
- package/dist/artifact-schema/src/index.js.map +1 -0
- package/dist/artifact-schema/src/schema.d.ts +274 -0
- package/dist/artifact-schema/src/schema.d.ts.map +1 -0
- package/dist/artifact-schema/src/schema.js +165 -0
- package/dist/artifact-schema/src/schema.js.map +1 -0
- package/dist/artifact-schema/src/types.d.ts +88 -0
- package/dist/artifact-schema/src/types.d.ts.map +1 -0
- package/dist/artifact-schema/src/types.js +2 -0
- package/dist/artifact-schema/src/types.js.map +1 -0
- package/dist/artifact-schema/src/validate.d.ts +4 -0
- package/dist/artifact-schema/src/validate.d.ts.map +1 -0
- package/dist/artifact-schema/src/validate.js +101 -0
- package/dist/artifact-schema/src/validate.js.map +1 -0
- package/dist/instructions/AGENTS.md +92 -0
- package/dist/instructions/AGENT_COMMON.md +78 -0
- package/dist/instructions/CLAUDE.md +54 -0
- package/dist/instructions/CODEX.md +38 -0
- package/dist/instructions/GEMINI.md +35 -0
- package/dist/prompts/authoring.wbp +61 -0
- package/dist/sdk/src/builder.d.ts.map +1 -0
- package/dist/sdk/src/builder.js.map +1 -0
- package/dist/sdk/src/context.d.ts.map +1 -0
- package/dist/sdk/src/context.js.map +1 -0
- package/dist/sdk/src/dashboard-context.d.ts.map +1 -0
- package/dist/sdk/src/dashboard-context.js.map +1 -0
- package/dist/sdk/src/dashboard-spec.d.ts.map +1 -0
- package/dist/sdk/src/dashboard-spec.js.map +1 -0
- package/dist/sdk/src/data/ctx.wbx +114 -0
- package/dist/sdk/src/data/index.d.ts.map +1 -0
- package/dist/sdk/src/data/index.js.map +1 -0
- package/dist/sdk/src/data/queries.wbx +330 -0
- package/dist/sdk/src/data/serialization/dashboard-serialization.types.d.ts.map +1 -0
- package/dist/sdk/src/data/serialization/dashboard-serialization.types.js.map +1 -0
- package/dist/sdk/src/data/serialization/dashboard-serialization.types.ts +430 -0
- package/dist/sdk/src/data/serialization/index.d.ts.map +1 -0
- package/dist/sdk/src/data/serialization/index.js.map +1 -0
- package/dist/sdk/src/data/syntax.wbx +155 -0
- package/dist/sdk/src/data/view-categories.wbx +88 -0
- package/dist/sdk/src/data/views.wbx +1118 -0
- package/dist/sdk/src/data/widgets.wbx +2477 -0
- package/dist/sdk/src/data.d.ts.map +1 -0
- package/dist/sdk/src/data.js.map +1 -0
- package/dist/sdk/src/index.d.ts.map +1 -0
- package/dist/sdk/src/index.js.map +1 -0
- package/package.json +2 -2
- package/dist/builder.d.ts.map +0 -1
- package/dist/builder.js.map +0 -1
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js.map +0 -1
- package/dist/dashboard-context.d.ts.map +0 -1
- package/dist/dashboard-context.js.map +0 -1
- package/dist/dashboard-spec.d.ts.map +0 -1
- package/dist/dashboard-spec.js.map +0 -1
- package/dist/data/index.d.ts.map +0 -1
- package/dist/data/index.js.map +0 -1
- package/dist/data/serialization/dashboard-serialization.types.d.ts.map +0 -1
- package/dist/data/serialization/dashboard-serialization.types.js.map +0 -1
- package/dist/data/serialization/index.d.ts.map +0 -1
- package/dist/data/serialization/index.js.map +0 -1
- package/dist/data.d.ts.map +0 -1
- package/dist/data.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- /package/dist/{builder.d.ts → sdk/src/builder.d.ts} +0 -0
- /package/dist/{builder.js → sdk/src/builder.js} +0 -0
- /package/dist/{context.d.ts → sdk/src/context.d.ts} +0 -0
- /package/dist/{context.js → sdk/src/context.js} +0 -0
- /package/dist/{dashboard-context.d.ts → sdk/src/dashboard-context.d.ts} +0 -0
- /package/dist/{dashboard-context.js → sdk/src/dashboard-context.js} +0 -0
- /package/dist/{dashboard-spec.d.ts → sdk/src/dashboard-spec.d.ts} +0 -0
- /package/dist/{dashboard-spec.js → sdk/src/dashboard-spec.js} +0 -0
- /package/dist/{data → sdk/src/data}/index.d.ts +0 -0
- /package/dist/{data → sdk/src/data}/index.js +0 -0
- /package/dist/{data → sdk/src/data}/serialization/dashboard-serialization.types.d.ts +0 -0
- /package/dist/{data → sdk/src/data}/serialization/dashboard-serialization.types.js +0 -0
- /package/dist/{data → sdk/src/data}/serialization/index.d.ts +0 -0
- /package/dist/{data → sdk/src/data}/serialization/index.js +0 -0
- /package/dist/{data.d.ts → sdk/src/data.d.ts} +0 -0
- /package/dist/{data.js → sdk/src/data.js} +0 -0
- /package/dist/{index.d.ts → sdk/src/index.d.ts} +0 -0
- /package/dist/{index.js → sdk/src/index.js} +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.wibi.dev/dashboard-context.schema.json",
|
|
4
|
+
"title": "Wibi Dashboard Context",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"version",
|
|
9
|
+
"project",
|
|
10
|
+
"requirements",
|
|
11
|
+
"defaults",
|
|
12
|
+
"queries",
|
|
13
|
+
"widgets",
|
|
14
|
+
"projectState"
|
|
15
|
+
],
|
|
16
|
+
"properties": {
|
|
17
|
+
"version": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"const": "1.0.0"
|
|
20
|
+
},
|
|
21
|
+
"project": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"additionalProperties": false,
|
|
24
|
+
"required": ["name", "slug", "category", "description", "template"],
|
|
25
|
+
"properties": {
|
|
26
|
+
"name": { "type": "string", "minLength": 1 },
|
|
27
|
+
"slug": { "type": "string", "minLength": 1 },
|
|
28
|
+
"category": { "type": "string", "minLength": 1 },
|
|
29
|
+
"description": { "type": "string" },
|
|
30
|
+
"template": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"enum": ["dashboard", "empty", "filters"]
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"requirements": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"additionalProperties": false,
|
|
39
|
+
"required": ["businessContext", "kpis", "charts", "grids", "filters", "sqlSources"],
|
|
40
|
+
"properties": {
|
|
41
|
+
"businessContext": { "type": "string" },
|
|
42
|
+
"kpis": {
|
|
43
|
+
"type": "array",
|
|
44
|
+
"items": { "type": "string" }
|
|
45
|
+
},
|
|
46
|
+
"charts": {
|
|
47
|
+
"type": "array",
|
|
48
|
+
"items": { "type": "string" }
|
|
49
|
+
},
|
|
50
|
+
"grids": {
|
|
51
|
+
"type": "array",
|
|
52
|
+
"items": { "type": "string" }
|
|
53
|
+
},
|
|
54
|
+
"filters": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"items": { "type": "string" }
|
|
57
|
+
},
|
|
58
|
+
"sqlSources": {
|
|
59
|
+
"type": "array",
|
|
60
|
+
"items": { "type": "string" }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"defaults": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"additionalProperties": false,
|
|
67
|
+
"required": ["connectionId", "filters"],
|
|
68
|
+
"properties": {
|
|
69
|
+
"connectionId": {
|
|
70
|
+
"type": ["integer", "null"],
|
|
71
|
+
"minimum": 1
|
|
72
|
+
},
|
|
73
|
+
"filters": {
|
|
74
|
+
"type": "array",
|
|
75
|
+
"items": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"enum": ["date", "companies"]
|
|
78
|
+
},
|
|
79
|
+
"uniqueItems": true
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"queries": {
|
|
84
|
+
"type": "array",
|
|
85
|
+
"items": {
|
|
86
|
+
"type": "object",
|
|
87
|
+
"additionalProperties": false,
|
|
88
|
+
"required": ["id", "repoId", "notes"],
|
|
89
|
+
"properties": {
|
|
90
|
+
"id": { "type": "string", "minLength": 1 },
|
|
91
|
+
"repoId": { "type": "string", "minLength": 1 },
|
|
92
|
+
"notes": { "type": "string" }
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"widgets": {
|
|
97
|
+
"type": "array",
|
|
98
|
+
"items": {
|
|
99
|
+
"type": "object",
|
|
100
|
+
"additionalProperties": false,
|
|
101
|
+
"required": ["id", "type", "notes"],
|
|
102
|
+
"properties": {
|
|
103
|
+
"id": { "type": "string", "minLength": 1 },
|
|
104
|
+
"type": { "type": "string", "minLength": 1 },
|
|
105
|
+
"notes": { "type": "string" }
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"projectState": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"enum": ["draft", "validated", "serialized", "deployed"]
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data/index.ts"],"names":[],"mappings":"AAMA,cAAc,0BAA0B,CAAA;AAExC,eAAO,MAAM,gBAAgB,KAAqB,CAAA;AAClD,eAAO,MAAM,eAAe,KAAoB,CAAA;AAChD,eAAO,MAAM,iBAAiB,KAAsB,CAAA;AACpD,eAAO,MAAM,wBAAwB,KAA6B,CAAA;AAClE,eAAO,MAAM,aAAa,KAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,cAAc,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACnE,OAAO,iBAAiB,MAAM,aAAa,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACjE,OAAO,mBAAmB,MAAM,eAAe,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrE,OAAO,0BAA0B,MAAM,WAAW,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACxE,OAAO,gBAAgB,MAAM,eAAe,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAElE,cAAc,0BAA0B,CAAA;AAExC,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAA;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAA;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAA;AACpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAA;AAClE,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
{
|
|
2
|
+
"__CONTEXT_BLOCK__": {
|
|
3
|
+
"block_name": "DB_QUERY_PATTERNS",
|
|
4
|
+
"block_role": "SOURCE_OF_TRUTH_FOR_SQL_QUERY_PATTERNS",
|
|
5
|
+
"llm_instruction": "Este bloco contém padrões de queries SQL ClickHouse organizados por domínio de negócio. Use estes padrões como base para gerar queries corretas. Os placeholders ${startDate} e ${endDate} devem ser substituídos por datas no formato YYYY-MM-DD. Sempre filtre is_deleted = 0 em views que possuem este campo. Para vendas válidas (faturadas), use status IN (2, 3, 4) e bonif = 0."
|
|
6
|
+
},
|
|
7
|
+
|
|
8
|
+
"comercial": {
|
|
9
|
+
"__doc__": "Métricas comerciais baseadas em vw_vendas_validas. Filtro padrão de vendas válidas: status IN (2,3,4) AND bonif = 0 AND is_deleted = 0. Status: 1=ABERTO, 2=FATURADO, 3=ENTREGA, 4=FECHADO, 12=CANCELADO.",
|
|
10
|
+
|
|
11
|
+
"faturamento": {
|
|
12
|
+
"__doc__": "Faturamento é a soma do valor total das vendas faturadas (status 2,3,4) excluindo bonificações. É a métrica principal de receita bruta.",
|
|
13
|
+
"sql": "SELECT sum(valor_total) AS faturamento FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0"
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
"faturamento_por_mes": {
|
|
17
|
+
"__doc__": "Faturamento agrupado por mês. Usar toStartOfMonth para agrupar e monthName para label legível.",
|
|
18
|
+
"sql": "SELECT toStartOfMonth(data_venda) AS mes, monthName(data_venda) AS nome_mes, sum(valor_total) AS faturamento, count(DISTINCT id_venda) AS pedidos FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0 GROUP BY mes, nome_mes ORDER BY mes"
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
"faturamento_por_vendedor": {
|
|
22
|
+
"__doc__": "Ranking de vendedores por faturamento. Usar any() para campos de dimensão já agrupados.",
|
|
23
|
+
"sql": "SELECT id_vendedor, any(nome_vendedor) AS vendedor, any(area) AS area, sum(valor_total) AS faturamento, count(DISTINCT id_venda) AS pedidos, count(DISTINCT id_cliente) AS clientes FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0 GROUP BY id_vendedor ORDER BY faturamento DESC"
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
"faturamento_por_produto": {
|
|
27
|
+
"__doc__": "Ranking de produtos por faturamento. Inclui volume e dados da hierarquia de produto.",
|
|
28
|
+
"sql": "SELECT id_produto, any(descricao_produto) AS produto, any(fornecedor) AS fornecedor, any(secao) AS secao, any(grupo) AS grupo, sum(valor_total) AS faturamento, sum(quantidade) AS volume FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0 GROUP BY id_produto ORDER BY faturamento DESC"
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
"faturamento_por_cliente": {
|
|
32
|
+
"__doc__": "Ranking de clientes por faturamento. Traz nome e região da rota.",
|
|
33
|
+
"sql": "SELECT id_cliente, any(nome_completo_cliente) AS cliente, any(area) AS area, sum(valor_total) AS faturamento, count(DISTINCT id_venda) AS pedidos FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0 GROUP BY id_cliente ORDER BY faturamento DESC"
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
"volume": {
|
|
37
|
+
"__doc__": "Volume total vendido (soma de quantidades). Pode ser agrupado por produto, vendedor, etc.",
|
|
38
|
+
"sql": "SELECT sum(quantidade) AS volume_total, count(DISTINCT id_produto) AS mix_produtos FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0"
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
"ticket_medio": {
|
|
42
|
+
"__doc__": "Ticket médio = faturamento / número de pedidos distintos. Indica o valor médio por transação.",
|
|
43
|
+
"sql": "SELECT sum(valor_total) / count(DISTINCT id_venda) AS ticket_medio FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0"
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
"margem": {
|
|
47
|
+
"__doc__": "Margem bruta percentual = (faturamento - custo) / faturamento * 100. Custo é calculado como custo_ultima_entrada * quantidade.",
|
|
48
|
+
"sql": "SELECT sum(valor_total) AS faturamento, sum(custo_ultima_entrada * quantidade) AS custo_total, (sum(valor_total) - sum(custo_ultima_entrada * quantidade)) AS lucro_bruto, if(sum(valor_total) = 0, 0, (sum(valor_total) - sum(custo_ultima_entrada * quantidade)) / sum(valor_total) * 100) AS margem_percentual FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0"
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
"margem_por_produto": {
|
|
52
|
+
"__doc__": "Margem bruta por produto. Permite identificar produtos mais e menos rentáveis.",
|
|
53
|
+
"sql": "SELECT id_produto, any(descricao_produto) AS produto, any(fornecedor) AS fornecedor, sum(valor_total) AS faturamento, sum(custo_ultima_entrada * quantidade) AS custo, sum(valor_total) - sum(custo_ultima_entrada * quantidade) AS lucro, if(sum(valor_total) = 0, 0, (sum(valor_total) - sum(custo_ultima_entrada * quantidade)) / sum(valor_total) * 100) AS margem_percentual FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0 GROUP BY id_produto ORDER BY faturamento DESC"
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
"desconto_medio": {
|
|
57
|
+
"__doc__": "Desconto médio praticado. Compara preço de tabela vs preço efetivo de venda.",
|
|
58
|
+
"sql": "SELECT if(sum(preco_tabela * quantidade) = 0, 0, (1 - sum(valor_total) / sum(preco_tabela * quantidade)) * 100) AS desconto_medio_percentual FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0 AND preco_tabela > 0"
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
"devolucoes": {
|
|
62
|
+
"__doc__": "Vendas canceladas (devolvidas). Status 12 = CANCELADO.",
|
|
63
|
+
"sql": "SELECT count(DISTINCT id_venda) AS total_devolucoes, sum(valor_total) AS valor_devolvido FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status = 12 AND is_deleted = 0"
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
"bonificacoes": {
|
|
67
|
+
"__doc__": "Vendas de bonificação (brinde/amostra). bonif = 1 indica bonificação.",
|
|
68
|
+
"sql": "SELECT count(DISTINCT id_venda) AS total_bonif, sum(valor_total) AS valor_bonif FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 1 AND is_deleted = 0"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
"cobertura_positivacao": {
|
|
73
|
+
"__doc__": "Métricas de cobertura e positivação de clientes. Cobertura = percentual de clientes que compraram no período. Positivação = frequência semanal de compras.",
|
|
74
|
+
|
|
75
|
+
"cobertura_geral": {
|
|
76
|
+
"__doc__": "Cobertura = clientes que compraram / base total de clientes ativos. A base ativa geralmente considera clientes que compraram nos últimos 6 meses.",
|
|
77
|
+
"sql": "WITH compraram AS (SELECT uniqExact(id_cliente) AS qtd FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND is_deleted = 0), base_ativa AS (SELECT uniqExact(id_cliente) AS qtd FROM vw_vendas_validas WHERE data_venda >= subtractMonths(toDate('${endDate}'), 6) AND status IN (2, 3, 4) AND is_deleted = 0) SELECT compraram.qtd AS clientes_compraram, base_ativa.qtd AS base_clientes, if(base_ativa.qtd = 0, 0, compraram.qtd / base_ativa.qtd * 100) AS cobertura_percentual FROM compraram, base_ativa"
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
"cobertura_por_rota": {
|
|
81
|
+
"__doc__": "Cobertura por rota. Compara clientes da rota (vw_clientes_rotas) com clientes que efetivamente compraram.",
|
|
82
|
+
"sql": "WITH clientes_rota AS (SELECT cr.id_rota, count(DISTINCT cr.id_cliente) AS total_clientes FROM vw_clientes_rotas cr WHERE cr.is_deleted = 0 GROUP BY cr.id_rota), compraram AS (SELECT id_rota, uniqExact(id_cliente) AS clientes_compraram FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND is_deleted = 0 GROUP BY id_rota) SELECT r.id_rota, any(r.estrutura) AS rota, any(r.area) AS area, cr.total_clientes, ifNull(c.clientes_compraram, 0) AS clientes_compraram, if(cr.total_clientes = 0, 0, ifNull(c.clientes_compraram, 0) / cr.total_clientes * 100) AS cobertura_percentual FROM vw_rotas r LEFT JOIN clientes_rota cr ON r.id_rota = cr.id_rota LEFT JOIN compraram c ON r.id_rota = c.id_rota WHERE r.is_deleted = 0 AND r.ativo = 1 GROUP BY r.id_rota, cr.total_clientes, c.clientes_compraram ORDER BY cobertura_percentual DESC"
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
"positivacao_semanal": {
|
|
86
|
+
"__doc__": "Positivação semanal de clientes. Usa a view materializada vw_positivacao_semanal_cliente que já tem semana1..semana53 (1=comprou, 0=não comprou). Campos total_semanas_compradas e percentual_frequencia já calculados.",
|
|
87
|
+
"sql": "SELECT id_cliente, regiao, zona, area, setor, rota, total_semanas_compradas, percentual_frequencia FROM vw_positivacao_semanal_cliente WHERE ano = toYear(today()) AND id_empresa = ${empresaId} ORDER BY percentual_frequencia DESC"
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
"positivacao_por_fornecedor": {
|
|
91
|
+
"__doc__": "Positivação por fornecedor. Mede penetração de cada fornecedor/marca na carteira de clientes.",
|
|
92
|
+
"sql": "SELECT fornecedor, count(DISTINCT id_cliente) AS clientes_compraram, avg(percentual_frequencia) AS frequencia_media, avg(total_semanas_compradas) AS semanas_media FROM vw_positivacao_semanal_fornecedor WHERE ano = toYear(today()) AND id_empresa = ${empresaId} GROUP BY fornecedor ORDER BY clientes_compraram DESC"
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
"mix_produtos_cliente": {
|
|
96
|
+
"__doc__": "Mix de produtos = quantidade de produtos distintos que cada cliente comprou no período.",
|
|
97
|
+
"sql": "SELECT id_cliente, any(nome_completo_cliente) AS cliente, count(DISTINCT id_produto) AS mix, sum(valor_total) AS faturamento FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0 GROUP BY id_cliente ORDER BY mix DESC"
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
"financeiro": {
|
|
102
|
+
"__doc__": "Métricas financeiras usando vw_financ_cr_parcelas (receber), vw_financ_cp_parcelas (pagar) e vw_financ_mov_contas (movimentações). Sempre usar ifNull() para campos Nullable de valor.",
|
|
103
|
+
|
|
104
|
+
"contas_receber_aberto": {
|
|
105
|
+
"__doc__": "Total de contas a receber em aberto. Saldo = valor_original - valor_pago (usando greatest para evitar negativos).",
|
|
106
|
+
"sql": "SELECT sum(greatest(ifNull(valor_original, 0) - ifNull(valor_pago, 0), 0)) AS total_a_receber FROM vw_financ_cr_parcelas WHERE is_deleted = 0 AND ifNull(valor_original, 0) > ifNull(valor_pago, 0)"
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
"contas_pagar_aberto": {
|
|
110
|
+
"__doc__": "Total de contas a pagar em aberto.",
|
|
111
|
+
"sql": "SELECT sum(greatest(ifNull(valor_original, 0) - ifNull(valor_pago, 0), 0)) AS total_a_pagar FROM vw_financ_cp_parcelas WHERE is_deleted = 0 AND ifNull(valor_original, 0) > ifNull(valor_pago, 0)"
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
"inadimplencia": {
|
|
115
|
+
"__doc__": "Inadimplência = valor vencido e não pago / valor total original. Título vencido: data_vencimento < today() e valor_pago < valor_original.",
|
|
116
|
+
"sql": "SELECT if(sum(ifNull(valor_original, 0)) = 0, 0, sumIf(greatest(ifNull(valor_original, 0) - ifNull(valor_pago, 0), 0), toDate(data_vencimento) < today() AND ifNull(valor_original, 0) > ifNull(valor_pago, 0)) / sum(ifNull(valor_original, 0)) * 100) AS inadimplencia_percentual, sumIf(greatest(ifNull(valor_original, 0) - ifNull(valor_pago, 0), 0), toDate(data_vencimento) < today() AND ifNull(valor_original, 0) > ifNull(valor_pago, 0)) AS valor_inadimplente FROM vw_financ_cr_parcelas WHERE is_deleted = 0"
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
"aging_receber": {
|
|
120
|
+
"__doc__": "Aging de contas a receber em faixas: A vencer, 1-30, 31-60, 61-90, >90 dias. Usar multiIf com dateDiff para classificar e indexOf para ordenar.",
|
|
121
|
+
"sql": "SELECT multiIf(dateDiff('day', toDate(data_vencimento), today()) <= 0, 'A vencer', dateDiff('day', toDate(data_vencimento), today()) <= 30, '1-30 dias', dateDiff('day', toDate(data_vencimento), today()) <= 60, '31-60 dias', dateDiff('day', toDate(data_vencimento), today()) <= 90, '61-90 dias', '>90 dias') AS faixa, sum(greatest(ifNull(valor_original, 0) - ifNull(valor_pago, 0), 0)) AS valor FROM vw_financ_cr_parcelas WHERE is_deleted = 0 AND ifNull(valor_original, 0) > ifNull(valor_pago, 0) GROUP BY faixa ORDER BY indexOf(['A vencer', '1-30 dias', '31-60 dias', '61-90 dias', '>90 dias'], faixa)"
|
|
122
|
+
},
|
|
123
|
+
|
|
124
|
+
"aging_pagar": {
|
|
125
|
+
"__doc__": "Aging de contas a pagar nas mesmas faixas do aging de receber.",
|
|
126
|
+
"sql": "SELECT multiIf(dateDiff('day', toDate(data_vencimento), today()) <= 0, 'A vencer', dateDiff('day', toDate(data_vencimento), today()) <= 30, '1-30 dias', dateDiff('day', toDate(data_vencimento), today()) <= 60, '31-60 dias', dateDiff('day', toDate(data_vencimento), today()) <= 90, '61-90 dias', '>90 dias') AS faixa, sum(greatest(ifNull(valor_original, 0) - ifNull(valor_pago, 0), 0)) AS valor FROM vw_financ_cp_parcelas WHERE is_deleted = 0 AND ifNull(valor_original, 0) > ifNull(valor_pago, 0) GROUP BY faixa ORDER BY indexOf(['A vencer', '1-30 dias', '31-60 dias', '61-90 dias', '>90 dias'], faixa)"
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
"pmr": {
|
|
130
|
+
"__doc__": "PMR (Prazo Médio de Recebimento) = média de dias entre lançamento e pagamento. Equivalente ao DSO (Days Sales Outstanding) internacional.",
|
|
131
|
+
"sql": "SELECT avgIf(dateDiff('day', toDate(data_lancamento), toDate(data_pagamento)), data_pagamento IS NOT NULL AND data_lancamento IS NOT NULL) AS pmr FROM vw_financ_cr_parcelas WHERE is_deleted = 0 AND toDate(data_pagamento) >= toDate('${startDate}') AND toDate(data_pagamento) <= toDate('${endDate}')"
|
|
132
|
+
},
|
|
133
|
+
|
|
134
|
+
"pmp": {
|
|
135
|
+
"__doc__": "PMP (Prazo Médio de Pagamento) = média de dias entre lançamento e pagamento a fornecedores. Equivalente ao DPO (Days Payable Outstanding).",
|
|
136
|
+
"sql": "SELECT avgIf(dateDiff('day', toDate(data_lancamento), toDate(data_pagamento)), data_pagamento IS NOT NULL AND data_lancamento IS NOT NULL) AS pmp FROM vw_financ_cp_parcelas WHERE is_deleted = 0 AND toDate(data_pagamento) >= toDate('${startDate}') AND toDate(data_pagamento) <= toDate('${endDate}')"
|
|
137
|
+
},
|
|
138
|
+
|
|
139
|
+
"capital_giro": {
|
|
140
|
+
"__doc__": "Capital de giro = contas a receber em aberto - contas a pagar em aberto. Positivo = mais dinheiro preso em recebíveis.",
|
|
141
|
+
"sql": "WITH cr AS (SELECT sum(greatest(ifNull(valor_original, 0) - ifNull(valor_pago, 0), 0)) AS total FROM vw_financ_cr_parcelas WHERE is_deleted = 0 AND ifNull(valor_original, 0) > ifNull(valor_pago, 0)), cp AS (SELECT sum(greatest(ifNull(valor_original, 0) - ifNull(valor_pago, 0), 0)) AS total FROM vw_financ_cp_parcelas WHERE is_deleted = 0 AND ifNull(valor_original, 0) > ifNull(valor_pago, 0)) SELECT cr.total AS contas_receber, cp.total AS contas_pagar, cr.total - cp.total AS capital_giro FROM cr, cp"
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
"ciclo_financeiro": {
|
|
145
|
+
"__doc__": "Ciclo financeiro = PMR - PMP. Positivo = empresa precisa financiar o ciclo. Negativo = fornecedores financiam a operação.",
|
|
146
|
+
"sql": "WITH cr AS (SELECT avgIf(dateDiff('day', toDate(data_lancamento), toDate(data_pagamento)), data_pagamento IS NOT NULL AND data_lancamento IS NOT NULL) AS pmr FROM vw_financ_cr_parcelas WHERE is_deleted = 0 AND toDate(data_pagamento) >= toDate('${startDate}')), cp AS (SELECT avgIf(dateDiff('day', toDate(data_lancamento), toDate(data_pagamento)), data_pagamento IS NOT NULL AND data_lancamento IS NOT NULL) AS pmp FROM vw_financ_cp_parcelas WHERE is_deleted = 0 AND toDate(data_pagamento) >= toDate('${startDate}')) SELECT ifNull(if(isNaN(cr.pmr), 0, cr.pmr), 0) AS pmr, ifNull(if(isNaN(cp.pmp), 0, cp.pmp), 0) AS pmp, ifNull(if(isNaN(cr.pmr), 0, cr.pmr), 0) - ifNull(if(isNaN(cp.pmp), 0, cp.pmp), 0) AS ciclo_financeiro FROM cr, cp"
|
|
147
|
+
},
|
|
148
|
+
|
|
149
|
+
"fluxo_caixa_diario": {
|
|
150
|
+
"__doc__": "Fluxo de caixa diário realizado. Entradas (tipo=1) vs saídas (tipo=2) de vw_financ_mov_contas.",
|
|
151
|
+
"sql": "SELECT toDate(data_movimento) AS data, formatDateTime(toDate(data_movimento), '%d/%m') AS label, sumIf(ifNull(valor, 0), tipo = 1) AS entradas, sumIf(ifNull(valor, 0), tipo = 2) AS saidas, sumIf(ifNull(valor, 0), tipo = 1) - sumIf(ifNull(valor, 0), tipo = 2) AS saldo_dia FROM vw_financ_mov_contas WHERE is_deleted = 0 AND toDate(data_movimento) BETWEEN toDate('${startDate}') AND toDate('${endDate}') GROUP BY data, label ORDER BY data"
|
|
152
|
+
},
|
|
153
|
+
|
|
154
|
+
"dre_categorias": {
|
|
155
|
+
"__doc__": "DRE simplificado por categoria (plano de contas). Receitas vs despesas agrupadas por descrição da categoria.",
|
|
156
|
+
"sql": "SELECT descricao_categoria, sum(ifNull(valor_original, 0)) AS valor FROM vw_financ_cr_parcelas WHERE is_deleted = 0 AND toDate(data_lancamento) BETWEEN toDate('${startDate}') AND toDate('${endDate}') AND descricao_categoria != '' GROUP BY descricao_categoria ORDER BY valor DESC"
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
"estoque": {
|
|
161
|
+
"__doc__": "Métricas de estoque usando vw_estoque_operacoes. Operação 1 = entrada, operação 2 = saída. Sempre filtrar estorno = 0 e is_deleted = 0.",
|
|
162
|
+
|
|
163
|
+
"movimentacoes_resumo": {
|
|
164
|
+
"__doc__": "Resumo de movimentações de estoque: total de entradas, saídas e saldo líquido no período.",
|
|
165
|
+
"sql": "SELECT countIf(estorno = 0 AND is_deleted = 0) AS total_movimentacoes, sumIf(ifNull(quantidade, 0), operacao = 1 AND estorno = 0 AND is_deleted = 0) AS total_entradas, sumIf(ifNull(quantidade, 0), operacao = 2 AND estorno = 0 AND is_deleted = 0) AS total_saidas, sumIf(ifNull(quantidade, 0), operacao = 1 AND estorno = 0 AND is_deleted = 0) - sumIf(ifNull(quantidade, 0), operacao = 2 AND estorno = 0 AND is_deleted = 0) AS saldo FROM vw_estoque_operacoes WHERE is_deleted = 0 AND toDate(data_operacao) BETWEEN toDate('${startDate}') AND toDate('${endDate}')"
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
"movimentacoes_por_produto": {
|
|
169
|
+
"__doc__": "Movimentações agrupadas por produto com entradas, saídas e saldo.",
|
|
170
|
+
"sql": "SELECT e.id_produto, any(p.descricao) AS produto, any(p.unidade) AS unidade, sumIf(ifNull(e.quantidade, 0), e.operacao = 1 AND e.estorno = 0) AS entradas, sumIf(ifNull(e.quantidade, 0), e.operacao = 2 AND e.estorno = 0) AS saidas, sumIf(ifNull(e.quantidade, 0), e.operacao = 1 AND e.estorno = 0) - sumIf(ifNull(e.quantidade, 0), e.operacao = 2 AND e.estorno = 0) AS saldo FROM vw_estoque_operacoes e INNER JOIN vw_produtos p ON e.id_produto = p.id_produto AND e.id_coligada = p.id_coligada WHERE e.is_deleted = 0 AND e.estorno = 0 AND toDate(e.data_operacao) BETWEEN toDate('${startDate}') AND toDate('${endDate}') GROUP BY e.id_produto ORDER BY saidas DESC"
|
|
171
|
+
},
|
|
172
|
+
|
|
173
|
+
"giro_estoque": {
|
|
174
|
+
"__doc__": "Giro de estoque = saídas no período / saldo médio. Indica quantas vezes o estoque foi renovado.",
|
|
175
|
+
"sql": "WITH saidas AS (SELECT id_produto, sumIf(ifNull(quantidade, 0), operacao = 2 AND estorno = 0) AS total_saidas FROM vw_estoque_operacoes WHERE is_deleted = 0 AND toDate(data_operacao) BETWEEN toDate('${startDate}') AND toDate('${endDate}') GROUP BY id_produto), saldo AS (SELECT id_produto, sumIf(ifNull(quantidade, 0), operacao = 1 AND estorno = 0) - sumIf(ifNull(quantidade, 0), operacao = 2 AND estorno = 0) AS saldo_atual FROM vw_estoque_operacoes WHERE is_deleted = 0 AND estorno = 0 GROUP BY id_produto) SELECT s.id_produto, any(p.descricao) AS produto, s.total_saidas, sl.saldo_atual, if(sl.saldo_atual = 0, 0, s.total_saidas / sl.saldo_atual) AS giro FROM saidas s INNER JOIN saldo sl ON s.id_produto = sl.id_produto INNER JOIN vw_produtos p ON s.id_produto = p.id_produto GROUP BY s.id_produto, s.total_saidas, sl.saldo_atual ORDER BY giro DESC"
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
|
|
179
|
+
"metas": {
|
|
180
|
+
"__doc__": "Métricas de metas vs realizado. vw_metas contém cabeçalhos e vw_metas_produtos os detalhes por produto/vendedor/rota.",
|
|
181
|
+
|
|
182
|
+
"meta_vs_realizado_vendedor": {
|
|
183
|
+
"__doc__": "Comparativo meta vs realizado por vendedor. Cruza vw_metas_produtos com vendas reais do período.",
|
|
184
|
+
"sql": "WITH meta AS (SELECT mp.id_vendedor, sum(ifNull(mp.meta_faturamento, 0)) AS meta_faturamento, sum(ifNull(mp.meta_volume, 0)) AS meta_volume FROM vw_metas m INNER JOIN vw_metas_produtos mp ON m.id_meta = mp.id_meta WHERE m.is_deleted = 0 AND mp.is_deleted = 0 AND m.ano = toYear(toDate('${startDate}')) AND m.mes = toMonth(toDate('${startDate}')) GROUP BY mp.id_vendedor), realizado AS (SELECT id_vendedor, sum(valor_total) AS faturamento, sum(quantidade) AS volume FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0 GROUP BY id_vendedor) SELECT v.id_vendedor, any(v.nome_completo) AS vendedor, ifNull(m.meta_faturamento, 0) AS meta, ifNull(r.faturamento, 0) AS realizado, if(ifNull(m.meta_faturamento, 0) = 0, 0, ifNull(r.faturamento, 0) / m.meta_faturamento * 100) AS atingimento_percentual FROM vw_vendedores v LEFT JOIN meta m ON v.id_vendedor = m.id_vendedor LEFT JOIN realizado r ON v.id_vendedor = r.id_vendedor WHERE v.is_deleted = 0 AND v.ativo = 1 GROUP BY v.id_vendedor, m.meta_faturamento, r.faturamento ORDER BY atingimento_percentual DESC"
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
"meta_vs_realizado_mensal": {
|
|
188
|
+
"__doc__": "Comparativo meta vs realizado mês a mês no ano.",
|
|
189
|
+
"sql": "WITH meta AS (SELECT m.ano, m.mes, sum(ifNull(mp.meta_faturamento, 0)) AS meta FROM vw_metas m INNER JOIN vw_metas_produtos mp ON m.id_meta = mp.id_meta WHERE m.is_deleted = 0 AND mp.is_deleted = 0 AND m.ano = toYear(today()) GROUP BY m.ano, m.mes), realizado AS (SELECT toYear(data_venda) AS ano, toMonth(data_venda) AS mes, sum(valor_total) AS faturamento FROM vw_vendas_validas WHERE toYear(data_venda) = toYear(today()) AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0 GROUP BY ano, mes) SELECT m.mes, ifNull(m.meta, 0) AS meta, ifNull(r.faturamento, 0) AS realizado, if(ifNull(m.meta, 0) = 0, 0, ifNull(r.faturamento, 0) / m.meta * 100) AS atingimento FROM meta m LEFT JOIN realizado r ON m.ano = r.ano AND m.mes = r.mes ORDER BY m.mes"
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
"producao": {
|
|
194
|
+
"__doc__": "Métricas de produção usando vw_ordem_producao e suas tabelas filhas. Status da OP: 0=Aberta, 1=Em Andamento, 2=Finalizada, 3=Cancelada.",
|
|
195
|
+
|
|
196
|
+
"ordens_producao_resumo": {
|
|
197
|
+
"__doc__": "Resumo de ordens de produção por status no período.",
|
|
198
|
+
"sql": "SELECT multiIf(opr_status = 0, 'Aberta', opr_status = 1, 'Em Andamento', opr_status = 2, 'Finalizada', opr_status = 3, 'Cancelada', 'Outros') AS status_nome, count() AS quantidade, countIf(opr_df IS NOT NULL AND opr_df < now() AND opr_status IN (0, 1)) AS em_atraso FROM vw_ordem_producao WHERE opr_data IS NOT NULL AND toDate(opr_data) BETWEEN toDate('${startDate}') AND toDate('${endDate}') GROUP BY status_nome ORDER BY indexOf(['Aberta', 'Em Andamento', 'Finalizada', 'Cancelada', 'Outros'], status_nome)"
|
|
199
|
+
},
|
|
200
|
+
|
|
201
|
+
"ordens_producao_por_mes": {
|
|
202
|
+
"__doc__": "Volume de ordens de produção agrupado por mês e status.",
|
|
203
|
+
"sql": "SELECT toStartOfMonth(toDate(opr_data)) AS mes, count() AS total_ops, countIf(opr_status = 2) AS finalizadas, countIf(opr_status IN (0, 1)) AS em_aberto, countIf(opr_status = 3) AS canceladas FROM vw_ordem_producao WHERE opr_data IS NOT NULL AND toDate(opr_data) BETWEEN toDate('${startDate}') AND toDate('${endDate}') GROUP BY mes ORDER BY mes"
|
|
204
|
+
},
|
|
205
|
+
|
|
206
|
+
"producao_itens_por_produto": {
|
|
207
|
+
"__doc__": "Produtos mais produzidos. Cruza itens da OP com cadastro de produtos.",
|
|
208
|
+
"sql": "SELECT i.pr_codigo AS id_produto, any(p.descricao) AS produto, sum(ifNull(i.opri_qtd_real, ifNull(i.opri_qtd, 0))) AS quantidade_produzida, count(DISTINCT i.opr_id) AS total_ops, avg(ifNull(i.opri_custo, 0)) AS custo_medio FROM vw_ordem_producao_itens i INNER JOIN vw_produtos p ON i.pr_codigo = p.id_produto INNER JOIN vw_ordem_producao o ON i.opr_id = o.opr_id WHERE o.opr_status = 2 AND toDate(o.opr_data) BETWEEN toDate('${startDate}') AND toDate('${endDate}') GROUP BY i.pr_codigo ORDER BY quantidade_produzida DESC"
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
"consumo_insumos": {
|
|
212
|
+
"__doc__": "Consumo real de insumos/matérias-primas nas OPs finalizadas.",
|
|
213
|
+
"sql": "SELECT c.pr_codigo AS id_insumo, any(p.descricao) AS insumo, any(p.unidade) AS unidade, sum(ifNull(c.opric_qtd_real, ifNull(c.opric_qtd, 0))) AS quantidade_consumida, sum(ifNull(c.opric_custo, 0)) AS custo_total, sum(ifNull(c.opric_qtd_real, 0)) - sum(ifNull(c.opric_qtd, 0)) AS variacao_consumo FROM vw_ordem_producao_itens_comp c INNER JOIN vw_produtos p ON c.pr_codigo = p.id_produto INNER JOIN vw_ordem_producao_itens i ON c.opri_id = i.opri_id INNER JOIN vw_ordem_producao o ON i.opr_id = o.opr_id WHERE o.opr_status = 2 AND toDate(o.opr_data) BETWEEN toDate('${startDate}') AND toDate('${endDate}') GROUP BY c.pr_codigo ORDER BY custo_total DESC"
|
|
214
|
+
},
|
|
215
|
+
|
|
216
|
+
"lead_time_producao": {
|
|
217
|
+
"__doc__": "Lead time médio de produção = dias entre abertura (opr_data) e finalização (opr_df) das OPs concluídas.",
|
|
218
|
+
"sql": "SELECT avg(dateDiff('day', toDate(opr_data), toDate(opr_df))) AS lead_time_medio, min(dateDiff('day', toDate(opr_data), toDate(opr_df))) AS lead_time_min, max(dateDiff('day', toDate(opr_data), toDate(opr_df))) AS lead_time_max FROM vw_ordem_producao WHERE opr_status = 2 AND opr_data IS NOT NULL AND opr_df IS NOT NULL AND toDate(opr_data) BETWEEN toDate('${startDate}') AND toDate('${endDate}')"
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
"clientes": {
|
|
223
|
+
"__doc__": "Métricas de análise da carteira de clientes usando vw_clientes e vw_clientes_estatisticas.",
|
|
224
|
+
|
|
225
|
+
"saude_carteira": {
|
|
226
|
+
"__doc__": "Visão geral da saúde da carteira: distribuição de clientes por faixa de inadimplência, ticket médio e frequência.",
|
|
227
|
+
"sql": "SELECT multiIf(ifNull(inadimplencia, 0) = 0, 'Adimplente', ifNull(inadimplencia, 0) <= 10, 'Baixa (até 10%)', ifNull(inadimplencia, 0) <= 30, 'Média (10-30%)', 'Alta (>30%)') AS faixa_inadimplencia, count() AS clientes, avg(ifNull(ticket_medio, 0)) AS ticket_medio, avg(ifNull(compras, 0)) AS media_compras FROM vw_clientes_estatisticas WHERE is_deleted = 0 GROUP BY faixa_inadimplencia ORDER BY indexOf(['Adimplente', 'Baixa (até 10%)', 'Média (10-30%)', 'Alta (>30%)'], faixa_inadimplencia)"
|
|
228
|
+
},
|
|
229
|
+
|
|
230
|
+
"clientes_inativos": {
|
|
231
|
+
"__doc__": "Clientes que não compram há mais de X dias. Usar data_ultima_compra de vw_clientes_estatisticas.",
|
|
232
|
+
"sql": "SELECT c.id_cliente, c.nome_completo, c.cidade, c.uf, c.segmento, ce.data_ultima_compra, dateDiff('day', toDate(ce.data_ultima_compra), today()) AS dias_sem_compra, ifNull(ce.total_compras, 0) AS historico_compras FROM vw_clientes c INNER JOIN vw_clientes_estatisticas ce ON c.id_cliente = ce.id_cliente AND c.id_coligada = ce.id_coligada WHERE c.is_deleted = 0 AND ce.is_deleted = 0 AND ce.data_ultima_compra IS NOT NULL AND dateDiff('day', toDate(ce.data_ultima_compra), today()) > 90 ORDER BY dias_sem_compra DESC"
|
|
233
|
+
},
|
|
234
|
+
|
|
235
|
+
"ranking_clientes": {
|
|
236
|
+
"__doc__": "Ranking ABC de clientes por faturamento com métricas complementares.",
|
|
237
|
+
"sql": "SELECT id_cliente, any(nome_completo_cliente) AS cliente, sum(valor_total) AS faturamento, count(DISTINCT id_venda) AS pedidos, count(DISTINCT id_produto) AS mix, sum(valor_total) / count(DISTINCT id_venda) AS ticket_medio FROM vw_vendas_validas WHERE data_venda >= toDate('${startDate}') AND data_venda <= toDate('${endDate}') AND status IN (2, 3, 4) AND bonif = 0 AND is_deleted = 0 GROUP BY id_cliente ORDER BY faturamento DESC"
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
"agrolog": {
|
|
242
|
+
"__doc__": "Métricas de agronegócio baseadas em vw_base_agrolog. Dados de movimentação de produtos agrícolas com categorias, fornecedores e localização geográfica.",
|
|
243
|
+
|
|
244
|
+
"faturamento": {
|
|
245
|
+
"__doc__": "Faturamento total (soma de valor_total) das movimentações agrológicas no período.",
|
|
246
|
+
"sql": "SELECT sum(valor_total) AS faturamento FROM vw_base_agrolog WHERE data_movimento >= toDate('${startDate}') AND data_movimento <= toDate('${endDate}')"
|
|
247
|
+
},
|
|
248
|
+
|
|
249
|
+
"faturamento_por_mes": {
|
|
250
|
+
"__doc__": "Faturamento agrupado por mês para análise de sazonalidade agrícola.",
|
|
251
|
+
"sql": "SELECT toStartOfMonth(data_movimento) AS mes, monthName(data_movimento) AS nome_mes, sum(valor_total) AS faturamento, sum(quantidade) AS volume, count() AS movimentacoes FROM vw_base_agrolog WHERE data_movimento >= toDate('${startDate}') AND data_movimento <= toDate('${endDate}') GROUP BY mes, nome_mes ORDER BY mes"
|
|
252
|
+
},
|
|
253
|
+
|
|
254
|
+
"faturamento_por_categoria": {
|
|
255
|
+
"__doc__": "Ranking de categorias por faturamento. Permite identificar as categorias de produtos agrícolas mais relevantes.",
|
|
256
|
+
"sql": "SELECT categoria, sum(valor_total) AS faturamento, sum(quantidade) AS volume, count() AS movimentacoes FROM vw_base_agrolog WHERE data_movimento >= toDate('${startDate}') AND data_movimento <= toDate('${endDate}') GROUP BY categoria ORDER BY faturamento DESC"
|
|
257
|
+
},
|
|
258
|
+
|
|
259
|
+
"faturamento_por_subcategoria": {
|
|
260
|
+
"__doc__": "Detalhamento por subcategoria dentro de cada categoria.",
|
|
261
|
+
"sql": "SELECT categoria, subcategoria, sum(valor_total) AS faturamento, sum(quantidade) AS volume FROM vw_base_agrolog WHERE data_movimento >= toDate('${startDate}') AND data_movimento <= toDate('${endDate}') GROUP BY categoria, subcategoria ORDER BY faturamento DESC"
|
|
262
|
+
},
|
|
263
|
+
|
|
264
|
+
"ranking_fornecedores": {
|
|
265
|
+
"__doc__": "Ranking de fornecedores por faturamento e volume movimentado.",
|
|
266
|
+
"sql": "SELECT fornecedor, sum(valor_total) AS faturamento, sum(quantidade) AS volume, count(DISTINCT codigo) AS mix_produtos, count() AS movimentacoes FROM vw_base_agrolog WHERE data_movimento >= toDate('${startDate}') AND data_movimento <= toDate('${endDate}') GROUP BY fornecedor ORDER BY faturamento DESC"
|
|
267
|
+
},
|
|
268
|
+
|
|
269
|
+
"ranking_produtos": {
|
|
270
|
+
"__doc__": "Ranking de produtos por faturamento com detalhes de categoria e fornecedor.",
|
|
271
|
+
"sql": "SELECT codigo, any(descricao) AS produto, any(categoria) AS categoria, any(subcategoria) AS subcategoria, any(fornecedor) AS fornecedor, sum(valor_total) AS faturamento, sum(quantidade) AS volume, avg(valor_unitario) AS preco_medio FROM vw_base_agrolog WHERE data_movimento >= toDate('${startDate}') AND data_movimento <= toDate('${endDate}') GROUP BY codigo ORDER BY faturamento DESC"
|
|
272
|
+
},
|
|
273
|
+
|
|
274
|
+
"analise_geografica": {
|
|
275
|
+
"__doc__": "Faturamento por estado e cidade. Útil para mapas e análise de distribuição geográfica.",
|
|
276
|
+
"sql": "SELECT estado, cidade, sum(valor_total) AS faturamento, sum(quantidade) AS volume, count(DISTINCT codigo) AS mix_produtos FROM vw_base_agrolog WHERE data_movimento >= toDate('${startDate}') AND data_movimento <= toDate('${endDate}') GROUP BY estado, cidade ORDER BY faturamento DESC"
|
|
277
|
+
},
|
|
278
|
+
|
|
279
|
+
"analise_por_estado": {
|
|
280
|
+
"__doc__": "Resumo por estado para visão macro geográfica.",
|
|
281
|
+
"sql": "SELECT estado, sum(valor_total) AS faturamento, sum(quantidade) AS volume, count(DISTINCT fornecedor) AS fornecedores, count(DISTINCT codigo) AS mix_produtos FROM vw_base_agrolog WHERE data_movimento >= toDate('${startDate}') AND data_movimento <= toDate('${endDate}') GROUP BY estado ORDER BY faturamento DESC"
|
|
282
|
+
},
|
|
283
|
+
|
|
284
|
+
"preco_medio_por_produto": {
|
|
285
|
+
"__doc__": "Preço médio unitário por produto no período. Útil para análise de variação de preços.",
|
|
286
|
+
"sql": "SELECT codigo, any(descricao) AS produto, any(categoria) AS categoria, avg(valor_unitario) AS preco_medio, min(valor_unitario) AS preco_min, max(valor_unitario) AS preco_max FROM vw_base_agrolog WHERE data_movimento >= toDate('${startDate}') AND data_movimento <= toDate('${endDate}') GROUP BY codigo ORDER BY preco_medio DESC"
|
|
287
|
+
},
|
|
288
|
+
|
|
289
|
+
"movimentacoes_por_status": {
|
|
290
|
+
"__doc__": "Distribuição de movimentações por status.",
|
|
291
|
+
"sql": "SELECT status, count() AS quantidade, sum(valor_total) AS valor_total FROM vw_base_agrolog WHERE data_movimento >= toDate('${startDate}') AND data_movimento <= toDate('${endDate}') GROUP BY status ORDER BY valor_total DESC"
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
|
|
295
|
+
"funcoes_clickhouse": {
|
|
296
|
+
"__doc__": "Referência rápida das funções ClickHouse mais usadas nos padrões acima.",
|
|
297
|
+
|
|
298
|
+
"agregacao": {
|
|
299
|
+
"sum": "sum(coluna) — soma total",
|
|
300
|
+
"count": "count() — contagem | count(DISTINCT col) — contagem distinta",
|
|
301
|
+
"uniqExact": "uniqExact(coluna) — contagem distinta exata (mais eficiente que count(DISTINCT))",
|
|
302
|
+
"avg": "avg(coluna) — média",
|
|
303
|
+
"any": "any(coluna) — primeiro valor não-null (seguro para dimensões em GROUP BY)",
|
|
304
|
+
"sumIf": "sumIf(coluna, condição) — soma condicional",
|
|
305
|
+
"countIf": "countIf(condição) — contagem condicional",
|
|
306
|
+
"avgIf": "avgIf(coluna, condição) — média condicional"
|
|
307
|
+
},
|
|
308
|
+
"null_handling": {
|
|
309
|
+
"ifNull": "ifNull(coluna, valor_default) — substitui NULL",
|
|
310
|
+
"greatest": "greatest(a, b) — maior valor (útil para evitar negativos: greatest(x - y, 0))",
|
|
311
|
+
"if_isNaN": "if(isNaN(valor), 0, valor) — tratar NaN de divisões"
|
|
312
|
+
},
|
|
313
|
+
"datas": {
|
|
314
|
+
"toDate": "toDate(coluna) — converter para Date",
|
|
315
|
+
"today": "today() — data atual",
|
|
316
|
+
"dateDiff": "dateDiff('day', data1, data2) — diferença em dias",
|
|
317
|
+
"toStartOfMonth": "toStartOfMonth(data) — primeiro dia do mês",
|
|
318
|
+
"toStartOfYear": "toStartOfYear(data) — primeiro dia do ano",
|
|
319
|
+
"subtractMonths": "subtractMonths(data, n) — subtrair n meses",
|
|
320
|
+
"toYear_toMonth": "toYear(data), toMonth(data) — extrair ano/mês",
|
|
321
|
+
"monthName": "monthName(data) — nome do mês (NÃO usar toMonthName)",
|
|
322
|
+
"formatDateTime": "formatDateTime(data, '%d/%m/%Y') — formatar para exibição"
|
|
323
|
+
},
|
|
324
|
+
"condicionais": {
|
|
325
|
+
"multiIf": "multiIf(cond1, val1, cond2, val2, ..., default) — if/else encadeado",
|
|
326
|
+
"if": "if(condição, valor_true, valor_false) — condicional simples",
|
|
327
|
+
"indexOf": "indexOf(['a','b','c'], valor) — posição na lista (útil para ORDER BY customizado)"
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-serialization.types.d.ts","sourceRoot":"","sources":["../../../../../src/data/serialization/dashboard-serialization.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-serialization.types.js","sourceRoot":"","sources":["../../../../../src/data/serialization/dashboard-serialization.types.ts"],"names":[],"mappings":""}
|