pkgs <- c("svglite","dplyr","tidyr","stringr","forcats","ggplot2","scales","patchwork","ggrepel","gt")
invisible(lapply(pkgs, function(p){ if(!requireNamespace(p,quietly=TRUE))
  install.packages(p,quiet=TRUE,repos="https://cloud.r-project.org")
  suppressPackageStartupMessages(library(p,character.only=TRUE)) }))
H <- readRDS("data/hrh_supply_aggregates.rds")          # workforce
F <- readRDS("data/facilities_supply_aggregates.rds")   # facilities
M <- readRDS("data/medicines_aggregates.rds")           # psychotropic medicines (HTA)
G <- readRDS("data/governance_aggregates.rds")          # policy/regulation + PNPK
## financing/integration numbers from the ARC9.3 REGULER claims bundle (unbiased basis)
JKN <- tryCatch(readRDS("/home/arcinstitute/1. Project Center/ARC9. Mental Health Institute/9.3 JKN on Mental Health/analysis/reguler/mental_reguler_aggregates.rds"), error=function(e) NULL)
fix64 <- function(x){ if(is.data.frame(x)){x[]<-lapply(x,function(c) if(inherits(c,"integer64")) as.numeric(c) else c);x}
  else if(is.list(x)) lapply(x,fix64) else if(inherits(x,"integer64")) as.numeric(x) else x }
if(!is.null(JKN)) JKN <- fix64(JKN)
OUT_DIR <- "outputs"; if(!dir.exists(OUT_DIR)) dir.create(OUT_DIR)

NAVY<-"#1e3a5f"; BLUE<-"#2d5a9e"; RED<-"#dc2626"; AMBER<-"#d97706"
TEAL<-"#0f766e"; GREY<-"#6b7280"; GREEN<-"#16a34a"; PURPLE<-"#7c3aed"; ORANGE<-"#ea580c"
ISL_COLS <- c("Jawa"=NAVY,"Sumatera"=BLUE,"Sulawesi"=TEAL,"Kalimantan"=AMBER,"Bali-Nusra"=PURPLE,"Maluku-Papua"=RED,"Lainnya"=GREY)
th <- function(b=11) theme_minimal(base_size=b) + theme(
  plot.title=element_text(color=NAVY,face="bold",size=b+2,margin=margin(b=4),family="serif"),
  plot.subtitle=element_text(color=GREY,size=b-1,lineheight=1.3), plot.caption=element_text(color=GREY,size=b-3,hjust=1),
  plot.background=element_rect(fill="white",color=NA), panel.background=element_rect(fill="#f9fafb",color=NA),
  panel.border=element_rect(color="#e5e7eb",fill=NA,linewidth=0.4),
  panel.grid.major=element_line(color="#e5e7eb",linewidth=0.3), panel.grid.minor=element_blank(),
  legend.position="bottom", strip.background=element_rect(fill=NAVY,color=NA),
  strip.text=element_text(color="white",face="bold",size=b-1))
gfmt <- function(g) g |> gt::tab_options(heading.background.color=NAVY, heading.title.font.size=gt::px(13),
    column_labels.background.color=BLUE, column_labels.font.weight="bold", column_labels.font.size=gt::px(11),
    row.striping.include_table_body=TRUE, row.striping.background_color="#f0f4ff",
    table.border.top.color=NAVY, table.border.top.width=gt::px(3), table.width=gt::pct(100),
    data_row.padding=gt::px(5), source_notes.font.size=gt::px(10)) |>
  gt::tab_style(style=gt::cell_text(color="white",weight="bold"), locations=gt::cells_column_labels(gt::everything()))
CAP <- "Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025"
fmt <- function(x) formatC(round(x), format="d", big.mark=",")
figtab <- function(df, title="Data figur"){
  df <- as.data.frame(df)
  g <- gt::gt(df) |> gt::tab_header(title=gt::md(paste0("**",title,", tabel data figur**"))) |>
    gt::tab_source_note(gt::md(CAP)) |> gfmt()
  for(j in seq_along(df)) if(is.numeric(df[[j]])){ v<-df[[j]]; isint<-all(abs(v-round(v))<1e-9,na.rm=TRUE)
    g <- gt::fmt_number(g, columns=j, decimals=if(isint)0 else if(max(abs(v),na.rm=TRUE)<10)3 else 1, use_seps=TRUE) }
  g <- gt::sub_missing(g, columns=gt::everything(), missing_text="–")
  g
}
## visible companion table (shown INSIDE the tab, not collapsed), "tiap figure tampilkan tabelnya"
showtab <- function(df, title){
  df <- as.data.frame(df)
  g <- gt::gt(df) |> gt::tab_header(title=gt::md(paste0("**",title,", tabel data figur**"))) |>
    gt::opt_table_font(size=gt::pct(88)) |> gt::tab_source_note(gt::md(CAP)) |> gfmt()
  for(j in seq_along(df)) if(is.numeric(df[[j]])){ v<-df[[j]]; isint<-all(abs(v-round(v))<1e-9,na.rm=TRUE)
    g <- gt::fmt_number(g, columns=j, decimals=if(isint)0 else if(max(abs(v),na.rm=TRUE)<10)3 else 1, use_seps=TRUE) }
  g <- gt::sub_missing(g, columns=gt::everything(), missing_text="–")
  g
}
core3 <- c("psikiater","psikolog","perawat_jiwa")
## urban (Kota) vs rural (Kabupaten): BPS kabupaten code last-2-digits >= 71 = Kota
H$pop_kab <- H$pop_kab |> mutate(area=ifelse(code%%100>=71,"Kota","Kabupaten"))
H$by_kab  <- H$by_kab  |> mutate(area=ifelse(code%%100>=71,"Kota","Kabupaten"))
## density (per 100k) of a cadre, broken by a grouping col present in BOTH pop_kab & by_kab
dens_by <- function(ck, grp){
  hc <- H$by_kab |> filter(key==ck) |> group_by(.g=.data[[grp]]) |> summarise(hc=sum(hc,na.rm=TRUE),.groups="drop")
  pp <- H$pop_kab |> group_by(.g=.data[[grp]]) |> summarise(pop=sum(pop,na.rm=TRUE),.groups="drop")
  left_join(pp, hc, by=".g") |> mutate(hc=coalesce(hc,0), per100k=round(hc/pop*1e5,3)) |>
    rename(!!grp := .g) |> arrange(desc(per100k))
}
NATPOP <- H$meta$nat_pop

Apa itu laporan ini. Analisis sisi suplai (supply side) sistem kesehatan jiwa Indonesia, dipandu kerangka WHO building blocks / WHO-AIMS dan lensa Availability (ketersediaan) – Accessibility (akses) – Quality (mutu). Berbeda dari analisis klaim JKN (ARC9.3, sisi demand/utilisasi), laporan ini menanyakan: apa kapasitas sistem yang tersedia untuk merespons gangguan jiwa, tenaga, fasilitas, pembiayaan, regulasi, obat, sistem informasi, dan mutu/HAM.

Unit & denominator. Tenaga & fasilitas dinyatakan per 100.000 (atau per 1 juta) penduduk, denominator = proyeksi penduduk BPS 2025 (284,438,930 jiwa, 514 kabupaten/kota). Headcount DREAMS = posisi tenaga per fasilitas (seorang nakes yang praktik di >1 faskes terhitung lebih dari sekali); SIP = jumlah izin praktik. Keduanya dilaporkan; rate memakai headcount kecuali disebut lain.

Peta Pilar (WHO building blocks): 1 Governance & Kebijakan · 2 Pembiayaan · 3 Fasilitas & Organisasi Layanan · 4 SDM/Tenaga (HRH) · 5 Obat & Teknologi · 6 Sistem Informasi · 7 Mutu & HAM. Tiap pilar dibaca lewat lensa Availability–Accessibility–Quality. Pilar yang kaya data (3 Fasilitas, 4 SDM) disajikan kuantitatif; pilar bertumpu regulasi/kualitatif (1, 5, 6, 7) disajikan naratif dengan penanda data yang ada vs senjang.

1 Ringkasan eksekutif

psy   <- H$national |> filter(key=="psikiater")
psyc  <- H$national |> filter(key=="psikolog")
nrs   <- H$national |> filter(key=="perawat_jiwa")
covp  <- H$coverage |> filter(key=="psikiater")
cat(sprintf('<div class="cardrow">
<div class="card red"><div class="big">%.2f</div><div class="lab">Psikiater per 100.000 penduduk (Sp.KJ). Ambang WHO ≈ 1/100.000; negara berpenghasilan tinggi ~10.</div></div>
<div class="card red"><div class="big">%.0f%%</div><div class="lab">Kabupaten/kota <b>tanpa satu pun psikiater</b> (%d dari %d). Layanan terkonsentrasi di kota besar.</div></div>
<div class="card amber"><div class="big">%d</div><div class="lab">RS Jiwa (RSJ) nasional = %.2f per 1 juta penduduk; <b>%d provinsi tanpa RSJ</b>.</div></div>
<div class="card amber"><div class="big">%.0f%%</div><div class="lab">RS umum/khusus yang menyediakan layanan <b>kesehatan jiwa dewasa</b> (%d dari %d RS).</div></div>
<div class="card"><div class="big">%.2f</div><div class="lab">Psikolog klinis per 100.000; perawat jiwa %.2f/100.000.</div></div>
</div>',
psy$per100k, covp$pct_kab_zero, covp$n_kab_total-covp$n_kab_covered, covp$n_kab_total,
F$rsj_national$n_rsj, F$rsj_national$rsj_per1m, sum(F$rsj_prov$n_rsj==0),
F$svc_national$pct_rs[1], F$svc_national$n_rs_ada[1], F$meta$n_rs,
psyc$per100k, nrs$per100k))
0.51
Psikiater per 100.000 penduduk (Sp.KJ). Ambang WHO ≈ 1/100.000; negara berpenghasilan tinggi ~10.
38%
Kabupaten/kota tanpa satu pun psikiater (196 dari 514). Layanan terkonsentrasi di kota besar.
42
RS Jiwa (RSJ) nasional = 0.15 per 1 juta penduduk; 7 provinsi tanpa RSJ.
27%
RS umum/khusus yang menyediakan layanan kesehatan jiwa dewasa (895 dari 3275 RS).
0.85
Psikolog klinis per 100.000; perawat jiwa 1.74/100.000.
Temuan inti: Kapasitas suplai keswa Indonesia sangat terbatas dan timpang secara geografis. Tenaga psikiatri jauh di bawah ambang WHO dan terkonsentrasi di Jawa/kota besar, dengan ratusan kabupaten tanpa psikiater maupun RS berlayanan jiwa. Sub-spesialis (jiwa anak-remaja, adiksi, forensik, komunitas) nyaris tidak ada. Suplai bertumpu pada model RSJ rujukan, bukan layanan komunitas/primer yang terdesentralisasi. Senjang terbesar untuk pelaporan: data tempat tidur psikiatri, obat psikotropika tingkat puskesmas, dan indikator mutu/HAM (pasung, restraint) belum tersedia terpilah secara rutin.

