Skip to content

Commit

Permalink
Simplificar query trimestral
Browse files Browse the repository at this point in the history
Unificar dados do T4 com dado anual
  • Loading branch information
dude333 committed Sep 12, 2023
1 parent e3a7a3f commit 8866d4c
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 115 deletions.
2 changes: 1 addition & 1 deletion cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
func main() {
// defer profile.Start().Stop()
progress.SetDebug(true)
progress.SetTrace(false)
progress.SetTrace(true)

Execute()
}
6 changes: 1 addition & 5 deletions cmd/relatorio.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,11 +240,7 @@ func excelReport(x *Excel, itr []rapina.InformeTrimestral, decrescente bool) {
x.printCell(row, col+seq[0], numberStyle, valor.T1)
x.printCell(row, col+seq[1], numberStyle, valor.T2)
x.printCell(row, col+seq[2], numberStyle, valor.T3)
if strings.HasPrefix(informe.Codigo, "1") || strings.HasPrefix(informe.Codigo, "2") {
x.printCell(row, col+seq[3], numberStyle, valor.Anual)
} else {
x.printCell(row, col+seq[3], numberStyle, valor.T4)
}
x.printCell(row, col+seq[3], numberStyle, valor.T4)

if strings.Count(informe.Codigo, ".") <= 1 {
_ = x.file.SetCellStyle(x.sheetName, cell(row, col), cell(row, col+3), boldNumberStyle)
Expand Down
12 changes: 5 additions & 7 deletions pkg/contabil/repositorio/repositorio_sqlite_queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,11 @@ type resultadoTrimestral struct {
}

type jsonTrimestral []struct {
Ano int `json:"year"`
T1 float64 `json:"q1"`
T2 float64 `json:"q2"`
T3 float64 `json:"q3"`
T4 float64 `json:"q4"`
Anual float64 `json:"yearly"`
Ano int `json:"ano"`
T1 float64 `json:"t1"`
T2 float64 `json:"t2"`
T3 float64 `json:"t3"`
T4 float64 `json:"t4"`
}

func converterResultadosTrimestrais(resultados []resultadoTrimestral) ([]rapina.InformeTrimestral, error) {
Expand All @@ -41,7 +40,6 @@ func converterResultadosTrimestrais(resultados []resultadoTrimestral) ([]rapina.
valoresTrimestrais[j].T2 = valorJSON.T2
valoresTrimestrais[j].T3 = valorJSON.T3
valoresTrimestrais[j].T4 = valorJSON.T4
valoresTrimestrais[j].Anual = valorJSON.Anual
}

itr[i] = rapina.InformeTrimestral{
Expand Down
116 changes: 49 additions & 67 deletions pkg/contabil/repositorio/repositorio_sqlite_trimestral.sql
Original file line number Diff line number Diff line change
@@ -1,71 +1,53 @@
WITH CalculatedValues AS (
WITH
acumulado AS (
SELECT codigo, descr, data_ini_exerc, data_fim_exerc, SUBSTR(c.data_fim_exerc, 1, 4) ano, meses,
SUM(CASE
WHEN meses = 3 THEN valor
WHEN meses = 12 AND SUBSTR(c.data_fim_exerc, 6, 2) = '03' THEN valor
ELSE NULL END) AS q1,
SUM(CASE
WHEN meses = 6 THEN valor
WHEN meses = 12 AND SUBSTR(c.data_fim_exerc, 6, 2) = '06' THEN valor
ELSE NULL END) AS q2,
SUM(CASE
WHEN meses = 9 THEN valor
WHEN meses = 12 AND SUBSTR(c.data_fim_exerc, 6, 2) = '09' THEN valor
ELSE NULL END) AS q3,
SUM(CASE WHEN data_ini_exerc <> '' AND meses = 12 THEN valor ELSE NULL END) AS q4,
SUM(CASE WHEN meses = 12 AND SUBSTR(c.data_fim_exerc, 6, 2) = '12' THEN valor ELSE NULL END) AS q4_anual
FROM
empresas e
JOIN contas c ON e.id = c.id_empresa
WHERE c.id_empresa IN (%s)
AND c.consolidado = %d
AND (c.data_ini_exerc = '' OR SUBSTR(c.data_ini_exerc, 6, 2) = "01") -- APENAS data_ini_exec DE JANEIRO
GROUP BY ano, codigo, descr
ORDER BY data_fim_exerc
),
calculado AS (
SELECT
ano,
codigo,
descr,
COALESCE(q1, 0) AS t1,
CASE WHEN data_ini_exerc <> '' AND q1 IS NOT NULL AND q2 IS NOT NULL THEN q2-q1 ELSE COALESCE(q2, 0) END AS t2,
CASE WHEN data_ini_exerc <> '' AND q2 IS NOT NULL AND q3 IS NOT NULL THEN q3-q2 ELSE COALESCE(q3, 0) END AS t3,
CASE WHEN data_ini_exerc <> '' AND q4 IS NOT NULL THEN q4-COALESCE(q3, 0) ELSE COALESCE(q4_anual, 0) END AS t4
FROM acumulado
),
agrupado AS (
SELECT
year,
codigo,
descr,
COALESCE(q1_value, 0) q1_value,
COALESCE(q2_value, 0) q2_value,
COALESCE(q3_value, 0) q3_value,
CASE WHEN q1_value IS NOT NULL AND q2_value IS NOT NULL AND q3_value IS NOT NULL
THEN yearly_value - (q1_value + q2_value + q3_value)
ELSE 0
END AS q4_calculated,
CASE WHEN q1_value IS NOT NULL AND q2_value IS NOT NULL AND q3_value IS NOT NULL
THEN COALESCE(yearly_value, 0)
ELSE CASE WHEN SUBSTR(data_fim_exerc, 6, 2) IN ('10', '11', '12')
THEN COALESCE(yearly_value, 0)
ELSE 0
END
END AS yearly_value
FROM (
SELECT
CASE WHEN c.data_ini_exerc <> '' THEN SUBSTR(c.data_ini_exerc, 1, 4)
ELSE SUBSTR(c.data_fim_exerc, 1, 4)
END AS year,
c.data_fim_exerc,
c.codigo,
c.descr,
SUM(CASE
WHEN meses = 3 AND SUBSTR(c.data_ini_exerc, 6, 2) IN ('01', '02', '03') THEN valor
WHEN meses = 12 AND SUBSTR(c.data_fim_exerc, 6, 2) IN ('01', '02', '03') THEN valor
ELSE NULL END) AS q1_value,
SUM(CASE
WHEN meses = 3 AND SUBSTR(c.data_ini_exerc, 6, 2) IN ('04', '05', '06') THEN valor
WHEN meses = 12 AND SUBSTR(c.data_fim_exerc, 6, 2) IN ('04', '05', '06') THEN valor
ELSE NULL END) AS q2_value,
SUM(CASE
WHEN meses = 3 AND SUBSTR(c.data_ini_exerc, 6, 2) IN ('07', '08', '09') THEN valor
WHEN meses = 12 AND SUBSTR(c.data_fim_exerc, 6, 2) IN ('07', '08', '09') THEN valor
ELSE NULL END) AS q3_value,
(CASE
WHEN meses = 12 AND c.data_fim_exerc = MAX(c.data_fim_exerc) THEN valor
ELSE NULL END) AS yearly_value

FROM
empresas e
JOIN contas c ON e.id = c.id_empresa
WHERE c.id_empresa IN (%s)
AND c.consolidado = %d
GROUP BY
CASE WHEN c.data_ini_exerc <> '' THEN SUBSTR(c.data_ini_exerc, 1, 4)
ELSE SUBSTR(c.data_fim_exerc, 1, 4)
END,
c.codigo,
c.descr
ORDER BY data_fim_exerc
)
ORDER BY year, codigo
'[' || GROUP_CONCAT(
'{"ano":' || ano ||
',"t1":' || COALESCE(t1, 0) ||
',"t2":' || COALESCE(t2, 0) ||
',"t3":' || COALESCE(t3, 0) ||
',"t4":' || COALESCE(t4, 0) || '}'
) || ']' AS valores
FROM calculado
WHERE t1 <> 0 OR t2 <> 0 OR t3 <> 0 OR t4 <> 0 -- FILTRA LINHAS VAZIAS
GROUP BY codigo, descr
)
SELECT
codigo,
descr,
'[' || GROUP_CONCAT(
'{"year":' || year ||
',"q1":' || COALESCE(q1_value, 0) ||
',"q2":' || COALESCE(q2_value, 0) ||
',"q3":' || COALESCE(q3_value, 0) ||
',"q4":' || COALESCE(q4_calculated, 0) ||
',"yearly":' || COALESCE(yearly_value, 0) || '}'
) || ']' AS valores
FROM CalculatedValues
GROUP BY codigo, descr
SELECT * from agrupado
35 changes: 10 additions & 25 deletions rapina.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
package rapina

import (
"strings"

"github.com/dude333/rapinav2/pkg/progress"
)

Expand All @@ -17,12 +15,11 @@ type InformeTrimestral struct {
}

type ValoresTrimestrais struct {
Ano int
T1 float64
T2 float64
T3 float64
T4 float64
Anual float64
Ano int
T1 float64
T2 float64
T3 float64
T4 float64
}

func UnificarContasSimilares(itr []InformeTrimestral) []InformeTrimestral {
Expand All @@ -31,7 +28,7 @@ func UnificarContasSimilares(itr []InformeTrimestral) []InformeTrimestral {
ultimaLinha := len(itr) - 1
for linha := 1; linha <= ultimaLinha; linha++ {
unir := false
if Similar(itr[linha-1].Descr, itr[linha].Descr) {
if Similar(itr[linha-1].Codigo+itr[linha-1].Descr, itr[linha].Codigo+itr[linha].Descr) {
unir = true
var novosValores []ValoresTrimestrais
for _, ano := range anos {
Expand All @@ -48,8 +45,7 @@ func UnificarContasSimilares(itr []InformeTrimestral) []InformeTrimestral {
if (v1.T1 != 0.0 && v2.T1 != 0.0) ||
(v1.T2 != 0.0 && v2.T2 != 0.0) ||
(v1.T3 != 0.0 && v2.T3 != 0.0) ||
(v1.T4 != 0.0 && v2.T4 != 0.0) ||
(v1.Anual != 0.0 && v2.Anual != 0.0) {
(v1.T4 != 0.0 && v2.T4 != 0.0) {
itr2 = append(itr2, itr[linha-1])
unir = false
break
Expand Down Expand Up @@ -105,11 +101,6 @@ func equalizarValores(ano int, v1, v2 ValoresTrimestrais) ValoresTrimestrais {
} else {
v.T4 = v2.T4
}
if v1.Anual != 0.0 && v2.Anual == 0.0 {
v.Anual = v1.Anual
} else {
v.Anual = v2.Anual
}
return v
}

Expand All @@ -133,7 +124,7 @@ func valorAno(ano int, valores []ValoresTrimestrais) (ValoresTrimestrais, bool)

func Zerado(valores []ValoresTrimestrais) bool {
for _, v := range valores {
if v.T1 != 0 || v.T2 != 0 || v.T3 != 0 || v.T4 != 0 || v.Anual != 0 {
if v.T1 != 0 || v.T2 != 0 || v.T3 != 0 || v.T4 != 0 {
return false
}
}
Expand All @@ -160,14 +151,8 @@ func TrimestresComDados(itr []InformeTrimestral) []bool {
if v.T3 != 0.0 {
colunas[i+2] = true
}
if strings.HasPrefix(informe.Codigo, "1") || strings.HasPrefix(informe.Codigo, "2") {
if v.Anual != 0.0 {
colunas[i+3] = true
}
} else {
if v.T4 != 0.0 {
colunas[i+3] = true
}
if v.T4 != 0.0 {
colunas[i+3] = true
}
}
}
Expand Down
20 changes: 10 additions & 10 deletions rapina_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ func Test_Zerado(t *testing.T) {
name: "testar zerado",
args: args{
valores: []ValoresTrimestrais{
{Ano: 2020, T1: 0, T2: 0, T3: 0, T4: 0, Anual: 0},
{Ano: 2021, T1: 0, T2: 0, T3: 0, T4: 0, Anual: 0},
{Ano: 2022, T1: 0, T2: 0, T3: 0, T4: 0, Anual: 0},
{Ano: 2020, T1: 0, T2: 0, T3: 0, T4: 0},
{Ano: 2021, T1: 0, T2: 0, T3: 0, T4: 0},
{Ano: 2022, T1: 0, T2: 0, T3: 0, T4: 0},
},
},
want: true,
Expand All @@ -32,9 +32,9 @@ func Test_Zerado(t *testing.T) {
name: "testar não zerado 1",
args: args{
valores: []ValoresTrimestrais{
{Ano: 2020, T1: 0, T2: 0, T3: 0, T4: 0, Anual: 0},
{Ano: 2021, T1: 0, T2: 0, T3: 0, T4: 0, Anual: 0},
{Ano: 2022, T1: 0, T2: 1, T3: 0, T4: 0, Anual: 0},
{Ano: 2020, T1: 0, T2: 0, T3: 0, T4: 0},
{Ano: 2021, T1: 0, T2: 0, T3: 0, T4: 0},
{Ano: 2022, T1: 0, T2: 1, T3: 0, T4: 0},
},
},
want: false,
Expand All @@ -43,10 +43,10 @@ func Test_Zerado(t *testing.T) {
name: "testar não zerado 2",
args: args{
valores: []ValoresTrimestrais{
{Ano: 2020, T1: 0, T2: 0, T3: 0, T4: 0, Anual: 0},
{Ano: 2021, T1: 0, T2: 0, T3: 0, T4: 0, Anual: 0},
{Ano: 2022, T1: 0, T2: 0, T3: 0, T4: 0, Anual: 0},
{Ano: 2023, T1: 10.1, T2: 0, T3: 0, T4: 0, Anual: 0},
{Ano: 2020, T1: 0, T2: 0, T3: 0, T4: 0},
{Ano: 2021, T1: 0, T2: 0, T3: 0, T4: 0},
{Ano: 2022, T1: 0, T2: 0, T3: 0, T4: 0},
{Ano: 2023, T1: 10.1, T2: 0, T3: 0, T4: 0},
},
},
want: false,
Expand Down

0 comments on commit 8866d4c

Please sign in to comment.