splor-mg / cookiecutter-datapackage

https://splor-mg.github.io/cookiecutter-datapackage/dev
0 stars 0 forks source link

Criar mecanismo para inserção de coluna ano nas bases #11

Closed fjuniorr closed 1 year ago

fjuniorr commented 1 year ago

Para seguir com o objetivo de https://github.com/splor-mg/cookiecutter-datapackage/issues/2 vamos precisar de inserir a coluna ano nas bases do SISOR:

library(relatorios); library(frictionless)

dp <- read_package("https://raw.githubusercontent.com/splor-mg/sisor-dados-2024/main/datapackage.json")
base_orcam_despesa_item_fiscal <- read_resource(dp, "base_orcam_despesa_item_fiscal")
is_asps_desp(base_orcam_despesa_item_fiscal)

Error in .checkTypos(e, names_x) : 
  Object 'ANO' not found. Perhaps you intended ORGAO_COD, ORGAO_NOME_SIGLA, UO_NOME_SIGLA, FUNCAO_COD, SUBFUNCAO_COD or 3 more

Resolvendo isso tudo parece estar ok nas bases de receita e despesa:

library(relatorios); library(frictionless)

dp <- read_package("https://raw.githubusercontent.com/splor-mg/sisor-dados-2024/main/datapackage.json")
base_orcam_despesa_item_fiscal <- read_resource(dp, "base_orcam_despesa_item_fiscal")
base_orcam_despesa_item_fiscal$ANO <- 2024

any(is_asps_desp(base_orcam_despesa_item_fiscal))
any(is_dtp(base_orcam_despesa_item_fiscal))
any(is_mde_desp(base_orcam_despesa_item_fiscal))

base_orcam_receita_fiscal <- read_resource(dp, "base_orcam_receita_fiscal")
any(is_asps_rec(base_orcam_receita_fiscal))
is_fonte_stn_rec(base_orcam_receita_fiscal)

base_qdd_fiscal <- read_resource(dp, "base_qdd_fiscal")
any(is_asps_desp(base_qdd_fiscal, detalhe = "ACAO_COD"))
is_fonte_stn_desp(base_qdd_fiscal)
fjuniorr commented 1 year ago

A primeira tentativa foi usar field_add no build_pipeline:

build_pipeline = Pipeline(steps=[
    steps.resource_transform(
        name='base_orcam_despesa_item_fiscal', 
        steps=[
            steps.field_add(name='ANO', value=2024, descriptor={'type': 'year'}, position=1)
        ]
    )
])

Deu errado porque apesar do schema ter a coluna ANO, a propriedade path não foi adequada e o arquivo em si não foi gerado:

    {
      "name": "base_orcam_despesa_item_fiscal",
      "type": "table",
      "profile": "tabular-data-resource",
      "data": [],
      "scheme": "",
      "format": "inline",
      "mediatype": "text/csv",
      "extrapaths": [],
      "hash": "sha256:a77532cb48f92905a5dbd2c4a9ab32eac4384b85807071d66b3eecca16cc6b6a",
      "bytes": 1902623,
      "fields": 21,
      "rows": 8504,
      "schema": {
        "fields": [ ... ]
      }
fjuniorr commented 1 year ago

Adicionando as outras etapas na pipeline[^1]

build_pipeline = Pipeline(steps=[
    steps.resource_transform(
        name='base_orcam_despesa_item_fiscal', 
        steps=[
            steps.field_add(name='ANO', value=2024, descriptor={'type': 'year'}, position=1),
            steps.table_write(path='data/base_orcam_despesa_item_fiscal.csv'),
            steps.resource_update(descriptor={'path': 'data/base_orcam_despesa_item_fiscal.csv'})
        ]
    )
])

Voltei no erro encontrado em https://github.com/frictionlessdata/frictionless-py/issues/1572 e https://github.com/splor-mg/dpm/issues/28. Nesse caso se remove_field_properties fosse um custom step talvez a pipeline funcionasse.

[^1]: Que é trabalhoso e já mostra a necessidade de um step resource_export para transformar um recurso com a propriedade data em um recurso com a propriedade path.

fjuniorr commented 1 year ago

WONTFIX

Vide decisão tomada em #16