@trajectonomics/tax 0.2.0-alpha.1 → 0.2.0-alpha.2
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/dist/us/index.cjs +129 -27
- package/dist/us/index.cjs.map +1 -1
- package/dist/us/index.d.cts +21 -1
- package/dist/us/index.d.mts +21 -1
- package/dist/us/index.mjs +130 -29
- package/dist/us/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/us/index.cjs
CHANGED
|
@@ -424,6 +424,7 @@ let UsStateField = /* @__PURE__ */ function(UsStateField) {
|
|
|
424
424
|
UsStateField["Surtax"] = "state.surtax";
|
|
425
425
|
UsStateField["SurtaxThreshold"] = "state.surtaxThreshold";
|
|
426
426
|
UsStateField["PhaseOutThreshold"] = "state.phaseOutThreshold";
|
|
427
|
+
UsStateField["PhaseOutReductionStep"] = "state.phaseOutReductionStep";
|
|
427
428
|
UsStateField["CreditsPersonal"] = "state.credits.personal";
|
|
428
429
|
UsStateField["CreditsDependent"] = "state.credits.dependent";
|
|
429
430
|
UsStateField["CreditsClaimedNonRefundable"] = "state.credits.claimedNonRefundable";
|
|
@@ -514,6 +515,7 @@ function defineState(def) {
|
|
|
514
515
|
personalCredit: exemptionAmounts(personalCredit[0], personalCredit[1], personalCredit[2]),
|
|
515
516
|
dependentExemption: def.dependentExemption ?? 0,
|
|
516
517
|
dependentCredit: def.dependentCredit ?? 0,
|
|
518
|
+
verification: def.verification,
|
|
517
519
|
...optionalRules(def)
|
|
518
520
|
};
|
|
519
521
|
}
|
|
@@ -533,6 +535,7 @@ const FLAT_STATES_A = [
|
|
|
533
535
|
defineState({
|
|
534
536
|
code: "AZ",
|
|
535
537
|
name: "Arizona",
|
|
538
|
+
verification: "unconfirmed",
|
|
536
539
|
type: "flat",
|
|
537
540
|
single: [[0, .025]],
|
|
538
541
|
mfj: [[0, .025]],
|
|
@@ -546,6 +549,7 @@ const FLAT_STATES_A = [
|
|
|
546
549
|
defineState({
|
|
547
550
|
code: "CO",
|
|
548
551
|
name: "Colorado",
|
|
552
|
+
verification: "unconfirmed",
|
|
549
553
|
type: "flat",
|
|
550
554
|
single: [[0, .044]],
|
|
551
555
|
mfj: [[0, .044]],
|
|
@@ -554,6 +558,7 @@ const FLAT_STATES_A = [
|
|
|
554
558
|
defineState({
|
|
555
559
|
code: "GA",
|
|
556
560
|
name: "Georgia",
|
|
561
|
+
verification: "official",
|
|
557
562
|
type: "flat",
|
|
558
563
|
single: [[0, .0499]],
|
|
559
564
|
mfj: [[0, .0499]],
|
|
@@ -567,6 +572,7 @@ const FLAT_STATES_A = [
|
|
|
567
572
|
defineState({
|
|
568
573
|
code: "ID",
|
|
569
574
|
name: "Idaho",
|
|
575
|
+
verification: "reported",
|
|
570
576
|
type: "flat",
|
|
571
577
|
single: [[4811, .053]],
|
|
572
578
|
mfj: [[9622, .053]],
|
|
@@ -575,6 +581,7 @@ const FLAT_STATES_A = [
|
|
|
575
581
|
defineState({
|
|
576
582
|
code: "IL",
|
|
577
583
|
name: "Illinois",
|
|
584
|
+
verification: "reported",
|
|
578
585
|
type: "flat",
|
|
579
586
|
single: [[0, .0495]],
|
|
580
587
|
mfj: [[0, .0495]],
|
|
@@ -585,6 +592,7 @@ const FLAT_STATES_A = [
|
|
|
585
592
|
defineState({
|
|
586
593
|
code: "IN",
|
|
587
594
|
name: "Indiana",
|
|
595
|
+
verification: "reported",
|
|
588
596
|
type: "flat",
|
|
589
597
|
single: [[0, .0295]],
|
|
590
598
|
mfj: [[0, .0295]],
|
|
@@ -595,6 +603,7 @@ const FLAT_STATES_A = [
|
|
|
595
603
|
defineState({
|
|
596
604
|
code: "IA",
|
|
597
605
|
name: "Iowa",
|
|
606
|
+
verification: "official",
|
|
598
607
|
type: "flat",
|
|
599
608
|
single: [[0, .038]],
|
|
600
609
|
mfj: [[0, .038]],
|
|
@@ -608,6 +617,7 @@ const FLAT_STATES_B = [
|
|
|
608
617
|
defineState({
|
|
609
618
|
code: "KY",
|
|
610
619
|
name: "Kentucky",
|
|
620
|
+
verification: "official",
|
|
611
621
|
type: "flat",
|
|
612
622
|
single: [[0, .035]],
|
|
613
623
|
mfj: [[0, .035]],
|
|
@@ -620,6 +630,7 @@ const FLAT_STATES_B = [
|
|
|
620
630
|
defineState({
|
|
621
631
|
code: "MA",
|
|
622
632
|
name: "Massachusetts",
|
|
633
|
+
verification: "reported",
|
|
623
634
|
type: "flat",
|
|
624
635
|
single: [[0, .05]],
|
|
625
636
|
mfj: [[0, .05]],
|
|
@@ -638,6 +649,7 @@ const FLAT_STATES_B = [
|
|
|
638
649
|
defineState({
|
|
639
650
|
code: "MI",
|
|
640
651
|
name: "Michigan",
|
|
652
|
+
verification: "reported",
|
|
641
653
|
type: "flat",
|
|
642
654
|
single: [[0, .0425]],
|
|
643
655
|
mfj: [[0, .0425]],
|
|
@@ -648,6 +660,7 @@ const FLAT_STATES_B = [
|
|
|
648
660
|
defineState({
|
|
649
661
|
code: "MS",
|
|
650
662
|
name: "Mississippi",
|
|
663
|
+
verification: "unconfirmed",
|
|
651
664
|
type: "flat",
|
|
652
665
|
single: [[1e4, .04]],
|
|
653
666
|
mfj: [[1e4, .04]],
|
|
@@ -658,6 +671,7 @@ const FLAT_STATES_B = [
|
|
|
658
671
|
defineState({
|
|
659
672
|
code: "NC",
|
|
660
673
|
name: "North Carolina",
|
|
674
|
+
verification: "official",
|
|
661
675
|
type: "flat",
|
|
662
676
|
single: [[0, .0399]],
|
|
663
677
|
mfj: [[0, .0399]],
|
|
@@ -666,6 +680,7 @@ const FLAT_STATES_B = [
|
|
|
666
680
|
defineState({
|
|
667
681
|
code: "PA",
|
|
668
682
|
name: "Pennsylvania",
|
|
683
|
+
verification: "unconfirmed",
|
|
669
684
|
type: "flat",
|
|
670
685
|
single: [[0, .0307]],
|
|
671
686
|
mfj: [[0, .0307]],
|
|
@@ -674,6 +689,7 @@ const FLAT_STATES_B = [
|
|
|
674
689
|
defineState({
|
|
675
690
|
code: "UT",
|
|
676
691
|
name: "Utah",
|
|
692
|
+
verification: "official",
|
|
677
693
|
type: "flat",
|
|
678
694
|
single: [[0, .0445]],
|
|
679
695
|
mfj: [[0, .0445]],
|
|
@@ -690,6 +706,7 @@ const FLAT_STATES_B = [
|
|
|
690
706
|
const FLAT_STATES_C = [defineState({
|
|
691
707
|
code: "LA",
|
|
692
708
|
name: "Louisiana",
|
|
709
|
+
verification: "official",
|
|
693
710
|
type: "flat",
|
|
694
711
|
single: [[0, .03]],
|
|
695
712
|
mfj: [[0, .03]],
|
|
@@ -701,6 +718,7 @@ const FLAT_STATES_C = [defineState({
|
|
|
701
718
|
}), defineState({
|
|
702
719
|
code: "OH",
|
|
703
720
|
name: "Ohio",
|
|
721
|
+
verification: "partial",
|
|
704
722
|
type: "flat",
|
|
705
723
|
single: [[26050, .0275]],
|
|
706
724
|
mfj: [[26050, .0275]],
|
|
@@ -725,6 +743,7 @@ function noTaxState(code, name) {
|
|
|
725
743
|
return defineState({
|
|
726
744
|
code,
|
|
727
745
|
name,
|
|
746
|
+
verification: "official",
|
|
728
747
|
type: "none",
|
|
729
748
|
single: [[0, 0]],
|
|
730
749
|
mfj: [[0, 0]],
|
|
@@ -759,6 +778,7 @@ const NO_TAX_STATES = [
|
|
|
759
778
|
const US_2026_STATE_AL = defineState({
|
|
760
779
|
code: "AL",
|
|
761
780
|
name: "Alabama",
|
|
781
|
+
verification: "unconfirmed",
|
|
762
782
|
type: "progressive",
|
|
763
783
|
single: [
|
|
764
784
|
[0, .02],
|
|
@@ -786,14 +806,16 @@ const US_2026_STATE_AL = defineState({
|
|
|
786
806
|
/**
|
|
787
807
|
* 2026 Arkansas individual income tax parameters.
|
|
788
808
|
*
|
|
789
|
-
* Brackets from the DFA 2026 withholding formula (0% to $5,599, then 2%, 3%, 3.4%
|
|
790
|
-
* 3.
|
|
809
|
+
* Brackets from the DFA 2026 withholding formula now served (0% to $5,599, then 2%, 3%, 3.4%
|
|
810
|
+
* to $26,399 and 3.70% above), with the $2,470 deduction and the $29 per-exemption credit. The formula is a single-employee formula and prints no joint table, so the joint
|
|
811
|
+
* schedule the engine applies to married filers stays unconfirmed.
|
|
791
812
|
*
|
|
792
813
|
* @statute Ark. Code Ann. § 26-51-201
|
|
793
814
|
*/
|
|
794
815
|
const US_2026_STATE_AR = defineState({
|
|
795
816
|
code: "AR",
|
|
796
817
|
name: "Arkansas",
|
|
818
|
+
verification: "partial",
|
|
797
819
|
type: "progressive",
|
|
798
820
|
single: [
|
|
799
821
|
[5600, .02],
|
|
@@ -815,14 +837,17 @@ const US_2026_STATE_AR = defineState({
|
|
|
815
837
|
/**
|
|
816
838
|
* 2026 California individual income tax parameters.
|
|
817
839
|
*
|
|
818
|
-
* FTB 2026
|
|
819
|
-
* $491 per dependent)
|
|
840
|
+
* FTB 2026 rate schedules for all three filing statuses. The 2026 standard deduction
|
|
841
|
+
* ($5,900/$11,800) and exemption credits ($158/$316, $491 per dependent) are still the
|
|
842
|
+
* 2025 values x 1.034 because FTB has not published the 2026 index. 1% mental health services
|
|
843
|
+
* surtax above $1,000,000.
|
|
820
844
|
*
|
|
821
845
|
* @statute Cal. Rev. & Tax. Code § 17041
|
|
822
846
|
*/
|
|
823
847
|
const US_2026_STATE_CA = defineState({
|
|
824
848
|
code: "CA",
|
|
825
849
|
name: "California",
|
|
850
|
+
verification: "partial",
|
|
826
851
|
type: "progressive",
|
|
827
852
|
single: [
|
|
828
853
|
[0, .01],
|
|
@@ -878,6 +903,7 @@ const US_2026_STATE_CA = defineState({
|
|
|
878
903
|
const US_2026_STATE_CT = defineState({
|
|
879
904
|
code: "CT",
|
|
880
905
|
name: "Connecticut",
|
|
906
|
+
verification: "official",
|
|
881
907
|
type: "progressive",
|
|
882
908
|
single: [
|
|
883
909
|
[0, .02],
|
|
@@ -923,6 +949,7 @@ const US_2026_STATE_CT = defineState({
|
|
|
923
949
|
const US_2026_STATE_DC = defineState({
|
|
924
950
|
code: "DC",
|
|
925
951
|
name: "District of Columbia",
|
|
952
|
+
verification: "unconfirmed",
|
|
926
953
|
type: "progressive",
|
|
927
954
|
single: [
|
|
928
955
|
[0, .04],
|
|
@@ -957,6 +984,7 @@ const US_2026_STATE_DC = defineState({
|
|
|
957
984
|
const US_2026_STATE_DE = defineState({
|
|
958
985
|
code: "DE",
|
|
959
986
|
name: "Delaware",
|
|
987
|
+
verification: "unconfirmed",
|
|
960
988
|
type: "progressive",
|
|
961
989
|
single: [
|
|
962
990
|
[2e3, .022],
|
|
@@ -991,6 +1019,7 @@ const US_2026_STATE_DE = defineState({
|
|
|
991
1019
|
const US_2026_STATE_HI = defineState({
|
|
992
1020
|
code: "HI",
|
|
993
1021
|
name: "Hawaii",
|
|
1022
|
+
verification: "official",
|
|
994
1023
|
type: "progressive",
|
|
995
1024
|
single: [
|
|
996
1025
|
[0, .014],
|
|
@@ -1051,6 +1080,7 @@ const US_2026_STATE_HI = defineState({
|
|
|
1051
1080
|
const US_2026_STATE_KS = defineState({
|
|
1052
1081
|
code: "KS",
|
|
1053
1082
|
name: "Kansas",
|
|
1083
|
+
verification: "unconfirmed",
|
|
1054
1084
|
type: "progressive",
|
|
1055
1085
|
single: [[0, .052], [23e3, .0558]],
|
|
1056
1086
|
mfj: [[0, .052], [46e3, .0558]],
|
|
@@ -1071,6 +1101,7 @@ const US_2026_STATE_KS = defineState({
|
|
|
1071
1101
|
const US_2026_STATE_MD = defineState({
|
|
1072
1102
|
code: "MD",
|
|
1073
1103
|
name: "Maryland",
|
|
1104
|
+
verification: "official",
|
|
1074
1105
|
type: "progressive",
|
|
1075
1106
|
single: [
|
|
1076
1107
|
[0, .02],
|
|
@@ -1120,6 +1151,7 @@ const US_2026_STATE_MD = defineState({
|
|
|
1120
1151
|
const US_2026_STATE_ME = defineState({
|
|
1121
1152
|
code: "ME",
|
|
1122
1153
|
name: "Maine",
|
|
1154
|
+
verification: "official",
|
|
1123
1155
|
type: "progressive",
|
|
1124
1156
|
single: [
|
|
1125
1157
|
[0, .058],
|
|
@@ -1183,6 +1215,7 @@ const US_2026_STATE_ME = defineState({
|
|
|
1183
1215
|
const US_2026_STATE_MN = defineState({
|
|
1184
1216
|
code: "MN",
|
|
1185
1217
|
name: "Minnesota",
|
|
1218
|
+
verification: "official",
|
|
1186
1219
|
type: "progressive",
|
|
1187
1220
|
single: [
|
|
1188
1221
|
[0, .0535],
|
|
@@ -1253,6 +1286,7 @@ const US_2026_STATE_MN = defineState({
|
|
|
1253
1286
|
const US_2026_STATE_MO = defineState({
|
|
1254
1287
|
code: "MO",
|
|
1255
1288
|
name: "Missouri",
|
|
1289
|
+
verification: "official",
|
|
1256
1290
|
type: "progressive",
|
|
1257
1291
|
single: [
|
|
1258
1292
|
[1348, .02],
|
|
@@ -1283,6 +1317,7 @@ const US_2026_STATE_MO = defineState({
|
|
|
1283
1317
|
const US_2026_STATE_MT = defineState({
|
|
1284
1318
|
code: "MT",
|
|
1285
1319
|
name: "Montana",
|
|
1320
|
+
verification: "partial",
|
|
1286
1321
|
type: "progressive",
|
|
1287
1322
|
single: [[0, .047], [47500, .0565]],
|
|
1288
1323
|
mfj: [[0, .047], [95e3, .0565]],
|
|
@@ -1297,6 +1332,7 @@ const US_2026_STATE_MT = defineState({
|
|
|
1297
1332
|
const US_2026_STATE_ND = defineState({
|
|
1298
1333
|
code: "ND",
|
|
1299
1334
|
name: "North Dakota",
|
|
1335
|
+
verification: "unconfirmed",
|
|
1300
1336
|
type: "progressive",
|
|
1301
1337
|
single: [[48475, .0195], [244825, .025]],
|
|
1302
1338
|
mfj: [[80975, .0195], [298075, .025]],
|
|
@@ -1313,6 +1349,7 @@ const US_2026_STATE_ND = defineState({
|
|
|
1313
1349
|
const US_2026_STATE_NE = defineState({
|
|
1314
1350
|
code: "NE",
|
|
1315
1351
|
name: "Nebraska",
|
|
1352
|
+
verification: "unconfirmed",
|
|
1316
1353
|
type: "progressive",
|
|
1317
1354
|
single: [
|
|
1318
1355
|
[0, .0246],
|
|
@@ -1337,6 +1374,7 @@ const US_2026_STATE_NE = defineState({
|
|
|
1337
1374
|
const US_2026_STATE_NJ = defineState({
|
|
1338
1375
|
code: "NJ",
|
|
1339
1376
|
name: "New Jersey",
|
|
1377
|
+
verification: "unconfirmed",
|
|
1340
1378
|
type: "progressive",
|
|
1341
1379
|
single: [
|
|
1342
1380
|
[0, .014],
|
|
@@ -1371,6 +1409,7 @@ const US_2026_STATE_NJ = defineState({
|
|
|
1371
1409
|
const US_2026_STATE_NM = defineState({
|
|
1372
1410
|
code: "NM",
|
|
1373
1411
|
name: "New Mexico",
|
|
1412
|
+
verification: "unconfirmed",
|
|
1374
1413
|
type: "progressive",
|
|
1375
1414
|
single: [
|
|
1376
1415
|
[0, .015],
|
|
@@ -1402,6 +1441,7 @@ const US_2026_STATE_NM = defineState({
|
|
|
1402
1441
|
const US_2026_STATE_NY = defineState({
|
|
1403
1442
|
code: "NY",
|
|
1404
1443
|
name: "New York",
|
|
1444
|
+
verification: "partial",
|
|
1405
1445
|
type: "progressive",
|
|
1406
1446
|
single: [
|
|
1407
1447
|
[0, .039],
|
|
@@ -1453,6 +1493,7 @@ const US_2026_STATE_NY = defineState({
|
|
|
1453
1493
|
const US_2026_STATE_OK = defineState({
|
|
1454
1494
|
code: "OK",
|
|
1455
1495
|
name: "Oklahoma",
|
|
1496
|
+
verification: "unconfirmed",
|
|
1456
1497
|
type: "progressive",
|
|
1457
1498
|
single: [
|
|
1458
1499
|
[3750, .025],
|
|
@@ -1482,6 +1523,7 @@ const US_2026_STATE_OK = defineState({
|
|
|
1482
1523
|
const US_2026_STATE_OR = defineState({
|
|
1483
1524
|
code: "OR",
|
|
1484
1525
|
name: "Oregon",
|
|
1526
|
+
verification: "unconfirmed",
|
|
1485
1527
|
type: "progressive",
|
|
1486
1528
|
single: [
|
|
1487
1529
|
[0, .0475],
|
|
@@ -1513,6 +1555,7 @@ const US_2026_STATE_OR = defineState({
|
|
|
1513
1555
|
const US_2026_STATE_RI = defineState({
|
|
1514
1556
|
code: "RI",
|
|
1515
1557
|
name: "Rhode Island",
|
|
1558
|
+
verification: "unconfirmed",
|
|
1516
1559
|
type: "progressive",
|
|
1517
1560
|
single: [
|
|
1518
1561
|
[0, .0375],
|
|
@@ -1532,28 +1575,52 @@ const US_2026_STATE_RI = defineState({
|
|
|
1532
1575
|
/**
|
|
1533
1576
|
* 2026 South Carolina individual income tax parameters.
|
|
1534
1577
|
*
|
|
1535
|
-
*
|
|
1578
|
+
* Act 110 of 2026 (H.4216, ratified R 117, signed 2026-03-30) replaces the 0% / 3% / 6%
|
|
1579
|
+
* schedule with a 1.99% band to $30,000 and 5.21% above, expressed in the act as "5.21% times
|
|
1580
|
+
* the amount minus $966" (5.21% x 30,000 - 1.99% x 30,000 = 966, so the two bands meet at
|
|
1581
|
+
* $597). It also replaces the federal standard deduction with the South Carolina Income
|
|
1582
|
+
* Adjusted Deduction (SCIAD) of $15,000 single and separate, $22,500 head of household,
|
|
1583
|
+
* $30,000 joint, reduced by (federal AGI - start) / width and floored to $10.
|
|
1584
|
+
*
|
|
1585
|
+
* The $30,000 bracket is indexed under § 12-6-520 and the dependent exemption is indexed
|
|
1586
|
+
* annually; neither 2026 amount is published, so the $4,930 exemption is carried forward
|
|
1587
|
+
* without a 2026 source and the table is recorded as partial. The act also
|
|
1588
|
+
* raised the earned income tax credit to 125% of the federal credit capped at $200; no state
|
|
1589
|
+
* EITC is modelled in this engine.
|
|
1590
|
+
*
|
|
1591
|
+
* @statute S.C. Code §§ 12-6-510(C) (as amended by Act 110 of 2026), 12-6-1140(15)
|
|
1536
1592
|
*/
|
|
1593
|
+
/** Both filing-status axes share one table: the act taxes South Carolina taxable income the same way. */
|
|
1594
|
+
const SC_TIERS = [[0, .0199], [3e4, .0521]];
|
|
1537
1595
|
const US_2026_STATE_SC = defineState({
|
|
1538
1596
|
code: "SC",
|
|
1539
1597
|
name: "South Carolina",
|
|
1598
|
+
verification: "partial",
|
|
1540
1599
|
type: "progressive",
|
|
1541
|
-
single:
|
|
1542
|
-
|
|
1543
|
-
[3640, .03],
|
|
1544
|
-
[18230, .06]
|
|
1545
|
-
],
|
|
1546
|
-
mfj: [
|
|
1547
|
-
[0, 0],
|
|
1548
|
-
[3640, .03],
|
|
1549
|
-
[18230, .06]
|
|
1550
|
-
],
|
|
1600
|
+
single: SC_TIERS,
|
|
1601
|
+
mfj: SC_TIERS,
|
|
1551
1602
|
std: [
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1603
|
+
15e3,
|
|
1604
|
+
3e4,
|
|
1605
|
+
22500
|
|
1555
1606
|
],
|
|
1556
|
-
dependentExemption: 4930
|
|
1607
|
+
dependentExemption: 4930,
|
|
1608
|
+
standardDeductionPhaseOut: {
|
|
1609
|
+
kind: "linear",
|
|
1610
|
+
start: {
|
|
1611
|
+
single: 4e4,
|
|
1612
|
+
married_filing_jointly: 8e4,
|
|
1613
|
+
married_filing_separately: 4e4,
|
|
1614
|
+
head_of_household: 6e4
|
|
1615
|
+
},
|
|
1616
|
+
width: {
|
|
1617
|
+
single: 55e3,
|
|
1618
|
+
married_filing_jointly: 11e4,
|
|
1619
|
+
married_filing_separately: 55e3,
|
|
1620
|
+
head_of_household: 82500
|
|
1621
|
+
},
|
|
1622
|
+
reductionStep: 10
|
|
1623
|
+
}
|
|
1557
1624
|
});
|
|
1558
1625
|
// src/us/state/parameters/progressive/va.ts
|
|
1559
1626
|
/**
|
|
@@ -1564,6 +1631,7 @@ const US_2026_STATE_SC = defineState({
|
|
|
1564
1631
|
const US_2026_STATE_VA = defineState({
|
|
1565
1632
|
code: "VA",
|
|
1566
1633
|
name: "Virginia",
|
|
1634
|
+
verification: "reported",
|
|
1567
1635
|
type: "progressive",
|
|
1568
1636
|
single: [
|
|
1569
1637
|
[0, .02],
|
|
@@ -1594,6 +1662,7 @@ const US_2026_STATE_VA = defineState({
|
|
|
1594
1662
|
const US_2026_STATE_VT = defineState({
|
|
1595
1663
|
code: "VT",
|
|
1596
1664
|
name: "Vermont",
|
|
1665
|
+
verification: "unconfirmed",
|
|
1597
1666
|
type: "progressive",
|
|
1598
1667
|
single: [
|
|
1599
1668
|
[0, .0335],
|
|
@@ -1621,6 +1690,7 @@ const US_2026_STATE_VT = defineState({
|
|
|
1621
1690
|
const US_2026_STATE_WI = defineState({
|
|
1622
1691
|
code: "WI",
|
|
1623
1692
|
name: "Wisconsin",
|
|
1693
|
+
verification: "unconfirmed",
|
|
1624
1694
|
type: "progressive",
|
|
1625
1695
|
single: [
|
|
1626
1696
|
[0, .035],
|
|
@@ -1672,6 +1742,7 @@ const PROGRESSIVE_STATES = [
|
|
|
1672
1742
|
defineState({
|
|
1673
1743
|
code: "WV",
|
|
1674
1744
|
name: "West Virginia",
|
|
1745
|
+
verification: "official",
|
|
1675
1746
|
type: "progressive",
|
|
1676
1747
|
single: [
|
|
1677
1748
|
[0, .0211],
|
|
@@ -1694,6 +1765,24 @@ const PROGRESSIVE_STATES = [
|
|
|
1694
1765
|
}),
|
|
1695
1766
|
US_2026_STATE_WI
|
|
1696
1767
|
];
|
|
1768
|
+
// src/us/state/parameters/verification.ts
|
|
1769
|
+
/**
|
|
1770
|
+
* Verification levels for a state's 2026 parameter table, from the strongest to the weakest.
|
|
1771
|
+
*
|
|
1772
|
+
* - `unconfirmed`: neither an official document nor a matching secondary report was read.
|
|
1773
|
+
* - `reported`: only secondary reports (news, vendor summaries) agree with the table.
|
|
1774
|
+
* - `partial`: an official document confirms some figures (rates or amounts) but not all.
|
|
1775
|
+
* - `official`: an official state document or enacted bill confirms every figure.
|
|
1776
|
+
*
|
|
1777
|
+
* Every level is recorded per state in `references/SOURCES.md` with the document URL and
|
|
1778
|
+
* retrieval date.
|
|
1779
|
+
*/
|
|
1780
|
+
const US_STATE_VERIFICATION_LEVELS = [
|
|
1781
|
+
"official",
|
|
1782
|
+
"partial",
|
|
1783
|
+
"reported",
|
|
1784
|
+
"unconfirmed"
|
|
1785
|
+
];
|
|
1697
1786
|
// src/us/state/parameters/index.ts
|
|
1698
1787
|
/**
|
|
1699
1788
|
* Consolidated statutory parameter table for all 50 US states and the District of Columbia
|
|
@@ -2549,10 +2638,18 @@ function calculateUsStateCredits(taxBeforeCreditsCents, personalCreditCents, dep
|
|
|
2549
2638
|
function cents(amounts, status, currency) {
|
|
2550
2639
|
return require_clamp.toMinorUnits(amounts[status], currency, "state.phaseOutThreshold");
|
|
2551
2640
|
}
|
|
2641
|
+
function reductionStepCents(step, currency) {
|
|
2642
|
+
require_clamp.validateMonetaryAmount(step, "state.phaseOutReductionStep");
|
|
2643
|
+
const centsPerStep = require_clamp.toMinorUnits(step, currency, "state.phaseOutReductionStep");
|
|
2644
|
+
if (centsPerStep < 1) throw new require_clamp.TaxValidationError("state.phaseOutReductionStep", step, "Reduction step must be at least one minor unit");
|
|
2645
|
+
return centsPerStep;
|
|
2646
|
+
}
|
|
2552
2647
|
function linearReduction(amountCents, excessCents, rule, status, currency) {
|
|
2553
2648
|
const widthCents = cents(rule.width, status, currency);
|
|
2554
2649
|
if (excessCents >= widthCents) return amountCents;
|
|
2555
|
-
return Math.round(amountCents * excessCents / widthCents);
|
|
2650
|
+
if (rule.reductionStep === void 0) return Math.round(amountCents * excessCents / widthCents);
|
|
2651
|
+
const step = reductionStepCents(rule.reductionStep, currency);
|
|
2652
|
+
return Math.floor(amountCents * excessCents / (widthCents * step)) * step;
|
|
2556
2653
|
}
|
|
2557
2654
|
function steppedReduction(amountCents, excessCents, rule, status, currency) {
|
|
2558
2655
|
const steps = Math.ceil(excessCents / cents(rule.step, status, currency));
|
|
@@ -2568,12 +2665,15 @@ function tieredReduction(amountCents, agiCents, rule, status, currency) {
|
|
|
2568
2665
|
/**
|
|
2569
2666
|
* Applies a statutory income-based phase-out to a deduction or exemption.
|
|
2570
2667
|
*
|
|
2571
|
-
* Math: linear removes amount x (AGI - start) / width
|
|
2572
|
-
* amount for each step or fraction above start
|
|
2573
|
-
* rate x (AGI up to second - start) + secondRate x (AGI -
|
|
2574
|
-
* amount. Nothing is removed at or below the start
|
|
2575
|
-
*
|
|
2576
|
-
*
|
|
2668
|
+
* Math: linear removes amount x (AGI - start) / width, rounded down to any `reductionStep`
|
|
2669
|
+
* multiple; stepped removes ratePerStep of the amount for each step or fraction above start
|
|
2670
|
+
* (capped at 100%); tiered removes rate x (AGI up to second - start) + secondRate x (AGI -
|
|
2671
|
+
* second), capped at maxShare of the amount. Nothing is removed at or below the start
|
|
2672
|
+
* threshold.
|
|
2673
|
+
* Units: AGI and amounts are integer cents; thresholds and any reduction step are major dollars
|
|
2674
|
+
* converted to cents.
|
|
2675
|
+
* Throws: TaxValidationError if a threshold cannot be represented as safe integer cents, or if
|
|
2676
|
+
* a reduction step is negative or below one minor unit.
|
|
2577
2677
|
*
|
|
2578
2678
|
* @param amountCents Deduction or exemption before the phase-out, in integer cents.
|
|
2579
2679
|
* @param agiCents Federal adjusted gross income in integer cents.
|
|
@@ -2581,7 +2681,8 @@ function tieredReduction(amountCents, agiCents, rule, status, currency) {
|
|
|
2581
2681
|
* @param phaseOut Optional statutory phase-out rule.
|
|
2582
2682
|
* @param currency Supported statutory currency threaded for minor-unit conversion.
|
|
2583
2683
|
* @returns The amount still allowed after the phase-out, in integer cents.
|
|
2584
|
-
* @statute 36 M.R.S. § 5124-C(2); Minn. Stat. §§ 290.0121 subd. 2,
|
|
2684
|
+
* @statute 36 M.R.S. § 5124-C(2); S.C. Code § 12-6-1140(15); Minn. Stat. §§ 290.0121 subd. 2,
|
|
2685
|
+
* 290.0123 subd. 5.
|
|
2585
2686
|
*/
|
|
2586
2687
|
function applyUsStatePhaseOut(amountCents, agiCents, status, phaseOut, currency) {
|
|
2587
2688
|
if (!phaseOut) return amountCents;
|
|
@@ -2906,6 +3007,7 @@ exports.US_2026_PREFERENTIAL_BRACKETS = US_2026_PREFERENTIAL_BRACKETS;
|
|
|
2906
3007
|
exports.US_2026_STANDARD_DEDUCTION = US_2026_STANDARD_DEDUCTION;
|
|
2907
3008
|
exports.US_2026_STATE_PARAMETERS = US_2026_STATE_PARAMETERS;
|
|
2908
3009
|
exports.US_STATE_CODES = US_STATE_CODES;
|
|
3010
|
+
exports.US_STATE_VERIFICATION_LEVELS = US_STATE_VERIFICATION_LEVELS;
|
|
2909
3011
|
exports.UsAdjustmentField = UsAdjustmentField;
|
|
2910
3012
|
exports.UsAmtField = UsAmtField;
|
|
2911
3013
|
exports.UsCreditField = UsCreditField;
|