DOCS

Miễn thuế

Đồng bộ hóa chứng chỉ miễn thuế bán hàng của Mỹ vào hồ sơ khách hàng.

Nếu bạn bán hàng cho các nhà bán lại, cơ quan chính phủ hoặc tổ chức phi lợi nhuận, những người mua đó sẽ có chứng chỉ miễn thuế giúp họ được miễn thuế bán hàng ở các bang cụ thể. Zonos lưu trữ các chứng chỉ đó vào hồ sơ khách hàng để một người mua được miễn thuế có thể được nhận diện tại thanh toán.

Miễn thuế được ghi nhận theo từng khu vực pháp lý. Một khách hàng được miễn thuế ở South Carolina sẽ không tự động được miễn thuế ở Texas, vì vậy mỗi bang mà khách hàng có chứng chỉ là một hồ sơ riêng biệt với ngày hiệu lực và số chứng chỉ riêng.

Miễn thuế được gắn vào một khách hàng đã tồn tại, vì vậy việc đồng bộ hóa gồm hai lệnh gọi: tạo khách hàng, sau đó đồng bộ hóa chứng chỉ của họ. Cả hai đều dựa trên customerId của riêng bạn — cùng customerId mà bạn sử dụng ở những nơi khác trong Checkout. Zonos không bao giờ yêu cầu bạn lưu trữ một ID nội bộ.

Tính năng này chỉ khả dụng cho tích hợp API tùy chỉnh.

Miễn thuế chưa được áp dụng cho báo giá Landed Cost

Bạn có thể đồng bộ hóa và quản lý miễn thuế ngay hôm nay, và các hồ sơ được lưu trữ vào hồ sơ khách hàng. Việc khấu trừ một khoản miễn thuế khỏi thuế trên Landed Cost sắp ra mắt, vì vậy một miễn thuế đã đồng bộ chưa làm thay đổi mức thuế mà người mua hàng được báo giá. Đồng bộ hóa ngay từ bây giờ có nghĩa là chứng chỉ của bạn đã sẵn sàng khi tính năng đó ra mắt.

Tạo hoặc cập nhật khách hàng 

checkoutCustomerUpsert tạo một hồ sơ khách hàng, hoặc cập nhật hồ sơ đó nếu đã tồn tại cho customerId đó. Không giống như checkoutCustomerProfileAuthenticate, mutation này không yêu cầu người mua hàng phải có mặt, vì vậy bạn có thể thiết lập trước danh sách khách hàng của mình. Xem tạo hoặc cập nhật hồ sơ khi không có người mua hàng để biết đầy đủ hành vi của từng trường.

1mutation checkoutCustomerUpsert($input: CheckoutCustomerProfileInput!) {
2 checkoutCustomerUpsert(input: $input) {
3 customerId
4 email
5 name
6 phone
7 }
8}

Vì nó khớp dựa trên customerId, việc gọi lặp lại sẽ cập nhật cùng một hồ sơ thay vì tạo bản sao. Việc chạy trên toàn bộ danh sách khách hàng của bạn ở mỗi lần đồng bộ hóa là an toàn.

Đồng bộ hóa miễn thuế 

checkoutCustomerTaxExemptionsSync chấp nhận nhiều khách hàng cùng một lúc. Mỗi mục sẽ thay thế toàn bộ tập hợp miễn thuế của khách hàng đó.

1mutation checkoutCustomerTaxExemptionsSync(
2$input: [CheckoutCustomerTaxExemptionSyncInput!]!
3) {
4 checkoutCustomerTaxExemptionsSync(input: $input) {
5 customerId
6 accepted {
7 id
8 countryCode
9 administrativeArea
10 effectiveAt
11 expiresAt
12 exemptionReason
13 }
14 rejected {
15 code
16 message
17 administrativeArea
18 effectiveAt
19 }
20 }
21}

