init
This commit is contained in:
90
PPh 21/PPh 21 - Pengesahan Baru.bru
Normal file
90
PPh 21/PPh 21 - Pengesahan Baru.bru
Normal file
@@ -0,0 +1,90 @@
|
||||
meta {
|
||||
name: PPh 21 - Pengesahan Baru
|
||||
type: http
|
||||
seq: 1
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/bulanan/new
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"monthlyIncome": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"idTkuPemotong": "1091031210912281000000",
|
||||
"masaPajak": "01",
|
||||
"tahunPajak": 2025,
|
||||
"npwpDipotong": "3171065903840003",
|
||||
"idTkuDipotong": "3171065903840003000000",
|
||||
"nama": "NAMA3171065903840003",
|
||||
"fgJnsBupot": "21",
|
||||
"tglPemotongan": "2025-01-01",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"userId": "3174061502560010",
|
||||
"dataBp21": {
|
||||
"sertifikatInsentifDipotong": "N/A",
|
||||
"nomorSertifikatInsentif": "",
|
||||
"kodeObjekPajak": "21-100-35",
|
||||
"statusPtkp": "TK/2",
|
||||
"penghasilanKotorSebelumnya": 0,
|
||||
"penghasilanKotor": 10000000,
|
||||
"normaPenghasilan": 100,
|
||||
"tarif": 1.5,
|
||||
"pphDipotong": 150000,
|
||||
"dokReferensi": [
|
||||
{
|
||||
"dokReferensi": "OTHER",
|
||||
"nomorDokumen": "-",
|
||||
"tanggal_Dokumen": "2025-01-01"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
script:pre-request {
|
||||
// Generate new UUID for requestID
|
||||
function generateUUID() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
const r = Math.random() * 16 | 0;
|
||||
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
const newUUID = generateUUID();
|
||||
bru.setEnvVar("requestID", newUUID);
|
||||
console.log("New requestID generated: " + newUUID);
|
||||
}
|
||||
|
||||
script:post-response {
|
||||
// Parse response JSON
|
||||
const responseJson = res.body;
|
||||
|
||||
// Extract nomorBupot and idBupot from taxSlipResponse.result
|
||||
const nomorBupot = responseJson?.taxSlipResponse?.result?.nomorBupot;
|
||||
const idBupot = responseJson?.taxSlipResponse?.result?.idBupot;
|
||||
|
||||
// Set environment variables if values exist
|
||||
if (nomorBupot) {
|
||||
bru.setEnvVar("nomorBupot", nomorBupot);
|
||||
console.log("nomorBupot set: " + nomorBupot);
|
||||
}
|
||||
|
||||
if (idBupot) {
|
||||
bru.setEnvVar("idBupot", idBupot);
|
||||
console.log("idBupot set: " + idBupot);
|
||||
}
|
||||
}
|
||||
33
PPh 21/pph21-cancel.bru
Normal file
33
PPh 21/pph21-cancel.bru
Normal file
@@ -0,0 +1,33 @@
|
||||
meta {
|
||||
name: pph21-cancel
|
||||
type: http
|
||||
seq: 3
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/cancel
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"taxSlipCancel": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"nomorBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"fgJnsBupot": "21",
|
||||
"tglPembatalan": "2025-01-01",
|
||||
"userId": "3174061502560010",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@"
|
||||
}
|
||||
}
|
||||
}
|
||||
92
PPh 21/pph21-edit.bru
Normal file
92
PPh 21/pph21-edit.bru
Normal file
@@ -0,0 +1,92 @@
|
||||
meta {
|
||||
name: pph21-edit
|
||||
type: http
|
||||
seq: 2
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/bulanan/edit
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"monthlyIncome": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"idTkuPemotong": "1091031210912281000000",
|
||||
"masaPajak": "01",
|
||||
"tahunPajak": 2025,
|
||||
"npwpDipotong": "3171065903840003",
|
||||
"idTkuDipotong": "3171065903840003000000",
|
||||
"nama": "NAMA3171065903840003",
|
||||
"nomorBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"fgJnsBupot": "21",
|
||||
"tglPemotongan": "2025-01-01",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"userId": "3174061502560010",
|
||||
"dataBp21": {
|
||||
"sertifikatInsentifDipotong": "N/A",
|
||||
"nomorSertifikatInsentif": "",
|
||||
"kodeObjekPajak": "21-100-35",
|
||||
"statusPtkp": "TK/2",
|
||||
"penghasilanKotorSebelumnya": 0,
|
||||
"penghasilanKotor": 10010000,
|
||||
"normaPenghasilan": 100,
|
||||
"tarif": 1.5,
|
||||
"pphDipotong": 150150,
|
||||
"dokReferensi": [
|
||||
{
|
||||
"dokReferensi": "ANNOUNCEMENT",
|
||||
"nomorDokumen": "Inv/Apr-008",
|
||||
"tanggal_Dokumen": "2025-01-01"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
script:pre-request {
|
||||
// Generate new UUID for requestID
|
||||
function generateUUID() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
const r = Math.random() * 16 | 0;
|
||||
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
const newUUID = generateUUID();
|
||||
bru.setEnvVar("requestID", newUUID);
|
||||
console.log("New requestID generated: " + newUUID);
|
||||
}
|
||||
|
||||
script:post-response {
|
||||
// Parse response JSON
|
||||
const responseJson = res.body;
|
||||
|
||||
// Extract nomorBupot and idBupot from taxSlipResponse.result
|
||||
const nomorBupot = responseJson?.taxSlipResponse?.result?.nomorBupot;
|
||||
const idBupot = responseJson?.taxSlipResponse?.result?.idBupot;
|
||||
|
||||
// Set environment variables if values exist
|
||||
if (nomorBupot) {
|
||||
bru.setEnvVar("nomorBupot", nomorBupot);
|
||||
console.log("nomorBupot set: " + nomorBupot);
|
||||
}
|
||||
|
||||
if (idBupot) {
|
||||
bru.setEnvVar("idBupot", idBupot);
|
||||
console.log("idBupot set: " + idBupot);
|
||||
}
|
||||
}
|
||||
29
PPh 21/pph21-pdf.bru
Normal file
29
PPh 21/pph21-pdf.bru
Normal file
@@ -0,0 +1,29 @@
|
||||
meta {
|
||||
name: pph21-pdf
|
||||
type: http
|
||||
seq: 5
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/pdf
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"fgJnsBupot": "21"
|
||||
}
|
||||
}
|
||||
}
|
||||
29
PPh 21/pph21-status.bru
Normal file
29
PPh 21/pph21-status.bru
Normal file
@@ -0,0 +1,29 @@
|
||||
meta {
|
||||
name: pph21-status
|
||||
type: http
|
||||
seq: 4
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/status
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"fgJnsBupot": "21"
|
||||
}
|
||||
}
|
||||
}
|
||||
86
PPh A0/PPh A0 - Pengesahan Baru.bru
Normal file
86
PPh A0/PPh A0 - Pengesahan Baru.bru
Normal file
@@ -0,0 +1,86 @@
|
||||
meta {
|
||||
name: PPh A0 - Pengesahan Baru
|
||||
type: http
|
||||
seq: 1
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/bulanan/new
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"monthlyIncome": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"idTkuPemotong": "1091031210912281000000",
|
||||
"masaPajak": "01",
|
||||
"tahunPajak": 2025,
|
||||
"npwpDipotong": "3171065903840003",
|
||||
"idTkuDipotong": "3171065903840003000000",
|
||||
"nama": "NAMA3171065903840003",
|
||||
"fgJnsBupot": "A0",
|
||||
"tglPemotongan": "2025-01-01",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"userId": "3174061502560010",
|
||||
"dataBpA0": {
|
||||
"foreignEmployee": "Resident",
|
||||
"passportNo": "",
|
||||
"countryCode": "IDN",
|
||||
"statusPtkp": "TK/2",
|
||||
"posisiJabatan": "Staf",
|
||||
"sertifikatInsentifDipotong": "N/A",
|
||||
"nomorSertifikatInsentif": "",
|
||||
"kodeObjekPajak": "21-100-01",
|
||||
"penghasilanKotor": 14240688,
|
||||
"tarif": 5,
|
||||
"pphDipotong": 712034
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
script:pre-request {
|
||||
// Generate new UUID for requestID
|
||||
function generateUUID() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
const r = Math.random() * 16 | 0;
|
||||
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
const newUUID = generateUUID();
|
||||
bru.setEnvVar("requestID", newUUID);
|
||||
console.log("New requestID generated: " + newUUID);
|
||||
}
|
||||
|
||||
script:post-response {
|
||||
// Parse response JSON
|
||||
const responseJson = res.body;
|
||||
|
||||
// Extract nomorBupot and idBupot from taxSlipResponse.result
|
||||
const nomorBupot = responseJson?.taxSlipResponse?.result?.nomorBupot;
|
||||
const idBupot = responseJson?.taxSlipResponse?.result?.idBupot;
|
||||
|
||||
// Set environment variables if values exist
|
||||
if (nomorBupot) {
|
||||
bru.setEnvVar("nomorBupot", nomorBupot);
|
||||
console.log("nomorBupot set: " + nomorBupot);
|
||||
}
|
||||
|
||||
if (idBupot) {
|
||||
bru.setEnvVar("idBupot", idBupot);
|
||||
console.log("idBupot set: " + idBupot);
|
||||
}
|
||||
}
|
||||
33
PPh A0/ppha0-cancel.bru
Normal file
33
PPh A0/ppha0-cancel.bru
Normal file
@@ -0,0 +1,33 @@
|
||||
meta {
|
||||
name: PPh A0 - Pembatalan
|
||||
type: http
|
||||
seq: 4
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/cancel
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"taxSlipCancel": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"nomorBupot": "25000J28F",
|
||||
"idBupot": "c0042abf-7cb2-49c9-9489-032db5fb4811",
|
||||
"fgJnsBupot": "A0",
|
||||
"tglPembatalan": "2025-01-01",
|
||||
"userId": "3174061502560010",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@"
|
||||
}
|
||||
}
|
||||
}
|
||||
53
PPh A0/ppha0-edit.bru
Normal file
53
PPh A0/ppha0-edit.bru
Normal file
@@ -0,0 +1,53 @@
|
||||
meta {
|
||||
name: PPh A0 - Penggantian
|
||||
type: http
|
||||
seq: 5
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/bulanan/edit
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"monthlyIncome": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"idTkuPemotong": "1091031210912281000000",
|
||||
"masaPajak": "01",
|
||||
"tahunPajak": 2025,
|
||||
"npwpDipotong": "3171065903840003",
|
||||
"idTkuDipotong": "3171065903840003000000",
|
||||
"nama": "NAMA3171065903840003",
|
||||
"nomorBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"fgJnsBupot": "A0",
|
||||
"tglPemotongan": "2025-01-01",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"userId": "3174061502560010",
|
||||
"dataBpA0": {
|
||||
"foreignEmployee": "Resident",
|
||||
"passportNo": "",
|
||||
"countryCode": "IDN",
|
||||
"statusPtkp": "TK/2",
|
||||
"posisiJabatan": "Staf",
|
||||
"sertifikatInsentifDipotong": "N/A",
|
||||
"nomorSertifikatInsentif": "",
|
||||
"kodeObjekPajak": "21-100-01",
|
||||
"penghasilanKotor": 14241688,
|
||||
"tarif": 5,
|
||||
"pphDipotong": 712084
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
29
PPh A0/ppha0-pdf.bru
Normal file
29
PPh A0/ppha0-pdf.bru
Normal file
@@ -0,0 +1,29 @@
|
||||
meta {
|
||||
name: PPh A0 - Unduh PDF
|
||||
type: http
|
||||
seq: 4
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/pdf
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"fgJnsBupot": "A0"
|
||||
}
|
||||
}
|
||||
}
|
||||
29
PPh A0/ppha0-status.bru
Normal file
29
PPh A0/ppha0-status.bru
Normal file
@@ -0,0 +1,29 @@
|
||||
meta {
|
||||
name: PPh A0 - Periksa Status
|
||||
type: http
|
||||
seq: 4
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/status
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"fgJnsBupot": "A0"
|
||||
}
|
||||
}
|
||||
}
|
||||
110
PPh A1/PPh A1 - Pengesahan Baru.bru
Normal file
110
PPh A1/PPh A1 - Pengesahan Baru.bru
Normal file
@@ -0,0 +1,110 @@
|
||||
meta {
|
||||
name: PPh A1 - Pengesahan Baru
|
||||
type: http
|
||||
seq: 1
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/tahunan/new
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"yearlyIncome": {
|
||||
"alamat": "JL MATRAMAN DALAM I NO.32, RT002/RW008, PEGANGSAAN, MENTENG, KOTA ADM. JAKARTA PUSAT, DKI JAKARTA, 10320",
|
||||
"blnPenghasilanDisetahunkan": 12,
|
||||
"fgPemberiKerjaSelanjutnya": "No",
|
||||
"fgStatusPemotonganPph": "FullYear",
|
||||
"idTku": "0717166367077000000000",
|
||||
"jnsKelamin": "M",
|
||||
"kodeObjekPajak": "21-100-01",
|
||||
"masaPajakAwal": "01",
|
||||
"masaPajakAkhir": "12",
|
||||
"nama": "NAMA3171064907980002",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"nominalPtkp": 54000000,
|
||||
"npwp": "3171064907980002",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"pkpSetahunDisetahunkan": 120000000,
|
||||
"pph21DapatDikreditkan": 0,
|
||||
"pph21DariBupotSebelumnya": 0,
|
||||
"pph21KurangLebihBayar": 0,
|
||||
"pph21SetahunDisetahunkan": 5775000,
|
||||
"pph21Terutang": 5775000,
|
||||
"pph21WithheldDtp": 0,
|
||||
"statusPtkp": "TK/0",
|
||||
"tahunPajak": 2025,
|
||||
"tglPemotongan": "2025-12-31",
|
||||
"totalPenghasilanBruto": 180000000,
|
||||
"totalPenghasilanNeto": 168000000,
|
||||
"totalPenghasilanNetoDariBupotSebelumnya": 0,
|
||||
"totalPenghasilanNetoPph21": 168000000,
|
||||
"totalPengurang": 12000000,
|
||||
"userId": "3174061502560010",
|
||||
"dataBpA1": {
|
||||
"fgKaryawanAsing": "Resident",
|
||||
"passport": "",
|
||||
"kdNegara": "IDN",
|
||||
"posisiJabatan": "Manager",
|
||||
"gajiPensiun": 150000000,
|
||||
"tunjanganPPh": 0,
|
||||
"tunjanganPPhGrossUp": "No",
|
||||
"tunjanganLainnyaLembur": 30000000,
|
||||
"honorarium": 0,
|
||||
"premiAsuransi": 0,
|
||||
"Natura": 0,
|
||||
"tantiemBonus": 0,
|
||||
"biayaJabatan": 6000000,
|
||||
"iuranPensiun": 6000000,
|
||||
"Zakat": 0,
|
||||
"fgFasilitas": "N/A"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
script:pre-request {
|
||||
// Generate new UUID for requestID
|
||||
function generateUUID() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
const r = Math.random() * 16 | 0;
|
||||
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
const newUUID = generateUUID();
|
||||
bru.setEnvVar("requestID", newUUID);
|
||||
console.log("New requestID generated: " + newUUID);
|
||||
}
|
||||
|
||||
script:post-response {
|
||||
// Parse response JSON
|
||||
const responseJson = res.body;
|
||||
|
||||
// Extract nomorBupot and idBupot from taxSlipResponse.result
|
||||
const nomorBupot = responseJson?.taxSlipResponse?.result?.nomorBupot;
|
||||
const idBupot = responseJson?.taxSlipResponse?.result?.idBupot;
|
||||
|
||||
// Set environment variables if values exist
|
||||
if (nomorBupot) {
|
||||
bru.setEnvVar("nomorBupot", nomorBupot);
|
||||
console.log("nomorBupot set: " + nomorBupot);
|
||||
}
|
||||
|
||||
if (idBupot) {
|
||||
bru.setEnvVar("idBupot", idBupot);
|
||||
console.log("idBupot set: " + idBupot);
|
||||
}
|
||||
}
|
||||
49
PPh A1/ppha1-cancel.bru
Normal file
49
PPh A1/ppha1-cancel.bru
Normal file
@@ -0,0 +1,49 @@
|
||||
meta {
|
||||
name: PPh A1 - Pembatalan
|
||||
type: http
|
||||
seq: 3
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/cancel
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"taxSlipCancel": {
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"tahunPajak": 2025,
|
||||
"nomorBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"fgJnsBupot": "A1",
|
||||
"tglPembatalan": "2025-12-31",
|
||||
"userId": "3174061502560010",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
script:pre-request {
|
||||
// Generate new UUID for requestID
|
||||
function generateUUID() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
const r = Math.random() * 16 | 0;
|
||||
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
const newUUID = generateUUID();
|
||||
bru.setEnvVar("requestID", newUUID);
|
||||
console.log("New requestID generated: " + newUUID);
|
||||
}
|
||||
112
PPh A1/ppha1-edit.bru
Normal file
112
PPh A1/ppha1-edit.bru
Normal file
@@ -0,0 +1,112 @@
|
||||
meta {
|
||||
name: PPh A1 - Penggantian
|
||||
type: http
|
||||
seq: 2
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/tahunan/edit
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"yearlyIncome": {
|
||||
"alamat": "JL MATRAMAN DALAM I NO.32, RT002/RW008, PEGANGSAAN, MENTENG, KOTA ADM. JAKARTA PUSAT, DKI JAKARTA, 10320",
|
||||
"blnPenghasilanDisetahunkan": 12,
|
||||
"fgPemberiKerjaSelanjutnya": "No",
|
||||
"fgStatusPemotonganPph": "FullYear",
|
||||
"idTku": "0717166367077000000000",
|
||||
"jnsKelamin": "M",
|
||||
"kodeObjekPajak": "21-100-01",
|
||||
"masaPajakAwal": "01",
|
||||
"masaPajakAkhir": "12",
|
||||
"nama": "NAMA3171064907980002",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"nominalPtkp": 54000000,
|
||||
"npwp": "3171064907980002",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"pkpSetahunDisetahunkan": 120000000,
|
||||
"pph21DapatDikreditkan": 0,
|
||||
"pph21DariBupotSebelumnya": 0,
|
||||
"pph21KurangLebihBayar": 0,
|
||||
"pph21SetahunDisetahunkan": 5775000,
|
||||
"pph21Terutang": 5775000,
|
||||
"pph21WithheldDtp": 0,
|
||||
"statusPtkp": "TK/0",
|
||||
"tahunPajak": 2025,
|
||||
"tglPemotongan": "2025-12-31",
|
||||
"totalPenghasilanBruto": 180000000,
|
||||
"totalPenghasilanNeto": 168000000,
|
||||
"totalPenghasilanNetoDariBupotSebelumnya": 0,
|
||||
"totalPenghasilanNetoPph21": 168000000,
|
||||
"totalPengurang": 12000000,
|
||||
"userId": "3174061502560010",
|
||||
"nomorBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"dataBpA1": {
|
||||
"fgKaryawanAsing": "Resident",
|
||||
"passport": "",
|
||||
"kdNegara": "IDN",
|
||||
"posisiJabatan": "Manager",
|
||||
"gajiPensiun": 150000000,
|
||||
"tunjanganPPh": 0,
|
||||
"tunjanganPPhGrossUp": "No",
|
||||
"tunjanganLainnyaLembur": 30000000,
|
||||
"honorarium": 0,
|
||||
"premiAsuransi": 0,
|
||||
"Natura": 0,
|
||||
"tantiemBonus": 0,
|
||||
"biayaJabatan": 6000000,
|
||||
"iuranPensiun": 6000000,
|
||||
"Zakat": 0,
|
||||
"fgFasilitas": "N/A"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
script:pre-request {
|
||||
// Generate new UUID for requestID
|
||||
function generateUUID() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
const r = Math.random() * 16 | 0;
|
||||
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
const newUUID = generateUUID();
|
||||
bru.setEnvVar("requestID", newUUID);
|
||||
console.log("New requestID generated: " + newUUID);
|
||||
}
|
||||
|
||||
script:post-response {
|
||||
// Parse response JSON
|
||||
const responseJson = res.body;
|
||||
|
||||
// Extract nomorBupot and idBupot from taxSlipResponse.result
|
||||
const nomorBupot = responseJson?.taxSlipResponse?.result?.nomorBupot;
|
||||
const idBupot = responseJson?.taxSlipResponse?.result?.idBupot;
|
||||
|
||||
// Set environment variables if values exist
|
||||
if (nomorBupot) {
|
||||
bru.setEnvVar("nomorBupot", nomorBupot);
|
||||
console.log("nomorBupot set: " + nomorBupot);
|
||||
}
|
||||
|
||||
if (idBupot) {
|
||||
bru.setEnvVar("idBupot", idBupot);
|
||||
console.log("idBupot set: " + idBupot);
|
||||
}
|
||||
}
|
||||
45
PPh A1/ppha1-pdf.bru
Normal file
45
PPh A1/ppha1-pdf.bru
Normal file
@@ -0,0 +1,45 @@
|
||||
meta {
|
||||
name: PPh A1 - Unduh PDF
|
||||
type: http
|
||||
seq: 5
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/pdf
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"fgJnsBupot": "A1"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
script:pre-request {
|
||||
// Generate new UUID for requestID
|
||||
function generateUUID() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
const r = Math.random() * 16 | 0;
|
||||
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
const newUUID = generateUUID();
|
||||
bru.setEnvVar("requestID", newUUID);
|
||||
console.log("New requestID generated: " + newUUID);
|
||||
}
|
||||
45
PPh A1/ppha1-status.bru
Normal file
45
PPh A1/ppha1-status.bru
Normal file
@@ -0,0 +1,45 @@
|
||||
meta {
|
||||
name: PPh A1 - Periksa Status
|
||||
type: http
|
||||
seq: 4
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/ifs/api/wit/status
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
headers {
|
||||
tokens: {{accessToken}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"idPel": {{idpel}},
|
||||
"requestID": "{{requestID}}",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "{{nomorBupot}}",
|
||||
"idBupot": "{{idBupot}}",
|
||||
"fgJnsBupot": "A1"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
script:pre-request {
|
||||
// Generate new UUID for requestID
|
||||
function generateUUID() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
const r = Math.random() * 16 | 0;
|
||||
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
const newUUID = generateUUID();
|
||||
bru.setEnvVar("requestID", newUUID);
|
||||
console.log("New requestID generated: " + newUUID);
|
||||
}
|
||||
292
agents.md
Normal file
292
agents.md
Normal file
@@ -0,0 +1,292 @@
|
||||
# SoluTax Bruno API Collection - Agents Documentation
|
||||
|
||||
## Project Overview
|
||||
|
||||
This is a **Bruno API collection** for testing and interacting with the **SoluTax IFS WIT API** developed by PT Sarana Prima Telematika. The collection provides integration capabilities with Indonesia's tax system (DJP - Direktorat Jenderal Pajak) for electronic withholding tax slips (Bukti Potong).
|
||||
|
||||
### Purpose
|
||||
|
||||
The API collection enables management of electronic tax withholding slips for Indonesian payroll and tax compliance:
|
||||
|
||||
- **PPh 21** - Employee income tax withholding (monthly/non-final)
|
||||
- **PPh A0** - Permanent employee monthly withholding
|
||||
- **PPh A1** - Permanent employee annual withholding
|
||||
|
||||
### Technologies Used
|
||||
|
||||
- **Bruno** - Git-friendly, offline-first API client
|
||||
- **Bru** - Plain text markup language for API requests
|
||||
- **Node.js** - Minimal project structure (package-lock.json present)
|
||||
|
||||
---
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
solutax/
|
||||
├── bruno.json # Bruno collection configuration
|
||||
├── agents.md # This file - AI agent documentation
|
||||
├── QWEN.md # Project overview and context
|
||||
├── spesifikasi.md # Full API specification document (Indonesian)
|
||||
├── token.bru # Authentication token request
|
||||
├── ppha0-new.bru # PPh A0 - Pengesahan (Create)
|
||||
├── ppha0-edit.bru # PPh A0 - Penggantian (Replace)
|
||||
├── ppha0-cancel.bru # PPh A0 - Pembatalan (Cancel)
|
||||
├── ppha0-status.bru # PPh A0 - Periksa Status (Check)
|
||||
├── ppha0-pdf.bru # PPh A0 - Unduh PDF (Download)
|
||||
├── test.bru # Test request file
|
||||
├── package-lock.json # Node.js lock file
|
||||
├── environments/
|
||||
│ ├── solutax.bru # Development environment variables
|
||||
│ └── solutax.json # Environment configuration
|
||||
└── sample result/
|
||||
├── ppha0_new_result_sample.json
|
||||
└── token_result_sample.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API Endpoints Summary
|
||||
|
||||
### 1. Token Authentication
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
|----------|--------|-------------|
|
||||
| `/auth/gettoken` | POST | Get JWT access token using Basic Auth |
|
||||
|
||||
**Security**: Basic Authentication (username/password)
|
||||
|
||||
### 2. PPh 21 Withholding Slips (Monthly/Non-Final)
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
|----------|--------|-------------|
|
||||
| `/ifs/api/wit/bulanan/new` | POST | Create and approve new PPh 21 slip |
|
||||
| `/ifs/api/wit/bulanan/edit` | POST | Replace/modify existing PPh 21 slip |
|
||||
| `/ifs/api/wit/cancel` | POST | Cancel a PPh 21 slip |
|
||||
| `/ifs/api/wit/status` | POST | Check status of PPh 21 slip |
|
||||
| `/ifs/api/wit/pdf` | POST | Download PDF of PPh 21 slip |
|
||||
|
||||
### 3. PPh A0 Withholding Slips (Permanent Employee Monthly)
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
|----------|--------|-------------|
|
||||
| `/ifs/api/wit/bulanan/new` | POST | Create and approve new PPh A0 slip |
|
||||
| `/ifs/api/wit/bulanan/edit` | POST | Replace/modify existing PPh A0 slip |
|
||||
| `/ifs/api/wit/cancel` | POST | Cancel a PPh A0 slip |
|
||||
| `/ifs/api/wit/status` | POST | Check status of PPh A0 slip |
|
||||
| `/ifs/api/wit/pdf` | POST | Download PDF of PPh A0 slip |
|
||||
|
||||
### 4. PPh A1 Withholding Slips (Permanent Employee Annual)
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
|----------|--------|-------------|
|
||||
| `/ifs/api/wit/tahunan/new` | POST | Create and approve new PPh A1 slip |
|
||||
| `/ifs/api/wit/tahunan/edit` | POST | Replace/modify existing PPh A1 slip |
|
||||
| `/ifs/api/wit/cancel` | POST | Cancel a PPh A1 slip |
|
||||
| `/ifs/api/wit/status` | POST | Check status of PPh A1 slip |
|
||||
| `/ifs/api/wit/pdf` | POST | Download PDF of PPh A1 slip |
|
||||
|
||||
---
|
||||
|
||||
## Agent Workflows
|
||||
|
||||
### Workflow 1: Authentication and Token Management
|
||||
|
||||
**Goal**: Obtain and manage access tokens for API requests
|
||||
|
||||
1. **Get Token**
|
||||
- Execute `token.bru`
|
||||
- Uses Basic Auth with credentials from `auth:basic` block
|
||||
- Response contains `access_token`, `idpel`, and `expires_in`
|
||||
- Token automatically set as `accessToken` environment variable
|
||||
- Customer ID set as `idpel` environment variable
|
||||
|
||||
### Workflow 2: Create New Tax Slip (PPh A0 Example)
|
||||
|
||||
**Goal**: Create and approve a new withholding tax slip
|
||||
|
||||
1. **Execute ppha0-new.bru**
|
||||
- Generates new UUID for `requestID`
|
||||
- Sends monthly income data with taxpayer information
|
||||
- Includes `dataBpA0` object with tax calculation details
|
||||
- Response extracts and stores `nomorBupot` and `idBupot`
|
||||
|
||||
### Workflow 3: Replace/Modify Existing Slip
|
||||
|
||||
**Goal**: Update an existing approved tax slip
|
||||
|
||||
1. **Execute ppha0-edit.bru**
|
||||
- Requires existing `nomorBupot` and `idBupot`
|
||||
- Sends updated data with all required fields
|
||||
- New approval number assigned upon success
|
||||
|
||||
### Workflow 4: Cancel Tax Slip
|
||||
|
||||
**Goal**: Cancel an approved tax slip
|
||||
|
||||
1. **Execute ppha0-cancel.bru**
|
||||
- Generates new UUID for `requestID`
|
||||
- Requires `nomorBupot` and `idBupot` to cancel
|
||||
- Includes `tglPembatalan` (cancellation date)
|
||||
- Requires electronic signature credentials
|
||||
|
||||
### Workflow 5: Check Slip Status
|
||||
|
||||
**Goal**: Verify status of a tax slip (after create, edit, or cancel)
|
||||
|
||||
1. **Execute ppha0-status.bru**
|
||||
- Queries `taxSlipVerification` object
|
||||
- Returns status: `NORMAL-DONE`, `AMENDED`, or `CANCELLED-Done`
|
||||
- Includes verification timestamp
|
||||
|
||||
### Workflow 6: Download PDF
|
||||
|
||||
**Goal**: Retrieve PDF document of approved tax slip
|
||||
|
||||
1. **Execute ppha0-pdf.bru**
|
||||
- Requires `nomorBupot` and `idBupot`
|
||||
- Response contains `data` field with Base64-encoded PDF
|
||||
- File name typically matches `nomorBuktiPotong`
|
||||
|
||||
---
|
||||
|
||||
## Key Concepts
|
||||
|
||||
### Request Structure
|
||||
|
||||
All requests follow a consistent pattern:
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `idPel` | Number | Customer ID (extracted from token response) |
|
||||
| `requestID` | String (GUID) | Unique request identifier (auto-generated) |
|
||||
| `monthlyIncome` / `yearlyIncome` / `taxSlip*` | Object | Endpoint-specific data payload |
|
||||
|
||||
### Response Structure
|
||||
|
||||
All responses follow a consistent pattern:
|
||||
|
||||
| Field | Description |
|
||||
|-------|-------------|
|
||||
| `kodestatus` / `statusCode` | HTTP status code (200 = success) |
|
||||
| `keterangan` / `statusMessage` | Status description |
|
||||
| `data` / `result` / `taxSlipResponse` | Response payload |
|
||||
| `idPel` / `responseID` | Tracking identifiers |
|
||||
|
||||
### Common Status Codes
|
||||
|
||||
| Code | Meaning |
|
||||
|------|---------|
|
||||
| 200 | Success |
|
||||
| 401 | Unauthorized (invalid/expired token) |
|
||||
| 500 | Server error (e.g., invalid User ID) |
|
||||
|
||||
### Slip Status Values
|
||||
|
||||
| Status | Meaning |
|
||||
|--------|---------|
|
||||
| `NORMAL-DONE` | Original slip approved |
|
||||
| `AMENDED` | Slip was replaced/modified |
|
||||
| `CANCELLED-Done` | Slip was cancelled |
|
||||
|
||||
---
|
||||
|
||||
## Environment Variables
|
||||
|
||||
The following environment variables are used:
|
||||
|
||||
| Variable | Description | Source |
|
||||
|----------|-------------|--------|
|
||||
| `accessToken` | JWT authentication token | Token response |
|
||||
| `idpel` | Customer ID | Token response |
|
||||
| `requestID` | Unique request GUID | Auto-generated or env |
|
||||
| `nomorBupot` | Tax slip number | New/Edit response |
|
||||
| `idBupot` | Tax slip ID (UUID) | New/Edit response |
|
||||
|
||||
---
|
||||
|
||||
## Configuration
|
||||
|
||||
### Bruno Collection Config (`bruno.json`)
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "1",
|
||||
"name": "solutax",
|
||||
"type": "collection",
|
||||
"ignore": ["node_modules", ".git", "QWEN.md", "spesifikasi.md"]
|
||||
}
|
||||
```
|
||||
|
||||
### API Base URL
|
||||
|
||||
```
|
||||
https://ifswit-solutax-ctas-dev.spt.co.id
|
||||
```
|
||||
|
||||
**Note**: This is the development/ctas-dev environment.
|
||||
|
||||
---
|
||||
|
||||
## Testing Workflow
|
||||
|
||||
### Step-by-Step Process
|
||||
|
||||
1. **Get Token**
|
||||
- Execute `token.bru` first
|
||||
- Verify `accessToken` is set in environment
|
||||
|
||||
2. **Create Slip**
|
||||
- Execute `ppha0-new.bru`
|
||||
- Note the `nomorBupot` and `idBupot` from response
|
||||
|
||||
3. **Verify Status**
|
||||
- Execute `ppha0-status.bru`
|
||||
- Confirm `statusBupot` is `NORMAL-DONE`
|
||||
|
||||
4. **Download PDF** (optional)
|
||||
- Execute `ppha0-pdf.bru`
|
||||
- Decode Base64 data to PDF file
|
||||
|
||||
5. **Modify Slip** (if needed)
|
||||
- Execute `ppha0-edit.bru`
|
||||
- Verify new `nomorBupot` assigned
|
||||
|
||||
6. **Cancel Slip** (if needed)
|
||||
- Execute `ppha0-cancel.bru`
|
||||
- Verify `statusBupot` becomes `CANCELLED-Done`
|
||||
|
||||
---
|
||||
|
||||
## Important Notes
|
||||
|
||||
1. **Language**: All API documentation and field names are in Indonesian (Bahasa Indonesia)
|
||||
|
||||
2. **Environment**: This is a development/DEV environment (CTAS-DEV)
|
||||
|
||||
3. **Token Expiration**: Monitor `expires_in` field; tokens will expire and require renewal
|
||||
|
||||
4. **NPWP Validation**: Tax ID numbers (NPWP) are validated on all endpoints
|
||||
|
||||
5. **Electronic Signature**: Passphrase required for penandatangan (signatory) on create/edit/cancel operations
|
||||
|
||||
6. **Pre-request Scripts**: Some files auto-generate UUIDs for `requestID` using JavaScript
|
||||
|
||||
7. **Post-response Scripts**: Some files extract and store response values as environment variables
|
||||
|
||||
---
|
||||
|
||||
## Documentation References
|
||||
|
||||
- [spesifikasi.md](./spesifikasi.md) - Complete API specification (Indonesian)
|
||||
- [QWEN.md](./QWEN.md) - Project overview and context
|
||||
- [Official Bruno Docs](https://docs.usebruno.com/)
|
||||
- [SoluTax API Specification](https://ifswit-solutax-ctas-dev.spt.co.id) - API base URL
|
||||
|
||||
---
|
||||
|
||||
## Contact Information
|
||||
|
||||
**Developer**: PT Sarana Prima Telematika
|
||||
**Year**: 2026
|
||||
**Version**: 1.0
|
||||
12
bruno.json
Normal file
12
bruno.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"version": "1",
|
||||
"name": "solutax",
|
||||
"type": "collection",
|
||||
"ignore": [
|
||||
"node_modules",
|
||||
".git",
|
||||
"QWEN.md",
|
||||
"spesifikasi.md",
|
||||
"sample result"
|
||||
]
|
||||
}
|
||||
45
environments/solutax copy.json
Normal file
45
environments/solutax copy.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"name": "solutax",
|
||||
"variables": [
|
||||
{
|
||||
"name": "accessToken",
|
||||
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJUb2tlbi5Gb3IuVGhlLlNvbHVUYXguQXBpLldpdGhBdXRoIiwianRpIjoiNTdlYmU0ZGYtYzRlMC00MDE0LWJjZmEtOWNiMjM5ODFmNTk4IiwiaWF0IjoiMTc3MTU1ODE0MCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWVpZGVudGlmaWVyIjoiOTk5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6InVzZXJhbmRhbCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyI6InVzM3JBbmQ0bCIsImV4cCI6MTc3MTY0NDU0MCwiaXNzIjoic29sdXRheC5hcGkiLCJhdWQiOiJzb2x1dGF4LmFwaS5jbGllbnQifQ._WYyDaBo_c2_u9s8pEkc-yDHHHzkEBarBlZI9-i_Zws",
|
||||
"type": "text",
|
||||
"enabled": true,
|
||||
"secret": false
|
||||
},
|
||||
{
|
||||
"name": "requestID",
|
||||
"value": "d2edc0a8-5aa9-4622-972a-fdee07b6fab7",
|
||||
"type": "text",
|
||||
"enabled": true,
|
||||
"secret": false
|
||||
},
|
||||
{
|
||||
"name": "idpel",
|
||||
"value": "999",
|
||||
"type": "text",
|
||||
"enabled": true,
|
||||
"secret": false
|
||||
},
|
||||
{
|
||||
"name": "nomorBupot",
|
||||
"value": "25000JB0D",
|
||||
"type": "text",
|
||||
"enabled": true,
|
||||
"secret": false
|
||||
},
|
||||
{
|
||||
"name": "idBupot",
|
||||
"value": "02357ce6-b9f6-495a-8761-ccc9100256b9",
|
||||
"type": "text",
|
||||
"enabled": true,
|
||||
"secret": false
|
||||
}
|
||||
],
|
||||
"info": {
|
||||
"type": "bruno-environment",
|
||||
"exportedAt": "2026-02-20T03:30:36.311Z",
|
||||
"exportedUsing": "Bruno/v3.1.2"
|
||||
}
|
||||
}
|
||||
4
environments/solutax.bru
Normal file
4
environments/solutax.bru
Normal file
@@ -0,0 +1,4 @@
|
||||
vars {
|
||||
accessToken: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJUb2tlbi5Gb3IuVGhlLlNvbHVUYXguQXBpLldpdGhBdXRoIiwianRpIjoiNTQ5ODhmNjktMjA4Mi00MTQ4LThkYWMtNDZjNmMwZmU2MGFkIiwiaWF0IjoiMTc3MTU0NzE3NyIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWVpZGVudGlmaWVyIjoiOTk5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6InVzZXJhbmRhbCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyI6InVzM3JBbmQ0bCIsImV4cCI6MTc3MTYzMzU3NywiaXNzIjoic29sdXRheC5hcGkiLCJhdWQiOiJzb2x1dGF4LmFwaS5jbGllbnQifQ.iLs7f2eJTA8PwNGnq1Y8t2p7E_ShwLQGNjLNRNSKbWM
|
||||
requestID: b6ee24b6-18ac-46e7-abd7-b97c6b6f9921
|
||||
}
|
||||
31
environments/solutax.json
Normal file
31
environments/solutax.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "solutax",
|
||||
"variables": [
|
||||
{
|
||||
"name": "accessToken",
|
||||
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJUb2tlbi5Gb3IuVGhlLlNvbHVUYXguQXBpLldpdGhBdXRoIiwianRpIjoiNjFhZjA0MDQtNzI5My00ZThmLWI2YTQtYzMxMTNkMzUwZGY3IiwiaWF0IjoiMTc3MTQ4NDA2OSIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWVpZGVudGlmaWVyIjoiOTk5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6InVzZXJhbmRhbCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyI6InVzM3JBbmQ0bCIsImV4cCI6MTc3MTU3MDQ2OSwiaXNzIjoic29sdXRheC5hcGkiLCJhdWQiOiJzb2x1dGF4LmFwaS5jbGllbnQifQ.eurL_YIs7b8bAX_6MC8fG3WHF0MNHfbNYyourna9tVE",
|
||||
"type": "text",
|
||||
"enabled": true,
|
||||
"secret": false
|
||||
},
|
||||
{
|
||||
"name": "idpel",
|
||||
"value": 999,
|
||||
"type": "text",
|
||||
"enabled": true,
|
||||
"secret": false
|
||||
},
|
||||
{
|
||||
"name": "requestID",
|
||||
"value": "b6ee24b6-18ac-46e7-abd7-b97c6b6f9921",
|
||||
"type": "text",
|
||||
"enabled": true,
|
||||
"secret": false
|
||||
}
|
||||
],
|
||||
"info": {
|
||||
"type": "bruno-environment",
|
||||
"exportedAt": "2026-02-19T07:04:47.831Z",
|
||||
"exportedUsing": "Bruno/v3.1.2"
|
||||
}
|
||||
}
|
||||
6
package-lock.json
generated
Normal file
6
package-lock.json
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"name": "solutax",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {}
|
||||
}
|
||||
15
sample result/ppha0_new_result_sample.json
Normal file
15
sample result/ppha0_new_result_sample.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "d61d2dad-d20d-4338-be40-02f8c068f3b8",
|
||||
"taxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success",
|
||||
"result": {
|
||||
"nomorBupot": "25000JB01",
|
||||
"idBupot": "019b3442-e591-4a6b-8a4d-40f05e64508a",
|
||||
"tanggalSP2D": "",
|
||||
"timestamp": "2026-02-20T07:39:59"
|
||||
}
|
||||
}
|
||||
}
|
||||
10
sample result/token_result_sample.json
Normal file
10
sample result/token_result_sample.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"kodestatus": 200,
|
||||
"keterangan": "Berhasil",
|
||||
"data": {
|
||||
"idpel": 999,
|
||||
"adminName": "userandal",
|
||||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJUb2tlbi5Gb3IuVGhlLlNvbHVUYXguQXBpLldpdGhBdXRoIiwianRpIjoiNmFhZDg3YTktZWI3ZC00ODE1LWFjNGYtM2YyMTQwOGM5ZmZhIiwiaWF0IjoiMTc3MTQ4MjQ5MyIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWVpZGVudGlmaWVyIjoiOTk5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6InVzZXJhbmRhbCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyI6InVzM3JBbmQ0bCIsImV4cCI6MTc3MTU2ODg5MywiaXNzIjoic29sdXRheC5hcGkiLCJhdWQiOiJzb2x1dGF4LmFwaS5jbGllbnQifQ.NFXU-NNhBFDLPn7lNV_5DPmOhHL3suf6fkWZpw0GhG4",
|
||||
"expires_in": "20/02/2026 13.28.13"
|
||||
}
|
||||
}
|
||||
2200
spesifikasi.md
Normal file
2200
spesifikasi.md
Normal file
@@ -0,0 +1,2200 @@
|
||||
# SPESIFIKASI API SoluTax IFS WIT V1.0
|
||||
|
||||
**PT Sarana Prima Telematika**
|
||||
|
||||
**2026**
|
||||
|
||||
---
|
||||
|
||||
## DAFT ISI
|
||||
|
||||
- [A. TUJUAN](#a-tujuan)
|
||||
- [B. RUANG LINGKUP](#b-ruang-lingkup)
|
||||
- [C. FITUR-FITUR](#c-fitur-fitur)
|
||||
- [1. Token](#1-token)
|
||||
- [2. Bukti Potong PPh 21](#2-bukti-potong-pph-21)
|
||||
- [A. Pengesahan Bukti Potong PPh 21](#a-pengesahan-bukti-potong-pph-21)
|
||||
- [B. Penggantian Bukti Potong PPh 21](#b-penggantian-bukti-potong-pph-21)
|
||||
- [C. Pembatalan Bukti Potong PPh 21](#c-pembatalan-bukti-potong-pph-21)
|
||||
- [D. Periksa Status Bukti Potong PPh 21](#d-periksa-status-bukti-potong-pph-21)
|
||||
- [E. Unduh PDF Bukti Potong PPh 21](#eunduh-pdf-bukti-potong-pph-21)
|
||||
- [3. Bukti Potong PPh A0](#3-bukti-potong-pph-a0)
|
||||
- [A. Pengesahan Bukti Potong PPh A0](#a-pengesahan-bukti-potong-pph-a0)
|
||||
- [B. Penggantian Bukti Potong PPh A0](#b-penggantian-bukti-potong-pph-a0)
|
||||
- [C. Pembatalan Bukti Potong PPh A0](#c-pembatalan-bukti-potong-pph-a0)
|
||||
- [D. Periksa Status Bukti Potong PPh A0](#d-periksa-status-bukti-potong-pph-a0)
|
||||
- [E. Unduh PDF Bukti Potong PPh A0](#eunduh-pdf-bukti-potong-pph-a0)
|
||||
- [4. Bukti Potong PPh A1](#4-bukti-potong-pph-a1)
|
||||
- [A. Pengesahan Bukti Potong PPh A1](#a-pengesahan-bukti-potong-pph-a1)
|
||||
- [B. Penggantian Bukti Potong PPh A1](#b-penggantian-bukti-potong-pph-a1)
|
||||
- [C. Pembatalan Bukti Potong PPh A1](#c-pembatalan-bukti-potong-pph-a1)
|
||||
- [D. Periksa Status Bukti Potong PPh A1](#d-periksa-status-bukti-potong-pph-a1)
|
||||
- [E. Unduh PDF Bukti Potong PPh A1](#eunduh-pdf-bukti-potong-pph-a1)
|
||||
|
||||
---
|
||||
|
||||
## A. TUJUAN
|
||||
|
||||
Dokumen ini dibuat sebagai panduan pelanggan PT. Sarana Prima Telematika dalam mengembangkan API client SoluTax IFS WIT.
|
||||
|
||||
## B. RUANG LINGKUP
|
||||
|
||||
API SoluTax IFS WIT yang dikembangkan oleh PT. Sarana Prima Telematika meliputi:
|
||||
|
||||
1. Bukti Potong PPh 21 (Tidak Final / Final)
|
||||
2. Bukti Potong PPh A0 (Pegawai Tetap Bulanan)
|
||||
3. Bukti Potong PPh A1 (Pegawai Tetap Tahunan)
|
||||
|
||||
## C. FITUR-FITUR
|
||||
|
||||
### 1. Token
|
||||
|
||||
Token digunakan untuk autentikasi menjalankan fungsi API IFS SoluTax WIT.
|
||||
|
||||
**Api EndPoint:** `/auth/gettoken`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Security:** Basic auth
|
||||
|
||||
#### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| User | String | User untuk mendapatkan Token |
|
||||
| Password | String | Password untuk mendapatkan Token |
|
||||
|
||||
#### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| Data | Array | Berisi data hasil dari permintaan token yang terdiri dari elemen: |
|
||||
| | | - Idpel = kode pelanggan |
|
||||
| | | - adminName = nama user |
|
||||
| | | - access_token = token |
|
||||
| | | - expires_in = masa kadaluarsa token |
|
||||
| Kodestatus | Number | Berisi kode hasil response permintaan token |
|
||||
| Keterangan | String | Berisi penjelasan dari kodestatus hasil response |
|
||||
| | | 0 = unauthorized |
|
||||
| | | 1 = sukses |
|
||||
|
||||
#### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"kodestatus": 200,
|
||||
"keterangan": "Berhasil",
|
||||
"data": {
|
||||
"idpel": 999,
|
||||
"adminName": "admin",
|
||||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJUb2tlbi5Gb3IuVGhlLlNvbHVUYXguQXBpLldpdGhBdXRoIiwianRpIjoiMjVkMDYyYWItZmU3NS00NjYwLTgzYTQtNTJiZWZjMDA3NmYwIiwiaWF0IjoiMTc2NjczNzA0MiIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWVpZGVudGlmaWVyIjoiOTk5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6ImFkbWluIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvZW1haWxhZGRyZXNzIjoiZGV2QHNvbHV0YXgiLCJleHAiOjE3NjY4MjM0NDIsImlzcyI6InNvbHV0YXguYXBpIiwiYXVkIjoic29sdXRheC5hcGkuY2xpZW50In0.N9TcJINUZQyZRrsBFt_sYGSTWstYe4f3d60OLcGwvvQ",
|
||||
"expires_in": "27/12/2025 15.17.22"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Contoh Response: Gagal
|
||||
|
||||
```json
|
||||
{
|
||||
"kodestatus": 401,
|
||||
"keterangan": "Unauthorized",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. Bukti Potong PPh 21
|
||||
|
||||
#### A. Pengesahan Bukti Potong PPh 21
|
||||
|
||||
Digunakan untuk merekam dan mengesahkan bukti potong PPh Pasal 21 ke DJP. Apabila proses berhasil, DJP akan memberikan respons berupa nomor bukti potong dan ID bukti potong pengesahan.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/bulanan/new`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan yang mengirim request |
|
||||
| requestID | string | ID unik request dari client |
|
||||
| monthlyIncome | object | Objek data penghasilan bulanan |
|
||||
| | | |
|
||||
| **monthlyIncome:** | | |
|
||||
| npwpPemotong | string | NPWP pihak pemotong pajak |
|
||||
| idTkuPemotong | string | ID TKU pihak pemotong |
|
||||
| masaPajak | string | Masa pajak (bulan) |
|
||||
| tahunPajak | number | Tahun pajak |
|
||||
| npwpDipotong | string | NPWP/NIK pihak yang dipotong |
|
||||
| idTkuDipotong | string | ID TKU pihak yang dipotong |
|
||||
| Nama | string | Nama pihak yang dipotong |
|
||||
| fgJnsBupot | string | Jenis Bukti Potong (21) |
|
||||
| tglPemotongan | string (date) | Tanggal pemotongan pajak |
|
||||
| npwpNikPenandatangan | string | NPWP/NIK penandatangan |
|
||||
| namaPenandatangan | string | Nama penandatangan |
|
||||
| passphrasePenandatangan | string | Passphrase tanda tangan elektronik |
|
||||
| userId | string | User ID yang melakukan transaksi |
|
||||
| dataBp21 | object | Objek detail Bukti Potong PPh Pasal 21 |
|
||||
| | | |
|
||||
| **dataBp21:** | | |
|
||||
| sertifikatInsentifDipotong | string | Jenis insentif pajak: |
|
||||
| | | Kode | Keterangan |
|
||||
| | | N/A | Tanpa Fasilitas |
|
||||
| | | TaExAr21 | Surat Keterangan Bebas (SKB) Pemotongan PPh Pasal 21 |
|
||||
| | | DTP | PPh Ditanggung Pemerintah (DTP) |
|
||||
| | | ETC | Fasilitas Lainnya |
|
||||
| nomorSertifikatInsentif | string | Nomor sertifikat insentif (jika ada) |
|
||||
| kodeObjekPajak | string | Kode objek pajak PPh 21 |
|
||||
| statusPtkp | string | Status PTKP: |
|
||||
| | | TK/0, TK/1, TK/2, TK/3 |
|
||||
| | | K/0, K/1, K/2, K/3 |
|
||||
| penghasilanKotorSebelumnya | number | Penghasilan kotor sebelumnya |
|
||||
| penghasilanKotor | number | Penghasilan kotor bulan berjalan |
|
||||
| normaPenghasilan | number | Persentase norma penghasilan |
|
||||
| Tarif | number | Tarif PPh yang dikenakan |
|
||||
| pphDipotong | number | Nilai PPh yang dipotong |
|
||||
| dokReferensi | array | Daftar dokumen referensi |
|
||||
| | | |
|
||||
| **dokReferensi:** | | |
|
||||
| dokReferensi | string | Kode | Keterangan |
|
||||
| | | ANNOUNCEMENT | Pengumuman |
|
||||
| | | COMMERCIALINVOICE | Surat Tagihan |
|
||||
| | | CONTRACT | Kontrak |
|
||||
| | | CURRENTACCOUNT | Jasa Giro |
|
||||
| | | DECREE | Decree |
|
||||
| | | DEEDOFENGAGEMENT | Akta Perjanjian |
|
||||
| | | DEEDOFGENERAL | Akta RUPS |
|
||||
| | | OTHER | Lainnya |
|
||||
| | | OTHERFACILITYDOC | Dokumen Fasilitas Lainnya |
|
||||
| | | PAYMENTPROOF | Bukti Pembayaran |
|
||||
| | | STATEMENTLETTER | Surat Pernyataan |
|
||||
| | | TAXINVOICE | Faktur Pajak |
|
||||
| | | TAXREGULATIONDOC | Dokumen Perpajakan |
|
||||
| | | TRADECONFIRMATION | Trade Confirmation |
|
||||
| nomorDokumen | string | Nomor Dokumen Referensi |
|
||||
| tanggal_Dokumen | string (date) | Tanggal dokumen referensi |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
|
||||
"monthlyIncome": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"idTkuPemotong": "1091031210912281000000",
|
||||
"masaPajak": "01",
|
||||
"tahunPajak": 2025,
|
||||
"npwpDipotong": "3171065903840003",
|
||||
"idTkuDipotong": "3171065903840003000000",
|
||||
"nama": "NAMA3171065903840003",
|
||||
"fgJnsBupot": "21",
|
||||
"tglPemotongan": "2025-01-01",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"userId": "3174061502560010",
|
||||
"dataBp21": {
|
||||
"sertifikatInsentifDipotong": "DTP",
|
||||
"nomorSertifikatInsentif": "",
|
||||
"kodeObjekPajak": "21-100-35",
|
||||
"statusPtkp": "TK/2",
|
||||
"penghasilanKotorSebelumnya": 0,
|
||||
"penghasilanKotor": 10000000,
|
||||
"normaPenghasilan": 100,
|
||||
"tarif": 1.5,
|
||||
"pphDipotong": 150000,
|
||||
"dokReferensi": [
|
||||
{
|
||||
"dokReferensi": "ANNOUNCEMENT",
|
||||
"nomorDokumen": "Inv/Apr-008",
|
||||
"tanggal_Dokumen": "2025-01-01"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan |
|
||||
| responseID | String | ID unik respons dari sistem |
|
||||
| taxSlipResponse | Object | Objek hasil pemrosesan bukti potong |
|
||||
| | | |
|
||||
| **taxSlipResponse:** | | |
|
||||
| Status | String | Status proses (1 = sukses, 0 = gagal) |
|
||||
| statusCode | String | Kode status HTTP |
|
||||
| statusMessage | String | Pesan status hasil pemrosesan |
|
||||
| Result | Object | Detail hasil pembuatan bukti potong |
|
||||
| | | |
|
||||
| **Result:** | | |
|
||||
| nomorBupot | String | Nomor bukti potong elektronik |
|
||||
| idBupot | String | ID unik bukti potong |
|
||||
| Timestamp | string (datetime) | Waktu pemrosesan sistem (ISO 8601) |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "9e44fc83-58b8-453e-a35d-ac1a259a9112",
|
||||
"taxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success",
|
||||
"result": {
|
||||
"nomorBupot": "25000J24H",
|
||||
"idBupot": "ecbbdc78-0caa-4e5d-89e6-ab1981eda38b",
|
||||
"timestamp": "2026-01-06T02:04:16"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. User ID tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
|
||||
"taxSlipResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "500",
|
||||
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### B. Penggantian Bukti Potong PPh 21
|
||||
|
||||
Digunakan untuk mengganti data Bukti Potong PPh 21 yang sudah berhasil disahkan DJP. Apabila proses berhasil, DJP akan memberikan respons berupa nomor bukti potong dan ID bukti potong pengesahan.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/bulanan/edit`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan |
|
||||
| requestID | String | ID unik permintaan |
|
||||
| monthlyIncome | Object | Objek data penghasilan bulanan dan bukti potong |
|
||||
| | | |
|
||||
| **monthlyIncome:** | | |
|
||||
| npwpPemotong | String | NPWP pihak pemotong pajak |
|
||||
| idTkuPemotong | String | ID TKU pemotong pajak |
|
||||
| masaPajak | String | Masa pajak (format MM) |
|
||||
| tahunPajak | Number | Tahun pajak |
|
||||
| npwpDipotong | String | NPWP pihak yang dipotong pajaknya |
|
||||
| idTkuDipotong | String | ID TKU pihak yang dipotong |
|
||||
| Nama | String | Nama wajib pajak yang dipotong |
|
||||
| nomorBupot | String | Nomor bukti potong hasil pengesahan |
|
||||
| idBupot | String | ID bukti potong hasil pengesahan |
|
||||
| fgJnsBupot | String | Flag jenis bukti potong (21/A0) |
|
||||
| tglPemotongan | String (date) | Tanggal pemotongan pajak (YYYY-MM-DD) |
|
||||
| npwpNikPenandatangan | String | NPWP/NIK penandatangan |
|
||||
| namaPenandatangan | String | Nama penandatangan dokumen |
|
||||
| passphrasePenandatangan | String | Passphrase untuk otorisasi penandatangan |
|
||||
| userId | String | ID user pemroses data |
|
||||
| dataBp21 | Object | Detail perhitungan PPh Pasal 21 |
|
||||
| | | |
|
||||
| **dataBp21:** | | |
|
||||
| sertifikatInsentifDipotong | String | Status kepemilikan sertifikat insentif |
|
||||
| nomorSertifikatInsentif | String | Nomor sertifikat insentif |
|
||||
| kodeObjekPajak | String | Kode objek pajak |
|
||||
| statusPtkp | String | Status PTKP: |
|
||||
| | | TK/0, TK/1, TK/2, TK/3 |
|
||||
| | | K/0, K/1, K/2, K/3 |
|
||||
| penghasilanKotorSebelumnya | String | Total penghasilan kotor sebelum periode berjalan |
|
||||
| penghasilanKotor | String | Penghasilan kotor periode berjalan |
|
||||
| normaPenghasilan | Number | Persentase norma penghasilan |
|
||||
| Tarif | Number | Tarif pajak (%) |
|
||||
| pphDipotong | Number | Nilai PPh yang dipotong |
|
||||
| dokReferensi | Number | Daftar dokumen referensi pendukung |
|
||||
| | | |
|
||||
| **dokReferensi:** | | |
|
||||
| dokReferensi | Number | Kode | Keterangan |
|
||||
| | | ANNOUNCEMENT | Pengumuman |
|
||||
| | | COMMERCIALINVOICE | Surat Tagihan |
|
||||
| | | CONTRACT | Kontrak |
|
||||
| | | CURRENTACCOUNT | Jasa Giro |
|
||||
| | | DECREE | Decree |
|
||||
| | | DEEDOFENGAGEMENT | Akta Perjanjian |
|
||||
| | | DEEDOFGENERAL | Akta RUPS |
|
||||
| | | OTHER | Lainnya |
|
||||
| | | OTHERFACILITYDOC | Dokumen Fasilitas Lainnya |
|
||||
| | | PAYMENTPROOF | Bukti Pembayaran |
|
||||
| | | STATEMENTLETTER | Surat Pernyataan |
|
||||
| | | TAXINVOICE | Faktur Pajak |
|
||||
| | | TAXREGULATIONDOC | Dokumen Perpajakan |
|
||||
| | | TRADECONFIRMATION | Trade Confirmation |
|
||||
| nomorDokumen | String | Nomor dokumen referensi |
|
||||
| tanggal_Dokumen | String | Tanggal dokumen referensi |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3302",
|
||||
"monthlyIncome": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"idTkuPemotong": "1091031210912281000000",
|
||||
"masaPajak": "01",
|
||||
"tahunPajak": 2025,
|
||||
"npwpDipotong": "3171065903840003",
|
||||
"idTkuDipotong": "3171065903840003000000",
|
||||
"nama": "NAMA3171065903840003",
|
||||
"nomorBup00J28Eot": "250",
|
||||
"idBupot": "0cd1d89b-1e31-4c8f-a548-7f51bd2e37a0",
|
||||
"fgJnsBupot": "21",
|
||||
"tglPemotongan": "2025-01-01",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"userId": "3174061502560010",
|
||||
"dataBp21": {
|
||||
"sertifikatInsentifDipotong": "DTP",
|
||||
"nomorSertifikatInsentif": "",
|
||||
"kodeObjekPajak": "21-100-35",
|
||||
"statusPtkp": "TK/2",
|
||||
"penghasilanKotorSebelumnya": 0,
|
||||
"penghasilanKotor": 10000000,
|
||||
"normaPenghasilan": 100,
|
||||
"tarif": 1.5,
|
||||
"pphDipotong": 150000,
|
||||
"dokReferensi": [
|
||||
{
|
||||
"dokReferensi": "ANNOUNCEMENT",
|
||||
"nomorDokumen": "Inv/Apr-008",
|
||||
"tanggal_Dokumen": "2025-01-01"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan |
|
||||
| responseID | String | ID unik respons dari sistem |
|
||||
| taxSlipResponse | Object | Objek hasil pemrosesan bukti potong |
|
||||
| Status | String | Status proses (1 = sukses, 0 = gagal) |
|
||||
| statusCode | String | Kode status HTTP |
|
||||
| statusMessage | String | Pesan status hasil pemrosesan |
|
||||
| Result | Object | Detail hasil pembuatan/pembaruan bukti potong |
|
||||
| | | |
|
||||
| **Result:** | | |
|
||||
| nomorBupot | String | Nomor bukti potong elektronik |
|
||||
| idBupot | String | ID unik bukti potong |
|
||||
| Timestamp | string (datetime) | Waktu pemrosesan sistem (ISO 8601) |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "2ba73950-f37a-4bf9-8247-df15f89aa488",
|
||||
"taxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success",
|
||||
"result": {
|
||||
"nomorBupot": "25000J28E",
|
||||
"idBupot": "1656ead9-038b-40b6-a37b-c8328ff57dc8",
|
||||
"timestamp": "2026-01-06T19:35:51"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. User ID tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
|
||||
"taxSlipResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "500",
|
||||
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### C. Pembatalan Bukti Potong PPh 21
|
||||
|
||||
Fungsi ini digunakan untuk membatalkan bukti potong PPh 21.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/cancel`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan yang mengirim request |
|
||||
| requestID | string | ID unik request dari client |
|
||||
| taxSlipCancel | object | Objek permintaan pembatalan bukti potong |
|
||||
| | | |
|
||||
| **taxSlipCancel:** | | |
|
||||
| npwpPemotong | string | NPWP pihak pemotong pajak |
|
||||
| tahunPajak | number | Tahun pajak bukti potong |
|
||||
| nomorBupot | string | Nomor Bukti Potong yang akan dibatalkan |
|
||||
| idBupot | string | ID unik Bukti Potong dalam sistem |
|
||||
| fgJnsBupot | string | Flag jenis Bukti Potong (21) |
|
||||
| tglPembatalan | string (date) | Tanggal pembatalan bukti potong |
|
||||
| userId | string | User ID yang melakukan pembatalan |
|
||||
| npwpNikPenandatangan | string | NPWP/NIK penandatangan pembatalan |
|
||||
| passphrasePenandatangan | string | Passphrase tanda tangan elektronik |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3303",
|
||||
"taxSlipCancel": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"nomorBupot": "25000J28F",
|
||||
"idBupot": "c0042abf-7cb2-49c9-9489-032db5fb4811",
|
||||
"fgJnsBupot": "21",
|
||||
"tglPembatalan": "2025-01-01",
|
||||
"userId": "3174061502560010",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan atau identitas unik pemohon |
|
||||
| responseID | string (GUID) | ID unik response dalam format GUID untuk tracking request |
|
||||
| taxSlipResponse | object | Objek hasil response terkait tax slip |
|
||||
| Status | string | Status proses (1 = sukses, 0 gagal) |
|
||||
| statusCode | string | Kode status response (contoh: "200" = berhasil) |
|
||||
| statusMessage | string | Pesan status yang menjelaskan hasil proses |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "ce726d7f-2c48-4589-8676-ec1bc37869d4",
|
||||
"taxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. User ID tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
|
||||
"taxSlipResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "500",
|
||||
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### D. Periksa Status Bukti Potong PPh 21
|
||||
|
||||
Fungsi ini digunakan untuk periksa status hasil pengesahan, perubahan atau pembatalan bukti potong PPh 21.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/status`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan |
|
||||
| requestID | String | ID unik permintaan |
|
||||
| taxSlipVerification | Object | Objek data verifikasi bukti potong |
|
||||
| | | |
|
||||
| **taxSlipVerification:** | | |
|
||||
| npwpPemotong | String | NPWP pihak pemotong pajak |
|
||||
| tahunPajak | Number | Tahun pajak |
|
||||
| noBupot | String | Nomor bukti potong |
|
||||
| idBupot | String | ID unik bukti potong |
|
||||
| fgJnsBupot | String | Flag jenis bukti potong (21) |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3305",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "25000J24H",
|
||||
"idBupot": "ecbbdc78-0caa-4e5d-89e6-ab1981eda38b",
|
||||
"fgJnsBupot": "21"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan |
|
||||
| responseID | string | ID unik respons dari sistem |
|
||||
| printedTaxSlipResponse | object | Objek hasil verifikasi bukti potong |
|
||||
| Status | string | Status proses (1 = sukses, 0 = gagal) |
|
||||
| statusCode | string | Kode status HTTP |
|
||||
| statusMessage | string | Pesan status hasil verifikasi |
|
||||
| Result | object | Detail hasil verifikasi bukti potong |
|
||||
| | | |
|
||||
| **Result:** | | |
|
||||
| npwpPemotong | string | NPWP/ID penerima penghasilan |
|
||||
| statusBupot | string | Status bukti potong: |
|
||||
| | | Pengesahan: NORMAL-DONE |
|
||||
| | | Penggantian: AMENDED |
|
||||
| | | Pembatalan: CANCELLED-Done |
|
||||
| kodeObjekPajak | string | Kode objek pajak |
|
||||
| pphDipotong | number | Nilai PPh yang dipotong |
|
||||
| Timestamp | string (datetime) | Waktu proses verifikasi sistem |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "3c8fe213-fb73-49c3-896b-40e975dc2697",
|
||||
"printedTaxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success",
|
||||
"result": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"statusBupot": "NORMAL-DONE",
|
||||
"kodeObjekPajak": "21-100-35",
|
||||
"pphDipotong": 200000,
|
||||
"timestamp": "2026-01-22 08:57:58"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. NPWP tidak valid/tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
|
||||
"taxSlipVerificationResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "BadRequest",
|
||||
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### E. Unduh PDF Bukti Potong PPh 21
|
||||
|
||||
Fungsi ini digunakan untuk mengunduh PDF Bukti Potong PPh 21 yang telah disahkan oleh DJP baik itu untuk bukti potong pengesahan, penggantian maupun pembatalan.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/pdf`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| Nama Field | Tipe Data | Deskripsi |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan |
|
||||
| requestID | String | ID unik permintaan |
|
||||
| taxSlipVerification | Object | Objek data verifikasi bukti potong |
|
||||
| | | |
|
||||
| **taxSlipVerification:** | | |
|
||||
| npwpPemotong | String | NPWP pihak pemotong pajak |
|
||||
| tahunPajak | Number | Tahun pajak |
|
||||
| noBupot | String | Nomor bukti potong |
|
||||
| idBupot | String | ID unik bukti potong |
|
||||
| fgJnsBupot | String | Flag jenis bukti potong (21) |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "25000J24H",
|
||||
"idBupot": "ecbbdc78-0caa-4e5d-89e6-ab1981eda38b",
|
||||
"fgJnsBupot": "21"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan |
|
||||
| responseID | String | ID unik respons dari sistem |
|
||||
| printedTaxSlipResponse | Object | Objek hasil proses cetak bukti potong |
|
||||
| Status | String | Status proses (1 = sukses, 0 = gagal) |
|
||||
| statusCode | String | Kode status sistem |
|
||||
| statusMessage | String | Pesan status hasil proses |
|
||||
| result | Object | Detail hasil proses cetak bukti potong |
|
||||
| | | |
|
||||
| **result:** | | |
|
||||
| npwpPemotong | String | NPWP pihak pemotong pajak |
|
||||
| statusBupot | string | Status bukti potong: |
|
||||
| | | Pengesahan: NORMAL-DONE |
|
||||
| | | Penggantian: AMENDED |
|
||||
| | | Pembatalan: CANCELLED-Done |
|
||||
| kodeObjekPajak | String | Kode objek pajak |
|
||||
| pphDipotong | number | Nilai PPh yang dipotong |
|
||||
| timestamp | string (datetime) | Waktu proses sistem |
|
||||
| data | string | PDF dalam format base64string |
|
||||
| nomorBuktiPotong | String | Nomor bukti potong |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "ccc618cc-67de-472e-860a-cc95e1b778ad",
|
||||
"printedTaxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Berhasil mengunduh cetakan bukti potong",
|
||||
"result": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"statusBupot": "NORMAL-DONE",
|
||||
"kodeObjekPajak": "21-100-35",
|
||||
"pphDipotong": 200000,
|
||||
"timestamp": "2026-01-06 02:11:41",
|
||||
"data": "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvU...RhcnR4cmVmDQozMzQ1Mw0KJSVFT0Y=",
|
||||
"nomorBuktiPotong": "25000J24H"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. NPWP tidak valid/tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
|
||||
"taxSlipVerificationResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "BadRequest",
|
||||
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. Bukti Potong PPh A0
|
||||
|
||||
#### A. Pengesahan Bukti Potong PPh A0
|
||||
|
||||
Digunakan untuk merekam dan mengesahkan bukti potong PPh Pasal A0 baru ke DJP. Apabila proses berhasil, DJP akan memberikan respons berupa nomor bukti potong dan ID bukti potong pengesahan.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/bulanan/new`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan yang mengirim request |
|
||||
| requestID | string | ID unik request dari client |
|
||||
| monthlyIncome | object | Objek data penghasilan bulanan |
|
||||
| | | |
|
||||
| **monthlyIncome:** | | |
|
||||
| npwpPemotong | string | NPWP pihak pemotong pajak |
|
||||
| idTkuPemotong | string | ID TKU pihak pemotong |
|
||||
| masaPajak | string | Masa pajak (bulan) |
|
||||
| tahunPajak | number | Tahun pajak |
|
||||
| npwpDipotong | string | NPWP/NIK pihak yang dipotong |
|
||||
| idTkuDipotong | string | ID TKU pihak yang dipotong |
|
||||
| Nama | string | Nama pihak yang dipotong |
|
||||
| fgJnsBupot | string | Flag jenis Bukti Potong (A0) |
|
||||
| tglPemotongan | string (date) | Tanggal pemotongan pajak |
|
||||
| npwpNikPenandatangan | string | NPWP/NIK penandatangan |
|
||||
| namaPenandatangan | string | Nama penandatangan |
|
||||
| passphrasePenandatangan | string | Passphrase tanda tangan elektronik |
|
||||
| userId | string | User ID yang melakukan transaksi |
|
||||
| dataBpA0 | object | Objek detail Bukti Potong PPh 21 jenis A0 |
|
||||
| | | |
|
||||
| **dataBpA0:** | | |
|
||||
| foreignEmployee | string | Status pegawai: |
|
||||
| | | Nilai | Keterangan |
|
||||
| | | Resident | Pegawai dalam negeri |
|
||||
| | | Foreign | Pegawai Asing |
|
||||
| passportNo | string | Nomor paspor (wajib jika pegawai asing) |
|
||||
| countryCode | string | Kode negara pegawai |
|
||||
| statusPtkp | string | Status PTKP: |
|
||||
| | | TK/0, TK/1, TK/2, TK/3 |
|
||||
| | | K/0, K/1, K/2, K/3 |
|
||||
| posisiJabatan | string | Posisi atau jabatan pegawai |
|
||||
| sertifikatInsentifDipotong | string | Jenis insentif pajak: |
|
||||
| | | Kode | Keterangan |
|
||||
| | | N/A | Tanpa Fasilitas |
|
||||
| | | TaExAr21 | Surat Keterangan Bebas (SKB) Pemotongan PPh Pasal 21 |
|
||||
| | | DTP | PPh Ditanggung Pemerintah (DTP) |
|
||||
| | | ETC | Fasilitas Lainnya |
|
||||
| nomorSertifikatInsentif | string | Nomor sertifikat insentif (jika ada) |
|
||||
| kodeObjekPajak | string | Kode objek pajak PPh 21 |
|
||||
| penghasilanKotor | number | Total penghasilan bruto |
|
||||
| Tarif | number | Tarif PPh yang dikenakan (%) |
|
||||
| pphDipotong | number | Nilai PPh yang dipotong |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
|
||||
"monthlyIncome": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"idTkuPemotong": "1091031210912281000000",
|
||||
"masaPajak": "01",
|
||||
"tahunPajak": 2025,
|
||||
"npwpDipotong": "3171065903840003",
|
||||
"idTkuDipotong": "3171065903840003000000",
|
||||
"nama": "NAMA3171065903840003",
|
||||
"fgJnsBupot": "A0",
|
||||
"tglPemotongan": "2025-01-01",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"userId": "3174061502560010",
|
||||
"dataBpA0": {
|
||||
"foreignEmployee": "Resident",
|
||||
"passportNo": "",
|
||||
"countryCode": "IDN",
|
||||
"statusPtkp": "TK/2",
|
||||
"posisiJabatan": "Staf",
|
||||
"sertifikatInsentifDipotong": "N/A",
|
||||
"nomorSertifikatInsentif": "",
|
||||
"kodeObjekPajak": "21-100-01",
|
||||
"penghasilanKotor": 14240688,
|
||||
"tarif": 5,
|
||||
"pphDipotong": 712034
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan yang mengirim request |
|
||||
| responseID | String | ID unik response yang dihasilkan oleh sistem |
|
||||
| taxSlipResponse | Object | Objek utama response bukti potong |
|
||||
| Status | String | Status proses (1 = berhasil, 0 = gagal) |
|
||||
| statusCode | String | Kode status hasil proses (mengacu HTTP Status Code) |
|
||||
| statusMessage | String | Pesan hasil proses dari sistem |
|
||||
| Result | Object | Objek hasil pembuatan bukti potong |
|
||||
| | | |
|
||||
| **Result:** | | |
|
||||
| nomorBupot | String | Nomor Bukti Potong yang dihasilkan |
|
||||
| idBupot | String | ID unik Bukti Potong dalam sistem |
|
||||
| Timestamp | string (ISO 8601 datetime) | Waktu sistem saat proses berhasil dilakukan |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "6cac173d-d7f7-4f8a-9071-8acc8cdf6fbf",
|
||||
"taxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success",
|
||||
"result": {
|
||||
"nomorBupot": "25000J28F",
|
||||
"idBupot": "c0042abf-7cb2-49c9-9489-032db5fb4811",
|
||||
"timestamp": "2026-01-06T20:09:59"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. User ID tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
|
||||
"taxSlipResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "500",
|
||||
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### B. Penggantian Bukti Potong PPh A0
|
||||
|
||||
Digunakan untuk merubah data Bukti Potong PPh A0 yang sudah berhasil disahkan DJP. Apabila proses berhasil, DJP akan memberikan respons berupa nomor bukti potong dan ID bukti potong pengesahan.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/bulanan/edit`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan yang mengirim request |
|
||||
| requestID | string | ID unik request dari client |
|
||||
| monthlyIncome | object | Objek data penghasilan bulanan |
|
||||
| | | |
|
||||
| **monthlyIncome:** | | |
|
||||
| npwpPemotong | string | NPWP pihak pemotong pajak |
|
||||
| idTkuPemotong | string | ID TKU pihak pemotong |
|
||||
| masaPajak | string | Masa pajak (bulan) |
|
||||
| tahunPajak | number | Tahun pajak |
|
||||
| npwpDipotong | string | NPWP/NIK pihak yang dipotong |
|
||||
| idTkuDipotong | string | ID TKU pihak yang dipotong |
|
||||
| Nama | string | Nama pihak yang dipotong |
|
||||
| nomorBupot | string | Nomor Bukti Potong hasil pengesahan |
|
||||
| idBupot | string | ID Bukti Potong hasil pengesahan |
|
||||
| fgJnsBupot | string | Flag jenis Bukti Potong (A0) |
|
||||
| tglPemotongan | string (date) | Tanggal pemotongan pajak |
|
||||
| npwpNikPenandatangan | string | NPWP/NIK penandatangan |
|
||||
| namaPenandatangan | string | Nama penandatangan |
|
||||
| passphrasePenandatangan | string | Passphrase tanda tangan elektronik |
|
||||
| userId | string | User ID yang melakukan transaksi |
|
||||
| dataBpA0 | object | Objek detail Bukti Potong PPh A0 |
|
||||
| | | |
|
||||
| **dataBpA0:** | | |
|
||||
| foreignEmployee | string | Status Pegawai: |
|
||||
| | | Nilai | Keterangan |
|
||||
| | | Resident | Pegawai dalam negeri |
|
||||
| | | Foreign | Pegawai Asing |
|
||||
| passportNo | string | Nomor paspor (wajib jika pegawai asing) |
|
||||
| countryCode | string | Kode negara pegawai untuk Resident diisi (IDN) |
|
||||
| statusPtkp | string | Status PTKP: |
|
||||
| | | TK/0, TK/1, TK/2, TK/3 |
|
||||
| | | K/0, K/1, K/2, K/3 |
|
||||
| posisiJabatan | string | Posisi atau jabatan pegawai |
|
||||
| sertifikatInsentifDipotong | string | Jenis insentif pajak: |
|
||||
| | | Kode | Keterangan |
|
||||
| | | N/A | Tanpa Fasilitas |
|
||||
| | | TaExAr21 | Surat Keterangan Bebas (SKB) Pemotongan PPh Pasal 21 |
|
||||
| | | DTP | PPh Ditanggung Pemerintah (DTP) |
|
||||
| | | ETC | Fasilitas Lainnya |
|
||||
| nomorSertifikatInsentif | number | Nomor sertifikat insentif (jika ada) |
|
||||
| kodeObjekPajak | number | Kode objek pajak PPh 21 |
|
||||
| penghasilanKotor | number | Total penghasilan bruto |
|
||||
| Tarif | number | Tarif PPh yang dikenakan (%) |
|
||||
| pphDipotong | number | Nilai PPh yang dipotong |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "REQ-002",
|
||||
"monthlyIncome": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"idTkuPemotong": "1091031210912281000000",
|
||||
"masaPajak": "01",
|
||||
"tahunPajak": 2025,
|
||||
"npwpDipotong": "3171065903840003",
|
||||
"idTkuDipotong": "3171065903840003000000",
|
||||
"nama": "NAMA3171065903840003",
|
||||
"nomorBupot": "25000J28F",
|
||||
"idBupot": "c0042abf-7cb2-49c9-9489-032db5fb4811",
|
||||
"fgJnsBupot": "A0",
|
||||
"tglPemotongan": "2025-01-01",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"userId": "3174061502560010",
|
||||
"dataBpA0": {
|
||||
"foreignEmployee": "Resident",
|
||||
"passportNo": "",
|
||||
"countryCode": "",
|
||||
"statusPtkp": "TK/2",
|
||||
"posisiJabatan": "Staf",
|
||||
"sertifikatInsentifDipotong": "N/A",
|
||||
"nomorSertifikatInsentif": "",
|
||||
"kodeObjekPajak": "21-100-01",
|
||||
"penghasilanKotor": 14240688,
|
||||
"tarif": 5,
|
||||
"pphDipotong": 712034
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan yang menerima response |
|
||||
| responseID | String | ID unik response yang dihasilkan sistem |
|
||||
| taxSlipResponse | Object | Objek utama response bukti potong |
|
||||
| status | String | Status proses (1 = berhasil, 0 = gagal) |
|
||||
| statusCode | String | Kode status hasil proses (mengacu HTTP Status Code) |
|
||||
| statusMessage | String | Pesan hasil proses dari sistem |
|
||||
| result | Object | Objek hasil proses bukti potong |
|
||||
| | | |
|
||||
| **result:** | | |
|
||||
| nomorBupot | String | Nomor Bukti Potong yang dihasilkan |
|
||||
| idBupot | String | ID unik Bukti Potong dalam sistem |
|
||||
| Timestamp | string (ISO 8601 datetime) | Waktu sistem saat proses berhasil |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "ffe979d9-b47f-4ff5-a80a-975900becc6a",
|
||||
"taxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success",
|
||||
"result": {
|
||||
"nomorBupot": "25000J28F",
|
||||
"idBupot": "0342d22e-f5bc-404a-9f33-7c52b9e10917",
|
||||
"timestamp": "2026-01-06T20:29:41"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. User ID tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
|
||||
"taxSlipResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "500",
|
||||
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### C. Pembatalan Bukti Potong PPh A0
|
||||
|
||||
Fungsi ini digunakan untuk membatalkan bukti potong PPh A0.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/cancel`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan yang mengirim request |
|
||||
| requestID | String | ID unik request dari client |
|
||||
| taxSlipCancel | object | Objek permintaan pembatalan bukti potong |
|
||||
| | | |
|
||||
| **taxSlipCancel:** | | |
|
||||
| npwpPemotong | String | NPWP pihak pemotong pajak |
|
||||
| tahunPajak | number | Tahun pajak bukti potong |
|
||||
| nomorBupot | String | Nomor Bukti Potong yang akan dibatalkan |
|
||||
| idBupot | String | ID unik Bukti Potong dalam sistem |
|
||||
| fgJnsBupot | String | Flag jenis Bukti Potong (A0) |
|
||||
| tglPembatalan | string (date) | Tanggal pembatalan bukti potong |
|
||||
| userId | String | User ID yang melakukan pembatalan |
|
||||
| npwpNikPenandatangan | String | NPWP/NIK penandatangan pembatalan |
|
||||
| passphrasePenandatangan | String | Passphrase tanda tangan elektronik |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
|
||||
"taxSlipCancel": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"nomorBupot": "25000J28F",
|
||||
"idBupot": "c0042abf-7cb2-49c9-9489-032db5fb4811",
|
||||
"fgJnsBupot": "A0",
|
||||
"tglPembatalan": "2025-01-01",
|
||||
"userId": "3174061502560010",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number / integer | ID pelanggan atau identitas unik pemohon |
|
||||
| responseID | string (GUID) | ID unik response dalam format GUID untuk tracking request |
|
||||
| taxSlipResponse | object | Objek hasil response terkait tax slip |
|
||||
| status | string | Status proses (1 = sukses, 0 gagal) |
|
||||
| statusCode | string | Kode status response (contoh: "200" = berhasil) |
|
||||
| statusMessage | string | Pesan status yang menjelaskan hasil proses |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "ce726d7f-2c48-4589-8676-ec1bc37869d4",
|
||||
"taxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. User ID tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
|
||||
"taxSlipResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "500",
|
||||
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### D. Periksa Status Bukti Potong PPh A0
|
||||
|
||||
Fungsi ini digunakan untuk periksa status hasil pengesahan, perubahan atau pembatalan bukti potong PPh A0.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/status`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan |
|
||||
| requestID | String | ID unik permintaan |
|
||||
| taxSlipVerification | Object | Objek data verifikasi bukti potong |
|
||||
| | | |
|
||||
| **taxSlipVerification:** | | |
|
||||
| npwpPemotong | String | NPWP pihak pemotong pajak |
|
||||
| tahunPajak | Number | Tahun pajak |
|
||||
| noBupot | String | Nomor bukti potong |
|
||||
| idBupot | String | ID unik bukti potong |
|
||||
| fgJnsBupot | String | Flag jenis bukti potong (A0) |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "25000J24H",
|
||||
"idBupot": "ecbbdc78-0caa-4e5d-89e6-ab1981eda38b",
|
||||
"fgJnsBupot": "A0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan |
|
||||
| responseID | string | ID unik respons dari sistem |
|
||||
| printedTaxSlipResponse | object | Objek hasil verifikasi bukti potong |
|
||||
| Status | string | Status proses (1 = sukses, 0 = gagal) |
|
||||
| statusCode | string | Kode status HTTP |
|
||||
| statusMessage | string | Pesan status hasil verifikasi |
|
||||
| Result | object | Detail hasil verifikasi bukti potong |
|
||||
| | | |
|
||||
| **Result:** | | |
|
||||
| npwpPemotong | string | NPWP/ID penerima penghasilan |
|
||||
| statusBupot | string | Status bukti potong: |
|
||||
| | | Pengesahan: NORMAL-DONE |
|
||||
| | | Penggantian: AMENDED |
|
||||
| | | Pembatalan: CANCELLED-Done |
|
||||
| kodeObjekPajak | string | Kode objek pajak |
|
||||
| pphDipotong | number | Nilai PPh yang dipotong |
|
||||
| Timestamp | string (datetime) | Waktu proses verifikasi sistem |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "3c8fe213-fb73-49c3-896b-40e975dc2697",
|
||||
"printedTaxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success",
|
||||
"result": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"statusBupot": "NORMAL-DONE",
|
||||
"kodeObjekPajak": "21-100-35",
|
||||
"pphDipotong": 200000,
|
||||
"timestamp": "2026-01-22 08:57:58"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. NPWP tidak valid/tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
|
||||
"taxSlipVerificationResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "BadRequest",
|
||||
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### E. Unduh PDF Bukti Potong PPh A0
|
||||
|
||||
Fungsi ini digunakan untuk mengunduh PDF Bukti Potong PPh A0 yang telah disahkan oleh DJP baik itu untuk bukti potong pengesahan, penggantian maupun pembatalan.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/pdf`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| Nama Field | Tipe Data | Deskripsi |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan |
|
||||
| requestID | String | ID unik permintaan |
|
||||
| taxSlipVerification | Object | Objek data verifikasi bukti potong |
|
||||
| | | |
|
||||
| **taxSlipVerification:** | | |
|
||||
| npwpPemotong | String | NPWP pihak pemotong pajak |
|
||||
| tahunPajak | Number | Tahun pajak |
|
||||
| noBupot | String | Nomor bukti potong |
|
||||
| idBupot | String | ID unik bukti potong |
|
||||
| fgJnsBupot | String | Flag jenis bukti potong (A0) |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "3c8fe213-fb73-49c3-896b-40e975d77777",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "25000J24H",
|
||||
"idBupot": "ecbbdc78-0caa-4e5d-89e6-ab1981eda38b",
|
||||
"fgJnsBupot": "A0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan |
|
||||
| responseID | string | ID unik respons dari sistem |
|
||||
| printedTaxSlipResponse | object | Objek hasil proses cetak bukti potong |
|
||||
| Status | string | Status proses (1 = sukses, 0 = gagal) |
|
||||
| statusCode | string | Kode status sistem |
|
||||
| statusMessage | string | Pesan status hasil proses |
|
||||
| result | object | Detail hasil proses cetak bukti potong |
|
||||
| | | |
|
||||
| **result:** | | |
|
||||
| npwpPemotong | string | NPWP pihak pemotong pajak |
|
||||
| statusBupot | string | Status bukti potong: |
|
||||
| | | Pengesahan: NORMAL-DONE |
|
||||
| | | Penggantian: AMENDED |
|
||||
| | | Pembatalan: CANCELLED-Done |
|
||||
| kodeObjekPajak | string | Kode objek pajak |
|
||||
| pphDipotong | number | Nilai PPh yang dipotong |
|
||||
| Timestamp | string (datetime) | Waktu proses sistem |
|
||||
| Data | string | PDF dalam format base64string |
|
||||
| nomorBuktiPotong | string | Nomor bukti potong |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "ccc618cc-67de-472e-860a-cc95e1b778ad",
|
||||
"printedTaxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Berhasil mengunduh cetakan bukti potong",
|
||||
"result": {
|
||||
"npwpPemotong": "1091031210912281",
|
||||
"statusBupot": "NORMAL-DONE",
|
||||
"kodeObjekPajak": "21-100-35",
|
||||
"pphDipotong": 200000,
|
||||
"timestamp": "2026-01-06 02:11:41",
|
||||
"data": "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvU...RhcnR4cmVmDQozMzQ1Mw0KJSVFT0Y=",
|
||||
"nomorBuktiPotong": "25000J24H"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. NPWP tidak valid/tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
|
||||
"taxSlipVerificationResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "BadRequest",
|
||||
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. Bukti Potong PPh A1
|
||||
|
||||
#### A. Pengesahan Bukti Potong PPh A1
|
||||
|
||||
Digunakan untuk merekam dan mengesahkan bukti potong PPh Pasal A1 baru ke DJP. Apabila proses berhasil, DJP akan memberikan respons berupa nomor bukti potong dan ID bukti potong pengesahan.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/tahunan/new`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan yang mengirim request |
|
||||
| requestID | string | ID unik request dari client |
|
||||
| yearlyIncome | object | Objek data penghasilan tahunan (Bukti Potong A1) |
|
||||
| | | |
|
||||
| **yearlyIncome:** | | |
|
||||
| Alamat | string | Alamat lengkap penerima penghasilan |
|
||||
| blnPenghasilanDisetahunkan | number | Jumlah bulan penghasilan yang disetahunkan |
|
||||
| fgPemberiKerjaSelanjutnya | string | Status pemberi kerja selanjutnya (Yes/No) |
|
||||
| fgStatusPemotonganPph | string | Status | Keterangan |
|
||||
| | | FullYear | Setahun Penuh |
|
||||
| | | PartialYear | Kurang dari Setahun |
|
||||
| | | Annualized | Disetahunkan |
|
||||
| idTku | string | ID TKU pihak pemotong |
|
||||
| jnsKelamin | string | Jenis kelamin penerima penghasilan (M/F) |
|
||||
| kodeObjekPajak | string | Kode objek pajak PPh 21 |
|
||||
| masaPajakAwal | string | Masa pajak awal |
|
||||
| masaPajakAkhir | string | Masa pajak akhir |
|
||||
| Nama | string | Nama penerima penghasilan |
|
||||
| namaPenandatangan | string | Nama penandatangan bukti potong |
|
||||
| nominalPtkp | number | Nominal PTKP |
|
||||
| Npwp | string | NPWP/NIK penerima penghasilan |
|
||||
| npwpNikPenandatangan | string | NPWP/NIK penandatangan |
|
||||
| npwpPemotong | string | NPWP pihak pemotong |
|
||||
| passphrasePenandatangan | string | Passphrase tanda tangan elektronik |
|
||||
| pkpSetahunDisetahunkan | number | PKP setahun yang disetahunkan |
|
||||
| pph21DapatDikreditkan | number | PPh 21 yang dapat dikreditkan |
|
||||
| pph21DariBupotSebelumnya | number | PPh 21 dari bukti potong sebelumnya |
|
||||
| pph21KurangLebihBayar | number | Nilai kurang/lebih bayar PPh 21 |
|
||||
| pph21SetahunDisetahunkan | number | Total PPh 21 setahun disetahunkan |
|
||||
| pph21Terutang | number | PPh 21 terutang |
|
||||
| pph21WithheldDtp | number | PPh 21 yang ditanggung pemerintah |
|
||||
| statusPtkp | string | Status PTKP: |
|
||||
| | | TK/0, TK/1, TK/2, TK/3 |
|
||||
| | | K/0, K/1, K/2, K/3 |
|
||||
| tahunPajak | number | Tahun pajak |
|
||||
| tglPemotongan | string (date) | Tanggal pemotongan |
|
||||
| totalPenghasilanBruto | number | Total penghasilan bruto |
|
||||
| totalPenghasilanNeto | number | Total penghasilan neto |
|
||||
| totalPenghasilanNetoDariBupotSebelumnya | number | Penghasilan neto dari bukti potong sebelumnya |
|
||||
| totalPenghasilanNetoPph21 | number | Total penghasilan neto objek PPh 21 |
|
||||
| totalPengurang | number | Total pengurang penghasilan |
|
||||
| userId | string | User ID yang melakukan transaksi |
|
||||
| dataBpA1 | object | Objek detail Bukti Potong PPh 21 jenis A1 |
|
||||
| | | |
|
||||
| **dataBpA1:** | | |
|
||||
| fgKaryawanAsing | string | Status Pegawai: |
|
||||
| | | Nilai | Keterangan |
|
||||
| | | Resident | Pegawai dalam negeri |
|
||||
| | | Foreign | Pegawai Asing |
|
||||
| passport | string | Nomor paspor (jika karyawan asing) |
|
||||
| kdNegara | string | Kode negara karyawan. Untuk pegawai dalam negeri diisi IDN |
|
||||
| posisiJabatan | string | Posisi atau jabatan |
|
||||
| gajiPensiun | number | Penghasilan dari gaji/pensiun |
|
||||
| tunjanganPPh | number | Tunjangan PPh |
|
||||
| tunjanganPPhGrossUp | string | Status gross up PPh (Yes/No) |
|
||||
| tunjanganLainnyaLembur | number | Tunjangan lainnya dan lembur |
|
||||
| honorarium | number | Penghasilan honorarium |
|
||||
| premiAsuransi | number | Premi asuransi |
|
||||
| Natura | number | Penghasilan natura |
|
||||
| tantiemBonus | number | Tantiem atau bonus |
|
||||
| biayaJabatan | number | Biaya jabatan |
|
||||
| iuranPensiun | number | Iuran pensiun |
|
||||
| Zakat | number | Zakat yang dibayarkan |
|
||||
| fgFasilitas | string | Jenis Fasilitas: |
|
||||
| | | Kode | Keterangan |
|
||||
| | | N/A | Tanpa Fasilitas |
|
||||
| | | TaExAr21 | Surat Keterangan Bebas (SKB) Pemotongan PPh Pasal 21 |
|
||||
| | | DTP | PPh Ditanggung Pemerintah (DTP) |
|
||||
| | | ETC | Fasilitas Lainnya |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "a1b2c3d4-1234-4abc-9def-001122334455",
|
||||
"yearlyIncome": {
|
||||
"alamat": "JL MATRAMAN DALAM I NO.32, RT002/RW008, PEGANGSAAN, MENTENG, KOTA ADM. JAKARTA PUSAT, DKI JAKARTA, 10320",
|
||||
"blnPenghasilanDisetahunkan": 5,
|
||||
"fgPemberiKerjaSelanjutnya": "No",
|
||||
"fgStatusPemotonganPph": "Annualized",
|
||||
"idTku": "0717166367077000000000",
|
||||
"jnsKelamin": "F",
|
||||
"kodeObjekPajak": "21-100-01",
|
||||
"masaPajakAwal": "01",
|
||||
"masaPajakAkhir": "05",
|
||||
"nama": "NAMA3171064907980002",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"nominalPtkp": 67500000,
|
||||
"npwp": "3171064907980002",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"pkpSetahunDisetahunkan": 0,
|
||||
"pph21DapatDikreditkan": 0,
|
||||
"pph21DariBupotSebelumnya": 0,
|
||||
"pph21KurangLebihBayar": 0,
|
||||
"pph21SetahunDisetahunkan": 0,
|
||||
"pph21Terutang": 0,
|
||||
"pph21WithheldDtp": 0,
|
||||
"statusPtkp": "TK/3",
|
||||
"tahunPajak": 2025,
|
||||
"tglPemotongan": "2025-06-30",
|
||||
"totalPenghasilanBruto": 102500000,
|
||||
"totalPenghasilanNeto": 97250000,
|
||||
"totalPenghasilanNetoDariBupotSebelumnya": 0,
|
||||
"totalPenghasilanNetoPph21": 97250000,
|
||||
"totalPengurang": 6000000,
|
||||
"userId": "3174061502560010",
|
||||
"dataBpA1": {
|
||||
"fgKaryawanAsing": "Resident",
|
||||
"passport": "",
|
||||
"kdNegara": "IDN",
|
||||
"posisiJabatan": "Staff",
|
||||
"gajiPensiun": 85000000,
|
||||
"tunjanganPPh": 0,
|
||||
"tunjanganPPhGrossUp": "No",
|
||||
"tunjanganLainnyaLembur": 17500000,
|
||||
"honorarium": 0,
|
||||
"premiAsuransi": 0,
|
||||
"Natura": 0,
|
||||
"tantiemBonus": 0,
|
||||
"biayaJabatan": 6000000,
|
||||
"iuranPensiun": 0,
|
||||
"Zakat": 0,
|
||||
"fgFasilitas": "N/A"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan |
|
||||
| responseID | String | ID unik response |
|
||||
| taxSlipResponse | Object | Objek response bukti potong |
|
||||
| Status | String | Status proses (1=sukses, 0=gagal) |
|
||||
| statusCode | String | Kode status HTTP |
|
||||
| statusMessage | String | Pesan status |
|
||||
| Result | Object | Detail hasil |
|
||||
| | | |
|
||||
| **Result:** | | |
|
||||
| nomorBupot | String | Nomor bukti potong |
|
||||
| idBupot | String | ID bukti potong |
|
||||
| timestamp | String | Timestamp |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "d4c3b2a1-5678-4def-9012-34567890abcd",
|
||||
"taxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success",
|
||||
"result": {
|
||||
"nomorBupot": "25000J29A",
|
||||
"idBupot": "f1e2d3c4-5678-4abc-9def-0123456789ab",
|
||||
"timestamp": "2026-01-15T10:30:00"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. User ID tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
|
||||
"taxSlipResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "500",
|
||||
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### B. Penggantian Bukti Potong PPh A1
|
||||
|
||||
Digunakan untuk merubah data Bukti Potong PPh A1 yang sudah disahkan DJP.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/tahunan/edit`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan |
|
||||
| requestID | string | ID unik request |
|
||||
| yearlyIncome | object | Objek data penghasilan tahunan |
|
||||
| | | |
|
||||
| **yearlyIncome:** | | |
|
||||
| Alamat | string | Alamat lengkap |
|
||||
| blnPenghasilanDisetahunkan | number | Jumlah bulan penghasilan |
|
||||
| fgPemberiKerjaSelanjutnya | string | Status pemberi kerja (Yes/No) |
|
||||
| fgStatusPemotonganPph | string | Status pemotongan |
|
||||
| idTku | string | ID TKU |
|
||||
| jnsKelamin | string | Jenis kelamin (M/F) |
|
||||
| kodeObjekPajak | string | Kode objek pajak |
|
||||
| masaPajakAwal | string | Masa pajak awal |
|
||||
| masaPajakAkhir | string | Masa pajak akhir |
|
||||
| Nama | string | Nama penerima |
|
||||
| namaPenandatangan | string | Nama penandatangan |
|
||||
| nominalPtkp | number | Nominal PTKP |
|
||||
| Npwp | string | NPWP |
|
||||
| npwpNikPenandatangan | string | NPWP penandatangan |
|
||||
| npwpPemotong | string | NPWP pemotong |
|
||||
| passphrasePenandatangan | string | Passphrase |
|
||||
| pkpSetahunDisetahunkan | number | PKP setahun |
|
||||
| pph21DapatDikreditkan | number | PPh dapat dikreditkan |
|
||||
| pph21DariBupotSebelumnya | number | PPh dari bupot sebelumnya |
|
||||
| pph21KurangLebihBayar | number | Kurang/lebih bayar |
|
||||
| pph21SetahunDisetahunkan | number | PPh setahun disetahunkan |
|
||||
| pph21Terutang | number | PPh terutang |
|
||||
| pph21WithheldDtp | number | PPh DTP |
|
||||
| statusPtkp | string | Status PTKP |
|
||||
| tahunPajak | number | Tahun pajak |
|
||||
| tglPemotongan | string | Tanggal pemotongan |
|
||||
| totalPenghasilanBruto | number | Total penghasilan bruto |
|
||||
| totalPenghasilanNeto | number | Total penghasilan neto |
|
||||
| totalPenghasilanNetoDariBupotSebelumnya | number | Neto dari sebelumnya |
|
||||
| totalPenghasilanNetoPph21 | number | Neto objek PPh 21 |
|
||||
| totalPengurang | number | Total pengurang |
|
||||
| userId | string | User ID |
|
||||
| nomorBupot | string | Nomor bupot yang diganti |
|
||||
| idBupot | string | ID bupot |
|
||||
| dataBpA1 | object | Detail bukti potong A1 |
|
||||
| | | |
|
||||
| **dataBpA1:** | | |
|
||||
| fgKaryawanAsing | string | Status karyawan (Resident/Foreign) |
|
||||
| passport | string | Nomor paspor |
|
||||
| kdNegara | string | Kode negara |
|
||||
| posisiJabatan | string | Jabatan |
|
||||
| gajiPensiun | number | Gaji/pensiun |
|
||||
| tunjanganPPh | number | Tunjangan PPh |
|
||||
| tunjanganPPhGrossUp | string | Gross up (Yes/No) |
|
||||
| tunjanganLainnyaLembur | number | Tunjangan lain/lembur |
|
||||
| honorarium | number | Honorarium |
|
||||
| premiAsuransi | number | Premi asuransi |
|
||||
| Natura | number | Natura |
|
||||
| tantiemBonus | number | Bonus/tantiem |
|
||||
| biayaJabatan | number | Biaya jabatan |
|
||||
| iuranPensiun | number | Iuran pensiun |
|
||||
| Zakat | number | Zakat |
|
||||
| fgFasilitas | string | Jenis fasilitas |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "b2c3d4e5-1234-4abc-9def-001122334456",
|
||||
"yearlyIncome": {
|
||||
"alamat": "JL MATRAMAN DALAM I NO.32, RT002/RW008, PEGANGSAAN, MENTENG, KOTA ADM. JAKARTA PUSAT, DKI JAKARTA, 10320",
|
||||
"blnPenghasilanDisetahunkan": 5,
|
||||
"fgPemberiKerjaSelanjutnya": "No",
|
||||
"fgStatusPemotonganPph": "Annualized",
|
||||
"idTku": "0717166367077000000000",
|
||||
"jnsKelamin": "F",
|
||||
"kodeObjekPajak": "21-100-01",
|
||||
"masaPajakAwal": "01",
|
||||
"masaPajakAkhir": "05",
|
||||
"nama": "NAMA3171064907980002",
|
||||
"namaPenandatangan": "NAMA3174061502560010",
|
||||
"nominalPtkp": 67500000,
|
||||
"npwp": "3171064907980002",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"passphrasePenandatangan": "Pajak123@@",
|
||||
"pkpSetahunDisetahunkan": 0,
|
||||
"pph21DapatDikreditkan": 0,
|
||||
"pph21DariBupotSebelumnya": 0,
|
||||
"pph21KurangLebihBayar": 0,
|
||||
"pph21SetahunDisetahunkan": 0,
|
||||
"pph21Terutang": 0,
|
||||
"pph21WithheldDtp": 0,
|
||||
"statusPtkp": "TK/3",
|
||||
"tahunPajak": 2025,
|
||||
"tglPemotongan": "2025-06-30",
|
||||
"totalPenghasilanBruto": 102500000,
|
||||
"totalPenghasilanNeto": 97250000,
|
||||
"totalPenghasilanNetoDariBupotSebelumnya": 0,
|
||||
"totalPenghasilanNetoPph21": 97250000,
|
||||
"totalPengurang": 6000000,
|
||||
"userId": "3174061502560010",
|
||||
"nomorBupot": "25000J29A",
|
||||
"idBupot": "f1e2d3c4-5678-4abc-9def-0123456789ab",
|
||||
"dataBpA1": {
|
||||
"fgKaryawanAsing": "Resident",
|
||||
"passport": "",
|
||||
"kdNegara": "IDN",
|
||||
"posisiJabatan": "Staff",
|
||||
"gajiPensiun": 85000000,
|
||||
"tunjanganPPh": 0,
|
||||
"tunjanganPPhGrossUp": "No",
|
||||
"tunjanganLainnyaLembur": 17500000,
|
||||
"honorarium": 0,
|
||||
"premiAsuransi": 0,
|
||||
"Natura": 0,
|
||||
"tantiemBonus": 0,
|
||||
"biayaJabatan": 6000000,
|
||||
"iuranPensiun": 0,
|
||||
"Zakat": 0,
|
||||
"fgFasilitas": "N/A"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan |
|
||||
| responseID | String | ID unik response |
|
||||
| taxSlipResponse | Object | Objek response |
|
||||
| Status | String | Status proses |
|
||||
| statusCode | String | Kode status HTTP |
|
||||
| statusMessage | String | Pesan status |
|
||||
| Result | Object | Detail hasil |
|
||||
| | | |
|
||||
| **Result:** | | |
|
||||
| nomorBupot | String | Nomor bukti potong |
|
||||
| idBupot | String | ID bukti potong |
|
||||
| timestamp | String | Timestamp |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "e5f4a3b2-6789-4cba-9fed-1234567890cd",
|
||||
"taxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success",
|
||||
"result": {
|
||||
"nomorBupot": "25000J29A",
|
||||
"idBupot": "a1b2c3d4-5678-4abc-9def-0123456789ab",
|
||||
"timestamp": "2026-01-15T11:00:00"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. User ID tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
|
||||
"taxSlipResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "500",
|
||||
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### C. Pembatalan Bukti Potong PPh A1
|
||||
|
||||
Fungsi ini digunakan untuk membatalkan bukti potong PPh A1.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/cancel`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan |
|
||||
| requestID | string | ID unik request |
|
||||
| taxSlipCancel | object | Objek pembatalan |
|
||||
| | | |
|
||||
| **taxSlipCancel:** | | |
|
||||
| npwpPemotong | string | NPWP pemotong |
|
||||
| tahunPajak | number | Tahun pajak |
|
||||
| nomorBupot | string | Nomor bupot |
|
||||
| idBupot | string | ID bupot |
|
||||
| fgJnsBupot | string | Flag jenis bukti potong (A1) |
|
||||
| tglPembatalan | string | Tanggal pembatalan |
|
||||
| userId | string | User ID |
|
||||
| npwpNikPenandatangan | string | NPWP penandatangan |
|
||||
| passphrasePenandatangan | string | Passphrase |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "c3d4e5f6-1234-4abc-9def-001122334457",
|
||||
"taxSlipCancel": {
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"tahunPajak": 2025,
|
||||
"nomorBupot": "25000J29A",
|
||||
"idBupot": "f1e2d3c4-5678-4abc-9def-0123456789ab",
|
||||
"fgJnsBupot": "A1",
|
||||
"tglPembatalan": "2025-07-01",
|
||||
"userId": "3174061502560010",
|
||||
"npwpNikPenandatangan": "3174061502560010",
|
||||
"passphrasePenandatangan": "Pajak123@@"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan |
|
||||
| responseID | string (GUID) | ID unik response |
|
||||
| taxSlipResponse | object | Objek response |
|
||||
| status | string | Status proses (1=sukses, 0=gagal) |
|
||||
| statusCode | string | Kode status |
|
||||
| statusMessage | string | Pesan status |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "f6e5d4c3-7896-4cba-9fed-2345678901de",
|
||||
"taxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. User ID tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
|
||||
"taxSlipResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "500",
|
||||
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### D. Periksa Status Bukti Potong PPh A1
|
||||
|
||||
Fungsi ini digunakan untuk periksa status bukti potong PPh A1.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/status`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan |
|
||||
| requestID | String | ID unik permintaan |
|
||||
| taxSlipVerification | Object | Objek verifikasi |
|
||||
| | | |
|
||||
| **taxSlipVerification:** | | |
|
||||
| npwpPemotong | String | NPWP pemotong |
|
||||
| tahunPajak | Number | Tahun pajak |
|
||||
| noBupot | String | Nomor bukti potong |
|
||||
| idBupot | String | ID bukti potong |
|
||||
| fgJnsBupot | String | Flag jenis bukti potong (A1) |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "d4e5f6a7-1234-4abc-9def-001122334458",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "25000J29A",
|
||||
"idBupot": "f1e2d3c4-5678-4abc-9def-0123456789ab",
|
||||
"fgJnsBupot": "A1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan |
|
||||
| responseID | string | ID unik respons |
|
||||
| printedTaxSlipResponse | object | Objek response |
|
||||
| Status | string | Status proses |
|
||||
| statusCode | string | Kode status HTTP |
|
||||
| statusMessage | string | Pesan status |
|
||||
| Result | object | Detail hasil verifikasi |
|
||||
| | | |
|
||||
| **Result:** | | |
|
||||
| npwpPemotong | string | NPWP pemotong |
|
||||
| statusBupot | string | Status bukti potong |
|
||||
| kodeObjekPajak | string | Kode objek pajak |
|
||||
| pphDipotong | number | Nilai PPh dipotong |
|
||||
| Timestamp | string | Timestamp verifikasi |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "a7b6c5d4-8901-4def-9fed-3456789012ef",
|
||||
"printedTaxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Success",
|
||||
"result": {
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"statusBupot": "NORMAL-DONE",
|
||||
"kodeObjekPajak": "21-100-01",
|
||||
"pphDipotong": 5950000,
|
||||
"timestamp": "2026-01-22 09:15:30"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. NPWP tidak valid/tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
|
||||
"taxSlipVerificationResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "BadRequest",
|
||||
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### E. Unduh PDF Bukti Potong PPh A1
|
||||
|
||||
Fungsi ini digunakan untuk mengunduh PDF Bukti Potong PPh A1.
|
||||
|
||||
**Api EndPoint:** `/ifs/api/wit/pdf`
|
||||
|
||||
**Method:** POST
|
||||
|
||||
**Header:** Token
|
||||
|
||||
##### REQUEST
|
||||
|
||||
| Nama Field | Tipe Data | Deskripsi |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | Number | ID pelanggan |
|
||||
| requestID | String | ID unik permintaan |
|
||||
| taxSlipVerification | Object | Objek verifikasi |
|
||||
| | | |
|
||||
| **taxSlipVerification:** | | |
|
||||
| npwpPemotong | String | NPWP pemotong |
|
||||
| tahunPajak | Number | Tahun pajak |
|
||||
| noBupot | String | Nomor bukti potong |
|
||||
| idBupot | String | ID bukti potong |
|
||||
| fgJnsBupot | String | Flag jenis bukti potong (A1) |
|
||||
|
||||
##### Contoh Request
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"requestID": "e5f6a7b8-1234-4abc-9def-001122334459",
|
||||
"taxSlipVerification": {
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"tahunPajak": 2025,
|
||||
"noBupot": "25000J29A",
|
||||
"idBupot": "f1e2d3c4-5678-4abc-9def-0123456789ab",
|
||||
"fgJnsBupot": "A1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### RESPONSE
|
||||
|
||||
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|
||||
|------------|-----------|-----------|
|
||||
| idPel | number | ID pelanggan |
|
||||
| responseID | string | ID unik respons |
|
||||
| printedTaxSlipResponse | Object | Objek response |
|
||||
| Status | string | Status proses |
|
||||
| statusCode | string | Kode status |
|
||||
| statusMessage | string | Pesan status |
|
||||
| result | Object | Detail hasil |
|
||||
| | | |
|
||||
| **result:** | | |
|
||||
| npwpPemotong | string | NPWP pemotong |
|
||||
| statusBupot | string | Status bukti potong |
|
||||
| kodeObjekPajak | string | Kode objek pajak |
|
||||
| pphDipotong | number | Nilai PPh dipotong |
|
||||
| timestamp | string | Timestamp |
|
||||
| data | string | PDF dalam format base64 |
|
||||
| nomorBuktiPotong | string | Nomor bukti potong |
|
||||
|
||||
##### Contoh Response: Berhasil
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "b8a9c8d7-9012-4efb-9fed-4567890123fg",
|
||||
"printedTaxSlipResponse": {
|
||||
"status": "1",
|
||||
"statusCode": "200",
|
||||
"statusMessage": "Berhasil mengunduh cetakan bukti potong",
|
||||
"result": {
|
||||
"npwpPemotong": "0717166367077000",
|
||||
"statusBupot": "NORMAL-DONE",
|
||||
"kodeObjekPajak": "21-100-01",
|
||||
"pphDipotong": 5950000,
|
||||
"timestamp": "2026-01-22 09:30:00",
|
||||
"data": "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFI+Pg0KZW5kb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMyAwIFI+DQplbmRvYmoNCjQgMCBvYmoNClBERiAvVGFiaW5kZXIgMQ0KZW5kb2JqDQp4CmVuZHN0cmVhbQplbmRvYmoNCnRyYWlsZXINCjw8L1R5cGUvWE9iamVjdC9SZXNvdXJjZXMgMiAwIFI+Pg0Kc3RhcnR4cmVmDQo0NTANCiUlRU9G",
|
||||
"nomorBuktiPotong": "25000J29A"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Contoh Response: Gagal
|
||||
|
||||
**a. NPWP tidak valid/tidak sesuai**
|
||||
|
||||
```json
|
||||
{
|
||||
"idPel": 999,
|
||||
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
|
||||
"taxSlipVerificationResponse": {
|
||||
"status": "0",
|
||||
"statusCode": "BadRequest",
|
||||
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**b. Token tidak valid**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "0",
|
||||
"statusCode": "401",
|
||||
"statusMessage": "Unauthorized: token validation error"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Catatan Penting
|
||||
|
||||
1. **Autentikasi**: Semua endpoint (kecuali Token) memerlukan token autentikasi pada header request.
|
||||
|
||||
2. **Format Tanggal**: Format tanggal yang digunakan adalah `YYYY-MM-DD`.
|
||||
|
||||
3. **Format NPWP**: NPWP harus terdiri dari 15 digit tanpa tanda baca.
|
||||
|
||||
4. **Error Handling**: Jika request gagal, response akan berisi `status: 0` dengan `statusCode` dan `statusMessage` yang menjelaskan penyebab kegagalan.
|
||||
|
||||
5. **Token Kadaluarsa**: Token memiliki masa berlaku. Jika token kadaluarsa, request akan ditolak dengan status `401 Unauthorized`.
|
||||
|
||||
6. **Base64 Encoding**: Response untuk endpoint unduh PDF akan mengembalikan data PDF dalam format Base64 string.
|
||||
|
||||
---
|
||||
|
||||
*Dokumen ini dibuat oleh PT Sarana Prima Telematika - 2026*
|
||||
30
token.bru
Normal file
30
token.bru
Normal file
@@ -0,0 +1,30 @@
|
||||
meta {
|
||||
name: Token
|
||||
type: http
|
||||
seq: 2
|
||||
}
|
||||
|
||||
post {
|
||||
url: https://ifswit-solutax-ctas-dev.spt.co.id/auth/gettoken
|
||||
body: none
|
||||
auth: basic
|
||||
}
|
||||
|
||||
auth:basic {
|
||||
username: us3rAnd4l
|
||||
password: p@5s4ndal001
|
||||
}
|
||||
|
||||
script:post-response {
|
||||
// Parse response body and extract access_token
|
||||
const response = res.body;
|
||||
|
||||
// Check if access_token and idpel exist in response
|
||||
if (response && response.data) {
|
||||
bru.setEnvVar("accessToken", response.data.access_token);
|
||||
bru.setEnvVar("idpel", response.data.idpel.toString());
|
||||
console.log("Access token and idpel extracted and set as environment variables");
|
||||
} else {
|
||||
console.log("No data found in response");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user