← หน้ารวม (Hub)
FD Deep-Dive · Report ANONYMIZED · PUBLIC EDITION 01.01.07.04 Period-End Tax Reporting

TAX-RPT-3 — Current Tax Report ประเทศไทย (ZTAXA_R05)

Type · Report Nature · Retrofit with change T-code · ZTAXA_R05 Output · ALV Grid Complexity · Complex Priority · P1 Geo · Thailand

รายงานนี้คือ “เครื่องคำนวณภาษีเงินได้นิติบุคคลรายเดือน” — เอางบการเงินตั้งต้น แล้วบวก/ลบรายการปรับปรุงทางภาษี จนได้กำไรทางภาษี × อัตรา = ภาษีที่ต้องตั้งค้างจ่าย ทุกบรรทัดในรายงานมาจาก 3 แหล่งเท่านั้น — GL node (ยอดจากระบบ) · UP node (ไฟล์อัปโหลด) · CL node (สูตรคำนวณ) FD ฉบับนี้เป็น delta document — เขียนเฉพาะสิ่งที่เปลี่ยนจาก ECC → S/4HANA

Business process
01.01.07.04
Period-End Tax Reporting
Frequency
Monthly + Ad Hoc
มี option รัน background
Users
6 users
Accountant / Tax / BA
🔗 อ่านเป็นชุด — “Current Tax Suite” 3 objects: TAX-RPT-3 (ไทย · หน้านี้) · TAX-RPT-4 (ต่างประเทศ) · TAX-RPT-5 (Loss Carried Forward) — ทั้งสามใช้ตารางชุดเดียวกัน (ZTAXA_T05–037) และส่งค่าให้กันผ่าน ZTAXB_T01
Key Takeaways — 8 ข้อที่ตอบได้ = เข้าใจ object นี้
1

ภาพรวม — รายงานนี้คำนวณอะไร

เครื่องมือคำนวณและประมาณการ “ภาษีเงินได้นิติบุคคลค้างจ่าย” รายเดือน

หลักการทางภาษี: กำไรทางบัญชี ≠ กำไรทางภาษี — ต้องปรับด้วย 2 ตระกูลรายการ

กำไรทางบัญชี
GL node
± Permanent diff ± Temporary diff − Allowances / LCF × Tax rate = ภาษีค้างจ่าย

3 ประเภท node — จำให้ขึ้นใจ

Nodeชื่อเต็มแหล่งข้อมูลแก้ไขยังไง
GLGeneral Ledger nodeยอดจาก ACDOCA ผ่าน mapping ZTAXA_T01แก้ที่ mapping table หรือแก้เอกสาร
UPUpload nodeflat file (โปรแกรม ZTAXA_R06) → เก็บใน ZTAXA_T03อัปโหลดใหม่ทับ
CLCalculation nodeสูตรจาก node อื่นแก้ไม่ได้โดยตรง — ต้องแก้ต้นทาง
ประโยชน์ตอน debug: เวลามีคนบอกว่า “ตัวเลขผิด” ให้ถามก่อนว่า บรรทัดนั้นเป็น node ประเภทไหน — ถ้าเป็น GL ให้ไล่ mapping + ACDOCA · ถ้าเป็น UP ให้ไปดูไฟล์ที่อัปโหลด · ถ้าเป็น CL ให้ไล่ node ต้นทางที่ป้อนเข้าสูตร ไม่ต้องเดา — ประเภท node ระบุอยู่ใน ZTAXA_T06

Assumption สำคัญของ FD

“Revaluated information will be based on LC3 — ข้อมูลที่ตีราคาใหม่สำหรับ current tax TH report จะอยู่ใน ACDOCA field ของ LC3 ไม่ว่าจะเป็น standard หรือ custom solution ฝั่ง GL” → แปลว่าถ้าทีม GL เปลี่ยนวิธีทำ revaluation รายงานนี้ไม่ต้องแก้ ตราบใดที่ค่ายังลงที่ LC3

2

Segment ที่เปลี่ยนชื่อ + Layout ทั้ง 8

การเปลี่ยนชื่อ segment ดูเล็ก แต่กระทบทุก config ที่อ้างชื่อเดิม

Segment code — ECC → S/4HANA

#ECC (เดิม)S/4HANA (ใหม่)ความหมาย
1CIT_RCCIT_THCorporate Income Tax — ธุรกิจปกติในไทย
2PITA1PITA1_THPetroleum Income Tax Act — ระบบสัมปทาน (ชุดที่ 1)
3PITA3PITA3_THPITA ชุดที่ 3
4PITA4PSC_THเปลี่ยนความหมายชัดเจนขึ้น — Production Sharing Contract
5MTJDAMTJDAMalaysia–Thailand Joint Development Area (ไม่เปลี่ยน)
ทำไม PITA4 → PSC_TH ถึงสำคัญกว่าที่คิด: ชื่อเดิมสื่อว่าเป็น “PITA ตัวที่ 4” แต่จริง ๆ เป็น ระบบภาษีคนละแบบ (แบ่งปันผลผลิต ไม่ใช่สัมปทาน) การเปลี่ยนชื่อทำให้ คนอ่านรายงานเข้าใจถูกทันที และสอดคล้องกับ segment ต่างประเทศที่ใช้ PSC_* เหมือนกัน (ดู TAX-RPT-4 — PSC_DZ, PSC_MM, PSC_VN, PSC_OM, PSC_MY)