2 Kerangka & sumber data

Kerangka Analitik · WHO Building Blocks / WHO-AIMS · Availability–Accessibility–Quality
WHO-AIMS (Assessment Instrument for Mental Health Systems) memetakan sistem keswa ke domain kebijakan, layanan, SDM, obat, pembiayaan, informasi, dan HAM. Tiap domain ditimbang lewat tiga pertanyaan: Availability (apakah sumber daya ada dan berapa banyak), Accessibility (apakah terjangkau secara geografis/finansial/sosial bagi yang membutuhkan), Quality (apakah layanan bermutu, berbasis bukti, dan menghormati hak).
src <- tibble::tribble(
  ~`Pilar (building block)`, ~`Sumber data utama`, ~`Status`,
  "1. Governance & kebijakan", "ARC Indonesia Health Policy Review: 12,4k regulasi & 21,8k pasal ter-tag; UU 17/2023 omnibus (mencabut UU 18/2014); PP 28/2024; PNPK", "Kuantitatif",
  "2. Pembiayaan", "Klaim BPJS keswa (ARC9.3, sampel reguler); APBD kesehatan (BPS)", "Kuantitatif parsial",
  "3. Fasilitas & layanan", "SIRS Kemenkes 2025 (3.275 RS): RSJ, layanan jiwa per-RS; BPJS FKTP (integrasi primer)", "Kuantitatif",
  "4. SDM / tenaga (HRH)", "DREAMS/SI-SDMK Kemenkes 2025 (headcount + SIP per faskes); denominator BPS", "Kuantitatif (inti)",
  "5. Obat & teknologi", "Dashboard HTA Watchdog ARC: WHO EML × Fornas × INAPROC × NICE (psikotropika N03/N05/N06)", "Kuantitatif",
  "6. Sistem informasi", "DREAMS, SIRS, SATUSEHAT, BPJS sebagai substrat SIK", "Naratif + meta",
  "7. Mutu & HAM", "Akreditasi RS; pasung/restraint; mhGAP, belum rutin terpilah", "Senjang data")
gt::gt(src) |> gt::tab_header(title=gt::md("**Tabel 0, Pemetaan pilar ke sumber data & status ketersediaan**")) |>
  gt::data_color(columns=`Status`, fn=function(x) dplyr::case_when(grepl("inti",x)~"#bbf7d0", grepl("Kuantitatif",x)~"#dcfce7", grepl("Senjang",x)~"#fee2e2", TRUE~"#fef9c3")) |>
  gt::tab_source_note(gt::md("Senjang data = jujur dilaporkan; bukan ketiadaan masalah, melainkan ketiadaan data rutin terpilah. Lihat tiap pilar.")) |> gfmt()
Tabel 0, Pemetaan pilar ke sumber data & status ketersediaan
Pilar (building block) Sumber data utama Status
1. Governance & kebijakan ARC Indonesia Health Policy Review: 12,4k regulasi & 21,8k pasal ter-tag; UU 17/2023 omnibus (mencabut UU 18/2014); PP 28/2024; PNPK Kuantitatif
2. Pembiayaan Klaim BPJS keswa (ARC9.3, sampel reguler); APBD kesehatan (BPS) Kuantitatif parsial
3. Fasilitas & layanan SIRS Kemenkes 2025 (3.275 RS): RSJ, layanan jiwa per-RS; BPJS FKTP (integrasi primer) Kuantitatif
4. SDM / tenaga (HRH) DREAMS/SI-SDMK Kemenkes 2025 (headcount + SIP per faskes); denominator BPS Kuantitatif (inti)
5. Obat & teknologi Dashboard HTA Watchdog ARC: WHO EML × Fornas × INAPROC × NICE (psikotropika N03/N05/N06) Kuantitatif
6. Sistem informasi DREAMS, SIRS, SATUSEHAT, BPJS sebagai substrat SIK Naratif + meta
7. Mutu & HAM Akreditasi RS; pasung/restraint; mhGAP, belum rutin terpilah Senjang data
Senjang data = jujur dilaporkan; bukan ketiadaan masalah, melainkan ketiadaan data rutin terpilah. Lihat tiap pilar.

3 Pilar 4, SDM / Tenaga Kesehatan Jiwa (HRH)

④ Pilar 4 · SDM/HRH · Densitas · Maldistribusi · Sub-spesialis · Headcount vs Izin Praktik
Pilar dengan temuan terkuat. Dibaca lewat lensa Availability (densitas nasional per 100k), Accessibility (sebaran provinsi/pulau/kota-kabupaten & wilayah tanpa tenaga), dan Quality (bauran kompetensi sub-spesialis & izin praktik aktif). Tiap tabset di bawah menampilkan indikator yang sama dipecah menurut breakdown berbeda; setiap tab memuat figur beserta tabel datanya.
Key takeaway SDM: Densitas seluruh kader keswa jauh di bawah standar internasional dan sangat terkonsentrasi di Jawa dan kota. Psikiater 0.51/100k (ambang WHO ~1), dengan 38.1% kabupaten tanpa psikiater dan Gini distribusi 0.771. Sub-spesialis (jiwa anak-remaja, adiksi, forensik, komunitas) berjumlah puluhan orang untuk seluruh negeri.

3.1 Densitas tenaga kesehatan jiwa

Indikator sama: tenaga per 100.000 penduduk. Tab = breakdown berbeda (per kader · per provinsi · per pulau · kota vs kabupaten). Denominator selalu proyeksi penduduk BPS 2025.

3.1.1 Per kader (nasional)

## 3.1, sub-spesialis DIGABUNG ke psikiater (rincian per sub-spesialis ada di seksi Sub-spesialis 3.x);
## breakdown geografis ada di tab Per provinsi/pulau/kota. Denominator BPS 2025.
psy_tot <- H$national |> filter(key=="psikiater" | !core) |>
  summarise(headcount=sum(headcount), sip=sum(sip,na.rm=TRUE)) |>
  transmute(label="Psikiater (Sp.KJ + sub-spesialis)", headcount, sip,
            per100k=round(headcount/NATPOP*1e5,3), per1m=round(headcount/NATPOP*1e6,2))
nd <- bind_rows(psy_tot, H$national |> filter(key %in% c("psikolog","perawat_jiwa")) |>
  select(label,headcount,sip,per100k,per1m)) |>
  mutate(pop_per=round(NATPOP/headcount), label=fct_reorder(label, per100k))
ggplot(nd, aes(per100k, label)) + geom_col(width=.58, fill=NAVY) +
  geom_text(aes(label=sprintf("%.2f/100k  ·  1 tenaga : %s penduduk", per100k, fmt(pop_per))),
            hjust=-0.04, size=3, color=NAVY, fontface="bold") +
  geom_vline(xintercept=1, linetype="dashed", color=RED) +
  annotate("text", x=1, y=0.6, label="ambang WHO ~1", color=RED, size=2.7, hjust=-0.05, fontface="italic") +
  scale_x_continuous(expand=expansion(mult=c(0,.5))) +
  labs(title="Densitas Tenaga Kesehatan Jiwa Nasional, per 100.000 Penduduk (2025) · Unit: tenaga/100k",
       subtitle="Tiga kader inti; sub-spesialis psikiatri digabung ke psikiater (rincian di seksi Sub-spesialis). Ambang WHO psikiater ≈ 1/100.000.",
       x="Tenaga per 100.000 penduduk", y=NULL, caption=CAP) + th()

Densitas tenaga keswa nasional (sub-spesialis digabung ke psikiater), tabel data figur
Kader Headcount SIP (izin praktik) Per 100k Per 1 juta 1 tenaga melayani (penduduk)
Perawat Kesehatan Jiwa 4,961 5,101 1.744 17.4 57,335
Psikolog Klinis 2,423 3,103 0.852 8.5 117,391
Psikiater (Sp.KJ + sub-spesialis) 1,525 3,360 0.536 5.4 186,517
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

3.1.2 Per provinsi (psikiater)

pp <- H$by_prov |> filter(key=="psikiater") |> mutate(prov_name=fct_reorder(prov_name, per100k))
ggplot(pp, aes(per100k, prov_name, color=island)) +
  geom_segment(aes(x=0, xend=per100k, yend=prov_name), linewidth=.5, color="#cbd5e1") +
  geom_point(size=3) + geom_text(aes(label=sprintf("%.2f",per100k)), hjust=-0.4, size=2.6, color=NAVY) +
  scale_color_manual(values=ISL_COLS, name=NULL) + scale_x_continuous(expand=expansion(mult=c(0,.12))) +
  geom_vline(xintercept=H$national$per100k[H$national$key=="psikiater"], linetype="dotted", color=GREY) +
  labs(title="Psikiater (Sp.KJ) per 100.000 Penduduk menurut Provinsi · Unit: psikiater/100k",
       subtitle=sprintf("Garis putus = rata-rata nasional %.2f. DKI/DIY/Bali tertinggi; provinsi timur mendekati nol.",
         H$national$per100k[H$national$key=="psikiater"]),
       x="Psikiater per 100.000 penduduk", y=NULL, caption=CAP) + th(10)

