Tài liệu Mô tả webservice hóa đơn điện tử
Hà Nội, 01/2019
BẢNG GHI NHẬN THAY ĐỔI
Phiên bản | Ngày | Chi tiết |
0.1 | 09/2017 | Phiên bản khởi tạo |
0.2 | 03/2018 | Bổ sung thêm mục 2.1.11, 2.1.12, 2.1.13 |
0.3 | 09/2018 | Bổ sung thêm 2.1.14, 2.1.15 |
1.0 | 09/2018 | Bổ sung thêm chi tiết đặc tả bản tin, tổ chức lại tài liệu |
1.1 | 04/2019 | Bổ sung mục 7 mapping trường thông tin và mẫu hóa đơn |
2.4 | 05/2022 | Bổ sung mô tả thêm các trường của phiếu xuất kho TT78 ở mục 6.9 Metadata, File json ví dụ tại mục 7.2 |
2.5 | 06/2022 | Bổ sung thêm trường lý do huỷ hoá đơn ở mục 7.6 Bổ sung thêm trường lý do sai sót hoá đơn điều chỉnh thay thế ở mục 6.2 generaIInvoiceInfo, File json tại mục 7.2 và mục 7.15 Bổ sung cho truyền giá trị âm số lượng/đơn giá ở mục 6.6 itemInfo Bổ sung thêm trường Điều chỉnh hóa đơn không tồn tại qua API ở mục 6.2 generaIInvoiceInfo, File json tại mục 7.2 và mục 7.15 |
Tài khoản demo:
Link: vinvoice.viettel.vn User: 0100109106-509 Pass: 123456a@A |
STT | Từ viết tắt | Nghĩa đầy đủ |
XML | eXtensible Markup Language - Ngôn ngữ Đánh dấu Mở rộng | |
VAN | Taxation Value Added Network | |
ICC | Invoice Certification Center | |
PSD | Portable Security Device | |
SGML | Standard Generalized Markup Language | |
W3C | World Wide Web Consortium, viết tắt W3C, lập ra các chuẩn cho Internet, nhất là cho World Wide Web | |
SInvoice | Dịch vụ/hệ thống hóa đơn điện tử của Viettel | |
HTTH | Hệ thống phần mềm kế toán, quản trị doanh nghiệp tích hợp với hệ thống SInvoice để phát hành hóa đơn. |
Mô tả chi tiết chuẩn kết nối để các hệ thống có thể kết nối vào dịch vụ Hóa đơn điện tử đại trà của Viettel nhằm đảm bảo phát hành đúng thông tin.
Hệ thống SInvoice đóng vai trò nhận dữ liệu hóa đơn từ các hệ thống bên ngoài (hệ thống tích hợp) gửi về và phát hành thành hóa đơn theo mẫu mà doanh nghiệp đã chọn. Các API của hệ thống SInvoice được cung cấp theo chuẩn Restful Webservice.
Ban đầu, doanh nghiệp thực hiện các thao tác khai báo mẫu hóa đơn trên web của hệ thống SInvoice bao gồm:
Chi tiết các bước hướng dẫn có thể xem thêm tại: https://sinvoice.viettel.vn/ho-tro/huong-dan-su-dung/mo-ta-tong-the-cac-buoc-dang-ky-va-su-dung-dich-vu-hoa-don-dien-tu
Sau khi các thông tin khai báo mẫu hóa đơn đã được thực hiện đầy đủ trên SInvoice, doanh nghiệp có thể thông qua các hệ thống bên ngoài để gọi các API thực hiện việc
Lưu ý 1: Lập hóa đơn sử dụng chữ ký số HSM và USB token sử dụng các hàm khác nhau. HSM sử dụng 1 hàm duy nhất, việc tương tác với chữ ký do hệ thống Hóa đơn điện tử đảm nhiệm. USB sử dụng 2 hàm khác nhau, việc tương tác với chữ ký do phần mềm tích hợp đảm nhiệm. Khách hàng cần được tư vấn trước khi sử dụng.
Lưu ý 2: Một doanh nghiệp có thể có nhiều mã số thuế (doanh nghiệp, chi nhánh), mẫu hóa đơn, ký hiệu hóa đơn. Vì vậy các hệ thống tích hợp phải cho phép DN cấu hình nhiều thông tin để gửi sang hệ thống SInvoice.
Toàn bộ trường dữ liệu chỉ định sử dụng tiêu chuẩn 4.1 này,kiểu datetime (đầy đủ giờ, phút, giây. Hiện tại hệ thống chỉ ghi nhận đến giá trị giây, không ghi nhận giá trị mili giây) đầu vào và đầu ra của 20 API theo tiêu chuẩn này chuyển hết về dạng longTime.
Ví dụ: 1587797116000.Cách tính toán DATE như hình ảnh:
Tham khảo trang web: https://currentmillis.com/
Các ký tự đặc biệt cần lưu ý và cách xử lý theo đúng chuẩn json (cần ký tự đánh dấu để nhận dạng ký tự đặc biệt)
Trong json cần thêm ký tự đánh dấu \ trước các ký tự đặc biệt.
VD:
Thì cần truyền trong json như sau: "buyerName": "Nguyễn Văn A \"B\""
API: /auth/login
Method: POST
Content-Type: application/json
Body: {"username":"0100109106-712","password":"12345678aA@"}
Ví dụ cách sử dụng token với Postman
Kết quả:
Sau đó sử dụng access_token tại Headers
Đối với các API lập hóa đơn, điều chỉnh hóa đơn, thay thế hóa đơn, lập hóa đơn nháp, lập hóa đơn usb token, xem trước hóa đơn nháp các trường dữ liệu truyền vào sẽ có dạng chung
{
"generalInvoiceInfo":{ //Thông tin chung của hóa đơn
},
"buyerInfo":{ //thông tin người mua
},
"sellerInfo":{ //thông tin người bán
},
"payments":[ //thông tin thanh toán
],
"itemInfo":[ //thông tin hàng hóa
],
"metadata":[ //thông tin trường động
],
"meterReading": //thông tin đặc biệt dành cho hóa đơn điện nước
],
"summarizeInfo":{ //thông tin tổng hợp tiền của hóa đơn
},
"taxBreakdowns":[ //thông tin gom nhóm tiền hóa đơn theo thuế suất
]
}
Mô tả:
Tên trường | Mô tả |
generalInvoiceInfo | Đây là thông tin chung để phát hành hóa đơn, bao gồm ký hiệu mẫu hóa đơn, ký hiệu hóa đơn, loại hóa đơn, ngày lập .v.v.v |
sellerInfo | Thông tin về bên bán trên hóa đơn. Trong trường hợp bên tích hợp gửi MST sang thì hệ thống sẽ lấy toàn bộ dữ liệu do bên tích hợp gửi sang, nếu không gửi sang thì hệ thống lấy thông tin được cấu hình trên hệ thống. |
buyerInfo | Thông tin về bên mua trên hóa đơn |
extAttribute | Trường dữ liệu mở rộng, để tùy biến thêm trên mẫu hóa đơn. |
payments | Tên phương thức thanh toán của hóa đơn. |
itemInfo | Thông tin chi tiết hàng hóa của hóa đơn. |
taxBreakdowns | Tổng hợp thông tin thuế suất của hóa đơn theo mức thuế suất, ví dụ -2, -1, 0, 5, 10 |
summarizeInfo | Tổng hợp tiền hàng của cả hóa đơn |
metadata | Thông tin trường động của hóa đơn |
meterReading | Thông tin đặc biệt, dùng cho hóa đơn điện/nước. |
Chứa thông tin cơ bản của hóa đơn,
Tên trường | Kiểu dữ liệu | Mô tả |
invoiceType | Required: false DataType: String Minlength: Maxlength: Format: | Mã loại hóa đơn chỉ nhận các giá trị sau: Thông tư 32: 01GTKT, 02GTTT, 07KPTQ, 03XKNB, 04HGDL, 01BLP. Tuân thủ theo quy định ký hiệu loại hóa đơn của Thông tư hướng dẫn thi hành nghị định số 51/2010/NĐ-CP. Chi tiết xem PL1 Thông tư 39/2014/TT-BTC. Thông tư 78: 1, 2, 3, 4. Tuân thủ theo đúng Thông tư 78/2021/TT-BTC Lưu ý: tại một thời điểm, doanh nghiệp có thể sử dụng nhiều loại hóa đơn. |
templateCode | Required: true DataType: String Minlength: N/A Maxlength: 20 Format: | Ký hiệu mẫu hóa đơn, tuân thủ theo quy định ký hiệu mẫu hóa đơn của Thông tư hướng dẫn thi hành Thông tư 32: Nghị định số 51/2010/NĐ-CP Ví dụ 01GTKT0/001, trong đó 01GTKT: ký hiệu loại hóa đơn 0: số liên, đối với hóa đơn điện tử luôn là 0 001: số thứ tự tăng dần theo số lượng mẫu DN đăng ký với cơ quan thuế Chi tiết xem PL1 Thông tư 39/2014/TT-BTC Thông tư 78: Ví dụ: 1/001 trong đó 1: Ký hiệu loại hóa đơn 001: Thứ tự tăng dần theo số lượng mẫu DN đăng ký với cơ quan thuế Chi tiết tại khoản 1, Điều 3 Thông tư 68/2019/TT-BTC Lưu ý: tại một thời điểm, doanh nghiệp có thể có nhiều mẫu hóa đơn.
|
invoiceSeries | Required : true DataType: String Minlength : NA Maxlength : 7 Format : ^[a-zA-Z0-9/]*$ | Là “Ký hiệu hóa đơn” tuân thủ theo quy tắc tạo ký hiệu hóa đơn của Thông tư hướng dẫn thi hành Thông tư 32: Nghị định số 51/2010/NĐ-CP. Ví dụ AA/20E. Chi tiết xem PL1 Thông tư 39/2014/TT-BTC Thông tư 68: Ví dụ: K20TYY Chi tiết tại khoản 1, Điều 3 Thông tư 68/2019/TT-BTC Lưu ý: Tại một thời điểm, doanh nghiệp có thể có nhiều ký hiệu hóa đơn.
|
invoiceIssuedDate | Required: false DataType: Datetime Minlength: N/A Maxlength: 50 Format: Mục 4.1 | Ngày lập hóa đơn, tuân theo nguyên tắc đảm bảo về trình tự thời gian trong 1 ký hiệu hóa đơn của một mẫu hóa đơn với một mã số thuế cụ thể: số hóa đơn sau phải được lập với thời gian lớn hơn hoặc bằng số hóa đơn trước. Lưu ý:
- Dữ liệu truyền vào là thời gian dạng milliseconds kiểu long trong mục 4.1 Hệ thống ghi nhận đến chỉ số giây. Có thể tham khảo công thức tính tại: https://currentmillis.com/ |
currencyCode | Required: true DataType: String Minlength: 3 Maxlength: 3 Format: [A-Z]+ | Mã tiền tệ dùng cho hóa đơn có chiều dài 3 ký tự theo quy định của ngân hàng nhà nước Việt Nam. Ví dụ: USD, VND, EUR…
|
adjustmentType | Required: false DataType: String Minlength: Maxlength: 1 Format: | Trạng thái điều chỉnh hóa đơn: 1: Hóa đơn gốc 3: Hóa đơn thay thế 5: Hóa đơn điều chỉnh 7: Hóa đơn xóa bỏ Không truyền sẽ mặc định là 1 |
adjustedNote | Required: False DataType: String Minlength: N/A Maxlength: 255 Format: | Lý do sai sót Cho phép nhập chuỗi ký tự tối đa 255 ký tự. Không bắt buộc truyền. Đặt trong generalInvoiceInfo |
adjustmentInvoiceType | Required: false DataType: String Minlength: Maxlength: 1 Format: | Loại điều chỉnh đối với hóa đơn điều chỉnh 1: Hóa đơn điều chỉnh tiền 2: Hóa đơn điều chỉnh thông tin Bắt buộc nhập nếu adjustmentType = 5 |
originalInvoiceId | Required: false DataType: String Minlength: 7 Maxlength: 15 Format: ^[a-zA-Z0-9]*$ | Số hóa đơn của hóa đơn gốc trong trường hợp lập hóa đơn là: Hóa đơn thay thế Hóa đơn điều chỉnh Số hóa đơn có dạng AA20E00000001, trong đó AA20E: ký hiệu hóa đơn 00000001: số thứ tự tăng dần Chi tiết xem PL1 Thông tư 39/2014/TT-BTC |
originalInvoiceIssueDate | Required: false DataType: Date Minlength: N/A Maxlength: 50 Format: yyyy-MM-dd | Thời gian lập hóa đơn gốc, bắt buộc trong trường hợp lập hóa đơn thay thế và hóa đơn điều chỉnh. Dùng để tìm kiếm hóa đơn gốc của hóa đơn thay thế, điều chỉnh
|
additionalReferenceDesc | Required : false DataType: String Minlength : Maxlength : 225 Format : | Thông tin tham khảo nếu có kèm theo của hóa đơn: văn bản thỏa thuận giữa bên mua và bên bán về việc thay thế, điều chỉnh hóa đơn. Bắt buộc khi lập hóa đơn thay thế, hóa đơn điều chỉnh.
|
additionalReferenceDate | Required: false DataType: Date Minlength: N/A Maxlength: 50 Format: Mục 4.1 | Thời gian phát sinh văn bản thỏa thuận giữa bên mua và bên bán, bắt buộc khi lập hóa đơn thay thế, hóa đơn điều chỉnh. - Dữ liệu truyền vào là thời gian dạng milisecond kiểu long trong mục 4.1
|
paymentStatus | Required: true DataType: Boolean Minlength: Maxlength: 1 Format: | Trạng thái thanh toán của hóa đơn True: Đã thanh toán False: Chưa thanh toán
|
cusGetInvoiceRight | Required: false DataType: Boolean Minlength: Maxlength: 1 Format: | Cho phép người dùng tra cứu hóa đơn hay không. Mặc định true. Nếu để giá trị false thì sẽ không view được hóa đơn lên
|
exchangeRate | Required: false DataType: BigDecimal Minlength: Maxlength: 13 Format: | Tỷ giá ngoại tệ tại thời điểm lập hóa đơn quy đổi ra VND Lưu ý: Phần nguyên được nhập tối đa 11 chữ số, phần thập phân tối đa là 2 chữ số
|
transactionUuid | Required: false DataType: String Minlength: 10 Maxlength: 36 Format: | Chú ý: Dữ liệu này không bắt buộc trong chuỗi json nhưng các phần mềm nên có để kiểm soát dữ liệu trùng cho các hóa đơn. ID để kiểm trùng giao dịch lập hóa đơn, được sinh ra từ hệ thống của bên đối tác, là duy nhất với mỗi hóa đơn. Trong trường hợp gửi transactionUuid thì bên hệ thống đối tác sẽ tự quản lý để đảm bảo tính duy nhất của transactionUuid. Với mỗi transactionUuid, khi đã gửi một transactionUuid với một hóa đơn A thì mọi request lập hóa đơn với cùng transactionUuid sẽ trả về hóa đơn A chứ không lập hóa đơn khác. Thời gian hiệu lực của transactionUuid là 3 ngày. Khuyến cáo: sử dụng UUID V4 để tránh bị trùng số. Tham khảo: https://en.wikipedia.org/wiki/Universally_unique_identifier |
certificateSerial | Required: false DataType: String Minlength: Maxlength: 100 Format: | Được sử dụng khi lập hóa đơn sử dụng USB Token. Serial Number của chứng thư số của doanh nghiệp, chứng thư số này đã được doanh nghiệp đẩy lên trên hệ thống khi đăng ký sử dụng USB Token. Định dạng Hex. Ví dụ: 5404FFFEB7033FB316D672201B7BA4FE |
originalInvoiceType | DataType: String Minlength: N/A Maxlength: Format: | Loại hóa đơn gốc Truyền giá trị số với ý nghĩa như sau 0- Không phải hóa đơn giấy/hóa đơn không tồn tại trên hệ thống 1-Hóa đơn TT78 2-Hóa đơn theo QĐ 1209 3-Hóa đơn điện tử/giấy TT32 4-Hóa đơn giấy TT 78 |
Required: DataType: String Minlength: N/A Maxlength: 20 Format: | Bắt buộc truyền nếu originalInvoiceType là 1, 2, 3 hoặc 4[V5] [T6] Ví dụ mẫu TT32: 01GTKT0/001 Ví dụ mẫu TT78: 1/0224 |
Dữ liệu mẫu
Hóa đơn thường
"generalInvoiceInfo": {
"transactionUuid": "859f390a-1e59-4a05-9663-1e9ec7afdb8f",
"invoiceType": "01GTKT",
"templateCode": "01GTKT0/001",
"invoiceSeries": "AB/20E",
"invoiceIssuedDate": 1605027600000,
"currencyCode": "VND",
"adjustmentType": "1",
"paymentStatus": true,
"cusGetInvoiceRight": true
}
Hóa đơn điều chỉnh tiền
"generalInvoiceInfo": {
"transactionUuid": "859f390a-1e59-4a05-9663-1e9ec7afdb8f",
"invoiceType": "01GTKT",
"templateCode": "01GTKT0/001",
"invoiceSeries": "AB/20E",
"invoiceIssuedDate": 1605027600000,
"currencyCode": "VND",
"adjustmentType": "5",
"adjustmentInvoiceType": "1",
"originalInvoiceId": "AB/20E0000036",
"originalInvoiceIssueDate": 1605027600000,
"additionalReferenceDesc": "Văn bản",
"additionalReferenceDate": 1605027600000,
"paymentStatus": true,
"cusGetInvoiceRight": true
}
Hóa đơn điều chỉnh thông tin
"generalInvoiceInfo": {
"transactionUuid": "859f390a-1e59-4a05-9663-1e9ec7afdb8f",
"invoiceType": "01GTKT",
"templateCode": "01GTKT0/001",
"invoiceSeries": "AB/20E",
"invoiceIssuedDate": 1605027600000,
"currencyCode": "VND",
"adjustmentType": "5",
"adjustedNote": "",
"adjustmentInvoiceType": "2",
"originalInvoiceId": "AB/20E0000036",
"originalInvoiceIssueDate": 1605027600000,
"additionalReferenceDesc": "Văn bản",
"additionalReferenceDate": 1605027600000,
"originalInvoiceType": "1",
"originalTemolateCode": "1/0224",
"paymentStatus": true,
"cusGetInvoiceRight": true
}
Hóa đơn thay thế
"generalInvoiceInfo": {
"transactionUuid": "859f390a-1e59-4a05-9663-1e9ec7afdb8f",
"invoiceType": "01GTKT",
"templateCode": "01GTKT0/001",
"invoiceSeries": "AB/20E",
"invoiceIssuedDate": 1605027600000,
"currencyCode": "VND",
"adjustmentType": "3",
"adjustedNote": "",
"originalInvoiceId": "AB/20E0000037",
"originalInvoiceIssueDate": 1605027600000,
"additionalReferenceDesc": "Văn bản",
"additionalReferenceDate": 1605027600000,
"originalInvoiceType": "1",
"originalTemolateCode": "1/0224",
"paymentStatus": true,
"cusGetInvoiceRight": true
}
Thông tin người bán trên hóa đơn, có thể được truyền sang hoặc lấy tự động trên hệ thống hóa đơn điện tử. Trong trường hợp sellerTaxCode KHÔNG ĐƯỢC truyền sang thì dữ liệu sẽ được lấy từ hệ thống hóa đơn điện tử.
Chú ý 1: Các trường dữ liệu có required = true khi có truyền sellerTaxCode, nếu không truyền sellerTaxCode thì các trường khác được lấy từ hệ thống HDDT, không lấy từ thông tin truyền vào.
Chú ý 2: sellerTaxCode phải trùng khớp với taxCode của user đăng nhập
Tên trường | Kiểu dữ liệu | Mô tả |
sellerLegalName | Required: true DataType: String Minlength: Maxlength: 255 Format: N/A | Tên (đăng ký kinh doanh trong trường hợp là doanh nghiệp) của người bán
|
sellerTaxCode | DataType: String Minlength: Maxlength: 20 Format: | Mã số thuế người bán được cấp bởi TCT Việt Nam. Mẫu 1: 0312770607 Mẫu 2: 0312770607-001 Mã số này được dùng để kiểm tra xem dữ liệu sẽ lấy từ hệ thống SInvoice hay do phần mềm tích hợp truyền sang. Nếu có dữ liệu thì sẽ lấy toàn bộ thông tin người bán từ phần mềm tích hợp. Nếu không có sẽ lấy thông tin được cấu hình trên SInvoice. Mã số này không được dùng để phát hành lên hóa đơn.
|
sellerAddressLine | Required: true DataType: String Minlength: Maxlength: 255 Format: N/A | Địa chỉ của bên bán được thể hiện trên hóa đơn.
|
sellerPhoneNumber | Required: false DataType: String Minlength: Maxlength: 50 Format: \s*[0-9]*\s* | Số điện thoại người bán
|
sellerFaxNumber | Required: false DataType: String Minlength: Maxlength: 50 Format: \s*[0-9]*\s* | Số fax người bán
|
sellerEmail | Required: false DataType: String Minlength: Maxlength: 50 Format: \s{0,}(([a-zA-Z0-9][a-zA-Z0-9_*$&+,:;=?#|'<>.^*()%!-]{2,}@[a-zA-Z0-9]{2,}(\.[a-zA-Z0-9]{2,}){1,})+)\s{0,} | Địa chỉ thư điện tử người bán
|
sellerBankName | Required: false DataType: String Minlength: Maxlength: 400 Format: | Tên ngân hàng nơi người bán mở tài khoản giao dịch
|
sellerBankAccount | Required: false DataType: String Minlength: Maxlength: 200 Format: \s*[0-9]*\s* | Tài khoản ngân hàng của người bán
|
sellerDistrictName | Required: false DataType: String Minlength: Maxlength: 50 Format: | Tên Quận Huyện
|
sellerCityName | Required: false DataType: String Minlength: Maxlength: 600 Format: | Tên Tỉnh/Thành phố
|
sellerCountryCode | Required: false DataType: String Minlength: Maxlength: 15 Format: | Mã quốc gia
|
sellerWebsite | Required: false DataType: String Minlength: Maxlength: 200 Format: | Website của người bán
|
Dữ liệu mẫu
"sellerInfo": {
"sellerLegalName": "Người bán hàng",
"sellerTaxCode": "0100109106",
"sellerAddressLine": "Thành Phố Hà Nội - Việt Nam",
"sellerPhoneNumber": "0123456789",
"sellerFaxNumber": "0123456789",
"sellerEmail": "[email protected]",
"sellerBankName": "Ngân hàng ",
"sellerBankAccount": "012345678901",
"sellerDistrictName": "",
"sellerCityName": "Thành Phố Hà Nội",
"sellerCountryCode": "84”,
"sellerWebsite": "sinvoice.viettel.vn"
}
Thông tin người mua trên hóa đơn.
Tên trường | Kiểu dữ liệu | Mô tả |
buyerName | Required: false DataType: String Minlength: Maxlength: 800 Format: | Tên người mua trong trường hợp là người mua lẻ, cá nhân. Tên người mua hoặc tên đơn vị là bắt buộc khi buyerNotGetInvoice = 0
|
buyerCode | Required: false DataType: String Minlength: Maxlength: 400 Format: | Mã khách hàng, chỉ cho phép các ký tự
|
buyerLegalName | Required: false DataType: String Minlength: Maxlength: 1200 Format: | Tên đơn vị (đăng ký kinh doanh trong trường hợp là doanh nghiệp) của người mua. Tên người mua hoặc tên đơn vị là bắt buộc.
|
buyerTaxCode | Required: false DataType: String Minlength: Maxlength: 20 Format:
| Mã số thuế người mua, có thể là mã số thuế Việt Nam hoặc mã số thuế nước ngoài Mẫu 1: 0312770607 Mẫu 2: 0312770607-001 Bắt buộc khi buyerNotGetInvoice = 0
|
buyerAddressLine | Required: false DataType: String Minlength: Maxlength: 1200 Format: | Địa chỉ xuất hóa đơn của người mua Bắt buộc khi buyerNotGetInvoice = 0
|
buyerPhoneNumber | Required: false DataType: String Minlength: Maxlength: 15 Format: \s*[0-9]*\s* | Số điện thoại người mua, số điện thoại sẽ được dùng để gửi tin nhắn trong trường hợp bên bán đăng ký dịch vụ SMS Brandname.
|
buyerFaxNumber | Required: false DataType: String Minlength: Maxlength: Format: | Số fax người mua
|
buyerEmail | Required: false DataType: String Minlength: Maxlength: 2000 Format: ^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$ (áp dụng cho từng email đơn lẻ) | Email người mua, sử dụng để gửi hóa đơn cho người mua Nếu có nhiều email thì cách nhau bởi dấu chấm phẩy (;). Khi tài khoản email của bên bán được cấu hình trên hệ thống thì hệ thống tự động gửi nếu có email của người mua. Chi tiết cấu hình email xem ở đây: https://sinvoice.viettel.vn/ho-tro/huong-dan-su-dung/5-huong-dan-cau-hinh-doanh-nghiep--cau-hinh-chung
|
buyerBankName | Required: false DataType: String Minlength: Maxlength: 200 Format: | Tên trụ sở chính ngân hàng nơi người mua mở tài khoản giao dịch.
|
buyerBankAccount | Required: false DataType: String Minlength: Maxlength: 100 Format: | Tài khoản ngân hàng của người mua.
|
buyerDistrictName | Required: false DataType: String Minlength: Maxlength: Format: | Tên Quận Huyện
|
buyerCityName | Required: false DataType: String Minlength: Maxlength: Format: | Tên Tỉnh/Thành phố
|
buyerCountryCode | Required: false DataType: String Minlength: Maxlength: Format: | Mã quốc gia người mua
|
buyerIdType | Required: false DataType: String Minlength: Maxlength: Format: [123]* | Loại giấy tờ của người mua,
|
buyerIdNo | Required: false DataType: String Minlength: Maxlength: 200 Format: [a-zA-Z0-9-_ ]* | Chú ý: Khi buyerIdType có giá trị thì buyerIdNo bắt buộc phải có giá trị. Số giấy tờ của người mua, có thể là chứng minh thư, giấy phép kinh doanh, hộ chiếu
|
buyerBirthDay | Required: false DataType: Date Minlength: Maxlength: Format: | Ngày sinh của người mua
|
buyerNotGetInvoice | Required: false DataType: Integer Minlength: 0 Maxlength: 1 Format: | Người mua không lấy hóa đơn 0-Người mua có lấy hóa đơn 1-Người mua không lấy hóa đơn Nếu không truyền, mặc định là 0 |
Dữ liệu mẫu
"buyerInfo": {
"buyerName": "Tên khách hàng",
"buyerLegalName": "Tên đơn vị",
"buyerTaxCode": "0100109106",
"buyerAddressLine": "An Khánh Hoài Đức Hà Nội",
"buyerPostalCode": "2342324323",
"buyerDistrictName": "Số 9, đường 11, VSIP Bắc Ninh, Thị xã Từ Sơn, Tỉnh",
"buyerCityName": "Thành Phố Hà Nội",
"buyerCountryCode": "84",
"buyerPhoneNumber": "987999999",
"buyerFaxNumber": "0458954",
"buyerEmail": "[email protected]",
"buyerBankName": "Ngân hàng Quân đội MB",
"buyerBankAccount": "01578987871236547",
"buyerIdType": "3",
"buyerIdNo": "8888899999",
"buyerCode": "832472343b_b",
"buyerBirthDay": ""
}
Tên trường | Kiểu dữ liệu | Mô tả |
paymentMethod | Required: false DataType: String Minlength: Maxlength: 50 Format: | Hình thức thanh toán. Có thể không cần truyền giá trị, chỉ cần truyền paymentMethodName - Gồm các giá trị sau: 1: khi hình thức thanh toán là TM 2: khi hình thức thanh toán là CK 3: khi hình thức thanh toán là TM/CK 4: khi hình thức thanh toán là DTCN 5: khi hình thức thanh toán là KHAC - Không truyền dữ liệu thì sẽ được hiểu là 5 |
paymentMethodName | Required: true DataType: String Minlength: Maxlength: 50 Format: | Hình thức thanh toán chi tiết phải mapping theo paymentMethod. - Gồm các giá trị sau: TM CK TM/CK DTCN KHAC - Không truyền dữ liệu thì trả về thông báo lỗi - Được nhập free text khi paymentMethod = 5, được hiểu là hình thức thanh toán khác |
Dữ liệu mẫu
"payments": [
{
"paymentMethod": "2",
"paymentMethodName": "CK"
}
]
Hoặc
"payments": [
{
"paymentMethodName": "Truyền trực tiếp giá trị mong muốn vào đây"
}
]
Là một danh sách các hàng hóa/dịch vụ được hiển thị trên hóa đơn
Tên trường | Kiểu dữ liệu | Mô tả |
lineNumber | Required: false DataType: Integer Minlength: Maxlength: Format: | Thứ tự dòng hóa đơn, bắt đầu từ 1 Không cần nhập, hệ thống tự động sinh |
selection | Required: false DataType: Integer Min: 1 Max: 6 Format: | Đánh dấu loại hàng hóa/dịch vụ Đối với Thông tư 32: Null hoặc 1- Hàng Hóa (Sinh STT, bắt buộc phải nhập số lượng, đơn giá) 2: Ghi chú (Không sinh STT và không cộng tiền vào tổng tiền thanh toán) 3: Chiết khấu (Không sinh STT, không cần nhập số lượng, đơn giá và thêm isIncreaseItem = false để xác định giảm tiền) 4: Bảng kê (Sinh STT, không cần nhập số lượng, đơn giá, chỉ cần nhập thành tiền) 5: Phí khác (Sinh STT, bắt buộc nhập số lượng, đơn giá) Đối với Thông tư 78: Null hoặc 1- Hàng Hóa (Sinh STT, bắt buộc phải nhập số lượng, đơn giá) 5: Khuyến mại (Sinh STT, bắt buộc phải nhập số lượng, đơn giá) 3: Chiết khấu (Không sinh STT, không cần nhập số lượng, đơn giá và thêm isIncreaseItem = false để xác định giảm tiền) 2: Ghi chú (Không sinh STT và không cộng tiền vào tổng tiền thanh toán) 4: Phí khác (Sinh STT, bắt buộc nhập số lượng, đơn giá)
|
itemCode | Required: false DataType: String Minlength: Maxlength: 50 Format: | Mã hàng hóa, dịch vụ |
itemName | Required: false DataType: String Minlength: Maxlength: 500 Format: | Tên hàng hóa, dịch vụ Bắt buộc nhập với tính chất hàng hóa là Hàng hóa, Khuyến mãi và Phí khác Đối với hóa đơn điều chỉnh, Hệ thống sẽ dựa vào giá trị của isIncreaseItem xác định điều chỉnh tăng, giảm để tự sinh câu mô tả: "Điều chỉnh tăng/giảm tiền hàng, tiền thuế của hàng hóa dịch vụ" + itemName |
unitCode | Required: false DataType: String Minlength: Maxlength: Format: | Mã đơn vị tính
|
unitName | Required: false DataType: String Minlength: Maxlength: 100 Format: | Tên đơn vị tính hàng hóa, dịch vụ
|
unitPrice | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | Đơn giá của hàng hóa, không có số âm. Bắt buộc nhập với tính chất hàng hóa là Hàng hóa, Khuyến mãi và Phí khác Bổ sung cho phép truyền giá trị âm với hóa đơn điều chỉnh giảm
|
quantity | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | Số lượng của hàng hóa, luôn là số dương Bắt buộc nhập với tính chất hàng hóa là Hàng hóa, Khuyến mãi và Phí khác Bổ sung cho phép truyền giá trị âm với hóa đơn điều chỉnh giảm
|
itemTotalAmountWithoutTax | Required: true DataType: BigDecimal Minlength: Maxlength: 13 Format: [0-9.]+ | Là tổng tiền chưa bao gồm VAT của hàng hóa/dịch vụ. Tổng tiền không có số âm. itemTotalAmountWithoutTax = quantity * unitPrice Hệ thống sẽ kiểm tra dữ liệu nhận được vế bên trái với dữ liệu tính toán vế bên phải để kiểm tra tính chính xác của dữ liệu. Hóa đơn thường: Là tổng tiền hàng hóa dịch vụ chưa có VAT. Hóa đơn điều chỉnh: Là tổng tiền phần điều chỉnh của hàng hóa dịch vụ chưa có VAT Lưu ý: Cho phép sai số 5 đơn vị
|
taxPercentage | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | Trong trường hợp thuế tổng/hóa đơn bán hàng (theo chuẩn hóa đơn xác thực là phải có)
Thuế suất của hàng hóa, dịch vụ. Thuế suất bao gồm các loại: -2: không thuế -1: không kê khai tính/nộp thuế Chỗ này hơi ngược với hóa đơn có mã xác thực của TCT 0: 0% 5: 5% 10: 10%
|
taxAmount | Required: false DataType: BigDecimal Minlength: Maxlength Format: [0-9.]+ | Trong trường hợp thuế tổng/hóa đơn bán hàng: (theo chuẩn hóa đơn xác thực là phải có)
Tổng tiền thuế Nếu không truyền, được hiểu là = 0
|
isIncreaseItem | Required: false DataType: Boolean Minlength: Maxlength: Format:
| Hóa đơn bình thường: có giá trị là null. Hóa đơn điều chỉnh: - false: dòng hàng hóa/dịch vụ bị điều chỉnh giảm - true: dòng hàng hóa/dịch vụ bị điều chỉnh tang
|
itemNote | Required: false DataType: String Minlength: Maxlength: Format: | Ghi chú cho từng dòng hàng hóa
|
batchNo | Required: false DataType: String Minlength: Maxlength: 50 Format: | Số lô, thường dùng cho các hàng hóa là thuốc, có thể sử dụng để hiển thị thêm thông tin trong trường hợp cần thiết.
|
expDate | Required: false DataType: String Minlength: Maxlength: 50 Format: | Hạn sử dụng của hàng hóa, thường dùng cho các hàng hóa là thuốc, có thể sử dụng để hiển thị thêm thông tin trong trường hợp cần thiết.
|
discount | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | % chiết khấu trên dòng sản phẩm, tính trên đơn giá của sản phẩm. Trong trường hợp không có thì truyền 0
|
discount2 | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | % chiết khấu thứ 2 trên dòng sản phẩm, tính trên đơn giá của sản phẩm. Trong trường hợp không có thì truyền 0.
|
itemDiscount | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | Giá trị chiết khấu trên dòng sản phẩm, sau khi nhân với số lượng và % chiết khấu Hệ thống tự tính, không cần truyền dữ liệu
|
itemTotalAmountAfterDiscount | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | Là tổng tiền sau khi trừ chiết khấu, giảm giá. Hệ thống tự tính, không cần truyền dữ liệu
|
itemTotalAmountWithTax | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | Là tổng tiền đã bao gồm VAT của hàng hóa/dịch vụ. Hệ thống tự tính, không cần truyền dữ liệu
|
Lưu ý: Đối với từng dòng hàng hóa, trong trường hợp các trường thông tin như quantity, unitPrice, itemTotalAmountWithoutTax, taxPercentage, taxAmount, discount, itemDiscount, itemTotalAmountWithTax có dữ liệu (dữ liệu khác null), hệ thống sẽ tính toán và kiểm tra các dữ liệu
Hệ thống so sánh quantity x unitPrice lệch không quá 5 đồng so với itemTotalAmountWithoutTax
Hệ thống so sánh itemTotalAmountWithoutTax khi bị lệch quá hệ thống báo lỗi.
Dòng ghi chú cho hóa đơn điều chỉnh, thay thế tổng hợp hệ thống sẽ tự động thêm.
VD Điều chỉnh tăng tiền hàng, tiền thuế của hàng hóa dịch vụ: Hàng hóa 01, hệ thống sẽ tự tổng hợp lại và sinh 1 item dạng selection =2 với nội dung tổng hợp như sau, hệ thống phần mềm không cần thêm, tránh trùng lặp:
Hóa đơn điều chỉnh tăng tiền hàng, tiền thuế cho hóa đơn điện tử mẫu số01GTKT0/002, kí hiệu AA/20E, số hóa đơn AA/20E0000162, ngày lập09:22:25 19/11/2020: số tiền: 165,495 VN
Hóa đơn thay thế cho hóa đơn điện tử mẫu số 01GTKT0/002, kí hiệuAA/20E, số hóa đơn AA/20E0000156, ngày lập 14:01:00 18/11/2020
Dữ liệu mẫu
"itemInfo": [
{ hàng_hóa_1}, { hàng_hóa_1}
]
Hàng hóa thông thường
"itemInfo": [
{
"lineNumber": 1,
"itemCode": "PCDELLV3653_i56400_R4H10DVDRW",
"itemName": "Máy tính để bàn DELL VOSTRO 3653 Desktop Core i5-6400 upto3.30Ghz/ 4GB/ 1TB HDD/DVDRW/NVIDIA Geforce 705 2Gb/ Wireless-Bluetooth/ K/ M/1Yr Pro",
"unitName": "Cái",
"itemNote": "",
"unitPrice": 10300000,
"quantity": 1,
"itemTotalAmountWithoutTax": 10300000,
"itemTotalAmountWithTax": 11330000,
"itemTotalAmountAfterDiscount": 10300000,
"taxPercentage": 10,
"taxAmount": 1030000,
"customTaxAmount": "0",
"discount": 0,
"itemDiscount": 0,
"batchNo": "",
"expDate": ""
}
]
Hàng hóa kèm ghi chú:
"itemInfo": [
{
"lineNumber": 2,
"selection": 2,
"itemName": "Ghi chú cho hóa đơn",
}
]
Hàng hóa có chiết khấu trên dòng sản phẩm
"itemInfo": [
{
"lineNumber": 1,
"itemCode": "LCDLI2215S_LNV",
"itemName": "Màn hình vi tính LENOVO LCD LI2215S 21.5\" Led (65CCAACC6VN)",
"unitName": "Cái",
"itemNote": "",
"unitPrice": 1750000,
"quantity": 2,
"itemTotalAmountWithoutTax": 3500000,
"itemTotalAmountWithTax": 3696000,
"itemTotalAmountAfterDiscount": 3360000,
"taxPercentage": 10,
"taxAmount": 336000,
"customTaxAmount": "0",
"discount": 4,
"itemDiscount": 140000,
"batchNo": "",
"expDate": ""
}
]
Hàng hóa có dòng chiết khấu
"itemInfo": [
{
"lineNumber": 2,
"itemCode": "chieu_khau_hang_hoa",
"selection": 3,
"itemName": "Chiếu khấu hàng hóa",
"unitName": "",
"itemNote": "",
"itemTotalAmountWithoutTax": 50000,
"itemTotalAmountWithTax": 50000,
"itemTotalAmountAfterDiscount": 50000,
"taxPercentage": 0,
"taxAmount": 0,
"customTaxAmount": "0",
"discount": 0,
"itemDiscount": 0,
"isIncreaseItem": false,
"batchNo": "",
"expDate": ""
}
]
Hàng hóa dạng bảng kê
"itemInfo": [
{
"lineNumber": 1,
"itemCode": "bang_ke_hang_hoa",
"selection": 4,
"itemName": "Bảng kê hàng hóa",
"unitName": "",
"itemNote": "",
"itemTotalAmountWithoutTax": 97770000,
"itemTotalAmountWithTax": 107547000,
"itemTotalAmountAfterDiscount": 97770000,
"taxPercentage": 10,
"taxAmount": 9777000,
"customTaxAmount": "0",
"discount": 0,
"itemDiscount": 0,
"batchNo": "",
"expDate": ""
}
]
Hàng hóa có kèm phí khác
"itemInfo": [
{
"lineNumber": 2,
"itemCode": "phi_bao_tri",
"selection": 5,
"itemName": "Phí bảo trì",
"unitName": "",
"itemNote": "",
"unitPrice": 20000,
"quantity": 1,
"itemTotalAmountWithoutTax": 20000,
"itemTotalAmountWithTax": 20000,
"itemTotalAmountAfterDiscount": 20000,
"taxPercentage": 0,
"taxAmount": 0,
"customTaxAmount": "0",
"discount": 0,
"itemDiscount": 0,
"batchNo": "",
"expDate": ""
}
]
Hàng hóa là điều chỉnh giảm
"itemInfo": [
{
"lineNumber": 1,
"itemCode": "DELL_LJ2350D",
"itemName": "Máy in Dell LJ 2350D 1Y Wty",
"unitName": "Cái",
"itemNote": "",
"unitPrice": 6281000,
"quantity": 3,
"itemTotalAmountWithoutTax": 18843000,
"itemTotalAmountWithTax": 20727300,
"itemTotalAmountAfterDiscount": 18843000,
"taxPercentage": 10,
"taxAmount": 1884300,
"customTaxAmount": "0",
"adjustmentTaxAmount": 1,
"discount": 0,
"itemDiscount": 0,
"isIncreaseItem": false,
"batchNo": "",
"expDate": ""
}
}
]
Hàng hóa là điều chỉnh tăng
"itemInfo": [
{
"lineNumber": 1,
"itemCode": "DELL_LJ2350D",
"itemName": " Máy in Dell LJ 2350D 1Y Wty",
"unitName": "Cái",
"itemNote": "",
"unitPrice": 6281000,
"quantity": 5,
"itemTotalAmountWithoutTax": 31405000,
"itemTotalAmountWithTax": 34545500,
"itemTotalAmountAfterDiscount": 31405000,
"taxPercentage": 10,
"taxAmount": 3140500,
"customTaxAmount": "0",
"adjustmentTaxAmount": 1,
"discount": 0,
"itemDiscount": 0,
"isIncreaseItem": true,
"batchNo": "",
"expDate": ""
}
]
Ghi chú của hóa đơn điều chỉnh tiền, điều chỉnh thông tin, hóa đơn thay thế sẽ được chuyển vào invoiceNote trong generalInvoiceInfo
Dùng để tổng hợp thuế suất theo mức cho hóa đơn.
Tên trường | Kiểu dữ liệu | Mô tả |
taxPercentage | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | Mức thuế: khai báo giá trị như sau -2: không thuế -1: không kê khai tính/nộp thuế 0: 0% 5: 5% 10: 10%
Note: Mỗi một giá trị thuế chỉ xuất hiện 1 lần (lưu giá trị tổng hợp các hàng hóa cùng loại thuế đó)
Bắt buộc nhập với mãu thuế Tổng
|
taxableAmount | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | Tổng tiền chịu thuế của mức thuế tương ứng, tổng tiền chịu thuế không có số âm. Bằng tổng của itemTotalAmountWithoutTax của tất cả các itemInfo có mức thuế suất giống với mức thuế suất tổng hợp. Trong trường hợp dòng hàng hóa là chiết khấu thì trừ đi. Không cần nhập liệu, hệ thống tự tính dựa vào các itemTotalAmountWithoutTax
|
taxAmount | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+ | Tổng tiền thuế của mức thuế tương ứng, tổng tiền thuế không có số âm. Bằng tổng của taxAmount của tất cả các itemInfo có mức thuế suất giống với mức thuế suất tổng hợp. Trong trường hợp dòng hàng hóa là chiết khấu thì trừ đi. Không cần nhập dữ liệu, nếu không truyền dữ liệu, hệ thống sẽ tự tính dựa vào taxPercentag và các itemTotalAmountWithoutTax. Nếu nhập dữ liệu cho phép chênh lệch 20000 so với giá trị hệ thống tự tính
|
taxableAmountPos | Required: false DataType: Boolean Minlength: Maxlength: Format: | Dùng để biểu thị tổng tiền chịu thuế của mức thuế là âm hay dương. - null/true: Tổng tiền đánh thuế dương. Được sử dụng đối với các hàng hóa thông thường. - false: Tổng tiền đánh thuế âm, được sử dụng với hóa đơn điều chỉnh giảm hoặc hóa đơn có hàng hóa là chiết khấu mà tổng tiền của hàng hóa và chiết khấu của mức thuế là âm.
|
taxAmountPos | Required: false DataType: Boolean Minlength: Maxlength: 20 Format: | Dùng để biểu thị tổng tiền thuế của mức thuế là âm hay dương. Giá trị của taxAmountPos luôn giống với giá trị của taxableAmountPos. - null/true: Tổng tiền thuế dương - false: Tổng tiền thuế âm
|
taxExemptionReason | Required: false DataType: String Minlength: Maxlength: 255 Format: | Lý do miễn giảm thuế
|
Lưu ý: Hệ thống so sánh tổng của itemTotalAmountWithoutTax của tất cả các itemInfo trong cùng mức thuế suất với taxableAmount trong taxBreakDowns. Trong trường hợp bị lệch hệ thống sẽ báo lỗi.
Hệ thống so sánh tổng của taxAmount của tất cả các itemInfo trong cùng mức thuế suất với taxAmount trong taxBreakDowns. Trong trường hợp bị lệch hệ thống sẽ báo lỗi.
Cho phép chênh lệch tiền thuế 20000 so với giá trị thực tính
Dữ liệu mẫu
Thuế có %
"taxBreakdowns": [
{
"taxPercentage": 5,
"taxableAmount": 400000,
"taxAmount": 20000
},
{
"taxPercentage": 10,
"taxableAmount": 400000,
"taxAmount": 40000
}
]
Không thuế
"taxBreakdowns": [
{
"taxPercentage": -2,
"taxableAmount": 400000,
"taxAmount": 0
}
]
Không kê khai tính/nộp thuế
"taxBreakdowns": [
{
"taxPercentage": -1,
"taxableAmount": 400000,
"taxAmount": 0
}
]
Hóa đơn có tiền thuế âm
"taxBreakdowns": [
{
"taxPercentage": 10,
"taxableAmount": 100000,//tổng tiền âm 100000
"taxAmount": 10000,//thuế âm 10000
"taxableAmountPos": false,
"taxAmountPos": false
}
]
Dùng để tổng hợp tiền hàng cho toàn bộ hóa đơn., Không sử dụng, hệ thống tự tính tổng tiền hóa đơn
Tên trường | Kiểu dữ liệu | Mô tả |
sumOfTotalLineAmountWithoutTax | Required: false DataType: BigDecimal Minlength: Maxlength: 13 Format: [0-9.]+ | Tổng thành tiền itemTotalAmountWithoutTax cộng gộp của tất cả các dòng hóa đơn chưa bao gồm VAT. Tổng thành tiền không có số âm. - Hóa đơn thường: Tổng tiền HHDV trên các dòng HĐ. - Hóa đơn điều chỉnh: Tổng tiền điều chỉnh của các dòng HĐ.
|
totalAmountWithoutTax | Required: true DataType: BigDecimal Minlength: Maxlength: 15 Format: [0-9.]+ | Tổng tiền hóa đơn chưa bao gồm VAT (đã tính hàng hóa chiết khấu (nếu có)). Tổng tiền hóa đơn không có số âm. - Hóa đơn thường: Tổng tiền HHDV trên các dòng HĐ và các khoản tăng/giảm khác trên toàn HĐ. - Hóa đơn điều chỉnh: Tổng tiền điều chỉnh của các dòng HĐ và các khoản tăng/giảm khác trên toàn HĐ. |
totalTaxAmount | Required: false DataType: BigDecimal Minlength: Maxlength: 13 Format: [0-9.]+ | Tổng tiền thuế trên toàn hóa đơn. Tổng tiền thuế không có số âm. - Hóa đơn thường: Tổng tiền VAT trên các dòng HĐ và các khoản thuế khác trên toàn HĐ. - Hóa đơn điều chỉnh: Tổng tiền VAT điều chỉnh của các dòng HĐ và các khoản tăng/giảm VAT khác trên toàn HĐ.
|
totalAmountWithTax | Required: false DataType: BigDecimal Minlength: Maxlength: 13 Format: [0-9.]+ | Tổng tiền trên hóa đơn đã bao gồm VAT. Tổng tiền sau thuế không có số âm. - Hóa đơn thường: Tổng tiền HHDV trên các dòng HĐ và các khoản tăng/giảm khác trên toàn HĐ đã bao gồm cả VAT. - Hóa đơn điều chỉnh: Tổng tiền điều chỉnh của các dòng HĐ và các khoản tăng/giảm khác trên toàn HĐ đã bao gồm cả VAT
|
totalAmountWithTaxFrn | Required: false DataType: BigDecimal Minlength: Maxlength: 13 Format: [0-9.]+ | Tổng tiền ngoại tệ của hóa đơn đã bao gồm VAT. Dùng trong trường hợp hóa đơn không chọn loại tiền là VND - Hóa đơn thường: Tổng tiền HHDV trên các dòng HĐ và các khoản tăng/giảm khác trên toàn HĐ đã bao gồm cả VAT. - Hóa đơn điều chỉnh: Tổng tiền điều chỉnh của các dòng HĐ và các khoản tăng/giảm khác trên toàn HĐ đã bao gồm cả VAT
|
totalAmountWithTaxInWords | Required: false DataType: String Minlength: Maxlength: 255 Format: | Số tiền hóa đơn bao gồm VAT viết bằng chữ. Hệ thống hóa đơn điện tử sẽ tự động sinh lại dữ liệu này để đảm bảo đúng theo dữ liệu hệ thống.
|
isTotalAmountPos | Required: false DataType: Boolean Minlength: Maxlength: 20 Format: | Để đánh dấu tổng tiền sau thuế là âm hay dương - null/True: Tổng tiền là số dương, sử dụng đối với các hóa đơn thông thường hoặc hóa đơn có chiết khấu nhưng tổng thuế vẫn là dương sau khi trừ chiết khấu. - False: Tổng tiền âm, sử dụng đối với hóa đơn điều chỉnh giảm hoặc có chiết khấu mà tiền chiết khấu lớn hơn tiền hàng hóa thông thường.
|
isTotalTaxAmountPos | Required: false DataType: Boolean Minlength: Maxlength: 20 Format: | Để đánh dấu tổng tiền thuế là âm hay dương - null/true: tổng tiền thuế là dương - false: tổng tiền thuế là âm
|
isTotalAmtWithoutTaxPos | Required: false DataType: Boolean Minlength: Maxlength: 20 Format: | Để đánh dấu tổng tiền trước thuế là âm hay dương - null/true: tổng tiền trước thuế là dương - false: tổng tiền trước thuế là âm |
discountAmount | Required: true DataType: BigDecimal Minlength: Maxlength: 13 Format: [0-9.]+ | Tổng tiền chiết khấu thương mại trên toàn hóa đơn trước khi tính thuế. Chú ý: Khi tính chiết khấu, toàn hóa đơn chỉ sử dụng một mức thuế. Lưu ý: Đối với hóa đơn thuế tổng, chiết khấu trước thuế có 2 cách nước thuế có 2 cách nhập liệu
Trường hợp nhập theo cả 2 cách thì discountAmount bằng tổng của 2 giá trị |
settlementDiscountAmount | Required: false DataType: BigDecimal Minlength: Maxlength: 13 Format: [0-9.]+ | Tổng tiền chiết khấu thanh toán trên toàn hóa đơn sau khi tính thuế. Chú ý: Khi tính chiết khấu, toàn hóa đơn chỉ sử dụng một mức thuế.
|
isDiscountAmtPos | Required: false DataType: Boolean Minlength: Maxlength: 20 Format: | Trường nhận biết tổng tiền chiết khấu là số dương hay âm - null/true: tổng tiền chiết khấu là dương - false: tổng tiền chiết khấu là âm
|
Dữ liệu mẫu
Hóa đơn thường
"summarizeInfo": {
"sumOfTotalLineAmountWithoutTax": 100000,
"totalAmountWithoutTax": 100000,
"totalTaxAmount": 10000,
"totalAmountWithTax": 110000,
"totalAmountAfterDiscount": 0,
"totalAmountWithTaxInWords": "Một trăm mười nghìn đồng",
"discountAmount": 0,
"taxPercentage": 10
}
Hóa đơn có tổng tiền âm
"summarizeInfo": {
"sumOfTotalLineAmountWithoutTax": 100000,
"totalAmountWithoutTax": 100000,
"totalTaxAmount": 10000,
"totalAmountWithTax": 110000,
"totalAmountAfterDiscount": 0,
"totalAmountWithTaxInWords": "Một trăm mười nghìn đồng",
"discountAmount": 0,
"taxPercentage": 10,
"isTotalAmountPos": false,
"isTotalTaxAmountPos": false,
"isTotalAmtWithoutTaxPos": false
}
Dữ liệu các trường thông tin động (Thông tin trường bổ sung), ngoài các trường thông tin được mô tả ở trong mục 6 này. Nếu như trường thông tin chưa tồn tại trong mục 5, sẽ phải khai thêm. Trường động này sẽ gắn riêng cho từng mẫu hóa đơn của từng khách hàng. Danh sách các trường động của một mẫu cụ thể sẽ được lấy bằng hàm 6.8
Tên trường | Kiểu dữ liệu | Mô tả |
keyTag | Required: false DataType: String Minlength: Maxlength: Format: | Tên dữ liệu Text: Number: Date: Duedate
|
valueType | Required: false DataType: String Minlength: Maxlength: Format: | Kiểu dữ liệu gồm: text, number, date
|
dateValue | Required: false DataType: Date Minlength: Maxlength: Format: | Giá trị dữ liệu khi kiểu là date.
|
stringValue | Required: false DataType: String Minlength: Maxlength: 13 Format: | Giá trị dữ liệu khi kiểu là text
|
numberValue | Required: false DataType: Integer Minlength: Maxlength: 6 Format: | Giá trị dữ liệu khi kiểu là number
|
keyLabel | Required: false DataType: String Minlength: Maxlength: 50 Format: | Nhãn hiển thị của dữ liệu
|
isRequired | Required: false DataType: Boolean Minlength: Maxlength: Format: | Giá trị có bắt buộc hay không
|
isSeller | Required: false DataType: Boolean Minlength: Maxlength: Format: | Giá trị của người bán hay mua False: Người mua True: Người bán
|
Dữ liệu mẫu
"metadata": [
{
"keyTag": "dueDate",
"valueType": "date",
"dateValue": 1544115600000,
"keyLabel": "Hạn thanh toán",
"isRequired": false,
"isSeller": false
},
{
"keyTag": "contractNo",
"stringValue": "555",
"valueType": "text",
"keyLabel": "Hợp dong số",
"isRequired": false,
"isSeller": false
}
]
Một số metadata đặc biệt (được sử dụng làm trường chuẩn của XML thông tư 78)
Tên trường | Kiểu dữ liệu | Mô tả |
PHIẾU XUẤT KHO KIÊM VẬN CHUYỂN NỘI BỘ | ||
economicContractNo | Required: true DataType: String Minlength: Maxlength: Format: |
“DLHDon/NDHDon/NBan/LDDNBo” |
transformer | Required: false DataType: String Minlength: Maxlength: Format: |
“DLHDon/NDHDon/NBan/TNVChuyen” |
vehicle | Required: true DataType: String Minlength: Maxlength: Format: |
“DLHDon/NDHDon/NBan/PTVChuyen” |
contractNo | Required: false DataType: String Minlength: Maxlength: Format: |
“DLHDon/NDHDon/NBan/HDSo” |
HVTNXHang | Required: false DataType: String Minlength: Maxlength: Format: |
“DLHDon/NDHDon/NBan/HVTNXHang” |
Một số metadata đặc biệt (được sử dụng làm trường chuẩn của XML thông tư 78)
Tên trường | Kiểu dữ liệu | Mô tả |
PHIẾU XUẤT KHO HÀNG GỬI ĐẠI LÝ | ||
economicContractNo | Required: true DataType: String Minlength: Maxlength: Format: |
“DLHDon/NDHDon/NBan/HDKTSo” |
commandDate | Required: true DataType: String Minlength: Maxlength: Format: |
“DLHDon/NDHDon/NBan/HDKTNgay” |
transformer | Required: true DataType: String Minlength: Maxlength: Format: |
“DLHDon/NDHDon/NBan/TNVChuyen” |
vehicle | Required: true DataType: String Minlength: Maxlength: Format: |
“DLHDon/NDHDon/NBan/PTVChuyen” |
contractNo | Required: false DataType: String Minlength: Maxlength: Format: |
|
HVTNXHang | Required: false DataType: String Minlength: Maxlength: Format: |
“DLHDon/NDHDon/NBan/HVTNXHang” |
Dữ liệu đặc thù cho riêng hóa đơn điện/nước.
Tên trường | Kiểu dữ liệu | Mô tả |
meterName | Required: false DataType: String Minlength: Maxlength: 50 Format: | Tên chỉ số |
previousIndex | Required: false DataType: String Minlength: Maxlength: Format: | Chỉ số cũ của hóa đơn điện nước.
|
currentIndex | Required: false DataType: String Minlength: Maxlength: Format: | Chỉ số mới của hóa đơn điện nước.
|
factor | Required: false DataType: String Minlength: Maxlength: Format: | Hệ số nhân của hóa đơn điện nước. Vị dụ như nước sinh hoạt sẽ có hệ số nhân khác với nước kinh doanh. Nội dung này sẽ tùy theo công ty điện/ nước quy định và hiển thị.
|
amount | Required: false DataType: String Minlength: Maxlength: Format: | Tổng số của hóa đơn Hệ thống không validate công thức tính toán ra giá trị
|
Dữ liệu mẫu
"meterReading": [{
"previousIndex": "110",
"currentIndex": "150",
"factor": "1",
"amount": "40"
},
{
"previousIndex": "44",
"currentIndex": "50",
"factor": "1",
"amount": "6"
}]
Các file đính kèm khi lập hóa đơn dạng
Tên trường | Kiểu dữ liệu | Mô tả |
fileContent | Required: false DataType: String
| Nội dung file dạng chuỗi base64 |
fileType | Required: false DataType: Double
| Loại file
|
fileExtension | Required: false DataType: String | Định dạng file theo từng loại tương ứng fileType |
Dữ liệu mẫu
"invoiceFile": {
"fileType": 1,
"fileExtension": "xlsx",
"fileType": "RmlsZSBi4bqjbmcga8OqIMSRxrDhu6NjIGFkZCBsw6puIHThuqFpIHBo4bqnbiBs4bqtcCBow7NhIMSRxqFu"
}
Giải thích 1 request bao gồm
Link web: https://vinvoice.viettel.vn
Link API: https://api-vinvoice.viettel.vn/services/einvoiceapplication/api/
C#:
WebRequest request = WebRequest.Create(pzUrl);
request.Headers.Add("Cookie","access_token=abc_def");
Java:
String path = "url";
HttpPost post = new HttpPost(path);
post.setHeader("Cookie", "access_token=abc_def");
Lưu ý: Do cần thời gian kết nối và thời gian xử lý yêu cầu nên kết quả trả về có thể phải chờ 1 khoảng thời gian (khuyến nghị để thời gian timeout khi gửi yêu cầu khoảng 60-90 giây)
Webservice dùng chung trong các trường hợp lập hóa đơn gốc, lập hóa đơn điều chỉnh tiền, lập hóa đơn điều chỉnh thông tin, lập hóa đơn thay thế
+ Cookie: giá trị access_token
+ Content-Type : application/json
Tên trường | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required: true DataType: String Minlength: Maxlength: 20 Format : | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001 Hệ thống sẽ dùng trường thông tin này để kiểm tra và lấy thông tin về mã số thuế của chi nhánh/doanh nghiệp. https://vi.wikipedia.org/wiki/Thu%E1%BA%BF_Vi%E1%BB%87t_Nam Trong quá trình tích hợp nếu đơn vị sử dụng nhiều tài khoản của nhiều phòng ban để phát hành hóa đơn cùng lúc thì nên tách mỗi phòng ban 1 ký hiệu hóa đơn để sử dụng. Vị dụ: + Phòng kế toán dùng ký hiệu: C22TKT + Phòng tổng hợp dùng ký hiệu: C22TTH Ngoài ra có thể áp dụng phân tách ký hiệu hóa đơn theo user sử dụng Vị dụ: + Tài khoản A dùng ký hiệu C22TAA + Tài khoản B dùng ký hiệu C22TBB |
{
"generalInvoiceInfo":{ //Thông tin chung của hóa đơn
},
"buyerInfo":{ //thông tin người bán
},
"sellerInfo":{ //thông tin người mua
},
"payments":[ //thông tin thanh toán
],
"itemInfo":[ //thông tin hàng hóa
],
"metadata":[ //thông tin trường động
],
"meterReading": //thông tin đặc biệt dành cho hóa đơn điện nước
],
"summarizeInfo":{ //thông tin tổng hợp tiền của hóa đơn
},
"taxBreakdowns":[ //thông tin gom nhóm tiền hóa đơn theo thuế suất
]
}
Lưu ý: các dữ liệu này bao gồm tất cả các trường dữ liệu có thể có khi lập hóa đơn. Không phải tất cả các trường thông tin đều bắt buộc, người dùng có thể bỏ bớt cho phù hợp với nhu cầu của khách hàng. Chi tiết các trường thông tin bắt buộc hoặc không bắt buộc xem ở mục 5.
Dữ liệu mẫu | JSON | Lưu ý |
Hóa đơn gốc |
|
|
Hóa đơn thay thế |
|
|
Hóa đơn điều chỉnh thông tin |
| Không ghi nhận các giá trị trong itemInfo |
Hóa đơn điều chỉnh tiền |
| Không ghi nhận các giá trị trong buyerInfo |
Phiếu xuất kho nội bộ |
| Lưu ý 2 giá trị economicContractNo, vehicle là bắt buộc phải truyền với thông tư 78 |
Phiếu xuất kho đại lý |
| Lưu ý 4 giá trị economicContractNo, vehicle, commandDate, transformer là bắt buộc phải truyền với thông tư 78 |
Đối tượng Response mô tả trạng thái lỗi Webservice trả về và đối tượng dữ liệu Webservice trả về:
"errorCode": "",
"description": "",
"result": {
"supplierTaxCode": 1258694363,
"invoiceNo": AA/20E0000001,
"transactionID": 12523522245,
"reservationCode": AXHBNK8I0H
}
}
Mô tả
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null nếu lập hóa đơn thành công) |
description | Mô tả lỗi (giá trị là null nếu lập hóa đơn thành công) |
supplierTaxCode | Mã số thuế người bán (doanh nghiệp phát hành hóa đơn) |
invoiceNo | Số hóa đơn Vị dụ: AA/20E0000001 |
transactionID | Id của giao dịch |
reservationCode | Mã số bí mật dùng để tra khách hàng tra cứu |
Webservice dùng cho hệ thống tích hợp có thể lấy các file hóa đơn sau khi được lập ở bước 6.2 về.
Lưu ý: Hệ thống hóa đơn điện tử chạy theo cơ chế bất đồng bộ, vì vậy hệ thống đẩy hóa đơn lên cơ sở dữ liệu sau khi nhận request phát hành hóa đơn khoảng 1s. Vì vậy, khi tích hợp, request lấy file hóa đơn nên được thực hiện sau từ 2-5 giây sau khi phát hành hóa đơn.
+ Cookie: giá trị access_token
+ Content-Type : application/json
Các tham số của đối tượng CommonDataInput
Tên tham số | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required: true DataType: String Minlength: Maxlength: 20 Format : [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001 https://vi.wikipedia.org/wiki/Thu%E1%BA%BF_Vi%E1%BB%87t_Nam
|
invoiceNo | Required : true DataType: String Minlength: 7 Maxlength: 15 Format : [a-zA-Z0-9]*$
| Số hóa đơn, bao gồm ký hiệu hóa đơn và số thứ tự hóa đơn
|
templateCode | Required : true DataType: String Minlength : Maxlength : 20 Format : | Mã mẫu hóa đơn VD: 01GTKT0/001 1/001 |
transactionUuid | Required : false DataType: String Minlength : 10 Maxlength : 36 Format : N/A | Chuỗi kiểm tra dữ liệu (fkey) được truyền vào khi lập hóa đơn. Chi tiết xem mục 6.2
|
fileType | Required : false DataType: String Minlength : 3 Maxlength : 3 Format : N/A | Loại file muốn tải về, các định dạng được phép ZIP, PDF
|
paid | Required : false DataType: boolean Minlength : Maxlength : Format : N/A | true – Đã thanh toán false – Chưa thanh toán
|
|
|
|
Vị dụ mẫu và các trường dữ liệu:
{
"supplierTaxCode":"0100109106-712",
"invoiceNo":"AA/20E0000166",
"templateCode":"01GTKT0/002",
"transactionUuid":"testuuid9999999",
"fileType":"ZIP"
}
Đối tượng Response với HTTPStatus và output Entity.
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null không có lỗi gì xảy ra) |
description | Mô tả lỗi (giá trị là null không có lỗi gì xảy ra) |
fileName | Tên file tải về |
fileToBytes | Nội dung file được chuyển thành kiểu byte Mảng bytes file hóa đơn, chuyển mảng bytes này ra file sẽ được file chứa các thông tin của hóa đơn, Vị dụ file .zip bao gồm file .xml, .xsl, ảnh logo, watermark, qrcode Code chuyển ra file Java FileUtils.writeByteArrayToFile(newFile("D:/viettel/fileName.zip"), output.getFileToBytes()); |
Cho phép lấy file hóa đơn có kiểm tra mã số bí mật.
Lưu ý: Hệ thống hóa đơn điện tử chạy theo cơ chế bất đồng bộ, vì vậy hệ thống đẩy hóa đơn lên cơ sở dữ liệu sau khi nhận request phát hành hóa đơn khoảng 1s. Vì vậy, khi tích hợp, request lấy file hóa đơn nên được thực hiện sau từ 2-5 giây sau khi phát hành hóa đơn.
+ Cookie: giá trị access_token
+ Content-Type : application/x-www-form-urlencoded
Tên trường | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required: true DataType: String Minlength: Maxlength: 20 Format: [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001
|
templateCode | Required : true DataType: String Minlength : Maxlength : 20 Format : | Mã mẫu hóa đơn VD: 01GTKT0/001 1/001 |
invoiceNo | Required: true DataType: String Minlength: 7 Maxlength: 15 Format: [a-zA-Z0-9]*$ | Là ký hiệu hóa đơn + số hóa đơn vd: AA/20E0000001, tuân theo chuẩn của cục thuế
|
buyerIdNo | Required: false DataType: String Minlength: Maxlength: 100 Format: | Số giấy tờ của người mua
|
Required: true DataType: String Minlength: Maxlength: 100 Format: | Mã số bí mật
| |
fileType | Required: true DataType: String Minlength: Maxlength: 100 Format: | Loại file: zip
|
strIssueDate | Required: true DataType: Minlength: Maxlength: Format: Tiêu chuẩn 4.1 | Ngày phát hành hóa đơn
|
Body: supplierTaxCode=0100109106&invoiceNo=AC%2F20E0000039&strIssueDate=1587797116843&fileType=zip&reservationCode=HXY9RJWTND
/InvoiceAPI/InvoiceUtilsWS/getInvoiceFilePortal?supplierTaxCode=0100109106&invoiceNo=NO%2F17E0000017&fileType=zip&strIssueDate=1587797116843&reservationCode=LE3IMP8O5Y
Đầu ra:
Đối tượng Response mô tả trạng thái lỗi Webservice trả về và đối tượng dữ liệu Webservice trả về:
Mô tả
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null nếu lấy hóa đơn thành công) |
description | Mô tả lỗi (giá trị là null nếu lấy hóa đơn thành công) |
fileToBytes | Mảng bytes file hóa đơn, chuyển mảng bytes này ra file sẽ được file chứa các thông tin của hóa đơn, Vị dụ file .zip bao gồm file .xml, .xsl, ảnh logo, watermark, qrcode Code chuyển ra file Java FileUtils.writeByteArrayToFile(newFile("D:/viettel/fileName.zip"), output.getFileToBytes()); |
paymentStatus | Trạng thái thanh toán |
fileName | Tên file |
Cho phép hệ thống tích hợp lấy file hóa đơn chuyển đổi của hóa đơn điện tử. Trong trường hợp hóa đơn đã được chuyển đổi trước đó, SInvoice sẽ cho tải lại file cũ mà không tạo ra file mới (Điều kiện phải cùng exchangeUser như lần chuyển đổi đầu tiên)
Lưu ý: Hệ thống hóa đơn điện tử chạy theo cơ chế bất đồng bộ, vì vậy hệ thống đẩy hóa đơn lên cơ sở dữ liệu sau khi nhận request phát hành hóa đơn khoảng 1s. Vì vậy, khi tích hợp, request lấy file hóa đơn nên được thực hiện sau từ 2-5 giây sau khi phát hành hóa đơn.
+ Cookie: giá trị access_token
+ Content-Type : application/x-www-form-urlencoded
Tên trường | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required : true DataType: String Minlength : Maxlength : 20 Format : [0-9-]+ | Mã số thuế bên bán Mã mẫu hóa đơn, tuân thủ theo quy định ký hiệu mẫu hóa đơn của Thông tư hướng dẫn thi hành nghị định số 51/2010/NĐ-CP
|
invoiceNo | Required : true DataType: String Minlength : 7 Maxlength : 15 Format : [a-zA-Z0-9]*$ | Là ký hiệu hóa đơn + số hóa đơn vd : AA/20E0000001
|
strIssueDate | Required : true DataType: Minlength : Maxlength : Format: Tiêu chuẩn 4.1 | Ngày lập hóa đơn.
|
Required : true DataType: String Minlength : Maxlength : 100 | Tên người chuyển đổi (Cần thực hiện encode giá trị: Tham khảo: https://www.urlencoder.org/)
|
Body: supplierTaxCode=0100109106&invoiceNo=AC%2F20E0000039&strIssueDate=1587797116843&exchangeUser=%C4%90%E1%BA%B7ng%20T.T%20T%C3%A2m
InvoiceAPI/InvoiceWS/createExchangeInvoiceFile?supplierTaxCode=0100109106&invoiceNo=AA%2F17E0037914 &strIssueDate=1587797116843&exchangeUser=%C4%90%E1%BA%B7ng%20T.T%20T%C3%A2m
Đối tượng Response mô tả trạng thái lỗi Webservice trả về và đối tượng dữ liệu Webservice trả về:
Mô tả
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null nếu lấy hóa đơn thành công) |
description | Mô tả lỗi (giá trị là null nếu lấy hóa đơn thành công) |
fileToBytes | Mảng bytes file hóa đơn, chuyển mảng bytes này ra file sẽ được file pdf hóa đơn chuyển đổi Code chuyển ra file Java FileUtils.writeByteArrayToFile(newFile("D:/viettel/fileName.pdf"), output.getFileToBytes()); |
fileName | Tên của file hóa đơn |
Hình ảnh Response trả về
Cho phép xóa bỏ (chuyển hóa đơn sang trạng thái xóa bỏ) từ hệ thống tích hợp.
+ Cookie: giá trị access_token
+ Content-Type : application/x-www-form-urlencoded
Tên trường | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required : true DataType: String Minlength : Maxlength : 20 Format : [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001
|
templateCode | Required : false DataType: String Minlength : Maxlength : 20 Format : | Mã mẫu hóa đơn VD: 01GTKT0/001 1/001 |
invoiceNo | Required : true DataType: String Minlength : 7 Maxlength : 15 Format : [a-zA-Z0-9/]+ | Là ký hiệu hóa đơn + số hóa đơn vd : AA/20E0000001
|
strIssueDate | Required : true DataType: Minlength : Maxlength : Format: Tiêu chuẩn 4.1 | Ngày lập hóa đơn (không vượt quá ngày hiện tại)
|
additionalReferenceDesc | Required : true DataType: String Minlength : 1 Maxlength : 400 | Tên văn bản thỏa thuận hủy hóa đơn
|
additionalReferenceDate | Required : true DataType: Minlength : Maxlength : Format: Tiêu chuẩn 4.1 | Ngày thỏa thuận (không vượt quá ngày hiện tại)
|
reasonDelete | Required: False DataType: String Minlength: N/A Maxlength: 255 Format: | Lý do hủy hóa đơn Cho phép nhập tối đa 255 ký tự |
Form Data Vị dụ:
supplierTaxCode=0100109106-997&invoiceNo=AB%2F17E0000325&strIssueDate=1587797116843&additionalReferenceDesc=hello&additionalReferenceDate=20171222081259
Đối tượng Response mô tả trạng thái lỗi Webservice trả về và đối tượng dữ liệu Webservice trả về:
Vị dụ trả về thành công:
{
"errorCode": null,
"description": "CANCEL TRANSACTION INVOICE SUCCESS"
}
Mô tả
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null nếu lấy hóa đơn thành công) |
description | Mô tả lỗi (giá trị là null nếu lấy hóa đơn thành công), Kiểm tra hóa đơn có phải là các hóa đơn gốc, chưa kê khai thuế ,trạng thái đã thanh toán, không phải hóa đơn điều chỉnh , hóa đơn thay thế và không và hóa đơn điều chỉnh hủy hay không? Nếu phải trả lại thông tin hóa đơn không hợp lệ |
Trường hợp doanh nghiệp có trang webportal để tra cứu hóa đơn thì có thể kết nối đến webservice Hóa đơn điện tử của Viettel để tra cứu hóa đơn theo các điều kiện.
Vị dụ khách hàng của doanh nghiệp có thể tra cứu được các hóa đơn của mình theo khoảng thời gian.
+ Cookie: giá trị access_token
+ Content-Type : application/json
Tên trường | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required : true DataType: String Minlength : Maxlength : 20 Format : [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001
|
GetInvoiceInput | Object | Đối tượng gồm các trường dữ liệu tham số |
Tên tham số |
Kiểu dữ liệu, ràng | Mô tả |
invoiceNo | Required : false DataType: String Minlength : 7 Maxlength : 15 Format : [a-zA-Z0-9]*$ | Là ký hiệu hóa đơn + số hóa đơn vd : AA/20E0000001
|
startDate | Required : true DataType: Date Minlength : Maxlength : 50 Format : | Từ ngày Định dạng "2019-05-12"
|
endDate | Required : true DataType: Date Minlength : Maxlength : 50 Format : | Đến ngày Định dạng "2019-05-12"
|
invoiceType | Required : false DataType: String Minlength : Maxlength : Format : | Loại hóa đơn, là một trong các giá trị Thông tư 32: 01GTKT, 02GTTT, 03XKNB, 04HGDL, 07KPTQ Thông tư 68: 1, 2, 3, 4 |
rowPerPage | Required : true DataType: Number Min : 1 Max: | Số dòng trên một trang |
pageNum | Required : true DataType: Number Min : 0 Max | Chỉ số trang |
buyerTaxCode | Required : false DataType: String Minlength : Maxlength : 20 | Mã số thuế của khách hàng
|
buyerIdNo | Required : false DataType: String | Số giấy tờ của khách hang
|
templateCode | Required : false DataType: String Minlength : Maxlength : | Mã mẫu hóa đơn.
|
invoiceSeri | Required : false DataType: String Minlength : Maxlength : 7 Format : [a-zA-Z0-9]*$ | Seri hóa đơn
|
getAll | Required : false DataType: Boolean Minlength: Maxlength: Format : true/false | Cho phép tra cứu thông tin hóa đơn của toàn doanh nghiệp đối với user của công ty mẹ. Các giá trị là true/false |
Vị dụ gửi dữ liệu với JSON:
{
"startDate" : "2020-05-12" ,
"endDate" : "2020-05-12",
"invoiceType" : "02GTTT",
"rowPerPage" : 20,
"pageNum" : 1,
"templateCode" : null
}
{
"errorCode": null,
"description": null,
"totalRow": 286,
"invoices": [
{
"invoiceId": 213469,
"invoiceType": "02GTTT",
"adjustmentType": "1",
"templateCode": "02GTTT0/089",
"invoiceSeri": "QT/17E",
"invoiceNumber": "0000003",
"invoiceNo": "QT/17E0000003",
"currency": "VND",
"total": 3800000,
"issueDate": 1587797116843,
"issueDateStr": null,
"state": null,
"requestDate": null,
"description": null,
"buyerIdNo": null,
"stateCode": null,
"subscriberNumber": null,
"paymentStatus": 1,
"viewStatus": 1,
"downloadStatus": null,
"exchangeStatus": null,
"numOfExchange": null,
"createTime": 1587797116843,
"contractId": null,
"contractNo": null,
"supplierTaxCode": "0100109106",
"buyerTaxCode": "6200000230",
"totalBeforeTax": 3800000,
"taxAmount": 0,
"taxRate": null,
"paymentMethod": null,
"paymentTime": null,
"customerId": null,
"buyerName": "Trần Trung Dũng",
"no": null,
"paymentStatusName": null
}
}
Đối tượng Response với HTTPStatus và output Entity.
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null lấy hóa đơn thành công) |
description | Mô tả lỗi (giá trị là null lấy hóa đơn thành công) |
List<InvoiceBean> | Danh sách các bản ghi hóa đơn thỏa mãn điều kiện |
Với mỗi mẫu hóa đơn, có thể có những thông tin trường động khác nhau (các trường thông tin ngoài các trường tĩnh được mô tả ở mục 6). SInvoice cho phép các hệ thống tích hợp có thể lấy thông tin trường động của một mẫu hóa đơn cụ thể mà khách hàng sử dụng.
+ Cookie: giá trị access_token
Vị dụ : /InvoiceAPI/InvoiceWS/getCustomFields?taxCode=0100109106&templateCode=01GTKT0%2f001
Data: dữ liệu truyền vào dạng Query Param gồm các tham số:
Tên trường | Kiểu dữ liệu, ràng buộc | Mô tả |
taxCode | Required : true DataType: String Minlength : Maxlength : 20 Format : [0-9-]+ | Mã số thuế |
templateCode | Required : false DataType: String Minlength : Maxlength : 20 Format : [a-zA-Z0-9/]+ | Mã mẫu hóa đơn, tuân thủ theo quy định ký hiệu mẫu hóa đơn của Thông tư hướng dẫn thi hành nghị định số 51/2010/NĐ-CP
Chú ý: Mẫu hóa đơn có ít nhất 1 thông báo phát hành ở trạng thái dự thảo mới có thể lấy danh sách trường động qua API |
Đối tượng Response là danh sách trường động tương ứng với mẫu hóa đơn của doanh nghiệp:
Kết quả:
"errorCode": null,
"description": null,
"customFields": [
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "commandDes",
"valueType": "text",
"keyLabel": "về việc",
"isRequired": false,
"isSeller": false
},
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "contractNo",
"valueType": "text",
"keyLabel": "Hợp đồng số",
"isRequired": false,
"isSeller": false
},
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "vehicle",
"valueType": "text",
"keyLabel": "Phương tiện vận chuyển",
"isRequired": false,
"isSeller": false
},
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "exportAt",
"valueType": "text",
"keyLabel": "Xuất tại kho",
"isRequired": false,
"isSeller": false
},
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "exportAtNo",
"valueType": "text",
"keyLabel": "Mã kho",
"isRequired": false,
"isSeller": false
},
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "importAt",
"valueType": "text",
"keyLabel": "Nhập tại kho",
"isRequired": false,
"isSeller": false
},
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "importAtNo",
"valueType": "text",
"keyLabel": "Mã kho",
"isRequired": false,
"isSeller": false
},
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "vehicleNo",
"valueType": "text",
"keyLabel": "Số xe",
"isRequired": false,
"isSeller": false
},
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "economicContractNo",
"valueType": "text",
"keyLabel": "Căn cứ hợp đồng kinh tế số",
"isRequired": false,
"isSeller": false
},
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "commandDate",
"valueType": "date",
"keyLabel": "Ngày điều động",
"isRequired": false,
"isSeller": false
},
{
"id": null,
"invoiceTemplatePrototypeId": 2503,
"keyTag": "commandOf",
"valueType": "text",
"keyLabel": "của",
"isRequired": false,
"isSeller": false
}
]
}
Tên trường | Kiểu dữ liệu, ràng buộc | Mô tả |
id | DataType: Number | ID của trường động |
keyLabel | DataType: String | Tên hiển thị của trường động, Hiển thị trên giao diện nhập liệu khi lập hóa đơn |
keyTag | DataType: String
| Tên của trường động khi lưu vào dữ liệu |
valueType | DataType: String
| Kiểu dữ liệu của trường động. Chỉ bao gồm các giá trị: “text”, “date”, “number” |
isRequired | DataType: Boolean | Trường có bắt buộc hay không |
isSeller | DataType: Boolean | isSeller = true: Trường dữ liệu thuộc bên bán isSeller = false: Trường dữ liệu thuộc bên mua |
Gửi dữ liệu lập hóa đơn với trường động: Thêm vào mảng metadata, mỗi phần tử bao gồm các giá trị được mapping dựa vào customFields nhận từ response như sau
Trường trong | Tên trường | Kiểu dữ liệu, ràng buộc | Mô tả |
id | invoiceCustomFieldId | Required : false DataType: Number Minlength : Maxlength : 10 Format : | ID của trường động
|
keyTag | keyTag | Required : true DataType: String
| Tên của trường động khi lưu vào dữ liệu |
valueType | valueType | Required : true DataType: String
| Kiểu dữ liệu của trường động. Chỉ bao gồm các giá trị: “text”, “date”, “number” |
keyLabel | keyLabel | Required : true DataType: String
| Tên hiển thị của trường động, Hiển thị trên giao diện nhập liệu khi lập hóa đơn |
valueType = date | dateValue | Required : false DataType: Date
| Giá trị của trường dữ liệu trong trường hợp valueType = date |
valueType = number | numberValue | Required : false DataType: Number
| Giá trị của trường dữ liệu trong trường hợp valueType = number |
valueType = text | stringValue | Required : false DataType: String | Giá trị của trường dữ liệu trong trường hợp valueType = text |
{
"generalInvoiceInfo": {
"invoiceType": "03XKNB",
"templateCode": "03XKNB0/003",
"invoiceSeries": "AA/20E",
"currencyCode": "VND",
"adjustmentType": "1",
"paymentStatus": true,
"cusGetInvoiceRight": true
},
"sellerInfo": {
"sellerLegalName": "Người bán hàng",
"sellerTaxCode": "0100109106-712",
"sellerAddressLine": "Thành Phố Hà Nội - Việt Nam",
"sellerPhoneNumber": "0123456789",
"sellerFaxNumber": "0123456789",
"sellerEmail": "[email protected]",
"sellerBankName": "Ngân hàng ",
"sellerBankAccount": "012345678901",
"sellerDistrictName": "",
"sellerCityName": "Thành Phố Hà Nội",
"sellerCountryCode": "84",
"sellerWebsite": "sinvoice.viettel.vn"
},
"buyerInfo": {
"buyerName": "Tên khách hàng",
"buyerLegalName": "Tên đơn vị",
"buyerTaxCode": "0100109106",
"buyerAddressLine": "An Khánh Hoài Đức Hà Nội",
"buyerPostalCode": "2342324323",
"buyerDistrictName": "Số 9, đường 11, VSIP Bắc Ninh, Thị xã Từ Sơn, Tỉnh",
"buyerCityName": "Thành Phố Hà Nội",
"buyerCountryCode": "84",
"buyerPhoneNumber": "987999999",
"buyerFaxNumber": "0458954",
"buyerEmail": "[email protected]",
"buyerBankName": "Ngân hàng Quân đội MB",
"buyerBankAccount": "01578987871236547",
"buyerIdType": "3",
"buyerIdNo": "8888899999",
"buyerCode": "832472343b_b",
"buyerBirthDay": ""
},
"payments": [
{
"paymentMethodName": "Truyền trực tiếp giá trị mong muốn vào đây"
}
],
"taxBreakdowns": [
{
"taxPercentage": -1,
"taxableAmount": 27286150,
"taxAmount": 0
}
],
"itemInfo": [
{
"lineNumber": 1,
"itemCode": "HH0001",
"itemName": "Hàng hóa 01",
"unitCode": null,
"unitName": "Chiếc",
"unitPrice": 150450,
"quantity": 100,
"selection": 1,
"itemTotalAmountWithoutTax": 15045000,
"taxPercentage": -1,
"taxAmount": 0,
"discount": null,
"discount2": null,
"itemDiscount": 0,
"itemNote": null,
"batchNo": null,
"expDate": null,
"isIncreaseItem": null
},
{
"lineNumber": 2,
"itemCode": "HH00002",
"itemName": "Hàng hóa 02",
"unitCode": null,
"unitName": "Cái",
"unitPrice": 244823,
"quantity": 50,
"selection": 1,
"itemTotalAmountWithoutTax": 12241150,
"taxPercentage": -1,
"taxAmount": 0,
"discount": null,
"discount2": null,
"itemDiscount": 0,
"itemNote": null,
"batchNo": null,
"expDate": null,
"isIncreaseItem": null
}
],
"metadata": [
{
"keyTag": "commandDes",
"keyLabel": "về việc",
"dateValue": null,
"stringValue": "điều chuyển nội bộ",
"numberValue": null,
"valueType": "text",
"isRequired": false,
"isSeller": false,
"required": false
},
{
"keyTag": "contractNo",
"keyLabel": "Hợp đồng số",
"dateValue": null,
"stringValue": "Hợp đồng số",
"numberValue": null,
"valueType": "text",
"isRequired": false,
"isSeller": false,
"required": false
},
{
"keyTag": "vehicle",
"keyLabel": "Phương tiện vận chuyển",
"dateValue": null,
"stringValue": "xe tải",
"numberValue": null,
"valueType": "text",
"isRequired": false,
"isSeller": false,
"required": false
},
{
"keyTag": "exportAt",
"keyLabel": "Xuất tại kho",
"dateValue": null,
"stringValue": "Kho 1",
"numberValue": null,
"valueType": "text",
"isRequired": false,
"isSeller": false,
"required": false
},
{
"keyTag": "importAtNo",
"keyLabel": "Mã kho",
"dateValue": null,
"stringValue": "KH2",
"numberValue": null,
"valueType": "text",
"isRequired": false,
"isSeller": false,
"required": false
},
{
"keyTag": "importAt",
"keyLabel": "Nhập tại kho",
"dateValue": null,
"stringValue": "Kho 2",
"numberValue": null,
"valueType": "text",
"isRequired": false,
"isSeller": false,
"required": false
},
{
"keyTag": "importAtNo",
"keyLabel": "Mã kho",
"dateValue": null,
"stringValue": "KH0",
"numberValue": null,
"valueType": "text",
"isRequired": false,
"isSeller": false,
"required": false
},
{
"keyTag": "vehicleNo",
"keyLabel": "Số xe",
"dateValue": null,
"stringValue": "1524-jhh",
"numberValue": null,
"valueType": "text",
"isRequired": false,
"isSeller": false,
"required": false
},
{
"keyTag": "economicContractNo",
"keyLabel": "Căn cứ hợp đồng kinh tế số",
"dateValue": null,
"stringValue": "123456",
"numberValue": null,
"valueType": "text",
"isRequired": false,
"isSeller": false,
"required": false
},
{
"keyTag": "commandDate",
"keyLabel": "Ngày điều động",
"dateValue": "1605752798000",
"stringValue": null,
"numberValue": null,
"valueType": "date",
"isRequired": false,
"isSeller": false,
"required": false
},
{
"keyTag": "commandOf",
"keyLabel": "của",
"dateValue": null,
"stringValue": "Công ty ABC",
"numberValue": null,
"valueType": "text",
"isRequired": false,
"isSeller": false,
"required": false
}
]
}
Webservice dùng để lưu dữ liệu hóa đơn nháp lên hệ thống SInvoice. Các hóa đơn nháp này không có số hóa đơn hay kí số, chỉ có thể xem/phát hành trên website của SInvoice. Khi phát hành thì các số hóa đơn sẽ không được cập nhật lại phần mềm tích hợp.
+ Cookie: giá trị access_token
+ Content-Type : application/json
Tên trường | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required: true DataType: String Minlength: Maxlength: 20 Format: [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001 |
Đối tượng Response mô tả trạng thái lỗi Webservice trả về và đối tượng dữ liệu Webservice trả về:
{
"errorCode": "",
"description": "",
"result": {
}
}
Mô tả
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null nếu lập hóa đơn thành công) |
description | Mô tả lỗi (giá trị là null nếu lập hóa đơn thành công) |
Trường hợp khách hàng muốn lập hóa đơn theo lô sẽ sử dụng hàm sau. Lưu ý chỉ sử dụng cho loại chứng thư số HSM
Lưu ý: Hệ thống đang cho phép tối đa 50 hóa đơn/1 lô do thời gian xử lý đơn lẻ từng hóa đơn lâu, nếu như để lô nhiều quá có thể bị timeout. Trong trường hợp dữ liệu từ hệ thống tích hợp nhiều hơn, có thể tự động chia nhỏ số lượng hóa đơn và gửi sang.
+ Cookie: giá trị access_token
+ Content-Type : application/json
Tên trường | s | Mô tả |
supplierTaxCode | Required: true DataType: String Minlength: Maxlength: 20 Format: [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001 |
| JSON |
Lập hóa đơn theo lô |
Kết quả khi lập hóa đơn theo lô thành công sẽ trả kết quả về theo transactionUuid để xác định được hóa đơn nào thành công, sinh ra số hóa đơn nào.
Cho phép hệ thống tích hợp gửi thông tin cập nhật kê khai thuế sang, để tránh cho khách hàng bị sai sót trong quá trình sử dụng (hóa đơn đã kê khai thực tế vẫn có thể xóa bỏ, thay thế).
gồm các tham số:
Tên trường | Kiểu dữ liệu, ràng buộc | Dữ liệu/mô tả |
supplierTaxCode | Required: true DataType: String Minlength: Maxlength: 20 Format: [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001 |
strIssueDate | Required: true DataType: String Minlength: Maxlength: Format: dd/mm/yyyy | Ngày lập hóa đơn |
{
"supplierTaxCode":"0100109106",
"strIssueDate":"14/03/2018"
}
Hình ảnh Response trả về thành công
Trả về thông tin chi tiết số lượng hóa đơn đã dùng, số lượng còn lại của một dải hóa đơn để từ đó đối tác tích hợp có thể chủ động cảnh báo khách hàng trong trường hợp không đủ hóa đơn.
+ Cookie: giá trị access_token
+ Content-Type : application/json
Các tham số của đối tượng CommonDataInput
Tên tham số | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required : true DataType: String Minlength : Maxlength : 20 Format : [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001
|
templateCode | Required : true DataType: String Minlength : Maxlength : 20 Format : | Mã mẫu hóa đơn Mã mẫu hóa đơn, tuân thủ theo quy định ký hiệu mẫu hóa đơn của Thông tư hướng dẫn thi hành nghị định số 51/2010/NĐ-CP Chi tiết xem PL1 Thông tư 39/2014/TT-BTC
|
serial | Required : true DataType: String Minlength : Maxlength : 7 Format : [a-zA-Z0-9]*$ | Seri hóa đơn
|
Vị dụ mẫu và các trường dữ liệu:
{
"supplierTaxCode":"0100109106-712",
"templateCode":"01GTKT0/003",
"serial":"AA/20E"
}
Đối tượng Response với HTTPStatus và output Entity.
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null không có lỗi gì xảy ra) |
description | Mô tả lỗi (giá trị là null không có lỗi gì xảy ra) |
statuss | Trạng thái (giá trị là 200 lấy thông tin sử dụng hóa đơn thành công) |
numOfpublishInv | Tổng số hóa đơn đã phát hành |
totalInv | Tổng số hóa đơn có thể lập với mẫu hóa đơn + dải truyển vào |
Trả về chi tiết thông tin các hóa đơn để có thể đối soát xem sai đúng của hóa đơn trong một khoảng thời gian.
+ Cookie: giá trị access_token
+ Content-Type : application/json
Các tham số của đối tượng CommonDataInput
Tên tham số | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required : true DataType: String Minlength : Maxlength : 20 Format : [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001
|
fromDate | Required : true DataType: String Format : dd/MM/yyyy | Ngày bắt đầu muốn tìm kiếm
|
toDate | Required : true DataType: String Format : dd/MM/yyyy | Ngày kết thúc muốn tìm kiếm
|
Vị dụ mẫu và các trường dữ liệu:
{
"supplierTaxCode":"0100109106",
"fromDate":"10/03/2018",
"toDate":"16/03/2018"
}
Đối tượng Response với HTTPStatus và output Entity.
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null không có lỗi gì xảy ra) |
description | Mô tả lỗi (giá trị là null không có lỗi gì xảy ra) |
lstInvoiceBO | Danh sách hóa đơn được tạo theo thời gian được truyền vào |
{
"errorCode": null,
"description": null,
"totalRows": 1,
"invoices": [
{
"invoiceId": 8569,
"invoiceType": "Phiếu xuất kho gửi bán hàng đại lý",
"adjustmentType": "1",
"templateCode": "04HGDL/0001",
"invoiceSeri": "P01",
"invoiceNumber": "00000001",
"invoiceNo": "P0100000001",
"currency": "USD",
"total": 444,
"issueDate": 1583810428000,
"issueDateStr": null,
"state": 1,
"requestDate": null,
"description": null,
"buyerIdNo": "",
"stateCode": 1,
"subscriberNumber": null,
"paymentStatus": 1,
"viewStatus": null,
"downloadStatus": null,
"exchangeStatus": 0,
"numOfExchange": null,
"createTime": 1583835386000,
"contractId": null,
"contractNo": "",
"supplierTaxCode": "4400282282",
"buyerTaxCode": "",
"totalBeforeTax": 444,
"taxAmount": 0,
"taxRate": null,
"paymentMethod": "2",
"paymentTime": null,
"customerId": null,
"no": null,
"paymentStatusName": "Đã thanh toán",
"buyerName": "Người mua không lấy hóa đơn"
}
}
Trong trường hợp khách hàng đã cấu hình email server và biểu mẫu email trên hệ thống SInvoice, hệ thống sẽ tự động thực hiện gửi email cho người mua khi trong thông tin hóa đơn có email. API này cho phép phần mềm tích hợp chủ động việc gửi email cho khách hàng, trong trường hợp cấu hình của email là không hoạt động hoặc muốn gửi lại email cho khách hàng khi có yêu cầu.
+ Cookie: giá trị access_token
+ Content-Type : application/json
Tên tham số | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required : true DataType: String Minlength : Maxlength : 20 Format : [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001
|
lstTransactionUuid | Required : true DataType: String | Danh sách key request, mỗi transactionUuid tương ứng với 1 hoá đơn (Validate độ dài transactionUuid trong khoảng 10 – 36 ký tự). Các transactionUuid cách nhau bởi dấu “,”
|
Vị dụ mẫu và các trường dữ liệu:
{
"supplierTaxCode":"0100109106-712s",
"lstTransactionUuid":"idtest9999999999,testuuid8888888,transactionUuid123"
}
Đối tượng Response với HTTPStatus và output Entity.
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null không có lỗi gì xảy ra) |
description | Mô tả lỗi (giá trị là null không có lỗi gì xảy ra) |
Sinh ra file xml và chuỗi hash của file XML của hóa đơn ký bởi USB Token.
+ Cookie: giá trị access_token
+ Content-Type : application/json
Đầu vào tương tư như lập hóa đơn, bổ sung thêm thông tin chứng thư gửi kèm.
Bổ sung trường Lý do sai sót hoá đơn. Điều chỉnh cho phép truyền
Tên tham số | Kiểu dữ liệu, ràng buộc | Mô tả |
certificateSerial | Required : true DataType: String Minlength : Maxlength : 100 Format : | Serial Number của chứng thư số của doanh nghiệp, chứng thư số này đã được doanh nghiệp đẩy lên trên hệ thống khi đăng ký sử dụng USB Token. Định dạng Hex. Vị dụ: 5404FFFEB7033FB316D672201B7BA4FE |
adjustedNote | Required: False DataType: String Minlength: N/A Maxlength: 255 Format: | Lý do sai sót Cho phép nhập chuỗi ký tự tối đa 255 ký tự. Không bắt buộc truyền. Đặt trong generalInvoiceInfo |
unitPrice | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+- | Đơn giá của hàng hóa. Các quy tắc ràng buộc giữ nguyên hiện trạng. Bổ sung cho phép truyền giá trị âm
|
quantity | Required: false DataType: BigDecimal Minlength: Maxlength: Format: [0-9.]+- | Số lượng của hàng hóa Các quy tắc ràng buộc giữ nguyên hiện trạng. Bổ sung cho phép truyền giá trị âm
|
{
"generalInvoiceInfo":{
"invoiceType":"01GTKT",
"templateCode":"01GTKT0/170",
"invoiceSeries":"AA/17E",
"transactionUuid": "123e4567-e89b-12d3-a456-426655440000",
"invoiceIssuedDate":1587797116843,
"currencyCode":"VND",
"adjustmentType":"1",
"adjustedNote":"",
"originalInvoiceType": "1",
"originalTemolateCode": "1/0224",
"paymentStatus":true,
"paymentType":"TM",
"paymentTypeName":"TM",
"cusGetInvoiceRight":true,
"userName":"user 1",
“certificateSerial”:”5404FFFEB7033FB316D672201B7BA4FE”
},
"buyerInfo":{
"buyerName":"Đặng thị thanh tâm",
"buyerLegalName":"",
"buyerTaxCode":"",
"buyerAddressLine":"HN VN",
"buyerPhoneNumber":"11111",
"buyerEmail":"",
"buyerIdNo":"123456789",
"buyerIdType":"1"
},
"sellerInfo":{
"sellerLegalName":"Đặng thị thanh tâm",
"sellerTaxCode":"0100109106-501",
"sellerAddressLine":"test",
"sellerPhoneNumber":"0123456789",
"sellerEmail":"[email protected]",
"sellerBankName":"vtbank",
"sellerBankAccount":"23423424"
},
"extAttribute":[
],
"payments":[
{
"paymentMethodName":"TM"
}
],
"deliveryInfo":{
},
"itemInfo":[
{
"lineNumber":1,
"itemCode":"ENGLISH_COURSE",
"itemName":"Khóa học tiếng anh",
"unitName":"khóa học",
"unitPrice":"-3500000.0",
"quantity":"-10.0",
"itemTotalAmountWithoutTax":35000000,
"taxPercentage":10.0,
"taxAmount":0.0,
"discount":0.0,
"itemDiscount":150000.0
}
],
"discountItemInfo":[
],
"metadata":[
],
"meterReading": [{
"previousIndex": "5454",
"currentIndex": "244",
"factor": "22",
"amount": "2"
},
{
"previousIndex": "44",
"currentIndex": "44",
"factor": "33",
"amount": "3"
}],
"summarizeInfo":{
"sumOfTotalLineAmountWithoutTax":35000000,
"totalAmountWithoutTax":35000000,
"totalTaxAmount":3500000.0,
"totalAmountWithTax":38500000,
"totalAmountWithTaxInWords":"Ba mươi tám triệu năm trăm nghìn đồng chẵn",
"discountAmount":0.0,
"settlementDiscountAmount":0.0,
"taxPercentage":10.0
},
"taxBreakdowns":[
{
"taxPercentage":10.0,
"taxableAmount":35000000,
"taxAmount":3500000.0
}
]
}
{
"errorCode": "",
"description": "",
"result": {
"hashString": 0HFm34vX525V3Syg5EwdTnfO21s=, }
}
Tên trường | Kiểu dữ liệu, ràng buộc | Mô tả |
errorCode | DataType: String | Mã lỗi nếu có, không có lỗi thì trả về null |
description | DataType: String | Mô tả chi tiết lỗi |
hashString | DataType: String
| Chuỗi Hash trả về của hóa đơn, dạng Base64 |
Thực hiện sử dụng USB-TOKEN để ký chuỗi hashString nhận được từ API trong bước 6.15. Lấy chuỗi ký để sinh hóa đơn.
+ Cookie: giá trị access_token
+ Content-Type : application/json
Tên tham số | Kiểu dữ liệu, ràng buộc | Mô tả |
supplierTaxCode | Required : true DataType: String Minlength : Maxlength : 20 Format : [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001
|
templateCode | Required : true DataType: String Minlength : Maxlength : 20 | Mã mẫu hóa đơn.
|
hashString | Required : true DataType: String | Chuỗi Hash mà dữ liệu trả về ở trong request getHash phía bên trên = out put của API : 6.15 Lập hóa đơn ký USB Token (Bước 1: Lấy chuỗi hash) |
signature | Required : true DataType: String | Chữ ký sau khi hashString đã được ký bởi USB token. dạng Base64 |
Vị dụ Json
{
"supplierTaxCode": "0100109106-712",
"templateCode": "01GTKT0/002",
"hashString": "0HFm34vX525V3Syg5EwdTnfO21s=",
"signature": "U0WpJk2Q/rDsnZDz8hiWKvs6QEf5DHTG8JyXjjNMtggZ/MIDP0hn9Mutc2uPZEOxqk2YnMjuRSxU8ST/T+C5i46Vb/0+7uIfzKpPm2yrsOSivCdzr6FrY6nJPkfkOWEdEs/hqDzcf4Vn8ZCVkNfovYR4prPGc7kNpO21sNb9BAI="
}
Kết quả trả về
{
"errorCode": "",
"description": "",
"result": {
"supplierTaxCode": 0100109106-712,
"invoiceNo": AA/20E0000018,
"transactionID": 12523522245,
"reservationCode": AXHBNK8I0H
}
}
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null nếu lập hóa đơn thành công) |
description | Mô tả lỗi (giá trị là null nếu lập hóa đơn thành công) |
supplierTaxCode | Mã số thuế người bán (doanh nghiệp phát hành hóa đơn)
|
invoiceNo | Số hóa đơn vd: AA\20E0000001
|
transactionID | Id của giao dịch |
reservationCode | Mã số bí mật dùng để tra khách hang tra cứu
|
Tham khảo thêm tại https://sinvoice.viettel.vn/download/soft/signhash.rar
Hỗ trợ convert từ các font chữ sang unicode (KH sử dụng API) này kết hợp với API tạo hóa đơn để convert dữ liệu
+ Cookie: giá trị access_token
+ Content-Type : application/json
Tên tham số | Kiểu dữ liệu, ràng buộc | Mô tả |
font | Required : true DataType: String | Font dữ liệu, các dữ liệu hỗ trợ bao gồm: VNI TCVN3 TCVN1 |
data | Required : true DataType: String | Dữ liệu cần chuyển |
Vị dụ json:
{
"font": "TCVN3",
"data": "D÷ liÖu kh«ng ®óng chuÈn Unicode cÇn convert"
}
Kết quả trả về
{
"errorCode": null,
"description": null,
"result": "Dữ liệu không đúng chuẩn Unicode cần convert"
}
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null nếu chuyển font thành công) |
description | Mô tả lỗi (giá trị là null nếu chuyển font thành công) |
result | Dữ liệu sau khi được chuyển về chuẩn Unicode |
Cho phép hệ thống tích hợp cập nhật trạng thái thanh toán của hóa đơn sang là đã thanh toán.
+ Cookie: giá trị access_token
+ Content-Type : application/x-www-form-urlencoded
Tên trường | Kiểu dữ liệu, ràng buộc | Dữ liệu/mô tả |
supplierTaxCode | Required: true DataType: String Minlength: Maxlength: 20 Format: [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001
|
templateCode | Required: true DataType: String Minlength: Maxlength: 20 Format: | Mẫu số hóa đơn
|
invoiceNo | Required: true DataType: String Minlength: 7 Maxlength: 15 Format: [a-zA-Z0-9]*$ | Là ký hiệu hóa đơn + số hóa đơn vd: AA/20E0000001
|
buyerEmailAddress | Required: false DataType: String Minlength: Maxlength: 2000 Format: ^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$ | Email người mua
|
strIssueDate | Required: false DataType: Minlength: Maxlength: Format: Tiêu chuẩn 4.1 | Ngày lập hóa đơn
|
paymentType | Required: false DataType: String Minlength: Maxlength: Format: | Loại hình thức thanh toán
|
paymentTypeName | Required: false DataType: String Minlength: Maxlength: Format: | Tên phương thức thanh toán
|
cusGetInvoiceRight | Required: false DataType: Boolean Minlength: Maxlength: Format: true/false | Cho khách hàng xem hóa đơn trong Quản lý hóa đơn
|
supplierTaxCode=0100109106-712&templateCode=01GTKT0%2F002&invoiceNo=AA%2F20E0000035&buyerEmailAddress=abc%40gmail.com &strIssueDate=20201103000000&paymentType=TM%2FCK&paymentTypeName=TM%2FCK&cusGetInvoiceRight=true
{"errorCode":null,"description":null,"result":true,"paymentTime":null,"paymentMethod":null}
Mô tả
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null nếu cập nhật trạng thái thanh toán thành công) |
description | Mô tả lỗi (giá trị là null nếu cập nhật trạng thái thanh toán thành công) |
result | Kết quả cập nhật trạng thái thanh toán Thành công: true Không thành công: false |
paymentTime | Thời gian cập nhật trạng thái thanh toán |
paymentMethod | Phương thức thanh toán |
Cho phép chuyển trạng thái thanh toán của hóa đơn sang chưa thanh toán.
+ Cookie: giá trị access_token
+ Content-Type : application/x-www-form-urlencoded
Tên trường | Kiểu dữ liệu, ràng buộc | Dữ liệu/mô tả |
supplierTaxCode | Required : true DataType: String Minlength : Maxlength : 20 Format : [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001 |
invoiceNo | Required : true DataType: String Minlength : 7 Maxlength : 15 Format : [a-zA-Z0-9]*$ | Là ký hiệu hóa đơn + số hóa đơn vd : AA/20E0000001 |
strIssueDate | Required : true DataType: Minlength : Maxlength : Format:Tiêu chuẩn 4.1 | Ngày lập hóa đơn
|
supplierTaxCode=0100109106-712&invoiceNo=AA%2F20E0000002&strIssueDate=1600154781000
{
"errorCode": null,
"description": "Success"
}
Webservice dùng để lấy file PDF của dữ liệu để xem. Hệ thống tích hợp đẩy dữ liệu lập hóa đơn sang và SInvoice trả về file PDF của dữ liệu đó, các dữ liệu sẽ không được lưu vào trong SInvoice.
+ Cookie: giá trị access_token
+ Content-Type : application/json
Tên trường |
Kiểu dữ liệu, ràng buộc |
Mô tả |
supplierTaxCode | Required: true DataType: String Minlength: Maxlength: 20 Format: [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001
|
Thông số dữ liệu truyền vào tương tự phần Lập hóa đơn. Tham khảo json tại phần 6.2
Tên trường | Mô tả |
errorCode | Mã lỗi (giá trị là null không có lỗi gì xảy ra) |
description | Mô tả lỗi (giá trị là null không có lỗi gì xảy ra) |
fileName | Tên file tải về |
fileToBytes | Nội dung file được chuyển thành kiểu byte, dạng base64 |
Cho phép hệ thống tích hợp tra cứu hóa đơn đã được phát hành thành công dựa vào transactionUuid (Dữ liệu xác định tính duy nhất của 1 hóa đơn do bên phần mềm tích hợp sinh dữ liệu và kiểm soát)
Thường sử dụng API này khi cần đối soát dữ liệu giữa 2 hệ thống HDDT và phần mềm tích hợp.
+ Cookie: giá trị access_token
+ Content-Type : application/x-www-form-urlencoded
gồm các tham số:
Tên trường | Kiểu dữ liệu, ràng buộc | Dữ liệu/mô tả |
supplierTaxCode | Required: true DataType: String Minlength: Maxlength: 20 Format: [0-9-]+ | Mã số thuế của doanh nghiệp/chi nhánh phát hành hóa đơn. Một doanh nghiệp có thể có nhiều mã số thuế Mẫu 1: 0312770607 Mẫu 2: 0312770607-001
|
transactionUuid | Required: true DataType: String Minlength: 10 Maxlength: 36 Format: | Giá trị transactionUuid gán với hóa đơn khi gửi dữ liệu lập hóa đơn.
|
Vị dụ với định dạng formParam:
supplierTaxCode=0100109106&transactionUuid= 0100109106_test3_268_1
Hình ảnh Response trả về thành công
Thông tin chi tiết Response
{
"transactionUuid": "0100109106_test3_268_1",
"errorCode": null,
"description": null,
"result": [
{
"supplierTaxCode": "0100109106",
"invoiceNo": "AB/19E0000522",
"reservationCode": "OKMYMDX5F4",
"issueDate": 1587797116843
"status": "Hóa đơn gốc"
}
]
}
Đối với các hóa đơn theo Thông tư 78 đã được cơ quan thuế cấp mã sẽ có các thông tin bổ sung về mã cơ quan thuế như sau
STT | Tên thẻ | Ý nghĩa |
exchangeStatus | Mô tả trạng thái truyền nhận của HĐ với CQT | |
exchangeDes | Mô tả lỗi truyền nhận | |
codeOfTax | Mã CQT cấp |
{
"errorCode": null,
"description": null,
"transactionUuid": "4543Gfd565h",
"result": [
{
"supplierTaxCode": "0100109106-710",
"invoiceNo": "K21DTT4",
"reservationCode": "UFODH7MN7LT0GW5",
"issueDate": 1638852198000,
"status": "Hóa đơn điều chỉnh tiền",
"exchangeStatus": " Mã CQT cấp: 00BDD6525B75646655B654665B65466565",
"exchangeDes": null,
"codeOfTax": "00BDD6525B75646655B654665B65466565"
}
]
}
Đối tượng Response mô tả trạng thái lỗi Webservice trả về và đối tượng dữ liệu Webservice trả về. Bao gồm mã lỗi và mô tả lỗi.
Note: Khi phát sinh lỗi việc đầu tiên kiểm tra mã lỗi trong danh sách lỗi để nắm được tại sao lỗi và cách khắc phục.
Các trường thông tin sẽ được mapping lên mẫu hóa đơn phụ thuộc vào thiết kế chi tiết của mẫu hóa đơn đó. Về cơ bản sẽ các mẫu hóa đơn sẽ được mapping các trường như sau:
Lưu ý: trong trường hợp trường thông tin không hiển thị đúng, nguyên nhân có thể do dữ liệu gửi sang chưa đúng hoặc mẫu hóa đơn thiết kế không hiển thị đúng thông tin. Kiểm tra dữ liệu trong file hóa đơn gốc (xml) tải về xem đúng chưa.
Trước khi lập trình, các phần mềm tích hợp nên kiểm tra trước các API bằng POSTMAN để hiểu các dữ liệu cần phải truyền vào/trả về của hệ thống. Sau khi chạy thử xong, việc code sẽ nhanh hơn.
Chi tiết xem ở:
https://sinvoice.viettel.vn/ho-tro/huong-dan-su-dung/35-huong-dan-su-dung-postman-goi-api-webservice-hoa-don-dien-tu
Input: Các thông tin đầu vào giữ nguyên hiện trạng, chỉ bổ sung thêm trong generalInvoiceInfo hai thẻ như sau:
Tên trường | Kiểu dữ liệu | Mô tả |
originalInvoiceType | Required: True DataType: String Minlength: N/A Maxlength: Format: | Loại hóa đơn gốc Truyền giá trị số với ý nghĩa như sau 0- Không phải hóa đơn giấy/hóa đơn không tồn tại trên hệ thống 1-Hóa đơn TT78 2-Hóa đơn theo QĐ 1209 3-Hóa đơn điện tử/giấy TT32 4-Hóa đơn giấy TT 78 |
originalTemplateCode | Required: DataType: String Minlength: N/A Maxlength: 20 Format: | Bắt buộc truyền nếu originalInvoiceType là 1, 2, 3 hoặc 4 Ví dụ mẫu TT32: 01GTKT0/001 Ví dụ mẫu TT78: 1/0224 |
Output: Giữ nguyên hiện trạng
Ví dụ response trường hợp truyền sai giá trị originalInvoiceType
{
"code": 400,
"message": "BAD_REQUEST_ORIGINAL_INVOICE_TYPE_INVALID",
"data": "BAD_REQUEST_ORIGINAL_INVOICE_TYPE_INVALID"
}
-Trường hợp thẻ originalInvoiceType không truyền hoặc truyền giá trị rỗng/0 thì không bắt buộc truyền thẻ originalTemplateCode, hệ thống xác thực thông tin khi lập hóa đơn như hiện trạng.
-Trường hợp thẻ originalInvoiceType truyền giá trị 1, 2, 3 hoặc 4 thì
+Bắt buộc phải truyền thẻ originalTemplateCode, quy tắc xác thực thẻ này tương tự như thẻ templateCode hiện tại.
+Khi lập hóa đơn, hệ thống không kiểm tra tính tồn tại của hóa đơn gốc trên hệ thống, các quy tắc xác thực khác giữ nguyên hiện trạng.