Report layout ทั้งหมดใน S/4HANA

#ECCS/4HANACompany code ตัวอย่าง
1CIT_RCCIT_THTH01 Client · XB01 (สาขาต่างประเทศ)
2PITA1PITA1_TH—
3PITA3PITA3_TH—
4PITA4PSC_TH—
5IBC-SVCSIBC-SVCS1013 Client SERVICES
6IHQIBC-TC (เปลี่ยน)1086 Client TC
7—BOI (ใหม่)1126 FST
8MTJDAMTJDA—

IHQ (International Headquarters) เป็นสิทธิประโยชน์ทางภาษีรุ่นเก่าที่ถูกยกเลิก และแทนที่ด้วย IBC (International Business Center) — จึงต้องเปลี่ยนทั้งชื่อ layout, ชื่อตาราง และ checkbox บนหน้าจอ

3

ตาราง custom 13 ตัว — อะไรเปลี่ยน อะไรไม่เปลี่ยน

ตารางชุดนี้คือ “สมอง” ของรายงาน · ถูกใช้ร่วมกับ ZTAXA_R06/038/039 และ interface ไป BI

Tableหน้าที่Delta ใน S/4HANAField type
ZTAXA_T05Node masterไม่เปลี่ยนโครงสร้าง (ข้อมูล node เปลี่ยนได้)—
ZTAXA_T06Define node + descriptionเพิ่ม Proportion/Fixed และ Fixed RateCHAR 1 · CHAR 5
ZTAXA_T01GL account mappingเพิ่ม Valid From / Valid ToDATS 8
ZTAXA_T07Define report layoutเพิ่ม Valid From / Valid To / Proportion-Fixed + layout BOI + layout IBCTCDATS 8 · DATS 8 · CHAR 1
ZTAXA_T03Upload data (flat file)เพิ่ม RLDNR (Ledger) · check table = FINSC_LD_CMPCHAR 2
ZTAXA_T08Exclude asset classรวม 029+030+031+032 เป็นตารางเดียว · เพิ่ม Segment (custom) + Include/ExcludeCHAR 10 · CHAR 1 · CHAR 1
ZTAXA_T14(เดิม: exclude asset class PITA1/PITA3)ยุบเข้า T029—
ZTAXA_T15(เดิม: exclude asset class MTJDA)ยุบเข้า T029—
ZTAXA_T16(เดิม: asset class Pre-OP)ยุบเข้า T029—
ZTAXA_T11Tax rate for tax filingไม่เปลี่ยน—
ZTAXA_T04Trading partner ต่อ tax rate (IBC-TC)เพิ่ม Valid From / Valid To · เปลี่ยนชื่อ field Partner PC → Trading PartnerDATS 8
ZTAXA_T02Company code สำหรับ IBC/BOIโครงสร้างไม่เปลี่ยน · เปลี่ยนชื่อตาราง IHQ → IBC/BOI—
ZTAXA_T10IBC tax rate + trading partner จาก customersโครงสร้างไม่เปลี่ยน · เปลี่ยนชื่อ IHQ → IBC—

3 delta ที่ต้องเข้าใจ “ทำไม” ไม่ใช่แค่ “อะไร”

ก) Valid From / Valid To — ทำไมต้องมี

รายงานภาษีต้องรันย้อนหลังได้ (ตรวจสอบ/แก้ไขแบบยื่นเก่า) ถ้า mapping หรือ layout เปลี่ยนกลางทาง การรันปีเก่าจะได้ผลลัพธ์ตาม config ปัจจุบัน = ผิด Valid From/To ทำให้โปรแกรม เลือก config ที่ใช้อยู่ ณ ปีที่รายงาน — FD ระบุว่า “Report should display same data as per the reporting year … with historical values and layout”

ข) GL account prefix A/B/C — เคล็ดลับ *999999999

ผังบัญชี S/4HANA ของ Client ขึ้นต้นด้วย A, B หรือ C (เช่น A999X042, B_PC07, C_PC34) ถ้า map ทีละตัวอักษรจะได้ 3 แถวต่อ 1 บัญชี → บวม FD จึงกำหนดให้ใช้ *999999999 — ดอกจันแทนตัวอักษรนำหน้า เพื่อ “รวมยอดของทั้ง 3 ตัวในแถวเดียว”

ตัวอย่าง: ต้องการยอดรวมของ A999X042 + B_PC07 + C_PC34 maintain ใน ZTAXA_T01 เป็น *999999999 (1 แถว แทน 3 แถว)

ค) RLDNR ใน upload table — ทำไมเพิ่งมามี

