【ヒント】ONESOURCE REST APIによる請求書税計算の高速化:利点と欠点

By JoeVu, at: 2024年11月11日15:55

Estimated Reading Time: __READING_TIME__ minutes

[TIPS] Speeding Up Invoice Tax Calculations with ONESOURCE REST API: Pros and Cons
[TIPS] Speeding Up Invoice Tax Calculations with ONESOURCE REST API: Pros and Cons

ONESOURCE REST APIによる請求書税計算の高速化:メリットとデメリット

大量の請求書を処理する企業にとって、ONESOURCE REST APISOAPよりも明確な利点を提供します。1回の呼び出しで最大1,000件の請求書を処理できるため、REST APIは、リクエストごとに1件の請求書しか処理できないSOAP APIと比較して、処理時間とサーバー負荷を大幅に削減できます。

ONESOURCE RESTクライアントのPythonコードサンプルを以下に示します。または、こちらのリンクをクリックしてください

import requests
import uuid


class OnesourceRestClient:
    BASE_URL = "https://api-uat.onesourcetax.com"  # デフォルトはuat url
    TOKEN_URL = f"{BASE_URL}/oauth2/v1/token"
    TAX_URL = f"{BASE_URL}/indirect-tax-determination/taxes/v1/calculate"
    DEFAULT_CONFIG = {
        "base_url": "https://api-uat.onesourcetax.com",
        "company_role": "S",
        "calling_source": "DM",
        "charge_response": "CombineWithLine",
        "response_summary": "FullDetails",
        "external_company_id": "GLINTECO",
        "document_amount_type": "GrossPlusTaxAmount",
        "calling_system_number": "DM",
        "charge_included_in_amounts": "false",
    }
    SCOPE = "urn:tr:onesource:auth:api:IndirectTaxDetermination"  # 税金決定のための固定スコープ

    def __init__(self, transaction_data, consumer_key, consumer_secret):
        self.transaction_data = transaction_data
        self.consumer_key = consumer_key
        self.consumer_secret = consumer_secret
        self.config = self.DEFAULT_CONFIG

    def make_request(
        self, method, url, headers=None, params=None, payload=None
    ):
        headers = headers or {
            "Content-Type": "application/json",
        }
        response = requests.request(
            method=method, url=url, headers=headers, json=payload
        )
        return response

    def make_post_request(self, url, headers=None, payload=None):
        return self.make_request("post", url, headers=headers, payload=payload)

    def fetch_access_token(self) -> str:
        headers = {
            "ClientAssertion": f"Bearer {self.consumer_key}",
            "Content-Type": "application/json",
            "Correlation-Id": str(uuid.uuid4()),
        }
        payload = {
            "grant_type": "client_credentials",
            "client_id": self.consumer_key,
            "client_secret": self.consumer_secret,
            "scopes": self.SCOPE,
        }
        print(
            f"ONESOURCE Restからアクセストークンを取得しています。ペイロード: {payload}, ヘッダー: {headers}"
        )
        response = self.make_post_request(
            self.TOKEN_URL, headers=headers, payload=payload
        )
        self.access_token = response.json().get("access_token")
        print(f"新しいアクセストークンを取得しました: {self.access_token}")
        return self.access_token

    def fetch_tax(self) -> None:
        print("ONESOURCE Restから税金を取得しています")

        self.fetch_access_token()
        headers = {
            "Authorization": f"Bearer {self.access_token}",
            "Content-Type": "application/vnd.tri.onesource.idt+json",
            "Correlation-Id": str(uuid.uuid4()),
        }
        response = self.make_post_request(
            self.TAX_URL, headers=headers, payload=self.transaction_data
        )
        self.response_data = response.json()
        print(f"税金を取得しました: {self.response_data}")
        return self.response_data


そして、使用方法はこちらです

data = "<あなたのtransaction_data>"
consumer_key = "<あなたのconsumer_key>"
consumer_secret = "<あなたのconsumer_secret>"
client = OnesourceRestClient(data, consumer_key, consumer_secret)
client.fetch_tax()

 

主な利点

  • バッチ処理:1回の呼び出しで最大1,000件の請求書を送信し、時間とサーバー負荷を削減します。
     
  • パフォーマンスの向上:リクエストの減少は、より迅速な応答と合理化されたワークフローを意味します。
     
  • 効率的なレート制限:300リクエストのレート制限により、ONESOURCE REST APIは、各リクエストで大量の請求書に対応することで、安定した高スループット処理を保証します。
     
{
    "Content-Type": "application/json",
    "Content-Length": "253",
    "Connection": "keep-alive",
    "Date": "Wed, 13 Nov 2024 14:59:45 GMT",
    "Access-Control-Allow-Methods": "GET, PUT, POST, DELETE, PATCH, OPTIONS, HEAD",
    ...
    "X-RATELIMIT-ALLOWED": "300",
    "X-RATELIMIT-USED": "1",
    "X-RATELIMIT-AVAILABLE": "299",
    "X-RATELIMIT-EXPIRY": "1731510000000",
    "Cache-Control": "no-cache, no-store, must-revalidate",
    "Expires": "-1",
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Headers": "",
    "Access-Control-Max-Age": "3628800",
    "X-Cache": "Miss from cloudfront",
    "X-Amz-Cf-Pop": "SIN2-P3",
}

 

潜在的な欠点

しかし、1つの欠点があります。それはエラー処理です。1,000件のバッチ内の1つの請求書で問題が発生した場合、リクエスト全体が失敗する可能性があります。これにより、遅延が発生し、正確性を確保するためにバッチサイズを小さくする必要があります。

詳細情報はこちらをご覧ください。

 

バッチ処理を最適化するためのヒント

  1. より小さなバッチを実行する:速度の向上を享受しながらもリスクを最小限に抑えるために、請求書を100~200件のバッチにグループ化することを検討してください。
     
  2. エラー監視:堅牢なエラー処理とログ記録を実装して、バッチ内の問題を迅速に特定し解決します。
     
  3. テストと検証:効率性を高めながらリクエスト失敗のリスクを最小限に抑える最適なポイントを見つけるために、バッチサイズをテストします。
     
  4. レート制限の監視:レート制限ヘッダー(X-RATELIMIT-ALLOWEDX-RATELIMIT-USED、およびX-RATELIMIT-AVAILABLE)を監視して、制限に達するのを避け、使用状況を適切に計画します。
     

ONESOURCE REST APIは強力ですが、バッチサイズ管理などの綿密な実装により、バッチの失敗によって速度が低下することなく、そのメリットを最大限に活用できます。

税API最適化の詳細については、Glintecoをご覧ください。

 

ONESOURCE RESTバッチペイロードデータのサンプル:こちら

ONESOURCE RESTバッチレスポンスデータのサンプル:こちら

Tag list:
- Indirect tax solutions
- ONESOURCE SOAP API
- ONESOURCE REST API
- batch processing
- invoice indirect tax calculation
- API error handling
- tax integration tips
- tax error handling
- invoice tax calculation

Subscribe

Subscribe to our newsletter and never miss out lastest news.