Psikiater per 100k per provinsi, tabel data figur
Provinsi Pulau Penduduk 2025 Psikiater (headcount) Per 100k 1 psikiater melayani (penduduk)
DKI JAKARTA Jawa 10,677,990 205 1.920 52,088
DI YOGYAKARTA Jawa 3,781,550 62 1.640 60,993
BALI Bali-Nusra 4,461,270 70 1.569 63,732
SULAWESI SELATAN Sulawesi 9,563,130 73 0.763 131,002
ACEH Sumatera 5,625,960 40 0.711 140,649
KALIMANTAN SELATAN Kalimantan 4,323,340 29 0.671 149,081
KALIMANTAN UTARA Kalimantan 749,370 5 0.667 149,874
KEPULAUAN RIAU Sumatera 2,213,460 13 0.587 170,266
KEPULAUAN BANGKA BELITUNG Sumatera 1,550,820 9 0.580 172,313
PAPUA BARAT Maluku-Papua 1,224,090 7 0.572 174,870
SUMATERA BARAT Sumatera 5,914,280 31 0.524 190,783
BANTEN Jawa 12,537,440 65 0.518 192,884
KALIMANTAN TIMUR Kalimantan 4,267,610 22 0.516 193,982
KALIMANTAN TENGAH Kalimantan 2,845,010 14 0.492 203,215
GORONTALO Sulawesi 1,242,250 6 0.483 207,042
JAWA TENGAH Jawa 38,233,920 182 0.476 210,076
SUMATERA UTARA Sumatera 15,785,840 72 0.456 219,248
BENGKULU Sumatera 2,138,060 9 0.421 237,562
RIAU Sumatera 6,811,180 27 0.396 252,266
SULAWESI TENGAH Sulawesi 3,156,110 12 0.380 263,009
JAMBI Sumatera 3,768,490 14 0.372 269,178
JAWA TIMUR Jawa 42,089,260 154 0.366 273,307
JAWA BARAT Jawa 50,758,990 185 0.364 274,373
MALUKU UTARA Maluku-Papua 1,373,830 5 0.364 274,766
SULAWESI TENGGARA Sulawesi 2,836,760 10 0.353 283,676
SULAWESI UTARA Sulawesi 2,721,440 9 0.331 302,382
SULAWESI BARAT Sulawesi 1,525,340 5 0.328 305,068
NUSA TENGGARA BARAT Bali-Nusra 5,731,120 18 0.314 318,396
NUSA TENGGARA TIMUR Bali-Nusra 5,742,580 17 0.296 337,799
KALIMANTAN BARAT Kalimantan 5,766,020 17 0.295 339,178
MALUKU Maluku-Papua 1,970,560 5 0.254 394,112
SUMATERA SELATAN Sumatera 8,928,510 22 0.246 405,841
LAMPUNG Sumatera 9,522,900 19 0.200 501,205
PAPUA Maluku-Papua 4,600,450 0 0.000
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

3.1.3 Per pulau

di <- bind_rows(lapply(core3, function(k) dens_by(k,"island") |>
  filter(island!="Lainnya") |> mutate(kader=H$national$label[H$national$key==k])))
di <- di |> mutate(kader=factor(kader, levels=H$national$label[match(core3,H$national$key)]),
  island=fct_reorder(island, per100k, .fun=max))
ggplot(di, aes(per100k, island, fill=kader)) + geom_col(position="dodge", width=.72) +
  geom_text(aes(label=sprintf("%.2f",per100k)), position=position_dodge(width=.72), hjust=-0.12, size=2.4, color=NAVY) +
  scale_fill_manual(values=c(NAVY,TEAL,AMBER), name=NULL) + scale_x_continuous(expand=expansion(mult=c(0,.16))) +
  labs(title="Densitas Kader Inti Keswa menurut Pulau, per 100.000 Penduduk · Unit: tenaga/100k",
       subtitle="Jawa unggul di seluruh kader; Maluku-Papua terendah. Denominator = penduduk pulau (BPS 2025).",
       x="Tenaga per 100.000 penduduk", y=NULL, caption=CAP) + th()

Densitas kader inti per pulau, tabel data figur
Pulau Kader Penduduk Headcount Per 100k 1 tenaga melayani (penduduk)
Bali-Nusra Psikiater (Sp.KJ) 15,934,970 105 0.659 151,762
Sulawesi Psikiater (Sp.KJ) 21,045,030 115 0.546 183,000
Jawa Psikiater (Sp.KJ) 158,079,150 853 0.540 185,321
Kalimantan Psikiater (Sp.KJ) 17,951,350 87 0.485 206,337
Sumatera Psikiater (Sp.KJ) 62,259,500 256 0.411 243,201
Maluku-Papua Psikiater (Sp.KJ) 9,168,930 17 0.185 539,349
Kalimantan Psikolog Klinis 17,951,350 179 0.997 100,287
Jawa Psikolog Klinis 158,079,150 1,552 0.982 101,855
Bali-Nusra Psikolog Klinis 15,934,970 116 0.728 137,370
Sumatera Psikolog Klinis 62,259,500 435 0.699 143,125
Sulawesi Psikolog Klinis 21,045,030 110 0.523 191,318
Maluku-Papua Psikolog Klinis 9,168,930 23 0.251 398,649
Kalimantan Perawat Kesehatan Jiwa 17,951,350 574 3.198 31,274
Bali-Nusra Perawat Kesehatan Jiwa 15,934,970 407 2.554 39,152
Sulawesi Perawat Kesehatan Jiwa 21,045,030 430 2.043 48,942
Sumatera Perawat Kesehatan Jiwa 62,259,500 1,160 1.863 53,672
Jawa Perawat Kesehatan Jiwa 158,079,150 2,299 1.454 68,760
Maluku-Papua Perawat Kesehatan Jiwa 9,168,930 71 0.774 129,140
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

3.1.4 Kota vs Kabupaten

da <- bind_rows(lapply(core3, function(k) dens_by(k,"area") |> mutate(kader=H$national$label[H$national$key==k])))
da <- da |> mutate(kader=factor(kader, levels=H$national$label[match(core3,H$national$key)]))
ggplot(da, aes(per100k, kader, fill=area)) + geom_col(position="dodge", width=.66) +
  geom_text(aes(label=sprintf("%.2f",per100k)), position=position_dodge(width=.66), hjust=-0.12, size=2.7, color=NAVY, fontface="bold") +
  scale_fill_manual(values=c("Kota"=NAVY,"Kabupaten"=AMBER), name=NULL) + scale_x_continuous(expand=expansion(mult=c(0,.16))) +
  labs(title="Densitas Kader Inti Keswa: Kota vs Kabupaten, per 100.000 Penduduk · Unit: tenaga/100k",
       subtitle="Kota (kode BPS ≥71) vs kabupaten. Tenaga keswa berlipat lebih padat di kota, beban perkotaan menyerap suplai.",
       x="Tenaga per 100.000 penduduk", y=NULL, caption=CAP) + th()

Densitas kader inti: kota vs kabupaten, tabel data figur
Kader Wilayah Penduduk Headcount Per 100k 1 tenaga melayani (penduduk)
Psikiater (Sp.KJ) Kota 60,748,210 871 1.434 69,745
Psikiater (Sp.KJ) Kabupaten 223,690,720 573 0.256 390,385
Psikolog Klinis Kota 60,748,210 1,526 2.512 39,809
Psikolog Klinis Kabupaten 223,690,720 897 0.401 249,376
Perawat Kesehatan Jiwa Kota 60,748,210 3,087 5.082 19,679
Perawat Kesehatan Jiwa Kabupaten 223,690,720 1,874 0.838 119,365
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

3.2 Sub-spesialis psikiatri, kapasitas tersier

ss <- H$national |> filter(!core) |> left_join(H$coverage |> select(key, n_kab_covered), by="key") |>
  mutate(label=fct_reorder(label, headcount))
ggplot(ss, aes(headcount, label)) + geom_col(fill=AMBER, width=.66) +
  geom_text(aes(label=sprintf("%d org · %d kab", headcount, n_kab_covered)), hjust=-0.05, size=2.8, color=NAVY, fontface="bold") +
  scale_x_continuous(expand=expansion(mult=c(0,.28))) +
  labs(title="Sub-spesialis Psikiatri: Jumlah Nasional & Jangkauan Kabupaten · Unit: orang",
       subtitle="Seluruh negeri. Jiwa anak-remaja, adiksi, forensik, komunitas, CLP, kapasitas tersier nyaris tak ada.",
       x="Headcount nasional", y=NULL, caption=CAP) + th()

Sub-spesialis: jumlah & jangkauan, tabel data figur
Sub-spesialis Headcount SIP Kabupaten terjangkau % kabupaten
Subsp. Jiwa Anak & Remaja 40 73 27 5.300
Subsp. Psikiatri Adiksi 19 25 13 2.500
Subsp. Psikiatri Forensik 11 15 9 1.800
Subsp. Psikiatri Komunitas 4 5 4 0.800
Subsp. Konsultasi-Liaison (CLP) 4 8 4 0.800
Subsp. Psikoseksual & Marital 2 2 2 0.400
Subsp. Biologi & Psikofarmakologi 1 5 1 0.200
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

3.3 Headcount vs izin praktik (SIP)

hs <- H$national |> filter(core) |> select(label, headcount, sip) |>
  tidyr::pivot_longer(-label, names_to="metric", values_to="n") |>
  mutate(metric=recode(metric, headcount="Headcount (posisi/faskes)", sip="SIP (izin praktik)"))
ggplot(hs, aes(n, fct_reorder(label,n), fill=metric)) + geom_col(position="dodge", width=.66) +
  geom_text(aes(label=fmt(n)), position=position_dodge(width=.66), hjust=-0.1, size=2.8, color=NAVY) +
  scale_fill_manual(values=c("Headcount (posisi/faskes)"=NAVY,"SIP (izin praktik)"=TEAL), name=NULL) +
  scale_x_continuous(expand=expansion(mult=c(0,.16))) +
  labs(title="Headcount Faskes vs Jumlah Izin Praktik (SIP), Kader Inti · Unit: orang/izin",
       subtitle="SIP > headcount karena satu tenaga dapat memegang beberapa izin praktik; headcount DREAMS = posisi terlapor per faskes.",
       x=NULL, y=NULL, caption=CAP) + th()

Headcount vs SIP kader inti, tabel data figur
Kader Headcount SIP Rasio SIP/Headcount
Psikiater (Sp.KJ) 1,444 3,227 2.230
Psikolog Klinis 2,423 3,103 1.280
Perawat Kesehatan Jiwa 4,961 5,101 1.030
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

3.4 Di fasilitas tingkat apa tenaga bekerja

catfac <- function(x) dplyr::case_when(x=="Rumah Sakit"~"Rumah Sakit",
  x %in% c("Puskesmas","Puskesmas Pembantu")~"Puskesmas", x=="Klinik"~"Klinik",
  x=="Praktek Nakes Mandiri"~"Praktik Mandiri", TRUE~"Lainnya")
FAC_COLS <- c("Rumah Sakit"=NAVY,"Puskesmas"=TEAL,"Klinik"=AMBER,"Praktik Mandiri"=PURPLE,"Lainnya"=GREY)
fm <- H$fac_mix |> filter(key %in% core3) |> mutate(cat=factor(catfac(Tipe_Faskes), levels=names(FAC_COLS)),
  label=H$national$label[match(key,H$national$key)]) |>
  group_by(label, cat) |> summarise(hc=sum(hc), .groups="drop") |> group_by(label) |> mutate(pct=100*hc/sum(hc)) |> ungroup()