ECC มี ledger เดียวในบริบทนี้ แต่ S/4HANA มี หลาย ledger (0L, T1 …) รายการปรับปรุงที่อัปโหลดจึงต้องระบุว่า “ปรับที่ ledger ไหน” check table FINSC_LD_CMP คือ ตารางกำหนด ledger ต่อ company code → กันไม่ให้ใส่ ledger ที่บริษัทนั้นไม่มี

ผลกระทบข้ามระบบที่ FD เตือนไว้: การเปลี่ยนโครงสร้างตารางชุดนี้กระทบ (ก) Annual Tax Report (P2) และ (ข) Interface ส่งข้อมูลไป BI (ZTAXA_I01) → เวลาแก้ตารางต้องแจ้ง 2 ทีมนี้เสมอ · นี่คือเหตุผลที่ FD ลงตารางว่าตารางไหนถูกใช้โดยโปรแกรมใดบ้าง
4

Selection screen — delta ทุกช่อง

หน้าจอ TO-BE แบ่ง 4 block: General Selection (Main) · Display Report · General Selection (Branch) · Display Currency

FieldDeltaDefaultValidation / หมายเหตุ
Company code (Main)เพิ่ม multiple selection—ใส่หลาย company code ได้พร้อมกัน
Reporting Year / Periodไม่เปลี่ยน——
Profit centerไม่เปลี่ยน——
Recovery Indicatorใหม่Blankจาก T8JJ-RECID · validate คู่กับ BUKRS
Exclude profit center O*ถูกลบออก—S/4 ต้องรวม profit center ที่ขึ้นต้นด้วย O ด้วย
Depreciation Area (Main)เปลี่ยน default32แก้ไขได้ (editable)
Ledger (Main)เปลี่ยน defaultT1แก้ไขได้
Segment (Main)ไม่เปลี่ยน——
BOI (checkbox)ใหม่ — มาแทน IHQBlankvalidate กับ ZTAXA_T02 — ถ้า company code ผูก BOI อยู่ต้องติ๊ก มิฉะนั้น error “please select BOI checkbox”
IBC (checkbox)ไม่เปลี่ยนโครง · เพิ่ม validation—ติ๊กแต่ไม่มีใน T035 → error “Please do not select IBC” · มีใน T035 แต่ไม่ติ๊ก → error “Please select IBC”
Company code (Branch)ใหม่Noneoptional · multiple · ไม่มี validation กับ main · ถ้า main ใส่หลายตัว → field นี้ถูก grey out
Profit Center (Branch)ใหม่Nonemultiple selection
Recovery Indicator (Branch)ใหม่Nonevalidate T8JJ คู่กับ branch company code
Depreciation area (Branch)ใหม่02default เมื่อใส่ branch company code · editable
Ledger (Branch)ใหม่0Ldefault เมื่อใส่ branch company code · editable
Segment (Branch)ใหม่Noneใช้เมื่อใส่ branch เท่านั้น
Display currencyไม่เปลี่ยนLC2radio LC1 / LC2 / LC3 · เปลี่ยนได้
Default 4 ตัวที่ต้องท่อง (ถูกถามบ่อยใน KT)
  • Main → Depreciation area 32 · Ledger T1 (มุมมองภาษี)
  • Branch → Depreciation area 02 · Ledger 0L (มุมมองบัญชีมาตรฐาน)
  • สกุลเงินแสดงผล → LC2
  • ต้องมี option รัน background เพราะข้อมูลใหญ่
⚠ Authorization ที่ FD สั่งไว้ตรง ๆ: “Must add authorization to company code XB01 Client (overseas branch) which is a branch of registered company in Thailand.” → XB01 อยู่ที่แอลจีเรีย แต่ทางภาษีเป็นสาขาของบริษัทไทย จึงต้องรวมยอดในรายงานไทย (TC-004) นี่คือเหตุผลที่ต้องมี block “Branch” ทั้งชุด
5

LC1 / LC2 / LC3 — ดึงจาก field ไหนของ ACDOCA

ECC ใช้แค่ LC2 · S/4HANA เพิ่ม LC3 เข้ามา

CurrencyTableAmount fieldCurrency fieldความหมาย
LC1ACDOCAHSLRHCURCompany code currency (สกุลของบริษัท)
LC2ACDOCAKSLRKCURGlobal currency (สกุลกลุ่ม)
LC3ACDOCAOSLROCURFreely defined currency 1 (สกุลอิสระ — ใช้เก็บค่าที่ตีราคาใหม่)

ลำดับการทำงาน

  1. รับ parameter จากหน้าจอ: company code, reporting year, period, profit center, recovery indicator, depreciation area, ledger, segment, LC1/2/3
  2. ส่งค่าทั้งหมดเข้า ACDOCA
  3. หา เลขบัญชี RACCT จาก mapping table ZTAXA_T01 ผ่าน item type ใน layout
  4. ดึงยอดตามคู่ field ของสกุลที่เลือก (HSL/RHCUR · KSL/RKCUR · OSL/ROCUR)
วิธีจำ 3 คู่นี้: HSL = Home (บริษัท) · KSL = Konzern (กลุ่ม/global) · OSL = Other (freely defined) · ส่วนสกุลเงินคือ R + ตัวอักษรเดิม + CUR → เป็นชุดเดียวกับที่ TAX-RPT-4 ใช้ ไม่ต้องจำใหม่
6

