diff --git a/docs/docs.go b/docs/docs.go index c2e89da..58e229c 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -522,7 +522,7 @@ const docTemplate = `{ } } } - }, + }, "/v2/dados/{orgao}/{ano}": { "get": { "description": "Busca os dados mensais de um órgão por ano", @@ -812,7 +812,7 @@ const docTemplate = `{ }, "/v2/indice/{param}/{valor}/{ano}/{mes}": { "get": { - "description": "Busca as informações de índices de um grupo ou órgão específico para o ano informado.", + "description": "Busca as informações de índices de um grupo ou órgão específico para o ano e mês informados.", "produces": [ "application/json" ], @@ -1097,7 +1097,7 @@ const docTemplate = `{ } } } - }, + }, "papi.backup": { "type": "object", "properties": { @@ -1250,6 +1250,9 @@ const docTemplate = `{ }, "remuneracao_base": { "$ref": "#/definitions/papi.dataSummary" + }, + "descontos": { + "$ref": "#/definitions/papi.dataSummary" } } }, @@ -1440,6 +1443,15 @@ const docTemplate = `{ }, "remuneracao_base_por_membro": { "type": "number" + }, + "descontos": { + "type": "number" + }, + "descontos_por_mes": { + "type": "number" + }, + "descontos_por_membro": { + "type": "number" } } }, @@ -1507,6 +1519,9 @@ const docTemplate = `{ }, "remuneracao_base": { "type": "number" + }, + "descontos": { + "type": "number" } } }, @@ -1650,6 +1665,9 @@ const docTemplate = `{ "max_remuneracao_base": { "type": "number" }, + "max_descontos": { + "type": "number" + }, "orgao": { "type": "string" }, @@ -1659,6 +1677,9 @@ const docTemplate = `{ "remuneracao_base": { "type": "number" }, + "descontos": { + "type": "number" + }, "tem_anterior": { "type": "boolean" }, @@ -1717,6 +1738,12 @@ const docTemplate = `{ "remuneracao_base_por_membro": { "type": "number" }, + "descontos": { + "type": "number" + }, + "descontos_por_membro": { + "type": "number" + }, "timestamp": { "$ref": "#/definitions/uiapi.timestamp" }, diff --git a/docs/swagger.json b/docs/swagger.json index 462a6bd..cbc97b2 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -1240,6 +1240,9 @@ }, "remuneracao_base": { "$ref": "#/definitions/papi.dataSummary" + }, + "descontos": { + "$ref": "#/definitions/papi.dataSummary" } } }, @@ -1285,7 +1288,7 @@ "type": "integer" }, "indice_transparencia": { - "$ref": "#/definitions/papi.dataSummary" + "$ref": "#/definitions/papi.score" }, "metadados": { "$ref": "#/definitions/papi.metadata" @@ -1430,6 +1433,15 @@ }, "remuneracao_base_por_membro": { "type": "number" + }, + "descontos": { + "type": "number" + }, + "descontos_por_mes": { + "type": "number" + }, + "descontos_por_membro": { + "type": "number" } } }, @@ -1497,6 +1509,9 @@ }, "remuneracao_base": { "type": "number" + }, + "descontos": { + "type": "number" } } }, @@ -1640,6 +1655,9 @@ "max_remuneracao_base": { "type": "number" }, + "max_descontos": { + "type": "number" + }, "orgao": { "type": "string" }, @@ -1649,6 +1667,9 @@ "remuneracao_base": { "type": "number" }, + "descontos": { + "type": "number" + }, "tem_anterior": { "type": "boolean" }, @@ -1707,6 +1728,12 @@ "remuneracao_base_por_membro": { "type": "number" }, + "descontos": { + "type": "number" + }, + "descontos_por_membro": { + "type": "number" + }, "timestamp": { "$ref": "#/definitions/uiapi.timestamp" }, diff --git a/docs/swagger.yaml b/docs/swagger.yaml index b6d6488..ebe2224 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -178,6 +178,8 @@ definitions: type: integer remuneracao_base: $ref: "#/definitions/papi.dataSummary" + descontos: + $ref: "#/definitions/papi.dataSummary" type: object papi.summaryzedMI: properties: @@ -306,6 +308,12 @@ definitions: type: number remuneracao_base_por_membro: type: number + descontos: + type: number + descontos_por_mes: + type: number + descontos_por_membro: + type: number type: object uiapi.backup: properties: @@ -353,6 +361,8 @@ definitions: type: number remuneracao_base: type: number + descontos: + type: number type: object uiapi.procError: properties: @@ -446,12 +456,16 @@ definitions: type: number max_remuneracao_base: type: number + max_descontos: + type: number orgao: type: string outras_remuneracoes: type: number remuneracao_base: type: number + descontos: + type: number tem_anterior: type: boolean tem_proximo: @@ -490,6 +504,10 @@ definitions: type: number remuneracao_base_por_membro: type: number + descontos: + type: number + descontos_por_membro: + type: number timestamp: $ref: "#/definitions/uiapi.timestamp" total_membros: diff --git a/go.mod b/go.mod index 41c1b2d..97e4a25 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/dadosjusbr/proto v0.0.0-20221212025627-91c60aa3cd12 - github.com/dadosjusbr/storage v0.0.0-20230516114123-dc6ae51c4bb1 + github.com/dadosjusbr/storage v0.0.0-20230606144319-60c7b5d6eb77 github.com/gocarina/gocsv v0.0.0-20220712153207-8b2118da4570 github.com/golang/mock v1.6.0 github.com/joho/godotenv v1.4.0 diff --git a/go.sum b/go.sum index cc9bfa7..846d5f7 100644 --- a/go.sum +++ b/go.sum @@ -45,6 +45,8 @@ github.com/dadosjusbr/storage v0.0.0-20230420170502-31dc5a2caf92 h1:73BiNvlognV5 github.com/dadosjusbr/storage v0.0.0-20230420170502-31dc5a2caf92/go.mod h1:ttc45wBL5bjz5uU24mgNNPV9ZHaJ3SmoRwVOmyVRZyY= github.com/dadosjusbr/storage v0.0.0-20230516114123-dc6ae51c4bb1 h1:cW0gM/0LR2Zth/lvO4plo0YWCZb4oZ686tIXgLcI0QE= github.com/dadosjusbr/storage v0.0.0-20230516114123-dc6ae51c4bb1/go.mod h1:ttc45wBL5bjz5uU24mgNNPV9ZHaJ3SmoRwVOmyVRZyY= +github.com/dadosjusbr/storage v0.0.0-20230606144319-60c7b5d6eb77 h1:/nTEm9H8P5IUzDTuQkwFod/BoruZIObWr7sUO07Kov4= +github.com/dadosjusbr/storage v0.0.0-20230606144319-60c7b5d6eb77/go.mod h1:ttc45wBL5bjz5uU24mgNNPV9ZHaJ3SmoRwVOmyVRZyY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/papi/handlers.go b/papi/handlers.go index b9d5cc2..baf5b6a 100644 --- a/papi/handlers.go +++ b/papi/handlers.go @@ -197,6 +197,12 @@ func (h handler) GetMonthlyInfo(c echo.Context) error { Average: mi.Summary.OtherRemunerations.Average, Total: mi.Summary.OtherRemunerations.Total, }, + Discounts: dataSummary{ + Max: mi.Summary.Discounts.Max, + Min: mi.Summary.Discounts.Min, + Average: mi.Summary.Discounts.Average, + Total: mi.Summary.Discounts.Total, + }, }, }, Metadata: &metadata{ @@ -306,6 +312,12 @@ func (h handler) V2GetMonthlyInfo(c echo.Context) error { Average: monthlyInfo.Summary.OtherRemunerations.Average, Total: monthlyInfo.Summary.OtherRemunerations.Total, }, + Discounts: dataSummary{ + Max: monthlyInfo.Summary.Discounts.Max, + Min: monthlyInfo.Summary.Discounts.Min, + Average: monthlyInfo.Summary.Discounts.Average, + Total: monthlyInfo.Summary.Discounts.Total, + }, }, }, Metadata: &metadata{ @@ -414,6 +426,12 @@ func (h handler) GetMonthlyInfosByYear(c echo.Context) error { Average: mi.Summary.OtherRemunerations.Average, Total: mi.Summary.OtherRemunerations.Total, }, + Discounts: dataSummary{ + Max: mi.Summary.Discounts.Max, + Min: mi.Summary.Discounts.Min, + Average: mi.Summary.Discounts.Average, + Total: mi.Summary.Discounts.Total, + }, }, }, Metadata: &metadata{ @@ -667,6 +685,12 @@ func (h handler) V2GetAllAgencyInformation(c echo.Context) error { Average: c.Summary.OtherRemunerations.Average, Total: c.Summary.OtherRemunerations.Total, }, + Discounts: dataSummary{ + Max: c.Summary.Discounts.Max, + Min: c.Summary.Discounts.Min, + Average: c.Summary.Discounts.Average, + Total: c.Summary.Discounts.Total, + }, }, }, Metadata: &metadata{ diff --git a/papi/models.go b/papi/models.go index a96779c..3fd9d3b 100644 --- a/papi/models.go +++ b/papi/models.go @@ -17,6 +17,7 @@ type summary struct { Count int `json:"quantidade,omitempty"` BaseRemuneration dataSummary `json:"remuneracao_base,omitempty"` OtherRemunerations dataSummary `json:"outras_remuneracoes,omitempty"` + Discounts dataSummary `json:"descontos,omitempty"` } type summaries struct { diff --git a/uiapi/handlers.go b/uiapi/handlers.go index 9ffe5ae..3ae45e9 100644 --- a/uiapi/handlers.go +++ b/uiapi/handlers.go @@ -111,6 +111,8 @@ func (h handler) V2GetSummaryOfAgency(c echo.Context) error { MaxBase: agencyMonthlyInfo.Summary.BaseRemuneration.Max, OtherRemunerations: agencyMonthlyInfo.Summary.OtherRemunerations.Total, MaxOther: agencyMonthlyInfo.Summary.OtherRemunerations.Max, + Discounts: agencyMonthlyInfo.Summary.Discounts.Total, + MaxDiscounts: agencyMonthlyInfo.Summary.Discounts.Max, TotalRemuneration: agencyMonthlyInfo.Summary.BaseRemuneration.Total + agencyMonthlyInfo.Summary.OtherRemunerations.Total, TotalMembers: agencyMonthlyInfo.Summary.Count, @@ -318,13 +320,13 @@ func (h handler) V2GetTotalsOfAgencyYear(c echo.Context) error { strAgency.URL = fmt.Sprintf("%s/v2/orgao/%s", host, strAgency.ID) for _, agencyMonthlyInfo := range agenciesMonthlyInfo[aID] { if agencyMonthlyInfo.Summary != nil && agencyMonthlyInfo.Summary.BaseRemuneration.Total+agencyMonthlyInfo.Summary.OtherRemunerations.Total > 0 { - baseRemPerCapita := agencyMonthlyInfo.Summary.BaseRemuneration.Total / float64(agencyMonthlyInfo.Summary.Count) - otherRemPerCapita := agencyMonthlyInfo.Summary.OtherRemunerations.Total / float64(agencyMonthlyInfo.Summary.Count) monthTotals := v2MonthTotals{Month: agencyMonthlyInfo.Month, BaseRemuneration: agencyMonthlyInfo.Summary.BaseRemuneration.Total, OtherRemunerations: agencyMonthlyInfo.Summary.OtherRemunerations.Total, - BaseRemunerationPerCapita: baseRemPerCapita, - OtherRemunerationsPerCapita: otherRemPerCapita, + Discounts: agencyMonthlyInfo.Summary.Discounts.Total, + BaseRemunerationPerCapita: agencyMonthlyInfo.Summary.BaseRemuneration.Average, + OtherRemunerationsPerCapita: agencyMonthlyInfo.Summary.OtherRemunerations.Average, + DiscountsPerCapita: agencyMonthlyInfo.Summary.Discounts.Average, CrawlingTimestamp: timestamp{ Seconds: agencyMonthlyInfo.CrawlingTimestamp.GetSeconds(), Nanos: agencyMonthlyInfo.CrawlingTimestamp.GetNanos(), @@ -580,6 +582,7 @@ func (h handler) V2GetGeneralRemunerationFromYear(c echo.Context) error { Members: d.Count, BaseRemuneration: d.BaseRemuneration, OtherRemunerations: d.OtherRemunerations, + Discounts: d.Discounts, }) } return c.JSON(http.StatusOK, annualRemu) @@ -787,6 +790,8 @@ func (h handler) GetAnnualSummary(c echo.Context) error { baseRemPerCapita := s.BaseRemuneration / float64(s.TotalCount) otherRemPerMonth := s.OtherRemunerations / float64(s.NumMonthsWithData) otherRemPerCapita := s.OtherRemunerations / float64(s.TotalCount) + discountsRemPerMonth := s.Discounts / float64(s.NumMonthsWithData) + discountsRemPerCapita := s.Discounts / float64(s.TotalCount) annualData = append(annualData, annualSummaryData{ Year: s.Year, AverageMemberCount: s.AverageCount, @@ -796,6 +801,9 @@ func (h handler) GetAnnualSummary(c echo.Context) error { OtherRemunerations: s.OtherRemunerations, OtherRemunerationsPerMonth: otherRemPerMonth, OtherRemunerationsPerCapita: otherRemPerCapita, + Discounts: s.Discounts, + DiscountsPerMonth: discountsRemPerMonth, + DiscountsPerCapita: discountsRemPerCapita, NumMonthsWithData: s.NumMonthsWithData, Package: &backup{ URL: s.Package.URL, diff --git a/uiapi/models.go b/uiapi/models.go index a383f8d..aa0503d 100644 --- a/uiapi/models.go +++ b/uiapi/models.go @@ -103,6 +103,8 @@ type v2AgencySummary struct { MaxBase float64 `json:"max_remuneracao_base"` OtherRemunerations float64 `json:"outras_remuneracoes"` MaxOther float64 `json:"max_outras_remuneracoes"` + Discounts float64 `json:"descontos"` + MaxDiscounts float64 `json:"max_descontos"` CrawlingTime timestamp `json:"timestamp"` TotalMembers int `json:"total_membros"` TotalRemuneration float64 `json:"total_remuneracao"` @@ -155,6 +157,8 @@ type v2MonthTotals struct { BaseRemunerationPerCapita float64 `json:"remuneracao_base_por_membro"` OtherRemunerations float64 `json:"outras_remuneracoes"` OtherRemunerationsPerCapita float64 `json:"outras_remuneracoes_por_membro"` + Discounts float64 `json:"descontos"` + DiscountsPerCapita float64 `json:"descontos_por_membro"` CrawlingTimestamp timestamp `json:"timestamp"` } @@ -250,6 +254,9 @@ type annualSummaryData struct { OtherRemunerations float64 `json:"outras_remuneracoes"` OtherRemunerationsPerMonth float64 `json:"outras_remuneracoes_por_mes"` OtherRemunerationsPerCapita float64 `json:"outras_remuneracoes_por_membro"` + Discounts float64 `json:"descontos"` + DiscountsPerMonth float64 `json:"descontos_por_mes"` + DiscountsPerCapita float64 `json:"descontos_por_membro"` NumMonthsWithData int `json:"meses_com_dados"` Package *backup `json:"package,omitempty"` } @@ -259,4 +266,5 @@ type mensalRemuneration struct { Members int `json:"num_membros,omitempty"` BaseRemuneration float64 `json:"remuneracao_base"` OtherRemunerations float64 `json:"outras_remuneracoes"` + Discounts float64 `json:"descontos"` } diff --git a/uiapi/uiapi_test.go b/uiapi/uiapi_test.go index df74b0e..accdb0f 100644 --- a/uiapi/uiapi_test.go +++ b/uiapi/uiapi_test.go @@ -88,6 +88,8 @@ func (g getSummaryOfAgency) testWhenDataExists(t *testing.T) { "max_remuneracao_base": 35462.22, "outras_remuneracoes": 1.9515865600000022e+06, "max_outras_remuneracoes": 45200.05, + "descontos": 2221879.66, + "max_descontos": 23118.190000000002, "timestamp": { "seconds": 1, "nanos": 1 @@ -944,12 +946,14 @@ func (g getGenerealRemunerationFromYear) testWhenDataExists(t *testing.T) { Count: 100, BaseRemuneration: 10000, OtherRemunerations: 1000, + Discounts: 1000, }, { Month: 2, Count: 200, BaseRemuneration: 20000, OtherRemunerations: 2000, + Discounts: 1000, }, } dbMock.EXPECT().Connect().Return(nil).Times(1) @@ -980,13 +984,15 @@ func (g getGenerealRemunerationFromYear) testWhenDataExists(t *testing.T) { "mes": 1, "num_membros": 100, "remuneracao_base": 10000, - "outras_remuneracoes": 1000 + "outras_remuneracoes": 1000, + "descontos": 1000 }, { "mes": 2, "num_membros": 200, "remuneracao_base": 20000, - "outras_remuneracoes": 2000 + "outras_remuneracoes": 2000, + "descontos": 1000 } ] ` @@ -1130,6 +1136,8 @@ func (g getTotalsOfAgencyYear) testWhenDataExists(t *testing.T) { "outras_remuneracoes_por_membro":9119.563364485992, "remuneracao_base":7.099024400000013e+06, "remuneracao_base_por_membro":33173.01121495333, + "descontos": 2221879.66, + "descontos_por_membro": 10382.615233644861, "timestamp": { "seconds": 1, "nanos": 1 @@ -1270,6 +1278,7 @@ func (g getAnnualSummary) testWhenDataExists(t *testing.T) { TotalCount: 2568, BaseRemuneration: 10000, OtherRemunerations: 1000, + Discounts: 1000, NumMonthsWithData: 12, Package: &models.Backup{ URL: "https://dadosjusbr.org/download/tjal/datapackage/tjal-2020-1.zip", @@ -1324,6 +1333,9 @@ func (g getAnnualSummary) testWhenDataExists(t *testing.T) { "outras_remuneracoes": 1000, "outras_remuneracoes_por_membro": 0.3894080996884735, "outras_remuneracoes_por_mes": 83.33333333333333, + "descontos": 1000, + "descontos_por_membro": 0.3894080996884735, + "descontos_por_mes": 83.33333333333333, "meses_com_dados": 12, "package": { "url": "https://dadosjusbr.org/download/tjal/datapackage/tjal-2020-1.zip", @@ -1492,6 +1504,11 @@ func agencyMonthlyInfos() []models.AgencyMonthlyInfo { Average: 9119.563364485992, Total: 1951586.5600000022, }, + Discounts: models.DataSummary{ + Max: 23118.190000000002, + Average: 10382.615233644861, + Total: 2221879.66, + }, IncomeHistogram: map[int]int{ -1: 0, 10000: 1,