API を抽出

Odoo は invoicesbank statementsexpensesreviews のドキュメントの処理を自動化するサービスを提供しています。

サービスは OCR エンジンを使用してドキュメントをスキャンし、 :abbr:`AI(人工知能)`ベースのアルゴリズムを使用して、合計などの関心のあるフィールドを抽出します。 締切日 *invoices*の請求書、最初および最終残高、*銀行明細*の日付の請求書行 *経費*の合計日付、または*再開*の名前、電子メール、電話番号。

このサービスは有料サービスです。各ドキュメント処理には、ドキュメントのデジタル化|IAP| アカウントからクレジットが1つかかります。 IAP アカウントの詳細は、 :doc:`ここ </applications/essentials/in_app_purchase> ` を見つけることができます。

本サービスは、経理、経費、募集アプリまたはAPI経由で直接ご利用いただけます。 抽出APIは、次のセクションで詳述されています。あなた自身のプロジェクトに直接当社のサービスを統合することができます。

概要

抽出 API は JSON-RPC2 プロトコルを使用します。エンドポイント ルートは https://extract.api.odoo.com にあります。

バージョン

Extract APIのバージョンはルートで指定されています。

最新バージョン:
  • 請求書:123

  • 銀行取引明細: 100

  • 費用:132

  • 応募者:102

フロー

フローはドキュメントの種類ごとに同じです。

  1. ドキュメントを送信するには、 /parse <extract_api/parse>`を呼び出します。成功すると、応答に `document_token を受け取ります。
  2. ドキュメントの解析状態を取得するには、定期的に :ref:`/get_result <extract_api/get_result>`をポーリングする必要があります。
    あるいは、 /parse への呼び出し時に webhook_url を指定することができ、結果が完成したら通知されます。

すべての HTTP POST メソッドを使用する必要があります。 請求書の完全なフローのPython実装は、 ここ で見つけることができ、 :ref:`統合テストセクション <latestextract_api/integration_testing> ` に統合テストのトークンが提供されています。

Parse

ドキュメントのデジタル化をリクエストします。ルートはリクエストの結果を取得するために使用できる document_token を返します。

ルート

  • /api/extract/invoice/2/parse

  • /api/extract/bank_statement/1/parse

  • /api/extract/expense/2/parse

  • /api/extract/applicant/2/parse

リクエスト

jsonrpc (required)

See JSON-RPC2

method (必須)

See JSON-RPC2

id (必須)

See JSON-RPC2

params
account_token (必須)

クレジットが請求される :doc:`IAP </applications/essentials/in_app_purchase>`アカウントのトークン。通話に成功するたびに1クレジットが必要です。

version (必須)

バージョンは、リクエストの形式とサーバーレスポンスの形式を決定します。 :ref:`最新バージョン <extract_api/version> ` を使用してください。

documents (必須)

ドキュメントは ASCII エンコーディングの Base64 文字列として提供する必要があります。リストには 1 つのドキュメントのみを含める必要があります。 このフィールドは、従来の理由でのみリストです。サポートされているフォーマットは pdfpng および jpg です。

dbuuid (任意)

Odoo データベースの一意の識別子

webhook_url (任意)

webhook URL を提供することができます。空の POST リクエストは webhook_url/document_token に送信されます。

user_infos (任意)

ドキュメントを抽出サービスに送信する人に関する情報。クライアントまたはサプライヤーにすることができます (perpective に依存します)。 サービスが機能するためにこの情報は必要ありませんが、結果の品質を大幅に向上させます。

user_company_vat (任意)

ユーザーの付加価値税(VAT)番号

user_company_name (任意)

ユーザーの会社名です。

user_company_country_code (任意)

ユーザの国コード。フォーマット: ISO3166 alpha-2

user_lang (任意)

ユーザーの言語。フォーマット: language_code + _ + locale (例: fr_FR, en_US)。

user_email (任意)

ユーザーのメールアドレス

purchase_order_regex (任意)

指定されていない場合は、Odoo PO 形式のデフォルトになります。

perpective (任意)

client または supplier にすることができます。このフィールドは請求書のみに使用できます。 client は、提供されたユーザー情報が請求書のクライアントに関連していることを意味します。 supplier はサプライヤーに関連していることを意味します。指定されていない場合は、クライアントが使用されます。