Nếu bỏ qua expiresAt, chứng chỉ sẽ không có ngày hết hạn. Nếu bỏ qua exemptionReason, giá trị mặc định sẽ là UNSPECIFIED.

Cách đồng bộ hóa hoạt động 

Ba quy tắc chi phối mỗi lần đồng bộ hóa.

Danh sách là có thẩm quyền tuyệt đối. taxExemptions là toàn bộ tập hợp của khách hàng, không phải là một danh sách các thay đổi. Bất kỳ miễn thuế nào đã có trong hồ sơ mà bị thiếu trong danh sách sẽ bị xóa — đó là cách một chứng chỉ đã bị thu hồi ngừng được công nhận. Gửi một danh sách không đầy đủ sẽ âm thầm xóa mọi thứ bị bỏ sót.

Mỗi hồ sơ là một miễn thuế. Không có cách nào để ghi nhận rằng một khách hàng không được miễn thuế ở đâu đó — xem lưu ý bên dưới.

Xóa toàn bộ miễn thuế nghĩa là gửi một danh sách rỗng. Để xóa các chứng chỉ của một khách hàng, hãy gửi kèm "taxExemptions": []. Nếu bỏ hẳn khách hàng ra khỏi payload thì các hồ sơ hiện có của họ sẽ không bị thay đổi.

Chỉ gửi các khu vực pháp lý mà khách hàng được miễn thuế

Zonos không có hồ sơ "không được miễn thuế" — một khu vực pháp lý hoặc có trong danh sách, hoặc không. Nếu hệ thống của bạn lưu trữ chung các khu vực pháp lý được miễn thuế và không được miễn thuế, hãy lọc ra những khu vực được miễn thuế trước khi đồng bộ hóa. Một hồ sơ không được miễn thuế không thể phân biệt được với một chứng chỉ thật, vì vậy nó sẽ được chấp nhận thay vì bị từ chối, và khách hàng sẽ được xem là được miễn thuế ở bang đó.

Lý do miễn thuế 

exemptionReason mô tả lý do khách hàng được miễn thuế. Trường này là tùy chọn và mặc định là UNSPECIFIED, nhưng việc cung cấp nó là xứng đáng với công sức bỏ ra — xem bên dưới.

Giá trị↕Áp dụng cho↕
RESALEHàng hóa được mua để bán lại thay vì tiêu dùng
FEDERAL_GOVERNMENTMột cơ quan hoặc bộ liên bang của Mỹ
STATE_LOCAL_GOVERNMENTMột cơ quan cấp bang, quận, thành phố hoặc học khu
TRIBAL_GOVERNMENTMột bộ tộc được liên bang công nhận hoặc thành viên của bộ tộc đó
CHARITABLEMột tổ chức phi lợi nhuận từ thiện
RELIGIOUS_ORGANIZATIONMột nhà thờ hoặc tổ chức tôn giáo khác
EDUCATIONAL_ORGANIZATIONMột trường học hoặc trường đại học
DIRECT_PAYMột người mua có giấy phép thanh toán trực tiếp và tự chuyển giao thuế
OTHERBất kỳ trường hợp nào khác, bao gồm nhà ngoại giao nước ngoài, sản xuất nông nghiệp, sản xuất công nghiệp và thư trực tiếp
UNSPECIFIEDKhông có lý do nào được cung cấp

Các lý do được chia thành hai nhóm, và sự khác biệt này rất quan trọng. Các lý do dựa trên thực thể — chính phủ, từ thiện, tôn giáo, giáo dục — miễn thuế cho người mua bất kể họ mua gì. Các lý do dựa trên mục đích sử dụng, đặc biệt là RESALE, chỉ áp dụng cho những hàng hóa đủ điều kiện: một chứng chỉ bán lại chỉ áp dụng cho hàng tồn kho mà người mua sẽ bán lại, chứ không áp dụng cho nội thất văn phòng trong cùng đơn hàng.

