Skip to content

feat: 대체 미리보기 새 서식(백엔드 #78)·엑셀 일괄 등록 주소/신규 인적사항(#82)·비엑셀 업로드 안내(#80) - #97

Merged
yunho09 merged 4 commits into
developfrom
feature/96-preview-new-certificate-form
Oct 6, 2026
Merged

yunho09 merged 4 commits into
developfrom
feature/96-preview-new-certificate-form

Conversation

@yunho09

@yunho09 yunho09 commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

개요

백엔드가 경력증명서 PDF를 새 「경력증명서 서식」으로 바꾸는 중입니다(DSM2026-Commonly/Commonly-Backend#78, API·DB 변경 없음). 서버 미리보기·발급 PDF는 FE가 받은 그대로 띄우므로 자동으로 바뀌지만, 서버 미리보기를 못 받을 때 FE가 입력값으로 그리는 대체 미리보기는 옛 모양이었습니다. 민원인 화면은 본인 발급 경로가 닫혀 있어 항상 대체 미리보기가 나옵니다.

Closes #96

수정

  • 대체 미리보기를 release: develop 누적 수정 사항 운영 반영 #78 서식과 같게 그림
    • 밑줄 제목 → 제 미리보기 호 / 담당자·연락처
    • 인적사항: 성명 (한글)/(영문) 세로 배치 + 같은 줄 생년월일(1999.09.09.), 주소
    • 재직사항: 부터·까지·근무부서·담당업무 4열, 10행 고정(열 비율 13·15·16·15·41%)
    • 총 근무기간 + 퇴직사유 한 줄, 그 밖의 사항, 용도
    • "위와 같이 재직ㆍ경력을 증명합니다."(왼쪽) · 발급일(가운데) · "대전광역시 유성구청장 (인)"(오른쪽)
  • 값도 서버와 같은 규칙 (career-certificate/certificateDocument.ts)
    • 총 근무기간: 행마다 양 끝 포함 일수를 더해 30일=1개월로 나눔, 종료일 없는(재직 중) 행·역전된 행은 0일 — 백엔드 WorkPeriodCalculator와 동일. 실제 서버 PDF의 "총 58 개월 27 일"과 같은 값이 나오는지 테스트로 확인
    • 퇴직사유: 마지막(가장 최근 입사) 이력의 사유만 — #78의 두 번째 커밋과 동일
    • 이를 위해 경력 행에 시작일·종료일·퇴직사유를, 미리보기에 대상자 주소를 넘김
  • (백엔드 fix: 사용자 목록 표에 준 높이를 없애 한 행일 때 행이 늘어나지 않게 함 #80 대응) 확장자만 .xlsx로 바꾼 한글 파일 등을 올리면 백엔드가 500 대신 400 NOT_AN_EXCEL_FILE를 줍니다. 일반 400 문구("지원하지 않는 형식") 대신 "다른 이름으로 저장 → Excel 통합 문서(.xlsx)"로 변환하라는 안내를 보여줍니다.

확인

  • 게이트: build 5/5 · lint 0 warnings / 0 errors · test 342 pass / 0 fail (utils 222 · ui 112 · civil-web 8)
  • 민원인 앱에서 실제로 대체 미리보기를 띄워 새 서식 배치 확인

참고

  • 백엔드 #78이 머지 전이라, 레이아웃·규칙이 더 바뀌면 이 PR도 맞춰 고칩니다.
  • 민원인 내 정보에는 주소가 없어 민원인 대체 미리보기의 주소 칸은 비어 있습니다(서버 PDF는 인적사항의 주소를 씀).

추가 반영 (백엔드 #82 대응, 엑셀 일괄 등록)

  • 주소 매핑: 백엔드가 매핑 대상에 address를 추가했습니다. 엑셀의 "주소" 열이 자동으로 연결되고, 처음 등장한 대상자의 인적사항 주소로 저장돼 증명서 주소 칸에 찍힙니다.
  • 신규 인적사항 수: 엑셀에만 있던 대상자는 백엔드가 인적사항을 새로 만듭니다. 성명 오타 한 글자도 새 사람이 되므로 완료 화면에 "신규 인적사항 N명"(createdHumanCount)을 보여줍니다.
  • 끝난 등록이 남아 막히던 문제: 완료 화면에서 버튼 대신 메뉴로 나갔다 다시 업로드 화면에 오면, 이미 확정한 파일이 "업로드 완료"로 남아 새 파일 선택이 무시됐습니다(그대로 진행하면 같은 파일 재확정). 결과가 남은 세션이면 새로 시작합니다. 복원한 파일이 [, 0B]로 보이던 것도 형식·크기를 표시합니다.
  • 실서버 확인: 새 대상자 + 주소 열 엑셀 업로드 → 주소 자동 매핑 → 확정 200 {"insertedCount":1,"createdHumanCount":1} → 완료 화면 "신규 인적사항 1명". 비엑셀 파일 → 변환 안내 표시.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: DSM2026-Commonly/Commonly-Frontend/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b7dfbb8d-b0e9-4748-81df-8b707acdffa0
📥 Commits

Reviewing files that changed from the base of the PR and between d919766 and 6e5343b.

📒 Files selected for processing (12)
  • packages/ui/src/career-certificate/CareerCertificateIssue.tsx
  • packages/ui/src/career-certificate/CareerCertificateIssue.types.ts
  • packages/ui/src/career-certificate/certificateDocument.ts
  • packages/ui/src/career-certificate/views/CertificatePreviewView.styles.ts
  • packages/ui/src/career-certificate/views/CertificatePreviewView.tsx
  • packages/ui/src/pages/careerRow.ts
  • packages/ui/tests/CertificatePreviewView.test.tsx
  • packages/ui/tests/StaffCareerCertificateIssuePage.test.ts
  • packages/ui/tests/certificateDocument.test.ts
  • packages/utils/src/__tests__/files.test.ts
  • packages/utils/src/files.ts
  • packages/utils/src/index.ts

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


Walkthrough

대체 경력증명서 미리보기를 새 서식으로 변경하고, 경력 데이터 및 문서 계산을 추가합니다. 비Excel 파일 업로드 오류에는 안내 메시지를 연결합니다.

Changes

경력증명서 대체 미리보기

Layer / File(s) Summary
경력 데이터와 문서 계산
packages/ui/src/career-certificate/CareerCertificateIssue.types.ts, packages/ui/src/career-certificate/certificateDocument.ts, packages/ui/src/pages/careerRow.ts, packages/ui/tests/certificateDocument.test.ts, packages/ui/tests/StaffCareerCertificateIssuePage.test.ts
경력 행에 시작일, 종료일, 퇴직사유를 추가합니다. 날짜와 발급일 형식, 근무기간 합계 및 마지막 경력의 퇴직사유를 계산하는 함수를 추가하고 관련 테스트를 작성합니다.
대체 미리보기 서식 렌더링
packages/ui/src/career-certificate/CareerCertificateIssue.tsx, packages/ui/src/career-certificate/views/CertificatePreviewView.tsx, packages/ui/src/career-certificate/views/CertificatePreviewView.styles.ts, packages/ui/tests/CertificatePreviewView.test.tsx
발급 화면에서 서식에 맞는 생년월일과 주소를 전달합니다. 대체 미리보기는 인적사항, 재직사항 10행, 총 근무기간, 마지막 퇴직사유와 발급 정보를 표시합니다. 관련 스타일과 렌더링 테스트를 변경합니다.

비Excel 업로드 오류 안내

Layer / File(s) Summary
비Excel 오류 메시지 연결
packages/utils/src/files.ts, packages/utils/src/index.ts, packages/utils/src/__tests__/files.test.ts
NOT_AN_EXCEL_FILE 응답에 새 안내 메시지를 연결하고 공개 내보내기에 추가합니다. .xlsx 확장자만 가진 비Excel 파일의 오류 메시지를 테스트합니다.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix · Severity of issue fixed: Low

Sequence Diagram(s)

sequenceDiagram
  participant CareerCertificateIssue
  participant CertificatePreviewView
  participant certificateDocument
  CareerCertificateIssue->>CertificatePreviewView: 인적사항, 주소, 경력 행 전달
  CertificatePreviewView->>certificateDocument: 문서 날짜와 경력 정보 계산 요청
  certificateDocument-->>CertificatePreviewView: 날짜, 근무기간, 퇴직사유 반환
  CertificatePreviewView-->>CareerCertificateIssue: 대체 미리보기 표시
Loading

Merge Risk: ⚪ Minimal · up to 6e534

No actionable issue established here prevents merging the fallback preview and upload guidance after normal checks.

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning #96의 대체 미리보기 서식 요구사항은 제목·인적사항·10행 재직표·근무기간·발급 문구를 포함합니다. 변경 요약과 테스트는 해당 항목을 구현했다고 보여 줍니다. 다만 #96은 퇴직사유를 중복 제거해 , 로 연결하도록 요구합니다. getLastRetirementReason은 마지막 경력 행의 사유 하나만 반환하며, 테스트도 이 동작을 확인합니다. 퇴직사유를 경력 행에서 중복 제거해 , 로 연결하도록 구현하고, 여러 사유·중복 사유를 검증하는 테스트를 추가하세요.
Out of Scope Changes check ⚠️ Warning packages/utils/src/files.ts와 공개 내보내기에 추가한 NOT_AN_EXCEL_FILE 업로드 안내 및 관련 테스트는 #96의 경력증명서 대체 미리보기 요구사항과 연결되지 않습니다. PR 설명도 이를 백엔드 #80 대응으로 별도 설명합니다. 업로드 오류 안내와 관련 테스트·내보내기를 이 PR에서 제외하거나, 별도 PR로 분리하세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 58.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 12 functions across 12 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 대체 미리보기의 새 서식을 주요 변경 사항으로 명확히 제시합니다. 주소와 비엑셀 업로드 안내 등 다른 변경 사항도 포함해 다소 길지만, 변경 내용과 일치합니다.
  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@yunho09 yunho09 changed the title feat: 대체 미리보기를 새 경력증명서 서식(백엔드 #78)에 맞추고 비엑셀 업로드 안내 추가 feat: 대체 미리보기 새 서식(백엔드 #78)·엑셀 일괄 등록 주소/신규 인적사항(#82)·비엑셀 업로드 안내(#80) Oct 6, 2026
@yunho09
yunho09 merged commit 7076971 into develop Oct 6, 2026
1 check passed
yunho09 added a commit that referenced this pull request Oct 6, 2026
release: develop 누적 수정 사항 운영 반영 (#91·#95·#97·#99)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 대체 미리보기를 새 경력증명서 서식(백엔드 #78)에 맞춤

1 participant