[MẸO] Tăng tốc tính toán thuế hóa đơn với ONESOURCE REST API: Ưu điểm và Nhược điểm

By JoeVu, at: 15:55 Ngày 11 tháng 11 năm 2024

Thời gian đọc ước tính: __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

Tăng tốc tính toán thuế hóa đơn với ONESOURCE REST API: Ưu điểm và Nhược điểm

Đối với các công ty xử lý khối lượng hóa đơn lớn, ONESOURCE REST API cung cấp một lợi thế rõ ràng so với SOAP. Với khả năng xử lý lên đến 1.000 hóa đơn trong một lần gọi, REST API có thể giảm đáng kể thời gian xử lý và tải máy chủ so với API SOAP, chỉ xử lý một hóa đơn cho mỗi yêu cầu.

Một ví dụ mã Python cho OneSource REST Client được trình bày bên dưới, hoặc bạn có thể nhấp vào liên kết này

import requests
import uuid


class OnesourceRestClient:
    BASE_URL = "https://api-uat.onesourcetax.com"  # mặc định là url uat
    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"  # phạm vi cố định cho việc xác định thuế

    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"Fetching access token from ONESOURCE Rest. Payload: {payload}, Headers: {headers}"
        )
        response = self.make_post_request(
            self.TOKEN_URL, headers=headers, payload=payload
        )
        self.access_token = response.json().get("access_token")
        print(f"New access token fetched: {self.access_token}")
        return self.access_token

    def fetch_tax(self) -> None:
        print("Fetching tax from 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"Tax fetched: {self.response_data}")
        return self.response_data


và đây là cách sử dụng nó

data = "<your transaction_data>"
consumer_key = "<your consumer_key>"
consumer_secret = "<your consumer_secret>"
client = OnesourceRestClient(data, consumer_key, consumer_secret)
client.fetch_tax()

 

Ưu điểm chính

  • Xử lý hàng loạt: Gửi lên đến 1.000 hóa đơn mỗi lần gọi, tiết kiệm thời gian và giảm tải máy chủ.
     
  • Hiệu suất được nâng cao: Ít yêu cầu hơn có nghĩa là phản hồi nhanh hơn và quy trình làm việc được hợp lý hóa.
     
  • Giới hạn tốc độ hiệu quả: Với giới hạn tốc độ 300 yêu cầu, ONESOURCE REST API đảm bảo xử lý ổn định, hiệu suất cao, mỗi yêu cầu chứa một số lượng lớn hóa đơn.
     
{
    "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",
}

 

Một nhược điểm tiềm ẩn

Tuy nhiên, có một nhược điểm: Xử lý lỗi. Nếu một hóa đơn trong lô 1.000 hóa đơn gặp sự cố, toàn bộ yêu cầu có thể thất bại. Điều này có thể dẫn đến sự chậm trễ và cần phải sử dụng các lô nhỏ hơn để đảm bảo độ chính xác.

Thông tin thêm có thể được tìm thấy ở đây

 

Mẹo tối ưu hóa xử lý hàng loạt

  1. Chạy các lô nhỏ hơn: Cân nhắc việc nhóm các hóa đơn thành các lô 100-200 để giảm thiểu rủi ro trong khi vẫn tận hưởng những cải tiến về tốc độ.
     
  2. Giám sát lỗi: Thực hiện xử lý và ghi nhật ký lỗi mạnh mẽ để nhanh chóng xác định và giải quyết các sự cố trong các lô.
     
  3. Kiểm thử và xác thực: Kiểm tra kích thước lô để tìm điểm tối ưu mà bạn đạt được hiệu quả nhưng giảm thiểu rủi ro các yêu cầu thất bại.
     
  4. Giám sát giới hạn tốc độ: Theo dõi các tiêu đề giới hạn tốc độ (X-RATELIMIT-ALLOWED, X-RATELIMIT-USEDX-RATELIMIT-AVAILABLE) để tránh vượt quá giới hạn và lập kế hoạch sử dụng cho phù hợp.
     

Mặc dù ONESOURCE REST API rất mạnh mẽ, nhưng việc triển khai cẩn thận — chẳng hạn như quản lý kích thước lô — đảm bảo bạn nhận được những lợi ích tốt nhất của nó mà không bị chậm lại do lỗi lô.

Để biết thêm về tối ưu hóa API thuế, hãy truy cập Glinteco.

 

Dữ liệu tải trọng hàng loạt ONESOURCE REST mẫu: ở đây

Dữ liệu phản hồi hàng loạt ONESOURCE REST mẫu: ở đây

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

Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.