あなたの買掛金``支払い``処理``データ``テンプレート
あなたの買掛金``支払い``処理``データ``テンプレート
- Sage Intacctにとって不可欠なデータフィールド
- 標準化された`プロセス``マイルストーン`
- 特定の抽出指示
買掛金支払処理の属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 請求書`ライフサイクル`で`発生`する`特定`の`アクション`または`イベント`です。 | ||
| 説明 この その重要性 プロセスマップのステップを定義し、あらゆるプロセスマイニング分析に必須です。 取得元 監査証跡ログまたはシステム取引履歴テーブル 例 請求書ドラフト作成請求書承認済み支払い生成済み | |||
| イベントのタイムスタンプ EventTime | `アクティビティ`が`発生`した`特定`の`日付`と`時刻`です。 | ||
| 説明 この その重要性
取得元
例 2023-10-12T08:30:00Z2023-10-12T14:45:12Z2023-10-15T09:15:00Z | |||
| 請求書番号 InvoiceNumber | ベンダー請求書`文書`の`一意`の`識別子`です。 | ||
| 説明 請求書番号は、この その重要性 すべてのプロセス活動を単一のケースインスタンスにリンクするための基本的な鍵です。 取得元 Sage Intacct AP Bill 例 INV-2023-001988722-AFEB-23-991 | |||
| ソースシステム SourceSystem | `イベント`が`発生`した`システム`の`名前`です。 | ||
| 説明 この その重要性 特に複数システム環境において、データリネージの追跡可能性を保証します。 取得元 抽出中にハードコードされるか、接続設定から派生 例 Sage IntacctBill.comExpensify | |||
| 最終データ更新 LastDataUpdate | `レコード`が`最後`に`抽出`または`更新`された`タイムスタンプ`です。 | ||
| 説明 この その重要性
取得元
例 2023-11-01T12:00:00Z2023-11-02T01:00:00Z | |||
| 仕入先名 VendorName | 請求書を発行する`サプライヤー`または`サービスプロバイダー`の`名前`です。 | ||
| 説明 この その重要性 サプライヤーのパフォーマンスと行動による分析セグメンテーションに不可欠です。 取得元 Sage Intacct AP Bill 例 アクメ株式会社Global Services IncOffice Depot | |||
| 作成ユーザー CreatedBy | 請求書を`入力`した`担当者`の`ユーザーID`です。 | ||
| 説明 この その重要性 リソースのパフォーマンス分析を可能にし、トレーニング機会を特定します。 取得元 Sage Intacct AP Bill 例 jsmithap_automation_botmdoe | |||
| 支払日 PaymentDate | 支払いが実行された`日付`です。 | ||
| 説明 この その重要性 コアプロセスサイクルの完了を示します。 取得元 Sage Intacct AP Payment Detail、 例 2023-11-052023-11-10 | |||
| 支払期日 DueDate | 支払いに関する`契約上`の`期限`です。 | ||
| 説明 この その重要性 期限内履行とSLA遵守を判断するためのベースライン。 取得元 Sage Intacct AP Bill 例 2023-11-012023-11-15 | |||
| 発注書番号 PurchaseOrderNumber | 関連する`注文書`の`参照番号`です。 | ||
| 説明 この その重要性 コンプライアンス分析のために、POに基づく請求書とPOに基づかない請求書を区別します。 取得元 Sage Intacct AP Bill 例 PO-9912PO-1002null | |||
| 請求日 InvoiceDate | 仕入先が請求書を発行した日付。 | ||
| 説明 この その重要性
取得元 Sage Intacct AP Bill 例 2023-10-012023-10-05 | |||
| 請求書ステータス InvoiceStatus | `システム`内の請求書の現在の`ライフサイクル``状態`です。 | ||
| 説明 この その重要性
取得元 Sage Intacct AP Bill 例 転記済み支払い済み下書き一部支払い済み | |||
| 請求金額 InvoiceAmount | 請求書の合計金額。 | ||
| 説明 この その重要性 財務影響分析とリスクスコアリングに不可欠です。 取得元 Sage Intacct AP Bill 例 1500.00250.5010000.00 | |||
| 部署 Department | `経費`を担当する`内部``部署`です。 | ||
| 説明 この その重要性 組織レベルでのドリルダウンと根本原因分析を可能にします。 取得元 Sage Intacct AP Bill 例 ITサービスマーケティング運用 | |||
| POによる裏付けあり IsPOBacked | 請求書が購買発注書に関連付けられているかを示すフラグ。 | ||
| 説明 この その重要性 プロセスパス分析における主要な差別化要因。 取得元 計算済み: 購買発注番号がnullではない 例 truefalse | |||
| サイクルタイム(日数) CycleTimeDays | 請求書受領から支払いまでの`日数`です。 | ||
| 説明 この その重要性 効率性の標準的な 取得元 計算済み: 請求書日付と支払日付の間の日数 例 15.530.05.2 | |||
| ビジネスユニット BusinessUnit | 請求書に関連付けられた`法人`または`場所`です。 | ||
| 説明 この その重要性 複数エンティティのベンチマークに不可欠です。 取得元 Sage Intacct AP Bill 例 USA-HQEMEA-LondonAPAC-Singapore | |||
| 保留ステータス HoldStatus | 請求書が現在支払い保留中であるかどうかを示します。 | ||
| 説明 この その重要性 介入が必要な即時のボトルネックを特定します。 取得元 Sage Intacct AP Bill 例 truefalse | |||
| 支払い遅延 IsPaidLate | 支払日が期日を超過したかどうかを示すフラグ。 | ||
| 説明 この その重要性 SLA違反の 取得元 計算済み: 支払日付 > 期日 例 truefalse | |||
| 支払条件 PaymentTerms | 支払い時期と割引に関する合意された`条件`です。 | ||
| 説明 この その重要性 キャッシュフロー戦略と失われた割引機会を分析するためのコンテキスト。 取得元 Sage Intacct AP Bill 例 支払条件:正味30日受領時支払い2/10 Net 30 | |||
買掛金支払処理活動
| アクティビティ | 説明 | ||
|---|---|---|---|
| `請求書提出済み` | 請求書が`下書き状態`から`提出済み状態`に`移行`し、`承認``ワークフロー`を`トリガー`することです。これは`データ`入力の`終了`と`承認``サイクル`の`開始`を示します。 | ||
| その重要性 サイクルタイム分析における「データ入力」期間と「承認」期間を分離するために不可欠です。 取得元 APBILL監査証跡で、ステータスフィールドが「ドラフト」から「提出済み」または「承認待ち」に変わったことから推測します。 取得 ステータスフィールドを前後で比較 イベントタイプ inferred | |||
| 支払い生成済み | 請求書に`リンク`された支払い(`小切手`、`ACH`、`EFT`)`レコード`の`作成`です。これは、`システム`で`資金移動`が`開始`される`瞬間`です。 | ||
| その重要性 「平均請求書 取得元 APBILLにリンクされたAPPYMTレコードの作成を特定します。支払いオブジェクトの作成日を使用します。 取得 APPYMTレコードが作成されたときに記録されます イベントタイプ explicit | |||
| 請求書ドラフト作成 | Sage IntacctでのAP請求書`レコード`の`初期``作成`で、通常は`下書き状態`です。これにより、`承認`または`転記``ワークフロー`に入る前の請求書`データ`の`入力点`が捕捉されます。 | ||
| その重要性 プロセスサイクルタイムの最も早いタイムスタンプを確立し、負債記録の開始を特定します。 取得元 AP請求書 取得 APBILLレコードが最初に作成されたときに記録されます イベントタイプ explicit | |||
| 請求書をPOと照合済み | 購買発注書または受領書を変換またはリンクすることでベンダー請求書が作成された時期を特定します。この活動は三者照合の効率性を検証します。 | ||
| その重要性 「初回通過照合率」KPIにとって重要であり、PO準拠と非PO支出の比較を判断します。 取得元 購買取引へのリンクを示す 'createdfrom' または 'source_id' フィールドの非null値をAPBILLオブジェクトで確認します。 取得 レコードIDとソース取引IDを比較 イベントタイプ inferred | |||
| 請求書仕訳計上済み | 請求書が`一般会計`に`計上`される`時点`です。`承認``ワークフロー`がない`システム`では、`提出`と`同時`にこれが行われる場合があります。 | ||
| その重要性 会計帳簿で財務負債が正式に認識されていることを示します。 取得元 「転記済み」への状態変更について、AP請求書 取得 取引がGLに記帳されたときに記録されます イベントタイプ explicit | |||
| 請求書承認済み | 指定された承認ワークフロー内で記録された個別の承認アクション。これにより、十分な権限を持つユーザーが請求書の支払いを承認したことを示します。 | ||
| その重要性 「平均承認期間」KPIにとって重要であり、経営層の承認におけるボトルネックを特定します。 取得元 AP請求書に関連付けられた「承認履歴の確認」ログを照会し、「承認」 取得 承認アクションが実行されたときに記録されます イベントタイプ explicit | |||
| 支払い対象請求書の選択 | 請求書を支払い`バッチ`または`選択``実行`に`含める`ことです。`ステータス`は通常「Selected」に`変更`され、`他の支払い``実行`からの`ロック`を防ぎます。 | ||
| その重要性 「支払バッチ最適化」と、支払いを決定してから実際に小切手を切るまでの遅延を分析します。 取得元 「請求書の支払い」画面のアクションを介して、APBILLステータスが「選択済み」または同等に変更されたことから推測します。 取得 ステータスフィールドを前後で比較 イベントタイプ inferred | |||
| 支払い消込済み | 支払いが`銀行`で`決済`されたことの`確認`であり、`キャッシュマネジメント`における`銀行``照合``プロセス`中に`マーク`されます。 | ||
| その重要性 キャッシュフローの観点から「エンドツーエンドサイクルタイム」を提供し、実際に口座から資金が流出したことを確認できます。 取得元 APPYMTオブジェクトまたはリンクされたキャッシュマネジメント取引の照合ステータスまたは「決済日」フィールドを確認します。 取得 照合ステータスを比較 イベントタイプ inferred | |||
| 支払い無効 | 以前に生成された支払いのキャンセルです。これにより請求書の`債務`が再開され、支払い`プロセス`を再開する`必要`があります。 | ||
| その重要性 支払いが生成された後に取り消される深刻な下流プロセス障害を特定します。 取得元 APPYMT 取得 無効取引が発生したときに記録されます イベントタイプ explicit | |||
| 請求書を却下 | 承認者が請求書を却下し、下書きまたは部分的に承認された状態に戻すことを記録します。これは`プロセス``ループ`または`データ品質`の`問題`を示します。 | ||
| その重要性 ワークフローの摩擦点を浮き彫りにし、手戻り指標に貢献します。 取得元 AP請求書に関連付けられた「承認履歴の確認」ログを照会し、「却下」または「拒否」 取得 却下アクションが実行されたときに記録されます イベントタイプ explicit | |||
| 請求書保留 | 請求書に支払いブロックまたは「On Hold」`ステータス`を適用することです。これにより、請求書が支払い処理のために選択されるのを防ぎます。 | ||
| その重要性 「支払いブロック解除時間」に直接影響を与え、支払パイプラインにおける遅延を可視化します。 取得元 APBILL監査証跡で、「保留中」ブール値またはステータスフィールドがtrueに遷移したことから推測します。 取得 ステータスフィールドを前後で比較 イベントタイプ inferred | |||
| 請求書保留解除 | 支払いブロックの`解除`であり、これにより請求書が支払い`選択`に`進む`ことができます。これは`紛争`または`問題`の`解決`を示します。 | ||
| その重要性 ボトルネック期間の終了と標準プロセスフローの再開を示します。 取得元 APBILL監査証跡で、「保留中」ブール値またはステータスフィールドがfalseに遷移したことから推測します。 取得 ステータスフィールドを前後で比較 イベントタイプ inferred | |||
| 請求書更新 | 初期作成後の請求書`ヘッダー`または`明細`項目への変更を記録します。この`アクティビティ`の`高頻度`は、`手作業`による`手戻り`や`データ抽出``エラー`を示します。 | ||
| その重要性 「タッチレス処理率」の計算と非効率な手作業によるデータ修正ループの特定に重要です。 取得元 転記前にユーザーによって実行された「更新」 取得 取引が修正されたときに記録されます イベントタイプ explicit | |||
抽出ガイド
ステップ
AP Billsビューの準備 Sage Intacctにログインし、Accounts Payable > Allタブ > Bills に移動します。「新規ビュー作成」を選択します。 ビュー名を「Process Mining - Bills Extraction」とします。 以下の列を順番に選択します: 請求書番号(文書番号)、ベンダー名、作成日、投稿日、期日、合計金額、ステータス、通貨、PO番号、部門、作成者、保留中、説明、レコード番号(システムID)。 投稿済みのデータのみを対象とする場合は「ドラフト」請求書を除外するようフィルターを設定するか、ライフサイクル全体をキャプチャするためにフィルターを開いたままにします。日付範囲が分析期間(例:作成日 = 過去365日間)をカバーしていることを確認します。 ビューを保存します。
AP Billsデータの出力 「Process Mining - Bills Extraction」ビューを開きます。 「エクスポート」ボタンをクリックし、「CSV」形式を選択します。 ファイルを「AP_Bills.csv」として保存します。
Posted Paymentsビューの準備 Accounts Payable > Allタブ > Posted Payments に移動します。 「Process Mining - Payments」という名前の新規ビューを作成します。 以下の列を選択します: 小切手/支払番号、支払日、ベンダー名、取引金額、支払方法、ステータス(無効/決済済み)、照合日、請求書番号(参照)、レコード番号。 ビューを保存します。
支払データの出力 「Process Mining - Payments」ビューを開きます。 「エクスポート」をクリックし、「CSV」を選択します。 ファイルを「AP_Payments.csv」として保存します。
オプション: ワークフロー履歴の監査証跡 Intacctの標準カスタムビューは、現在のステータスと最終変更日のみを表示します。「請求書拒否」などの履歴イベントや特定の承認タイムスタンプを捕捉するには、監査履歴をエクスポートする必要があります。 Reports > Setup > Audit Trail に移動します。 監査証跡を「AP請求書」オブジェクトを対象として構成します。 アクションタイプ: 追加、変更、承認、拒否を選択します。 このレポートを「AP_Audit_History.csv」としてエクスポートします。
変換スクリプトの実行 クエリセクションに記載されているPythonスクリプトを使用して、これらのファイルを結合します。このスクリプトは、「AP_Bills.csv」、「AP_Payments.csv」、およびオプションの「AP_Audit_History.csv」を取り込み、必要なイベントログ構造を生成します。
検証とフォーマット 生成された「Event_Log_Output.csv」を開きます。 「EventTime」がISO 8601形式(YYYY-MM-DD HH:MM:SS)であることを確認します。 「InvoiceNumber」がすべての行に入力されていることを確認します。 最終的なCSVをProcessMindにアップロードします。
設定
- ビュー設定: すべてのトランザクションをキャプチャするのに十分な量の「レコード数」がビュー設定で高く設定されていることを確認するか、制限がある場合は「次ページ」エクスポート機能を使用してください。
- 日付処理: Intacctは日付をユーザーのローカル形式(例:MM/DD/YYYY)でエクスポートします。変換スクリプトは標準的な米国形式を想定しています。ユーザープロファイルがDD/MM/YYYYを使用している場合は、スクリプトを調整してください。
- フィールド権限: ビューを作成するユーザーが、買掛金請求書と仕訳済み支払いに対して「リスト」および「表示」権限を持っていることを確認してください。
- 履歴の粒度: 監査証跡のエクスポートがない場合、「請求書承認済み」のようなアクティビティは「投稿日」のプロキシに依存し、「請求書更新済み」は最終変更時間のみを反映します。
- フィルタリング: データ量を制限するため、「作成日」>= [開始日] でフィルターを適用してください。無効化または履歴レコードを特に除外したい場合を除き、「ステータス」によるフィルタリングは避けてください。
a クエリ例 config
import pandas as pd
import numpy as np
from datetime import datetime
# CONFIGURATION
# Update these filenames to match your exported files
FILE_BILLS = 'AP_Bills.csv'
FILE_PAYMENTS = 'AP_Payments.csv'
# Set to None if Audit History is unavailable
FILE_AUDIT = 'AP_Audit_History.csv'
# COLUMNS MAPPING (Adjust based on your View column headers)
COL_BILL_NUM = 'Invoice Number'
COL_VENDOR = 'Vendor Name'
COL_AMOUNT = 'Total Amount'
COL_CREATED = 'Date Created'
COL_POSTED = 'Date Posted'
COL_DUE = 'Due Date'
COL_STATE = 'State'
COL_PO = 'PO Number'
COL_HOLD = 'On Hold'
COL_PAY_DATE = 'Payment Date'
COL_PAY_REF = 'Check/Payment Number'
COL_PAY_BILL_REF = 'Bill Number'
COL_PAY_STATE = 'State'
# OUTPUT STRUCTURE
event_log_columns = [
'InvoiceNumber', 'ActivityName', 'EventTime', 'SourceSystem',
'LastDataUpdate', 'VendorName', 'InvoiceAmount', 'PurchaseOrderNumber',
'InvoiceDate', 'DueDate', 'InvoiceStatus'
]
def run_extraction():
events = []
current_time = datetime.now().isoformat()
# 1. LOAD BILLS
try:
df_bills = pd.read_csv(FILE_BILLS)
# Clean formatting (remove currency symbols if present)
df_bills[COL_AMOUNT] = df_bills[COL_AMOUNT].replace('[\\$,]', '', regex=True).astype(float)
except FileNotFoundError:
print('Bills file not found.')
return
# 2. LOAD PAYMENTS
try:
df_pay = pd.read_csv(FILE_PAYMENTS)
except FileNotFoundError:
print('Payments file not found.')
df_pay = pd.DataFrame()
# PROCESSING BILLS
for index, row in df_bills.iterrows():
invoice_num = str(row[COL_BILL_NUM])
vendor = row[COL_VENDOR]
amount = row[COL_AMOUNT]
po_num = str(row[COL_PO]) if pd.notna(row[COL_PO]) else None
due_date = row[COL_DUE]
status = row[COL_STATE]
# Common attributes for this invoice
base_attr = {
'InvoiceNumber': invoice_num,
'SourceSystem': 'Sage Intacct',
'LastDataUpdate': current_time,
'VendorName': vendor,
'InvoiceAmount': amount,
'PurchaseOrderNumber': po_num,
'DueDate': due_date,
'InvoiceStatus': status
}
# Activity: Invoice Draft Created
if pd.notna(row[COL_CREATED]):
events.append({**base_attr,
'ActivityName': 'Invoice Draft Created',
'EventTime': row[COL_CREATED],
'InvoiceDate': row[COL_CREATED]})
# Activity: Invoice Matched to PO
if po_num and pd.notna(row[COL_CREATED]):
events.append({**base_attr,
'ActivityName': 'Invoice Matched to PO',
'EventTime': row[COL_CREATED],
'InvoiceDate': row[COL_CREATED]})
# Activity: Invoice Posted
if pd.notna(row[COL_POSTED]):
events.append({**base_attr,
'ActivityName': 'Invoice Posted',
'EventTime': row[COL_POSTED]})
# In standard views, Posted often implies Submission and Approval if no audit trail
# We generate proxy events if Audit Trail is missing
if not FILE_AUDIT:
events.append({**base_attr,
'ActivityName': 'Invoice Submitted',
'EventTime': row[COL_POSTED]})
events.append({**base_attr,
'ActivityName': 'Invoice Approved',
'EventTime': row[COL_POSTED]})
# Activity: Invoice Placed on Hold
if str(row[COL_HOLD]).lower() in ['true', 'yes', 'on hold']:
# Time is approximate (Last Modified) as View doesn't track hold time
events.append({**base_attr,
'ActivityName': 'Invoice Placed on Hold',
'EventTime': row.get('Date Modified', row[COL_CREATED])})
# PROCESSING PAYMENTS
# Intacct payment export might list multiple bills per check line or require join logic
# Assuming direct link via Bill Number
if not df_pay.empty:
for index, row in df_pay.iterrows():
bill_ref = str(row[COL_PAY_BILL_REF])
# Only process if this payment links to a bill we know
# (In a real scenario, merge on Bill Number)
pay_attr = {
'InvoiceNumber': bill_ref,
'SourceSystem': 'Sage Intacct',
'LastDataUpdate': current_time,
'ActivityName': 'Payment Generated',
'EventTime': row[COL_PAY_DATE]
}
events.append(pay_attr)
if str(row[COL_PAY_STATE]).lower() == 'void':
events.append({**pay_attr, 'ActivityName': 'Payment Voided', 'EventTime': row[COL_PAY_DATE]})
if 'Date Reconciled' in row and pd.notna(row['Date Reconciled']):
events.append({**pay_attr, 'ActivityName': 'Payment Reconciled', 'EventTime': row['Date Reconciled']})
# 3. OUTPUT
df_events = pd.DataFrame(events)
# Ensure dates are ISO format
df_events['EventTime'] = pd.to_datetime(df_events['EventTime']).dt.strftime('%Y-%m-%d %H:%M:%S')
# Final Select
df_final = df_events[event_log_columns]
df_final.to_csv('Event_Log_Output.csv', index=False)
print(f'Successfully exported {len(df_final)} events.')
if __name__ == '__main__':
run_extraction() ステップ
Webサービスセッションの確立: Sender ID、パスワード、会社ID、ユーザーID、ユーザーパスワードを使用してSage Intacct Web Services 3.0エンドポイントに認証し、セッションIDを取得します。
必要なオブジェクトの特定: ライフサイクル全体を捕捉するため、
APBILL(請求書ヘッダー)、APPYMTDETAIL(請求書にリンクされた支払い詳細)、AUDITTRAIL(ワークフロー履歴)の3つの主要オブジェクトからデータを抽出する必要があります。請求書ヘッダーデータの抽出:
APBILLオブジェクトに対してreadByQueryメソッドを使用します。RECORDNO、DOCNUMBER、WHENCREATED、WHENPOSTED、STATE、VENDORNAME、TOTALENTERED、PONUMBER、DUE_DATEフィールドを選択します。WHENCREATEDを使用して日付範囲でフィルタリングします。支払いデータの抽出:
APPYMTDETAILに対してreadByQueryを使用します。RECORDNO、WHENCREATED、PAYMENTDATE、TRX_AMOUNT、DOCNUMBER(支払い参照)、BILLRECORDNO(APBILLへの外部キー)を選択します。照合のためにCLEAREDステータスまたは日付(利用可能な場合)を取得していることを確認してください。監査履歴の抽出:
AUDITTRAILオブジェクトに対してreadByQueryを使用します。OBJECTTYPE= 'APBILL' でフィルタリングします。これは、ヘッダーテーブルにタイムスタンプとして保持されない承認、却下、保留、無効化イベントを捕捉するために重要です。OBJECTKEY、LOGTYPE、MESSAGE、WHENDOCCURRED、USERIDを選択します。データのステージング: これら3つのAPIコールからのXML/JSON応答をステージングデータベース(SQL Server、Snowflake、Postgresなど)にロードします。APIは単一の呼び出しで複雑な結合や結合をサポートしていないため、抽出後に変換を実行する必要があります。
変換スクリプトの実行: クエリセクションに記載されているSQLスクリプトをステージングされたテーブルに対して実行します。このスクリプトは、静的なヘッダーデータとトランザクション監査ログを統合して、単一のイベントログを作成します。
アクティビティタイプの検証: 監査証跡メッセージ(承認済み、却下済みなど)に含まれる特定のキーワードについて出力を確認し、文字列マッチングロジックがIntacct設定の特定の文言をカバーしていることを確認してください。
日付のフォーマット: 最終エクスポート時に、
EventTime列がISO 8601(YYYY-MM-DD THH:MM:SS)標準に準拠していることを確認してください。イベントログのエクスポート: ProcessMindへのアップロードのため、SQLクエリの結果をCSVまたはParquetファイルとしてエクスポートします。
設定
- APIエンドポイント: https://api.intacct.com/ia/xml/xmlgw.phtml
- メソッド:
readByQuery(Web Services 3.0) - ページサイズ: HTTPオーバーヘッドを最小限に抑えるため、
pagesizeを1000(最大推奨値)に設定します。resultIdを使用したループを実装し、後続のページを取得します。 - 日付フィルタリング: 抽出期間(例:過去365日間)を制限するため、
WHENCREATED列に対してクエリ文字列で標準SQL演算子(>=, <, AND)を使用します。 - 権限: 抽出ユーザーには、買掛金に対する「リスト」および「表示」権限、ならびに「監査証跡」権限(多くの場合、プラットフォームサービスまたは会社管理設定にあります)が必要です。
- オブジェクト連携:
APBILL.RECORDNOは、APPYMTDETAIL.BILLRECORDNOおよびAUDITTRAIL.OBJECTKEYと結合するための主キーとして使用されます。
a クエリ例 sql
/*
PROCESSMIND TRANSFORMATION SCRIPT
Prerequisite: Data from APBILL, APPYMTDETAIL, and AUDITTRAIL
must be extracted via API and staged in tables with those names.
*/
/* 1. Invoice Draft Created */
SELECT
H.DOCNUMBER AS InvoiceNumber,
'Invoice Draft Created' AS ActivityName,
H.WHENCREATED AS EventTime,
'Sage Intacct' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.VENDORNAME AS VendorName,
H.TOTALENTERED AS InvoiceAmount,
H.PONUMBER AS PurchaseOrderNumber,
H.WHENCREATED AS InvoiceDate,
H.DUE_DATE AS DueDate,
NULL AS Department,
H.CREATEDBY AS CreatedBy,
H.STATE AS InvoiceStatus,
NULL AS PaymentDate
FROM APBILL H
UNION ALL
/* 2. Invoice Matched to PO (Derived from existence of PO Number at creation) */
SELECT
H.DOCNUMBER,
'Invoice Matched to PO',
H.WHENCREATED, -- Occurs effectively at creation if PO links
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
H.TOTALENTERED,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
H.CREATEDBY,
H.STATE,
NULL
FROM APBILL H
WHERE H.PONUMBER IS NOT NULL AND H.PONUMBER <> ''
UNION ALL
/* 3. Invoice Posted (Header Timestamp) */
SELECT
H.DOCNUMBER,
'Invoice Posted',
H.WHENPOSTED,
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
H.TOTALENTERED,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
H.CREATEDBY,
H.STATE,
NULL
FROM APBILL H
WHERE H.WHENPOSTED IS NOT NULL
UNION ALL
/* 4. Payment Generated */
SELECT
H.DOCNUMBER,
'Payment Generated',
P.WHENCREATED,
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
P.TRX_AMOUNT,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
P.CREATEDBY,
H.STATE,
P.PAYMENTDATE
FROM APPYMTDETAIL P
JOIN APBILL H ON P.BILLRECORDNO = H.RECORDNO
UNION ALL
/* 5. Payment Reconciled */
SELECT
H.DOCNUMBER,
'Payment Reconciled',
P.WHENCLEARED,
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
P.TRX_AMOUNT,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
P.CREATEDBY,
H.STATE,
P.PAYMENTDATE
FROM APPYMTDETAIL P
JOIN APBILL H ON P.BILLRECORDNO = H.RECORDNO
WHERE P.WHENCLEARED IS NOT NULL
UNION ALL
/* 6. Workflow Activities from Audit Trail */
/* Covers: Updated, Submitted, Approved, Declined, Hold, Released, Voided, Selected */
SELECT
H.DOCNUMBER,
CASE
WHEN A.MESSAGE LIKE '%Submitted%' THEN 'Invoice Submitted'
WHEN A.MESSAGE LIKE '%Approved%' THEN 'Invoice Approved'
WHEN A.MESSAGE LIKE '%Declined%' THEN 'Invoice Declined'
WHEN A.MESSAGE LIKE '%Hold%' AND A.LOGTYPE = 'Add' THEN 'Invoice Placed on Hold'
WHEN A.MESSAGE LIKE '%Hold%' AND A.LOGTYPE = 'Remove' THEN 'Invoice Released from Hold'
WHEN A.MESSAGE LIKE '%Voided%' THEN 'Payment Voided'
WHEN A.MESSAGE LIKE '%Selected for payment%' THEN 'Invoice Selected for Payment'
WHEN A.MESSAGE LIKE '%Modified%' THEN 'Invoice Updated'
ELSE 'System Activity'
END AS ActivityName,
A.WHENDOCCURRED AS EventTime,
'Sage Intacct' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.VENDORNAME,
H.TOTALENTERED,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
A.USERID AS CreatedBy,
H.STATE,
NULL
FROM AUDITTRAIL A
JOIN APBILL H ON A.OBJECTKEY = CAST(H.RECORDNO AS VARCHAR(50))
WHERE A.OBJECTTYPE = 'APBILL'
AND (
A.MESSAGE LIKE '%Submitted%'
OR A.MESSAGE LIKE '%Approved%'
OR A.MESSAGE LIKE '%Declined%'
OR A.MESSAGE LIKE '%Hold%'
OR A.MESSAGE LIKE '%Voided%'
OR A.MESSAGE LIKE '%Selected for payment%'
OR A.MESSAGE LIKE '%Modified%'
)
/* Exclude creation updates to avoid duplication with Invoice Draft Created */
AND NOT (A.MESSAGE LIKE '%Modified%' AND ABS(DATEDIFF(second, A.WHENDOCCURRED, H.WHENCREATED)) < 60)