Skip to content

급여 확정·명세서 공개·전자서명·이카운트 ​

제품 개발 기록 · 급여 시트 · 법정공제 · 인사 원천

화면·API·엔티티를 연결한 급여 확정·공개·내보내기 안내입니다. 예제 DB에서 실행한 수당 한 항목의 확정·직원 앱 내부 공개·XLSX 다운로드는 실습 영상 기록에 구분합니다. 메일·전자서명 전송과 이카운트 시스템 업로드는 실행하지 않았습니다.

서로 다른 네 가지 결과 ​

조작실제 결과자동으로 함께 이루어지지 않는 것
시트 급여대장에 반영시트 계산값을 수당·공제 레코드로 기록급여 확정·직원 공개
급여대장 확정/전체 확정직원·월별 PayrollRecord의 합계·스냅샷·확정자/시각이메일·SMS·전자서명 전송
명세서 직원에게 발송sentAt·sentBy를 저장해 직원 앱 조회 허용전자서명 문서 생성, 수신/열람/서명 완료 증명
관리자 전자 서명 > 전송외부 hereby Sign 템플릿으로 별도 문서 생성·상태 기록해당 월 급여명세서 자동 선택·급여 상태 변경
이카운트 Export (XLSX)확정 급여의 항목 코드별 파일 생성은행 이체, 이카운트 서버 업로드·반영 확인

급여 확정·확정 취소 ​

급여 담당자가 /admin/#embed/sheets에서 귀속월 급여대장을 엽니다. 원천 수당/공제를 반영하고 미계산·누락·경고를 처리해야 합니다. 확정·취소·직원 공개 API에는 급여 승인 권한이 필요합니다. 시트의 설정 완료, 작업 완료, 원천 레코드 승인/지급 상태와 직원 월 급여의 확정을 구별합니다.

  1. 귀속월·대상 대장을 확인하고 직원 행의 확정을 선택합니다. 급여 확정 팝업에는 지급 항목·지급 합계, 공제 항목·공제 합계, 실수령액과 주의 문구가 나옵니다.
  2. 취소하면 요청하지 않고 닫습니다. 확정하면 확정 중…으로 표시되며 서버가 시트 행·직원·기간과 집계값을 다시 읽습니다. 성공 후 상태를 재조회합니다.
  3. 서버는 직원·연도·월의 급여 헤더를 만들거나 갱신하고 CONFIRMED, 확정자/시각, 항목 스냅샷과 합계를 저장합니다. 연결된 수당·공제에는 급여 헤더 ID를 연결합니다. 확정이 원천 수당·공제를 처음 만드는 단계는 아닙니다.
  4. 한 달 전체를 확정하려면 전체 확정을 누르고 결과 팝업을 확인합니다. 서버 대상은 해당 시트의 모든 행이며 검색/선택 영역만이 아닙니다. 직원이 없거나 지급·공제 모두 0인 행, 이미 확정/지급된 행은 별도 건수로 구분됩니다. 실행 중 닫기는 제한됩니다.
  5. 수정이 필요하면 행 확정 취소 또는 전체 확정 취소를 사용합니다. 전체 취소는 확정 상태만 작성중으로 바꾸고 지급 완료 상태는 건너뜁니다. 단일 취소는 확정 레코드가 없으면 오류를 표시합니다. 수정 후 다시 반영·확정해야 새 결과가 명세서 기준이 됩니다.

현재 저장 경계: 취소 API는 status: DRAFT와 함께 확정자·시각·스냅샷에 undefined를 전달합니다. DB에서 해당 열이 실제 NULL로 지워지는지 이번 작업에서 확인하지 않았습니다. 또한 sentAt을 삭제하지 않으므로 확정 취소를 이미 공개한 명세서의 공개 취소라고 안내할 수 없습니다. 취소 후 직원 앱 재조회와 DB 상태를 확인해야 합니다.