Manual adjustment ที่ย้ายมาดึงจากระบบ (5 รายการ)

เจตนา: “Client wants to minimize the manual data which comes from uploading flat files”

#Item typeสูตรใช้กับ layout
1LOSS CARRIED FORWARDดึงจากตารางของ TAX-RPT-5 (ZTAXB_T01) แทนอัปโหลดทุก layout
2UNREALIZED GAIN/LOSS ON FINANCIAL DERIVATIVES ผ่าน OCIA490X036 + A490X037 + A490X038 · กลับเครื่องหมายCIT_TH · PITA1_TH · PITA3_TH · PSC_TH
3ACCRUED INTEREST FROM FINANCIAL DERIVATIVESA460X032 + A560X041 · กลับเครื่องหมายCIT_TH · PITA1_TH · PITA3_TH · PSC_TH
4ADJUST WRITE-OFF FROM IDCA520X040 · กลับเครื่องหมายPITA1_TH · PITA3_TH · PSC_TH
5RETIREMENT RESERVE — COVENTURERS / JCEmovement ของ A254X027 = ยอดต้นงวด − ยอดปลายงวดPITA1_TH · PITA3_TH · PSC_TH

สูตรกลางที่ใช้กับ “ทุก layout”

ANNUAL (PROFIT)/LOSS AFTER LCF = ANNUAL (PROFIT)/LOSS − ALLOWANCES − Loss carried forward (ดึงจาก custom table ZTAXB_T01) − Loss carried forward adjustment (ปรับด้วย flat file) ใช้กับ: CIT_TH · PITA1_TH · PITA3_TH · PSC_TH · MTJDA · IBCSVCS · IBC-TC · BOI
ปีก่อน
ANNUAL (P/L) AFTER LCF
→ ถ้าเป็น ยอดเดบิต = ขาดทุน
เก็บลง ZTAXB_T01
→ ปีนี้
โผล่เป็น “Loss carried forward”
⚠ “กลับเครื่องหมาย (reverse sign)” คืออะไร และทำไมต้องทำ: ยอดใน GL ใช้ convention เดบิต/เครดิตของบัญชี ส่วนรายงานภาษีใช้ convention “บวก = เพิ่มกำไรทางภาษี” ซึ่งอาจตรงข้ามกัน ถ้าลืมกลับเครื่องหมาย → กำไรทางภาษีจะผิดทิศ และภาษีที่คำนวณได้จะผิดทั้งก้อน ให้เช็คทุกครั้งว่าบรรทัดนั้นระบุ reverse sign หรือไม่ — 3 ใน 5 รายการข้างบนระบุไว้ชัด
ข้อสังเกตเชิงวิเคราะห์: รายการที่ 4 และ 5 ใช้กับ PITA1_TH / PITA3_TH / PSC_TH แต่ ไม่ใช้กับ CIT_TH — เพราะ IDC (Intangible Drilling Cost) และ retirement reserve เป็นเรื่องของ ธุรกิจปิโตรเลียมโดยเฉพาะ ไม่มีในบริษัททั่วไป · การรู้ว่ารายการไหนใช้กับ layout ไหน ทำให้คุณตอบได้ทันทีว่า “ทำไมบรรทัดนี้ไม่โผล่ในรายงานของบริษัท A”
7

IBCSVCS — company code 1013 (Client SERVICES)

การเปลี่ยน 2 รายการจาก “proportion” เป็น “fixed rate”

หลักการพื้นฐานของ IBC

ข้อยกเว้น 2 รายการที่ FD สั่งให้ทำ “fixed”

Item typeNodeItem type codeเปลี่ยนเป็น
EXPENSE POOL COST → “EXPENSES SPECIFIC 20%”HGL4HG6Fixed 20% — ลงคอลัมน์ 20% ทั้งก้อน ไม่แบ่งสัดส่วน
ACTUAL PAYMENT FOR PENSION FUNDTCL1TG21Fixed 3% — ย้ายจาก 20% มา 3% ทั้งก้อน

กลไก: field “Proportion/Fixed” + “Fixed Rate”

ZTAXA_T06 / ZTAXA_T07 → field Proportion/Fixed ค่า F = Fixed rate → ต้องกรอก Fixed Rate ด้วย (เช่น 20% / 3%) ค่า P = Proportion → คำนวณตามสัดส่วน ค่า Blank = ใช้กับ layout อื่น (MTJDA / CIT / PITA) ตัวอย่างแถวจริง: Node = TCL1 · Type = TG21 · Description = ACTUAL PAYMENT FOR PENSION FUND Order = 1 · Proportion/Fixed = F · Fixed Rate = 3%

Logic การดึงยอด

  1. อ่าน G/L accounts ที่ผูกกับ item type จาก ZTAXA_T01
  2. ส่ง G/L account เข้า ACDOCA ดึงยอด
  3. แสดง ยอดรวมของ item type และ ยอดแยกราย G/L account (กรณีมีหลายบัญชีผูกกับ item type เดียว)
  4. ลงคอลัมน์ตาม fixed rate ที่กำหนด (ไม่ผ่านกติกา intercompany)
