Mục lục bài viết
Phạm vi: AIS-API 2.0, phiên bản 2.6 ngày 11/09/2026
Đây là toàn bộ nội dung kỹ thuật của tài liệu IRAS 22 trang về giao diện nộp hồ sơ thu nhập việc làm AIS-API 2.0, phiên bản 2.6 cập nhật 11/09/2026. Nhà phát triển phần mềm (SWD) có thể tích hợp việc kiểm tra và nộp IR8A, Phụ lục 8A và 8B vào phần mềm tiền lương, dùng yêu cầu HTTP có dữ liệu JSON cho Chương trình tự động đưa thu nhập vào hồ sơ thuế (AIS). SWD phải được xác thực với APEX; tài liệu dẫn hướng dẫn GovTech tại go.gov.sg/apexoauth.
Tên thuộc tính, mã, đường dẫn, chuỗi ví dụ và cấu trúc JSON dưới đây là dữ liệu kỹ thuật nguyên bản. Phần diễn giải bằng tiếng Việt phân biệt quy tắc, ví dụ và các điểm không khớp ngay trong tài liệu; không tự sửa chúng thành một giao diện thực thi mới.
Lịch sử đầy đủ của tài liệu
Mục lục nguồn: giới thiệu/đăng ký trang 4; dịch vụ và bảo mật mạng trang 5; bảo mật thông điệp/quy mô trang 6; thử nghiệm/chính thức trang 7; quy tắc chung trang 8; yêu cầu trang 9–17; phản hồi trang 18–22. Nhật ký 2.0 gọi ví dụ đầy đủ là 3.7.2, trong khi tiêu đề thân tài liệu đánh 3.7.1; các ví dụ được nhận diện theo tiêu đề và trang thực tế phía dưới.
Vuốt ngang trên điện thoại để xem đủ các cột.
| Ngày | Phiên bản | Thay đổi |
|---|---|---|
| 22/08/2024 | 1.0 | Bản nền AIS-API 2.0. |
| 29/11/2024 | 1.1 | Thêm 3.1 bảo mật mạng, 3.2 bảo mật thông điệp. |
| 22/05/2025 | 2.0 | Chốt đặc tả: thêm lấy mã ủy quyền Corppass qua OAuth 2.1; cập nhật địa chỉ thử nghiệm/chính thức; bỏ ERIS phần B/C/D trong appendix8B của danh sách dữ liệu/quy tắc kiểm tra; cập nhật ví dụ yêu cầu đầy đủ ở 3.7.2 theo nhật ký và ví dụ IR8A có nhiều 8A/8B ở 3.7.3. |
| 12/06/2025 | 2.1 | Cập nhật ví dụ 3.7.1–3.7.3 để postalCode là chuỗi. |
| 15/07/2025 | 2.2 | Rà soát các ký tự cho phép ở 3.6. |
| 26/09/2025 | 2.3 | Thêm ký tự bị cấm ở 3.6. |
| 31/12/2025 | 2.4 | Bỏ danh sách ký tự bị cấm ở 3.6; chuyển returnCode, data.acknowledgementCode và info.messageCode ở 3.8 sang kiểu chuỗi. |
| 17/06/2026 | 2.5 | Nhật ký ghi bỏ info.messagecode không dùng; cập nhật phản hồi thành công 3.8.1 và lỗi 3.8.2. Bảng/ví dụ ở phần sau vẫn có messageCode, được giữ riêng theo nguồn. |
| 11/09/2026 | 2.6 | Cập nhật URL trong các phần 1, 2, 3.2 và 3.4. |
2. Đăng ký sử dụng API
Phải thử API trong môi trường thử nghiệm (Sandbox) trước khi dùng môi trường chính thức (Production). Mọi SWD cần tài khoản Corppass trước khi đăng ký dịch vụ API; theo mục Corppass cho người dùng ngoài chính phủ trong hướng dẫn GovTech. Hướng dẫn đầy đủ APEX được dẫn tại go.gov.sg/complete-apex-user-guide.
- Sau khi đăng ký Corppass, tạo ứng dụng.
- Tạo khóa API.
- Tạo ứng dụng khách OAuth 2.1.
- Đăng ký ứng dụng sử dụng các API.
3. Lấy mã ủy quyền và chọn luồng giao dịch
Trước tiên gọi các API OAuth 2.1 để lấy mã ủy quyền Corppass. Khi gọi địa chỉ Authorization, tham số tax_agent chọn luồng: y nếu là đại lý thuế giao dịch cho khách hàng doanh nghiệp; n nếu xử lý việc thuế của chính doanh nghiệp. Đặc tả OAuth được dẫn tại go.gov.sg/oauth-specs. Có mã ủy quyền rồi mới dùng để gọi API.
Vuốt ngang trên điện thoại để xem đủ các cột.
| Môi trường | Phương thức | Địa chỉ được liệt kê ở mục 3 |
|---|---|---|
| Thử nghiệm | POST | https://sandbox.api.gov.sg/iras/employment-income-records/v2/Submit |
| Chính thức | POST | https://public.api.gov.sg/iras/employment-income-records/v2/Submit |
3.1. Bảo mật kết nối mạng
Phải gọi từ kết nối máy chủ với máy chủ. TLS và danh sách IP được cho phép bảo vệ liên lạc đầu cuối giữa máy chủ gọi và APEX. Máy chủ/phần mềm/ứng dụng phải hỗ trợ HTTP/2, TLS 1.2/1.3 và có thể phát yêu cầu HTTP GET, HTTP POST. Hai bộ mật mã TLS được nguồn liệt kê là ECDHE-RSA-AES256-GCM-SHA384 và ECDHE-RSA-AES128-GCM-SHA256.
3.2. Đầy đủ trường đầu HTTP và ví dụ gốc
Khối ví dụ trang 6 in các dòng: POST /iras/prod/EmpIncomeRecords/submit HTTP/1.1; Host: https://public.api.gov.sg; x-apex-apikey: 40e7be2f-0b4f-4985-bcc9-cdfd38c5b5c8; Authorization: Bearer eyAidHlwIjogIkpXVCIsICJhbGciOiAiUlMyNTYiIH0…….; Content-Type: application/json; Accept: application/json. Khóa và mã này chỉ là chuỗi minh họa công khai, không phải thông tin truy cập để sử dụng.
Đường dẫn /iras/prod/EmpIncomeRecords/submit và HTTP/1.1 trong khối mẫu không giống địa chỉ /iras/employment-income-records/v2/Submit ở mục 3 và yêu cầu HTTP/2 ở 3.1. Bài giữ đúng sự khác nhau giữa bảng quy tắc và khối mẫu, không dùng khối mẫu để thay thế địa chỉ hiện hành được bảng nêu.
Vuốt ngang trên điện thoại để xem đủ các cột.
| Trường đầu | Giá trị/yêu cầu |
|---|---|
| x-apex-apikey | Khóa API của ứng dụng đã tạo trên APEX và đã đăng ký API. |
| Authorization | Mã truy cập Corppass dạng JWT, thêm tiền tố Bearer. Khi sinh tham số cho địa chỉ ủy quyền, dùng phạm vi EmpIncomeSub; tài liệu chỉ go.gov.sg/oauthcorppassapex để tạo mã. |
| Content-Type | application/json |
3.3. Quy mô, chia gói và giới hạn tốc độ
- Mỗi gói nộp tối đa 2.000 hồ sơ và không quá 8 MB tổng dữ liệu. Nếu vượt, ứng dụng nên chia thành nhiều gói. Chú thích 1 khuyến nghị mạnh đặt số hồ sơ tối đa thành biến để dễ điều chỉnh khi thay đổi.
- Ví dụ 3.000 nhân viên: yêu cầu thứ nhất có 2.000 hồ sơ, kích thước dưới 8 MB; yêu cầu thứ hai 1.000 hồ sơ, dưới 8 MB.
- Nếu một gói bị lỗi, JSON trả chi tiết, nghĩa là gói yêu cầu đó chưa được IRAS chấp nhận. Người dùng phải sửa lỗi và gửi lại gói lỗi. Ví dụ yêu cầu thứ nhất 2.000 thành công, thứ hai 1.000 thất bại: chỉ sửa/nộp lại thứ hai, không phải nộp lại thứ nhất đã thành công.
- Ví dụ bị từ chối: 1.000 hồ sơ nhưng trên 8 MB; hoặc 2.001 hồ sơ. Cấu hình gói phải đáp ứng cả giới hạn số hồ sơ và dung lượng.
- Mỗi ứng dụng giới hạn 3.000 yêu cầu mỗi giờ. Chạm giới hạn trả trạng thái 429 với thông báo Assembly Rate Limit exceeded (Vượt giới hạn tốc độ). Khi gặp lỗi này nên hướng dẫn người dùng thử lại trong giờ tiếp theo.
3.4–3.5. Thử nghiệm, kiểm định hằng năm và môi trường chính thức
Sandbox mô phỏng môi trường chính thức để thử tích hợp trước khi gửi dữ liệu thật. SWD phải dùng tổ chức thử nghiệm do IRAS cung cấp và đã tạo ứng dụng khách OAuth 2.1 Sandbox trên APEX. Có kiểm định hằng năm để bảo đảm phần mềm nộp đúng đặc tả; xem quy trình tại go.gov.sg/iras-ais-vendor.
Sử dụng API chính thức cần IRAS chấp thuận, phụ thuộc hoàn thành thử nghiệm thành công. Tương tự Sandbox, SWD phải tạo ứng dụng khách OAuth 2.1 khi đăng ký API. Sau khi chấp thuận, có thể gửi đối tượng JSON tới URL chính thức. API IRAS chịu Điều khoản sử dụng API; APEX chịu Điều khoản sử dụng API Exchange.
Môi trường chính thức chỉ dành cho mục đích trong mô tả dịch vụ. Mọi cách dùng khác, kể cả mọi hình thức thử nghiệm, bị nghiêm cấm. Hoạt động đó bị coi vi phạm điều khoản và có thể dẫn tới đình chỉ hoặc chấm dứt tài khoản.
3.6. Quy tắc chung và kiểu dữ liệu
- JSON phân biệt chữ hoa/chữ thường. Chuỗi ngày phải theo ISO-8601. Thuộc tính theo quy ước camel-case; trừ khi nói rõ là tùy chọn, phải cung cấp mọi thuộc tính đối tượng JSON. Trừ khi quy định khác, các dịch vụ JSON gọi bằng HTTP POST.
- Mọi trường chuỗi chịu kiểm tra. Ký tự cho phép: ASCII 32–127; ü; Ü; İ; xuống dòng LF mã Unicode 10; trở về đầu dòng CR mã 13; gạch ngang ngắn –; gạch ngang dài —; dấu ngoặc kép cong “ ” và nháy đơn cong ‘ ’. Các ký tự trong danh sách được giữ đúng để tra kỹ thuật.
Vuốt ngang trên điện thoại để xem đủ các cột.
| Kiểu/kích thước | Ý nghĩa | Ví dụ |
|---|---|---|
| String(12) | Chuỗi tối đa 12 ký tự | "180011032C" |
| Number(4) | Giá trị số tối đa bốn chữ số nguyên | 1990 |
| Decimal(13,2) | Tối đa 13 chữ số phần nguyên và hai chữ số thập phân | 1234567890123.12 |
| Date(10) | Ngày gồm năm-tháng-ngày YYYY-MM-DD | "2024-01-01" |
3.7. Năm nhóm dữ liệu yêu cầu và quy tắc chi tiết
Trước khi thực hiện, nguồn yêu cầu tải tệp Excel List of Data Items and Validation Rules (Danh sách mục dữ liệu và quy tắc kiểm tra) tại go.gov.sg/aisapi2-dataitems. Các mẫu JSON dưới dùng khóa ir8a, khác chữ iR8A trong bảng; không tự đổi hoa/thường vì đặc tả nói JSON phân biệt hoa/thường. Có thể mở bảng Excel chính thức để tra kiểu/điều kiện chi tiết của từng mục.
Ba ví dụ gốc được giữ đủ từng đường dẫn và giá trị JSON ở các bảng tiếp theo. Dấu [0], [1], [2] là vị trí trong mảng, không thay recordId; null, chuỗi rỗng "", đối tượng rỗng {} và mảng rỗng [] được phân biệt. Đây là mẫu tài liệu, không phải thông tin người dùng. Employee A/B/C nghĩa là nhân viên A/B/C; Chef là đầu bếp, Director là giám đốc; SWD Organisation Name và Application Name là chỗ ghi tên nhà phát triển/phần mềm.
Vuốt ngang trên điện thoại để xem đủ các cột.
| Đối tượng theo bảng trang 9 | Nội dung |
|---|---|
| orgAndSubmissionInfo | Thông tin tổ chức và lần nộp AIS; xem trang tính cùng tên. |
| employeePersonalParticulars | Thông tin cá nhân nhân viên cho lần nộp AIS; xem trang tính cùng tên. |
| iR8A | Các mục dữ liệu Form IR8A; bảng nguồn dùng chữ iR8A và dẫn trang tính iR8A. |
| appendix8A | Các mục dữ liệu Phụ lục 8A; xem trang tính cùng tên. |
| appendix8B | Các mục dữ liệu Phụ lục 8B; xem trang tính cùng tên. |
3.7.1. Mẫu cấu trúc đầy đủ, toàn bộ trường
Giữ toàn bộ mẫu tại trang 10–11 theo dạng đường dẫn/giá trị để đọc trên màn hình; không bỏ trường rỗng hay tự tính lại số.
Vuốt ngang trên điện thoại để xem đủ các cột.
| Đường dẫn JSON gốc | Giá trị JSON gốc |
|---|---|
| orgAndSubmissionInfo.validateOnly | false |
| orgAndSubmissionInfo.bypassWarning | false |
| orgAndSubmissionInfo.incomeYear | null |
| orgAndSubmissionInfo.employerTaxRefNumber | "" |
| orgAndSubmissionInfo.authorisedPersonName | "" |
| orgAndSubmissionInfo.contactNumber | null |
| orgAndSubmissionInfo.emailAddress | "" |
| orgAndSubmissionInfo.submissionType | "" |
| orgAndSubmissionInfo.softwareCompanyName | "" |
| orgAndSubmissionInfo.softwareName | "" |
| orgAndSubmissionInfo.totalNumberIR8A | null |
| orgAndSubmissionInfo.amountTotalIncomeOfIR8A | null |
| orgAndSubmissionInfo.totalNumberOfApp8A | null |
| orgAndSubmissionInfo.totalNumberOfApp8B | null |
| employeePersonalParticulars[0].recordId | null |
| employeePersonalParticulars[0].idType | "" |
| employeePersonalParticulars[0].idNumber | "" |
| employeePersonalParticulars[0].name | "" |
| employeePersonalParticulars[0].dateOfBirth | "" |
| employeePersonalParticulars[0].sex | "" |
| employeePersonalParticulars[0].addressType | "" |
| employeePersonalParticulars[0].addressLine1 | "" |
| employeePersonalParticulars[0].addressLine2 | "" |
| employeePersonalParticulars[0].addressLine3 | "" |
| employeePersonalParticulars[0].postalCode | "" |
| employeePersonalParticulars[0].countryCodeForForeignAddress | "" |
| employeePersonalParticulars[0].designation | "" |
| employeePersonalParticulars[0].bankCode | "" |
| employeePersonalParticulars[0].commencementDate | "" |
| employeePersonalParticulars[0].cessationDate | "" |
| employeePersonalParticulars[0].ir8a.periodPaymentFromDate | "" |
| employeePersonalParticulars[0].ir8a.periodPaymentToDate | "" |
| employeePersonalParticulars[0].ir8a.salary | null |
| employeePersonalParticulars[0].ir8a.bonus | null |
| employeePersonalParticulars[0].ir8a.nonContractualBonusPaidDate | "" |
| employeePersonalParticulars[0].ir8a.directorFees | null |
| employeePersonalParticulars[0].ir8a.directorsFeesApprovalDate | "" |
| employeePersonalParticulars[0].ir8a.section45Indicator | "" |
| employeePersonalParticulars[0].ir8a.allowances | null |
| employeePersonalParticulars[0].ir8a.grossCommission | null |
| employeePersonalParticulars[0].ir8a.gratuityNoticePayExGratiaPayment | null |
| employeePersonalParticulars[0].ir8a.compensationForLossOfOffice | null |
| employeePersonalParticulars[0].ir8a.compensationForLossOfOfficeIndicator | "" |
| employeePersonalParticulars[0].ir8a.pensionRetirementBenefitsAccruedFrom1993 | null |
| employeePersonalParticulars[0].ir8a.designatedPensionOrProvidentFundName | "" |
| employeePersonalParticulars[0].ir8a.employerContributionToPensionOrProvidentFundOutsideSg | null |
| employeePersonalParticulars[0].ir8a.excessOrVoluntaryCpfContributionByEmployer | null |
| employeePersonalParticulars[0].ir8a.gainsAndProfitsFromSOGS101b | null |
| employeePersonalParticulars[0].ir8a.gainsAndProfitsUnderS101g | null |
| employeePersonalParticulars[0].ir8a.valueOfBenefitsInKind | null |
| employeePersonalParticulars[0].ir8a.othersIncome | null |
| employeePersonalParticulars[0].ir8a.totalIncome | null |
| employeePersonalParticulars[0].ir8a.exemptIncomeOrIncomeSubjectToTaxRemission | null |
| employeePersonalParticulars[0].ir8a.exemptOrRemissionIncomeIndicator | "" |
| employeePersonalParticulars[0].ir8a.incomeTaxBorneByEmployerIndicator | "" |
| employeePersonalParticulars[0].ir8a.amountOfIncomeForTaxBorneByEmployer | null |
| employeePersonalParticulars[0].ir8a.fixedAmountOfIncomeForTaxBorneByEmployee | null |
| employeePersonalParticulars[0].ir8a.cpfOrDesignatedFund | null |
| employeePersonalParticulars[0].ir8a.donationsDeductedThroughSalaries | null |
| employeePersonalParticulars[0].ir8a.contributionsToMosqueBuildingFund | null |
| employeePersonalParticulars[0].ir8a.lifeInsurancePremiumThroughSalaries | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].accommodationId | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].addressPlaceOfResidenceByEmployer | "" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].occupationFromDate | "" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].occupationToDate | "" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].numberOfDays | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].numberOfEmployeeSharing | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].annualValueOfPremises | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].furnitureAndFittingsValueIndicator | "" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].furnitureAndFittingsValue | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].rentPaidByEmployer | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].taxableValueOfPlaceOfResidence | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].totalRentPaidByEmployeeForPlaceOfResidence | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].totalTaxableValueOfPlaceOfResidence | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].utilitiesAndHousekeepingCosts | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].driver | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].servantOrGardenerOrUpkeep | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].taxableValueOfUtilitiesAndHousekeeping | null |
| employeePersonalParticulars[0].appendix8A.actualCostOfHotelOrServicedApartment | null |
| employeePersonalParticulars[0].appendix8A.amountPaidByEmployee | null |
| employeePersonalParticulars[0].appendix8A.taxableValueOfHotelAccommodation | null |
| employeePersonalParticulars[0].appendix8A.costOfLeavePassageAndIncidentalBenefits | null |
| employeePersonalParticulars[0].appendix8A.interestPaidByEmployer | null |
| employeePersonalParticulars[0].appendix8A.insurancePremiumsPaidByEmployer | null |
| employeePersonalParticulars[0].appendix8A.freeOrSubsidisedHoliday | null |
| employeePersonalParticulars[0].appendix8A.educationalExpenses | null |
| employeePersonalParticulars[0].appendix8A.entranceOrTransferFeesToSocialClubs | null |
| employeePersonalParticulars[0].appendix8A.gainsFromAssets | null |
| employeePersonalParticulars[0].appendix8A.fullCostOfMotorVehicle | null |
| employeePersonalParticulars[0].appendix8A.carBenefit | null |
| employeePersonalParticulars[0].appendix8A.otherNonMonetaryAwardsOrBenefits | null |
| employeePersonalParticulars[0].appendix8A.totalValueOfBenefitsInKind | null |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].eebrId | 1 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].companyIdNumber | "" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].companyName | "" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].planType | "" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].dateOfGrant | "" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].dateOfExerciseOrVesting | "" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].exercisePrice | null |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].openMarketValuePerShare | null |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].numberOfShares | null |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].grossAmountGains | null |
| employeePersonalParticulars[0].appendix8B.totalGrossAmountGainsAfter2003S101b | null |
| employeePersonalParticulars[0].appendix8B.totalGrossAmountGainsBefore2003S101g | null |
3.7.2. Mẫu chỉ IR8A: đủ ba nhân viên
Giữ toàn bộ mẫu tại trang 12–14 theo dạng đường dẫn/giá trị để đọc trên màn hình; không bỏ trường rỗng hay tự tính lại số.
Vuốt ngang trên điện thoại để xem đủ các cột.
| Đường dẫn JSON gốc | Giá trị JSON gốc |
|---|---|
| orgAndSubmissionInfo.validateOnly | false |
| orgAndSubmissionInfo.bypassWarning | false |
| orgAndSubmissionInfo.incomeYear | 2024 |
| orgAndSubmissionInfo.employerTaxRefNumber | "180011032C" |
| orgAndSubmissionInfo.authorisedPersonName | "John Adams" |
| orgAndSubmissionInfo.contactNumber | 91234567 |
| orgAndSubmissionInfo.emailAddress | "abc@email.com.sg" |
| orgAndSubmissionInfo.submissionType | "O" |
| orgAndSubmissionInfo.softwareCompanyName | "SWD Organisation Name" |
| orgAndSubmissionInfo.softwareName | "Application Name" |
| orgAndSubmissionInfo.totalNumberIR8A | 3 |
| orgAndSubmissionInfo.amountTotalIncomeOfIR8A | 165000 |
| orgAndSubmissionInfo.totalNumberOfApp8A | 0 |
| orgAndSubmissionInfo.totalNumberOfApp8B | 0 |
| employeePersonalParticulars[0].recordId | 1 |
| employeePersonalParticulars[0].idType | "1" |
| employeePersonalParticulars[0].idNumber | "S1234567A" |
| employeePersonalParticulars[0].name | "Employee A" |
| employeePersonalParticulars[0].dateOfBirth | "1981-01-02" |
| employeePersonalParticulars[0].sex | "M" |
| employeePersonalParticulars[0].addressType | "" |
| employeePersonalParticulars[0].addressLine1 | "" |
| employeePersonalParticulars[0].addressLine2 | "" |
| employeePersonalParticulars[0].addressLine3 | "" |
| employeePersonalParticulars[0].postalCode | "" |
| employeePersonalParticulars[0].countryCodeForForeignAddress | "" |
| employeePersonalParticulars[0].designation | "Chef" |
| employeePersonalParticulars[0].bankCode | "7232" |
| employeePersonalParticulars[0].commencementDate | "2024-01-02" |
| employeePersonalParticulars[0].cessationDate | "" |
| employeePersonalParticulars[0].ir8a.periodPaymentFromDate | "2024-01-02" |
| employeePersonalParticulars[0].ir8a.periodPaymentToDate | "2024-12-31" |
| employeePersonalParticulars[0].ir8a.salary | 36000 |
| employeePersonalParticulars[0].ir8a.bonus | 3000 |
| employeePersonalParticulars[0].ir8a.nonContractualBonusPaidDate | "2024-12-10" |
| employeePersonalParticulars[0].ir8a.directorFees | null |
| employeePersonalParticulars[0].ir8a.directorsFeesApprovalDate | "" |
| employeePersonalParticulars[0].ir8a.section45Indicator | "" |
| employeePersonalParticulars[0].ir8a.allowances | null |
| employeePersonalParticulars[0].ir8a.grossCommission | null |
| employeePersonalParticulars[0].ir8a.gratuityNoticePayExGratiaPayment | null |
| employeePersonalParticulars[0].ir8a.compensationForLossOfOffice | null |
| employeePersonalParticulars[0].ir8a.compensationForLossOfOfficeIndicator | "" |
| employeePersonalParticulars[0].ir8a.pensionRetirementBenefitsAccruedFrom1993 | null |
| employeePersonalParticulars[0].ir8a.designatedPensionOrProvidentFundName | "" |
| employeePersonalParticulars[0].ir8a.employerContributionToPensionOrProvidentFundOutsideSg | null |
| employeePersonalParticulars[0].ir8a.excessOrVoluntaryCpfContributionByEmployer | null |
| employeePersonalParticulars[0].ir8a.gainsAndProfitsFromSOGS101b | null |
| employeePersonalParticulars[0].ir8a.gainsAndProfitsUnderS101g | null |
| employeePersonalParticulars[0].ir8a.valueOfBenefitsInKind | null |
| employeePersonalParticulars[0].ir8a.othersIncome | null |
| employeePersonalParticulars[0].ir8a.totalIncome | 39000 |
| employeePersonalParticulars[0].ir8a.exemptIncomeOrIncomeSubjectToTaxRemission | null |
| employeePersonalParticulars[0].ir8a.exemptOrRemissionIncomeIndicator | "" |
| employeePersonalParticulars[0].ir8a.incomeTaxBorneByEmployerIndicator | "" |
| employeePersonalParticulars[0].ir8a.amountOfIncomeForTaxBorneByEmployer | null |
| employeePersonalParticulars[0].ir8a.fixedAmountOfIncomeForTaxBorneByEmployee | null |
| employeePersonalParticulars[0].ir8a.cpfOrDesignatedFund | 7800 |
| employeePersonalParticulars[0].ir8a.donationsDeductedThroughSalaries | 12 |
| employeePersonalParticulars[0].ir8a.contributionsToMosqueBuildingFund | null |
| employeePersonalParticulars[0].ir8a.lifeInsurancePremiumThroughSalaries | null |
| employeePersonalParticulars[0].appendix8A | {} |
| employeePersonalParticulars[0].appendix8B | {} |
| employeePersonalParticulars[1].recordId | 2 |
| employeePersonalParticulars[1].idType | "1" |
| employeePersonalParticulars[1].idNumber | "S9876543A" |
| employeePersonalParticulars[1].name | "Employee B" |
| employeePersonalParticulars[1].dateOfBirth | "1990-11-02" |
| employeePersonalParticulars[1].sex | "F" |
| employeePersonalParticulars[1].addressType | "L" |
| employeePersonalParticulars[1].addressLine1 | "Blk 123 Choa Chu Kang Rd #10-01" |
| employeePersonalParticulars[1].addressLine2 | "" |
| employeePersonalParticulars[1].addressLine3 | "" |
| employeePersonalParticulars[1].postalCode | "670123" |
| employeePersonalParticulars[1].countryCodeForForeignAddress | "" |
| employeePersonalParticulars[1].designation | "" |
| employeePersonalParticulars[1].bankCode | "" |
| employeePersonalParticulars[1].commencementDate | "" |
| employeePersonalParticulars[1].cessationDate | "2024-06-30" |
| employeePersonalParticulars[1].ir8a.periodPaymentFromDate | "2024-01-01" |
| employeePersonalParticulars[1].ir8a.periodPaymentToDate | "2024-06-30" |
| employeePersonalParticulars[1].ir8a.salary | 24000 |
| employeePersonalParticulars[1].ir8a.bonus | 2000 |
| employeePersonalParticulars[1].ir8a.nonContractualBonusPaidDate | "" |
| employeePersonalParticulars[1].ir8a.directorFees | null |
| employeePersonalParticulars[1].ir8a.directorsFeesApprovalDate | "" |
| employeePersonalParticulars[1].ir8a.section45Indicator | "" |
| employeePersonalParticulars[1].ir8a.allowances | null |
| employeePersonalParticulars[1].ir8a.grossCommission | null |
| employeePersonalParticulars[1].ir8a.gratuityNoticePayExGratiaPayment | null |
| employeePersonalParticulars[1].ir8a.compensationForLossOfOffice | null |
| employeePersonalParticulars[1].ir8a.compensationForLossOfOfficeIndicator | "" |
| employeePersonalParticulars[1].ir8a.pensionRetirementBenefitsAccruedFrom1993 | null |
| employeePersonalParticulars[1].ir8a.designatedPensionOrProvidentFundName | "" |
| employeePersonalParticulars[1].ir8a.employerContributionToPensionOrProvidentFundOutsideSg | null |
| employeePersonalParticulars[1].ir8a.excessOrVoluntaryCpfContributionByEmployer | null |
| employeePersonalParticulars[1].ir8a.gainsAndProfitsFromSOGS101b | null |
| employeePersonalParticulars[1].ir8a.gainsAndProfitsUnderS101g | null |
| employeePersonalParticulars[1].ir8a.valueOfBenefitsInKind | null |
| employeePersonalParticulars[1].ir8a.othersIncome | null |
| employeePersonalParticulars[1].ir8a.totalIncome | 26000 |
| employeePersonalParticulars[1].ir8a.exemptIncomeOrIncomeSubjectToTaxRemission | null |
| employeePersonalParticulars[1].ir8a.exemptOrRemissionIncomeIndicator | "" |
| employeePersonalParticulars[1].ir8a.incomeTaxBorneByEmployerIndicator | "" |
| employeePersonalParticulars[1].ir8a.amountOfIncomeForTaxBorneByEmployer | null |
| employeePersonalParticulars[1].ir8a.fixedAmountOfIncomeForTaxBorneByEmployee | null |
| employeePersonalParticulars[1].ir8a.cpfOrDesignatedFund | 5200 |
| employeePersonalParticulars[1].ir8a.donationsDeductedThroughSalaries | 6 |
| employeePersonalParticulars[1].ir8a.contributionsToMosqueBuildingFund | null |
| employeePersonalParticulars[1].ir8a.lifeInsurancePremiumThroughSalaries | null |
| employeePersonalParticulars[1].appendix8A | {} |
| employeePersonalParticulars[1].appendix8B | {} |
| employeePersonalParticulars[2].recordId | 3 |
| employeePersonalParticulars[2].idType | "2" |
| employeePersonalParticulars[2].idNumber | "F1234567A" |
| employeePersonalParticulars[2].name | "Employee C" |
| employeePersonalParticulars[2].dateOfBirth | "1968-01-02" |
| employeePersonalParticulars[2].sex | "M" |
| employeePersonalParticulars[2].addressType | "F" |
| employeePersonalParticulars[2].addressLine1 | "12 Jalan Indah, Johor Bahru" |
| employeePersonalParticulars[2].addressLine2 | "" |
| employeePersonalParticulars[2].addressLine3 | "" |
| employeePersonalParticulars[2].postalCode | "" |
| employeePersonalParticulars[2].countryCodeForForeignAddress | "MY" |
| employeePersonalParticulars[2].designation | "Director" |
| employeePersonalParticulars[2].bankCode | "" |
| employeePersonalParticulars[2].commencementDate | "" |
| employeePersonalParticulars[2].cessationDate | "" |
| employeePersonalParticulars[2].ir8a.periodPaymentFromDate | "2024-01-01" |
| employeePersonalParticulars[2].ir8a.periodPaymentToDate | "2024-12-31" |
| employeePersonalParticulars[2].ir8a.salary | null |
| employeePersonalParticulars[2].ir8a.bonus | null |
| employeePersonalParticulars[2].ir8a.nonContractualBonusPaidDate | "" |
| employeePersonalParticulars[2].ir8a.directorFees | 100000 |
| employeePersonalParticulars[2].ir8a.directorsFeesApprovalDate | "2024-06-30" |
| employeePersonalParticulars[2].ir8a.section45Indicator | "Y" |
| employeePersonalParticulars[2].ir8a.allowances | null |
| employeePersonalParticulars[2].ir8a.grossCommission | null |
| employeePersonalParticulars[2].ir8a.gratuityNoticePayExGratiaPayment | null |
| employeePersonalParticulars[2].ir8a.compensationForLossOfOffice | null |
| employeePersonalParticulars[2].ir8a.compensationForLossOfOfficeIndicator | "" |
| employeePersonalParticulars[2].ir8a.pensionRetirementBenefitsAccruedFrom1993 | null |
| employeePersonalParticulars[2].ir8a.designatedPensionOrProvidentFundName | "" |
| employeePersonalParticulars[2].ir8a.employerContributionToPensionOrProvidentFundOutsideSg | null |
| employeePersonalParticulars[2].ir8a.excessOrVoluntaryCpfContributionByEmployer | null |
| employeePersonalParticulars[2].ir8a.gainsAndProfitsFromSOGS101b | null |
| employeePersonalParticulars[2].ir8a.gainsAndProfitsUnderS101g | null |
| employeePersonalParticulars[2].ir8a.valueOfBenefitsInKind | null |
| employeePersonalParticulars[2].ir8a.othersIncome | null |
| employeePersonalParticulars[2].ir8a.totalIncome | 100000 |
| employeePersonalParticulars[2].ir8a.exemptIncomeOrIncomeSubjectToTaxRemission | null |
| employeePersonalParticulars[2].ir8a.exemptOrRemissionIncomeIndicator | "" |
| employeePersonalParticulars[2].ir8a.incomeTaxBorneByEmployerIndicator | "F" |
| employeePersonalParticulars[2].ir8a.amountOfIncomeForTaxBorneByEmployer | null |
| employeePersonalParticulars[2].ir8a.fixedAmountOfIncomeForTaxBorneByEmployee | null |
| employeePersonalParticulars[2].ir8a.cpfOrDesignatedFund | null |
| employeePersonalParticulars[2].ir8a.donationsDeductedThroughSalaries | null |
| employeePersonalParticulars[2].ir8a.contributionsToMosqueBuildingFund | null |
| employeePersonalParticulars[2].ir8a.lifeInsurancePremiumThroughSalaries | null |
| employeePersonalParticulars[2].appendix8A | {} |
| employeePersonalParticulars[2].appendix8B | {} |
3.7.3. Mẫu IR8A có nhiều bản ghi 8A và 8B
Giữ toàn bộ mẫu tại trang 15–17 theo dạng đường dẫn/giá trị để đọc trên màn hình; không bỏ trường rỗng hay tự tính lại số.
Vuốt ngang trên điện thoại để xem đủ các cột.
| Đường dẫn JSON gốc | Giá trị JSON gốc |
|---|---|
| orgAndSubmissionInfo.validateOnly | false |
| orgAndSubmissionInfo.bypassWarning | false |
| orgAndSubmissionInfo.incomeYear | 2024 |
| orgAndSubmissionInfo.employerTaxRefNumber | "180011032C" |
| orgAndSubmissionInfo.authorisedPersonName | "John Adams" |
| orgAndSubmissionInfo.contactNumber | 91234567 |
| orgAndSubmissionInfo.emailAddress | "abc@email.com.sg" |
| orgAndSubmissionInfo.submissionType | "O" |
| orgAndSubmissionInfo.softwareCompanyName | "SWD Organisation Name" |
| orgAndSubmissionInfo.softwareName | "Application Name" |
| orgAndSubmissionInfo.totalNumberIR8A | 1 |
| orgAndSubmissionInfo.amountTotalIncomeOfIR8A | 77000 |
| orgAndSubmissionInfo.totalNumberOfApp8A | 1 |
| orgAndSubmissionInfo.totalNumberOfApp8B | 1 |
| employeePersonalParticulars[0].recordId | 1 |
| employeePersonalParticulars[0].idType | "1" |
| employeePersonalParticulars[0].idNumber | "S8034567A" |
| employeePersonalParticulars[0].name | "Employee A" |
| employeePersonalParticulars[0].dateOfBirth | "1980-11-26" |
| employeePersonalParticulars[0].sex | "M" |
| employeePersonalParticulars[0].addressType | "Senior Chief Executive" |
| employeePersonalParticulars[0].addressLine1 | "" |
| employeePersonalParticulars[0].addressLine2 | "" |
| employeePersonalParticulars[0].addressLine3 | "" |
| employeePersonalParticulars[0].postalCode | "" |
| employeePersonalParticulars[0].countryCodeForForeignAddress | "" |
| employeePersonalParticulars[0].designation | "" |
| employeePersonalParticulars[0].bankCode | "7232" |
| employeePersonalParticulars[0].commencementDate | "2024-02-01" |
| employeePersonalParticulars[0].cessationDate | "" |
| employeePersonalParticulars[0].ir8a.periodPaymentFromDate | "2024-02-01" |
| employeePersonalParticulars[0].ir8a.periodPaymentToDate | "2024-12-31" |
| employeePersonalParticulars[0].ir8a.salary | 55000 |
| employeePersonalParticulars[0].ir8a.bonus | 10000 |
| employeePersonalParticulars[0].ir8a.nonContractualBonusPaidDate | "2024-12-31" |
| employeePersonalParticulars[0].ir8a.directorFees | null |
| employeePersonalParticulars[0].ir8a.directorsFeesApprovalDate | "" |
| employeePersonalParticulars[0].ir8a.section45Indicator | "" |
| employeePersonalParticulars[0].ir8a.allowances | 2000 |
| employeePersonalParticulars[0].ir8a.grossCommission | 1000 |
| employeePersonalParticulars[0].ir8a.gratuityNoticePayExGratiaPayment | 1000 |
| employeePersonalParticulars[0].ir8a.compensationForLossOfOffice | null |
| employeePersonalParticulars[0].ir8a.compensationForLossOfOfficeIndicator | "" |
| employeePersonalParticulars[0].ir8a.pensionRetirementBenefitsAccruedFrom1993 | 1000 |
| employeePersonalParticulars[0].ir8a.designatedPensionOrProvidentFundName | "Provident Fund" |
| employeePersonalParticulars[0].ir8a.employerContributionToPensionOrProvidentFundOutsideSg | 1000 |
| employeePersonalParticulars[0].ir8a.excessOrVoluntaryCpfContributionByEmployer | 1000 |
| employeePersonalParticulars[0].ir8a.gainsAndProfitsFromSOGS101b | 2000 |
| employeePersonalParticulars[0].ir8a.gainsAndProfitsUnderS101g | 1000 |
| employeePersonalParticulars[0].ir8a.valueOfBenefitsInKind | 3000 |
| employeePersonalParticulars[0].ir8a.othersIncome | 12000 |
| employeePersonalParticulars[0].ir8a.totalIncome | 77000 |
| employeePersonalParticulars[0].ir8a.exemptIncomeOrIncomeSubjectToTaxRemission | 10000 |
| employeePersonalParticulars[0].ir8a.exemptOrRemissionIncomeIndicator | "1" |
| employeePersonalParticulars[0].ir8a.incomeTaxBorneByEmployerIndicator | "P" |
| employeePersonalParticulars[0].ir8a.amountOfIncomeForTaxBorneByEmployer | 10000 |
| employeePersonalParticulars[0].ir8a.fixedAmountOfIncomeForTaxBorneByEmployee | null |
| employeePersonalParticulars[0].ir8a.cpfOrDesignatedFund | 15400 |
| employeePersonalParticulars[0].ir8a.donationsDeductedThroughSalaries | 12 |
| employeePersonalParticulars[0].ir8a.contributionsToMosqueBuildingFund | 10 |
| employeePersonalParticulars[0].ir8a.lifeInsurancePremiumThroughSalaries | 200 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].accommodationId | 1 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].addressPlaceOfResidenceByEmployer | "12 Kings Rd, S123456" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].occupationFromDate | "2024-01-01" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].occupationToDate | "2024-06-30" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].numberOfDays | 181 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].numberOfEmployeeSharing | 1 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].annualValueOfPremises | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].furnitureAndFittingsValueIndicator | "" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].furnitureAndFittingsValue | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].rentPaidByEmployer | 1000 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].taxableValueOfPlaceOfResidence | 1000 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].totalRentPaidByEmployeeForPlaceOfResidence | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].totalTaxableValueOfPlaceOfResidence | 1000 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].utilitiesAndHousekeepingCosts | 100 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].driver | 100 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].servantOrGardenerOrUpkeep | 100 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[0].taxableValueOfUtilitiesAndHousekeeping | 300 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].accommodationId | 2 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].addressPlaceOfResidenceByEmployer | "13 Kings Rd, S123457" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].occupationFromDate | "2024-07-01" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].occupationToDate | "2024-12-31" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].numberOfDays | 184 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].numberOfEmployeeSharing | 1 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].annualValueOfPremises | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].furnitureAndFittingsValueIndicator | "" |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].furnitureAndFittingsValue | null |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].rentPaidByEmployer | 1500 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].taxableValueOfPlaceOfResidence | 1500 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].totalRentPaidByEmployeeForPlaceOfResidence | 800 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].totalTaxableValueOfPlaceOfResidence | 700 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].utilitiesAndHousekeepingCosts | 100 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].driver | 100 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].servantOrGardenerOrUpkeep | 100 |
| employeePersonalParticulars[0].appendix8A.accommodationRecords[1].taxableValueOfUtilitiesAndHousekeeping | 300 |
| employeePersonalParticulars[0].appendix8A.actualCostOfHotelOrServicedApartment | null |
| employeePersonalParticulars[0].appendix8A.amountPaidByEmployee | null |
| employeePersonalParticulars[0].appendix8A.taxableValueOfHotelAccommodation | null |
| employeePersonalParticulars[0].appendix8A.costOfLeavePassageAndIncidentalBenefits | 100 |
| employeePersonalParticulars[0].appendix8A.interestPaidByEmployer | 100 |
| employeePersonalParticulars[0].appendix8A.insurancePremiumsPaidByEmployer | 100 |
| employeePersonalParticulars[0].appendix8A.freeOrSubsidisedHoliday | 100 |
| employeePersonalParticulars[0].appendix8A.educationalExpenses | 100 |
| employeePersonalParticulars[0].appendix8A.entranceOrTransferFeesToSocialClubs | 100 |
| employeePersonalParticulars[0].appendix8A.gainsFromAssets | 50 |
| employeePersonalParticulars[0].appendix8A.fullCostOfMotorVehicle | 30 |
| employeePersonalParticulars[0].appendix8A.carBenefit | 20 |
| employeePersonalParticulars[0].appendix8A.otherNonMonetaryAwardsOrBenefits | null |
| employeePersonalParticulars[0].appendix8A.totalValueOfBenefitsInKind | 3000 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].eebrId | 1 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].companyIdNumber | "180011032C" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].companyName | "AIS Employer" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].planType | "ESOW" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].dateOfGrant | "2023-01-04" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].dateOfExerciseOrVesting | "2024-07-02" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].exercisePrice | 0 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].openMarketValuePerShare | 4 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].numberOfShares | 500 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[0].grossAmountGains | 2000 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[1].eebrId | 2 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[1].companyIdNumber | "180011032C" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[1].companyName | "AIS Employer" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[1].planType | "ESOP" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[1].dateOfGrant | "2002-01-04" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[1].dateOfExerciseOrVesting | "2024-07-02" |
| employeePersonalParticulars[0].appendix8B.eebrRecords[1].exercisePrice | 0 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[1].openMarketValuePerShare | 1 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[1].numberOfShares | 1000 |
| employeePersonalParticulars[0].appendix8B.eebrRecords[1].grossAmountGains | 1000 |
| employeePersonalParticulars[0].appendix8B.totalGrossAmountGainsAfter2003S101b | 2000 |
| employeePersonalParticulars[0].appendix8B.totalGrossAmountGainsBefore2003S101g | 1000 |
Khác biệt cần phân biệt ngay trong mẫu 3.7.3
Mẫu gốc đặt "Senior Chief Executive" tại addressType và để designation rỗng. Cụm này nghĩa là chức danh lãnh đạo cấp cao nhưng trong PDF lại nằm ở ô loại địa chỉ; được giữ theo đúng vị trí nguồn, không khẳng định đó là mã loại địa chỉ hợp lệ. Mẫu còn ghi numberOfDays=181 cho 01/01–30/06/2024 và 184 cho 01/07–31/12/2024; các số 181/184 cùng toàn bộ tổng mẫu được giữ nguyên, không tự tính lại hoặc suy ra quy tắc tính ngày. Khi triển khai hãy đối chiếu quy tắc kiểm tra chính thức và môi trường thử nghiệm được chấp thuận.
3.8. Toàn bộ định nghĩa phản hồi
Tên với Info/ info và recordID trong bảng được ghi đúng theo bảng; các ví dụ phản hồi dùng info và recordId. Nhật ký 2.5 nói bỏ info.messagecode không dùng, trong khi bảng trang 18 và các ví dụ trang 19–22 còn messageCode. Đây là khác biệt của chính bản 2.6; không tự bỏ hay thêm trường khi triển khai chỉ dựa trên một dòng của bài.
Vuốt ngang trên điện thoại để xem đủ các cột.
| Trường theo bảng nguồn | Kiểu | Nội dung |
|---|---|---|
| returnCode | String | 10: xử lý thành công; 20: thành công nhưng có vấn đề không gây thất bại, xem info; 30: lỗi, chưa xử lý; 40: cảnh báo, chưa xử lý, xem info. |
| data | Object | Đối tượng chứa mã xác nhận khi nộp thành công. |
| data.acknowledgementCode | String | Mã xác nhận hệ thống tạo nếu nộp thành công. |
| info | Object | Thông tin chẩn đoán để nhà phát triển gỡ lỗi yêu cầu thất bại. |
| Info.messageCode | String | Mã loại lỗi/cảnh báo: 850301 lỗi một hay nhiều tham số; 850302 ngoại lệ trong dịch vụ; 850305 người dùng thử không hợp lệ, các trường không hợp lệ để thử Sandbox. Bảng gọi là mã số nguyên nhưng kiểu cột là chuỗi. |
| info.message | String | Thông báo chẩn đoán khi có cảnh báo/lỗi. |
| Info.warnings | Array | Mảng đối tượng cảnh báo, cùng định dạng fieldInfoList. |
| info.fieldInfoList | Array | Mảng đối tượng FieldInfo. |
| Info.fieldInfoList.section | String | Tên đối tượng gây cảnh báo/lỗi. |
| info.fieldInfoList.field | String | Tên trường gây cảnh báo/lỗi. |
| Info.fieldInfoList.message | String | Thông báo chẩn đoán hỗ trợ nhà phát triển. |
| Info.fieldInfoList.recordID | String | Mã riêng của hồ sơ bị ảnh hưởng; các mã có lỗi tương tự gộp chung, ví dụ "3,5,7". |
3.8.1. Thành công và các chế độ kiểm tra
Gọi thành công nghĩa là lần nộp AIS được chấp nhận và trả JSON. Với bypassWarning=true hoặc false, ví dụ thành công không có cảnh báo trả returnCode="10", acknowledgementCode="1500003994", info.warnings=[] và info.fieldInfoList=[].
Với bypassWarning=true, có cảnh báo vẫn thành công: ví dụ returnCode="20", acknowledgementCode="1500003996"; info.messageCode="850301"; info.message="Arguments error" (lỗi tham số); warnings có section="OrgAndSubmissionInfo", field="IncomeYear", message="Warning: Please note that you are making submission for back year records for Income Year 2024" (lưu ý đang nộp hồ sơ năm trước cho thu nhập 2024), recordId="NA"; fieldInfoList=[].
Với validateOnly=true, hệ thống chỉ kiểm tra, không nộp AIS cho IRAS dù không có lỗi và không trả acknowledgementCode. Vẫn cần mã truy cập hợp lệ. Ví dụ returnCode="10", data={}, info.warnings=[], info.fieldInfoList=[]. Không coi kết quả kiểm tra đơn thuần là đã nộp.
Mẫu thư xác nhận nhúng ở trang 20
Nộp chính thức thành công còn gửi thư điện tử cho đại diện liên hệ của công ty và địa chỉ ghi trong dữ liệu AIS. Mẫu nhúng trong tài liệu là thư hệ thống IRAS Notification DSU, từ notification_dsu@iras.gov.sg gửi ABC <abc@abc.com.sg>, ngày 16/05/2025 lúc 2:38 chiều; chủ đề xác nhận nộp thu nhập qua AIS-API cho 2025, kèm mã tham chiếu nội bộ. Không cần thông báo/liên hệ IRAS chỉ để xác nhận đã nộp; thư mẫu nói sẽ xử lý trong năm ngày làm việc.
Thông tin mẫu: tổ chức abcd, số thuế 207008975D; thu nhập kiếm được năm 2024 (2025), người được cấp quyền MR ABC; ngày giờ nộp 05/16/2025 14:38:12, tham chiếu 1500000639, loại nộp O.
- Thư mẫu có phần lỗi cần xử lý: hai hồ sơ nhân viên trùng chính xác thông tin thu nhập trong cùng lần nộp, minh họa SXXXX426B testUser1 và TXXXX680G testUser3. Hồ sơ trùng không được xử lý; kiểm tra và nộp lại phù hợp. Nếu không phải lỗi, thư chỉ địa chỉ data_mgmt@iras.gov.sg để liên hệ.
- Phần cảnh báo để biết được hiển thị riêng. Nếu không thực hiện lần nộp, làm rõ với nhà cung cấp phần mềm hoặc kiểm tra nội bộ nếu dùng phần mềm tự phát triển. Muốn sửa dữ liệu, thư chỉ go.gov.sg/iras-ais-amend để xem hướng dẫn. Không trả lời thư vì đây là xác nhận tự động.
Vuốt ngang trên điện thoại để xem đủ các cột.
| Loại mẫu trong thư | Số hồ sơ đã nộp |
|---|---|
| FORM IR8A | 4 |
| APPENDIX8A | 1 |
| APPENDIX8B | 1 |
3.8.2. Lỗi kiểm tra: từ chối với mã 30
Khi lỗi kiểm tra dữ liệu xảy ra, lần nộp AIS không được chấp nhận. Mẫu với bypassWarning=true hoặc false đều trả returnCode="30", data={}, info.messageCode="850301", info.message="Arguments error", warnings=[] và fieldInfoList gồm đủ bốn mục sau.
Vuốt ngang trên điện thoại để xem đủ các cột.
| section | field | recordId | Thông báo gốc và ý nghĩa |
|---|---|---|---|
| OrgAndSubmissionInfo | AuthorisedPersonName | NA | This field cannot be blank. Please provide a valid value — Không được để trống; cung cấp giá trị hợp lệ. |
| EmployeePersonalParticulars | DateOfBirth | 1 | This field cannot be blank. Please provide a valid value — Không được để trống; cung cấp giá trị hợp lệ. |
| IR8A | PeriodPaymentFromDate | 1, 2 | This field cannot be blank. Please provide a valid value — Không được để trống; cung cấp giá trị hợp lệ. |
| IR8A | PeriodPaymentToDate | 2 | Date must be given as 2025-12-31 or must be same as Cessation Date — Ngày phải là 2025-12-31 hoặc bằng ngày chấm dứt. Đây là câu trong mẫu lỗi, không đổi tất cả hồ sơ sang năm 2025. |
Cảnh báo không được bỏ qua và lỗi hệ thống
Nếu bypassWarning=false mà có cảnh báo, nộp không thành công. Mẫu: returnCode="40", data={}, info.messageCode="850301", info.message="Arguments Error", warnings gồm section="orgAndSubmissionInfo", field="submissionType", message="You are submitting amendment record(s) for income derived in the year of 2024." (đang nộp hồ sơ sửa đổi cho thu nhập năm 2024), recordId="NA"; fieldInfoList=[].
Nếu lỗi hệ thống ngoài dự kiến, mẫu không có data: returnCode="30"; info.messageCode="850302"; info.message="Generic Error - Please contact API_SUPPORT@iras.gov.sg" (lỗi chung, liên hệ hỗ trợ API); fieldInfoList=[].
Thông tin giới hạn và bản quyền trong nguồn
IRAS ghi tài liệu giúp hiểu tổng quát, không giải quyết toàn diện mọi vấn đề; cung cấp theo hiện trạng, không có bảo đảm. IRAS không chịu trách nhiệm về thiệt hại, chi phí hay tổn thất phát sinh từ hoặc liên quan việc sử dụng; khi chính sách/thực hành thay đổi, IRAS bảo lưu quyền thay đổi quan điểm.
Bản quyền thuộc IRAS, bảo lưu mọi quyền; nguồn yêu cầu xin phép bằng văn bản trước khi sao chép, truyền, ghi hoặc lưu một phần tài liệu vào hệ thống truy xuất.
Biểu mẫu và tài nguyên chính thức
Các liên kết chính thức dưới đây sử dụng tiếng Anh.
- GovTech: xác thực APEX và OAuth ↗
- Hướng dẫn APEX đầy đủ của GovTech ↗
- Corppass cho người dùng APEX ngoài chính phủ ↗
- APEX: tạo ứng dụng ↗
- APEX: tạo khóa API ↗
- APEX: tạo ứng dụng khách OAuth 2.1 ↗
- APEX: đăng ký ứng dụng sử dụng API ↗
- Đặc tả OAuth và lựa chọn luồng đại lý thuế ↗
- Tạo mã truy cập ủy quyền Corppass cho APEX ↗
- IRAS: kiểm định AIS cho nhà phát triển phần mềm ↗
- Điều khoản sử dụng API của IRAS ↗
- Điều khoản sử dụng API Exchange APEX ↗
- W3C: định dạng ngày và giờ được nguồn dẫn ↗
- AIS-API 2.0: danh sách mục dữ liệu và quy tắc kiểm tra ↗
- IRAS: sửa dữ liệu thu nhập AIS theo thư mẫu ↗
- Địa chỉ IRAS trong thư mẫu khi hồ sơ bị gắn trùng không phải lỗi ↗
- Địa chỉ hỗ trợ API trong mẫu lỗi hệ thống ↗