여러 급여대장을 같은 월에 만들어도 급여 헤더는 직원·월 기준으로 공유됩니다. 서버 확정은 집계 열 정의를 읽으므로 숨긴 보조 집계열까지 어떤 합계에 들어가는지 확인이 필요합니다. 복제 시트/보조 집계열·재확정 조합의 실제 총액은 남은 검증 항목입니다.

HR에서 명세서 확인·직원 공개 ​

  1. 급여대장에서 직원 행을 선택하고 우측 셀 상세의 명세서를 확인합니다. 직원 행과 해당 월 PayrollRecord가 있어야 정보가 나옵니다. HR 미리보기는 현재 표시 중인 집계 열의 살아 있는 값을 우선 사용하고, 값이 없으면 급여 스냅샷 합계로 대체합니다.
  2. 지급/공제 항목과 합계를 확인합니다. 열 숨김·원천 재반영 이후에는 이 미리보기와 확정 스냅샷이 다른 시점의 값을 볼 수 있습니다. 직원 앱과 같은 화면이라고 전제하지 않습니다.
  3. 직원에게 발송을 누릅니다. 확정 또는 지급 상태만 서버에서 허용합니다. 성공하면 발송 상태/시각을 다시 읽고 UI의 중복 발송 조작이 제한됩니다.
  4. 직원 계정으로 직원 앱의 급여명세서 목록을 다시 열어 해당 월이 보이는지 확인합니다. API는 본인 범위 조회에 sentAt IS NOT NULL 조건을 추가합니다. 따라서 관리자에게 보이는 작성중/미공개 급여가 직원에게 모두 보이는 것은 아닙니다.

현재 sendToEmployee는 공개 시각·수행자만 저장하며 메일·SMS·알림 생성·Sign 호출을 하지 않습니다. 버튼의 “발송” 문구를 외부 전송 성공으로 보고하면 안 됩니다. 네트워크 오류 후에는 새로고침하여 공개 시각을 확인한 다음 재시도를 결정합니다. API를 반복 호출하면 시각이 다시 쓰일 수 있습니다.

직원의 급여명세서·본인 확인·인쇄 ​

직원은 직원 앱 더보기의 급여명세서에서 엽니다. 급여 본인 읽기 권한과 계정에 연결된 직원 정보가 필요합니다.

현재 상태: 직원 앱의 급여명세서 메뉴는 「준비 중」입니다. 더보기 줄에 「준비 중」 라벨이 붙고 눌러도 열리지 않으며, 홈 「자주 하는 업무」에서 빠지고 AI 어시스턴트 메뉴 찾기에도 「준비 중」으로 표시됩니다(apps/employee-app/src/utils/recent-menus.ts의 PREPARING_MENUS). 아래 1~5는 메뉴를 다시 열었을 때의 화면 절차입니다. 직원 앱 AI 어시스턴트의 급여명세서 조회 도구는 공개된 달의 금액을 여전히 답할 수 있습니다(AI 어시스턴트).

  1. 더보기에서 급여명세서를 열면 최근 3건을 보여줍니다. 더 있으면 이전 급여명세서 보기 (N건)로 전체 목록 화면에 진입합니다. 내역이 없으면 급여명세서가 없어요.를 표시합니다. 권한 없음과 일반 로드 실패를 구별해 처리합니다.
  2. 월을 선택하면 해당 세션에서 아직 확인하지 않은 경우 주민등록번호 앞 6자리 입력 화면이 나옵니다. 숫자 6자리 입력 후 급여명세서 확인을 누릅니다. 형식 미충족은 진행하지 않고 불일치/검증 실패는 “주민등록번호가 일치하지 않아요” 안내가 나옵니다.
  3. 성공하면 같은 컴포넌트 세션의 확인 상태를 기억하고 명세서 상세를 엽니다. 취소/뒤로는 입력과 선택을 정리하고 목록으로 돌아갑니다. 이는 화면의 본인 확인 단계이며 급여 목록 자체는 그 전에 API로 읽습니다. 별도 보안 권한을 이 UI 단계가 대신하는 것은 아닙니다.
  4. 상세에서 귀속월·상태·지급 항목/합계·공제 항목/합계를 확인합니다. 항목은 응답의 snapshot.earnings/deductions를 우선하고 없으면 연결 수당·공제를 사용합니다. 법정공제 레코드에 잠정 상태가 있으면 잠정 공제 안내를 표시합니다.
  5. 상단 인쇄를 누르면 명세서용 HTML로 인쇄 흐름을 시작합니다. 인쇄 취소는 급여 상태나 공개 상태를 바꾸지 않습니다. 뒤로는 명세서 목록으로 돌아갑니다.

