급여 처리 데이터 템플릿
급여 처리 데이터 템플릿
- 급여 분석에 최적화된 데이터 필드
- 수명 주기 매핑을 위한 상세 활동 추적
- Oracle HCM Cloud 급여 데이터 추출 안내
급여 처리 속성
| 이름 | 설명 | ||
|---|---|---|---|
| 급여 기록 PayrollRecord | 특정 급여 기간에 직원을 식별하는 고유 식별자입니다. | ||
| 설명 급여 기록은 process mining 분석에서 중심이 되는 케이스 식별자입니다. 직원 배정 식별자와 급여 기간 식별자를 결합한 값 또는 고유 키입니다. 이 속성은 근무 시간표 제출부터 최종 은행 이체와 세금 신고까지 특정 주기에 한 직원을 지급하는 데 관련된 모든 활동을 묶습니다. 같은 직원의 1월 급여와 2월 급여를 구분해 분석할 수 있습니다. 중요한 이유 Case ID로 사용되어 서로 다른 이벤트를 하나의 프로세스 인스턴스로 묶어 분석합니다. 확보 방법 Oracle HCM의 PAY_ASSIGNMENT_ACTIONS 또는 Person Number와 Payroll Period Name의 조합으로 구성합니다. 예시 직원1001-2023-M01직원5992-2023-W42300000018273645미국-NY-A123-1월23일 | |||
| 소스 시스템 SourceSystem | 이벤트가 발생한 시스템의 이름입니다. | ||
| 설명 데이터 항목을 생성한 소프트웨어 또는 모듈을 식별합니다. 이 프로세스의 기본값은 'Oracle HCM Cloud Payroll'입니다. 복잡한 시스템 환경에서는 급여 처리 엔진, 근태 관리 모듈 또는 외부 은행 인터페이스를 구분하는 데 사용할 수 있습니다. 중요한 이유 근태 관리 또는 은행 하위 시스템의 데이터를 통합할 때 데이터 계보를 파악하는 데 도움이 됩니다. 확보 방법 데이터 추출 시 값을 직접 입력하거나 인터페이스 ID에서 가져옵니다. 예시 Oracle HCM Cloud PayrollOracle Time and Labor외부 은행 인터페이스 | |||
| 이벤트 타임스탬프 EventTimestamp | 활동이 발생한 정확한 날짜와 시간입니다. | ||
| 설명 활동이 발생한 시점을 기록합니다. 처리 시간과 소요 시간을 계산하고 병목을 찾는 데 중요합니다. 자동화된 단계에서는 시스템 실행 시간이 기록됩니다. 승인처럼 수동으로 진행하는 단계에서는 거래 로그에 기록된 사용자 작업의 타임스탬프를 사용합니다. 중요한 이유 이벤트를 시간순으로 정렬하고 시간 기반 KPI를 계산하는 데 필요합니다. 확보 방법 PAY_ACTION_INFORMATION 같은 관련 거래 테이블의 CREATION_DATE 또는 ACTION_DATE 열입니다. 예시 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| 최근 데이터 업데이트 LastDataUpdate | 원본 데이터베이스에서 레코드가 마지막으로 수정된 시각입니다. | ||
| 설명 분석에 사용하는 데이터의 최신성을 나타냅니다. 이벤트 타임스탬프와는 다르며, ETL 프로세스나 시스템 업데이트가 데이터베이스 행을 마지막으로 수정한 시점을 나타냅니다. 데이터가 최신인지 확인하고 추출 지연 문제를 진단하는 데 사용합니다. 중요한 이유 분석가가 실시간 데이터와 오래된 데이터 중 무엇을 보고 있는지 확인할 수 있습니다. 확보 방법 대부분의 Oracle HCM 테이블에 있는 LAST_UPDATE_DATE 열입니다. 예시 2023-10-02T12:00:00Z2023-10-06T01:00:00Z | |||
| 활동 이름 ActivityName | 급여 주기에서 수행된 구체적인 단계 또는 이벤트입니다. | ||
| 설명 이 속성에는 급여 프로세스에서 발생한 이벤트의 이름이 기록됩니다. 예를 들면 '근무 시간표 제출', '급여 계산 시작', '지급 완료'가 있습니다. 프로세스 탐색과 변형 분석에 사용하는 기본 차원입니다. Oracle HCM Cloud에서는 급여 작업 테이블의 Action Type 또는 Action Status에서 가져오는 경우가 많습니다. 중요한 이유 프로세스에서 '무엇을' 했는지를 정의하며, 이를 바탕으로 프로세스 맵을 재구성할 수 있습니다. 확보 방법 PAY_PAYROLL_ACTIONS의 ACTION_TYPE 코드 또는 감사 추적의 상태 변경 기록에서 가져옵니다. 예시 급여 계산 시작근무 시간표 승인은행 이체 파일 생성감사 예외 표시 | |||
| SLA 처리 마감 시각 SlaProcessingDeadline | 급여 지급을 완료해야 하는 목표 날짜와 시각입니다. | ||
| 설명 급여 지급에 적용되는 계약상 또는 법적 마감 시각을 저장합니다. 이 속성을 'Payment Executed' 타임스탬프와 비교합니다. 'SLA 처리 마감 준수' KPI를 계산하고 지연 위험이 있는 급여 그룹을 식별하는 데 사용합니다. 중요한 이유 정시 처리 여부를 기준으로 프로세스의 성공과 실패를 판단하는 주요 기준입니다. 확보 방법 일반적으로 Payroll Definition의 설정 필드(DFF)를 사용하거나 Check Date에서 X일을 뺀 값으로 계산합니다. 예시 2023-10-28T17:00:00Z2023-11-30T17:00:00Z | |||
| 급여 그룹 PayGroup | 급여 처리를 위해 직원을 논리적으로 묶은 그룹입니다. | ||
| 설명 직원이 속한 급여 정의를 나타냅니다(예: '제조 부문 주급', '본사 월급'). 대부분의 대시보드에서 기준으로 사용하며, 급여 주기와 빈도별 성과를 비교할 수 있습니다. 중요한 이유 급여 일정을 결정하는 주요 설정 객체입니다. 확보 방법 PAY_ALL_PAYROLLS_F 테이블의 Payroll Name입니다. 예시 미국 월 2회 지급영국 월급주급 노조 | |||
| 급여 기간명 PayrollPeriodName | 급여 처리에 적용되는 기간의 구체적인 이름입니다. | ||
| 설명 '2024년 1월 월간' 또는 '42주차 주간'과 같은 처리 주기를 식별합니다. 'SLA 마감 준수 모니터'에 필요한 속성입니다. 직원별 케이스를 해당 일괄 처리 건으로 묶어 집계 보고서를 작성할 수 있습니다. 중요한 이유 일괄 처리 단위 분석과 SLA 추적에 필수적입니다. 확보 방법 PAY_TIME_PERIODS 테이블 또는 Payroll Definition의 Time Period Name입니다. 예시 2023년 월간 102023년 주간 422023년 12월 보너스 지급 | |||
| 법률 데이터 그룹 LegislativeDataGroup | 국가 또는 규제 환경별로 급여 데이터를 구분합니다. | ||
| 설명 Oracle HCM Cloud의 Legislative Data Group(LDG)은 급여 및 관련 데이터를 구분합니다. 일반적으로 국가 또는 특정 지역의 법률에 해당합니다. 이 속성을 사용하면 국가별로 프로세스를 분석할 수 있습니다(예: 미국 급여와 영국 급여). Country 일반 속성에 매핑하는 경우가 많습니다. 중요한 이유 관할 지역에 따라 규정 준수 요건과 프로세스 흐름이 크게 달라지는 경우가 많습니다. 확보 방법 PAY_ALL_PAYROLLS_F 테이블을 Legislative Data Group 정의와 조인합니다. 예시 미국 법률 데이터 그룹영국 LDG프랑스 급여 | |||
| 부서명 DepartmentName | 직원이 근무하는 조직 단위입니다. | ||
| 설명 급여 레코드에 연결된 직원을 담당하는 부서를 식별합니다. '근무 시간표 승인 효율성' 대시보드에 필요한 속성입니다. 부서별로 데이터를 나누어 분석하면 근무 시간표 승인이 반복적으로 늦어져 전체 급여 처리가 지연되는 사업 부문을 파악할 수 있습니다. 중요한 이유 관리자 승인과 관련된 지연의 근본 원인을 분석할 수 있습니다. 확보 방법 급여 처리 시점에 유효한 직원 배정 레코드에서 가져옵니다. 예시 북미 영업엔지니어링인사물류 | |||
| 수동 수정 여부 IsManualCorrection | 활동에 수동 개입이 있었는지 나타내는 표시입니다. | ||
| 설명 '데이터 수정 수행' 또는 '급여 레코드 수정'과 같은 활동에 대해 true로 설정되는 불리언 값입니다. '수동 데이터 수정률'과 '급여 1차 처리 정확도' KPI를 계산하는 데 사용합니다. 중요한 이유 자동 처리와 수동 재작업을 구분합니다. 확보 방법 활동 이름 또는 조정 작업을 나타내는 특정 작업 유형(예: QuickPay, 잔액 조정)에서 가져옵니다. 예시 truefalse | |||
| 처리 사용자 ProcessingUser | 활동을 수행한 사람의 사용자 ID 또는 이름입니다. | ||
| 설명 활동을 시작한 급여 담당자, 관리자 또는 시스템 계정을 기록합니다. '급여 담당자 업무량 분포' 대시보드에서 활용합니다. 급여 팀의 리소스 병목과 교육 필요성을 파악하는 데 도움이 됩니다. 중요한 이유 리소스 생산성을 분석하고 업무량을 균형 있게 배분할 수 있습니다. 확보 방법 트랜잭션 테이블의 CREATED_BY 또는 LAST_UPDATED_BY 열입니다. 예시 시스템 관리자j.smithpayroll_batch_userm.doe | |||
| 총 급여액 GrossPayAmount | 해당 기간에 계산된 총 세전 급여액입니다. | ||
| 설명 급여 처리 주기 동안 계산된 세전 급여의 금액입니다. '세금 및 복리후생 계산 정확도'와 '인센티브 연계' 분석에 사용합니다. 고액 지급 건과 처리 시간 또는 오류율의 연관성을 분석할 수 있습니다. 중요한 이유 process mining 분석에 재무 정보를 제공합니다. 확보 방법 PAY_RUN_RESULT_VALUES 테이블에서 Gross Pay 잔액을 집계한 값입니다. 예시 5000.002350.5010000.00 | |||
| SLA 상태 SlaStatus | SLA 준수 여부를 나타내는 범주형 상태입니다(준수/미준수). | ||
| 설명 'Payment Executed' 타임스탬프와 'SLA Processing Deadline'을 비교해 산출합니다. 값은 '기한 내', '위험', '기한 초과' 등이 될 수 있습니다. 케이스를 성과 구간별로 묶어 'SLA 마감 준수 모니터' 보고서를 간소화합니다. 중요한 이유 복잡한 시간 비교 결과를 실행 가능한 범주로 정리합니다. 확보 방법 이벤트 타임스탬프와 SLA 기한을 비교하는 계산 로직. 예시 준수기한 초과기한 임박 | |||
| 감사 예외 유형 AuditExceptionType | 감사 중 표시된 오류 또는 경고의 유형입니다. | ||
| 설명 '감사 예외 표시' 활동에서 발견된 문제를 분류합니다(예: '순급여 마이너스', '세금 ID 누락'). 이 속성을 사용하면 '감사 예외 및 수정 분석' 대시보드에서 자주 발생하는 데이터 품질 문제를 파악할 수 있습니다. 중요한 이유 재작업이 반복되는 원인을 분석하는 데 중요합니다. 확보 방법 급여 프로세스 로그 또는 예외 보고서의 Message 또는 Error Code 열입니다. 예시 순급여 마이너스SSN 누락은행 정보 오류초과 근무 한도 초과 | |||
| 미리보기 반복 횟수 PreviewIterationCount | 최종 확정 전에 결과를 미리 본 횟수입니다. | ||
| 설명 같은 케이스에서 '급여 결과 미리보기' 활동이 발생할 때마다 증가하는 횟수입니다. '급여 미리보기 반복 추적' 대시보드의 직접 측정값으로, 승인 전에 발생한 재작업이나 검토 지연 정도를 보여줍니다. 중요한 이유 검증 단계의 효율성을 수치로 나타냅니다. 확보 방법 데이터 변환 중 Case ID별 특정 활동 발생 횟수를 세어 계산합니다. 예시 1350 | |||
| 세금 관할 지역 TaxJurisdiction | 세금 신고에 적용되는 주, 도 또는 지방 관할 지역입니다. | ||
| 설명 급여 레코드에 적용되는 주요 세무 당국을 나타냅니다(예: 캘리포니아의 'CA', 뉴욕의 'NY'). '세금 규정 준수 처리 기간' 대시보드에서 활용합니다. 특정 지역의 세금 계산 및 신고 절차가 더 복잡하거나 오래 걸리는지 파악할 수 있습니다. 중요한 이유 규제 복잡도에 따라 성과를 구분해 분석합니다. 확보 방법 직원의 세금 카드 또는 근무지 주소에서 가져옵니다. 예시 CA-캘리포니아NY-뉴욕TX-텍사스미국 연방 | |||
| 소급 변경 여부 RetroactiveChangeFlag | 급여 처리에 소급 지급이 포함되는지 나타냅니다. | ||
| 설명 해당 레코드에서 'Retropay' 항목을 처리하면 true로 설정되는 불리언 값입니다. '프로세스 경로 변형 비교'에서 처리 시간이 길어지거나 감사 예외가 발생하는 이유를 설명하는 데 도움이 됩니다. 소급 변경은 이전 기간에 걸친 복잡한 재계산을 유발하는 경우가 많습니다. 중요한 이유 처리 시간이 더 필요한 복잡한 케이스를 식별합니다. 확보 방법 PAY_ELEMENT_ENTRIES에 'Retropay' 항목이 있는지 확인합니다. 예시 truefalse | |||
| 직원 유형 EmployeeType | 직원 분류입니다(예: 월급제, 시급제, 계약직). | ||
| 설명 직원 레코드를 분류합니다. 직원 유형에 따라 처리 규칙이나 긴급도가 다를 수 있으므로 '전자 급여명세서 게시 지연' 대시보드에 필요한 속성입니다. 인력 유형별로 프로세스 성과를 비교하도록 분석 결과를 필터링할 수 있습니다. 중요한 이유 직원 유형에 따라 프로세스 경로가 다른 경우가 많습니다. 확보 방법 PER_ALL_ASSIGNMENTS_M의 배정 범주 또는 고용 조건입니다. 예시 정규직 월급제시간제 시급제계약직임원 | |||
급여 처리 활동
| 활동 | 설명 | ||
|---|---|---|---|
| 급여 계산 시작 | 특정 급여 정의와 기간에 대한 기본 급여 처리 실행을 시작하는 단계입니다. 데이터 수집이 처리 단계로 전환되는 시점을 나타냅니다. | ||
| 중요한 이유 집중 처리 구간의 시작 시점을 설정합니다. 기술적인 급여 처리의 전체 주기를 계산하는 데 사용됩니다. 확보 방법 PAY_PAYROLL_ACTIONS 테이블에서 ACTION_TYPE이 R(Run) 또는 Q(QuickPay)이고 ACTION_STATUS가 시작됨으로 표시된 기록을 조회합니다. 생성일을 기준으로 시작 시점을 추정할 수도 있습니다. 기록 PAY_PAYROLL_ACTIONS 레코드가 삽입될 때 기록 이벤트 유형 explicit | |||
| 급여 계산 실행 완료 | 총액에서 실수령액까지 계산하는 Calculate Payroll 프로세스가 성공적으로 완료된 상태입니다. 직원 배정에 대한 급여, 공제액, 세금 계산이 끝났음을 나타냅니다. | ||
| 중요한 이유 데이터 검증을 시작할 수 있음을 나타내는 주요 단계입니다. 이 단계에 시간이 오래 걸리면 시스템 성능 문제나 복잡한 Fast Formula가 원인일 수 있습니다. 확보 방법 PAY_PAYROLL_REL_ACTIONS를 PAY_PAYROLL_ACTIONS와 조인해 ACTION_TYPE이 R 또는 Q이고 ACTION_STATUS가 C(Complete)로 변경된 기록을 조회합니다. 기록 Payroll Run 작업 상태가 Complete로 변경될 때 기록 이벤트 유형 explicit | |||
| 선지급액 계산 | 직원이 선택한 지급 방법(수표, EFT 등)에 따라 실수령액을 배분하는 Prepayments 프로세스의 실행입니다. 계산된 금액을 실제로 지급할 수 있는지 확인합니다. | ||
| 중요한 이유 계산과 지급을 연결하는 단계입니다. 이 단계에서 실패하면 은행 정보가 누락되었거나 지급 방법이 유효하지 않은 경우가 많습니다. 확보 방법 PAY_PAYROLL_ACTIONS에서 ACTION_TYPE이 P(Prepayments)이고 상태가 Complete인 기록을 조회합니다. 기록 Prepayments 작업이 완료될 때 기록 이벤트 유형 explicit | |||
| 은행 이체 파일 생성 | EFT(Electronic Funds Transfer) 파일 또는 이에 해당하는 지급 파일을 생성하는 단계입니다. 은행에 전달할 지시 파일을 만드는 기술적 절차입니다. | ||
| 중요한 이유 지급 파일 생성 주기를 측정합니다. 이 단계가 지연되면 은행 업무 마감 시간을 놓칠 수 있습니다. 확보 방법 PAY_PAYROLL_ACTIONS에서 ACTION_TYPE이 M(Magnetic Tape), E(EFT) 또는 C(Check Writer)인 기록을 조회합니다. 기록 EFT 또는 Check 작업이 완료될 때 기록 이벤트 유형 explicit | |||
| 지급 완료 | 지급 처리가 완료되었음을 최종 확인하는 단계입니다. Oracle에서는 지급 흐름 완료 또는 Cash Management의 대사 완료에 해당합니다. | ||
| 중요한 이유 SLA 준수 여부를 판단하는 주요 타임스탬프입니다. 직원에게 급여가 제때 지급되었는지 확인하는 데 사용됩니다. 확보 방법 Bank Transfer 작업의 Effective Date로 추정하거나 Cash Management 대사 로그(CE_STATEMENT_LINES)에서 직접 확인할 수 있습니다. 기록 지급 작업의 효력 발생일 또는 대사 이벤트를 통해 기록 이벤트 유형 explicit | |||
| QuickPay 실행 | 일반적으로 수정 사항을 확인하기 위해 실행하는 1인 급여 처리(QuickPay)입니다. Payroll Result Previewed 활동을 대신 나타내는 지표로 사용됩니다. | ||
| 중요한 이유 직원별 QuickPay 실행 횟수가 잦다면 체계적인 급여 처리보다 시행착오에 의존하고 있음을 나타냅니다. 확보 방법 PAY_PAYROLL_ACTIONS에서 ACTION_TYPE이 Q(QuickPay)인 기록을 조회합니다. 직원별, 급여 기간별 실행 횟수를 계산합니다. 기록 PAY_PAYROLL_ACTIONS에 QuickPay 작업이 기록될 때 기록 이벤트 유형 explicit | |||
| 감사 예외 표시 | 급여 계산 또는 검증 단계에서 오류나 경고 메시지가 기록되는 이벤트입니다. 담당자의 조치가 필요한 구체적인 검증 실패를 포착합니다. | ||
| 중요한 이유 데이터 품질 문제를 파악하는 데 중요합니다. 예외가 많으면 수작업이 늘고 SLA를 위반할 위험이 커집니다. 확보 방법 특정 PAY_PAYROLL_REL_ACTION_ID와 연결된 PAY_MESSAGE_LINES 테이블을 조회합니다. 이 테이블에는 처리 중 발생한 오류와 경고가 저장됩니다. 기록 PAY_MESSAGE_LINES에 레코드가 삽입될 때 기록 이벤트 유형 explicit | |||
| 근무 시간표 승인 | 제출된 근무 시간 데이터를 관리자가 검토하고 승인한 상태입니다. 상태가 변경되면 데이터가 급여 요소 항목으로 전달됩니다. | ||
| 중요한 이유 관리자 승인 소요 시간을 측정하는 데 중요합니다. 이 단계의 지연은 이후 기간에 소급 급여 조정이 발생하는 주요 원인입니다. 확보 방법 HWM_TM_REC_GRP_DTLS 테이블 또는 HXT_TIMECARDS 뷰에서 상태가 APPROVED로 변경된 기록을 조회합니다. 승인 타임스탬프와 제출 타임스탬프를 비교합니다. 기록 Time and Labor에서 상태가 APPROVED로 변경될 때 기록 이벤트 유형 explicit | |||
| 근무 시간표 제출 | 직원이나 관리자가 처리할 근무 시간 및 노동 데이터를 제출하는 최초 이벤트입니다. Oracle HCM의 Time and Labor 모듈에서 근무 시간표 상태가 Submitted로 변경될 때 기록됩니다. | ||
| 중요한 이유 급여 처리 후보 데이터가 입력되는 시점입니다. 이 단계가 지연되면 이후 단계에도 영향이 이어져 급여 담당자가 계산 결과를 검증할 시간이 줄어듭니다. 확보 방법 HWM_TM_REC_GRP_DTLS 테이블 또는 HXT_TIMECARDS 뷰에서 상태가 SUBMITTED로 변경된 기록을 조회합니다. 제출 타임스탬프를 사용합니다. 기록 Time and Labor에서 상태가 SUBMITTED로 변경될 때 기록 이벤트 유형 explicit | |||
| 급여 기록 수정 | 최초 급여 처리 후 최종 확정 전에 급여 요소 항목이나 직원 배정 데이터를 수동으로 수정하는 단계입니다. 오류나 예외를 해결하기 위한 재작업을 나타냅니다. | ||
| 중요한 이유 프로세스 비효율과 데이터 품질 문제를 나타냅니다. 이 작업을 줄이면 최초 급여 처리 정확도를 높일 수 있습니다. 확보 방법 최초 Payroll Run 날짜와 Prepayments 날짜 사이에 Last Update Date가 있는 PAY_ELEMENT_ENTRIES_F 업데이트를 찾아 추정합니다. 기록 요소 항목 업데이트 타임스탬프와 급여 처리 타임스탬프 비교 이벤트 유형 inferred | |||
| 급여 명세서 게시 | 직원이 Self Service에서 급여 명세서를 확인할 수 있게 되는 시점입니다. Archiver 이후, 경우에 따라 별도의 'Generate Payslip' 프로세스가 진행된 뒤에 발생합니다. | ||
| 중요한 이유 직원 만족도에 영향을 줍니다. 지급 후 급여 명세서를 확인할 수 있을 때까지 오래 걸리면 지원 요청이 늘어납니다. 확보 방법 Documents of Record 테이블(HR_DOCUMENTS_OF_RECORD)을 조회하거나 PAY_PAYROLL_ACTIONS에서 Generate Payslip 프로세스의 완료 여부를 확인합니다. 기록 급여 명세서 PDF 생성 프로세스가 완료될 때 기록 이벤트 유형 explicit | |||
| 급여 처리 승인 | Payroll Dashboard에서 급여 대장 또는 흐름을 공식 승인하는 단계입니다. 일반적으로 검증 보고서를 검토한 뒤 은행 파일을 생성하기 전에 진행합니다. | ||
| 중요한 이유 관리자의 최종 승인을 나타냅니다. 계산 완료부터 승인까지의 시간은 검증에 걸린 시간을 의미합니다. 확보 방법 정의된 Payroll Flow Pattern에서 PAY_REQ_FLOW_INSTANCES의 상태 변경 또는 특정 작업 완료 기록을 조회합니다. 기록 Flow Instance 상태가 Completed 또는 Approved로 변경될 때 기록 이벤트 유형 explicit | |||
| 보관 결과 생성 | Archive Periodic Payroll Results 프로세스가 완료되는 단계입니다. 이 스냅샷으로 보고서와 급여 명세서 생성에 사용할 데이터가 사실상 확정됩니다. | ||
| 중요한 이유 급여 명세서와 법정 보고서를 생성하기 위한 기술적 선행 단계입니다. 데이터가 확정되었음을 확인합니다. 확보 방법 PAY_PAYROLL_ACTIONS에서 ACTION_TYPE이 X(Archive)이고 상태가 Complete인 기록을 조회합니다. 기록 Archive 작업이 완료될 때 기록 이벤트 유형 explicit | |||
| 세금 신고 완료 | 법정 세금 파일(예: 제3자 분기별 세금 파일)을 생성하는 단계입니다. 해당 급여 기간의 규정 준수를 지원합니다. | ||
| 중요한 이유 세금 규정 준수 처리 기간 KPI를 측정하는 데 중요합니다. 실패하면 과태료가 부과될 수 있습니다. 확보 방법 세금 보고와 관련된 특정 입법 데이터 그룹 작업(예: 미국 제3자 세금 신고)을 PAY_PAYROLL_ACTIONS에서 조회합니다. 기록 특정 세금 보고 흐름이 완료될 때 기록 이벤트 유형 explicit | |||
| 원가 회계 데이터 전송 | 급여 원가 계산 결과를 General Ledger로 전송하는 단계입니다. 급여 주기의 재무 회계 처리를 마무리합니다. | ||
| 중요한 이유 재무 규정 준수와 인건비의 정확한 계상을 지원합니다. 지연되면 재무팀의 장부 마감이 늦어집니다. 확보 방법 PAY_PAYROLL_ACTIONS에서 ACTION_TYPE이 T(Transfer to GL)이고 상태가 Complete인 기록을 조회합니다. 기록 Transfer to GL 프로세스가 완료될 때 기록 이벤트 유형 explicit | |||
| 인센티브 데이터 가져오기 | 배치 로더 또는 HDL 가져오기를 통해 보너스나 수수료 같은 변동 급여의 요소 항목을 생성하는 단계입니다. 외부 보상 데이터가 급여 처리에 연동되는 것을 나타냅니다. | ||
| 중요한 이유 변동 급여 데이터의 연동 속도를 모니터링합니다. 가져오기가 늦어지면 추가 급여 처리를 하거나 수동으로 수정해야 하는 경우가 많습니다. 확보 방법 PAY_BATCH_HEADERS에서 가져오기 완료 여부를 조회하거나, 특정 소스 시스템 참조가 있는 PAY_ELEMENT_ENTRIES_F의 생성 기록을 추적합니다. 기록 배치 요소 항목 처리가 성공적으로 완료될 때 기록 이벤트 유형 explicit | |||
데이터 추출 안내
단계
Data Exchange에 액세스: 'Human Capital Management Integration Specialist' 역할이 있는 사용자로 Oracle HCM Cloud에 로그인합니다. My Client Groups > Data Exchange > Extract Definitions로 이동합니다.
새 추출 생성: '+' 아이콘을 클릭해 새 추출을 만듭니다. 이름을 'ProcessMind_Payroll_Extract'로 지정합니다. 소비자로 'Payroll', 범주로 'HR Archive'를 선택해 과거 급여 작업 데이터에 액세스할 수 있도록 합니다.
데이터 그룹 정의: User Entity
PAY_PAYROLL_REL_UE(Payroll Relationship)를 기준으로 Root Data Group을 만듭니다. 이렇게 하면 추출 범위가 직원의 급여 관계에 연결됩니다. 하위 데이터 그룹으로PAY_ACTION_INFORMATION_UE,PAY_ELEMENT_ENTRY_UE,HWM_MEASURE_DAY_V_UE(근태 및 근로 시간용)를 만듭니다.추출 레코드 구성: 데이터 그룹 안에서 계층형 데이터를 평탄화할 레코드를 정의합니다. 각 활동 유형에 맞는 레코드를 만들어야 합니다(예: 'Time Card' 이벤트를 필터링하는 레코드와 'Run Results' 레코드).
FastFormula 또는 BIP로 SQL 로직 구현: 계층형 급여 데이터를 선형 이벤트 로그로 변환하는 작업은 복잡하므로, 'Extract Delivery Option'에서 BI Publisher Report를 호출하는 방법을 권장합니다. 이렇게 하면 아래 'Query' 섹션의 SQL을 Data Model로 사용할 수 있습니다. 통합 이벤트 로그를 만들 때는 기본 GUI 필터링보다 이 방법이 적합합니다.
BI Publisher Data Model 생성: Tools > Reports and Analytics > Browse Catalog로 이동합니다. 새 Data Model을 만들고 아래 SQL 쿼리를 붙여 넣습니다.
bind_start_date와bind_end_date매개변수를 정의합니다.추출을 BIP에 연결: Extract Definition의 'Delivery' 탭에서 전송 옵션을 만듭니다. 출력 유형으로 'PDF' 또는 'XML'을 선택합니다(ProcessMind는 CSV를 권장하지만 BIP 출력을 변환해야 합니다). 이전 단계에서 만든 BI Publisher 보고서를 선택합니다.
매개변수 정의: Extract Execution Tree에서 시작일과 종료일 매개변수를 추가해 BI Publisher 쿼리에 동적으로 전달합니다.
검증 및 제출: 추출 정의를 검증해 오류가 있는지 확인합니다. 'Submit Extract'를 클릭하고 매개변수(예: 최근 90일)를 입력합니다.
프로세스 모니터링: 'View Extract Results'로 이동합니다. 상태가 'Succeeded'로 바뀔 때까지 기다립니다.
출력 다운로드: 생성된 XML/CSV 파일을 다운로드합니다. 파일을 열어 PayrollRecord, ActivityName, EventTimestamp 등의 필수 열이 포함되어 있는지 확인합니다.
ProcessMind에 맞게 형식 변환: 출력이 XML이면 'Attributes to include' 요구사항에 맞는 헤더를 사용해 일반 CSV 파일로 변환합니다. 변환한 파일을 ProcessMind에 업로드합니다.
구성
- 추출 모드: 변경분만 추출 또는 전체 추출. 최초 적재에는 전체 추출을 사용합니다. 일일 업데이트에는 Last Update Date를 기준으로 'Changes Only'를 설정합니다.
- Legislative Data Group (LDG): 인스턴스에서 여러 국가를 지원한다면 LDG로 필터링하는 것이 좋습니다. 급여 정의는 국가별 법규에 따라 다릅니다.
- 날짜 범위: process mining에서 전체 처리 주기를 파악할 수 있도록
bind_start_date와bind_end_date를 최소 3~6개월 범위로 설정합니다. - 청크 크기: 대량 급여 데이터(직원 10,000명 이상)의 경우 시간 초과 오류를 방지하려면 Extract Definition에서 청크 크기를 2000으로 설정합니다.
- 유효 날짜 처리: 급여 테이블은 날짜에 따라 유효한 기록이 달라집니다. 쿼리 로직은 올바른 과거 기록을 가져오도록
effective_start_date와effective_end_date를 처리합니다. - 보안: 실행 사용자에게는 분석 대상인 모든 급여와 부서를 조회할 수 있는 데이터 보안 프로필이 있어야 합니다.
샘플 쿼리 sql
/* Oracle HCM Cloud Payroll Extraction for ProcessMind */
/* Aggregating 16 specific activities into a unified Event Log */
SELECT
/* Attributes */
rel.person_number || '-' || ppa.payroll_action_id AS PayrollRecord,
'Time Card Submitted' AS ActivityName,
TO_CHAR(htr.creation_date, 'YYYY-MM-DD HH24:MI:SS') AS EventTimestamp,
'Oracle HCM Time and Labor' AS SourceSystem,
TO_CHAR(htr.last_update_date, 'YYYY-MM-DD HH24:MI:SS') AS LastDataUpdate,
pap.name AS PayrollPeriodName,
org.name AS DepartmentName,
NULL AS GrossPayAmount
FROM hwm_tm_rec htr
JOIN hwm_tm_rec_grp htrg ON htr.tm_rec_grp_id = htrg.tm_rec_grp_id
JOIN per_all_people_f rel ON htrg.person_id = rel.person_id
LEFT JOIN pay_all_payrolls_f pap ON htrg.payroll_id = pap.payroll_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id /* Adjust mapping */
WHERE htr.latest_version_flag = 'Y'
AND htr.tm_rec_status = 'SUBMITTED'
AND htr.creation_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Time Card Approved',
TO_CHAR(htr.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Time and Labor',
TO_CHAR(htr.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM hwm_tm_rec htr
JOIN hwm_tm_rec_grp htrg ON htr.tm_rec_grp_id = htrg.tm_rec_grp_id
JOIN per_all_people_f rel ON htrg.person_id = rel.person_id
LEFT JOIN pay_all_payrolls_f pap ON htrg.payroll_id = pap.payroll_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE htr.latest_version_flag = 'Y'
AND htr.tm_rec_status = 'APPROVED'
AND htr.last_update_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || pee.element_entry_id,
'Incentive Data Imported',
TO_CHAR(pee.creation_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pee.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
NULL,
org.name,
NULL
FROM pay_element_entries_f pee
JOIN pay_element_types_f pet ON pee.element_type_id = pet.element_type_id
JOIN per_all_assignments_m asg ON pee.assignment_id = asg.assignment_id
JOIN per_all_people_f rel ON asg.person_id = rel.person_id
LEFT JOIN per_departments org ON asg.organization_id = org.organization_id
WHERE pet.classification_name IN ('Supplemental Earnings', 'Voluntary Deductions')
AND pee.creator_type IN ('H', 'F') /* HDL or Flat File */
AND pee.creation_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Payroll Calculation Started',
TO_CHAR(ppa.creation_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(ppa.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_actions ppa
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN pay_payroll_rel_actions pra ON ppa.payroll_action_id = pra.payroll_action_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id /* Simplified Join */
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type IN ('R', 'Q') /* Run or QuickPay */
AND ppa.creation_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Payroll Calculation Executed',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
(SELECT SUM(prrv.result_value) FROM pay_run_result_values prrv JOIN pay_run_results prr ON prrv.run_result_id = prr.run_result_id WHERE prr.payroll_rel_action_id = pra.payroll_rel_action_id) AS GrossPayAmount
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type IN ('R', 'Q')
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Audit Exception Flagged',
TO_CHAR(pml.creation_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pml.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_message_lines pml
JOIN pay_payroll_rel_actions pra ON pml.source_id = pra.payroll_rel_action_id
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE pml.message_level IN ('F', 'E') /* Fatal or Error */
AND pml.creation_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Payroll Record Corrected',
TO_CHAR(pee.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pee.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_element_entries_f pee
JOIN pay_payroll_rel_actions pra ON pee.creator_id = pra.payroll_rel_action_id
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE pee.last_update_date > pee.creation_date
AND pee.last_update_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'QuickPay Executed',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type = 'Q'
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Prepayments Calculated',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type = 'P' /* Distribution */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Payroll Run Approved',
TO_CHAR(pfi.action_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pfi.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_flow_instances pfi
JOIN pay_payroll_actions ppa ON pfi.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN pay_payroll_rel_actions pra ON ppa.payroll_action_id = pra.payroll_action_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE pfi.status = 'COMPLETED'
AND pfi.instance_name LIKE '%Approval%'
AND pfi.action_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Archive Results Generated',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type = 'X' /* Archive */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Bank Transfer Generated',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
(SELECT SUM(ppp.value) FROM pay_pre_payments ppp WHERE ppp.payroll_action_id = ppa.payroll_action_id) AS GrossPayAmount
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type IN ('M', 'E') /* Mag Tape or EFT */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Payment Executed',
TO_CHAR(ppp.base_currency_value, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(ppa.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
ppp.value AS GrossPayAmount
FROM pay_pre_payments ppp
JOIN pay_payroll_actions ppa ON ppp.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN pay_payroll_rel_actions pra ON ppa.payroll_action_id = pra.payroll_action_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type IN ('H', 'E', 'M') /* Check or EFT */
AND ppa.effective_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Pay Slip Published',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type = 'G' /* Generate Payslip */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Costing Transferred',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type = 'T' /* Transfer to GL */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Tax Filing Completed',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.report_category IN ('Tax', 'Regulatory') /* Customize based on local requirements */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date 단계
- Oracle BI Publisher에 로그인: Oracle Cloud 환경에 액세스한 뒤 Tools > Reports and Analytics로 이동합니다. Browse Catalog를 클릭해 BI Publisher 인터페이스를 엽니다.
- Data Model 생성: 왼쪽 위의 New를 클릭하고 Data Model을 선택합니다. 이곳에 SQL 추출 로직을 구성합니다.
- SQL Data Set 생성: Diagram 탭에서 New Data Set 아이콘을 클릭하고 SQL Query를 선택합니다.
- 데이터 소스 구성: 데이터 세트 이름을 지정합니다(예:
ProcessMind_Payroll_Extract). Data Source를ApplicationDB_HCM또는 해당 HCM Application Database 연결로 설정합니다. 유형은 Standard SQL로 둡니다. - 쿼리 입력: 아래 Query 섹션의 전체 SQL 스크립트를 복사해 SQL Query 입력란에 붙여 넣습니다. Markdown 서식은 포함하지 마세요.
- 매개변수 정의: 쿼리는 바인드 변수
:p_start_date와:p_end_date를 사용합니다. Data Model의 Parameters 탭에서 추출 기간을 필터링할 두 매개변수를 Date 유형으로 만듭니다(예:ppa.EFFECTIVE_DATE기준). - 데이터 구조 검증: OK를 클릭한 다음 Data Model 편집기에서 Data 탭으로 이동합니다. 예시 날짜(예:
2023-01-01부터2023-03-31까지)를 입력하고 View를 클릭합니다. 결과에PayrollRecord,ActivityName,EventTimestamp가 포함되어 있는지 확인합니다. - Data Model 저장: 공유 폴더(예:
/Shared Folders/Custom/ProcessMining)에 모델을 저장합니다. - 내보내기용 보고서 생성: Create Report를 클릭하고 방금 저장한 Data Model을 선택합니다. Report Wizard에서 모든 열을 포함하는 간단한 표 레이아웃을 만듭니다. 'Show Grand Totals' 선택을 해제합니다.
- CSV로 내보내기: Report Viewer에서 보고서를 엽니다. Actions 메뉴(톱니바퀴 아이콘) > Export > Data > CSV를 클릭합니다.
- 변환: CSV를 엽니다. 날짜 형식이 자동으로 지정되지 않았다면 ISO 8601(
YYYY-MM-DD HH:MM:SS) 형식으로 맞춥니다. SQL을 올바르게 붙여 넣었다면 추가 변환은 필요하지 않습니다. - 업로드: 생성된 CSV 파일을 ProcessMind로 가져오고 Data Requirements에 정의된 대로 열을 매핑합니다.
구성
- 데이터 소스 연결:
PAY_및PER_스키마에 대한 읽기 권한이 있는ApplicationDB_HCM또는 이에 상응하는 JNDI 데이터 소스를 사용해야 합니다. - 날짜 범위: 전체 급여 주기를 파악하려면 3~6개월 범위로 추출하는 것이 좋습니다.
:p_start_date및:p_end_date매개변수로 동적 적재 범위를 지정합니다. - Legislative Data Group (LDG): 기본적으로 쿼리는 모든 LDG에서 데이터를 추출합니다. 여러 국가에서 운영한다면 데이터를 구분하기 위해
AND ppa.LEGISLATIVE_DATA_GROUP_ID = [Your_LDG_ID]필터를 추가하는 것이 좋습니다. - 성능: 쿼리는 대용량 테이블(
PAY_RUN_RESULTS,PAY_ASSIGNMENT_ACTIONS)을 조회합니다. BI Publisher 시간 초과를 방지하려면 날짜 범위를 지나치게 넓게(예: 1년 초과) 설정하지 마세요. - 보안: 보고서를 실행하는 사용자에게는 대상 급여 정의에 대한 Data Access Set 권한이 필요합니다.
샘플 쿼리 sql
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Time Card Submitted' AS ActivityName,
peef.CREATION_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
peef.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME AS LegislativeDataGroup,
org.NAME AS DepartmentName,
peef.LAST_UPDATED_BY AS ProcessingUser,
NULL AS GrossPayAmount,
ptp.PERIOD_NAME AS PayrollPeriodName,
NULL AS SlaProcessingDeadline,
'N' AS IsManualCorrection,
pg.PAYROLL_NAME AS PayGroup,
NULL AS ProcessDurationDays
FROM PAY_ELEMENT_ENTRIES_F peef
JOIN PER_ALL_ASSIGNMENTS_M paam ON peef.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND peef.EFFECTIVE_START_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND peef.EFFECTIVE_START_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PAY_PAY_RELATIONSHIPS_DN pprd ON paam.PAYROLL_RELATIONSHIP_ID = pprd.PAYROLL_RELATIONSHIP_ID
JOIN PER_TIME_PERIODS ptp ON pprd.PAYROLL_ID = ptp.PAYROLL_ID
AND peef.EFFECTIVE_START_DATE BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON pprd.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON pprd.PAYROLL_ID = pg.PAYROLL_ID
WHERE peef.CREATOR_TYPE = 'H'
AND peef.CREATION_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Time Card Approved' AS ActivityName,
peef.EFFECTIVE_START_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
peef.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
peef.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_ELEMENT_ENTRIES_F peef
JOIN PER_ALL_ASSIGNMENTS_M paam ON peef.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND peef.EFFECTIVE_START_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND peef.EFFECTIVE_START_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PAY_PAY_RELATIONSHIPS_DN pprd ON paam.PAYROLL_RELATIONSHIP_ID = pprd.PAYROLL_RELATIONSHIP_ID
JOIN PER_TIME_PERIODS ptp ON pprd.PAYROLL_ID = ptp.PAYROLL_ID
AND peef.EFFECTIVE_START_DATE BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON pprd.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON pprd.PAYROLL_ID = pg.PAYROLL_ID
WHERE peef.CREATOR_TYPE = 'H'
AND peef.EFFECTIVE_START_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Incentive Data Imported' AS ActivityName,
peef.CREATION_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
peef.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
peef.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_ELEMENT_ENTRIES_F peef
JOIN PER_ALL_ASSIGNMENTS_M paam ON peef.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND peef.EFFECTIVE_START_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND peef.EFFECTIVE_START_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PAY_PAY_RELATIONSHIPS_DN pprd ON paam.PAYROLL_RELATIONSHIP_ID = pprd.PAYROLL_RELATIONSHIP_ID
JOIN PER_TIME_PERIODS ptp ON pprd.PAYROLL_ID = ptp.PAYROLL_ID
AND peef.EFFECTIVE_START_DATE BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON pprd.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON pprd.PAYROLL_ID = pg.PAYROLL_ID
WHERE peef.CREATOR_TYPE IN ('B', 'F')
AND peef.CREATION_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
CASE
WHEN ppa.ACTION_TYPE = 'R' AND paa.ACTION_STATUS = 'C' THEN 'Payroll Calculation Executed'
WHEN ppa.ACTION_TYPE = 'R' THEN 'Payroll Calculation Started'
WHEN ppa.ACTION_TYPE = 'Q' THEN 'QuickPay Executed'
WHEN ppa.ACTION_TYPE IN ('P', 'U') THEN 'Prepayments Calculated'
WHEN ppa.ACTION_TYPE = 'X' THEN 'Archive Results Generated'
WHEN ppa.ACTION_TYPE = 'M' THEN 'Bank Transfer Generated'
WHEN ppa.ACTION_TYPE IN ('Z', 'E') THEN 'Payment Executed'
WHEN ppa.ACTION_TYPE = 'T' THEN 'Costing Transferred'
ELSE 'Payroll Process Action'
END AS ActivityName,
ppa.CREATION_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
paa.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
ppa.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
ptp.REGULAR_PAYMENT_DATE AS SlaProcessingDeadline,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_PAYROLL_ACTIONS ppa
JOIN PAY_ASSIGNMENT_ACTIONS paa ON ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
JOIN PER_ALL_ASSIGNMENTS_M paam ON paa.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND ppa.EFFECTIVE_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND ppa.EFFECTIVE_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PER_TIME_PERIODS ptp ON ppa.PAYROLL_ID = ptp.PAYROLL_ID
AND ppa.DATE_EARNED BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON ppa.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON ppa.PAYROLL_ID = pg.PAYROLL_ID
WHERE ppa.ACTION_TYPE IN ('R', 'Q', 'P', 'U', 'X', 'M', 'Z', 'E', 'T')
AND ppa.EFFECTIVE_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Audit Exception Flagged' AS ActivityName,
pml.CREATION_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
pml.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
pml.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'Y',
pg.PAYROLL_NAME,
NULL
FROM PAY_MESSAGE_LINES pml
JOIN PAY_PAYROLL_ACTIONS ppa ON pml.PAYROLL_ACTION_ID = ppa.PAYROLL_ACTION_ID
LEFT JOIN PAY_ASSIGNMENT_ACTIONS paa ON ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
JOIN PER_ALL_ASSIGNMENTS_M paam ON paa.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND ppa.EFFECTIVE_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND ppa.EFFECTIVE_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PER_TIME_PERIODS ptp ON ppa.PAYROLL_ID = ptp.PAYROLL_ID
AND ppa.DATE_EARNED BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON ppa.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON ppa.PAYROLL_ID = pg.PAYROLL_ID
WHERE pml.MESSAGE_LEVEL IN ('E', 'W')
AND pml.CREATION_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Payroll Record Corrected' AS ActivityName,
peef.LAST_UPDATE_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
peef.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
peef.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'Y',
pg.PAYROLL_NAME,
NULL
FROM PAY_ELEMENT_ENTRIES_F peef
JOIN PER_ALL_ASSIGNMENTS_M paam ON peef.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND peef.EFFECTIVE_START_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND peef.EFFECTIVE_START_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PAY_PAY_RELATIONSHIPS_DN pprd ON paam.PAYROLL_RELATIONSHIP_ID = pprd.PAYROLL_RELATIONSHIP_ID
JOIN PER_TIME_PERIODS ptp ON pprd.PAYROLL_ID = ptp.PAYROLL_ID
AND peef.EFFECTIVE_START_DATE BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON pprd.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON pprd.PAYROLL_ID = pg.PAYROLL_ID
WHERE peef.LAST_UPDATE_DATE > peef.CREATION_DATE
AND peef.LAST_UPDATE_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Payroll Run Approved' AS ActivityName,
ppa.LAST_UPDATE_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
ppa.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
ppa.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_PAYROLL_ACTIONS ppa
JOIN PAY_ASSIGNMENT_ACTIONS paa ON ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
JOIN PER_ALL_ASSIGNMENTS_M paam ON paa.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND ppa.EFFECTIVE_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND ppa.EFFECTIVE_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PER_TIME_PERIODS ptp ON ppa.PAYROLL_ID = ptp.PAYROLL_ID
AND ppa.DATE_EARNED BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON ppa.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON ppa.PAYROLL_ID = pg.PAYROLL_ID
WHERE ppa.ACTION_TYPE = 'R'
AND paa.ACTION_STATUS = 'C'
AND ppa.EFFECTIVE_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Pay Slip Published' AS ActivityName,
(ppa.CREATION_DATE + 1) AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
ppa.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
ppa.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_PAYROLL_ACTIONS ppa
JOIN PAY_ASSIGNMENT_ACTIONS paa ON ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
JOIN PER_ALL_ASSIGNMENTS_M paam ON paa.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND ppa.EFFECTIVE_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND ppa.EFFECTIVE_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PER_TIME_PERIODS ptp ON ppa.PAYROLL_ID = ptp.PAYROLL_ID
AND ppa.DATE_EARNED BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON ppa.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON ppa.PAYROLL_ID = pg.PAYROLL_ID
WHERE ppa.ACTION_TYPE = 'X'
AND ppa.EFFECTIVE_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Tax Filing Completed' AS ActivityName,
ppa.CREATION_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
ppa.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
ppa.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_PAYROLL_ACTIONS ppa
JOIN PAY_ASSIGNMENT_ACTIONS paa ON ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
JOIN PER_ALL_ASSIGNMENTS_M paam ON paa.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND ppa.EFFECTIVE_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND ppa.EFFECTIVE_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PER_TIME_PERIODS ptp ON ppa.PAYROLL_ID = ptp.PAYROLL_ID
AND ppa.DATE_EARNED BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON ppa.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON ppa.PAYROLL_ID = pg.PAYROLL_ID
WHERE ppa.ACTION_TYPE = 'Z'
AND ppa.CREATION_DATE BETWEEN :p_start_date AND :p_end_date 시작할 준비가 되셨나요?
이 데이터 템플릿을 활용해 급여 주기 전반을 파악하고 운영을 개선하세요. 자동화 효율을 높이고 정확한 보고 체계를 마련하는 첫걸음을 시작하세요.
지금 Oracle HCM 급여 처리 최적화하기
급여 처리 주기를 30% 단축하고 병목을 해소하세요.
신용카드가 필요하지 않습니다. 몇 분이면 설정할 수 있습니다.