D1-3 CSV 정리와 보고서 자동화

구현 요청
labs/registrations.csv를 읽는 tools/summarize-csv.mjs를 만들어줘. 따옴표가 포함된 CSV도 처리할 수 있게 해줘.
id 중복은 처음의 유효 행을 유지하고, amount가 음수이거나 유한한 숫자가 아니면 errors.csv로 분리해줘. 원본은 변경하지 마.
output/clean.csv와 summary.json, 사람이 읽을 수 있는 요약 보고서를 만들어줘. program별 인원과 금액, status별 인원을 집계해줘. 실제 결과를 expected-summary.json과 비교해 차이를 설명해줘.

검증 요청
원본 행 수, 유효 고유 행 수, 중복 수, 오류 수가 맞는지 검산해줘. 합계만 맞추려고 자료를 수정하지 말고, 제외한 행의 id와 이유를 보여줘. CSV 셀의 쉼표·따옴표·빈값도 확인해줘.

실습 절차
1. labs/registrations.csv의 열 이름과 12개 원본 행을 확인한다.
2. 신청 id가 같은 행은 중복이며 처음의 유효 행을 유지하는 규칙을 정한다.
3. 금액이 음수이거나 숫자가 아닌 행은 별도 오류 목록에 남기도록 요청한다.
4. program별 인원·금액 합계와 상태별 집계를 만드는 도구를 실행한다.
5. 제공된 expected-summary.json과 행 수·금액을 대조한다.
6. 정리된 CSV를 다시 입력해 결과가 안정적인지 확인하고 처리 규칙을 설명한다.

완료 확인
원본 12행에서 유효 고유 8행이 나온다.
중복 2행과 오류 2행을 구분한다.
유효 금액 합계 160000원과 프로그램별 집계가 맞다.