Skip to content

Instantly share code, notes, and snippets.

@jtrecenti
Created May 22, 2024 22:51
Show Gist options
  • Save jtrecenti/90d78b19a0c0d6920976c084a5e5aebf to your computer and use it in GitHub Desktop.
Save jtrecenti/90d78b19a0c0d6920976c084a5e5aebf to your computer and use it in GitHub Desktop.
tibble::tibble()
tribunais <- forosCNJ::da_tribunal |>
dplyr::filter(id_justica == 8) |>
dplyr::pull(sigla) |>
tolower()
endpoints <- glue::glue(
"https://api-publica.datajud.cnj.jus.br/api_publica_{tribunais}/_search"
)
codigos_assuntos_inadimplentes <- c(
"6226"
)
header <- c(
"Authorization" = "ApiKey cDZHYzlZa0JadVREZDJCendQbXY6SkJlTzNjLV9TRENyQk1RdnFKZGRQdw==",
"Content-Type" = "application/json"
)
# base64enc::base64decode("cDZHYzlZa0JadVREZDJCendQbXY6SkJlTzNjLV9TRENyQk1RdnFKZGRQdw==") |>
# rawToChar()
body <- list(
query = list(
bool = list(
must = list(
match = list(
"assuntos.codigo" = codigos_assuntos_inadimplentes
)
)
)
),
size = 10000,
sort = list(
list(
"@timestamp" = list(
order = "asc"
)
)
)
)
pesquisar_tribunal <- function(tribunal, body, max_pag = 3) {
usethis::ui_info("Pesquisando tribunal {tribunal}...")
endpoint <- glue::glue(
"https://api-publica.datajud.cnj.jus.br/api_publica_{tribunal}/_search"
)
pag <- 1
usethis::ui_info("Pesquisando página {pag}...")
r <- httr::POST(
endpoint,
body = body,
encode = "json",
httr::add_headers(header)
)
r_list <- httr::content(r)$hits$hits
len_list <- length(r_list)
usethis::ui_info("Foram encontrados {len_list} registros.")
while (len_list == 10000 && pag < max_pag) {
pag <- pag + 1
usethis::ui_info("Pesquisando página {pag}...")
last_sort <- r_list |>
dplyr::last() |>
purrr::pluck("sort") |>
unlist()
body$search_after <- list(last_sort)
r <- httr::POST(
endpoint,
body = body,
encode = "json",
httr::add_headers(header)
)
r_pag <- httr::content(r)$hits$hits
r_list <- c(r_list, r_pag)
len_list <- length(r_pag)
usethis::ui_info("Foram encontrados {len_list} registros.")
}
r_list
}
res <- pesquisar_tribunal("tjsp", body, 2)
parse_item <- function(x) {
src <- x[["_source"]]
tab_parsed <- tibble::tibble(
id = src$id,
n_processo = src$numeroProcesso,
classe_id = src$classe$codigo,
classe_nm = src$classe$nome,
sistema_id = src$sistema$codigo,
sistema_nm = src$sistema$nome,
formato_id = src$formato$codigo,
formato_nm = src$formato$nome,
tribunal = src$tribunal,
data_ultima_atualizacao = src$dataHoraUltimaAtualizacao,
grau = src$grau,
data_ajuizamento = src$dataAjuizamento,
nivel_sigilo = src$nivelSigilo,
orgao_julgador_ibge = src$orgaoJulgador$codigoMunicipioIBGE,
orgao_julgador_id = src$orgaoJulgador$codigo,
orgao_julgador_nm = src$orgaoJulgador$nome,
movimentos = src$movimentos |>
tibble::enframe() |>
tidyr::unnest_wider(value) |>
janitor::clean_names() |>
list()
# assuntos = src$assuntos |>
# purrr::map_if(\(x) length(x) == 1, \(x) x[[1]], .else = \(x) x) |>
# purrr::discard(\(x) length(x) != 2) |>
# tibble::enframe() |>
# tidyr::unnest_wider(value) |>
# list()
)
tab_parsed
}
dados <- parse_item(res[[2]]) |>
dplyr::glimpse()
dados$movimentos[[1]] |>
print(n = 100)
safe <- purrr::possibly(parse_item, tibble::tibble())
da_result <- res |>
sample(1000) |>
purrr::map(safe, .progress = TRUE) |>
purrr::list_rbind(names_to = "elastic_id")
aux_movs <- da_result |>
tidyr::unnest(movimentos)
dplyr::glimpse(aux_movs)
# aux_movs |>
# dplyr::count(nome, sort = TRUE) |>
# print(n = 200)
# aproximadamente 0,5% dos processos são decretados revelia
aux_movs |>
dplyr::filter(nome == "Decretação de revelia") |>
dplyr::distinct(n_processo)
favoravel <- c(
"Procedência em Parte",
"Provimento em Parte",
"Parcial",
"Procedência"
)
desfavoravel <- c(
"Não-Provimento",
"Indeferimento da petição inicial",
"Indeferimento"
)
acordo <- c(
"Homologação de Transação"
)
desistiu <- c(
"Desistência",
"Abandono da causa"
)
dados_arrumados <- aux_movs |>
dplyr::mutate(resultado = dplyr::case_when(
nome %in% favoravel ~ "favoravel",
nome %in% desfavoravel ~ "desfavoravel",
nome %in% acordo ~ "acordo",
nome %in% desistiu ~ "desistiu",
.default = NA
)) |>
dplyr::filter(!is.na(resultado)) |>
dplyr::arrange(data_hora) |>
dplyr::distinct(id, .keep_all = TRUE) |>
dplyr::filter(grau %in% c("G1", "JE"))
dados_arrumados |>
dplyr::count(grau, resultado) |>
dplyr::group_by(grau) |>
dplyr::mutate(prop = n/sum(n)) |>
dplyr::ungroup()
dados_arrumados |>
dplyr::count(grau, resultado) |>
dplyr::mutate(prop = n / sum(n), .by = grau) |>
dplyr::mutate(prop = formattable::percent(prop))
dados_arrumados |>
dplyr::count(grau, resultado) |>
dplyr::mutate(prop = n / sum(n), .by = grau) |>
dplyr::mutate(prop = formattable::percent(prop)) |>
ggplot2::ggplot(ggplot2::aes(x = grau, fill = resultado, y = prop)) +
ggplot2::geom_col(position = "dodge") +
ggplot2::scale_fill_viridis_d(begin = .2, end = .8) +
ggplot2::theme_minimal()
readr::write_rds(da_result, "data-raw/rds/da_franquia.rds")
readr::read_rds("data-raw/rds/da_franquia.rds") |>
dplyr::glimpse()
da_result |>
dplyr::count(grau)
da_result |>
dplyr::mutate(ano = lubridate::year(data_ajuizamento)) |>
dplyr::filter(grau %in% c("G1", "JE")) |>
dplyr::count(grau, ano) |>
dplyr::filter(ano >= 2020) |>
print(n = 100)
set.seed(1)
da_result |>
dplyr::mutate(ano = lubridate::year(data_ajuizamento)) |>
dplyr::filter(grau %in% c("G1", "JE")) |>
dplyr::filter(ano >= 2020) |>
dplyr::distinct(n_processo, .keep_all = TRUE) |>
dplyr::group_by(grau, ano) |>
dplyr::slice_sample(n = 3) |>
dplyr::select(n_processo, ano, grau, orgao_julgador_nm) |>
knitr::kable()
da_result |>
dplyr::mutate(ano = lubridate::year(data_ajuizamento)) |>
dplyr::filter(grau %in% c("G1", "JE")) |>
dplyr::filter(ano >= 2020) |>
dplyr::distinct(n_processo, .keep_all = TRUE) |>
dplyr::count(grau)
da_result |>
dplyr::mutate(ano = lubridate::year(data_ajuizamento)) |>
dplyr::filter(grau %in% c("G1", "JE")) |>
dplyr::filter(ano >= 2020) |>
tidyr::unnest(assuntos) |>
dplyr::count(nome, sort = TRUE)
tjsp::tjsp_baixar_cjpg(assunto = "", diretorio = "data-raw/franquias/cjpg")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment