Substantial-Presence Days
Apply one, one-third, and one-sixth day weights against a caller-supplied presence threshold.
Description
The substantial-presence calculation weights days from three calendar years.
When to use Substantial-Presence Days
Use this tool to apply one, one-third, and one-sixth day weights against a caller-supplied presence threshold.
Choose the specific arithmetic or checklist scenario and establish its input amounts, dates, rates and criteria from the applicable records. Keep currencies, periods and jurisdictions consistent; review the tool-specific assumptions before interpreting the result.
How to use Substantial-Presence Days and understand its results
- Choose the specific arithmetic or checklist scenario and establish its input amounts, dates, rates and criteria from the applicable records. Keep currencies, periods and jurisdictions consistent; review the tool-specific assumptions before interpreting the result.
- Enter currentYearDays, previousYearDays, secondPreviousYearDays, weightedDayThreshold using the field table and calculation rules, then run the tool.
- Read weightedPresenceDays, meetsWeightedThreshold. The explanation below defines the units, signs, ordering and any flags or placeholder values.
- If the tool reports an input issue, correct the values and run it again. Apply the stated assumptions when interpreting a successfully returned result.
| Input field | Meaning | Value type; see rules below | Requirement |
|---|---|---|---|
| currentYearDays | Current-year presence days | integer; minimum: 0; maximum: 366 | Required |
| previousYearDays | Previous-year presence days | integer; minimum: 0; maximum: 366 | Required |
| secondPreviousYearDays | Second-previous-year presence days | integer; minimum: 0; maximum: 366 | Required |
| weightedDayThreshold | Weighted-day threshold | number; minimum: 0 | Required |
Enter nonnegative integer days for each year, each no greater than 366, and a nonnegative threshold. Return weighted days and an inclusive threshold flag.
weighted=currentDays+previousDays/3+secondPreviousDays/6; meets=weighted≥threshold Units, indexing, boundary conditions and exceptional cases are defined in the calculation rules above.
| Output field | Meaning | Value type |
|---|---|---|
| weightedPresenceDays | Weighted presence days | number; minimum: 0 |
| meetsWeightedThreshold | Meets weighted threshold | boolean |
{
"input": {
"currentYearDays": 120,
"previousYearDays": 120,
"secondPreviousYearDays": 120,
"weightedDayThreshold": 183
},
"output": {
"weightedPresenceDays": 180,
"meetsWeightedThreshold": false
}
} Limitations and assumptions
The implementation does not apply the separate 31-current-year-day requirement, excluded days, treaty rules or exceptions. A passing weighted comparison alone does not establish tax residence.
Numeric inputs must be finite. Follow the calculation-specific rules for overflow, underflow and exceptional cases. Missing required fields, extra fields, wrong value types and violations of the calculation rules are input errors. A successfully returned false flag is an evaluated outcome; its meaning is explained above.
Alternative or Complementary methods
Use Duty-Day Income Allocation: Allocate compensation by caller-supplied jurisdiction and total duty days. For a complementary task, use Exit-Tax Threshold Screen: Compare expatriation facts with caller-supplied exit-tax thresholds.
Further background: Substantial Presence Test.
References
-
Substantial-Presence Days — tool.io
-
Substantial Presence Test — Internal Revenue Service
Similar or alternative tools
- Duty-Day Income Allocation
Allocate compensation by caller-supplied jurisdiction and total duty days.
- Exit-Tax Threshold Screen
Compare expatriation facts with caller-supplied exit-tax thresholds.