Created
May 22, 2024 22:51
-
-
Save jtrecenti/90d78b19a0c0d6920976c084a5e5aebf to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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