ggplot(fm, aes(pct, label, fill=cat)) + geom_col(width=.62) +
  scale_fill_manual(values=FAC_COLS, name=NULL) + scale_x_continuous(labels=function(x)paste0(x,"%"), expand=c(0,0)) +
  labs(title="Di Mana Tenaga Keswa Bekerja: Bauran Tipe Fasilitas · Unit: % posisi (headcount)",
       subtitle="Semua tipe faskes dikategorikan (tak ada kategori tak-berlabel). Tenaga psikiatri terpusat di rumah sakit, bukan puskesmas.",
       x=NULL, y=NULL, caption=CAP) + th()

Bauran tipe fasilitas tenaga keswa, tabel data figur
Kader Tipe fasilitas Posisi (headcount) %
Perawat Kesehatan Jiwa Rumah Sakit 4,417 89.0
Perawat Kesehatan Jiwa Puskesmas 290 5.8
Perawat Kesehatan Jiwa Klinik 232 4.7
Perawat Kesehatan Jiwa Lainnya 19 0.4
Perawat Kesehatan Jiwa Praktik Mandiri 3 0.1
Psikiater (Sp.KJ) Rumah Sakit 1,345 93.1
Psikiater (Sp.KJ) Klinik 70 4.8
Psikiater (Sp.KJ) Praktik Mandiri 22 1.5
Psikiater (Sp.KJ) Lainnya 7 0.5
Psikolog Klinis Rumah Sakit 1,243 51.3
Psikolog Klinis Klinik 522 21.5
Psikolog Klinis Praktik Mandiri 381 15.7
Psikolog Klinis Puskesmas 195 8.0
Psikolog Klinis Lainnya 82 3.4
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

3.5 Cakupan & pemerataan

Indikator sama: pemerataan tenaga. Tab = breakdown (per kader · kota vs kabupaten · Jawa vs luar Jawa).

3.5.1 Kabupaten tanpa tenaga (per kader)

cz <- H$coverage |> filter(key %in% core3) |>
  transmute(label=fct_reorder(label, -pct_kab_zero),
    `Kabupaten tanpa tenaga`=pct_kab_zero, `Kabupaten dengan >=1`=pct_kab_covered) |>
  tidyr::pivot_longer(-label, names_to="status", values_to="pct")
ggplot(cz, aes(pct, label, fill=status)) + geom_col(width=.62) +
  geom_text(aes(label=paste0(pct,"%")), position=position_stack(vjust=.5), size=3, color="white", fontface="bold") +
  scale_fill_manual(values=c("Kabupaten tanpa tenaga"=RED,"Kabupaten dengan >=1"=NAVY), name=NULL) +
  scale_x_continuous(labels=function(x)paste0(x,"%"), expand=c(0,0)) +
  labs(title="Cakupan Kabupaten/Kota: Punya vs Tanpa Tenaga Keswa · Unit: % kabupaten",
       subtitle=sprintf("Dari %d kabupaten/kota. Merah = tak punya satu pun tenaga kader tsb.", H$coverage$n_kab_total[1]),
       x=NULL, y=NULL, caption=CAP) + th()

Cakupan & maldistribusi kader inti, tabel data figur
Kader % kab dgn >=1 % kab tanpa % populasi tercakup Gini distribusi
Psikiater (Sp.KJ) 61.9 38.1 81.0 0.771
Psikolog Klinis 59.1 40.9 79.3 0.804
Perawat Kesehatan Jiwa 62.3 37.7 76.5 0.881
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

3.5.2 Kota vs Kabupaten

zarea <- bind_rows(lapply(core3, function(k){
  bk <- H$by_kab |> filter(key==k)
  H$pop_kab |> mutate(has = code %in% bk$code[bk$hc>0]) |> group_by(area) |>
    summarise(pct_zero=round(100*mean(!has),1), .groups="drop") |> mutate(kader=H$national$label[H$national$key==k]) }))
zarea <- zarea |> mutate(kader=factor(kader, levels=H$national$label[match(core3,H$national$key)]))
ggplot(zarea, aes(pct_zero, kader, fill=area)) + geom_col(position="dodge", width=.66) +
  geom_text(aes(label=paste0(pct_zero,"%")), position=position_dodge(width=.66), hjust=-0.1, size=2.7, color=NAVY, fontface="bold") +
  scale_fill_manual(values=c("Kota"=NAVY,"Kabupaten"=AMBER), name=NULL) +
  scale_x_continuous(labels=function(x)paste0(x,"%"), expand=expansion(mult=c(0,.14))) +
  labs(title="Persen Wilayah TANPA Tenaga Keswa: Kota vs Kabupaten · Unit: % wilayah",
       subtitle="Kekosongan tenaga jauh lebih parah di kabupaten (rural) ketimbang kota.",
       x="% wilayah tanpa tenaga kader tsb", y=NULL, caption=CAP) + th()

Kekosongan tenaga: kota vs kabupaten, tabel data figur
Kader Wilayah % tanpa tenaga
Psikiater (Sp.KJ) Kabupaten 45.2
Psikiater (Sp.KJ) Kota 15.3
Psikolog Klinis Kabupaten 49.0
Psikolog Klinis Kota 12.2
Perawat Kesehatan Jiwa Kabupaten 43.0
Perawat Kesehatan Jiwa Kota 25.5
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

3.5.3 Jawa vs luar Jawa

jw <- H$coverage |> filter(key %in% core3) |>
  transmute(kader=H$national$label[match(key,H$national$key)],
    `Share tenaga di Jawa`=java_share_hc, `Share penduduk di Jawa`=java_pop_share) |>
  tidyr::pivot_longer(-kader, names_to="ukuran", values_to="pct")
ggplot(jw, aes(pct, kader, fill=ukuran)) + geom_col(position="dodge", width=.62) +
  geom_text(aes(label=paste0(pct,"%")), position=position_dodge(width=.62), hjust=-0.1, size=2.7, color=NAVY, fontface="bold") +
  scale_fill_manual(values=c("Share tenaga di Jawa"=NAVY,"Share penduduk di Jawa"=GREY), name=NULL) +
  scale_x_continuous(labels=function(x)paste0(x,"%"), expand=expansion(mult=c(0,.14))) +
  labs(title="Konsentrasi di Jawa: Share Tenaga vs Share Penduduk · Unit: %",
       subtitle="Bila batang tenaga > batang penduduk, Jawa menyerap tenaga melebihi proporsi penduduknya (over-konsentrasi).",
       x=NULL, y=NULL, caption=CAP) + th()

Konsentrasi Jawa vs penduduk, tabel data figur
Kader Share tenaga Jawa (%) Share penduduk Jawa (%) Rasio konsentrasi
Psikiater (Sp.KJ) 59.1 55.6 1.060
Psikolog Klinis 64.1 55.6 1.150
Perawat Kesehatan Jiwa 46.3 55.6 0.830
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

4 Pilar 3, Fasilitas & Organisasi Layanan

③ Pilar 3 · RS Jiwa (RSJ) · Layanan Jiwa di RS Umum · Gurun Layanan · Kepemilikan
Availability = jumlah RSJ & RS berlayanan jiwa; Accessibility = sebaran provinsi/pulau & kabupaten tanpa fasilitas; Quality = ragam layanan & kepemilikan. Tiap figur disertai tabelnya.
Key takeaway fasilitas: Indonesia bertumpu pada 42 RS Jiwa (0.15/juta penduduk), dengan 7 provinsi tanpa RSJ. Hanya 27.3% RS menyediakan layanan jiwa dewasa dan 7.6% layanan anak-remaja. Hanya 53.3% kabupaten/kota memiliki >=1 RS berlayanan jiwa.

4.1 Ketersediaan layanan jiwa di rumah sakit

sv <- F$svc_national |> mutate(layanan=fct_reorder(layanan, pct_rs))
ggplot(sv, aes(pct_rs, layanan)) + geom_col(fill=NAVY, width=.68) +
  geom_text(aes(label=sprintf("%.1f%%  (%s RS)", pct_rs, fmt(n_rs_ada))), hjust=-0.05, size=2.9, color=NAVY, fontface="bold") +
  scale_x_continuous(labels=function(x)paste0(x,"%"), expand=expansion(mult=c(0,.24))) +
  labs(title="Ketersediaan Layanan Kesehatan Jiwa di Rumah Sakit Indonesia · Unit: % dari 3.275 RS",
       subtitle="Berapa persen RS (umum+khusus) menawarkan tiap layanan jiwa (flag layanan SIRS 2025).",
       x="% rumah sakit menyediakan", y=NULL, caption=CAP) + th()

Ketersediaan layanan jiwa di RS, tabel data figur
Layanan RS menyediakan % dari total RS
Jiwa dewasa 895 27.3
Jiwa lansia 747 22.8
Jiwa anak & remaja 248 7.6
Jiwa masyarakat 563 17.2
NAPZA/adiksi (psikiatri) 122 3.7
Rehab mental 295 9.0
Konseling & psikoterapi 737 22.5
Psikologi & psikometri 709 21.6
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

4.2 RS Jiwa (RSJ)

Indikator sama: jumlah RS Jiwa. Tab = breakdown (per provinsi · per pulau · kepemilikan).

4.2.1 Per provinsi

rp <- F$rsj_prov |> mutate(prov_name=fct_reorder(prov_name, n_rsj))
ggplot(rp, aes(n_rsj, prov_name, fill=island)) + geom_col(width=.72) +
  geom_text(aes(label=n_rsj), hjust=-0.3, size=2.7, color=NAVY, fontface="bold") +
  scale_fill_manual(values=ISL_COLS, name=NULL) + scale_x_continuous(expand=expansion(mult=c(0,.1))) +
  labs(title="Jumlah RS Jiwa (RSJ) menurut Provinsi · Unit: RSJ",
       subtitle=sprintf("%d provinsi tanpa RSJ. Terkonsentrasi di Jawa & ibu kota provinsi besar.", sum(F$rsj_prov$n_rsj==0)),
       x="Jumlah RSJ", y=NULL, caption=CAP) + th(10)