Design ที่ควรชม: แทนที่จะ hard-code “20%” ลงในโค้ด FD เลือกใส่ไว้ใน ตาราง config (Proportion/Fixed + Fixed Rate) → ถ้ากฎหมายเปลี่ยนอัตรา แค่แก้ตาราง ไม่ต้องแก้โปรแกรม และ FD ยังเผื่อไว้ว่า “ในอนาคตเมื่อสิทธิ IBC หมดอายุ ให้ปรับ validity ใน ZTAXA_T02 แล้ว output กลับไปใช้ layout CIT_TH ปกติ”
8

IBCTC — company code 1086 (Client TC · Treasury Centre)

ธุรกิจการเงิน — รายได้ 4 ประเภท และการปันสัดส่วน 3% / 20%

รายได้ของ Client TC

Layout เปลี่ยน — คอลัมน์ที่หายและที่เพิ่ม

คอลัมน์ECCS/4HANAความหมาย
0%มีลบออกไม่ใช้แล้ว
10%มีลบออกไม่ใช้แล้ว
A — IBC 3%มีมีธุรกรรม intercompany · ระบุด้วย R001 ใน ZTAXA_T04 ผ่าน trading partner
B — Non-IBC 20%มีมีธุรกรรม ไม่ใช่ intercompany
C — Total—เพิ่มใหม่C = A + B
D — ยอดต่อ Profit Centerมีมี (ขยายได้หลายคอลัมน์)ยอด G/L จาก ZTAXA_T01 ราย profit center
Check differenceมีมี= D − C · ควรเป็น 0
คอลัมน์ “Check difference” คือ built-in control: D คือยอดจริงจาก GL · C คือยอดที่ถูกปันเข้า 3%/20% แล้ว ถ้า D − C ≠ 0 แปลว่า มีบางรายการปันไม่เข้าคอลัมน์ไหนเลย (เช่น trading partner ไม่มีใน ZTAXA_T04) → เป็นจุดแรกที่ต้องดูตอนกระทบยอด ไม่ต้องไล่ทีละบรรทัด

Logic การจัดคอลัมน์ (จาก ACDOCA line-item)

  1. หา G/L account ที่ผูกกับ item type จาก ZTAXA_T01
  2. ดึงยอดจาก ACDOCA ตาม selection (company code, fiscal year, ledger, period …)
  3. อ่าน trading partner = VBUND ที่ระดับ line item
  4. ตรวจกับ ZTAXA_T04 → intercompany ลง 3% · ไม่ใช่ ลง 20% · แยกตาม profit center ด้วย

สูตรสำคัญ (node/type formula)

HCL4 (Total Revenue) = (HG3 หรือ HG3.1) + HG3.2 + HG3.4 + HG3.5 ดอกเบี้ยรับ + ค่าบริการ + กำไรเงินลงทุน + กำไรอนุพันธ์ HUP = (HG3 หรือ HG3.1) + HG3.2 + HG3.4 + HG3.5 + PU8 HCL5 (Revenue adjustment uploaded) = HCL4 + HUP HC4 (Revenue After Adjustment) = HG3 + PU8 HCL0 / HC3 = % Portion of Interest Income คอลัมน์ 3% = ดอกเบี้ยรับในคอลัมน์ 3% ÷ ดอกเบี้ยรับทั้งหมด คอลัมน์ 20% = ดอกเบี้ยรับในคอลัมน์ 20% ÷ ดอกเบี้ยรับทั้งหมด HCL3 / HC6 = % Proportion of Revenue คอลัมน์ 3% = Total Revenue ในคอลัมน์ 3% ÷ Total Revenue ทั้งหมด คอลัมน์ 20% = Total Revenue ในคอลัมน์ 20% ÷ Total Revenue ทั้งหมด

รายการที่ปันตามสัดส่วน (proportion) แทนการดูที่ trading partner

Item typeปันตามอะไร
Admin employee expenses · Admin selling expenses% Proportion of Revenue
Interest Expense% Portion of Interest Income (ไม่ใช่ revenue)
Others% Ratio of Revenue
Expense แต่ละบรรทัดยอดในบรรทัด × % Proportion of revenue ของคอลัมน์นั้น

กำไร/ขาดทุนจากเงินลงทุนและอนุพันธ์ — ดึงจากด้านไหน

Item typeดึงจากด้านField
Gain from Trading investmentเครดิตACDOCA-SHKZG = 'H'
Gain from Derivative instrumentเครดิตSHKZG = 'H'
Loss from Trading investmentเดบิตSHKZG = 'S'
⚠ ทำไมต้องแยก H / S แทนที่จะใช้เครื่องหมายของยอด: บัญชีเดียวกันอาจมีทั้งบรรทัดกำไรและขาดทุนปนกัน — ถ้าเอายอดสุทธิ จะได้ “กำไรสุทธิ” ซึ่ง ไม่ใช่สิ่งที่กฎหมายภาษีต้องการ (กำไรกับขาดทุนอาจถูกปฏิบัติต่างกัน) จึงต้องแยกอ่านด้วย SHKZG ที่ระดับ line item → เป็นเหตุผลว่าทำไมรายงานนี้ต้องอ่าน ACDOCA ระดับบรรทัด ไม่ใช่ยอดสรุป
9

