@trajectonomics/tax 0.2.0-alpha.0 → 0.2.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -0
- package/dist/{clamp-Bse4u0H-.mjs → clamp-CdcDymBJ.mjs} +52 -13
- package/dist/clamp-CdcDymBJ.mjs.map +1 -0
- package/dist/{clamp-BKG7kjVf.cjs → clamp-DWYNU1V8.cjs} +57 -12
- package/dist/clamp-DWYNU1V8.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/th/index.cjs +1069 -1
- package/dist/th/index.cjs.map +1 -1
- package/dist/th/index.d.cts +415 -1
- package/dist/th/index.d.mts +415 -1
- package/dist/th/index.mjs +1062 -2
- package/dist/th/index.mjs.map +1 -1
- package/dist/us/index.cjs +1 -1
- package/dist/us/index.mjs +1 -1
- package/package.json +2 -1
- package/dist/clamp-BKG7kjVf.cjs.map +0 -1
- package/dist/clamp-Bse4u0H-.mjs.map +0 -1
package/dist/th/index.d.cts
CHANGED
|
@@ -464,6 +464,420 @@ interface ThTaxInput {
|
|
|
464
464
|
* @statute Thailand Revenue Code Sections 40, 42 bis, 47, 48(1)–(2).
|
|
465
465
|
*/
|
|
466
466
|
export declare function calculateThTax(input?: ThTaxInput): TaxResult<"THB", ThBreakdown>;
|
|
467
|
+
/**
|
|
468
|
+
* Tally bases sim-core's `tally` Measure reads.
|
|
469
|
+
*
|
|
470
|
+
* Purpose: Distinguishes income Flows from contribution Flows at the tally.
|
|
471
|
+
* Math: No arithmetic; a discriminator only.
|
|
472
|
+
* Units: Dimensionless.
|
|
473
|
+
* Throws: Nothing.
|
|
474
|
+
* @statute Thailand Revenue Code Sections 40(1)–(8) (gross) and 47 (funded).
|
|
475
|
+
*/
|
|
476
|
+
export declare const ThLevyTallyBasis: {
|
|
477
|
+
/** Sums income Flows. */
|
|
478
|
+
readonly Gross: "gross";
|
|
479
|
+
/** Sums contribution Flows. */
|
|
480
|
+
readonly Funded: "funded";
|
|
481
|
+
};
|
|
482
|
+
/**
|
|
483
|
+
* Union of {@link ThLevyTallyBasis} values.
|
|
484
|
+
*
|
|
485
|
+
* Purpose: Narrow type for the tally basis of an emitted Measure.
|
|
486
|
+
* Math: No arithmetic; a discriminator only.
|
|
487
|
+
* Units: Dimensionless.
|
|
488
|
+
* Throws: Nothing.
|
|
489
|
+
* @statute Thailand Revenue Code Sections 40(1)–(8) (gross) and 47 (funded).
|
|
490
|
+
*/
|
|
491
|
+
export type ThLevyTallyBasis = (typeof ThLevyTallyBasis)[keyof typeof ThLevyTallyBasis];
|
|
492
|
+
/**
|
|
493
|
+
* Rounding modes sim-core's `scale` Measure accepts.
|
|
494
|
+
*
|
|
495
|
+
* Purpose: Names the three rounding policies embedded in emitted Measures.
|
|
496
|
+
* Math: `Floor` rounds down, `Ceil` up, and `HalfUp` sends ties away from zero.
|
|
497
|
+
* Units: Dimensionless.
|
|
498
|
+
* Throws: Nothing.
|
|
499
|
+
* @statute Thailand Revenue Code Sections 47 bis, 48(1), 48(2).
|
|
500
|
+
*/
|
|
501
|
+
export declare const ThLevyRounding: {
|
|
502
|
+
readonly Floor: "floor";
|
|
503
|
+
readonly HalfUp: "halfUp";
|
|
504
|
+
readonly Ceil: "ceil";
|
|
505
|
+
};
|
|
506
|
+
/**
|
|
507
|
+
* Union of {@link ThLevyRounding} values.
|
|
508
|
+
*
|
|
509
|
+
* Purpose: Narrow type for a `scale` Measure's rounding policy.
|
|
510
|
+
* Math: No arithmetic; names `floor`, `ceil`, or ties-away-from-zero `halfUp`.
|
|
511
|
+
* Units: Dimensionless.
|
|
512
|
+
* Throws: Nothing.
|
|
513
|
+
* @statute Thailand Revenue Code Sections 47 bis, 48(1), 48(2).
|
|
514
|
+
*/
|
|
515
|
+
export type ThLevyRounding = (typeof ThLevyRounding)[keyof typeof ThLevyRounding];
|
|
516
|
+
/**
|
|
517
|
+
* Recurring calendar date without a year, as sim-core's `MonthDay`.
|
|
518
|
+
*
|
|
519
|
+
* Purpose: Fixes the Levy period and settlement dates at emit time.
|
|
520
|
+
* Math: No arithmetic; the date recurs every year and is never February 29.
|
|
521
|
+
* Units: Month number 1–12 and day number; not a timestamp.
|
|
522
|
+
* Throws: Nothing; sim-core's `check()` validates the pair.
|
|
523
|
+
* @statute Thailand Revenue Code Section 56 (annual return filing period).
|
|
524
|
+
*/
|
|
525
|
+
interface ThLevyMonthDay {
|
|
526
|
+
/** Month number, 1 to 12. */
|
|
527
|
+
readonly month: number;
|
|
528
|
+
/** Day number within the month. */
|
|
529
|
+
readonly day: number;
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* One node of the emitted rule graph, restricted to the operation set sim-core evaluates.
|
|
533
|
+
*
|
|
534
|
+
* Purpose: Closed union that makes any operation outside sim-core's set a type error.
|
|
535
|
+
* Math: `const`, `tally`, binary arithmetic, exact `scale`, and `pick` — nothing else.
|
|
536
|
+
* Units: `value` and Measure totals are integer satang; `num`/`den` are dimensionless.
|
|
537
|
+
* Throws: Nothing at construction; {@link ThLevyGraph.build} checks operands.
|
|
538
|
+
* @statute Thailand Revenue Code Sections 40, 42 bis, 47, 47 bis, 48(1)–(2).
|
|
539
|
+
*/
|
|
540
|
+
type ThLevyMeasure = {
|
|
541
|
+
readonly id: string;
|
|
542
|
+
readonly op: "const";
|
|
543
|
+
readonly value: number;
|
|
544
|
+
} | {
|
|
545
|
+
readonly id: string;
|
|
546
|
+
readonly op: "tally";
|
|
547
|
+
readonly label: string;
|
|
548
|
+
readonly basis: ThLevyTallyBasis;
|
|
549
|
+
} | {
|
|
550
|
+
readonly id: string;
|
|
551
|
+
readonly op: "add" | "sub" | "min" | "max";
|
|
552
|
+
readonly a: string;
|
|
553
|
+
readonly b: string;
|
|
554
|
+
} | {
|
|
555
|
+
readonly id: string;
|
|
556
|
+
readonly op: "scale";
|
|
557
|
+
readonly of: string;
|
|
558
|
+
readonly num: number;
|
|
559
|
+
readonly den: number;
|
|
560
|
+
readonly rounding: ThLevyRounding;
|
|
561
|
+
} | {
|
|
562
|
+
readonly id: string;
|
|
563
|
+
readonly op: "pick";
|
|
564
|
+
readonly a: string;
|
|
565
|
+
readonly b: string;
|
|
566
|
+
readonly then: string;
|
|
567
|
+
readonly else: string;
|
|
568
|
+
};
|
|
569
|
+
/**
|
|
570
|
+
* A Thailand Personal Income Tax rule set in sim-core's published `Levy` shape.
|
|
571
|
+
*
|
|
572
|
+
* Purpose: The caller hands this to sim-core, which evaluates it from Flow tallies without
|
|
573
|
+
* importing this package. The taxpayer profile, elections, and 2026 statutory parameters are
|
|
574
|
+
* frozen at emit time, so one Levy describes one taxpayer.
|
|
575
|
+
* Math: Every Measure is exact integer satang arithmetic over the closed sim-core operation set.
|
|
576
|
+
* Units: All monetary Measure values are integer satang (THB minor units).
|
|
577
|
+
* Throws: Nothing at construction; {@link ThLevyGraph.build} validates the graph.
|
|
578
|
+
* @statute Thailand Revenue Code Sections 40, 42 bis, 47, 47 bis, 48(1)–(2).
|
|
579
|
+
*/
|
|
580
|
+
interface ThLevy {
|
|
581
|
+
/** Stable Levy id echoed by sim-core's projection report. */
|
|
582
|
+
readonly id: string;
|
|
583
|
+
/** Calendar date on which each Settlement period starts. */
|
|
584
|
+
readonly period: ThLevyMonthDay;
|
|
585
|
+
/** First such date strictly after the period's last day. */
|
|
586
|
+
readonly settlement: ThLevyMonthDay;
|
|
587
|
+
/** Rule graph, in dependency-friendly emit order. */
|
|
588
|
+
readonly measures: readonly ThLevyMeasure[];
|
|
589
|
+
/** Id of the Measure holding the amount owed before Prepayment. */
|
|
590
|
+
readonly due: string;
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Fixed allowance amounts frozen into a TH 2026 Levy at emit time.
|
|
594
|
+
*
|
|
595
|
+
* Purpose: These allowances depend only on the taxpayer profile, so the emitter bakes them as
|
|
596
|
+
* fixed Measures. Contribution-driven allowances (RMF, SSF, PVD, GPF, NSF, pension life insurance,
|
|
597
|
+
* ThaiESG) are excluded on purpose: they arrive as `funded` Flow tallies instead.
|
|
598
|
+
* Math: Sums the calculator's family and insurance stages into one fixed Measure.
|
|
599
|
+
* Units: THB major units, except counts (children, parents, disabled persons).
|
|
600
|
+
* Throws: TaxValidationError at emit time for a negative or non-finite amount or an invalid count.
|
|
601
|
+
* @statute Thailand Revenue Code Section 47.
|
|
602
|
+
*/
|
|
603
|
+
type ThLevyAllowances = Pick<ThAllowancesInput, "personal" | "spouse" | "children" | "parents" | "disabledCareCount" | "socialSecurity" | "lifeInsurance" | "healthInsurance" | "parentHealthInsurance" | "spouseLifeInsurance" | "mortgageInterest" | "donation2x" | "donation1x">;
|
|
604
|
+
/**
|
|
605
|
+
* Expense election fixed for one electable income item at emit time.
|
|
606
|
+
*
|
|
607
|
+
* Purpose: Chooses the standard statutory percentage or an actual substantiated expense.
|
|
608
|
+
* Math: No arithmetic; selects which expense Measure graph is emitted.
|
|
609
|
+
* Units: `actualExpense` is THB major units.
|
|
610
|
+
* Throws: TaxValidationError at emit time if the actual expense is invalid.
|
|
611
|
+
* @statute Thailand Revenue Code Sections 42 bis, 42 ter, 43–46.
|
|
612
|
+
*/
|
|
613
|
+
interface ThLevyExpenseChoice {
|
|
614
|
+
/** Defaults to `"standard"`. */
|
|
615
|
+
readonly election?: ThExpenseElection | undefined;
|
|
616
|
+
/** Actual substantiated expense in THB; used only when `election` is `"actual"`. */
|
|
617
|
+
readonly actualExpense?: number | undefined;
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Expense elections frozen into the Levy, per Section 40 income item with a standard/actual choice.
|
|
621
|
+
*
|
|
622
|
+
* Purpose: Records which items use the standard statutory percentage and which use actuals.
|
|
623
|
+
* Math: No arithmetic; each choice selects an emitted Measure branch.
|
|
624
|
+
* Units: Actual expense amounts are THB major units.
|
|
625
|
+
* Throws: TaxValidationError at emit time if an actual expense is invalid.
|
|
626
|
+
* @statute Thailand Revenue Code Sections 42 bis, 42 ter, 43–46; Royal Decree No. 11.
|
|
627
|
+
*/
|
|
628
|
+
interface ThLevyExpenseElections {
|
|
629
|
+
/** Section 40(3) royalties and goodwill. */
|
|
630
|
+
readonly section40_3?: ThLevyExpenseChoice | undefined;
|
|
631
|
+
/** Section 40(5) rental income, per property class. */
|
|
632
|
+
readonly section40_5?: {
|
|
633
|
+
readonly building?: ThLevyExpenseChoice | undefined;
|
|
634
|
+
readonly agriculturalLand?: ThLevyExpenseChoice | undefined;
|
|
635
|
+
readonly nonAgriculturalLand?: ThLevyExpenseChoice | undefined;
|
|
636
|
+
readonly vehicles?: ThLevyExpenseChoice | undefined;
|
|
637
|
+
readonly other?: ThLevyExpenseChoice | undefined;
|
|
638
|
+
};
|
|
639
|
+
/** Section 40(6) liberal professions, per profession class. */
|
|
640
|
+
readonly section40_6?: {
|
|
641
|
+
readonly medical?: ThLevyExpenseChoice | undefined;
|
|
642
|
+
readonly law?: ThLevyExpenseChoice | undefined;
|
|
643
|
+
readonly engineering?: ThLevyExpenseChoice | undefined;
|
|
644
|
+
readonly architecture?: ThLevyExpenseChoice | undefined;
|
|
645
|
+
readonly accounting?: ThLevyExpenseChoice | undefined;
|
|
646
|
+
readonly fineArts?: ThLevyExpenseChoice | undefined;
|
|
647
|
+
readonly other?: ThLevyExpenseChoice | undefined;
|
|
648
|
+
};
|
|
649
|
+
/** Section 40(7) contracting with materials. */
|
|
650
|
+
readonly section40_7?: ThLevyExpenseChoice | undefined;
|
|
651
|
+
/** Section 40(8) business income, split by expense schedule. */
|
|
652
|
+
readonly section40_8?: {
|
|
653
|
+
readonly general?: ThLevyExpenseChoice | undefined;
|
|
654
|
+
readonly entertainer?: ThLevyExpenseChoice | undefined;
|
|
655
|
+
};
|
|
656
|
+
}
|
|
657
|
+
/**
|
|
658
|
+
* Section 40(4) elections frozen into the Levy. All sources default to `"include"`.
|
|
659
|
+
*
|
|
660
|
+
* Purpose: Fixes final withholding versus regular-bracket inclusion per source.
|
|
661
|
+
* Math: No arithmetic; each election selects the withholding a Measure applies.
|
|
662
|
+
* Units: `dividendCorpTaxRate` is a dimensionless ratio in [0, 1).
|
|
663
|
+
* Throws: TaxValidationError at emit time if the corporate rate is outside [0, 1).
|
|
664
|
+
* @statute Thailand Revenue Code Sections 40(4), 47 bis, 50(2)(g), 57 ter.
|
|
665
|
+
*/
|
|
666
|
+
interface ThLevySection40_4Elections {
|
|
667
|
+
/** Interest: final withholding versus regular brackets. */
|
|
668
|
+
readonly interest?: ThFinalWithholdingElection | undefined;
|
|
669
|
+
/** Dividends: final withholding versus regular brackets. */
|
|
670
|
+
readonly dividends?: ThFinalWithholdingElection | undefined;
|
|
671
|
+
/** Digital asset income: final withholding versus regular brackets. */
|
|
672
|
+
readonly digitalAssets?: ThFinalWithholdingElection | undefined;
|
|
673
|
+
/** Section 47 bis corporate rate for included dividends in [0, 1); omit for no credit. */
|
|
674
|
+
readonly dividendCorpTaxRate?: number | undefined;
|
|
675
|
+
}
|
|
676
|
+
/**
|
|
677
|
+
* Levy identity and Settlement period frozen at emit time.
|
|
678
|
+
*
|
|
679
|
+
* Purpose: Lets a caller name the Levy and override the default filing window.
|
|
680
|
+
* Math: No arithmetic; identity and calendar dates only.
|
|
681
|
+
* Units: Not monetary; the dates are month/day pairs.
|
|
682
|
+
* Throws: Nothing; sim-core's `check()` validates the dates.
|
|
683
|
+
* @statute Thailand Revenue Code Section 56 (annual return filing period).
|
|
684
|
+
*/
|
|
685
|
+
interface ThLevyIdentity {
|
|
686
|
+
/** Levy id, defaulting to `"th-2026-pit"`. */
|
|
687
|
+
readonly id?: string | undefined;
|
|
688
|
+
/** Period start, defaulting to 1 January (the calendar tax year). */
|
|
689
|
+
readonly period?: ThLevyMonthDay | undefined;
|
|
690
|
+
/** Settlement date, defaulting to 31 March after the tax year. */
|
|
691
|
+
readonly settlement?: ThLevyMonthDay | undefined;
|
|
692
|
+
}
|
|
693
|
+
/**
|
|
694
|
+
* The taxpayer profile an emitted TH 2026 Levy is specialised to.
|
|
695
|
+
*
|
|
696
|
+
* Purpose: Holds everything that must be fixed at emit time: filing status, fixed allowances,
|
|
697
|
+
* expense elections, Section 40(4) elections, and the Levy identity. Income and contribution
|
|
698
|
+
* amounts are not part of the profile; they arrive as Flow tallies at evaluation time.
|
|
699
|
+
* Math: No arithmetic; every monetary amount is an emit-time constant.
|
|
700
|
+
* Units: Monetary profile amounts are THB major units.
|
|
701
|
+
* Throws: TaxValidationError at emit time for any invalid allowance, donation, expense, or rate.
|
|
702
|
+
* @statute Thailand Revenue Code Sections 40, 42 bis, 47, 47 bis, 48(1)–(2), 56.
|
|
703
|
+
*/
|
|
704
|
+
interface ThLevyProfile {
|
|
705
|
+
/** Filing status governing family allowances; defaults to `"single"`. */
|
|
706
|
+
readonly filingStatus?: ThFilingStatus | undefined;
|
|
707
|
+
/** Fixed allowances and donation requests; contribution allowances come from tallies. */
|
|
708
|
+
readonly allowances?: ThLevyAllowances | undefined;
|
|
709
|
+
/** Standard-versus-actual expense elections; omitted items use the standard deduction. */
|
|
710
|
+
readonly expenses?: ThLevyExpenseElections | undefined;
|
|
711
|
+
/** Section 40(4) final-withholding and Section 47 bis elections. */
|
|
712
|
+
readonly section40_4?: ThLevySection40_4Elections | undefined;
|
|
713
|
+
/** Levy id, period, and settlement; each has a statutory default. */
|
|
714
|
+
readonly levy?: ThLevyIdentity | undefined;
|
|
715
|
+
}
|
|
716
|
+
/**
|
|
717
|
+
* Emits a Thailand 2026 Personal Income Tax rule set as sim-core Levy data.
|
|
718
|
+
*
|
|
719
|
+
* Purpose: Lets sim-core charge the annual PIT assessment from Flow tallies without importing
|
|
720
|
+
* this package. The profile, elections, and 2026 statutory parameters are frozen at emit time;
|
|
721
|
+
* income and contribution amounts arrive as Flow tallies under the exported labels.
|
|
722
|
+
* Math: `due = max(progressive, minimum gross tax) + final withholding tax
|
|
723
|
+
* - final withholding tax - Section 47 bis credit`, which is the calculator's `netTaxPayable`
|
|
724
|
+
* when no separate sheet, real estate, or other withholding is supplied.
|
|
725
|
+
* Units: Every monetary Measure is integer satang.
|
|
726
|
+
* Throws: TaxValidationError for an invalid profile allowance, donation, actual expense, or rate.
|
|
727
|
+
*
|
|
728
|
+
* @param profile Taxpayer profile and elections fixed at emit time.
|
|
729
|
+
* @statute Thailand Revenue Code Sections 40, 42 bis, 47, 47 bis, 48(1)–(2), 50(2)(g), 56.
|
|
730
|
+
*/
|
|
731
|
+
export declare function emitThLevy(profile?: ThLevyProfile): ThLevy;
|
|
732
|
+
/**
|
|
733
|
+
* Tally labels a TH 2026 Levy reads from income Flows (`gross` basis).
|
|
734
|
+
*
|
|
735
|
+
* Purpose: One label per assessable income class under Section 40(1)–(8), with Section 40(4)
|
|
736
|
+
* split per source because each source carries its own final-withholding election at emit time.
|
|
737
|
+
* Math: No arithmetic; the label selects which tally a Measure reads.
|
|
738
|
+
* Units: Dimensionless label string; the tallied amount is integer satang.
|
|
739
|
+
* Throws: Nothing.
|
|
740
|
+
* @statute Thailand Revenue Code Sections 40(1)–(8), 40(4), 50(2)(g).
|
|
741
|
+
*/
|
|
742
|
+
export declare const ThLevyIncomeLabel: {
|
|
743
|
+
/** Section 40(1) employment income. */
|
|
744
|
+
readonly Section40_1: "income.section40_1";
|
|
745
|
+
/** Section 40(2) service and hire-of-work income. */
|
|
746
|
+
readonly Section40_2: "income.section40_2";
|
|
747
|
+
/** Section 40(3) royalties, goodwill, and copyright income. */
|
|
748
|
+
readonly Section40_3: "income.section40_3";
|
|
749
|
+
/** Section 40(4) income with no source-specific election. */
|
|
750
|
+
readonly Section40_4Other: "income.section40_4";
|
|
751
|
+
/** Section 40(4) interest, elected final or included at emit time. */
|
|
752
|
+
readonly Section40_4Interest: "income.section40_4.interest";
|
|
753
|
+
/** Section 40(4) dividends, elected final or included at emit time. */
|
|
754
|
+
readonly Section40_4Dividends: "income.section40_4.dividends";
|
|
755
|
+
/** Section 40(4) digital asset income, elected final or included at emit time. */
|
|
756
|
+
readonly Section40_4DigitalAssets: "income.section40_4.digitalAssets";
|
|
757
|
+
/** Section 40(5) building rental income. */
|
|
758
|
+
readonly Section40_5Building: "income.section40_5.building";
|
|
759
|
+
/** Section 40(5) agricultural land rental income. */
|
|
760
|
+
readonly Section40_5AgriculturalLand: "income.section40_5.agriculturalLand";
|
|
761
|
+
/** Section 40(5) non-agricultural land rental income. */
|
|
762
|
+
readonly Section40_5NonAgriculturalLand: "income.section40_5.nonAgriculturalLand";
|
|
763
|
+
/** Section 40(5) vehicle rental income. */
|
|
764
|
+
readonly Section40_5Vehicles: "income.section40_5.vehicles";
|
|
765
|
+
/** Section 40(5) other rental income. */
|
|
766
|
+
readonly Section40_5Other: "income.section40_5.other";
|
|
767
|
+
/** Section 40(6) medical profession income. */
|
|
768
|
+
readonly Section40_6Medical: "income.section40_6.medical";
|
|
769
|
+
/** Section 40(6) law profession income. */
|
|
770
|
+
readonly Section40_6Law: "income.section40_6.law";
|
|
771
|
+
/** Section 40(6) engineering profession income. */
|
|
772
|
+
readonly Section40_6Engineering: "income.section40_6.engineering";
|
|
773
|
+
/** Section 40(6) architecture profession income. */
|
|
774
|
+
readonly Section40_6Architecture: "income.section40_6.architecture";
|
|
775
|
+
/** Section 40(6) accounting profession income. */
|
|
776
|
+
readonly Section40_6Accounting: "income.section40_6.accounting";
|
|
777
|
+
/** Section 40(6) fine arts profession income. */
|
|
778
|
+
readonly Section40_6FineArts: "income.section40_6.fineArts";
|
|
779
|
+
/** Section 40(6) other liberal profession income. */
|
|
780
|
+
readonly Section40_6Other: "income.section40_6.other";
|
|
781
|
+
/** Section 40(7) contracting income. */
|
|
782
|
+
readonly Section40_7: "income.section40_7";
|
|
783
|
+
/** Section 40(8) general business and commerce income. */
|
|
784
|
+
readonly Section40_8General: "income.section40_8.general";
|
|
785
|
+
/** Section 40(8) entertainer income (tiered expense rate). */
|
|
786
|
+
readonly Section40_8Entertainer: "income.section40_8.entertainer";
|
|
787
|
+
};
|
|
788
|
+
/**
|
|
789
|
+
* Union of {@link ThLevyIncomeLabel} values.
|
|
790
|
+
*
|
|
791
|
+
* Purpose: Narrow type for the labels a caller may put on an income Flow.
|
|
792
|
+
* Math: No arithmetic.
|
|
793
|
+
* Units: Dimensionless label string.
|
|
794
|
+
* Throws: Nothing.
|
|
795
|
+
* @statute Thailand Revenue Code Sections 40(1)–(8), 40(4).
|
|
796
|
+
*/
|
|
797
|
+
export type ThLevyIncomeLabel = (typeof ThLevyIncomeLabel)[keyof typeof ThLevyIncomeLabel];
|
|
798
|
+
/**
|
|
799
|
+
* Tally labels a TH 2026 Levy reads from contribution Flows (`funded` basis).
|
|
800
|
+
*
|
|
801
|
+
* Purpose: One label per contribution-driven retirement allowance.
|
|
802
|
+
* Math: No arithmetic; the label selects which tally a Measure reads.
|
|
803
|
+
* Units: Dimensionless label string; the tallied amount is integer satang.
|
|
804
|
+
* Throws: Nothing.
|
|
805
|
+
* @statute Thailand Revenue Code Section 47; Ministerial Regulations No. 126, 390.
|
|
806
|
+
*/
|
|
807
|
+
export declare const ThLevyContributionLabel: {
|
|
808
|
+
/** RMF contribution. */
|
|
809
|
+
readonly Rmf: "allowance.retirement.rmf";
|
|
810
|
+
/** SSF contribution. */
|
|
811
|
+
readonly Ssf: "allowance.retirement.ssf";
|
|
812
|
+
/** PVD contribution. */
|
|
813
|
+
readonly Pvd: "allowance.retirement.pvd";
|
|
814
|
+
/** GPF contribution. */
|
|
815
|
+
readonly Gpf: "allowance.retirement.gpf";
|
|
816
|
+
/** National Savings Fund contribution. */
|
|
817
|
+
readonly Nsf: "allowance.retirement.nsf";
|
|
818
|
+
/** Pension life insurance premium. */
|
|
819
|
+
readonly PensionLifeInsurance: "allowance.retirement.pension_life";
|
|
820
|
+
/** ThaiESG fund contribution. */
|
|
821
|
+
readonly ThaiEsg: "allowance.thai_esg";
|
|
822
|
+
};
|
|
823
|
+
/**
|
|
824
|
+
* Union of {@link ThLevyContributionLabel} values.
|
|
825
|
+
*
|
|
826
|
+
* Purpose: Narrow type for the labels a caller may put on a contribution Flow.
|
|
827
|
+
* Math: No arithmetic.
|
|
828
|
+
* Units: Dimensionless label string.
|
|
829
|
+
* Throws: Nothing.
|
|
830
|
+
* @statute Thailand Revenue Code Section 47; Ministerial Regulations No. 126, 390.
|
|
831
|
+
*/
|
|
832
|
+
export type ThLevyContributionLabel = (typeof ThLevyContributionLabel)[keyof typeof ThLevyContributionLabel];
|
|
833
|
+
/**
|
|
834
|
+
* Every income tally label the emitter reads, in Section 40 order.
|
|
835
|
+
*
|
|
836
|
+
* Purpose: Ordered contract a caller can iterate to label or audit income Flows.
|
|
837
|
+
* Math: No arithmetic.
|
|
838
|
+
* Units: Dimensionless label strings.
|
|
839
|
+
* Throws: Nothing.
|
|
840
|
+
* @statute Thailand Revenue Code Sections 40(1)–(8), 40(4).
|
|
841
|
+
*/
|
|
842
|
+
export declare const TH_LEVY_INCOME_LABELS: readonly ThLevyIncomeLabel[];
|
|
843
|
+
/**
|
|
844
|
+
* Every contribution tally label the emitter reads, in retirement-cluster order.
|
|
845
|
+
*
|
|
846
|
+
* Purpose: Ordered contract a caller can iterate to label or audit contribution Flows.
|
|
847
|
+
* Math: No arithmetic.
|
|
848
|
+
* Units: Dimensionless label strings.
|
|
849
|
+
* Throws: Nothing.
|
|
850
|
+
* @statute Thailand Revenue Code Section 47; Ministerial Regulations No. 126, 390.
|
|
851
|
+
*/
|
|
852
|
+
export declare const TH_LEVY_CONTRIBUTION_LABELS: readonly ThLevyContributionLabel[];
|
|
853
|
+
/**
|
|
854
|
+
* Audited Measure ids a TH 2026 Levy exposes by name.
|
|
855
|
+
*
|
|
856
|
+
* Purpose: Lets callers and tests compare each intermediate statutory figure without knowing
|
|
857
|
+
* the emit order.
|
|
858
|
+
* Math: No arithmetic; Measure ids only.
|
|
859
|
+
* Units: The referenced Measures are integer satang.
|
|
860
|
+
* Throws: Nothing.
|
|
861
|
+
* @statute Thailand Revenue Code Sections 40, 42 bis, 47, 47 bis, 48(1)–(2).
|
|
862
|
+
*/
|
|
863
|
+
export declare enum ThLevyMeasureId {
|
|
864
|
+
AssessableTotal = "assessable.total",
|
|
865
|
+
GrossNonEmployment = "assessable.non_employment",
|
|
866
|
+
ExpensesTotal = "expenses.total",
|
|
867
|
+
AllowancesFixed = "allowances.fixed",
|
|
868
|
+
RetirementCluster = "allowances.retirement_cluster",
|
|
869
|
+
ThaiEsg = "allowances.thai_esg",
|
|
870
|
+
Donations = "allowances.donations",
|
|
871
|
+
AllowancesTotal = "allowances.total",
|
|
872
|
+
NetTaxableIncome = "taxable.income",
|
|
873
|
+
ProgressiveTax = "tax.progressive",
|
|
874
|
+
MinimumGrossTax = "tax.minimum",
|
|
875
|
+
RegularTax = "tax.regular",
|
|
876
|
+
FinalWithholdingTax = "tax.final_withholding",
|
|
877
|
+
DividendCredit = "credit.dividend",
|
|
878
|
+
TotalTax = "tax.total",
|
|
879
|
+
NetTaxPayable = "tax.net_payable"
|
|
880
|
+
}
|
|
467
881
|
interface ThParameters {
|
|
468
882
|
readonly taxYear: 2026;
|
|
469
883
|
readonly currency: "THB";
|
|
@@ -632,5 +1046,5 @@ export declare const TH_2026_PARAMETERS: ThParameters;
|
|
|
632
1046
|
* Implements TaxSystem contract for `@trajectonomics/tax/th`.
|
|
633
1047
|
*/
|
|
634
1048
|
export declare const th: TaxSystem<ThTaxInput, "THB", ThBreakdown>;
|
|
635
|
-
export type { ThAllowancesBreakdown, ThAllowancesInput, ThAssessableIncomeBreakdown, ThAssessableIncomeInput, ThBreakdown, ThChild, ThChildrenInput, ThCombinedTaxBreakdown, ThDividendTaxCreditBreakdown, ThDonationsBreakdown, ThExpenseDeductionsBreakdown, ThExpenseElectableIncome, ThExpenseElection, ThFilingStatus, ThFinalWithholdingBreakdown, ThFinalWithholdingSourceBreakdown, ThMinimumGrossTaxBreakdown, ThParentsInput, ThRealEstateBreakdown, ThRealEstateTransferInput, ThRetirementClusterBreakdown, ThSection40_4Dividend, ThSection40_4Input, ThSection40_4Source, ThSection40_5Input, ThSection40_6Input, ThSection40_8Input, ThSeparateSheetBreakdown, ThSeparateSheetInput, ThTaxInput };
|
|
1049
|
+
export type { ThAllowancesBreakdown, ThAllowancesInput, ThAssessableIncomeBreakdown, ThAssessableIncomeInput, ThBreakdown, ThChild, ThChildrenInput, ThCombinedTaxBreakdown, ThDividendTaxCreditBreakdown, ThDonationsBreakdown, ThExpenseDeductionsBreakdown, ThExpenseElectableIncome, ThExpenseElection, ThFilingStatus, ThFinalWithholdingBreakdown, ThFinalWithholdingSourceBreakdown, ThLevy, ThLevyAllowances, ThLevyExpenseChoice, ThLevyExpenseElections, ThLevyIdentity, ThLevyMeasure, ThLevyMonthDay, ThLevyProfile, ThLevySection40_4Elections, ThMinimumGrossTaxBreakdown, ThParentsInput, ThRealEstateBreakdown, ThRealEstateTransferInput, ThRetirementClusterBreakdown, ThSection40_4Dividend, ThSection40_4Input, ThSection40_4Source, ThSection40_5Input, ThSection40_6Input, ThSection40_8Input, ThSeparateSheetBreakdown, ThSeparateSheetInput, ThTaxInput };
|
|
636
1050
|
//# sourceMappingURL=index.d.cts.map
|