[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](/media/filer_public_thumbnails/filer_public/d2/82/d282e18c-abcc-4a99-b8c5-438c8fe1f659/onesource_rest_api_-_soap_api.png__1500x900_q85_crop_subsampling-2_upscale.jpg)
![[TIPS] Speeding Up Invoice Tax Calculations with ONESOURCE REST API: Pros and Cons](/media/filer_public_thumbnails/filer_public/d2/82/d282e18c-abcc-4a99-b8c5-438c8fe1f659/onesource_rest_api_-_soap_api.png__400x240_q85_crop_subsampling-2_upscale.jpg)
Đối với các công ty xử lý khối lượng hóa đơn lớn, ONESOURCE REST API mang lại lợi thế rõ rệt so với SOAP. Với khả năng xử lý tới 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 SOAP API, chỉ xử lý một hóa đơn 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"Lấy token truy cập từ 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"Token truy cập mới đã được lấy: {self.access_token}")
return self.access_token
def fetch_tax(self) -> None:
print("Lấy thuế từ 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"Thuế đã lấy: {self.response_data}")
return self.response_data
và đây là cách sử dụng nó
data = ""
consumer_key = ""
consumer_secret = ""
client = OnesourceRestClient(data, consumer_key, consumer_secret)
client.fetch_tax()
Những Lợi Ích Chính
- Xử lý hàng loạt: Gửi tới 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 đồng nghĩa với 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 xử lý 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 Tàng
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
- 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 sự cải thiện tốc độ.
- 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ô.
- Kiểm thử và xác thực: Kiểm thử 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 yêu cầu bị lỗi.
- 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-USED
vàX-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 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 payload hàng loạt mẫu ONESOURCE REST: ở đây
Dữ liệu phản hồi hàng loạt mẫu ONESOURCE REST: ở đây