BOI — layout ใหม่ · company code 1126 (FST)

สิทธิประโยชน์ BOI แยกด้วย profit center · มีเพดาน 2% ที่ต้องคำนวณเอง

โครงสร้าง profit center ที่ใช้แยก BOI / Non-BOI

กลุ่มตัวอย่าง Profit Center
CorporateB_PC01
BOI 1B_PC02
BOI 2B_PC04
Non-BOI 1B_PC03
Non-BOI 2B_PC05

ถ้ามี BOI/Non-BOI ใหม่ เลข หลักที่ 8 และ 9 จะเดินต่อ — สังเกตว่า หลักสุดท้าย 1 = BOI · 2 = Non-BOI

โครงคอลัมน์ของรายงาน BOI

ฝั่งคอลัมน์
TB (Trial Balance — ตามที่ระบบบันทึกจริง)Profit Ctr-Corp · Profit Ctr-BOI 1 · Profit Ctr-BOI 2 · Profit Ctr-Non BOI 1 · Profit Ctr-Non BOI 2 · Total
Tax closing (หลังปันส่วนตามกติกาภาษี)BOI 1 · BOI 2 · Non BOI 1 · Non BOI 2 · Total per Tax Closing
แนวคิดหลักของ layout นี้: ฝั่งซ้าย (TB) = ความจริงทางบัญชี · ฝั่งขวา (Tax closing) = ความจริงทางภาษีหลังปันส่วน — สองฝั่งไม่จำเป็นต้องเท่ากันในระดับคอลัมน์ แต่ ยอดรวมต้องเท่ากัน · นี่คือ control ที่ผู้ใช้ต้องดูทุกเดือน

กติกา 6 ข้อ

  1. Direct Income แยก BOI/Non-BOI ตาม profit center · % สัดส่วนคำนวณจาก Direct Income เท่านั้น — ไม่นับ other income, FX gain/loss, interest income · Total Revenue = Total Direct income (TB) + Total others income (TB)
  2. ดอกเบี้ยรับจากเงินกู้ intercompany / เงินฝากประจำ → เข้า Non-BOI เสมอ ที่ฝั่ง Tax closing · ยอดที่อยู่ใต้ Corporate ให้ยกไปรวมที่ Non-BOI · Total (Tax closing) = Corporate + Non-BOI จาก TB
  3. ดอกเบี้ยรับจากเงินฝากออมทรัพย์ มีเพดาน 2% ของ Direct Income ของ BOI แต่ละตัว (ดูตัวอย่างคำนวณข้างล่าง)
  4. FX Gain/Loss: ถ้า Non-BOI ไม่มีรายได้ (Direct income = 0 ตาม TB) → ผลขาดทุน (เดบิต) ไปลง BOI · ผลกำไร (เครดิต) ไปลง Non-BOI · ถ้า Non-BOI มีรายได้ → ปันตามสัดส่วนปกติ
  5. Operating cost/expenses ของ corporate profit center → ปันระหว่าง BOI/Non-BOI ตามสัดส่วนรายได้ในข้อ 1
  6. Expense adjustments → มาจาก flat file ตาม tax rate ที่ระบุในไฟล์
⚠ ข้อ 4 คือกติกาที่ “ดูไม่สมมาตร” และคนมักคิดว่าเป็นบั๊ก: ขาดทุนไป BOI แต่กำไรไป Non-BOI — เพราะเป็นหลักภาษีที่อนุรักษ์นิยม (กำไรควรถูกเก็บภาษี = ไปฝั่งที่เสียภาษี · ขาดทุนไม่ควรใช้ลดภาษี = ไปฝั่งที่ยกเว้นภาษีอยู่แล้ว) ถ้าไม่รู้ที่มา จะรายงานเป็น defect ผิด ๆ

ตัวอย่างคำนวณเพดาน 2% (ตัวเลขจาก FD)

ขั้นที่ 1 — Direct Income ตาม TB

Profit centerDirect income% ของ Total DIเพดาน 2%
Corporate0——
BOI 11,000,00027.027%20,000
BOI 22,000,00054.054%40,000
Non-BOI 1200,0005.4054%—
Non-BOI 2500,00013.5135%—
Total DI3,700,000100%60,000

ขั้นที่ 2 — ดอกเบี้ยรับออมทรัพย์ตาม TB และการปันของ Corporate

Profit centerตาม TBได้รับปันจาก Corporate (30,000)
Corporate30,000→ กระจายออก
BOI 125,00027.027% × 30,000 = 8,108.1
BOI 230,00054.054% × 30,000 = 16,216.2
Non-BOI 15,0005.4054% × 30,000 = 1,621.62
Non-BOI 27,00013.5135% × 30,000 = 4,054.05
รวม97,00030,000

ขั้นที่ 3 — ใส่เพดาน แล้วโยนส่วนเกินไป Non-BOI