{
    "jsonrpc": "2.0",
    "method": "call",
    "params": {
        "account_token": string,
        "version": int,
        "documents": [string],
        "dbuuid": string,
        "webhook_url": string,
        "user_infos": {
            "user_company_vat": string,
            "user_company_name": string,
            "user_company_country_code": string,
            "user_lang": string,
            "user_email": string,
            "purchase_order_regex": string,
            "perspective": string,
        },
    },
    "id": string,
}

注釈

user_infos パラメータはオプションですが、特に請求書では結果の品質が大幅に向上します。より多くの情報を提供できるようになります。

回答

jsonrpc

See JSON-RPC2

id

See JSON-RPC2

結果
status

リクエストのステータスを示すコードです。下の表を参照してください。

status_msg

リクエストのステータスについて詳細な詳細を表す文字列。

document_token

リクエストが成功した場合にのみプレゼントします。

状態

status_msg

success

成功

error_unsupported_version

対応していないバージョン

error_internal

エラーが発生

error_no_credit

クレジットが足りません。

error_unsupported_format

サポートされていないファイル形式

error_maintenance

サーバーは現在メンテナンス中です。後でもう一度お試しください。

{
    "jsonrpc": "2.0",
    "id": string,
    "result": {
        "status": string,
        "status_msg": string,
        "document_token": string,
    }
}

注釈

APIは実際にJSON-RPCエラースキームを使用しません。APIはJSON-RPCの正常な結果にバンドルされた独自のエラースキームを持っています。

結果を取得する

ルート

  • /api/extract/invoice/2/get_result

  • /api/extract/bank_statement/1/get_result

  • /api/extract/expense/2/get_result

  • /api/extract/applicant/2/get_result

リクエスト

jsonrpc (required)

See JSON-RPC2

method (必須)

See JSON-RPC2

id (必須)

See JSON-RPC2

params
version (必須)

バージョンは /parse リクエストに渡されたバージョンと一致する必要があります。

document_token (必須)

解析状態を取得する document_token

account_token (必須)

ドキュメントの送信に使用された IAP アカウントのトークン。

{
    "jsonrpc": "2.0",
    "method": "call",
    "params": {
        "version": int,
        "document_token": int,
        "account_token": string,
    },
    "id": string,
}

回答

解析結果を取得すると、検出されたフィールドはドキュメントの種類によって大きく異なります。 各レスポンスは、各ドキュメントごとに1つずつの辞書のリストです。 辞書のキーはフィールドの名前で、値はフィールドの値です。

jsonrpc

See JSON-RPC2

id

See JSON-RPC2

結果
status

リクエストのステータスを示すコードです。下の表を参照してください。

status_msg

リクエストのステータスについて詳細な詳細を表す文字列。

results

リクエストが成功した場合にのみプレゼントします。

full_text_annotation

ドキュメントの OCR から処理されていない完全な結果が含まれています。

状態

status_msg

success

成功

error_unsupported_version

対応していないバージョン

error_internal

エラーが発生

error_maintenance

サーバーは現在メンテナンス中です。後でもう一度お試しください。

error_document_not_found

ドキュメントが見つかりませんでした

error_unsupported_size

ドキュメントが小さすぎるため却下されました

error_no_page_count

PDFファイルのページ数を取得できません

error_pdf_conversion_to_images

PDFを画像に変換できませんでした

error_password_protected

PDFファイルはパスワードで保護されています

error_too_many_pages

ドキュメントにページが多すぎます

{
    "jsonrpc": "2.0",
    "id": string,
    "result": {
        "status": string,
        "status_msg": string,
        "results": [
            {
                "full_text_annotation": string,
                "feature_1_name": feature_1_result,
                "feature_2_name": feature_2_result,
                ...
            },
            ...
        ]
    }
}

一般的なフィールド

feature_result

合計や期日などのドキュメントから抽出したい各フィールドは**features**とも呼ばれます。 以下のセクションでは、ドキュメントの種類に関連付けられて抽出されたすべての機能の網羅的なリストを見つけることができます。

各機能について、候補者のリストを返し、私たちのモデルがこの機能に最適であると予測している候補者にスポットライトを当てます。

selected_value (任意)

この機能の最良の候補。

selected_values (任意)

この機能の最高の候補。

