| name | school-violence-docs |
| description | 학교폭력 사안 처리 행정문서(사안접수 보고서, 전담기구 심의결과 보고서, 학교장 자체해결·종결 결과 보고서)를 실제 사건 내용으로 채워 한글 hwpx로 생성한다. 사용자가 학폭 사안 정황을 두서없이 설명하거나, 사안접수·사안조사· 전담기구 심의·자체해결·종결·심의위원회 이송 같은 단계를 언급하거나, 사안조사 보고서를 첨부/제시하며 다음 서류를 만들어 달라고 할 때 반드시 이 스킬을 사용한다. "학폭 서류", "학교폭력 보고서", "사안접수서 만들어줘", "이 조사보고서로 자체해결 서류 뽑아줘", "심의위 이송 서류" 같은 요청이면 명시적으로 hwpx를 말하지 않아도 적용한다. hwpx 양식의 빈칸을 채우는 작업이면 폭넓게 트리거한다. |
| compatibility | 필수: kordoc MCP 도구(parse_document, parse_form, fill_form)와 Python lxml. 둘 중 하나라도 없으면 표·체크박스를 채울 수 없으므로 작업 전에 반드시 점검한다. |
학교폭력 행정서류 생성 스킬
학교폭력 사안 처리 흐름대로 실제 내용을 채운 행정 hwpx 문서를 만든다. 빈 양식 배포가 아니라,
사용자가 준 사실관계를 양식의 정확한 칸에 넣고 원본 서식을 100% 보존해 출력한다.
적용 범위: 이 스킬의 양식은 충청북도교육청 기준이다. 타 시·도 교육청 서식은 셀 주소·체크박스
매핑이 달라 추후 도입 예정이다. 다른 교육청 양식이 주어지면 이 매핑이 안 맞을 수 있으니, 그 경우
parse_form으로 구조를 재확인하고 사용자에게 알린다.
0. 시작 전 필수 점검 (건너뛰지 말 것)
이 스킬은 표·중첩표·체크박스를 hwpx 내부 XML로 직접 채운다. 두 의존성이 모두 있어야 동작한다.
- kordoc MCP —
parse_document/parse_form/fill_form이 도구 목록에 있는지 확인. 문서를 읽고
결과를 검증하는 데 쓴다. 없으면 사용자에게 kordoc MCP 연결을 요청하고 중단한다.
- Python lxml —
python3 -c "import lxml"로 확인. 없으면 pip install lxml 안내. 표/체크박스
채움이 lxml에 의존하므로 없으면 진행 불가.
점검을 통과하면 진행한다.
1. 핵심 원칙 — 빈칸 허용 (★)
행정문서는 추측이 법적 효과로 이어질 수 있다. 그래서:
- 모든 칸을 면밀히 검토해 입력에서 직접 진술됐거나 합리적으로 도출 가능한 값은 채운다.
(예: 신고자가 "2학년 3반 담임교사" → 같은 반 관련학생 소속이 "2-3"으로 도출됨)
- 채우기 어렵거나 불확실한 칸은 비우고 넘어간다. 억지로 채우지 않는다. 빈칸은 사용자가 아래아한글에서
직접 채울 자리다.
- 법적 분류·판단(피해유형, 자체해결 요건 O·X, 학폭 해당 여부)은 사용자 지시나 조사자 추정이 있을 때만
채운다. 특히
성폭력 체크는 수사기관 통보의무 등 영향이 크니 임의로 하지 않는다.
- 생성 후 채운 항목과 빈칸 항목을 사용자에게 목록으로 보고한다.
- 사안번호(
OO고-2026-N호)는 전 서류의 1차 키다. 한 사안의 모든 서류가 같은 번호를 공유한다.
- 학교명은 양식에 박지 않는다. 정식명
OO고등학교·약칭 OO고가 기본 플레이스홀더이며, 사용자가 주면
data.json의 학교명/학교약칭으로 채우고 없으면 플레이스홀더를 그대로 둔다(사용자가 한글에서 채움).
- 작성 문체 (행정문체) ★: 자유서술 칸(사실확인 내용·사안 개요·조사내용·사안조사내용)은 칸당 최소 500자
이상, 명사형 종결어미(~음, ~함) 로 쓴다. 권장
~확인됨/~진술함/~결정함/~필요함, 지양 ~했다/~합니다·
구어체·추측성 수식. data.json에 그 텍스트를 넣기 전에 이 문체로 다듬고 분량(500자)을 점검한다.
- 500자 채우는 법 (★ 날조 금지): 빈칸 원칙은 유지한다 — 사실을 지어내 분량을 늘리지 않는다. 대신 알려진
사실을 육하원칙(누가·언제·어디서·무엇을·어떻게·왜) 으로 빠짐없이 상술하고, 발생 경위·당사자별 진술·취한
조치·확인 결과까지 풀어 쓰면 대개 500자가 채워진다. 그래도 부족하면 모자란 사실관계를 사용자에게 추가로
묻는다(예: "발생 전후 정황이나 당사자 진술을 더 알려주실 수 있나요? 현재 분량으론 사안 내용이 ○○자라
500자에 미치지 못합니다"). 이 내용 보강용 후속질문은 '생성 전 1회 확인'과 별개로 허용된다. 사용자가 더
답하지 못하면 확보된 사실까지만으로 작성하고, 억지로 같은 말을 반복하거나 추측성 수식을 덧대 분량을 맞추지
않는다(그 경우 500자 미달이어도 무방).
- 예외: 전담기구 보고서의 「6. 결정사항」(
결정)은 500자 규칙에서 제외 — 짧은 정형 문장으로 족하다
(예: "학교장 자체해결로 결정함", "심의위원회 심의 요청하기로 결정함"). 명사형 종결어미만 지킨다.
2. 두 가지 흐름
흐름 ① — 사안접수 보고서 생성
트리거: 사용자가 사안 정황을 두서없이 설명한다.
- 입력에서 필드를 추출한다(사안번호·접수일시·신고자·경로·관련학생·일시/장소/내용·유형·즉시분리 여부).
- 생성 전 1회 확인 (★ 기본 동작): 곧바로 생성하지 말고, 추출이 안 되거나 모호한 핵심 항목을 한 번에 모아 짧게
되묻는다. 사용자가 답한 값은 반영하고, 답하지 않은 항목은 빈칸으로 두고 그대로 생성한다. 질문은 1회로
끝내고 반복 심문하지 않는다(빈칸 원칙이 있으니 한 번이면 충분).
- 묻는 필수 항목(입력에 없거나 모호하면): 접수일시 · 신고자(성명·신분) · 피해유형 · 즉시분리 여부(시행/미시행,
미시행 시 사유). 그 외 모호한 핵심 값도 같이 묶어 1회로 묻는다.
- 물을 때 미응답 시 어떻게 되는지 한 줄로 같이 안내한다(별도 질문 아님, 같은 메시지에 포함). 그래야 사용자가
모르는 항목을 안심하고 건너뛰어 1회로 끝난다:
- 자유서술·일반 칸(일시·내용·신고자·즉시분리 등) → 빈칸으로 생성, 아래아한글에서 직접 채움.
- 양식 고정 필드(학교명·학교약칭) →
OO고등학교/OO고 플레이스홀더 유지.
- 예) "접수일시·신고자·피해유형·즉시분리 여부를 알려주실 수 있나요? (모르면 비워두세요 — 빈칸으로, 학교명 미입력 시
OO고등학교로 생성됩니다)"
data.json을 만든다(아래 3절). 모르는 값은 키를 빼거나 "".
scripts/fill_jeopsu.py로 생성 → parse_document로 검증 → 보고.
학교 고유 헤더(교감·담당자·전화 등)는 양식에 비어 있다. 특정 학교 정보를 스킬에 박아두지 않기 위해
비워 두었다(실명/가짜 모두 금지). 이 칸들도 다른 칸과 똑같은 루프를 따른다: 사용자가 주면 data.json의
교감/담당자/담당전화/접수자 등으로 채우고, 처음 한 번 가볍게 물어볼 수는 있으나 답이 없으면 빈칸으로
두고 넘어간다. baked-in 기본값에 의존하지 말 것 — 비어 있는 게 정상이고, 사용자가 한글에서 채운다.
흐름 ② — 사안조사 이후 분기 서류 생성
트리거: 사용자가 사안조사 보고서를 첨부/제시한다.
parse_document로 사안조사 보고서를 읽어 사안번호·관련학생·개요·자체해결 요건 정황을 파악한다.
- 간단 인터뷰로 분기를 확정한다. 답 없으면 해당 칸 빈칸:
- 자체해결 4요건 각 O/X? · 피해측 동의서 제출 O/X? · (해당 시) 종결 사유? · 전담기구 심의 일시·참석자? · 최종 결정?
- 분기 판정:
- 자체해결 = 4요건 모두 O 그리고 동의 O → 전담기구 보고 + 자체해결 결과 보고 + 자체해결 동의서(피해관련 학생용)
- 종결 = 학교폭력 아님(오인신고 등) → 전담기구 보고 + 종결 결과 보고 + 종결 동의서(피해관련 학생용)
- 심의위 이송 = 4요건 중 하나라도 X 또는 동의 미제출 → 전담기구 보고만(결정사항에 이송 기재)
- 4요건·동의 칸 채우기 (★): 4요건은 실제로 충족 안 되는 경우가 많다. 분기에 맞춰 채운다.
- 자체해결·종결로 확정이면 → 4요건 4칸 + 동의 칸을 모두
O 로 채운다(자체 처리되려면 충족된 것이므로).
- 심의위 이송으로 확정이면 → 4요건·동의를 추측해 채우지 않는다. 인터뷰로 "어느 요건이 X인지·동의 미제출인지"
확인된 칸만 채우고, 답이 없으면 빈칸으로 둔다. 임의로 X를 찍지 말 것(사용자가 한글에서 채움).
scripts/fill_jeondamgigu.py(항상) + 필요시 scripts/fill_result.py + scripts/fill_donguiseo.py(자체해결/종결 동의서)로 생성 → 검증 → 보고.
동의서 사안 내용은 완곡하게 (★): 자체해결·종결 동의서의 사안내용은 피해관련 학생과 보호자가 직접 읽고
서명하는 문서다. 사안조사 보고서의 사실관계는 따르되, 가해 행위를 자극적·단정적으로 묘사하지 말고
완곡·객관적 표현으로 500자 내외로 쓴다(보고서의 '최소 500자'와 다름). 예: "폭행하고 욕설함" → "부적절한
신체적 접촉과 언행이 있었던 것으로 확인됨". 피해자에게 2차 상처를 주지 않도록 톤을 낮춘다.
※ kordoc fill_form은 이 칸을 채울 수 있으나 일부 한글을 손상시키고(예 "다툼이"→"다투이") 그리드·사안번호는
못 잡으므로, fill_donguiseo.py(lxml)로 채운다 — 서명 문서라 글자 손상은 허용되지 않는다.
※ 관련학생 그리드에는 가해관련·피해관련 학생 인적사항을 모두 적는다(서명만 피해측 개인별). 학년/반은
컬럼이 학년/반이라 '1학년 3반'은 "1/3"으로 적는다(번호 미포함).
공동학폭(타학교 연루): 전담기구는 한 학교에 통합 운영되지 않고 연루 학교가 각자 운영한다.
우리 학교 전담기구 보고서는 자교 기준(일시·장소·참석자) 으로 쓰고, 공동사안 번호는 참고로 병기한다.
3. 스크립트 사용법
빈 양식은 assets/templates/에 있다(OO고 양식). 각 필러는 <빈양식> <data.json> <출력>을 받는다.
스크립트는 scripts/에서 실행하거나 PYTHONPATH에 포함해야 hwpx_lib를 import한다.
cd <스킬>/scripts
python3 fill_jeopsu.py ../assets/templates/사안접수_빈양식.hwpx data.json out.hwpx
python3 fill_jeondamgigu.py ../assets/templates/전담기구심의_빈양식.hwpx data.json out.hwpx
python3 fill_result.py ../assets/templates/자체해결종결_빈양식.hwpx data.json out.hwpx
python3 fill_donguiseo.py ../assets/templates/자체해결동의서_빈양식.hwpx data.json out.hwpx
python3 fill_donguiseo.py ../assets/templates/종결동의서_빈양식.hwpx data.json out.hwpx
data.json 스키마와 유형 체크박스 매핑, 표/셀 위치는 references/field-maps.md를 본다.
각 스크립트 상단 docstring에도 예시 JSON이 있다.
필러 공통: 값이 비었거나 키가 없으면 그 칸은 건드리지 않아 빈칸으로 남는다. 이게 빈칸 원칙의 구현이다.
관련학생이 양식 칸(기본 4명)을 넘으면 필러가 학생행을 자동 복제해 전원을 한 문서에 채운다(별지·수기 추가 불필요).
학생 배열에 인원수대로 넣기만 하면 된다. 동작 원리는 references/field-maps.md의 "행 자동 복제" 참조.
4. 생성 후 반드시 검증
fill_form/lxml 편집이 서식을 깨지 않았는지, 값이 올바른 칸에 들어갔는지 항상 확인한다.
parse_document(출력.hwpx)로 재파싱한다.
- 표 골격(체크박스 □, 중첩표, 참고표)이 보존됐는지, 값이 의도한 셀에 있는지 본다.
- 채운 항목·빈칸 항목을 사용자에게 표로 보고한다.
문제가 보이면 references/field-maps.md의 셀 위치를 확인하고 data.json 또는 인덱스를 조정한다.
5. 더 읽을거리
references/workflow.md — 5단계 업무흐름·분기·데이터 연결 전체 규약
references/field-maps.md — 양식별 필드/셀 주소, 유형 매핑, 분기 판정
scripts/hwpx_lib.py — 셀 채움·체크박스·재압축 코어(다른 한글 서식에도 재사용 가능)