BOI 1: ควรได้ 25,000 + 8,108.1 = 33,108.1 แต่เพดาน = 20,000 → Tax closing BOI 1 = 20,000 → ส่วนเกิน = 5,000 (จาก BOI1) + 8,108.1 (จาก corporate) = 13,108.1 Non-BOI 1 = 5,000 (TB) + 1,621.62 (ปัน) + 5,000 + 8,108.1 (ส่วนเกินจาก BOI1) = 19,729.72 BOI 2: ควรได้ 30,000 + 16,216.2 = 46,216.2 แต่เพดาน = 40,000 → Tax closing BOI 2 = 40,000 → ส่วนเกิน = 6,216.2 (จาก corporate) Non-BOI 2 = 7,000 (TB) + 4,054.05 (ปัน) + 6,216.2 (ส่วนเกินจาก BOI2) = 17,270.25 ตรวจยอดรวม: 20,000 + 40,000 + 19,729.72 + 17,270.25 = 97,000 ✔ เท่ากับ TB
3 บทเรียนจากตัวอย่างนี้
  • สัดส่วนคำนวณจาก Direct Income แต่ เอาไปปันดอกเบี้ยรับ — คนละฐาน อย่าสับสน
  • เพดานคิดจาก DI ของ BOI นั้น ๆ ไม่ใช่จากยอดดอกเบี้ยที่ได้รับ (2% × 1,000,000 = 20,000)
  • ยอดรวมต้องไม่เปลี่ยน — ส่วนเกินไม่ได้หายไป แต่ถูกโยนไป Non-BOI คู่ของมัน (BOI1→Non-BOI1, BOI2→Non-BOI2)
10

Key Test Conditions — TC-001 ถึง TC-015

Precondition ของทั้งชุด: “Ensure that the necessary non-SAP data has been uploaded prior to executing this report”

Test IDConditionExpected result
TC-001เลือก segment CIT_TH / PITA1_TH / PITA3_TH / PSC_TH / MTJDAแสดง layout ตาม segment ที่เลือก
TC-002Layout IBCSVCS ของ 1013ค่าออกตาม calculation logic ใหม่ (fixed 20% / 3%)
TC-003Layout IBCTC ของ 1086แสดงคอลัมน์ 3% และ 20% เท่านั้น — 0% และ 10% ต้องหายไป
TC-004เลือกหลาย company code — XB01 (สาขาต่างประเทศ) + TH01 Client segment CIT_THแสดงข้อมูลรวมของทั้งสอง
TC-005ใส่เงื่อนไขบน selection screenรายงานตรงกับเงื่อนไขที่ใส่
TC-006Branch company codeมี field สำหรับ branch ให้กรอกครบ
TC-007BOI checkboxมี checkbox บนหน้าจอ · ดึง layout BOI ให้ company code 1126
TC-008BOI Layoutรายงานแสดง layout BOI ถูกต้อง
TC-009BOI report logicค่าฝั่ง Tax closing (BOI / Non-BOI) คำนวณถูก
TC-010ZTAXA_T10 logiccost center ที่ไม่ได้ระบุในตาราง → ใช้อัตรา default (ปัจจุบัน 3%) · ที่ระบุไว้ → ใช้อัตราในตาราง
TC-011Manual adjustment ที่ดึงจากระบบค่าถูกดึงจาก GL ตามสูตร ไม่ต้องอัปโหลด
TC-012Loss carried forwardดึงยอดปีก่อนจาก custom table มาแสดงเป็น LCF ของปีปัจจุบัน
TC-013Performanceข้อมูลใหญ่ — ต้องเร็ว และมี option รัน background
TC-014Proportion / Fixed Rate logic ของ IBCค่าออกตามที่ maintain ใน ZTAXA_T06 และ ZTAXA_T07
TC-015Validation ทั้งหมดทุก validation ทำงาน (BOI/IBC checkbox, recovery indicator ฯลฯ)
11

Expert notes

1) “Retrofit with change” + “delta document” = ต้องอ่าน 2 เอกสาร

FD นี้เขียนเฉพาะสิ่งที่เปลี่ยน — logic เดิมทั้งหมดอยู่ใน FS ZTAXA_R05 Current Tax V0.1.docx ของ ECC เวลาทำ FUT ห้ามเทสต์แค่ delta เพราะ regression มักเกิดที่ส่วนที่ “ไม่ได้เปลี่ยน” แต่ถูกกระทบจากการยุบตาราง T029–T032 และการเพิ่ม Valid From/To

2) ความสัมพันธ์ 3 objects ในชุด Current Tax

TAX-RPT-3
Current Tax · ไทย
↘ ZTAXB_T01
LCF store (TAX-RPT-5)
↙ TAX-RPT-4
Current Tax · ต่างประเทศ

3) การยุบตาราง T029–T032 กระทบอะไร