RSJ per provinsi, tabel data figur
Provinsi Pulau Penduduk 2025 RSJ RSJ per 1 juta
DKI JAKARTA Jawa 10,677,990 4 0.370
JAWA TENGAH Jawa 38,233,920 4 0.100
SUMATERA UTARA Sumatera 15,785,840 3 0.190
SUMATERA BARAT Sumatera 5,914,280 2 0.340
JAWA BARAT Jawa 50,758,990 2 0.040
DI YOGYAKARTA Jawa 3,781,550 2 0.530
JAWA TIMUR Jawa 42,089,260 2 0.050
KALIMANTAN BARAT Kalimantan 5,766,020 2 0.350
ACEH Sumatera 5,625,960 1 0.180
RIAU Sumatera 6,811,180 1 0.150
JAMBI Sumatera 3,768,490 1 0.270
SUMATERA SELATAN Sumatera 8,928,510 1 0.110
BENGKULU Sumatera 2,138,060 1 0.470
LAMPUNG Sumatera 9,522,900 1 0.110
KEPULAUAN BANGKA BELITUNG Sumatera 1,550,820 1 0.640
BANTEN Jawa 12,537,440 1 0.080
BALI Bali-Nusra 4,461,270 1 0.220
NUSA TENGGARA BARAT Bali-Nusra 5,731,120 1 0.170
NUSA TENGGARA TIMUR Bali-Nusra 5,742,580 1 0.170
KALIMANTAN TENGAH Kalimantan 2,845,010 1 0.350
KALIMANTAN SELATAN Kalimantan 4,323,340 1 0.230
KALIMANTAN TIMUR Kalimantan 4,267,610 1 0.230
SULAWESI UTARA Sulawesi 2,721,440 1 0.370
SULAWESI SELATAN Sulawesi 9,563,130 1 0.100
SULAWESI TENGGARA Sulawesi 2,836,760 1 0.350
MALUKU Maluku-Papua 1,970,560 1 0.510
MALUKU UTARA Maluku-Papua 1,373,830 1 0.730
KEPULAUAN RIAU Sumatera 2,213,460 0 0.000
KALIMANTAN UTARA Kalimantan 749,370 0 0.000
SULAWESI TENGAH Sulawesi 3,156,110 0 0.000
GORONTALO Sulawesi 1,242,250 0 0.000
SULAWESI BARAT Sulawesi 1,525,340 0 0.000
PAPUA BARAT Maluku-Papua 1,224,090 0 0.000
PAPUA Maluku-Papua 4,600,450 0 0.000
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

4.2.2 Per pulau

ri <- F$rsj_prov |> group_by(island) |> summarise(n_rsj=sum(n_rsj), pop=sum(pop), .groups="drop") |>
  mutate(rsj_per1m=round(n_rsj/pop*1e6,2), island=fct_reorder(island, n_rsj))
ggplot(ri, aes(n_rsj, island, fill=island)) + geom_col(width=.66) +
  geom_text(aes(label=sprintf("%d RSJ · %.2f/juta", n_rsj, rsj_per1m)), hjust=-0.05, size=2.8, color=NAVY, fontface="bold") +
  scale_fill_manual(values=ISL_COLS, guide="none") + scale_x_continuous(expand=expansion(mult=c(0,.3))) +
  labs(title="RS Jiwa menurut Pulau · Unit: RSJ (& per 1 juta penduduk)",
       subtitle="Jawa memuat mayoritas RSJ; Indonesia timur paling kosong relatif terhadap penduduk.",
       x="Jumlah RSJ", y=NULL, caption=CAP) + th()

RSJ per pulau, tabel data figur
Pulau Penduduk RSJ RSJ per 1 juta
Jawa 158,079,150 15 0.090
Sumatera 62,259,500 12 0.190
Kalimantan 17,951,350 5 0.280
Bali-Nusra 15,934,970 3 0.190
Sulawesi 21,045,030 3 0.140
Maluku-Papua 9,168,930 2 0.220
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

4.2.3 Kepemilikan

ow <- F$rsj_owner |> mutate(pct=round(100*n/sum(n),1), pemilik=fct_reorder(pemilik, n))
ggplot(ow, aes(n, pemilik)) + geom_col(fill=NAVY, width=.66) +
  geom_text(aes(label=sprintf("%d (%.1f%%)", n, pct)), hjust=-0.1, size=2.9, color=NAVY, fontface="bold") +
  scale_x_continuous(expand=expansion(mult=c(0,.2))) +
  labs(title="Kepemilikan RS Jiwa (RSJ) · Unit: RSJ",
       subtitle="Mayoritas RSJ milik pemerintah (provinsi/pusat), kapasitas swasta terbatas.",
       x="Jumlah RSJ", y=NULL, caption=CAP) + th()

Kepemilikan RSJ, tabel data figur
Kepemilikan Jumlah RSJ %
Pemprop 30 71.4
Organisasi Sosial 5 11.9
Kemkes 4 9.5
Organisasi Islam 1 2.4
Pemkab 1 2.4
SWASTA/LAINNYA 1 2.4
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

4.3 Cakupan fasilitas jiwa tingkat kabupaten

mc <- tibble::tibble(status=c("Kabupaten dengan >=1 RS layanan jiwa","Kabupaten tanpa RS layanan jiwa"),
  pct=c(F$mh_coverage$pct_kab_with_mh_rs, 100-F$mh_coverage$pct_kab_with_mh_rs))
ggplot(mc, aes(x=pct, y="", fill=status)) + geom_col(width=.5) +
  geom_text(aes(label=paste0(round(pct),"%")), position=position_stack(vjust=.5), color="white", fontface="bold", size=4) +
  scale_fill_manual(values=c("Kabupaten dengan >=1 RS layanan jiwa"=NAVY,"Kabupaten tanpa RS layanan jiwa"=RED), name=NULL) +
  scale_x_continuous(labels=function(x)paste0(x,"%"), expand=c(0,0)) +
  labs(title=sprintf("Cakupan Fasilitas Jiwa Tingkat Kabupaten/Kota (n=%d) · Unit: %% kabupaten", F$mh_coverage$n_kab_total),
       subtitle=sprintf("Kabupaten dengan RSJ atau RS umum berlayanan jiwa dewasa. Wilayah tercakup memuat %.0f%% penduduk.", F$mh_coverage$pop_covered_pct),
       x=NULL, y=NULL, caption=CAP) + th() + theme(legend.position="bottom")

Cakupan kabupaten RS-jiwa, tabel data figur
Status Jumlah kab %
Kabupaten dengan >=1 RS layanan jiwa 274 53.3
Kabupaten tanpa RS layanan jiwa 240 46.7
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025
Senjang data, tempat tidur psikiatri. Indikator WHO-AIMS kunci adalah tempat tidur psikiatri per 100.000. Sumber bed RS yang tersedia (pivot SIRS) hanya mencakup sampel parsial rumah sakit dan tidak memilah bangsal jiwa, sehingga tidak dilaporkan di sini untuk menghindari angka menyesatkan. Estimasi tempat tidur psikiatri = langkah lanjut (ekstraksi bed-per-RSJ lengkap dari SIRS/Ditjen Yankes).

5 Pilar 2, Pembiayaan

② Pilar 2 · Belanja JKN Keswa · Konsentrasi RSJ vs Komunitas · Beban Out-of-Pocket
Availability = besar belanja keswa dalam JKN; Accessibility = sejauh mana pembiayaan menjangkau layanan primer/komunitas (bukan hanya RS); Quality = apakah belanja menutup kontinuitas (rawat jalan, obat) bukan sekadar rawat inap krisis.
if(!is.null(JKN)){
  cy <- JKN$cost_year
  ggplot(cy, aes(yr, total_bil_idr)) + geom_col(fill=NAVY, width=.7) +
    geom_text(aes(label=paste0("Rp",total_bil_idr,"M")), vjust=-0.5, size=2.7, color=NAVY, fontface="bold") +
    scale_x_continuous(breaks=2015:2024, labels=function(x)paste0("'",substr(x,3,4))) +
    scale_y_continuous(expand=expansion(mult=c(0,.12))) +
    labs(title="Belanja Klaim FKRTL Gangguan Jiwa dalam JKN per Tahun · Unit: Miliar Rupiah (tertimbang)",
         subtitle=sprintf("Basis sampel reguler BPJS (proyeksi nasional). Kumulatif 2015–2024 ≈ Rp%s Miliar. FKTP kapitasi tak termasuk (bukan fee-for-service).", JKN$cost_total_bil),
         x=NULL, y="Belanja (Miliar Rp)", caption="Sumber: ARC9.3 Data Sampel BPJS reguler 2015–2024 (tertimbang PSTV15)") + th()
} else { plot.new(); text(.5,.5,"Bundle JKN 9.3 tidak tersedia") }

if(!is.null(JKN) && !is.null(JKN$care_setting_total)){
  cs <- JKN$care_setting_total |> mutate(pct=round(pct,1))
  gt::gt(cs |> select(setting, pct)) |> gt::cols_label(setting="Tempat layanan FKRTL", pct="% kunjungan FKRTL jiwa") |>
    gt::tab_header(title=gt::md("**Tabel 2.1, Distribusi Kunjungan FKRTL Jiwa menurut Tempat Layanan** · _proxy orientasi RSJ vs RS umum_")) |>
    gt::data_color(columns=pct, colors=scales::col_numeric(c("#dbeafe","#1e3a5f"),domain=NULL)) |>
    gt::tab_source_note(gt::md("Sumber: ARC9.3 reguler. RSJ menampung porsi besar rawat, orientasi sistem masih hospital-centric.")) |> gfmt()
}
Tabel 2.1, Distribusi Kunjungan FKRTL Jiwa menurut Tempat Layanan · proxy orientasi RSJ vs RS umum
Tempat layanan FKRTL % kunjungan FKRTL jiwa
RS Umum 78.1
RS Khusus Jiwa (RSJ) 20.0
RS Khusus Lain 1.3
Lainnya 0.5
Sumber: ARC9.3 reguler. RSJ menampung porsi besar rawat, orientasi sistem masih hospital-centric.
Key takeaway pembiayaan: JKN telah menjadi pembiaya utama layanan keswa formal, dengan belanja FKRTL jiwa tumbuh menjadi triliunan rupiah kumulatif. Namun pembiayaan terorientasi rumah sakit (rawat jalan/inap FKRTL), sementara kapitasi FKTP untuk keswa kecil dan layanan komunitas hampir tak terbiayai, selaras dengan maldistribusi tenaga & fasilitas. Anggaran keswa dalam APBD umumnya tak terpilah (menyatu di “kesehatan umum”), menyulitkan pelacakan komitmen daerah; ini sendiri adalah temuan tata-kelola pembiayaan.

6 Pilar 1, Governance & Kebijakan