Nếu không có lý do, Zonos không thể phân biệt được hai loại này và chỉ có thể miễn thuế cho toàn bộ đơn hàng, điều này khó bảo vệ nhất đối với chứng chỉ bán lại. Nếu phần lớn các miễn thuế của bạn là bán lại, việc gửi RESALE làm giá trị mặc định và liệt kê các ngoại lệ riêng lẻ thường ít tốn công hơn nhiều so với việc phân loại từng khách hàng.

Số tham chiếu miễn thuế 

exemptionReference là số được in trên giấy tờ miễn thuế của khách hàng. Tùy thuộc vào bang và loại miễn thuế, đó có thể là số giấy phép bán lại hoặc giấy phép người bán, số chứng chỉ miễn thuế của bang, số giấy phép thanh toán trực tiếp, hoặc mã số thuế liên bang.

Trường này là bắt buộc trên mọi hồ sơ. Hãy lưu trữ và gửi nó chính xác như trên chứng chỉ — định dạng khác nhau rất nhiều theo từng khu vực pháp lý (SR EAA 12-345678, 85-8012345678C-9, 12-3456789), và Zonos giữ nguyên giá trị như đã gửi, ngoại trừ việc cắt bỏ khoảng trắng ở đầu và cuối. Không thay đổi cách viết hoa hoặc loại bỏ dấu gạch ngang và khoảng trắng.

Vì lý do bảo mật, exemptionReference có thể được gửi đi nhưng sẽ không được trả về khi đọc lại thông tin miễn thuế, vì nó có thể chứa mã số thuế liên bang.

Hồ sơ bị từ chối 

Các hồ sơ được xác thực từng cái một. Một hồ sơ bị từ chối sẽ được báo cáo trong rejected và không làm ảnh hưởng đến phần còn lại của lô, cũng như không làm xáo trộn miễn thuế đã có trong hồ sơ cho khu vực pháp lý đó.

Mã↕Nguyên nhân↕
UNKNOWN_CUSTOMERKhông có khách hàng nào khớp với customerId. Hãy tạo khách hàng trước
UNKNOWN_JURISDICTIONadministrativeArea không phải là một bang, đặc khu hoặc lãnh thổ được công nhận của Mỹ
INVALID_DATE_RANGEexpiresAt không sau effectiveAt
MISSING_EXEMPTION_REFERENCEexemptionReference bị để trống
DUPLICATE_JURISDICTIONHai hồ sơ trong cùng một payload có chung quốc gia, khu vực và ngày hiệu lực. Hồ sơ đầu tiên sẽ được giữ lại

Khách hàng không xác định sẽ bị từ chối thay vì được tạo mới, vì vậy một customerId bị gõ sai sẽ hiện rõ trong phản hồi thay vì tạo ra một hồ sơ không bao giờ khớp với người mua thật.

Chỉ các khu vực hành chính của Mỹ mới được xác thực. Các đơn vị hành chính của các quốc gia khác sẽ được chấp nhận nguyên trạng như đã gửi.

Đọc lại và xóa 

Đọc lại các miễn thuế của một khách hàng để xác nhận việc đồng bộ hóa đã thành công:

1query checkoutCustomerTaxExemptions($customerId: String!) {
2 checkoutCustomerTaxExemptions(customerId: $customerId) {
3 countryCode
4 administrativeArea
5 effectiveAt
6 expiresAt
7 exemptionReason
8 }
9}

Để xóa tất cả miễn thuế của một khách hàng — ví dụ như khi họ đóng tài khoản — hãy sử dụng checkoutCustomerTaxExemptionsDelete. Nó trả về SUCCESS bất kể khách hàng có miễn thuế nào hay không, vì vậy có thể gọi lại nhiều lần một cách an toàn.

1mutation checkoutCustomerTaxExemptionsDelete($customerId: String!) {
2 checkoutCustomerTaxExemptionsDelete(customerId: $customerId)
3}

Trang này có hữu ích không?