## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment  = "#>",
  eval     = FALSE
)

## ----install------------------------------------------------------------------
# # Via remotes
# remotes::install_github("gecomt/datacaged")

## ----workers------------------------------------------------------------------
# # Control the number of workers
# caged_download(years = 2023, months = 1:3, workers = 3)  # padrão
# 
# # Set globally for the entire session
# options(datacaged.workers = 4)
# 
# # Sequential mode (useful for unstable connections)
# caged_download(years = 2023, months = 1, workers = 1)

## ----load-basico--------------------------------------------------------------
# library(datacaged)
# 
# # Download Novo CAGED Jan–Dec/2023
# # Novo CAGED: national file, `states` does not filter
# caged_load(
#   years    = 2023,
#   months   = seq_len(12L),
#   db_path = "caged.duckdb"
# )

## ----consulta-dplyr-----------------------------------------------------------
# library(dplyr)
# 
# con <- caged_connect("caged.duckdb")
# 
# # Monthly employment balance in 2023
# saldo_mensal <- tbl(con, "caged_mov") |>
#   group_by(competenciamov) |>
#   summarise(saldo = sum(saldomovimentacao, na.rm = TRUE)) |>
#   arrange(competenciamov) |>
#   collect()
# 
# saldo_mensal

## ----consulta-sql-------------------------------------------------------------
# # Or with direct SQL
# DBI::dbGetQuery(con, "
#   SELECT
#     competenciamov,
#     uf,
#     SUM(saldomovimentacao) AS saldo,
#     AVG(salario)           AS salario_medio,
#     COUNT(*)               AS movimentacoes
#   FROM caged_mov
#   WHERE uf = 35          -- Sao Paulo
#   GROUP BY competenciamov, uf
#   ORDER BY competenciamov
# ")

## ----desconectar--------------------------------------------------------------
# DBI::dbDisconnect(con, shutdown = TRUE)

## ----download-----------------------------------------------------------------
# # Download and save to local cache (~/.local/share/R/datacaged por padrão)
# manifest <- caged_download(
#   years    = 2023,
#   months   = c(1L, 2L, 3L),
#   destdir = "~/meus_dados/caged_cache"
# )
# 
# # manifest is a data.frame with the status of each file
# dplyr::count(manifest, status)

## ----parse--------------------------------------------------------------------
# # One file at a time
# df <- caged_parse("~/meus_dados/caged_cache/caged_mov/2023/CAGEDMOV202301.7z")
# glimpse(df)
# 
# # Several at once
# arquivos <- list.files(
#   "~/meus_dados/caged_cache/NOVO_CAGED/2023",
#   pattern    = "CAGEDMOV",
#   full.names = TRUE
# )
# df_todos <- caged_parse_batch(arquivos)

## ----gravar-------------------------------------------------------------------
# caged_to_duckdb(df_todos, db_path = "caged.duckdb")

## ----info---------------------------------------------------------------------
# caged_info("caged.duckdb")
# #> ── caged.duckdb ────────────────────────────────────────
# #> Tamanho do arquivo: 142.3 MB
# #> ── Tabelas ──────────────────────────────────────────────
# #> * "caged_mov"   Registros: 3,665,155
# #> * "caged_for"      Registros:    91,098
# #> * "caged_exc"       Registros:     7,900
# #>   Registros   : 4.823.901
# #>   Competências: 202301 – 202312

## ----historico----------------------------------------------------------------
# # Baixa Legacy CAGED para Nordeste (2015–2019)
# nordeste <- c("MA", "PI", "CE", "RN", "PB", "PE", "AL", "SE", "BA")
# 
# caged_load(
#   years    = 2015:2019,
#   db_path = "caged_historico.duckdb"
# )
# 
# con <- caged_connect("caged_historico.duckdb")
# 
# # Evolução anual do saldo formal no Nordeste
# tbl(con, "caged_antigo") |>
#   mutate(ano = as.integer(substr(as.character(competencia), 1, 4))) |>
#   group_by(ano, uf) |>
#   summarise(saldo = sum(saldomovimentacao, na.rm = TRUE)) |>
#   collect() |>
#   tidyr::pivot_wider(names_from = uf, values_from = saldo)
# 
# DBI::dbDisconnect(con, shutdown = TRUE)

## ----ajustes------------------------------------------------------------------
# # Baixar ajustes de 2019
# caged_adjustments_load(years = 2019, months = seq_len(12L), db_path = "caged.duckdb")
# 
# # Listar o que está disponível no HuggingFace
# caged_hf_files(type = "ajustes")
# 
# # Comparar saldo original vs ajustado
# con <- caged_connect("caged.duckdb")
# 
# antigo  <- dplyr::tbl(con, "caged_antigo")  |>
#   dplyr::group_by(competencia) |>
#   dplyr::summarise(saldo_original = sum(saldomovimentacao, na.rm = TRUE))
# 
# ajustes <- dplyr::tbl(con, "caged_ajustes") |>
#   dplyr::group_by(competencia) |>
#   dplyr::summarise(saldo_ajuste = sum(saldomovimentacao, na.rm = TRUE))
# 
# dplyr::full_join(antigo, ajustes, by = "competencia") |>
#   dplyr::mutate(saldo_final = saldo_original + saldo_ajuste) |>
#   dplyr::collect()
# 
# DBI::dbDisconnect(con, shutdown = TRUE)

## ----utilitarios--------------------------------------------------------------
# # Verificar se o HuggingFace está online antes de baixar
# caged_status()
# 
# # Listar competências disponíveis no HuggingFace
# caged_hf_files()                     # Novo CAGED (últimos 12 meses)
# caged_hf_files(type = "antigo")      # Legacy CAGED
# caged_hf_files(type = "ajustes")     # CAGED Adjustments
# 
# # Atualização incremental — baixa apenas o que ainda não está no banco
# caged_update(db_path = "caged.duckdb")
# caged_update(db_path = "caged.duckdb", series = c("novo", "antigo"))
# 
# # Exportar tabelas para Parquet (nativo DuckDB, muito rápido)
# caged_to_parquet("caged.duckdb", output_dir = "~/exports")
# caged_to_parquet("caged.duckdb", output_dir = "~/exports",
#                  tables = "caged_mov", partition_by = "uf")