① Pilar 1 · Kerangka Hukum · Lini Masa Historis→Terkini→Arah Depan · Anatomi Pasal · Pedoman Klinis (PNPK)
Availability = adakah kerangka hukum & pedoman; Accessibility = apakah mandat menjangkau daerah (desentralisasi); Quality = kelengkapan pasal mutu/hak & pedoman klinis. Sumber: ARC Indonesia Health Policy Review (korpus 12.454 regulasi, 21.810 pasal ter-tag) + PNPK (HTA Watchdog). Filter keswa: judul/tema “Kesehatan Jiwa & NAPZA”.
Key takeaway governance: Kerangka hukum keswa ada dan baru saja ditata ulang: UU 18/2014 Kesehatan Jiwa (berdiri sendiri) dicabut & dilebur ke UU 17/2023 (omnibus Kesehatan) + PP 28/2024. Namun beban regulasi bergeser ke daerah, 35 dari 50 regulasi keswa adalah Perda/Perbup/Pergub/Perwali (mayoritas terbit 2025), sementara instrumen nasional sedikit. Dari 890 pasal ber-tema keswa, hampir semua “Pengaturan”; pasal yang menyasar layanan primer jauh lebih sedikit dari tersier/khusus. Pedoman klinis (PNPK) keswa hanya 2 (Kedokteran Jiwa 2015; Tata Laksana Skizofrenia 2025) dari puluhan topik PNPK nasional, menandai senjang standar mutu klinis.

6.1 Lanskap regulasi keswa: nasional vs daerah

il <- G$inv_level |> mutate(status=factor(status, levels=c("Berlaku","Tidak Berlaku")),
  level=factor(level, levels=c("Nasional","Daerah (Perda/Perbup/Pergub/Perwali)")))
ggplot(il, aes(n, level, fill=status)) + geom_col(width=.55) +
  geom_text(aes(label=n), position=position_stack(vjust=.5), color="white", fontface="bold", size=3.2) +
  scale_fill_manual(values=c("Berlaku"=NAVY,"Tidak Berlaku"=GREY), name=NULL) +
  scale_x_continuous(expand=expansion(mult=c(0,.05))) +
  labs(title="Regulasi Kesehatan Jiwa: Tingkat Nasional vs Daerah · Unit: jumlah regulasi",
       subtitle="Beban regulasi keswa bertumpu di DAERAH (Perda/Perbup/Pergub/Perwali); instrumen nasional sedikit.",
       x="Jumlah regulasi", y=NULL, caption=G$meta$source) + th()

Regulasi keswa menurut jenis & status, tabel data figur
Jenis regulasi Status Jumlah
Perbup Berlaku 14
Pergub Berlaku 10
Permenkes Berlaku 7
Perwali Berlaku 7
Perda Berlaku 4
Permenkes Tidak Berlaku 3
KepeselonI Berlaku 1
Pergub Tidak Berlaku 1
Permensos Berlaku 1
UU Berlaku 1
UU Tidak Berlaku 1
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

6.2 Lini masa: historis → terkini → arah ke depan