FD เตือนไว้ตรง ๆ ว่า “As we combine these tables, logic in the backend also need to be adjusted accordingly” กติกาใหม่คือ: asset class ที่เหมือนกันทั้ง PITA1_TH/PITA3_TH/PSC_TH ให้ maintain ครั้งเดียวใต้ PITA_TH (segment รวมที่เก็บใน constants table) ส่วน asset class ที่เป็นของ segment ใด segment หนึ่งโดยเฉพาะ ให้แยกบรรทัด

4) ทำไมต้องเลิก “Exclude profit center O*”

ใน ECC profit center ที่ขึ้นต้นด้วย O ถูกกันออกจากรายงานภาษีโดยอัตโนมัติ แต่ใน S/4HANA ผังบัญชี/ผัง profit center ถูกออกแบบใหม่ ทำให้ prefix นั้นไม่ได้แปลว่า “ไม่เกี่ยวกับภาษี” อีกต่อไป → การเก็บ validation เดิมไว้จะทำให้ ยอดหาย อย่างเงียบ ๆ นี่คือ delta ที่อันตรายที่สุดในหน้าจอ เพราะไม่มี error ให้เห็น

5) Checklist กระทบยอดรายเดือน (ใช้ได้จริง)

5 จุดที่ต้องดูก่อนส่งตัวเลขให้ทีมภาษี

(1) node CL ทุกตัวมีต้นทางครบไหม (ไม่มีศูนย์ที่ไม่ควรเป็นศูนย์) · (2) IBCTC — Check difference = 0 ทุกบรรทัด · (3) BOI — ยอดรวมฝั่ง TB = ยอดรวมฝั่ง Tax closing · (4) LCF ที่ดึงมาตรงกับที่ RPT-5 แสดง · (5) manual adjustment 5 รายการ — เครื่องหมายถูกทิศไหม
Self-check

ทวนความเข้าใจ

1. Segment PITA4 ใน ECC กลายเป็นอะไรใน S/4HANA และทำไม?

กลายเป็น PSC_TH — เพราะจริง ๆ แล้วเป็นระบบ Production Sharing Contract ไม่ใช่ PITA ตัวที่ 4 · ชื่อใหม่สอดคล้องกับ segment ต่างประเทศ (PSC_DZ, PSC_MM, PSC_VN, PSC_OM, PSC_MY)

2. เขียนสูตร ANNUAL (PROFIT)/LOSS AFTER LCF

= ANNUAL (PROFIT)/LOSS − ALLOWANCES − Loss carried forward (จาก custom table) − Loss carried forward adjustment · ใช้กับทุก layout: CIT_TH, PITA1_TH, PITA3_TH, PSC_TH, MTJDA, IBCSVCS, IBC-TC, BOI

3. Default ของ Depreciation area และ Ledger ต่างกันอย่างไรระหว่าง Main กับ Branch?

Main: Dep. area 32 · Ledger T1 (มุมมองภาษี) · Branch: Dep. area 02 · Ledger 0L (มุมมองบัญชีมาตรฐาน) ทั้งคู่ editable · เหตุผลคือสาขาถูกบันทึกในระบบตามมาตรฐานบัญชี แล้วค่อยนำมารวมทางภาษี

4. IBCTC ตัดสินว่ารายการไหนเป็น 3% จากอะไร?

จาก trading partner — field VBUND ใน ACDOCA ที่ระดับ line item แล้ว validate กับ ZTAXA_T04 (intercompany = R001) intercompany → คอลัมน์ 3% · ไม่ใช่ → คอลัมน์ 20%

5. BOI — เพดานดอกเบี้ยออมทรัพย์คำนวณจากอะไร และส่วนเกินไปไหน?

เพดาน = 2% × Direct Income ของ BOI นั้น (ตาม TB) · ส่วนที่เกินเพดาน ไม่หายไป แต่ถูกโยนไป Non-BOI คู่ของมัน (BOI1 → Non-BOI1 · BOI2 → Non-BOI2) ยอดรวมจึงเท่าเดิมเสมอ

6. ทำไม ZTAXA_T01 ต้องมี Valid From / Valid To?

เพื่อให้รันย้อนหลังได้ถูกต้อง — เมื่อ GL mapping เปลี่ยน การรันปีเก่าต้องใช้ mapping ของปีนั้น ไม่ใช่ mapping ปัจจุบัน · FD ระบุว่า “report should display same data as per the reporting year with historical values and layout” (ZTAXA_T07 ก็มีเหตุผลเดียวกันสำหรับ layout)

7. *999999999 ใน GL mapping หมายความว่าอะไร?

ให้รวมยอดของ A999X042 + B_PC07 + C_PC34 ในแถวเดียว — ดอกจันแทนตัวอักษรนำหน้าของผังบัญชี S/4HANA เพื่อลดจำนวนแถวที่ต้อง maintain ลง 3 เท่า

8. รายงานนี้ส่งข้อมูลต่อให้ใครบ้าง?

(1) Annual Tax Report (P2 · ZTAXA_R07) · (2) BI Interface ผ่าน ZTAXA_I01 · (3) TAX-RPT-5 LCF ผ่านปุ่ม “Update table for LCF” → ZTAXB_T01 — เพราะแบบนี้การแก้โครงตารางจึงต้องแจ้งหลายทีม