로컬 영상에서는 공개된 본인 명세서의 정확한 앞 6자리 입력과 상세 조회를 실행했습니다. 공개 전/후 비교, 타인 접근, 오입력, 세션 재진입, 잠정 안내, 인쇄의 금액 및 API 응답 동등성은 새로 실행하지 않았습니다.

전자서명 설정·전송·상태 확인 ​

관리자 앱 LNB 전자 서명(/admin/#esign)이 실제 전송 진입점입니다. HR 워크북의 전자서명 시트는 기록을 읽는 연관 화면입니다. 직원·템플릿 선택은 employee:update 계열 권한, 연동 상태 조회와 신규 연동은 조직 읽기/수정 권한을 별도로 검사합니다.

조작필수 입력·제한결과
연동 설정조직의 소유자 정보와 Sign 연결 가능 상태조직 연동 자격·웹훅 준비
전송조직 직원 UUID, 양의 정수 Sign 템플릿 ID, 직원 이메일별도 Sign 문서와 ESignRecord
직원/템플릿 검색직원은 이름·사번·이메일, 템플릿은 이름 검색선택 후보를 필터링
상태 필터·페이지 이동전체 또는 특정 Sign 상태DB 발송 목록 조회
목록 새로고침/재진입현재 표시 목록DB 최신순 조회 후 미완료 건 원격 동기화
개별 상태확인원격 문서가 있고 완료/비활성/만료가 아닌 건Sign 조회 상태를 로컬에 반영
열기원격 문서 ID, 건별 짧은 연속 요청 제한새 접근 토큰 발급 후 새 탭

연동 준비 ​

  1. 전자 서명을 열었을 때 전자서명 연동이 필요합니다가 나오면 연동 설정을 선택합니다. 연동 오류/폐기 상태에서는 다시 시도 안내를 확인합니다.
  2. 연결 확인창에서 소유자 이름·이메일 및 조직 정보가 Sign 연결에 사용되고 API/웹훅이 설정된다는 내용을 확인합니다. 확인 후 연결을 누르면 조직 연동을 요청합니다. 취소하면 연결하지 않습니다.
  3. 연결 뒤 템플릿과 목록, Sign API·Webhook 상태 표시를 확인합니다. 설정 성공과 외부 문서 실제 발송/서명 성공은 별개입니다. 로컬 개발 연결은 로컬 Sign 설정의 환경 준비 절차이며 상용 배포 증거가 아닙니다.

직원·템플릿을 선택해 전송 ​

  1. 직원 검색 (이름 / 사번 / 이메일)...에서 직원을 찾아 선택합니다. 서버 검색 후보는 한 번에 최대 20명이며 방향키·Enter·Esc를 사용할 수 있습니다. 텍스트만 바꾸면 이전 직원 선택이 해제됩니다.
  2. 템플릿 검색...에서 연결된 Sign 템플릿을 선택합니다. 이 화면은 외부 템플릿을 조회/선택하며 템플릿 편집 화면을 제공하지 않습니다. 둘 다 선택해야 전송이 활성화됩니다.
  3. 전송을 누르면 서버가 직원 소속/삭제 여부·이메일과 템플릿 존재를 다시 검사합니다. 이메일이 없으면 먼저 직원 정보를 보완합니다. 템플릿에 선언된 입력 필드는 직원·계약 데이터의 지원 필드로 채우며 발신자는 조직 Sign 설정 또는 API 계정 기본값을 사용합니다.
  4. 서버는 수신자·템플릿 스냅샷과 전송자/시각을 포함한 전송중 레코드를 먼저 만든 후 Sign 문서를 요청합니다. 성공하면 목록을 갱신하고 폼을 비우며 반환된 문서를 새 탭으로 엽니다. 브라우저 팝업 제한이 있으면 목록 열기로 다시 접근합니다.
  5. 실패하면 오류 레코드/메시지를 남길 수 있고 폼을 유지합니다. 외부 문서가 이미 만들어진 뒤 로컬 DB 갱신만 실패하는 경로도 있으므로 오류를 곧바로 “아무 문서도 생성되지 않음”으로 판단하지 않습니다. 기록·외부 문서 확인 뒤 재시도합니다. 이 전송 API에는 같은 직원/템플릿 요청 전체를 중복 제거하는 보장이 없습니다.

상태·문서 열기와 재진입 ​

  1. 목록의 사번·직원·템플릿·수신 이메일·상태·전송일시·서명일시를 확인합니다. 상태 선택으로 전체/작성중·예약·실패·진행·완료·비활성 계열을 필터링합니다. 화면 라벨은 Sign 상태 매핑에 따릅니다.
  2. 페이지 진입/목록 새로고침은 createdAt DESC로 DB를 읽고 현재 페이지의 미완료 문서를 원격 조회합니다. 한 번에 최대 100개 ID, 동시 5건 단위이며 일부 실패는 나머지를 계속 처리합니다.
  3. 30초 주기 폴링은 DB 목록을 읽는 경로이며 매번 외부 Sign 동기화를 실행하지 않습니다. 숨겨진 화면이나 선택/전송 중에는 폴링을 건너뛸 수 있습니다. 웹훅이 원격 완료 상태를 로컬에 반영하는 경로도 있습니다.
  4. 특정 건의 상태확인을 누르면 원격 상태를 동기화합니다. 완료·비활성·만료 등 종료 건은 원격 조회 대상에서 제외될 수 있습니다. 원격 오류는 기존 표시가 남을 수 있으므로 현재 배지가 방금 원격 확인에 성공했다는 뜻은 아닙니다.
  5. 링크 열의 열기를 누르면 매번 새 접근 토큰을 발급합니다. 서버는 같은 문서의 연속 요청을 5초 제한합니다. 문서 ID가 없으면 발송 중 또는 발송 실패와 오류 설명을 표시합니다. 목록 행 전체는 문서 열기 링크가 아닙니다.

현재 목록에는 문서 삭제·전송 취소·일괄 재전송 버튼이 없습니다. 오래된 상태는 상태확인, 실패는 오류 원인 확인 후 새 전송을 구별합니다. 급여명세서 공개 시각과 ESignRecord 서명 시각을 합쳐 자동 교부 입증으로 설명하지 않습니다.

이카운트 XLSX ​

  1. 귀속월 급여대장을 열어 대상 직원 급여를 확정합니다. 데이터 > 이카운트 Export (XLSX) 를 선택하면 「이카운트 내보내기」 모달이 열립니다. UI는 현재 표시 직원 행의 확정/지급 상태를 검사하지만 서버는 조직·기간의 확정/지급 레코드와 지정한 급여대장 slug를 다시 사용합니다.
  2. 모달은 이 급여대장의 집계 열을 시트 순서·열 이름 그대로 한 줄씩 보여 줍니다(열 · 이카운트 코드 · 인원 · 금액 합계). 열 설정에서 고른 「eCount 항목코드」가 그 열의 코드(A01 · D03)로 따라오고, 코드가 없는 열은 「코드 없음 · 내보내지 않음」으로 보이되 고를 수 없습니다. 체크한 열만 파일에 들어갑니다. 이카운트가 직원별 산정 방식으로 직접 계산하는 기본급 계열(열 이름이나 코드 이름이 기본급·본봉·호봉·근속·월급여)은 그대로 보내면 이중 반영되므로 처음부터 체크가 꺼져 있고 「기본급 계열」 표식이 붙습니다. 처음 체크 상태는 같은 달을 이미 내보냈으면 그때의 선택, 아니면 조직에 저장된 기본값, 둘 다 없으면 기본급 계열 제외 순으로 정해집니다.
  3. 「이 선택을 기본값으로 저장」(기본 켬)을 두면 내보낼 때 제외한 열의 key 가 조직 설정(settings.ecount.exportExcludedColumnKeys)에 저장돼 다음 달 기본값이 됩니다. 열 이름은 바뀔 수 있어 key 로 기억합니다. 「기본값으로」 는 서버가 준 처음 상태로 되돌립니다. 활성 대장 ID를 보내므로 다른 복제 대장의 수당/공제까지 합산하지 않습니다. slug가 없으면 범위를 정할 수 없다는 오류, 확정 급여가 없으면 먼저 확정하라는 오류가 납니다.
  4. 「내보내기」 를 누르면 ecount_YYYYMM.xlsx 가 내려오고, 대상 급여 기록에 내보내기 시각(exportedAt)과 함께 제외한 열(exportOptions)이 찍힙니다. 파일은 직원 × 코드 한 행이며 같은 코드를 가진 열이 둘이면 합쳐집니다. 기본 요청은 수당과 공제를 함께 포함합니다. 급여대장 집계열에 연결되지 않은 레코드 수 안내가 있으면 확인합니다. 그 레코드는 어떤 항목에도 들어가지 않습니다.
  5. 파일의 직원·항목 코드·금액·합계를 급여대장과 대조한 뒤 조직의 이카운트 절차로 업로드합니다. 이카운트 병행 기간에는 이카운트 결과가 기본급 제외 전과 같은지 확인합니다. 이 문서에서 다운로드 이후 외부 업로드·검증 결과는 확인하지 않았습니다.

소스·과거 설명과 차이 ​

고정 소스책임
워크북 급여, PayrollService확정 팝업·전체 처리·현재 셀 미리보기·직원 공개·파일 요청
급여 API, PayrollRecord조직/본인 범위·확정 스냅샷·공개 시각·export 범위
직원 프로필 동작, 명세서 매핑, 명세서 UI최근/과거 목록·앞 6자리 확인·상세·잠정 안내·인쇄
전자서명 UI, 관리자 동작, ESignService연동·검색·전송·폴링·개별 상태확인
전자서명 API, ESignRecord조직 범위·이메일·템플릿 재검증, 외부 요청과 상태 스냅샷

HBHR201의 “전체 확정(commit)”과 HBHR203의 재계산 diff는 원천 반영·월 급여 확정의 경계를 현재 코드와 대조해야 합니다. HBHR270의 “급여 확정→명세서 발송→전자서명” 자동 연결은 현행 sendToEmployee에서 확인되지 않습니다. 전자서명 새로고침은 최신순·원격 동기화의 과거 변경 근거이며, 현재 개별 버튼 이름은 상태확인입니다. 잠정 공제 안내의 과거 화면은 법정공제 페이지에 조건을 명시해 재사용했습니다.

남은 증거: 단일/전체 확정과 취소의 DB 스냅샷 정리, 공개 후 취소의 직원 노출, 현재 HR 미리보기·직원 명세서·XLSX 금액 동등성, 필터/숨긴 집계열/중복 급여대장, 권한별 거부, 비동기 응답 전 월 전환, 인쇄 실물, Sign 신규 연동·문서 생성·웹훅·원격 실패/부분 실패·팝업 차단·중복 전송을 현재 환경에서 실행하지 않았습니다. 급여 확정 전후 및 양 앱의 명세서와 Sign 상태 변화에 맞춘 최신 번호 캡처/짧은 녹화가 필요합니다. 다운로드 성공·공개 시각·로컬 배지로 실제 수신·열람·서명 완료를 대신하지 않습니다.

직원 앱 사용 영상 ​

35초 · 소리 없음 · 화면 안의 번호와 강조 위치를 따라 보세요. 전체화면으로 확대할 수 있어요.

처음에는 재생 버튼을, 다시 볼 때는 아래 동작 번호를 누르세요.

  1. 더보기 열기

    로그인한 직원 앱에서 하단 「더보기」를 누릅니다. 자세히 따라 하기

  2. 급여명세서 선택

    「급여명세서」를 누릅니다. 본인에게 공개된 명세서가 있어야 합니다. 자세히 따라 하기

  3. 조회 월 선택

    확인할 월을 선택합니다. 영상은 예제 계정의 2026년 8월 명세서를 사용합니다. 자세히 따라 하기

  4. 본인 확인

    본인의 주민등록번호 앞 6자리를 입력하고 「급여명세서 확인」을 누릅니다. 영상의 입력값은 촬영용 예제이므로 따라 입력하지 않습니다. 자세히 따라 하기

  5. 지급·공제 확인

    선택한 연월, 지급 내역·합계, 공제 내역·합계를 확인합니다. 이 화면에서는 명세서 금액을 수정할 수 없습니다. 자세히 따라 하기

교육용 예제 조직에서 촬영했어요. 이름·금액·날짜는 교육용 예시이며, 사용 중인 조직의 자료를 확인하세요. 직원 앱은 모바일 크기의 브라우저 화면이에요.

직원 앱 소개와 사용자 교육에서 실제 누르는 위치와 결과를 따라갈 수 있도록 번호 자막·강조 표시를 붙여 촬영했습니다. 별도 DB의 로컬 예제 조직·관리자 테스트 계정을 사용했습니다. 직원 화면은 390×844 브라우저 크기이며 실기기 녹화가 아닙니다. HR의 공개 전후 비교, 본인 확인 오입력, 타인 접근, 인쇄와 실기기 사용은 이 영상에 포함하지 않았습니다.

앱 소개 · 영상 목록과 교육 범위 · 촬영·검증 기록

전자서명 메뉴의 연동 사전 확인 영상 ​

관리자 가이드의 3단계 영상은 사이드바 전자 서명 진입, 「전자서명 연동이 필요합니다」 안내, 「연동 설정」 위치를 보여 줍니다. 로컬 예제 조직의 실제 미연동 상태를 촬영했으며 연동 생성 버튼은 실행하지 않았습니다.

서식 선택·계약 발송·직원 서명·완료 상태 동기화는 미촬영입니다. 명세서를 직원 앱에 공개하는 동작과 Sign 계약을 보내는 동작은 별도이므로, 이 진입 영상이나 명세서 조회 영상으로 서명 완료를 대체하지 않습니다.

템플릿 기초 집계와 지급 집계의 중복 위험 ​

격리 예제에서 추천 급여대장 템플릿에 수당 「금액」 집계 열을 추가하고 DOC002의 136,000원을 반영했습니다. 표에는 insurable_gross(보험료 기초) 136,000과 지급 항목 136000이 각각 표시됐습니다. 전자는 scope: sheet, 후자는 scope: anchor이며 둘 다 수당 집계로 정의됩니다.

현재 payroll.confirmAllLedgerRows와 개별 확정은 수당 집계 열을 지급 합계에 더하는 구조이므로, 기초 금액과 지급 항목을 함께 확정하면 같은 원천을 중복 합산할 위험이 있습니다. 이 구성은 확정하지 않았습니다. 화면의 기초 열을 숨기는 것만으로 해결되지 않습니다. 확정 API는 표시 여부와 별개로 저장된 열 구성을 순회합니다. 이카운트 출력과 명세서의 합계·세부 내역도 함께 대조해야 합니다.

확정·공개 조작 영상은 보험료 기초 집계가 없는 수당 한 항목 전용 실습용 대장에서 진행합니다. 이 예제는 법정공제·보험료·세금 계산과 종합 급여 계산을 검증하는 자료가 아닙니다. 기본 템플릿의 기초 집계 역할과 확정 합산 대상의 분리를 제품 코드에서 수정·검증하기 전에는 이 조합을 일반 급여 확정 안내로 사용하지 않습니다. 이번 변경은 문제를 기록한 문서 작업이며 급여 로직 수정은 포함하지 않습니다.

수당 한 항목의 확정·다운로드·내부 공개 영상 ​

Codex가 격리된 예제 조직의 2026년 9월 급여대장에서 실행했습니다. 실습 구성과 전체 확정, 이카운트 다운로드, 명세서 내부 공개의 번호 영상으로 연결합니다. 앞 절의 중복 집계 조건을 확인했으므로 보험료 기초 집계를 제외한 수당 한 항목 전용 대장을 사용했습니다. 기본급·보험료·세금이 모두 포함된 월 급여 계산 예제가 아니며, 실제 업무 대장에서 기초 집계 열을 삭제하도록 권장하는 안내가 아닙니다.

  1. 관리자의 시트 메뉴에서 귀속월과 급여대장을 확인합니다. 실습 구성 영상은 파일 → 설정 다시 열기에서 기초 집계 열의 제거 안내를 읽고, 원본 수당 기록을 유지한 채 집계 열만 제외한 뒤 설정 완료하는 조작입니다. 결과를 다시 조회해 「사용 중」, 금액 집계 열 한 개, DOC002의 136,000원을 확인했습니다.
  2. 「전체 확정」에서 처리 범위를 읽고 「확정」을 누릅니다. 실제 결과는 1건 확정, 0원/미해석 19건 건너뜀이었습니다. 확인창을 닫은 뒤 DB의 DOC002·2026년 9월 기록에서 confirmed, 지급 136,000원·공제 0원·실수령 136,000원과 수당 한 건의 스냅샷을 대조했습니다. 시트에 20명이 보였다는 이유로 20명 전원 확정으로 보고하지 않습니다.
  3. 같은 대장에서 DOC002를 검색하고 데이터 → 「이카운트 Export (XLSX)」를 누릅니다. 검색은 화면 표시 조건이며 파일 범위 지정이 아닙니다. 실제 내려받은 ecount_202609.xlsx의 시트는 코드·부서코드·사원명·금액 헤더와 AA002 / 08 / 홍영상 / 136000 한 행이었습니다. 파일 내부 값을 읽어 검증했으며 이카운트 시스템에 업로드하지 않았습니다.
  4. 금액 셀을 선택하고 「셀 상세」에서 직원과 명세서를 검토한 뒤 「직원에게 발송」을 누릅니다. 화면의 「발송 완료 — 직원 앱에서 확인 가능」을 확인했습니다. 이 버튼은 공개 시각을 저장하는 내부 공개입니다. 은행 지급·메일·SMS·Sign 전송은 발생시키지 않았습니다.

원천 값 → 수당 기록 → 집계 열 → 확정 스냅샷 → 직원 앱 공개 조건의 관계를 구분하는 영상입니다. 개별 확정·확정 취소·여러 수당/공제·법정 계산·해당 직원 계정으로 새 명세서 조회는 남은 검증입니다. 기존 직원 앱 대표 영상의 다른 직원·다른 월 명세서 조회를 이 실습 건의 공개 후 조회 증거로 사용하지 않습니다.

내부 공개 이후 DB의 sentAt 저장도 확인했습니다. DB 원문 시각은 확정 2026-09-11 15:11:15.256, 공개 2026-09-11 15:12:50.913입니다. 시간대 없는 열의 원문과 DB 조회 도구가 클라이언트 시간대로 해석한 ISO 값을 구분했으며, 조회 도구의 변환만으로 제품의 시간 오류라고 판정하지 않았습니다.