tl <- G$timeline |> filter(year>=2009) |> mutate(status=factor(status, levels=c("Berlaku","Tidak Berlaku")))
ggplot(tl, aes(year, n, fill=status)) + geom_col(width=.8) +
  annotate("segment", x=2014, xend=2014, y=0, yend=Inf, color=RED, linetype="dashed") +
  annotate("text", x=2014, y=Inf, label="UU 18/2014 Keswa", color=RED, size=2.6, vjust=1.3, hjust=1.05, fontface="italic") +
  annotate("segment", x=2023, xend=2023, y=0, yend=Inf, color=NAVY, linetype="dashed") +
  annotate("text", x=2023, y=Inf, label="UU 17/2023 (omnibus)
mencabut UU 18/2014", color=NAVY, size=2.6, vjust=1.2, hjust=1.05, fontface="italic", lineheight=.9) +
  scale_fill_manual(values=c("Berlaku"=NAVY,"Tidak Berlaku"=GREY), name=NULL) +
  scale_x_continuous(breaks=seq(2010,2026,2)) + scale_y_continuous(expand=expansion(mult=c(0,.16))) +
  labs(title="Lini Masa Penerbitan Regulasi Kesehatan Jiwa (2009–2026) · Unit: regulasi/tahun",
       subtitle="Aktivitas regulasi keswa berlanjut 2015–2026 (mayoritas DAERAH). Abu-abu = sudah dicabut/diganti (termasuk UU 18/2014).",
       x=NULL, y="Regulasi terbit", caption=G$meta$source) + th()

Regulasi keswa tingkat nasional (lini masa), tabel data figur
Judul Jenis Tahun Status
Undang-undang (UU) Nomor 18 Tahun 2014 tentang Kesehatan Jiwa UU 2,014 Tidak Berlaku
Peraturan Menteri Kesehatan Nomor 77 Tahun 2015 tentang Pedoman Pemeriksaan Kesehatan J... Permenkes 2,015 Berlaku
Peraturan Menteri Kesehatan Nomor 77 Tahun 2015 tentang Pedoman Pemeriksaan Kesehatan J... Permenkes 2,015 Berlaku
Peraturan Menteri Kesehatan Nomor 60 Tahun 2015 tentang Standar Kompetensi manajerial J... Permenkes 2,015 Berlaku
Peraturan Menteri Kesehatan Nomor 55 Tahun 2015 tentang Pengurangan Dampak Buruk pada P... Permenkes 2,015 Tidak Berlaku
Peraturan Menteri Kesehatan Nomor 55 Tahun 2015 tentang Pengurangan Dampak Buruk Pada P... Permenkes 2,015 Tidak Berlaku
Peraturan Menteri Kesehatan Nomor 54 Tahun 2017 tentang Penanggulangan Pemasungan pada ... Permenkes 2,017 Berlaku
Peraturan Menteri Kesehatan Nomor 54 Tahun 2017 tentang Penanggulangan Pemasungan pada ... Permenkes 2,017 Berlaku
Peraturan Menteri Kesehatan Nomor 45 Tahun 2017 tentang Izin dan Penyelenggaraan Prakti... Permenkes 2,017 Tidak Berlaku
Peraturan Menteri Sosial Nomor 12 Tahun 2018 tentang Pedoman Pencegahan dan Penanganan ... Permensos 2,018 Berlaku
Peraturan Menteri Kesehatan Nomor 29 Tahun 2022 tentang Pedoman Pemeriksaan Kesehatan J... Permenkes 2,022 Berlaku
Peraturan Menteri Kesehatan Nomor 29 Tahun 2022 tentang Pedoman Pemeriksaan Kesehatan J... Permenkes 2,022 Berlaku
Undang-undang (UU) Nomor 23 Tahun 2022 tentang Pendidikan dan Layanan Psikologi UU 2,022 Berlaku
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025
Transisi kerangka: dari UU khusus ke bab dalam omnibus
HISTORIS. UU No. 18 Tahun 2014 tentang Kesehatan Jiwa adalah undang-undang berdiri sendiri yang mengatur upaya keswa, hak ODGJ/ODMK, dan larangan pemasungan. Status kini: Dicabut.
TERKINI. UU No. 17 Tahun 2023 tentang Kesehatan (omnibus) mencabut UU 18/2014 dan meleburnya menjadi bagian/bab keswa dalam satu undang-undang kesehatan terpadu, dilaksanakan oleh PP No. 28 Tahun 2024; ditopang UU 23/2022 (Pendidikan & Layanan Psikologi) untuk tenaga psikolog. Implikasi: keswa tidak lagi punya UU sendiri, kekuatan/kelemahannya kini bergantung pada turunan (Permenkes/SPM) dan implementasi daerah.
ARAH KE DEPAN. Korpus ini tidak menandai RUU/draft secara eksplisit, sehingga “future law” dibaca dari sinyal: (1) gelombang regulasi daerah keswa 2025–2026; (2) turunan UU 17/2023/PP 28/2024 yang masih terbit bertahap (Permenkes standar layanan, tarif, SPM); (3) penguatan kelembagaan (mis. akreditasi Pusat Kesehatan Jiwa Nasional 2026); (4) PNPK baru (Skizofrenia 2025) sebagai sinyal pembaruan standar klinis.

6.3 Anatomi pasal keswa (korpus 890 pasal ber-tema “Kesehatan Jiwa & NAPZA”)

pa <- G$pasal_arah |> filter(arah_kebijakan!="Tidak-spesifik") |> mutate(arah_kebijakan=fct_reorder(arah_kebijakan, n))
ggplot(pa, aes(n, arah_kebijakan)) + geom_col(fill=NAVY, width=.62) +
  geom_text(aes(label=n), hjust=-0.15, size=3, color=NAVY, fontface="bold") +
  scale_x_continuous(expand=expansion(mult=c(0,.12))) +
  labs(title="Arah Kebijakan Pasal-Pasal Kesehatan Jiwa · Unit: pasal",
       subtitle="Tag arah kebijakan pada pasal ber-tema keswa (satu pasal bisa >1 arah). Mutu vs akses vs equity vs restriktif.",
       x="Jumlah pasal", y=NULL, caption=G$meta$source) + th()

Pasal keswa menurut tahap layanan, tabel data figur
Tahap layanan disasar pasal Jumlah pasal
Tidak-spesifik 825
Primer 38
Sekunder 24
Khusus 12
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025
Regulasi dengan pasal keswa terbanyak, tabel data figur
Regulasi Tahun Pasal keswa
Peraturan Menteri Kesehatan Nomor 5 Tahun 2023 tentang Narkotika, Psikotropik... 2,023 97
Peraturan Menteri Kesehatan Nomor 5 Tahun 2023 tentang Narkotika, Psikotropik... 2,023 97
Peraturan Menteri Sosial Nomor 56/HUK/2009 Tahun 2009 tentang Pelayanan dan R... 2,009 46
Undang-undang (UU) Nomor 23 Tahun 2022 tentang Pendidikan dan Layanan Psikologi 2,022 46
Qanun Kabupaten Aceh Utara Nomor 1 Tahun 2022 tentang Pencegahan, Penanggulan... 2,022 45
Peraturan Pemerintah (PP) Nomor 40 Tahun 2011 tentang Pembinaan Pendampingan ... 2,011 43
Peraturan Menteri Sosial Nomor 8 Tahun 2014 tentang Pedoman Rehabilitasi Sosi... 2,014 30
Peraturan Menteri Kesehatan Nomor 47 Tahun 2016 tentang Penyelenggaraan Terap... 2,016 27
Peraturan Menteri Kesehatan Nomor 47 Tahun 2016 tentang Penyelenggaraan Terap... 2,016 26
Peraturan Pemerintah (PP) Nomor 28 Tahun 2024 tentang Peraturan Pelaksanaan U... 2,024 24
Peraturan Menteri Kesehatan Nomor 77 Tahun 2015 tentang Pedoman Pemeriksaan K... 2,015 21
Peraturan Menteri Kesehatan Nomor 16 Tahun 2022 tentang Tata Cara Penyelengga... 2,022 21
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

6.4 Pedoman klinis (PNPK) kesehatan jiwa

PNPK (Pedoman Nasional Pelayanan Kedokteran) = standar tata laksana klinis resmi Kemenkes, instrumen mutu inti. Untuk keswa, jumlahnya sangat sedikit dibanding kebutuhan spektrum gangguan jiwa.
Pedoman klinis (PNPK) kesehatan jiwa yang tersedia, tabel data figur
PNPK Kesehatan Jiwa Tahun
PNPK Kedokteran Jiwa 2,015
Pedoman Nasional Pelayanan Klinis Tata Laksana Skizofrenia 2,025
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025
Senjang pedoman klinis. Hanya 2 PNPK keswa yang teridentifikasi (Kedokteran Jiwa 2015; Tata Laksana Skizofrenia 2025), padahal beban gangguan jiwa mencakup depresi, ansietas, bipolar, gangguan zat, demensia, gangguan anak-remaja, dll. Mayoritas tata laksana keswa belum berpedoman PNPK nasional, standar mutu klinis bertumpu pedoman organisasi profesi/PPK lokal, menyulitkan keseragaman & penjaminan mutu lintas-fasilitas.

7 Pilar 5, Obat & Teknologi (Psikotropika)

⑤ Pilar 5 · Psikotropika Esensial · WHO EML → Fornas → Primer → Harga · Acuan NICE
Availability = apakah psikotropika esensial ada di formularium nasional (Fornas); Accessibility = apakah tersedia di tingkat PRIMER (FPKTP), bukan hanya rumah sakit (FPKTL); Quality = keselarasan dengan acuan internasional WHO Essential Medicines List (EML) dan NICE UK. Sumber: dashboard HTA Watchdog ARC (100.64.0.5:1320), integrasi WHO EML × Fornas × INAPROC e-katalog × NICE; psikotropika = ATC N03/N05/N06 (64 obat).
Key takeaway obat: Dari 31 psikotropika esensial WHO, 23 (74.2%) masuk Fornas Indonesia, tetapi hanya 9 (29%) tersedia di tingkat primer (FPKTP), sisanya terbatas di rumah sakit (FPKTL). Pola ini memperkuat temuan SDM & fasilitas: obat jiwa esensial pun terkunci di tingkat rumah sakit, menyulitkan kontinuitas pengobatan di puskesmas. 8 obat esensial WHO bahkan belum di Fornas.

7.1 Kaskade ketersediaan: dari WHO EML ke layanan primer

cc <- M$eml_cascade
ggplot(cc, aes(n, fct_rev(tahap), fill=tahap)) + geom_col(width=.62) +
  geom_text(aes(label=sprintf("%d  (%.0f%%)", n, pct)), hjust=-0.08, size=3.2, color=NAVY, fontface="bold") +
  scale_fill_manual(values=c("WHO EML (esensial)"=NAVY,"Ada di Fornas Indonesia"=BLUE,
    "Tersedia di Primer (FPKTP)"=RED,"Procurable (INAPROC e-katalog)"=TEAL), guide="none") +
  scale_x_continuous(expand=expansion(mult=c(0,.18))) +
  labs(title="Kaskade Ketersediaan Psikotropika Esensial: WHO EML → Fornas → Primer · Unit: jenis obat",
       subtitle="Penyusutan tiap tahap = senjang akses. Penurunan tajam di 'Primer (FPKTP)' = obat esensial terkunci di RS.",
       x="Jumlah jenis psikotropika", y=NULL, caption=M$meta$source) + th()

Kaskade ketersediaan psikotropika esensial, tabel data figur
Tahap Jumlah obat % dari WHO EML
WHO EML (esensial) 31 100.0
Ada di Fornas Indonesia 23 74.2
Tersedia di Primer (FPKTP) 9 29.0
Procurable (INAPROC e-katalog) 19 61.3
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

7.2 Per kelompok terapi: esensial vs di Fornas vs di primer

bg <- M$by_group |> select(group, `WHO EML`=n_eml, `EML di Fornas`=n_eml_fornas, `EML di Primer (FPKTP)`=n_eml_fpktp) |>
  tidyr::pivot_longer(-group, names_to="tahap", values_to="n") |>
  mutate(tahap=factor(tahap, levels=c("WHO EML","EML di Fornas","EML di Primer (FPKTP)")),
         group=fct_reorder(group, n, .fun=max))
ggplot(bg, aes(n, group, fill=tahap)) + geom_col(position="dodge", width=.72) +
  geom_text(aes(label=n), position=position_dodge(width=.72), hjust=-0.3, size=2.6, color=NAVY) +
  scale_fill_manual(values=c("WHO EML"=NAVY,"EML di Fornas"=BLUE,"EML di Primer (FPKTP)"=RED), name=NULL) +
  scale_x_continuous(expand=expansion(mult=c(0,.1))) +
  labs(title="Psikotropika Esensial menurut Kelompok Terapi: Esensial vs Tersedia · Unit: jenis obat",
       subtitle="Untuk tiap kelompok: jumlah di WHO EML, yang masuk Fornas, dan yang tersedia di layanan primer (FPKTP).",
       x="Jumlah jenis obat", y=NULL, caption=M$meta$source) + th()

Psikotropika per kelompok terapi: esensial vs tersedia, tabel data figur
Kelompok terapi Total (HTA) WHO EML EML di Fornas EML di Primer Procurable (INAPROC)
Antipsikotik (N05A) 16 12 9 2 11
Antiepilepsi/Mood-stabilizer (N03) 16 8 7 3 10
Antidepresan (N06A) 12 5 2 2 5
Ansiolitik/Sedatif (N05B/C) 13 3 3 2 10
Psikostimulan (N06B) 6 2 1 0 3
Lain (N06 lain) 1 1 1 0 1
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

7.3 Psikotropika esensial WHO yang belum optimal tersedia

Esensial WHO tetapi TIDAK di Fornas, tabel data figur
Kelompok Obat (WHO EML) ATC Indikasi WHO
Antidepresan (N06A) Clomipramine N06AA04 Obsessive-compulsive disorder
Antidepresan (N06A) Phenelzine N06AF03 Other specified depressive disorders
Antidepresan (N06A) Bupropion N06AX12 Nicotine dependence
Antiepilepsi/Mood-stabilizer (N03) Ethosuximide N03AD01 Absence seizures, typical
Antipsikotik (N05A) Fluphenazine N05AB02 Schizophrenia or other primary psychotic disorders
Antipsikotik (N05A) Zuclopenthixol Decanoate N05AF05 Schizophrenia or other primary psychotic disorders
Antipsikotik (N05A) Brexpiprazole N05AX16 Depressive disorders
Psikostimulan (N06B) Caffeine Citrate N06BC01 Apnoea of newborn
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025
Esensial WHO di Fornas tetapi HANYA tingkat RS (bukan primer), tabel data figur
Kelompok Obat (WHO EML) ATC Tier Fornas Indikasi WHO
Ansiolitik/Sedatif (N05B/C) Midazolam N05CD08 RS saja (FPKTL) Status epilepticus; Status epilepticus; Sedative-hypnotic and anxiolytic drugs; Palliative care
Antiepilepsi/Mood-stabilizer (N03) Clonazepam N03AE01 RS saja (FPKTL) Generalised myoclonic seizure
Antiepilepsi/Mood-stabilizer (N03) Valproic Acid (Sodium Valproate) N03AG01 RS saja (FPKTL) Epilepsy or seizures; Status epilepticus; Bipolar or related disorders
Antiepilepsi/Mood-stabilizer (N03) Lamotrigine N03AX09 RS saja (FPKTL) Epilepsy or seizures
Antiepilepsi/Mood-stabilizer (N03) Levetiracetam N03AX14 RS saja (FPKTL) Epilepsy or seizures; Status epilepticus
Antipsikotik (N05A) Clozapine N05AH02 RS saja (FPKTL) Schizophrenia or other primary psychotic disorders
Antipsikotik (N05A) Olanzapine N05AH03 RS saja (FPKTL) Schizophrenia or other primary psychotic disorders; Schizophrenia or other primary psychotic disorders
Antipsikotik (N05A) Quetiapine N05AH04 RS saja (FPKTL) Schizophrenia or other primary psychotic disorders; Bipolar or related disorders
Antipsikotik (N05A) Lithium Carbonate N05AN01 RS saja (FPKTL) Bipolar or related disorders
Antipsikotik (N05A) Risperidone N05AX08 RS saja (FPKTL) Schizophrenia or other primary psychotic disorders; Schizophrenia or other primary psychotic disorders
Antipsikotik (N05A) Aripiprazole N05AX12 RS saja (FPKTL) Schizophrenia or other primary psychotic disorders; Schizophrenia or other primary psychotic disorders
Antipsikotik (N05A) Paliperidone N05AX13 RS saja (FPKTL) Schizophrenia or other primary psychotic disorders; Schizophrenia or other primary psychotic disorders
Lain (N06 lain) Donepezil N06DA02 RS saja (FPKTL) Dementia due to Alzheimer disease
Psikostimulan (N06B) Methylphenidate N06BA04 RS saja (FPKTL) Attention deficit hyperactivity disorder
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025

7.4 Biaya pengadaan bulanan (INAPROC), psikotropika Fornas terpilih

Estimasi biaya pengadaan bulanan psikotropika (proxy INAPROC e-katalog), tabel data figur
Kelompok Obat Biaya/bulan (Rp, proxy INAPROC)
Ansiolitik/Sedatif (N05B/C) Alprazolam 5,100
Ansiolitik/Sedatif (N05B/C) Lorazepam 22,500
Ansiolitik/Sedatif (N05B/C) Clobazam 24,480
Antidepresan (N06A) Maprotiline 119,700
Antidepresan (N06A) Sertraline 119,880
Antidepresan (N06A) Escitalopram 144,000
Antiepilepsi/Mood-stabilizer (N03) Carbamazepine 75,000
Antiepilepsi/Mood-stabilizer (N03) Lamotrigine 84,360
Antiepilepsi/Mood-stabilizer (N03) Valproic Acid (Sodium Valproate) 251,910
Antipsikotik (N05A) Risperidone 11,100
Antipsikotik (N05A) Trifluoperazine 21,060
Antipsikotik (N05A) Clozapine 64,800
Psikostimulan (N06B) Methylphenidate 618,000
Sumber: DREAMS/SI-SDMK Kemenkes 2025 (headcount per faskes) & SIRS Kemenkes 2025-10 · denominator proyeksi penduduk BPS 2025
Acuan NICE UK & teknologi digital
NICE UK sebagai pembanding HTA: appraisal teknologi NICE untuk psikotropika tergolong jarang (fokus pada obat baru/biaya tinggi, mis. aripiprazole untuk skizofrenia remaja & bipolar), sehingga WHO EML menjadi acuan “harus-tersedia” yang lebih lengkap untuk obat esensial keswa. Telemedicine/layanan digital keswa berkembang pasca-pandemi (telekonsultasi jiwa) namun cakupan nasionalnya belum terukur sistematis.
Catatan cakupan. Analisis ini menilai status formularium (Fornas) & kelayakan tingkat layanan (FPKTP/FPKTL) serta harga pengadaan (INAPROC), bukan stok riil tiap puskesmas (kekosongan/stockout), yang memerlukan data ASPAK/SILADAK dan tetap menjadi senjang. Artinya: bahkan obat yang boleh di primer belum tentu ada fisik di rak puskesmas.

8 Pilar 6, Sistem Informasi

⑥ Pilar 6 · SIK Rutin · Kelengkapan & Mutu Data · Pemanfaatan untuk Perencanaan
Substrat sistem informasi yang ada
Beberapa sistem informasi nasional sudah berfungsi dan menjadi tulang punggung analisis ini: DREAMS/SI-SDMK (registrasi tenaga kesehatan per faskes), SIRS (registrasi rumah sakit + layanan), SATUSEHAT (platform interoperabilitas EHR nasional), dan data klaim BPJS/JKN (utilisasi & biaya). Keberadaan sistem ini memungkinkan pemetaan suplai keswa yang cukup rinci.
Keterbatasan mutu data keswa: (1) indikator keswa spesifik (mis. jumlah ODGJ dilayani, follow-up, pasung tertangani) belum terstandar dan terpilah lintas sistem; (2) data berbasis faskes terlapor, under-coverage faskes yang tak melapor; (3) headcount tenaga rentan hitung-ganda lintas faskes; (4) integrasi antar-sistem (SDMK ↔︎ SIRS ↔︎ SATUSEHAT ↔︎ BPJS) masih parsial. Pemanfaatan data untuk perencanaan keswa berbasis bukti belum optimal.

9 Pilar 7, Kualitas & Hak Asasi Manusia

⑦ Pilar 7 · Standar Layanan · Akreditasi · Praktik Koersif (Pasung/Restraint) · Mekanisme Pengaduan
Apa yang diketahui & senjang data
Dimensi mutu & HAM adalah inti agenda keswa modern (deinstitusionalisasi, layanan berbasis hak, anti-koersi). Indonesia memiliki kerangka (akreditasi RS termasuk RSJ; program Bebas Pasung; larangan pemasungan dalam UU 18/2014). Namun indikator mutu/HAM rutin, prevalensi pasung, praktik restraint/seklusi, kepatuhan standar mhGAP, mekanisme pengaduan, tidak tersedia terpilah dalam data yang diakses laporan ini.
Senjang data, mutu & HAM. Penilaian penuh memerlukan instrumen seperti WHO QualityRights, audit fasilitas, dan survei berbasis komunitas (termasuk estimasi pasung yang tak terlihat di klaim). Dilaporkan sebagai senjang prioritas untuk situational analysis NMHP fase lanjut, bukan sebagai indikasi ketiadaan masalah, justru area dengan risiko pelanggaran hak tertinggi.

10 Sintesis, Scorecard Availability–Accessibility–Quality

aaq <- tibble::tribble(
  ~Pilar, ~Availability, ~Accessibility, ~Quality,
  "SDM (HRH)", sprintf("Psikiater %.2f/100k (≪ WHO ~1)", H$national$per100k[H$national$key=="psikiater"]),
     sprintf("%.0f%% kab tanpa psikiater; Gini %.2f", H$coverage$pct_kab_zero[H$coverage$key=="psikiater"], H$coverage$gini_kab[H$coverage$key=="psikiater"]),
     "Sub-spesialis puluhan org; tenaga di RS bukan primer",
  "Fasilitas", sprintf("%d RSJ; %.0f%% RS berlayanan jiwa dewasa", F$rsj_national$n_rsj, F$svc_national$pct_rs[1]),
     sprintf("%d prov tanpa RSJ; %.0f%% kab punya RS-jiwa", sum(F$rsj_prov$n_rsj==0), F$mh_coverage$pct_kab_with_mh_rs),
     "Layanan anak-remaja/NAPZA/rehab langka; bed tak terdata",
  "Pembiayaan", "JKN biayai keswa (triliunan kumulatif)", "Terorientasi RS; APBD tak terpilah", "Kapitasi FKTP & komunitas minim",
  "Governance", sprintf("%d regulasi keswa; UU 17/2023 omnibus + PP 28/2024", G$meta$n_mh_docs), sprintf("%d/%d regulasi = daerah; nasional sedikit", G$inv_level$n[G$inv_level$level!="Nasional"&G$inv_level$status=="Berlaku"], G$meta$n_mh_docs), sprintf("hanya %d PNPK keswa; pasal mutu/akses minim", nrow(G$pnpk_mh_u)),
  "Obat", sprintf("%d/%d psikotropika WHO-EML ada di Fornas", M$eml_cascade$n[2], M$eml_cascade$n[1]), sprintf("hanya %d (%.0f%%) tersedia di primer (FPKTP)", M$eml_cascade$n[3], M$eml_cascade$pct[3]), "Kontinuitas obat (PDC) tertantang; stok faskes tak terdata",
  "Sistem informasi", "DREAMS/SIRS/SATUSEHAT/BPJS aktif", "Indikator keswa tak terstandar", "Integrasi antar-sistem parsial",
  "Mutu & HAM", "Kerangka akreditasi & Bebas Pasung", "Data pasung/restraint tak rutin", "Audit hak (QualityRights) belum")
gt::gt(aaq) |> gt::tab_header(title=gt::md("**Tabel Sintesis, Scorecard Sisi Suplai Keswa menurut Availability–Accessibility–Quality**")) |>
  gt::tab_style(style=gt::cell_text(weight="bold",color=NAVY), locations=gt::cells_body(columns=Pilar)) |>
  gt::tab_source_note(gt::md("Ringkasan kualitatif dari pilar-pilar di atas. Sel merujuk temuan kuantitatif (SDM, Fasilitas, Pembiayaan) atau penilaian naratif + senjang data (Governance, Obat, SIK, Mutu/HAM).")) |> gfmt()
Tabel Sintesis, Scorecard Sisi Suplai Keswa menurut Availability–Accessibility–Quality
Pilar Availability Accessibility Quality
SDM (HRH) Psikiater 0.51/100k (≪ WHO ~1) 38% kab tanpa psikiater; Gini 0.77 Sub-spesialis puluhan org; tenaga di RS bukan primer
Fasilitas 42 RSJ; 27% RS berlayanan jiwa dewasa 7 prov tanpa RSJ; 53% kab punya RS-jiwa Layanan anak-remaja/NAPZA/rehab langka; bed tak terdata
Pembiayaan JKN biayai keswa (triliunan kumulatif) Terorientasi RS; APBD tak terpilah Kapitasi FKTP & komunitas minim
Governance 50 regulasi keswa; UU 17/2023 omnibus + PP 28/2024 35/50 regulasi = daerah; nasional sedikit hanya 2 PNPK keswa; pasal mutu/akses minim
Obat 23/31 psikotropika WHO-EML ada di Fornas hanya 9 (29%) tersedia di primer (FPKTP) Kontinuitas obat (PDC) tertantang; stok faskes tak terdata
Sistem informasi DREAMS/SIRS/SATUSEHAT/BPJS aktif Indikator keswa tak terstandar Integrasi antar-sistem parsial
Mutu & HAM Kerangka akreditasi & Bebas Pasung Data pasung/restraint tak rutin Audit hak (QualityRights) belum
Ringkasan kualitatif dari pilar-pilar di atas. Sel merujuk temuan kuantitatif (SDM, Fasilitas, Pembiayaan) atau penilaian naratif + senjang data (Governance, Obat, SIK, Mutu/HAM).
Sintesis: Sisi suplai keswa Indonesia menampilkan pola konsisten lintas pilar: kerangka kebijakan & pembiayaan ada, tetapi kapasitas riil (tenaga, fasilitas, obat) langka dan terkonsentrasi di Jawa/kota, dengan layanan berorientasi rumah sakit ketimbang komunitas/primer. Hambatan terbesar bukan ketiadaan mandat hukum, melainkan distribusi sumber daya dan data mutu/HAM yang tak terpantau. Prioritas kebijakan: perluasan & redistribusi tenaga (task-shifting/mhGAP ke puskesmas), penguatan layanan keswa primer & komunitas, dan pembangunan sistem indikator keswa yang terstandar.

11 Keterbatasan & langkah lanjut

Keterbatasan
(1) Headcount = posisi per-faskes, bukan orang unik, kemungkinan hitung-ganda lintas faskes (SIP dilaporkan sebagai pembanding). (2) Cakupan DREAMS/SIRS bergantung pelaporan faskes; faskes tak melapor → under-count. (3) Tempat tidur psikiatri, obat tingkat puskesmas, indikator mutu/HAM belum tersedia terpilah → dilaporkan sebagai senjang, bukan nol. (4) Pembiayaan bertumpu klaim JKN (ARC9.3); APBD keswa tak terpilah. (5) Denominator = proyeksi penduduk BPS 2025 (bukan populasi berisiko spesifik).
Langkah lanjut prioritas: (a) ekstraksi tempat tidur psikiatri per RSJ/RS lengkap (SIRS/Ditjen Yankes) untuk indikator WHO-AIMS;
(b) peta choropleth kabupaten densitas psikiater & gurun layanan (skill indonesia-district-map);
(c) ketersediaan psikotropika tingkat puskesmas (ASPAK/SILADAK);
(d) integrasi ke situational analysis NMHP (9 domain WHO) di Research Center;
(e) puskesmas mampu jiwa (Rifaskes/ASPAK) untuk kapasitas primer;
(f) standardisasi usia/kebutuhan untuk densitas berbasis kebutuhan, bukan populasi kasar.

ARC9 Mental Health Institute, Arc Research Center · Sisi Suplai Sistem Kesehatan Jiwa · June 2026. Sumber: DREAMS/SI-SDMK Kemenkes 2025; SIRS Kemenkes 2025-10; proyeksi penduduk BPS 2020–2035; klaim BPJS (ARC9.3). Counterpart manuscript: Research Center ARC9, 9.3 Indonesia Mental Health Plan (NMHP situational analysis).