candidates (任意)

信頼度スコアを減少させることにより、この機能のすべての候補のリスト。

"feature_name": {
    "selected_value": candidate_12,
    "candidates": [candidate_12, candidate_3, candidate_4, ...]
}
候補

各候補者について、ドキュメント内の表示と位置を与えます。候補者は適合性の順序を減らすことによってソートされます。

content

候補者の表現。

coords

[center_x, center_y, width, rotation_angle]. 位置と寸法は、ページのサイズに対して相対的であり、したがって0から1の間です。 角度は時計回りの回転で度単位で測定されます。

page

候補者が配置されている元のドキュメントのページ(0から始まります)。

"candidate": [
    {
        "content": string|float,
        "coords": [float, float, float, float, float],
        "page": int
    },
    ...
]

請求書

請求書は複雑で、多くの異なる分野を持つことができます。 以下の表は、請求書から抽出できるすべてのフィールドの網羅的なリストを示しています。

機能名

仕様

SWIFT_code

content は文字列としてエンコードされた辞書です。

検出されたSWIFTコード(または`BIC <https://www.iso9362.org/isobic/overview.html>`_)に関する情報を含んでいます。

キー:

bic

検出されたBIC(文字列)。

name (任意)

銀行名(文字列)

country_code

ISO3166 alpha-2 銀行の国コード (文字列)。

city (任意)

銀行の街(ストリング)

verified_bic

BICがDB (bool)で見つかった場合は True です。

verified_bic が真の場合にのみ、名前と都市が存在します。

iban

content は文字列です

aba

content は文字列です

VAT_Number

content は文字列です

user_infosのパースペクティブの値に応じて、これはサプライヤーまたはクライアントのVAT番号になります。 perspectiveがクライアントの場合、サプライヤーのVAT番号になります。サプライヤーの場合は、クライアントのVAT番号です。

qr-bill

content は文字列です

payment_ref

content は文字列です

purchase_order

content は文字列です

selected_values の代わりに selected_values を使用します

country

content は文字列です

currency

content は文字列です

date

content は文字列です

書式 : YYYY-MM-DD

due_date

date と同じ

total_tax_amount

content はフロートです

invoice_id

content は文字列です

subtotal

content はフロートです

total

content はフロートです

supplier

content は文字列です

client

content は文字列です

email

content は文字列です

website

content は文字列です

invoice_lines 機能

各辞書が請求書行を表す辞書のリストとして返されます。

"invoice_lines": [
    {
        "description": string,
        "quantity": float,
        "subtotal": float,
        "total": float,
        "taxes": list[float],
        "total": float,
        "unit_price": float
    },
    ...
]

銀行明細書

次の表は、バンクステートメントから抽出されたすべてのフィールドのリストです。

機能名

仕様

balance_start

content はフロートです

balance_end

content はフロートです

date

content は文字列です

bank_statement_lines 機能

辞書のリストとして返されます。辞書は、各辞書が銀行明細行を表しています。

"bank_statement_lines": [
    {
        "amount": float,
        "description": string,
        "date": string,
    },
    ...
]

費用

経費は請求書よりも複雑ではありません。次の表は、経費レポートから抽出できるすべての分野の網羅的なリストです。

機能名

仕様

description

content は文字列です

country

content は文字列です

date

content は文字列です

total

content はフロートです

currency

content は文字列です

申請者

この3つ目のタイプのドキュメントは、履歴書の処理を目的としています。 次の表は、履歴書から抽出できるすべてのフィールドの網羅的なリストを示しています。

機能名

仕様

name

content は文字列です

email

content は文字列です

phone

content は文字列です

mobile

content は文字列です

統合テスト

/parse <extract_api/parse>`リクエストで *integration_token* を ``account_token` として使用することで、統合をテストできます。

このトークンを使用すると、テストモードになり、ドキュメントを実際に解析することなくフロー全体をシミュレートでき、**ドキュメント**の解析に成功するたびにクレジットが1つ請求されることはありません。

テストモードでの唯一の技術的な違いは、送信するドキュメントがシステムによってパースされていないことと、 :ref:`/get_result <extract_api/get_result>`から取得したレスポンスがハードコードされていることです。

請求書のフルフローのPython実装は、 :download:`here <extract_api/implementation.py> `にあります。