O presente relato está publicado em https://rpubs.com/labxss/polineuropatia.
Os dados foram extraídos do respositório SABEIS conforme https://rpubs.com/sabeis/etl.
Os dados do repositório são originados do SIA - Sistema de Informações Ambulatoriais do SUS a partir de 2008 em ftp://ftp.datasus.gov.br/dissemin/publicos/SIASUS/200801_/Dados/, cuja estratégia de disseminação TabWin/TabNet, veicula arquivos de dados DBC do tipo DBF (database file) compactado, disponíveis em diretório FTP (protocolo de transferência de arquivos).
## data frame with 0 columns and 0 rows
O repositório SABEIS contem 4.976.101 usuários do SUS com 136.324.463 registros de assistência farmacêutica entre 06/2016 e 03/2022. A base de dados contempla 316 procedimentos SIGTAP de medicamentos para 388 doenças segundo CID-10 primário da dispensação.
Foi realizada extração segundo o código CID-10 primário E851 - amiloidose heredofamiliar neuropática da doença principal atribuída ao registro de dispensação. Apenas uma tecnologia foi dispensada sob o CID-10: (SIGTAP): 06.04.54.006-0 - tafamidis 20 mg cápsula
As variáveis extraídas e defindas da base de dispensação foram
Os critérios de exclusão foram:
Ainda, foi assinalado o mês com diferença de dispensaçao superior a 92 dias como critério de interrupção do tratamento, visando ignorar os registros subsequentes.
A coorte final é constituida pelos registros st_excluir = 0, equivalente
aos usuários simultaneamente
não contemplados com o critério de exclusão e contemplados com o critério
de inclusão, bem como os registros de dispensação st_interrupcao = 0,
sendo excluídos registros após a interrupção do tratamento.
A tabela 4.1 mostra a série histórica de uma usuária do SUS a título de ilustração do conjunto de dados (dataset) de trabalho.
| nu competencia | qt aprovada | co dispensacao | qt dias proxima dispensacao | st exclusao incidente | st exclusao dissidente | st exclusao 3registros | st excluir | st interrupcao |
|---|---|---|---|---|---|---|---|---|
| 201912 | 30 | 1 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202001 | 30 | 2 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202002 | 30 | 3 | 29 | 1 | 1 | 0 | 1 | 0 |
| 202003 | 30 | 4 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202004 | 30 | 5 | 30 | 1 | 1 | 0 | 1 | 0 |
| 202005 | 30 | 6 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202006 | 30 | 7 | 30 | 1 | 1 | 0 | 1 | 0 |
| 202007 | 30 | 8 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202008 | 30 | 9 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202009 | 30 | 10 | 30 | 1 | 1 | 0 | 1 | 0 |
| 202010 | 30 | 11 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202011 | 30 | 12 | 30 | 1 | 1 | 0 | 1 | 0 |
| 202012 | 30 | 13 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202101 | 30 | 14 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202102 | 30 | 15 | 28 | 1 | 1 | 0 | 1 | 0 |
| 202103 | 30 | 16 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202104 | 30 | 17 | 30 | 1 | 1 | 0 | 1 | 0 |
| 202105 | 30 | 18 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202106 | 30 | 19 | 61 | 1 | 1 | 0 | 1 | 0 |
| 202108 | 30 | 20 | 31 | 1 | 1 | 0 | 1 | 0 |
| 202109 | 30 | 21 | 30 | 1 | 1 | 0 | 1 | 0 |
| 202110 | 30 | 22 | 151 | 1 | 1 | 0 | 1 | 1 |
| 202203 | 30 | 23 | 0 | 1 | 1 | 0 | 1 | 1 |
Foram identificados 452 usuários do SUS de 163.136 unidades aprovadas de tafamidis para polineuropatia com 5.453 registros entre 10/2019 e 03/2022.
Na avaliação da persistência foram incluídos 46 (10%) usuários do SUS de 14.581 unidades aprovadas (9%) de tafamidis para polineuropatia com 487 registros entre 01/2020 e 12/2021.
Quanto à exclusão, 115 usuários (25%) corresponderam ao critério de incidência (registro nos três primeiros meses). 342 usuários (76%) não corresponderam ao critério de dissidência (registros nos últimos três meses observados), ou seja, presumivelmente continuam utilizando o tratamento. 124 usuários (27%) registraram interrupção no período (intervalo de dispensações acima de 90 dias).
A figura 5.1 mostra o quantitativo de
406 usuários
(90%)
excluídos e respectivos percentuais relativos ao total de excluídos.
Figure 5.1: Usuários excluídos segundo os critérios de não incidentes, não desistentes e número de dispensaçoes inferior a três.
Figure 5.2: Curva de Kaplan-Meier para sobrevivência do uso de de tafamidis para polineuropatia.
Figure 5.3: Curva de Kaplan-Meier para sobrevivência do uso de de tafamidis para polineuropatia segundo o sexo.
# OBTEM ARQUIVOS DO REPOSITORIO DO DATASUS E CARREGA NO POSTGRESQL
# Baixa os arquivos DBC do ftp do datasus para o Brasil.
# Recupera a quantidade aprovada do arquivo AM para o PA com procedimento 06
# Incorpora no PostgreSQL
# voce deve rodar no linux tendo instalado:
# wine
# dbview
# postgresql cliente
library("RCurl") # funcao getURL
library("downloader") # funcao download
library("RPostgreSQL") # conexao com SGBF
# library("read.dbc") # leitura de arquivo dbc
# library(foreign)
library(data.table)
library(gsubfn)
library(dplyr)
library(stringr) # para str_replace
library(read.dbc)
library(googledrive)
library(scales)
library(knitr)
library(lubridate)
library(png)
library(R.utils)
library(kableExtra)
options(scipen = 100) # Evita notacao cientifica
# CONEXAO COM O SGBD
pg_conecta = function(
dbname,
host,
port,
user,
password
){
con = DBI::dbConnect(
dbDriver(drvName = "PostgreSQL"),
dbname = dbname,
host = host,
port = port,
user = user,
password = password
)
return(con)
}
conexao = pg_conecta(dbname, host, port, user, password)
pg_roda_query = function(query){
con = pg_conecta(dbname, host, port, user, password)
x=dbGetQuery(
con,
query
)
dbDisconnect(con)
rm(con)
return(x)
}
# adiciona coisa no banco de dados
pg_persiste = function(dataframe, no_banco, no_tabela, overwrite, append){
con = pg_conecta(dbname, host, port, user, password)
x=dbWriteTable(
con,
c(no_banco,no_tabela),
dataframe,
overwrite = overwrite,
append = append
)
dbDisconnect(con)
rm(con)
return(x)
}
library(stringr)
set_colnames = function(vetor){
x=str_replace_all(
str_replace_all(
str_replace_all(
str_replace_all(
str_replace_all(iconv(tolower(vetor), from = 'UTF-8',
to = 'ASCII//TRANSLIT'),'[^a-z0-9]','_')
,'__','_')
,'__','_')
,'_$','')
,'_',' ')
return(x)
}
formata <- function(x) {
y = format(x, big.mark = ".", decimal.mark = ",", scientific = F)
return(y)
}
formata_mes <- function(x) {
y = format(as.Date(paste0(x,"15"),"%Y%m%d"),"%m/%Y")
return(y)
}
firstup <- function(x) {
substr(x, 1, 1) <- toupper(substr(x, 1, 1))
x
}
library(gsheet)
get_gsheet = function(url,planilha){
ds=as.data.frame(gsheet2tbl(url, sheetid = planiha))
colnames(ds)=set_colnames(colnames(ds))
# ds[is.na(ds)] <- 0
return(ds)
}
library(ggplot2)
library(grid)
library(pyramid)
# library(sf)
library(forecast)
library(tseries)
plot_difusao <- function(dataframe, titulo, tipo,rotulo_x, rotulo_y) {
# dataframe: atributo | tempo | n | p |rotulo |
# plot_difusao(dataframe[[2]],"teste","empilhada")
# dataframe: tempo | categoria | valor | percentual
# tempo = colnames(dataframe)[1]
# categoria = colnames(dataframe)[2]
# percentual = colnames(dataframe)[4]
# dataframe$ano = as.factor(dataframe$ano)
# dataframe$rotulo = format(dataframe$rotulo, big.mark = ".", decimal.mark = ",")
# eixo_x=sort(levels(as.factor(dataframe[,2])))
# eixo_x[!1:length(eixo_x) %in% seq(1, length(eixo_x),by = round(length(eixo_x)/12))]=""
# seq(as.Date("2001-01-01"), by = "month", along = foo)
# obtem escala de milhar, milhao, bilhao, etc
escala=10^max(seq(3,15, by = 3)[mean(log10(dataframe$n))>seq(3,15, by = 3)])
if (!is.na(escala) & !is.infinite(escala) & escala>0) {
dataframe[,3]=dataframe[,3]/escala
rotulo_y=paste0(rotulo_y, " (×", formata(escala) ,")")
}
if (tipo == 'empilhada') {
g =ggplot(
dataframe,
aes(
fill = atributo,
y = p,
x = ano,
label = rotulo
)
) +
geom_bar(stat = "identity") +
xlab('ano') +
ylab('usuários (%)') +
geom_text(size = 4, position = position_stack(vjust = 0.5)) +
coord_flip() +
scale_fill_brewer(palette = "Pastel1") +
theme(
legend.position = "bottom",
legend.text = element_text(size = rel(1.3)),
axis.title.x = element_text(size = rel(1.3)),
axis.title.y = element_text(size = rel(1.3)),
axis.text.x = element_text(size = rel(1.3)),
axis.text.y = element_text(size = rel(1.3))
)
}
if (tipo == 'barras verticais') {
g = ggplot(dataframe, aes(fill=atributo, y=n/100000, x=ano)) +
geom_bar(position="dodge", stat="identity") +
scale_fill_brewer(palette = "Set2")+
theme(
legend.position = "bottom",
legend.text = element_text(size = rel(1.3)),
axis.title.x = element_text(size = rel(1.3)),
axis.title.y = element_text(size = rel(1.3)),
axis.text.x = element_text(size = rel(1.3)),
axis.text.y = element_text(size = rel(1.3))
)+
xlab('ano') +
ylab('usuários por 100 mil hab.')
}
if (tipo == 'série temporal 1') {
g = ggplot(dataframe, aes(x=ano, y=n, group=atributo, color=atributo)) +
geom_line() +
scale_fill_brewer(palette = "Set2")+
labs(title = titulo)+
# scale_x_continuous(breaks = eixo_x) +
# scale_x_datetime(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
xlab('') +
ylab(rotulo_y) +
scale_y_continuous(labels=function(x) formata(x)) +
theme(
legend.position = "none",
legend.text = element_text(size = rel(1.0)),
axis.title.x = element_text(size = rel(1.0)),
axis.title.y = element_text(size = rel(1.0)),
axis.text.x = element_text(size = rel(1.0), angle = 45),
axis.text.y = element_text(size = rel(1.3))
)
}
if (tipo == 'série temporal 2'){
p = ggplot(dataframe) +
geom_line(aes(x = ano, y = n, group = atributo, colour = atributo)) +
geom_text(data = subset(dataframe, ano ==
input$painel_situacao_clinica_inAno[2] ),
aes(label = atributo, colour = atributo, x = Inf, y = n), hjust = 1) +
scale_colour_discrete(guide = 'none') +
# xlab('ano') +
# ylab('usuários') +
theme(plot.margin = unit(c(1,3,1,1), "lines"),
axis.title.x = element_text(size = rel(1.3)),
axis.title.y = element_text(size = rel(1.3)),
axis.text.x = element_text(size = rel(1.3)),
axis.text.y = element_text(size = rel(1.3))
,legend.position = "none"
)
# Code to turn off clipping
gt <- ggplotGrob(p)
gt$layout$clip[gt$layout$name == "panel"] <- "off"
g = grid.draw(gt)
}
if (tipo == 'série temporal 3') {
tsdata=dataframe$n
names(tsdata)=dataframe$ano
tsdata= forecast(auto.arima(
tsdata,
allowmean = TRUE
), h = 60)
g = autoplot(tsdata) +
geom_line() +
scale_fill_brewer(palette = "Set2")+
labs(title = titulo)+
xlab('') +
ylab(rotulo_y) +
scale_y_continuous(labels=function(x) formata(x)) +
theme(
legend.position = "none",
legend.text = element_text(size = rel(1.0)),
axis.title.x = element_text(size = rel(1.0)),
axis.title.y = element_text(size = rel(1.0)),
axis.text.x = element_text(size = rel(1.0), angle = 45),
axis.text.y = element_text(size = rel(1.3))
)
}
return(g)
}
plot_arima <- function(dataframe,titulo, rotulo_x, rotulo_y) {
tsdata=dataframe$n
names(tsdata)=dataframe$ano
plot(
forecast(auto.arima(
tsdata,
allowmean = TRUE
), h = 60),
xlab = rotulo_x,
ylab = rotulo_y,
main = titulo
)
}
DROP TABLE IF EXISTS tf_medicamento_polineuropatia;
CREATE TABLE tf_medicamento_polineuropatia as
select nu_usuariosus,
nu_competencia,
sg_sexo ,
co_ibge_municipio_residencia ,
nu_idade ,
qt_aprovada ,
DENSE_RANK() OVER(
PARTITION by nu_usuariosus
ORDER BY nu_competencia
) as co_dispensacao,
DENSE_RANK() OVER(
ORDER BY nu_competencia
) as co_competencia1,
DENSE_RANK() OVER(
ORDER BY nu_competencia desc
) as co_competencia2
from bd_sabeis.tf_medicamento
where co_cidpri = 'E851'
and qt_aprovada > 0
order by nu_usuariosus,
nu_competencia;
alter table tf_medicamento_polineuropatia
add qt_dias_proxima_dispensacao INT2 default 0;
update tf_medicamento_polineuropatia A
set qt_dias_proxima_dispensacao =
case when B.nu_competencia is not null then
TO_DATE(B.nu_competencia::text || '15', 'YYYYMMDD') -
TO_DATE(A.nu_competencia::text || '15', 'YYYYMMDD')
else
(date_trunc(
'month', TO_DATE(A.nu_competencia::text || '01', 'YYYYMMDD')) +
interval '1 month' - interval '1 day')::date -
TO_DATE(A.nu_competencia::text || '01', 'YYYYMMDD')
END
from tf_medicamento_polineuropatia B
where A.nu_usuariosus = B.nu_usuariosus
and A.co_dispensacao = B.co_dispensacao - 1;
alter table tf_medicamento_polineuropatia
add st_exclusao_incidente int2 default 0,
add st_exclusao_dissidente int2 default 0,
add st_exclusao_3registros int2 default 0,
add st_excluir int2 default 0;
update tf_medicamento_polineuropatia
set st_exclusao_incidente = 1,
st_excluir = 1
where nu_usuariosus in
(select nu_usuariosus
from tf_medicamento_polineuropatia
where co_competencia1 <=3);
update tf_medicamento_polineuropatia
set st_exclusao_dissidente = 1,
st_excluir = 1
where nu_usuariosus in
(select nu_usuariosus
from tf_medicamento_polineuropatia
where co_competencia2 <=3);
update tf_medicamento_polineuropatia
set st_exclusao_3registros = 1,
st_excluir = 1
where nu_usuariosus in
(select nu_usuariosus
from tf_medicamento_polineuropatia
group by 1
having count(*) <3);
alter table tf_medicamento_polineuropatia
add st_interrupcao int2 default 0;
update tf_medicamento_polineuropatia A
set st_interrupcao = 1
from (select nu_usuariosus,
min(co_dispensacao) co_dispensacao
from tf_medicamento_polineuropatia
where qt_dias_proxima_dispensacao > 92
group by 1) B
where A.nu_usuariosus = B.nu_usuariosus
and A.co_dispensacao >= B.co_dispensacao;
drop materialized view if exists bd_sabeis.vw_medicamento_polineuropatia_coorte_kaplan;
create materialized view bd_sabeis.vw_medicamento_polineuropatia_coorte_kaplan as
select x.*,
co_ibge_municipio_residencia,
nu_idade_min,
nu_idade_max,
qt_aprovada,
qt_registros,
dt_min,
nu_competencia_min,
nu_competencia_max,
dt_max,
qt_dias_tratamento,
st_exclusao_incidente,
st_exclusao_dissidente,
st_excluir,
case when qt_registros <=3 then 1 else 0 end as st_exclusao_3meses
from
(
select nu_usuariosus,
string_agg(distinct sg_sexo, '') sg_sexo,
string_agg(distinct co_ibge_municipio_residencia::text, ' ') co_ibge_municipio_residencia_t,
min(nu_idade) nu_idade_min_t,
max(nu_idade) nu_idade_max_t,
sum(qt_aprovada) qt_aprovada_t,
count(*) qt_registros_t,
TO_DATE(min(nu_competencia)::text || '01', 'YYYYMMDD') as dt_min_t,
min(nu_competencia) nu_competencia_min_t,
max(nu_competencia) nu_competencia_max_t,
(date_trunc('month', TO_DATE(max(nu_competencia)::text || '01', 'YYYYMMDD')) +
interval '1 month' - interval '1 day')::date as dt_max_t,
(date_trunc('month', TO_DATE(max(nu_competencia)::text || '01', 'YYYYMMDD')) +
interval '1 month' - interval '1 day')::date -
TO_DATE(min(nu_competencia)::text || '01', 'YYYYMMDD') qt_dias_tratamento_t
from tf_medicamento_polineuropatia
group by 1
) x
left join
(
select nu_usuariosus,
string_agg(distinct co_ibge_municipio_residencia::text, ' ') co_ibge_municipio_residencia,
min(nu_idade) nu_idade_min,
max(nu_idade) nu_idade_max,
sum(qt_aprovada) qt_aprovada,
count(*) qt_registros,
TO_DATE(min(nu_competencia)::text || '01', 'YYYYMMDD') as dt_min,
min(nu_competencia) nu_competencia_min,
max(nu_competencia) nu_competencia_max,
(date_trunc('month', TO_DATE(max(nu_competencia)::text || '01', 'YYYYMMDD')) +
interval '1 month' - interval '1 day')::date as dt_max,
(date_trunc('month', TO_DATE(max(nu_competencia)::text || '01', 'YYYYMMDD')) +
interval '1 month' - interval '1 day')::date -
TO_DATE(min(nu_competencia)::text || '01', 'YYYYMMDD') qt_dias_tratamento,
sum(distinct st_exclusao_incidente) as st_exclusao_incidente,
sum(distinct st_exclusao_dissidente) as st_exclusao_dissidente,
sum(distinct st_excluir) st_excluir
from tf_medicamento_polineuropatia
where st_interrupcao = 0
group by 1
) y
on x.nu_usuariosus = y.nu_usuariosus
order by 1;
| nu usuariosus | qt dias tratamento aderente | nu idade min aderente | nu idade max aderente | qt aprovada aderente | qt registros aderente | dt min aderente | dt max aderente |
|---|---|---|---|---|---|---|---|
| 304404484034513 | 60 | 70 | 70 | 120 | 4 | 2021-10-01 | 2021-11-30 |
| 300306510491335 | 88 | 71 | 71 | 120 | 4 | 2021-02-01 | 2021-04-30 |
| 304804243969210 | 120 | 56 | 56 | 120 | 4 | 2020-01-01 | 2020-04-30 |
| 304003840125346 | 121 | 55 | 56 | 120 | 4 | 2021-06-01 | 2021-09-30 |
| 302408451806589 | 121 | 31 | 31 | 150 | 5 | 2020-08-01 | 2020-11-30 |
| 151000428294336 | 150 | 57 | 58 | 150 | 5 | 2020-12-01 | 2021-04-30 |
| 304003830621845 | 152 | 38 | 38 | 120 | 4 | 2020-08-01 | 2020-12-31 |
| 151002828894998 | 180 | 32 | 33 | 120 | 4 | 2020-11-01 | 2021-04-30 |
| 904046242140002 | 181 | 54 | 54 | 121 | 4 | 2020-01-01 | 2020-06-30 |
| 304105618342346 | 211 | 80 | 81 | 210 | 7 | 2021-02-01 | 2021-08-31 |
| 306004493228364 | 211 | 42 | 42 | 210 | 7 | 2020-11-01 | 2021-05-31 |
| 306004436293663 | 213 | 81 | 81 | 180 | 6 | 2021-03-01 | 2021-09-30 |
| 300205440621490 | 242 | 31 | 31 | 240 | 8 | 2020-10-01 | 2021-05-31 |
| 151002228690364 | 242 | 48 | 49 | 240 | 8 | 2020-08-01 | 2021-03-31 |
| 151060088424992 | 243 | 52 | 53 | 209 | 7 | 2020-01-01 | 2020-08-31 |
| 304902631383943 | 244 | 75 | 75 | 210 | 7 | 2021-05-01 | 2021-12-31 |
| 302902059838220 | 272 | 76 | 77 | 300 | 10 | 2020-08-01 | 2021-04-30 |
| 305906908480481 | 274 | 43 | 44 | 270 | 9 | 2021-03-01 | 2021-11-30 |
| 309204342498150 | 303 | 32 | 33 | 270 | 9 | 2020-05-01 | 2021-02-28 |
| 186608093584134 | 303 | 62 | 63 | 270 | 9 | 2020-11-01 | 2021-08-31 |
| 304804381183330 | 333 | 73 | 74 | 300 | 10 | 2021-01-01 | 2021-11-30 |
| 301602862201635 | 333 | 42 | 43 | 330 | 11 | 2020-09-01 | 2021-07-31 |
| 151002413821334 | 333 | 73 | 74 | 330 | 11 | 2021-02-01 | 2021-12-31 |
| 304905354222614 | 334 | 39 | 40 | 272 | 9 | 2020-01-01 | 2020-11-30 |
| 905445046500002 | 364 | 78 | 78 | 360 | 12 | 2020-12-01 | 2021-11-30 |
| 151008966035046 | 364 | 67 | 68 | 330 | 11 | 2020-11-01 | 2021-10-31 |
| 309403902119249 | 365 | 74 | 75 | 360 | 12 | 2020-01-01 | 2020-12-31 |
| 304500296660383 | 365 | 46 | 47 | 300 | 10 | 2020-02-01 | 2021-01-31 |
| 102440441510920 | 425 | 28 | 29 | 360 | 12 | 2020-05-01 | 2021-06-30 |
| 308406032468283 | 456 | 61 | 63 | 390 | 13 | 2020-07-01 | 2021-09-30 |
| 309409016292694 | 456 | 49 | 50 | 390 | 13 | 2020-03-01 | 2021-05-31 |
| 309806289615029 | 456 | 66 | 67 | 390 | 13 | 2020-03-01 | 2021-05-31 |
| 151008324119334 | 456 | 34 | 35 | 420 | 15 | 2020-03-01 | 2021-05-31 |
| 300408510941041 | 456 | 60 | 61 | 360 | 12 | 2020-10-01 | 2021-12-31 |
| 309404831555480 | 456 | 45 | 46 | 390 | 13 | 2020-03-01 | 2021-05-31 |
| 300609822384860 | 485 | 68 | 69 | 450 | 15 | 2020-01-01 | 2021-04-30 |
| 304904948806412 | 485 | 77 | 78 | 390 | 13 | 2020-01-01 | 2021-04-30 |
| 304300320832485 | 486 | 24 | 25 | 360 | 12 | 2020-03-01 | 2021-06-30 |
| 301005866008496 | 486 | 60 | 62 | 480 | 16 | 2020-03-01 | 2021-06-30 |
| 306002126641968 | 517 | 61 | 62 | 390 | 13 | 2020-07-01 | 2021-11-30 |
| 301900203290149 | 517 | 58 | 60 | 480 | 16 | 2020-07-01 | 2021-11-30 |
| 301400604963511 | 668 | 18 | 20 | 540 | 18 | 2020-02-01 | 2021-11-30 |
| 151000012695862 | 668 | 67 | 68 | 570 | 19 | 2020-02-01 | 2021-11-30 |
| 151000081623233 | 669 | 49 | 50 | 599 | 20 | 2020-01-01 | 2021-10-31 |
| 151002438896128 | 670 | 41 | 42 | 600 | 20 | 2020-03-01 | 2021-12-31 |
| 186608024106094 | 730 | 33 | 35 | 690 | 23 | 2020-01-01 | 2021-12-31 |