주문부터 현금화까지: 청구 및 송장 발행 데이터 템플릿
주문부터 현금화까지: 청구 및 송장 발행 데이터 템플릿
- 수집 권장 속성
- 추적할 주요 활동
- NetSuite 데이터 추출 안내
주문부터 현금화까지: 청구 및 송장 발행 속성
| 이름 | 설명 | ||
|---|---|---|---|
| 송장 번호 InvoiceNumber | 각 송장 문서를 식별하는 고유 번호로, 청구 프로세스의 기본 케이스 식별자로 사용됩니다. | ||
| 설명 송장 번호는 청구 프로세스 분석의 기준이 됩니다. 각 송장이 생성된 시점부터 최종 마감까지 고유하게 식별하고, 승인, 발송, 결제 적용 등 관련 활동을 하나의 케이스로 묶습니다. process mining에서 송장 번호별 진행 과정을 분석하면 전체 청구 주기를 파악할 수 있습니다. 이를 통해 프로세스 변형, 병목, 표준 절차에서 벗어난 흐름을 찾아 현금 흐름과 운영 효율성을 개선하는 데 필요한 정보를 얻을 수 있습니다. 중요한 이유 각 송장의 전체 생애주기를 추적하고 청구 프로세스 전반을 재구성해 세부적인 성과 분석을 수행하는 데 필요합니다. 확보 방법 일반적으로 NetSuite의 송장 거래 레코드에서 'Transaction ID' 또는 이에 해당하는 고유 식별자 필드를 사용합니다. 예시 INV-0012345INV-0012346INV-0012347 | |||
| 이벤트 타임스탬프 EventTimestamp | 특정 활동이나 이벤트가 발생한 정확한 날짜와 시각입니다. | ||
| 설명 활동이 발생한 정확한 시점을 기록합니다. 이벤트를 시간순으로 정렬하고 시간 기반 분석을 수행하는 데 필요한 속성입니다. process mining에서는 이벤트 타임스탬프를 사용해 활동 간 주기 시간, 케이스 소요 시간, 대기 시간을 계산합니다. 병목을 찾고 SLA 기준으로 프로세스 성과를 측정하며 청구 프로세스의 시간 흐름을 파악하는 데 필요합니다. 예를 들어 송장 생성 주기 시간과 매출채권 회전일수(DSO)를 계산할 때 사용합니다. 중요한 이유 이벤트의 시간순서를 제공하므로 기간 기반 지표를 계산하고 병목을 찾아 시간에 따른 프로세스 성과를 분석할 수 있습니다. 확보 방법 NetSuite에서 각 송장 거래와 관련된 시스템 메모, 감사 기록 또는 'Date Created' 필드에서 타임스탬프를 확인할 수 있습니다. 예시 2023-10-26T10:00:00Z2023-10-27T14:30:00Z2023-11-15T09:05:00Z | |||
| 활동명 ActivityName | 송장 생애주기의 특정 시점에 발생한 업무 이벤트의 이름입니다. | ||
| 설명 활동명은 '송장 생성', '송장 승인', '고객 결제 수령'처럼 청구 프로세스의 특정 단계나 이벤트를 나타냅니다. 이러한 활동이 순서대로 이어져 프로세스 맵을 구성합니다. 활동의 순서와 빈도를 분석하는 것은 process mining의 기본입니다. 실제 프로세스 흐름을 시각화하고, 일반적이거나 드문 경로(변형)를 찾아내며, 재작업이나 비효율을 나타내는 반복 활동을 파악할 수 있습니다. 중요한 이유 프로세스 맵을 구성하고 송장이 거치는 여러 단계와 경로를 시각화해 분석하는 데 필요한 속성입니다. 확보 방법 NetSuite의 시스템 로그, 상태 변경 또는 송장 거래와 연결된 특정 이벤트 레코드에서 가져옵니다. 거래 상태 변경이나 관련 레코드 생성을 정의된 활동명에 매핑해야 하는 경우가 많습니다. 예시 송장 생성송장 승인고객 결제 수령송장 전액 결제 | |||
| 원천 시스템 SourceSystem | 데이터를 추출한 시스템입니다. | ||
| 설명 프로세스 데이터의 출처를 나타냅니다. 이 화면에서는 값이 'NetSuite'로 일관됩니다. 여러 ERP나 통합 시스템을 사용하는 조직의 분석에서는 데이터 계보와 거버넌스를 파악하는 데 중요한 속성입니다. 여러 플랫폼에 걸친 프로세스를 구분하고 분석 결과가 적절한 기록 시스템에 연결되도록 합니다. 중요한 이유 데이터 출처와 거버넌스를 파악하는 데 필요한 맥락을 제공합니다. 여러 시스템이 통합된 환경에서 특히 중요합니다. 확보 방법 데이터 추출 및 변환 과정에서 추가하는 고정값('NetSuite')입니다. 예시 NetSuite | |||
| 최근 데이터 업데이트 LastDataUpdate | 원천 시스템에서 데이터를 마지막으로 새로 고친 시각입니다. | ||
| 설명 데이터 세트가 마지막으로 업데이트된 시점을 기록합니다. process mining 분석 데이터의 최신성과 관련성을 판단하는 데 필요한 정보입니다. 분석가와 업무 담당자는 이 정보를 통해 분석 결과가 현재 운영 상태를 반영하는지 확인할 수 있습니다. 대시보드나 보고서에 필요한 메타데이터로, 데이터의 기준 시점을 명확히 해 실시간 데이터가 아닌 결과를 실시간으로 오해하지 않도록 합니다. 중요한 이유 데이터의 최신 상태를 알려주므로 분석 기준 시점과 결과의 관련성을 파악할 수 있습니다. 확보 방법 데이터 새로 고침 시 추출 도구나 파이프라인이 생성하고 기록하는 타임스탬프입니다. 예시 2024-05-21T02:00:00Z | |||
| 결제 기한 DueDate | 송장 대금을 결제해야 하는 날짜입니다. | ||
| 설명 결제 기한은 송장 날짜와 합의된 결제 조건을 기준으로 계산합니다. 고객이 연체로 처리되지 않도록 결제해야 하는 기한입니다. 이 속성은 매출채권을 모니터링하고 현금 흐름을 관리하는 데 필요합니다. 정시 결제율 KPI를 계산하고 고객의 결제 행태를 분석하는 기준이 됩니다. 결제 기한과 실제 결제일의 차이를 추적하면 상습 연체 고객을 찾고 채권 추심 전략의 효과를 평가할 수 있습니다. 중요한 이유 정시 결제 성과와 고객의 결제 행태를 측정하는 데 중요하며, 채권 추심과 현금 흐름 예측에 활용할 수 있습니다. 확보 방법 NetSuite의 송장 거래 레코드에 있는 'Due Date'(duedate) 필드에 해당합니다. 예시 2023-11-252023-11-262023-12-15 | |||
| 고객명 CustomerName | 송장을 발행한 고객의 이름입니다. | ||
| 설명 청구 대상인 법인이나 개인을 식별하고 청구 프로세스를 고객 관계 관리 업무와 연결합니다. 고객별로 청구 프로세스를 분석하면 특정 고객의 결제 행태, 분쟁 또는 송장 복잡성에서 나타나는 패턴을 찾을 수 있습니다. 이를 바탕으로 고객 세분화, 신용 한도 결정, 맞춤형 채권 추심 방식을 검토할 수 있습니다. 예를 들어 특정 고객의 송장에서 재작업이 반복되는지 확인할 수 있습니다. 중요한 이유 고객별 결제 패턴, 반복되는 문제, 프로세스 이탈을 파악하는 고객 중심 분석에 활용할 수 있습니다. 확보 방법 NetSuite의 송장 거래 레코드에 있는 'Customer' 또는 'Entity' 이름 필드에 해당합니다. 예시 Global Tech Inc.Innovate Solutions LLCCornerstone Corp | |||
| 사용자 User | 활동을 수행한 사용자의 이름 또는 ID입니다. | ||
| 설명 특정 프로세스 단계를 수행한 직원이나 시스템 사용자를 식별합니다. 송장을 생성하거나 승인하거나 결제를 적용한 사람이 여기에 해당할 수 있습니다. 사용자별로 프로세스를 분석하면 업무량 배분과 개인별 성과를 파악하고 교육이 필요한 부분을 찾을 수 있습니다. 수작업 활동을 수행하는 사용자가 누구인지 확인해 자동화 가능성을 살펴볼 수도 있습니다. 규정 준수와 감사 기록 분석에도 중요합니다. 중요한 이유 업무량 배분, 사용자별 성과, 프로세스 준수 여부를 분석할 수 있어 리소스 관리와 맞춤형 교육에 도움이 됩니다. 확보 방법 NetSuite의 System Notes 하위 탭이나 송장 및 관련 거래 레코드의 'Modified By' 필드에서 확인할 수 있습니다. 예시 Alice SmithBob JohnsonSYSTEM | |||
| 송장 날짜 InvoiceDate | 고객에게 발행한 송장의 공식 날짜입니다. | ||
| 설명 송장 날짜 또는 거래 날짜는 청구 관련 재무 계산의 기준이 됩니다. 일반적으로 이 날짜를 기준으로 결제 조건과 결제 기한을 계산합니다. 분석에서는 매출채권 회전일수(DSO), 송장 경과 기간 등 주요 재무 KPI를 계산하는 기준으로 사용합니다. 또한 코호트 분석을 통해 월별 또는 연도별 청구 성과를 비교할 수 있습니다. 중요한 이유 매출채권 회전일수(DSO)와 송장 경과 기간 등 주요 재무 지표의 기준이 되며, 운전자본 분석에 직접 영향을 줍니다. 확보 방법 NetSuite의 송장 거래 레코드에 있는 'Date'(trandate) 필드에 해당합니다. 예시 2023-10-262023-10-272023-11-15 | |||
| 송장 총액 InvoiceTotalAmount | 세금과 기타 비용을 포함한 송장의 총 금액입니다. | ||
| 설명 고객이 결제해야 하는 전체 금액으로, 각 청구 케이스의 기본 재무 데이터입니다. 송장 금액을 기준으로 프로세스를 분석하면 금액에 따른 차이를 파악할 수 있습니다. 예를 들어 고액 송장이 소액 송장보다 복잡한 절차를 거치는지 확인할 수 있습니다. 채권 추심의 우선순위를 정하고 결제 지연이나 송장 오류가 재무에 미치는 영향을 파악하는 데도 사용합니다. 중요한 이유 금액에 따른 프로세스 분석을 통해 고액 송장의 우선순위를 정하고 프로세스 비효율이 재무에 미치는 영향을 파악할 수 있습니다. 확보 방법 NetSuite의 송장 거래 레코드에 있는 'Total'(total) 필드에 해당합니다. 예시 1500.0089.9912500.50 | |||
| 이벤트 종료 시각 EventEndTime | 특정 활동이나 이벤트가 완료된 정확한 날짜와 시각입니다. | ||
| 설명 이벤트 종료 시각은 활동이 완료된 시점을 나타냅니다. 많은 활동은 순간적으로 끝나 시작 시각과 종료 시각이 같지만, 승인 단계처럼 측정 가능한 시간이 걸리는 활동도 있습니다. 이 속성을 이벤트 타임스탬프(시작 시각)와 함께 사용하면 활동 처리 시간을 직접 계산할 수 있습니다. 처리 시간을 분석하면 활동 사이의 대기 시간과 구분해 시간이 오래 걸리는 단계를 찾을 수 있습니다. 특정 작업의 비효율을 파악하는 데 중요합니다. 중요한 이유 각 활동을 완료하는 데 걸리는 시간을 정확히 계산할 수 있어 리소스 효율성을 분석하고 시간이 많이 드는 작업을 찾는 데 필요합니다. 확보 방법 시작 시각과 마찬가지로 NetSuite의 시스템 감사 기록에서 가져올 수 있습니다. '시작' 이벤트와 이에 대응하는 '종료' 이벤트를 연결하는 로직이 필요할 수 있습니다. 예시 2023-10-26T10:05:14Z2023-10-27T14:32:00Z2023-11-15T09:05:00Z | |||
| 자동화 여부 IsAutomated | 시스템이 활동을 자동으로 수행했는지 나타내는 플래그입니다. | ||
| 설명 이 불리언 속성은 사용자가 직접 수행한 활동과 시스템 workflow, 스크립트 또는 연동 기능이 자동으로 실행한 활동을 구분합니다. 이 속성은 청구 프로세스의 자동화 수준을 측정하는 데 중요하며, '자동 청구 비율' KPI 산출에 직접 활용됩니다. 자동 또는 수동 활동을 기준으로 필터링하면 분석 담당자가 수작업으로 인한 병목을 찾고, 자동화를 확대해 인적 오류를 줄이고 효율성을 높일 기회를 파악할 수 있습니다. 중요한 이유 프로세스의 자동화 수준을 측정하고 수작업을 줄여 효율성을 높일 기회를 찾는 데 도움이 됩니다. 확보 방법 일반적으로 활동에 연결된 'User'를 확인해 값을 산출합니다. 'SYSTEM', 'Workflow' 또는 'Integration'이라는 사용자가 발생시킨 이벤트는 자동화된 활동으로 표시합니다. 예시 truefalse | |||
| 지역 Region | 고객 또는 거래와 관련된 지리적 지역입니다. | ||
| 설명 지역 속성을 사용하면 고객 주소나 송장을 발행한 사업부를 기준으로 송장을 지역별로 분류할 수 있습니다. 지역별 비교 분석에 유용한 기준입니다. '지역별 청구 프로세스 비교' 대시보드는 이 속성을 사용해 주기 시간, 오류율, 프로세스 변형 등 KPI를 지역별로 비교합니다. 이를 통해 지역 간 성과 차이를 찾고 성과가 높은 지역의 모범 사례를 파악해 조직 전반의 프로세스를 표준화할 수 있습니다. 중요한 이유 지역별 성과 차이를 찾고 모범 사례를 표준화하는 데 필요한 지역 간 비교 분석을 지원합니다. 확보 방법 NetSuite의 고객 마스터나 거래 레코드에 있는 사용자 지정 세그먼트 또는 분류 필드에 저장되는 경우가 많습니다. 예시 북미유럽·중동·아프리카아시아·태평양 | |||
| 결제 조건 PaymentTerms | 회사와 고객이 합의한 결제 조건입니다. | ||
| 설명 결제 조건은 고객이 송장 대금을 언제, 어떻게 결제해야 하는지 정합니다. 예를 들어 'Net 30' 또는 '수령 즉시 결제'가 있습니다. 이 정보를 사용해 송장 결제 기한을 자동으로 계산합니다. 이 속성은 '결제 조건 준수' 대시보드에 중요합니다. 결제 조건별 정시 결제율을 분석하면 조건의 효과를 평가할 수 있습니다. 예를 들어 'Net 15' 조건의 고객이 'Net 30' 조건의 고객보다 빨리 결제하는지 확인해 향후 계약 협상과 신용 정책에 반영할 수 있습니다. 중요한 이유 결제 조건별 효과와 고객의 적시 결제에 미치는 영향을 분석하는 데 필요합니다. 확보 방법 NetSuite의 송장 거래 레코드에 있는 'Terms' 필드에 해당합니다. 예시 30일 이내 결제60일 이내 결제수령 즉시 결제 | |||
| 기한 내 결제 여부 IsOnTimePayment | 고객 결제가 송장 만기일 당일 또는 그 전에 접수되었는지 나타내는 플래그입니다. | ||
| 설명 이 계산된 불리언 플래그는 'Customer Payment Received' 활동의 타임스탬프와 송장의 'DueDate'를 비교합니다. 결제가 기한 내 또는 조기에 이루어졌으면 true, 늦게 이루어졌으면 false로 설정됩니다. 이 속성은 '기한 내 결제율' KPI와 '결제 조건 준수' 대시보드의 기반이 됩니다. 고객의 결제 행동을 명확한 이진 값으로 나타내 분석과 보고를 간소화합니다. 결제 시점의 추세를 빠르게 파악하고 수금 전략의 효과를 평가하는 데 도움이 됩니다. 중요한 이유 수금 성과를 명확하게 측정하며, 기한 내 결제율 KPI 산출과 고객 행동 분석에 직접 활용됩니다. 확보 방법 계산 속성입니다. 케이스 수준의 'DueDate' 속성과 결제 이벤트의 타임스탬프를 비교해야 합니다. 예시 truefalse | |||
| 매출채권 회수일수 DaysSalesOutstanding | 송장 발행일부터 결제 접수일까지의 일수입니다. | ||
| 설명 매출채권 회수일수(DSO)는 송장 발행 후 대금을 회수하는 데 걸리는 평균 일수를 나타내는 주요 재무 지표입니다. 세부 분석을 위해 송장별로 이 속성을 계산합니다. DSO는 보통 상위 수준의 KPI로 집계하지만, 송장별 값을 활용하면 더 세밀하게 분석할 수 있습니다. DSO가 높은 고객, 지역 또는 송장 유형을 찾을 수 있습니다. 'DSO 추세' 대시보드는 이 지표를 바탕으로 시간에 따른 수금 효율성을 시각화해 운전자본 관리에 필요한 정보를 제공합니다. 중요한 이유 송장별 수금 효율성을 수치화해 DSO가 높은 원인과 현금 흐름에 미치는 영향을 자세히 분석할 수 있습니다. 확보 방법 'Customer Payment Received' 활동의 타임스탬프에서 'InvoiceDate'를 빼서 계산합니다. 예시 294562 | |||
| 부서 Department | 송장과 관련된 내부 부서입니다. | ||
| 설명 이 속성은 거래를 담당하는 영업, 서비스 또는 특정 사업 부문과 같은 내부 부서를 나타냅니다. NetSuite에서 표준 분류 항목으로 사용됩니다. 부서별로 프로세스를 분석하면 내부 성과를 비교하고, 특정 부서의 청구 프로세스가 다른 부서보다 효율적인지 파악할 수 있습니다. 프로세스 준수나 리소스 배분의 차이를 확인해 조직 내 특정 부문을 대상으로 개선 과제를 수립하는 데 필요한 정보를 얻을 수 있습니다. 중요한 이유 부서별 프로세스 성과를 비교해 차이와 내부 프로세스 표준화 기회를 파악할 수 있습니다. 확보 방법 NetSuite Invoice 거래의 헤더 또는 항목 수준에서 설정할 수 있는 'Department' 분류 필드에 해당합니다. 예시 영업 - 기업 고객전문 서비스하드웨어 | |||
| 송장 상태 InvoiceStatus | 생애주기에서 송장이 현재 어떤 상태인지 나타냅니다. | ||
| 설명 'Open', 'Paid in Full', 'Voided' 등 송장의 현재 상태를 나타냅니다. 어느 시점에 송장이 프로세스의 어디에 있는지 보여줍니다. '미결 송장 상태 개요' 대시보드는 이 속성을 기반으로 합니다. 재무팀은 이를 통해 매출채권을 파악하고 미결제 잔액을 모니터링하며 채권 추심과 현금 유입을 예측할 수 있습니다. 최종 상태를 분석하면 프로세스 결과도 파악할 수 있습니다. 중요한 이유 매출채권의 현재 상태를 보여주므로 미결 송장과 전체 청구 진행 상황을 모니터링하는 대시보드를 구성할 수 있습니다. 확보 방법 NetSuite의 송장 거래 레코드에 있는 'Status' 필드에 해당합니다. 예시 미결전액 결제무효 처리됨승인 대기 | |||
| 재작업 여부 IsRework | 재작업 또는 수정 반복으로 분류되는 활동을 식별하는 계산 플래그입니다. | ||
| 설명 이 불리언 플래그는 'Invoice Corrected' 또는 동일 케이스에서 두 번째로 발생한 'Invoice Approved'와 같이 부가가치를 더하지 않는 재작업 활동에 true로 설정됩니다. 일반적으로 활동 이름이나 활동 반복 여부를 기준으로 산출합니다. 이 속성은 '송장 재작업 및 거부 분석' 대시보드와 '송장 오류율' KPI에 필수적입니다. 재작업 규모를 쉽게 측정해 프로세스 품질 문제를 파악할 수 있습니다. 재작업 활동을 필터링하면 팀에서 오류의 근본 원인을 신속하게 찾고 프로세스 개선의 효과를 측정할 수 있습니다. 중요한 이유 비효율적인 재작업 반복을 표시해 프로세스 품질을 직접 측정하고, 청구 오류의 근본 원인과 재무 영향을 분석할 수 있습니다. 확보 방법 데이터 변환 중 계산하는 파생 속성입니다. 특정 활동 이름('Invoice Corrected')이나 반복 활동을 표시하는 방식으로 재작업을 식별합니다. 예시 truefalse | |||
| 통화 Currency | 송장 금액의 통화 코드입니다. | ||
| 설명 송장 금액의 통화를 나타냅니다. 예를 들어 USD, EUR, GBP 등이 있습니다. 금액을 해석하는 데 필요한 정보입니다. 다국적 조직에서는 통화별 분석을 통해 여러 시장의 재무 성과를 파악할 수 있습니다. 금액을 올바르게 해석하고 필요한 경우 환산한 뒤 합산하거나 비교할 수 있습니다. 중요한 이유 모든 금액을 정확히 해석하는 데 필요한 정보로, 특히 여러 국가에서 운영하는 조직의 재무 보고와 분석에 중요합니다. 확보 방법 NetSuite의 송장 거래 레코드에 있는 'Currency' 필드에 해당합니다. 예시 USDEURGBP | |||
| 판매 주문 번호 SalesOrderNumber | 송장 생성의 근거가 된 판매 주문의 식별자입니다. | ||
| 설명 이 속성을 사용하면 원본 판매 주문을 직접 확인해 청구 프로세스를 앞선 판매 및 이행 프로세스와 연결할 수 있습니다. 판매 주문 번호를 포함하면 주문부터 현금 회수까지의 전체 주기를 더 폭넓게 파악할 수 있습니다. 청구 문제의 원인을 판매 프로세스까지 거슬러 올라가 분석할 수 있습니다. 예를 들어 송장 정정이 반복되는 원인이 특정 유형의 판매 주문에서 발생한 데이터 입력 오류인지 확인할 수 있습니다. 중요한 이유 청구 프로세스를 판매 프로세스와 연결해 주문부터 현금 회수까지 종단 간으로 분석하고 청구 문제의 근본 원인을 찾을 수 있습니다. 확보 방법 NetSuite의 Invoice 거래에서 'Created From' 필드 또는 'Related Records' 하위 탭에서 확인할 수 있습니다. 예시 SO-0009876SO-0009877SO-0009878 | |||
주문부터 현금화까지: 청구 및 송장 발행 활동
| 활동 | 설명 | ||
|---|---|---|---|
| 고객 결제 수령 | 고객의 결제를 받아 시스템에 기록한 상태입니다. NetSuite에서 'Customer Payment' 거래가 생성된 시점으로 확인하며, 하나 이상의 송장에 결제 금액이 적용될 수 있습니다. | ||
| 중요한 이유 현금을 수령한 시점을 나타내지만, 특정 송장에 적용된 시점과 반드시 일치하지는 않습니다. 현금 적용 프로세스의 첫 단계이며 DSO 계산에 중요한 이벤트입니다. 확보 방법 'Customer Payment' 거래 레코드의 생성일을 기준으로 확인합니다. 결제와 송장의 연결은 결제 레코드의 'Apply' 하위 탭에서 확인할 수 있습니다. 기록 'Customer Payment' 거래 레코드가 생성된 시점입니다. 이벤트 유형 explicit | |||
| 고객에게 송장 발송 | 일반적으로 이메일을 통해 송장을 고객에게 발송한 것을 나타냅니다. 사용자가 송장 레코드에서 'Email' 작업을 실행한 시점을 추적해 확인합니다. | ||
| 중요한 이유 고객의 결제 기간이 시작되는 시점이며, 매출채권 회전일수(DSO)를 계산할 때 주로 기준으로 삼습니다. 확보 방법 송장 레코드의 'Date Last Emailed' 필드가 입력된 것을 기준으로 추정합니다. 또는 Communication 하위 탭에 이메일 메시지 레코드가 생성된 시점으로 확인할 수 있습니다. 기록 'Date Last Emailed' 필드 입력 또는 커뮤니케이션 레코드 생성을 기준으로 추정합니다. 이벤트 유형 inferred | |||
| 송장 생성 | NetSuite에 송장 거래 기록이 공식적으로 생성된 시점을 나타냅니다. 각 송장 번호의 청구 프로세스가 시작되는 이벤트이며, 거래 기록의 생성 시각을 기준으로 확인합니다. | ||
| 중요한 이유 청구 프로세스의 주요 시작 이벤트입니다. 이 이벤트부터 다른 이벤트까지 걸린 시간을 분석하면 전체 프로세스 효율성을 파악할 수 있으며, 송장 생성 주기 시간 KPI의 기준이 됩니다. 확보 방법 송장 거래 기록의 'Date Created' 타임스탬프에서 확인합니다. NetSuite의 송장 시스템 메모에도 생성 이벤트와 생성한 사용자가 명시적으로 기록됩니다. 기록 송장 거래 기록이 생성될 때 기록되는 이벤트입니다. 이벤트 유형 explicit | |||
| 송장 승인 | 송인이 정식으로 승인되어 고객에게 보낼 준비가 된 상태입니다. 일반적으로 워크플로 작업을 통해 승인 상태가 'Pending Approval'에서 'Approved'로 변경될 때 확인합니다. | ||
| 중요한 이유 송장을 고객에게 보내기 전에 거쳐야 하는 주요 단계입니다. 승인 주기 시간을 측정하고 '자동 청구 비율' KPI를 계산하는 데 중요합니다. 확보 방법 송장 레코드의 'Approval Status' 필드가 'Approved'로 변경된 것을 기준으로 추정합니다. 정확한 변경 시각은 거래의 시스템 메모에 기록됩니다. 기록 시스템 메모에 기록된 'Approval Status' 필드의 'Approved' 변경을 기준으로 추정합니다. 이벤트 유형 inferred | |||
| 송장 전액 결제 | 송장 상태가 'Paid In Full'로 변경되어 잔액이 0이 된 상태입니다. 해당 송장의 청구 및 채권 추심 주기가 성공적으로 완료된 것을 나타냅니다. | ||
| 중요한 이유 프로세스가 성공적으로 완료되는 주요 종료 이벤트입니다. 이 상태에 도달하기까지 걸린 전체 시간을 분석하면 현금 전환 주기의 종단 간 주기 시간을 파악할 수 있습니다. 확보 방법 송장 레코드의 'Status' 필드가 'Paid In Full'로 변경된 것을 기준으로 추정합니다. 상태 변경 시각은 거래의 시스템 메모에서 확인할 수 있습니다. 기록 시스템 메모에 기록된 'Status' 필드의 'Paid In Full' 변경을 기준으로 추정합니다. 이벤트 유형 inferred | |||
| 결제 기한 도래 | 현재 날짜가 송장의 결제 기한과 일치할 때 발생하는 계산 이벤트입니다. 사용자나 시스템의 직접적인 작업에 해당하지 않으며, 분석 중 기존 데이터를 바탕으로 산출합니다. | ||
| 중요한 이유 결제 적시성을 측정하는 주요 기준입니다. '정시 결제율' KPI를 계산하고 고객의 결제 행태를 분석하는 데 필요합니다. 확보 방법 NetSuite에 명시적으로 기록되는 이벤트는 아닙니다. 이벤트 로그의 타임스탬프와 송장 거래 기록의 'Due Date' 필드를 비교해 계산합니다. 기록 이벤트 타임스탬프가 송장의 'Due Date' 필드와 일치할 때 계산합니다. 이벤트 유형 calculated | |||
| 결제 알림 발송 | 미결제 금액과 관련해 고객에게 안내를 보낸 상태입니다. 송장 또는 고객 레코드에서 기록된 활동이나 발송 이메일로 확인하며, 채권 추심 솔루션이 기록하는 경우가 많습니다. | ||
| 중요한 이유 채권 추심 전략의 효과를 평가하는 데 필요합니다. 이후 결제에 미친 영향을 분석하면 알림의 빈도와 시점을 최적화할 수 있습니다. 확보 방법 송장 또는 고객 레코드의 Communication > Messages 하위 탭에 이메일 레코드가 생성된 시점으로 확인합니다. 자동 채권 추심 솔루션은 사용자 지정 레코드나 작업으로 기록할 수도 있습니다. 기록 송장과 연결된 이메일 또는 활동 레코드로 기록됩니다. 이벤트 유형 explicit | |||
| 대변전표 생성 | 대변전표 거래가 생성되어 송장에 적용되고 미결제 잔액이 줄어든 상태입니다. 일반적으로 제품 반품, 서비스 불만 또는 가격 정정을 나타냅니다. | ||
| 중요한 이유 재작업, 품질 문제 또는 고객 분쟁을 보여줍니다. 자주 발생하면 근본적인 문제를 나타낼 수 있으며, '송장 재작업 및 거부 분석' 대시보드의 주요 분석 대상입니다. 확보 방법 대변전표 거래가 생성된 시점으로 확인합니다. 원본 송장과의 연결은 'Created From' 필드 또는 대변전표의 'Apply' 하위 탭에서 확인할 수 있습니다. 기록 원본 송장과 연결된 대변전표 레코드가 생성된 시점입니다. 이벤트 유형 explicit | |||
| 송장 마감 | 회계 기간 마감 절차의 일부로 송장 거래를 마감한 상태입니다. 거래 대금이 전액 결제되고 대사가 끝난 뒤에는 추가 변경을 막습니다. | ||
| 중요한 이유 'Paid In Full' 이후에 처리되는 경우가 많지만, 최종 행정 절차일 수 있습니다. 결제부터 마감까지의 지연을 분석하면 재무 보고의 적시성에 미치는 영향을 파악할 수 있습니다. 확보 방법 'Status' 필드가 'Closed' 또는 이에 해당하는 상태로 변경된 것을 기준으로 추정합니다. 변경 시각은 시스템 메모에서 확인할 수 있습니다. 기록 시스템 메모에 기록된 'Status' 필드 변경을 기준으로 추정합니다. 이벤트 유형 inferred | |||
| 송장 무효 처리 | 송장을 무효 처리해 취소하고 총계정원장에 미치는 영향을 되돌린 상태입니다. 일반적으로 결제 전에 잘못 생성된 송장에 적용합니다. | ||
| 중요한 이유 프로세스 예외이자 종료 상태입니다. 송장이 무효 처리된 이유를 파악하면 상위 단계에서 바로잡아야 할 데이터 입력 오류나 프로세스 문제를 찾을 수 있습니다. 확보 방법 사용자가 직접 수행하는 작업입니다. 송장 레코드의 시스템 메모에서 거래가 무효 처리된 시각과 처리한 사용자를 확인할 수 있습니다. 기록 송장의 시스템 메모에 명시적으로 기록된 'Void' 작업입니다. 이벤트 유형 explicit | |||
| 송장에 결제 적용 | 고객에게 받은 결제를 해당 송장에 적용해 미결제 금액을 줄인 상태입니다. Customer Payment 레코드에서 적용 내용을 저장할 때 기록됩니다. | ||
| 중요한 이유 현금 수령과 송장 결제를 연결하는 중요한 단계입니다. '결제 수령'부터 이 이벤트까지 걸린 시간이 '현금 적용 주기 시간' KPI가 됩니다. 확보 방법 Customer Payment 거래의 시스템 메모나 감사 기록에서 확인합니다. 특히 송장 항목에 결제 적용 내용을 저장한 시각이 중요합니다. 기록 송장에 결제를 적용한 Customer Payment 레코드를 저장할 때 기록됩니다. 이벤트 유형 explicit | |||
| 승인 요청된 송장 | 송장 상태가 'Pending Approval'로 변경된 것을 나타냅니다. 사용자가 송장을 설정된 승인 워크플로에 제출할 때 확인하며, 이는 일반적인 사용자 지정 설정입니다. | ||
| 중요한 이유 이 활동은 승인 지연으로 이어질 수 있는 병목이 시작되는 시점을 보여줍니다. 승인 대기 시간은 전체 송장 처리 주기 시간의 주요 구성 요소입니다. 확보 방법 송장 레코드의 'Approval Status' 필드가 'Pending Approval'로 변경된 것을 기준으로 추정합니다. 변경 시각은 송장의 시스템 메모 감사 기록에서 확인할 수 있습니다. 기록 시스템 메모에 기록된 'Approval Status' 필드 변경을 기준으로 추정합니다. 이벤트 유형 inferred | |||
데이터 추출 안내
단계
- NetSuite에 로그인: 거래 레코드에서 저장 검색을 만들고 실행할 수 있는 권한이 있는 역할로 NetSuite 계정에 접속합니다.
- 저장 검색으로 이동: Reports > Saved Searches > All Saved Searches > New로 이동합니다. 검색 유형 목록에서 'Transaction'을 선택합니다. 이벤트 유형별로 검색을 여러 개 만들 때 기본 검색 유형으로 사용합니다.
- 'Invoice Created' 검색 만들기: 송장 생성 기록을 가져오는 기본 검색입니다.
- 'Criteria' 탭의 'Standard'에서 'Type' 필터를 'is Invoice'로 설정합니다.
- 'Main Line' 필터를 추가하고 'is true'로 설정해 송장당 레코드 하나만 가져옵니다.
- 'Results' 탭에서 필요한 열을 추가합니다. 수식을 사용해 'ActivityName'과 같은 표준 필드를 만듭니다. 예를 들어 'Formula (Text)' 필드에
_UTF8'Invoice Created'수식을 입력합니다.
- 상태 변경 검색 만들기(승인, 결제, 무효화, 종료): 여러 활동은 상태 변경으로 기록됩니다. 정확한 타임스탬프를 가져오려면 System Notes를 사용하는 것이 가장 안정적입니다.
- 새 Transaction 저장 검색을 만듭니다.
- 'Criteria' 탭에서 'Type'을 'is Invoice'로 설정합니다.
- 'Standard' 하위 탭에서 'System Notes : Field' 필터를 추가하고 해당 상태 필드(예: 'Approval Status')를 선택합니다.
- 'System Notes : New Value' 필터를 추가하고 대상 상태(예: 'Approved')를 설정합니다.
- 'Results' 탭에서 'System Notes : Date'를
EventTimestamp에, 'System Notes : Set by'를User에 매핑합니다. - 필드와 값 필터를 조정해 'Invoice Submitted for Approval', 'Invoice Approved', 'Invoice Paid In Full', 'Invoice Voided', 'Invoice Closed' 등 상태 기반 활동별로 검색을 반복합니다.
- 'Invoice Sent to Customer' 검색 만들기: 일반적으로 송장 레코드에서 보낸 이메일을 추적해 이 이벤트를 기록합니다.
- 'Type'을 'is Invoice'로 설정해 새 Transaction 저장 검색을 만듭니다.
- 'Criteria' 탭의 'Related Records'에서 'Messages : Date Sent' 필터를 추가하고 'is not empty'로 설정합니다.
- 'Results' 탭에서 'Messages : Date Sent'를
EventTimestamp에, 'Messages : Author'를User에 매핑합니다.
- 결제 및 대변 메모 활동 검색 만들기: 송장과 연결된 별도의 거래 유형을 대상으로 합니다.
- 'Customer Payment Received'는 'Type'이 'Customer Payment'인 검색을 만듭니다. 생성일을 이벤트 타임스탬프로 기록합니다.
- 'Payment Applied To Invoice'는 같은 'Customer Payment' 검색을 사용하되 'Applied To Transaction' 필드를 연결합니다. 결제 거래의 'Date Created'를 타임스탬프로 사용합니다. 송장에 결제가 적용될 때마다 한 행이 생성됩니다.
- 'Credit Memo Created'는 'Type'이 'Credit Memo'인 검색을 만들고 'Created From' 필드로 원본 송장 번호를 연결합니다.
- 저장 검색 실행 및 내보내기: 만든 저장 검색을 각각 실행합니다. 결과 페이지에서 내보내기 아이콘(CSV, Excel 또는 PDF)을 클릭하고 CSV를 선택합니다. 결과가 NetSuite 내보내기 한도를 초과하면 여러 번 나누어 내보내야 할 수 있습니다.
- 데이터 통합 및 변환: 내보낸 CSV 파일을 Microsoft Excel, Python 스크립트 또는 데이터 준비 도구를 사용해 하나의 파일로 통합합니다.
- 'Payment Due Date Reached' 이벤트 산출: 통합 데이터 파일에서 각 'Invoice Created' 이벤트에 대해 새 행을 만듭니다.
ActivityName을 'Payment Due Date Reached'로 설정하고,EventTimestamp에는 송장의 'DueDate' 필드 값을 입력한 다음 관련 송장 속성을 복사합니다. - 이벤트 로그 마무리: 모든 열 머리글을 필수 스키마(예:
InvoiceNumber,ActivityName,EventTimestamp)에 맞춥니다. 타임스탬프 형식이 일관적인지 확인합니다. 이번 추출에 해당하는 고정값을 사용해SourceSystem및LastDataUpdate열을 추가합니다. 최종 통합 파일을 CSV로 저장해 업로드합니다.
구성
- 사전 요건: 'Transaction' 유형의 저장 검색을 만들고, 수정하고, 실행할 권한이 있는 사용자 역할이 필요합니다. Invoice, Customer Payment, Credit Memo 및 System Notes 레코드를 조회할 수 있어야 합니다.
- 검색 유형: 모든 추출에 기본으로 사용하는 검색 유형은 'Transaction'입니다. 이 유형으로 필요한 레코드와 관련 정보를 조회할 수 있습니다.
- 날짜 범위 필터링: 성능과 데이터량을 관리하려면 각 검색에 날짜 범위 필터를 적용합니다. 초기 분석에는 최근 3~6개월의 'Date Created' 필터를 권장합니다.
- Main Line 필터: 'Invoice Created'와 같이 문서 헤더 수준의 이벤트에는 'Main Line' 조건을 'true'로 설정합니다. 항목별 세부 정보를 분석할 때는 'false'로 설정하지만, 이 프로세스에서는 필요하지 않습니다.
- System Notes: 상태 변경을 가져오려면 System Notes가 중요합니다. NetSuite 설정(Setup > Company > Enable Features > SuiteCloud > SuiteAudit Trail)에서 'Status' 및 'Approval Status'와 같은 주요 거래 필드의 감사 기능이 활성화되어 있는지 확인합니다.
- 성능 고려 사항: 날짜 범위가 넓고 조인과 수식 필드가 많은 복잡한 검색은 NetSuite UI에서 실행하는 데 시간이 오래 걸릴 수 있습니다. 사용량이 적은 시간대에 검색을 실행하고 내보내는 것이 좋습니다. 검색 시간이 초과되면 날짜 범위를 줄이고 데이터를 더 작은 단위로 나누어 내보냅니다.
샘플 쿼리 sql
/*
This section describes the configuration for multiple NetSuite Saved Searches needed to generate the complete event log. Each block represents a separate Saved Search that must be created in the UI, exported, and then combined externally.
*/
-- Search 1: Invoice Created
Activity Name: 'Invoice Created'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Main Line is true
Results Columns (Mapped to Event Log Attributes):
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Created'
- EventTimestamp: Date Created
- User: Created By
- InvoiceDate: Date
- DueDate: Due Date
- InvoiceTotalAmount: Amount (Gross)
- CustomerName: Name
-- Search 2: Invoice Submitted for Approval
Activity Name: 'Invoice Submitted for Approval'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Approval Status
- System Notes : New Value is [Your 'Pending Approval' status]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Submitted for Approval'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 3: Invoice Approved
Activity Name: 'Invoice Approved'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Approval Status
- System Notes : New Value is [Your 'Approved' status]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Approved'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 4: Invoice Sent to Customer
Activity Name: 'Invoice Sent to Customer'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Messages : Date Sent is not empty
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Sent to Customer'
- EventTimestamp: Messages : Date Sent (use Maximum summary type if multiple)
- User: Messages : Author (use Maximum summary type)
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 5: Payment Reminder Issued
Activity Name: 'Payment Reminder Issued'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- User Notes : Note contains [Your dunning/reminder keyword]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Payment Reminder Issued'
- EventTimestamp: User Notes : Date
- User: User Notes : Author
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 6: Credit Memo Created
Activity Name: 'Credit Memo Created'
Saved Search Type: Transaction
Criteria:
- Type is Credit Memo
- Main Line is true
Results Columns:
- InvoiceNumber: Created From : Document Number
- ActivityName: Formula (Text) = 'Credit Memo Created'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 7: Customer Payment Received
Activity Name: 'Customer Payment Received'
Saved Search Type: Transaction
Criteria:
- Type is Customer Payment
- Main Line is true
Results Columns:
- InvoiceNumber: Applied to Transaction : Document Number
- ActivityName: Formula (Text) = 'Customer Payment Received'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
-- Search 8: Payment Applied To Invoice
Activity Name: 'Payment Applied To Invoice'
Saved Search Type: Transaction
Criteria:
- Type is Customer Payment
- Main Line is false
Results Columns:
- InvoiceNumber: Applied to Transaction : Document Number
- ActivityName: Formula (Text) = 'Payment Applied To Invoice'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
-- Search 9: Invoice Paid In Full
Activity Name: 'Invoice Paid In Full'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Status
- System Notes : New Value is Paid In Full
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Paid In Full'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 10: Invoice Voided
Activity Name: 'Invoice Voided'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Status is Invoice : Voided
- System Notes : Field is Status
- System Notes : New Value is Voided
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Voided'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
-- Search 11: Invoice Closed
Activity Name: 'Invoice Closed'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Status
- System Notes : New Value contains Closed
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Closed'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Event to be Derived Post-Extraction: Payment Due Date Reached
/*
This event is not extracted directly. After combining all other CSVs, create a new row for each unique invoice.
Set ActivityName to 'Payment Due Date Reached'.
Set EventTimestamp to the DueDate value from the 'Invoice Created' event for that invoice.
Copy other attributes like InvoiceNumber, CustomerName, etc.
*/ 단계
- 사전 요건: SuiteAnalytics Connect 활성화: NetSuite 인스턴스에 SuiteAnalytics Connect 모듈 라이선스가 있고 활성화되어 있는지 확인합니다. 일반적으로 NetSuite 관리자가 Setup > Company > Enable Features > Analytics에서 설정합니다.
- ODBC 드라이버 다운로드 및 설정: NetSuite 홈 대시보드에서 'Settings' 포틀릿을 찾아 'Set Up SuiteAnalytics Connect' 링크를 클릭하고 운영체제에 맞는 ODBC 드라이버를 다운로드합니다. NetSuite에서 제공하는 설치 안내에 따라 드라이버를 설치하고 서비스 호스트, 포트, Account ID, Role ID, 이메일 및 비밀번호를 입력해 설정합니다.
- 데이터베이스 연결: DBeaver, Tableau 또는 Power BI와 같이 ODBC 연결을 지원하는 SQL 클라이언트를 사용합니다. 이전 단계에서 설정한 드라이버로 새 ODBC 연결을 만들고, 연결을 테스트해 인증 및 NetSuite 읽기 전용 복제 데이터베이스 접속이 정상적으로 되는지 확인합니다.
- SQL 쿼리 준비: 이 문서의 'Query' 섹션에 있는 전체 SQL 쿼리를 복사합니다. 이 쿼리는 주문부터 현금화까지의 청구 프로세스에 필요한 모든 활동과 속성을 추출하도록 작성되었습니다.
- 쿼리 매개변수 설정: 실행 전에 쿼리의 자리표시자 값을 찾습니다. 추출 기간의 시작일과 종료일에 맞게
'YYYY-MM-DD'를 바꿉니다. 분석할 NetSuite 자회사의 내부 ID로[Your Subsidiary ID]도 바꿉니다. - 쿼리 실행: 수정한 쿼리를 SQL 클라이언트에서 실행합니다. 실행 시간은 날짜 범위와 NetSuite 계정의 거래량에 따라 달라집니다.
- 결과 검토: 쿼리가 완료되면 이벤트 로그를 나타내는 평면 테이블이 반환됩니다. 각 행은 송장 수명 주기의 특정 활동에 해당합니다. 데이터가 빠짐없고 정확한지 검토합니다.
- 이벤트 로그 내보내기: SQL 클라이언트에서 쿼리 결과를 CSV 파일로 내보냅니다. 문자 인코딩 문제를 방지하려면 UTF-8로 저장합니다.
- 업로드 준비: process mining 도구에 업로드하기 전에 열 머리글이 InvoiceNumber, ActivityName, EventTimestamp와 같은 필수 속성 이름과 일치하는지 확인합니다. 날짜와 시간 형식도 일관적인지 점검합니다.
구성
- SuiteAnalytics Connect 라이선스: NetSuite 읽기 전용 복제 데이터베이스에 접속하려면 SuiteAnalytics Connect 모듈의 유효한 라이선스가 필요합니다. 라이선스가 없으면 SQL로 직접 접속할 수 없습니다.
- 전용 역할 및 사용자: SuiteAnalytics Connect에 필요한 권한을 부여한 전용 NetSuite 역할을 만드는 것이 좋습니다. 이 역할에는 Transactions, Customers, System Notes 등 필요한 레코드에 대한 읽기 전용 권한을 부여해야 합니다. 보안과 감사 추적을 위해 추출 전용 사용자를 이 역할에 배정합니다.
- 날짜 범위 필터링: 제공된 쿼리에는 송장 생성일(
Transaction.TRANDATE)을 기준으로 하는WHERE절이 포함되어 있습니다. 초기 추출은 성능과 데이터량을 관리할 수 있도록 최근 3~6개월처럼 짧은 기간부터 시작하는 것이 좋습니다. 예:AND T.TRANDATE BETWEEN '2023-01-01' AND '2023-06-30'. - 자회사 필터링: 자회사가 여러 개인 계정에서는 성능과 데이터 관련성을 위해 특정 자회사를 필터링해야 합니다. 쿼리의 자리표시자
WHERE T.SUBSIDIARY_ID = [Your Subsidiary ID]를 실제 값으로 설정합니다. - 데이터 최신성: SuiteAnalytics Connect 데이터베이스는 읽기 전용 복제본입니다. 데이터는 보통 시간당 여러 차례 갱신되지만 실시간으로 반영되지는 않습니다. NetSuite에서 거래가 발생한 뒤 Connect 데이터베이스에 표시되기까지 몇 시간 정도 지연될 수 있습니다.
샘플 쿼리 sql
WITH Invoices AS (
SELECT
T.TRANSACTION_ID,
T.TRANID AS InvoiceNumber,
T.TRANDATE AS InvoiceDate,
T.DUEDATE AS DueDate,
T.FOREIGN_TOTAL AS InvoiceTotalAmount,
C.COMPANYNAME AS CustomerName,
BUILTIN.DF(C.LOCATION) AS Region,
T.CREATED_DATE AS InvoiceCreationDate,
CREATOR.FIRST_NAME || ' ' || CREATOR.LAST_NAME AS CreatorUser
FROM
TRANSACTIONS T
JOIN
CUSTOMERS C ON T.ENTITY_ID = C.CUSTOMER_ID
LEFT JOIN
EMPLOYEES CREATOR ON T.CREATED_BY_ID = CREATOR.EMPLOYEE_ID
WHERE
T.TRANSACTION_TYPE = 'Invoice'
AND T.TRANDATE BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD')
-- AND T.SUBSIDIARY_ID = [Your Subsidiary ID] -- Add your subsidiary filter if needed
)
-- 1. Invoice Created
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Invoice Created' AS "ActivityName",
I.InvoiceCreationDate AS "EventTimestamp",
I.InvoiceCreationDate AS "EventEndTime",
I.CreatorUser AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN I.CreatorUser LIKE '%System%' THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
UNION ALL
-- 2. Invoice Submitted for Approval & 3. Invoice Approved
SELECT
I.InvoiceNumber AS "InvoiceNumber",
CASE WHEN SN.NEW_VALUE = 'Pending Approval' THEN 'Invoice Submitted for Approval' ELSE 'Invoice Approved' END AS "ActivityName",
SN.DATE_CREATED AS "EventTimestamp",
SN.DATE_CREATED AS "EventEndTime",
SN_AUTHOR.FIRST_NAME || ' ' || SN_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN SN.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
SYSTEM_NOTES SN ON I.TRANSACTION_ID = SN.TRANSACTION_ID
LEFT JOIN
EMPLOYEES SN_AUTHOR ON SN.AUTHOR_ID = SN_AUTHOR.EMPLOYEE_ID
WHERE
SN.FIELD = 'TRANSACTION.APPROVALSTATUS' AND SN.NEW_VALUE IN ('Pending Approval', 'Approved')
UNION ALL
-- 4. Invoice Sent to Customer
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Invoice Sent to Customer' AS "ActivityName",
M.MESSAGE_DATE AS "EventTimestamp",
M.MESSAGE_DATE AS "EventEndTime",
MSG_AUTHOR.FIRST_NAME || ' ' || MSG_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
MESSAGES M ON I.TRANSACTION_ID = M.TRANSACTION_ID
LEFT JOIN
EMPLOYEES MSG_AUTHOR ON M.AUTHOR_ID = MSG_AUTHOR.EMPLOYEE_ID
WHERE
M.INCOMING = 'F' -- Indicates an outgoing message
UNION ALL
-- 5. Payment Due Date Reached
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Payment Due Date Reached' AS "ActivityName",
I.DueDate AS "EventTimestamp",
I.DueDate AS "EventEndTime",
'System' AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
1 AS "IsAutomated"
FROM
Invoices I
WHERE
I.DueDate IS NOT NULL AND I.DueDate < SYSDATE
UNION ALL
-- 6. Payment Reminder Issued (based on Messages table, requires a specific subject line convention)
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Payment Reminder Issued' AS "ActivityName",
M.MESSAGE_DATE AS "EventTimestamp",
M.MESSAGE_DATE AS "EventEndTime",
MSG_AUTHOR.FIRST_NAME || ' ' || MSG_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN M.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
MESSAGES M ON I.TRANSACTION_ID = M.TRANSACTION_ID
LEFT JOIN
EMPLOYEES MSG_AUTHOR ON M.AUTHOR_ID = MSG_AUTHOR.EMPLOYEE_ID
WHERE
M.INCOMING = 'F' AND UPPER(M.SUBJECT) LIKE '%PAYMENT REMINDER%'
UNION ALL
-- 7. Credit Memo Created & Applied
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Credit Memo Created' AS "ActivityName",
CM.CREATED_DATE AS "EventTimestamp",
CM.CREATED_DATE AS "EventEndTime",
CM_CREATOR.FIRST_NAME || ' ' || CM_CREATOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
TRANSACTION_LINES T_LINES ON I.TRANSACTION_ID = T_LINES.APPLIED_TO_TRANSACTION_ID
JOIN
TRANSACTIONS CM ON T_LINES.TRANSACTION_ID = CM.TRANSACTION_ID
LEFT JOIN
EMPLOYEES CM_CREATOR ON CM.CREATED_BY_ID = CM_CREATOR.EMPLOYEE_ID
WHERE
CM.TRANSACTION_TYPE = 'Credit Memo'
UNION ALL
-- 8. Customer Payment Received & 9. Payment Applied to Invoice
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Customer Payment Received' AS "ActivityName", -- Can also create a separate 'Payment Applied' event if needed
PAYMENT.CREATED_DATE AS "EventTimestamp",
PAYMENT.CREATED_DATE AS "EventEndTime",
PMT_CREATOR.FIRST_NAME || ' ' || PMT_CREATOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
TRANSACTION_LINES T_LINES ON I.TRANSACTION_ID = T_LINES.APPLIED_TO_TRANSACTION_ID
JOIN
TRANSACTIONS PAYMENT ON T_LINES.TRANSACTION_ID = PAYMENT.TRANSACTION_ID
LEFT JOIN
EMPLOYEES PMT_CREATOR ON PAYMENT.CREATED_BY_ID = PMT_CREATOR.EMPLOYEE_ID
WHERE
PAYMENT.TRANSACTION_TYPE = 'Customer Payment'
UNION ALL
-- 10. Invoice Paid In Full, 11. Invoice Voided, 12. Invoice Closed
SELECT
I.InvoiceNumber AS "InvoiceNumber",
CASE
WHEN SN.NEW_VALUE_ID = 'Invoice:B' THEN 'Invoice Paid In Full' -- 'B' is status 'Paid In Full'
WHEN SN.FIELD = 'TRANSACTION.VOIDED' AND SN.NEW_VALUE = 'T' THEN 'Invoice Voided'
WHEN SN.FIELD = 'TRANSACTION.CLOSED' AND SN.NEW_VALUE = 'T' THEN 'Invoice Closed'
END AS "ActivityName",
SN.DATE_CREATED AS "EventTimestamp",
SN.DATE_CREATED AS "EventEndTime",
SN_AUTHOR.FIRST_NAME || ' ' || SN_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN SN.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
SYSTEM_NOTES SN ON I.TRANSACTION_ID = SN.TRANSACTION_ID
LEFT JOIN
EMPLOYEES SN_AUTHOR ON SN.AUTHOR_ID = SN_AUTHOR.EMPLOYEE_ID
WHERE
(SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE_ID = 'Invoice:B')
OR (SN.FIELD = 'TRANSACTION.VOIDED' AND SN.NEW_VALUE = 'T')
OR (SN.FIELD = 'TRANSACTION.CLOSED' AND SN.NEW_VALUE = 'T'); 시작할 준비가 되셨나요?
이 템플릿으로 process mining을 시작하고 청구 및 송장 발행 운영에 관한 정보를 확인하세요. 지금 주문부터 현금화까지의 프로세스를 최적화해 보세요.
NetSuite 청구 및 송장 발행 프로세스를 개선해 현금 흐름을 앞당기세요
NetSuite 청구 주기를 30% 단축하고 현금 흐름을 개선하세요.
신용카드가 필요하지 않습니다. 몇 분이면 설정할 수 있습니다.