{
 "때": "2026-09-22T19:24:14",
 "fail": 0,
 "warn": 3,
 "항목": [
  {
   "관문": "C0",
   "이름": "구분 칸이 아는 값인가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "계산·인용·해석 중 하나여야 한다 — 대장 25행을 봤다"
  },
  {
   "관문": "C1",
   "이름": "필수 칸이 다 있는가",
   "통과": true,
   "등급": "OK",
   "잼": false,
   "사람": false,
   "한마디": "이 호에는 «인용» 구분의 행이 없어 잴 것이 없었다"
  },
  {
   "관문": "C1",
   "이름": "그 값이 자리표시자가 아닌가",
   "통과": true,
   "등급": "OK",
   "잼": false,
   "사람": false,
   "한마디": "이 호에는 «인용» 구분의 행이 없어 잴 것이 없었다"
  },
  {
   "관문": "C1",
   "이름": "원문확인이 Y 인가",
   "통과": true,
   "등급": "OK",
   "잼": false,
   "사람": false,
   "한마디": "이 호에는 «인용» 구분의 행이 없어 잴 것이 없었다"
  },
  {
   "관문": "C1",
   "이름": "URL 이 주소 형식인가",
   "통과": true,
   "등급": "OK",
   "잼": false,
   "사람": false,
   "한마디": "이 호에는 «인용» 구분의 행이 없어 잴 것이 없었다"
  },
  {
   "관문": "C1",
   "이름": "기준일에 연도가 있는가",
   "통과": true,
   "등급": "OK",
   "잼": false,
   "사람": false,
   "한마디": "이 호에는 «인용» 구분의 행이 없어 잴 것이 없었다"
  },
  {
   "관문": "C2",
   "이름": "N01 여성생산연령인구",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "aggsum:여성생산연령_2015:* → 4540623.0 (허용오차 5.00e-02)"
  },
  {
   "관문": "C2",
   "이름": "N02 여성생산연령인구",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "aggsum:여성생산연령_2025:* → 4748086.0 (허용오차 5.00e-02)"
  },
  {
   "관문": "C2",
   "이름": "N03 여성생산연령변화율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "expr:100*(N02/N01-1) → 4.57 (허용오차 5.00e-03)"
  },
  {
   "관문": "C2",
   "이름": "N05 여성생산연령인구",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "raw:여성생산연령_2015:안산시 → 259705.0 (허용오차 0.00e+00)"
  },
  {
   "관문": "C2",
   "이름": "N06 여성생산연령인구",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "raw:여성생산연령_2025:안산시 → 217422.0 (허용오차 0.00e+00)"
  },
  {
   "관문": "C2",
   "이름": "N07 여성생산연령변화율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "expr:100*(N06/N05-1) → -16.28 (허용오차 5.00e-03)"
  },
  {
   "관문": "C2",
   "이름": "N08 여성생산연령감소율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "expr:-1*N07 → 16.28 (허용오차 5.00e-03)"
  },
  {
   "관문": "C2",
   "이름": "N09 여성생산연령증감",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "raw:증감:안산시 → -42283.0 (허용오차 0.00e+00)"
  },
  {
   "관문": "C2",
   "이름": "N10 여성생산연령감소인원",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "expr:-1*N09 → 42283.0 (허용오차 5.00e-02)"
  },
  {
   "관문": "C2",
   "이름": "N11 여성생산연령변화율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "expr:100*(N22/N21-1) → -20.11 (허용오차 5.00e-03)"
  },
  {
   "관문": "C2",
   "이름": "N12 여성생산연령감소율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "expr:-1*N11 → 20.11 (허용오차 5.00e-03)"
  },
  {
   "관문": "C2",
   "이름": "N13 여성생산연령변화율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "expr:100*(N24/N23-1) → 90.81 (허용오차 5.00e-03)"
  },
  {
   "관문": "C2",
   "이름": "N21 여성생산연령인구",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "raw:여성생산연령_2015:포천시 → 50961.0 (허용오차 0.00e+00)"
  },
  {
   "관문": "C2",
   "이름": "N22 여성생산연령인구",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "raw:여성생산연령_2025:포천시 → 40712.0 (허용오차 0.00e+00)"
  },
  {
   "관문": "C2",
   "이름": "N23 여성생산연령인구",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "raw:여성생산연령_2015:하남시 → 59880.0 (허용오차 0.00e+00)"
  },
  {
   "관문": "C2",
   "이름": "N24 여성생산연령인구",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "raw:여성생산연령_2025:하남시 → 114257.0 (허용오차 0.00e+00)"
  },
  {
   "관문": "C2",
   "이름": "N25 시군수",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "aggcount::* → 31.0 (허용오차 5.00e-02)"
  },
  {
   "관문": "C2",
   "이름": "N26 변화율중앙값",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "aggmedian:변화율:* → 0.12 (허용오차 5.00e-03)"
  },
  {
   "관문": "C2",
   "이름": "N27 변화율범위",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "expr:N13-N11 → 110.92 (허용오차 5.00e-03)"
  },
  {
   "관문": "C2",
   "이름": "N28 감소시군비중",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "expr:100*N04/N25 → 48.39 (허용오차 5.00e-03)"
  },
  {
   "관문": "C2",
   "이름": "N29 여성생산연령인구",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "raw:여성생산연령_2015:고양시 → 385306.0 (허용오차 0.00e+00)"
  },
  {
   "관문": "C2",
   "이름": "N30 여성생산연령인구",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "raw:여성생산연령_2025:고양시 → 381734.0 (허용오차 0.00e+00)"
  },
  {
   "관문": "C2",
   "이름": "N31 여성생산연령변화율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "expr:100*(N30/N29-1) → -0.93 (허용오차 5.00e-03)"
  },
  {
   "관문": "C2",
   "이름": "파생값이 원자료에서 다시 계산되는가",
   "통과": false,
   "등급": "WARN",
   "잼": true,
   "사람": false,
   "한마디": "23건 일치 · 0건은 다시 계산할 수 없었다"
  },
  {
   "관문": "C3",
   "이름": "값이 어긋나는 곳을 정의로 구분하고 본문에 병기했는가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "대장 25행에서 그런 곳이 없었다"
  },
  {
   "관문": "C4",
   "이름": "본문 수치가 모두 대장에 있는가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "통계성 수치 30개를 봤다"
  },
  {
   "관문": "C4",
   "이름": "「무시목록」으로 건너뛴 수치가 없는가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "무시목록을 쓰지 않았다"
  },
  {
   "관문": "C5",
   "이름": "해석 주장에 유보 표현이 붙었는가",
   "통과": false,
   "등급": "WARN",
   "잼": true,
   "사람": false,
   "한마디": "해석 행 1개의 «모든» 등장을 봤다"
  },
  {
   "관문": "C6",
   "이름": "강조 태그가 글자로 새어 나가지 않았는가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "`<b>` 가 본문에 글자로 찍히는 것 (B03 이 그렇게 발행됐다)"
  },
  {
   "관문": "C6",
   "이름": "자리표시자가 다 채워졌는가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "`{N04}` 같은 것이 안 채워진 채 나가는 것"
  },
  {
   "관문": "C6",
   "이름": "본문이 비어 있지 않은가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "400자 미만이면 빌드가 덜 된 것으로 본다"
  },
  {
   "관문": "C6",
   "이름": "viewport 메타가 있는가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "없으면 폰에서 데스크톱 너비로 그려진다"
  },
  {
   "관문": "C6",
   "이름": "doctype 과 html lang 이 있는가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "없으면 쿼크 모드 · 스크린리더가 언어를 못 정한다"
  },
  {
   "관문": "C6",
   "이름": "수치 표기가 안 깨졌는가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "대장 값은 정수인데 본문에 「11,937,415.0명」처럼 나가는 것"
  },
  {
   "관문": "C6",
   "이름": "canonical·구조화 데이터가 있는가",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "없어도 발행은 막지 않는다(WARN) — 검색·공유에서 손해"
  },
  {
   "관문": "C7",
   "이름": "대장 값을 KOSIS 에 다시 물어 맞췄는가",
   "통과": true,
   "등급": "OK",
   "잼": false,
   "사람": false,
   "한마디": "출처식이 적힌 행이 0개라 이 관문은 아무것도 재지 않았다"
  },
  {
   "관문": "C8",
   "이름": "선언 1〔분포〕",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "근거 5개 · 역할 「퍼짐」 을 갖췄다 (N03, N26, N27, N04, N28)"
  },
  {
   "관문": "C8",
   "이름": "선언 2〔크기〕",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "근거 6개 · 역할 「None」 을 갖췄다 (N05, N06, N07, N08, N09, N10)"
  },
  {
   "관문": "C9",
   "이름": "N03 여성생산연령변화율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "분모를 파생식 안의 대장 행으로 짚는다 (N01, N02)"
  },
  {
   "관문": "C9",
   "이름": "N07 여성생산연령변화율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "분모를 파생식 안의 대장 행으로 짚는다 (N05, N06)"
  },
  {
   "관문": "C9",
   "이름": "N08 여성생산연령감소율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "분모를 파생식 안의 대장 행으로 짚는다 (N07)"
  },
  {
   "관문": "C9",
   "이름": "N11 여성생산연령변화율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "분모를 파생식 안의 대장 행으로 짚는다 (N21, N22)"
  },
  {
   "관문": "C9",
   "이름": "N12 여성생산연령감소율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "분모를 파생식 안의 대장 행으로 짚는다 (N11)"
  },
  {
   "관문": "C9",
   "이름": "N13 여성생산연령변화율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "분모를 파생식 안의 대장 행으로 짚는다 (N23, N24)"
  },
  {
   "관문": "C9",
   "이름": "N26 변화율중앙값",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "집계 행 — 분모는 원소 행에 위임한다"
  },
  {
   "관문": "C9",
   "이름": "N27 변화율범위",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "분모를 파생식 안의 대장 행으로 짚는다 (N11, N13)"
  },
  {
   "관문": "C9",
   "이름": "N28 감소시군비중",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "분모를 파생식 안의 대장 행으로 짚는다 (N04, N25)"
  },
  {
   "관문": "C9",
   "이름": "N31 여성생산연령변화율",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "분모를 파생식 안의 대장 행으로 짚는다 (N29, N30)"
  },
  {
   "관문": "C10",
   "이름": "검증 1〔결론이 선다〕",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "크기를 값으로 댔다 (N03, N26, N27, N11, N13, N04, N28)"
  },
  {
   "관문": "C10",
   "이름": "검증 2〔결론을 좁혔다〕",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "크기를 값으로 댔다 (N04, N31, N26)"
  },
  {
   "관문": "C10",
   "이름": "검증 3〔말하지 않는다〕",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "「말하지 않는다」 — 값을 안 대는 대신 그렇다고 적었다"
  },
  {
   "관문": "C10",
   "이름": "검증 4〔말하지 않는다〕",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "「말하지 않는다」 — 값을 안 대는 대신 그렇다고 적었다"
  },
  {
   "관문": "C10",
   "이름": "검증 5〔말하지 않는다〕",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "「말하지 않는다」 — 값을 안 대는 대신 그렇다고 적었다"
  },
  {
   "관문": "C10",
   "이름": "검증 6〔말하지 않는다〕",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "「말하지 않는다」 — 값을 안 대는 대신 그렇다고 적었다"
  },
  {
   "관문": "C10",
   "이름": "검증 7〔결론을 좁혔다〕",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "크기를 값으로 댔다 (N09, N10)"
  },
  {
   "관문": "C10",
   "이름": "한계 문단 ↔ 검증 수",
   "통과": true,
   "등급": "OK",
   "잼": false,
   "사람": false,
   "한마디": "한계 문단에서 항목을 못 셌다 — 검증 7건만 본다"
  },
  {
   "관문": "C11",
   "이름": "「살기 시작」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「하기 시작했」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「독립했」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「독립하기」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「이사했」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「이사 왔」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「이사왔」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「이사 갔」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「이사갔」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「옮겨 갔」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「옮겨갔」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「빠져나갔」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「빠져나간」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C11",
   "이름": "「떠났」",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "본문에 없다"
  },
  {
   "관문": "C12",
   "이름": "원자료가 호 폴더 안에 있습니다",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "원자료가 호 폴더 안에 있습니다 — 중간층이 없어 해당 없음"
  },
  {
   "관문": "C13",
   "이름": "「때문」 방향조차 단정하지 않는다 — 외국인 여성이 늘었는지 줄었는지를 이 자료로",
   "통과": true,
   "등급": "OK",
   "잼": true,
   "사람": false,
   "한마디": "(나) 유보 선언"
  }
 ],
 "줄": [
  {
   "등급": "OK",
   "관문": "C0",
   "말": "구분 값 이상 없음 (계산·인용·해석)"
  },
  {
   "등급": "OK",
   "관문": "C1",
   "말": "인용행 메타 이상 없음 (원문위치·URL·기준일까지 확인)"
  },
  {
   "등급": "WARN",
   "관문": "C2",
   "말": "N28 감소시군비중: `expr:100*N04/N25` 이 «검산되지 않은» N04 에 기대고 있습니다 — 이 식은 「서로 어긋나지 않는다」까지만 보증하고 원자료까지 닿지 않습니다"
  },
  {
   "등급": "OK",
   "관문": "C2",
   "말": "파생값 23건 원자료와 일치"
  },
  {
   "등급": "OK",
   "관문": "C3",
   "말": "같은 지표·대상의 값 충돌 없음"
  },
  {
   "등급": "OK",
   "관문": "C4",
   "말": "본문 통계 수치가 모두 대장에 등록됨"
  },
  {
   "등급": "WARN",
   "관문": "C5",
   "말": "N20 '신도시': 4곳 중 1곳에 유보 표현이 없습니다 … 규모와 차이가 있다. '생산연령'은 연령 구간일 뿐 실제 경제활동 여부를 뜻하지 않는다. 시군 경계 변경과 신도시 입주 시차는 보정하지 않았다. <summary class=\"vh\""
  },
  {
   "등급": "OK",
   "관문": "C5",
   "말": "해석 주장에 유보 표현이 붙어 있음"
  },
  {
   "등급": "OK",
   "관문": "C6",
   "말": "렌더링 이상 없음 (태그 유출·자리표시자·본문량·viewport·문서구조)"
  },
  {
   "등급": "WARN",
   "관문": "C7",
   "말": "출처식이 적힌 행이 0개입니다 — 이 호는 원본 재조회를 하지 않았습니다. 본문 핵심 수치 몇 개라도 `출처식` 칸을 채우면 prep.py 오류까지 잡힙니다"
  },
  {
   "등급": "OK",
   "관문": "C8",
   "말": "주장 2건이 모두 계산으로 받쳐집니다 (역할이 붙은 근거 2개)"
  },
  {
   "등급": "OK",
   "관문": "C9",
   "말": "비율성 행 10건이 모두 분모를 짚습니다"
  },
  {
   "등급": "OK",
   "관문": "C10",
   "말": "한계 7건이 모두 값 또는 이유를 갖췄습니다 · 값을 댄 것 3건 · 「말하지 않는다」 4건"
  },
  {
   "등급": "OK",
   "관문": "C11",
   "말": "개인 수준 전이 주장 없음 (낱말 14개 · 인용부호 안과 부정문은 세지 않음)"
  },
  {
   "등급": "OK",
   "관문": "C12",
   "말": "원자료가 호 폴더 안에 있습니다 — 중간층이 없어 해당 없음"
  },
  {
   "등급": "OK",
   "관문": "C13",
   "말": "인과 표현 1건이 모두 근거를 짚거나 유보를 선언합니다 (변수 21개와 대조)"
  }
 ]
}