법정 교육·안전 교육이 끝나면 누가 안 들었는지 확인해야 합니다. 그런데 "대상자 45명 − 이수자 38명 = 7명"이라는 단순 빼기는 조용히 틀립니다 — 이름 뒤 공백, 팀명 띄어쓰기 차이, 대상자 명단에 없는 외부 이수자 때문입니다. 이 안내서는 양방향 대조로 그 조용한 오답을 막습니다.
이 안내서를 끝내면 미이수자를 양방향으로 대조해 찾고, 대상 외 이수자나 중복이 있으면 단순 산식을 쓰지 않아야 한다는 것을 알게 됩니다.
왜 단순 빼기가 위험한가
실제 사례입니다. 대상자 45명, 이수자 38명이니 미이수자는 7명이어야 합니다. 그런데 이름만으로 비교했더니 15명이 나왔습니다.
TEXT
[비교] 정규화 없이: 15명 → 정규화 후: 7명
원인은 손입력 자료의 보이지 않는 차이였습니다. 이름 뒤에 공백('김가온 ')이 붙어 있거나, 소속이 구조1팀과 구조 1팀처럼 달랐습니다. 에러는 나지 않았습니다 — 그래서 더 위험합니다.
양방향으로 대조한다
한 방향만 보면 놓칩니다. 세 가지를 함께 봅니다.
- 미이수 — 대상자 중 이수 기록에 없는 사람
- 대상 외 이수 — 이수자 중 대상자 명단에 없는 사람 (외부기관 이수·오입력)
- 중복 이수 — 같은 사람이 여러 번 기록된 것
대조 전에 이름·소속의 공백을 제거하고, 가능하면 이름 대신 교육번호_hash 같은 고유 키로 맞춥니다. 해시로 맞추면 소속 띄어쓰기 차이는 무시됩니다.
실행과 결과
TEXT
[입력] 대상자 10명, 이수 기록 8건 [검산] 매칭 이수 7명, 미이수 3명, 대상 외 이수 1명, 중복 이수 기록 0건 [주의] 대상 외 이수자가 있어 단순 산식으로 안내하지 않습니다. [OK] 저장: output/missing.csv [OK] 저장: output/external_completed.csv [OK] 저장: output/duplicate_completed.csv
검산 — 두 방향으로
결과가 맞는지 두 가지로 확인합니다.
TEXT
[검산1] 대상 45 - 이수 38 = 7명, 결과 7명 → 일치 [검산2] 대상자 명단에 없는 이수자: 0명
검산 1이 어긋나면 동명이인·외부 수강자·중복 이수자 가능성을 확인합니다. 검산 2에서 대상 외 이수자가 한 명이라도 나오면, 단순 산식이 틀렸다는 신호이므로 자동 안내를 멈춥니다.
▸ 소방 활용 포인트
법정·안전·장비 교육 이수 확인에 씁니다. 외부기관 이수자나 중복이 있으면 "대상−이수" 빼기는 틀립니다 — 대상 외 이수가 1건이라도 나오면 자동 안내를 중단하고 담당자가 원자료를 확인합니다.사람 검토 체크리스트
TEXT
- [ ] 실명단을 외부 챗봇이나 공개 저장소에 올리지 않았습니다. - [ ] 교육번호 같은 내부 대조 키를 쓰고, 원본 사번·교육번호는 공개하지 않았습니다. - [ ] 동명이인 가능성이 있으면 이름만으로 자동 안내하지 않았습니다. - [ ] 대상 외 이수자 목록이 비어 있지 않으면 자동 안내를 중단했습니다. - [ ] 적용 전 "대상 N명, 이수 M명, 미이수 N-M명"을 미리 정해 두고 결과와 대조했습니다. - [ ] 결과 공유 전 수신자, 포함 컬럼, 보안 등급을 확인했습니다.
⚠️ 흔한 실수
이 레시피는 이수 여부 최종 확정 도구가 아니라 대조 보조 도구입니다. 동명이인·전입·전출·외부기관 이수·교육 면제는 사람이 확인하고, 실명단은 외부 AI에 넣지 말고 로컬에서만 처리하세요.