メインコンテンツへスキップ

ODBC 対応データベース

FCFORINVOICES では、データセットを ODBC 対応データベースに接続し (ベンダーおよび事業部門データベースの使用を参照) 、データを一度ロードすることも、一定の間隔で外部データベースのデータを使用してデータセットを更新することもできます (データセットの更新を参照) 。 したがって、最初の手順として、Microsoft Access、Microsoft SQL Server、Oracle などの ODBC 対応データベースに外部データを配置する必要があります。

外部データベース内の重複レコードの排除

請求書上でベンダー (または事業部門) が検出された結果として取得する必要がある値を持つ、外部のベンダー (または事業部門) データベース内の field を特定することが重要です。この field (または複数の field の組み合わせ) は、データセットの一意キーにする必要があります。 事業部門データセットの一意キーは Id field です (BusinessUnits データセット を参照) 。ユーザーの観点では、この field は、指定した請求書の発行先である事業部門を FCFORINVOICES が検出した結果です。 ベンダー データセットの一意キーは、指定した請求書を発行したベンダーを FCFORINVOICES が検出した結果として、外部情報システムに渡される値である必要があります。1 つのベンダー テーブルを使用する場合、一意キーはデータセットの Id field に関連付ける必要があります。この値は、請求書内でベンダーが検出されたときに外部情報システムへ渡されます。 1 つのプロジェクト内で、自社の複数の事業部門宛てに発行された請求書を処理する予定であり、各事業部門がそれぞれ独自のベンダー データベースを持っている場合は、各事業部門の一意キーを Vendors データセット の BusinessUnitId 列 に関連付け、各ベンダーのキーを Vendors データセット の Id 列 に関連付ける必要があります。したがって、ベンダーが検出されたときに外部情報システムへ渡されるベンダー record の一意キーは、Id と BusinessUnitId の値の組み合わせになります (Vendors データセット を参照) 。 以下では、事業部門でも状況はまったく同じであるため、ベンダーの検出だけを取り上げます。 record の一意キーは、ベンダー検出に使用される parameters の一意な組み合わせを定めるものでなければなりません。外部情報システムでは、請求書に記載されている、またはベンダー検出に使用されている parameters よりも多くの parameters に基づいて、ベンダー record を一意と見なすことがよくあります。 たとえば、ベンダー My Company Name Ltd. が米ドル建ての請求書を発行した場合、外部情報システムは MCN_USD identifier を受け取ることを想定している一方、同じ会社がユーロ建ての請求書を発行した場合は MCN_EUR identifier を受け取ることを想定していることがあります。通貨は請求書に記載されているため (MCN_USD を返すべき場合と MCN_EUR identifier を返すべき場合は区別できます) が、通貨はベンダー検出には使用されません。 そのため、ベンダー検出メカニズムは MCN_USDMCN_EUR のどちらを選ぶべきか判断できません。 このような場合は、MCN_USDMCN_EUR の両方に対応し、ベンダー検出時に返される MCN identifier を作成してください。次に、指定した請求書の通貨に応じて MCN_USDMCN_EUR のどちらを使用するかを選択する rule を Document Definition 内に作成できます。 一般化すると、ベンダー record の一意 identifier には、会社名、会社住所、税務識別番号 (VATID、NationalVATID) 、IBAN (Vendors データセット を参照) など、ベンダー検出に使用される parameters の一意なセットが必要です。そうして初めて、ベンダー検出メカニズムは請求書に対して正しいベンダー record を選択できます。
その後、プログラムは追加の field を取り込み、Document Definition 内の rules を使用して結果を微調整し、必要な値を取得できます。
ベンダー検出に使用される同一の parameters のセット (または混同しやすいセット) が複数の一意キーに対応している場合、プログラムは 1 つのキーだけを選ぶことができず、ベンダー検出は不安定になり、品質が低下します。 その理由は次のとおりです。プログラムが請求書に印字されたデータを使用して My Company Name ベンダーを確実に検出できても、請求書データに対応する複数の record (MCN1MCN2、… MCNN) がデータセット内に存在する場合、プログラムは、請求書データとの一致度はより低いものの、該当する record 数がそれほど多くならない別の record を選ぶ可能性があります。その結果、最終的にベンダーが誤って検出されることになります。 したがって、外部データベース内の重複 record を排除し、ベンダー検出に使用される record field の値のそれぞれの一意な組み合わせに対して、一意の値を持つ 列 を外部データベースに用意することが非常に重要です。 データセットに接続すると、データセットの一意キーに関連付けられる 列 内で同じ値を持つ row は、データセット内で自動的に 1 つの record にまとめられます。

データセット内の複数値列

データセットでは、1 つの会社レコードの 1 つの論理列に対して複数の値を保存できます。 複数の値を保存する必要があるのは、会社名や住所などの会社パラメーターが請求書ごとに異なる場合があるためです (たとえば、“My Company Name” と “MCN Ltd.” のようなケースです) 。しかし、会社を確実に検出するには、データセット内のテキストが請求書画像から取得したテキストとできるだけ近く一致している必要があります。また、会社が複数の銀行口座やその他の属性を持つこともあります。
データセット の複数値列は、同じ情報を異なる書き方で表した値を保存するために使用してください。たとえば、“Karl Marx Street” と “K. Marx str.” は、同じ住所の 2 つの異なる表記です。一方、ロンドンとベルリンにある会社の支店は、それぞれ別のレコードにする必要があります。
複数値列の値は外部データベースから取得できるほか (たとえば、ベンダーのテーブルには各会社について 1 ~ 5 件の銀行情報が含まれることがあります) 、データキャプチャ中にユーザーが追加することもできます (たとえば、外部データベースには登録されていないもののよく使われる会社名の候補を Operator がデータセットに追加する場合があります) 。 データセットでは列の非正規化を使用します。つまり、データは次の形式で保存されます。
データセットの一意キー*Name1Name2NameN
1My Company NameMCN Ltd.<empty value>
2The Second Company, Inc.S-Company<empty value>
レコードの 1 つの論理 field、たとえば Name に対しては、その論理 field の取り得るすべての値を保存する複数の列がデータセット内に作成されます。したがって、Name は「複合列」と呼ぶことができます。 外部データベースのテーブル (またはビュー) を接続する場合は、前述の列の非正規化、またはより一般的な行の非正規化を使用できます。後者の場合、データセット内で 1 つの record のパラメーターとしてマージされる行は、データセット内の一意キーに対応する列で同じ値を持っている必要があります。例:
データセット内の一意キーに対応する列*Name
1My Company Name
1MCN Ltd.
N<empty value>
2The Second Company, Inc.
2S-Company
N<empty value>
*BusinessUnits データセットの一意キーは Id field です。Vendors データセットの一意キーは、設定に応じて、Id field、または Id field と BusinessUnitId field の組み合わせです (Vendors データセットを参照)