@mx-cartographer/experiences 9.5.0-alpha.al0 → 9.5.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/CHANGELOG.md +4 -1
- package/dist/accounts/components/AccountListItem.es.js +1 -1
- package/dist/accounts/components/AccountsList.es.js +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountConnection.es.js +3 -3
- package/dist/accounts/components/detailsdrawer/Accounts/ConnectionErrorMessage.es.js +3 -3
- package/dist/accounts/utils/AccountFields.es.js +11 -11
- package/dist/budgets/BubbleBudgetsMiniWidget.es.js +1 -1
- package/dist/budgets/components/Overview.es.js +1 -1
- package/dist/budgets/components/addbudget/UnbudgetedRow.es.js +4 -4
- package/dist/budgets/components/shared/BudgetDetailsTopSection.es.js +1 -1
- package/dist/cashflow/CashflowOnboarding.es.js +57 -55
- package/dist/cashflow/CashflowOnboarding.es.js.map +1 -1
- package/dist/cashflow/CashflowWidget.es.js +1 -1
- package/dist/cashflow/components/SummaryTab.es.js +1 -1
- package/dist/common/hooks/index.d.ts +1 -0
- package/dist/common/hooks/useRepeatingTransactionEligibility.d.ts +6 -0
- package/dist/common/hooks/useRepeatingTransactionEligibility.es.js +12 -0
- package/dist/common/hooks/useRepeatingTransactionEligibility.es.js.map +1 -0
- package/dist/common/index.es.js +114 -112
- package/dist/core/constants/repeatingTransactions.d.ts +5 -2
- package/dist/core/constants/repeatingTransactions.es.js +24 -9
- package/dist/core/constants/repeatingTransactions.es.js.map +1 -1
- package/dist/core/index.es.js +79 -79
- package/dist/core/stores/AccountStore.es.js +1 -1
- package/dist/core/stores/CashflowStore.es.js +1 -1
- package/dist/core/stores/CategoryStore.es.js +1 -1
- package/dist/core/stores/FinstrongStore.es.js +4 -4
- package/dist/core/stores/GoalStore.es.js +1 -1
- package/dist/core/stores/RecurringTransactionsStore.es.js +9 -9
- package/dist/core/stores/SettingsStore.es.js +7 -7
- package/dist/core/stores/TransactionStore.es.js +13 -13
- package/dist/core/utils/BudgetUtil.es.js +1 -1
- package/dist/core/utils/DateUtil.es.js +5 -5
- package/dist/core/utils/DebtUtils.es.js +6 -6
- package/dist/core/utils/RecurringTransactionsUtil.d.ts +13 -1
- package/dist/core/utils/RecurringTransactionsUtil.es.js +111 -106
- package/dist/core/utils/RecurringTransactionsUtil.es.js.map +1 -1
- package/dist/core/utils/TransactionUtils.es.js +6 -6
- package/dist/debts/DebtsWidget.es.js +1 -1
- package/dist/debts/components/DebtsChart.es.js +4 -4
- package/dist/debts/components/DebtsTable.es.js +6 -6
- package/dist/debts/components/actions/ExtraPaymentAction.es.js +4 -4
- package/dist/debts/components/actions/InterestRateAction.es.js +4 -4
- package/dist/debts/components/actions/MonthlyPaymentAction.es.js +4 -4
- package/dist/debts/components/actions/OriginalBalanceAction.es.js +4 -4
- package/dist/debts/components/debtsdrawer/DebtScheduleTab.es.js +1 -1
- package/dist/finstrong/components/MaintainingEmergencySavings/MaintainingEmergencySavingsContent.es.js +4 -4
- package/dist/finstrong/components/ProfileDrawer.es.js +1 -1
- package/dist/finstrong/components/SaveEnoughToLiveOn/AvailableTabContent.es.js +1 -1
- package/dist/finstrong/components/onboarding/OnboardingStepsDrawer.es.js +106 -104
- package/dist/finstrong/components/onboarding/OnboardingStepsDrawer.es.js.map +1 -1
- package/dist/finstrong/components/shared/Accounts.es.js +4 -4
- package/dist/finstrong/components/shared/Transactions.es.js +4 -4
- package/dist/goals/GoalsWidget.es.js +7 -7
- package/dist/goals/components/AccountSelectionDrawer.es.js +4 -4
- package/dist/goals/components/AddGoal.es.js +1 -1
- package/dist/goals/components/GoalDetailsDrawer.es.js +1 -1
- package/dist/goals/components/ManageGoals.es.js +1 -1
- package/dist/goals/components/actions/ChangeAccountAction.es.js +1 -1
- package/dist/goals/components/managegoals/OngoingListItem.es.js +4 -4
- package/dist/insights/components/shared/DrillDownCalculation/DrillDownCalculation.es.js +1 -1
- package/dist/insights-v2/actionBlocks/TransactionHistoryBlock/TransactionHistoryBlock.es.js +4 -4
- package/dist/insights-v2/blocks/ChartBlocks/BarchartBlock/utils.es.js +1 -1
- package/dist/insights-v2/blocks/ComponentBlocks/BudgetBlock/BudgetBlock.es.js +1 -1
- package/dist/investments/InvestmentsWidget.es.js +7 -7
- package/dist/recurringtransactions/components/RecurringTransactionDetails.es.js +10 -10
- package/dist/recurringtransactions/components/RecurringTransactionDetailsDrawer.es.js +4 -4
- package/dist/recurringtransactions/components/RecurringTransactionList.es.js +10 -10
- package/dist/recurringtransactions/components/actions/LinkTransactionDrawer.es.js +4 -4
- package/dist/recurringtransactions/components/actions/PaymentScheduleAction.es.js +6 -6
- package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js +45 -43
- package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/ManageExpenses.es.js +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/ManageIncome.es.js +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/RecurringRow.es.js +6 -6
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.d.ts +7 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js +15 -16
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js.map +1 -1
- package/dist/settings/components/devices/DeviceList.es.js +1 -1
- package/dist/settings/components/devices/DeviceTable.es.js +1 -1
- package/dist/settings/components/notifications/AccountProfileListItem.es.js +5 -5
- package/dist/settings/components/notifications/NotificationSettings.es.js +1 -1
- package/dist/spending/components/SpendingDonut.es.js +1 -1
- package/dist/transactions/components/shared/TransactionDetails.es.js +8 -8
- package/dist/transactions/components/shared/TransactionList.es.js +4 -4
- package/dist/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.es.js +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/DateAction.es.js +6 -6
- package/dist/transactions/components/splitmanager/SplitManager.es.js +4 -4
- package/dist/transactions/utils/Transactions.es.js +1 -1
- package/dist/trends/components/CategoriesListItem.es.js +4 -4
- package/dist/trends/components/CategoryDetails.es.js +6 -6
- package/dist/trends/components/TrendsChart.es.js +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { RepeatingTransactionsApi as l } from "../api/RepeatingTransactionsApi.es.js";
|
|
2
1
|
import { RecurrenceStatus as n, RecurrenceType as c } from "../types/RepeatingTransaction.es.js";
|
|
3
2
|
import { augmentRepeatingTransactions as o, buildAllRecurrences as m } from "../utils/RecurringTransactionsUtil.es.js";
|
|
3
|
+
import { RepeatingTransactionsApi as l } from "../api/RepeatingTransactionsApi.es.js";
|
|
4
4
|
import { endOfMonth as R } from "date-fns/endOfMonth";
|
|
5
5
|
import { isBefore as T } from "date-fns/isBefore";
|
|
6
6
|
import { startOfMonth as f } from "date-fns/startOfMonth";
|
|
@@ -8,8 +8,8 @@ import { startOfToday as s } from "date-fns/startOfToday";
|
|
|
8
8
|
import { isSameDay as g } from "date-fns/isSameDay";
|
|
9
9
|
import { isWithinInterval as h } from "date-fns/isWithinInterval";
|
|
10
10
|
import { subDays as y } from "date-fns/subDays";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
11
|
+
import { isAfter as u } from "date-fns/isAfter";
|
|
12
|
+
import { makeAutoObservable as S, runInAction as p } from "mobx";
|
|
13
13
|
var d = (e, t) => h(t.expectedDate, e), a = (e, t) => e + t.amount, U = class {
|
|
14
14
|
globalStore;
|
|
15
15
|
api = new l("/", "");
|
|
@@ -48,7 +48,7 @@ var d = (e, t) => h(t.expectedDate, e), a = (e, t) => e + t.amount, U = class {
|
|
|
48
48
|
upcomingExpensesForRange = (e) => this.recurrencesForRange(e).filter((t) => t.type === c.Expense && t.status === n.Upcoming);
|
|
49
49
|
incomeForRange = (e) => this.recurrencesForRange(e).filter((t) => t.type === c.Income);
|
|
50
50
|
upcomingIncomeForRange = (e) => this.incomeForRange(e).filter((t) => t.status === n.Upcoming);
|
|
51
|
-
nextIncomeForRange = (e) => this.upcomingIncomeForRange(e).find((t) =>
|
|
51
|
+
nextIncomeForRange = (e) => this.upcomingIncomeForRange(e).find((t) => u(t.expectedDate, s()));
|
|
52
52
|
get recurrences() {
|
|
53
53
|
return this.recurrencesForRange(this.dateRange);
|
|
54
54
|
}
|
|
@@ -56,7 +56,7 @@ var d = (e, t) => h(t.expectedDate, e), a = (e, t) => e + t.amount, U = class {
|
|
|
56
56
|
return this.recurrences.filter((e) => e.status === n.Paid || e.status === n.Missed);
|
|
57
57
|
}
|
|
58
58
|
get upcomingRecurrences() {
|
|
59
|
-
return this.recurrences.filter((e) =>
|
|
59
|
+
return this.recurrences.filter((e) => u(e.expectedDate, y(s(), 3)) && T(e.expectedDate, this.dateRange.end) && e.status === n.Upcoming);
|
|
60
60
|
}
|
|
61
61
|
get expenses() {
|
|
62
62
|
return this.recurrences.filter((e) => e.type === c.Expense);
|
|
@@ -71,7 +71,7 @@ var d = (e, t) => h(t.expectedDate, e), a = (e, t) => e + t.amount, U = class {
|
|
|
71
71
|
return this.income.filter((e) => e.status === n.Upcoming);
|
|
72
72
|
}
|
|
73
73
|
get nextIncomeRecurrence() {
|
|
74
|
-
return this.upcomingIncome.find((e) =>
|
|
74
|
+
return this.upcomingIncome.find((e) => u(e.expectedDate, s()));
|
|
75
75
|
}
|
|
76
76
|
get currentMonthExpenses() {
|
|
77
77
|
return this.expenses.filter((e) => d(this.dateRange, e));
|
|
@@ -136,7 +136,7 @@ var d = (e, t) => h(t.expectedDate, e), a = (e, t) => e + t.amount, U = class {
|
|
|
136
136
|
return await this.globalStore.transactionStore.updateTransaction({
|
|
137
137
|
...t,
|
|
138
138
|
repeating_transaction_guid: r.guid
|
|
139
|
-
}),
|
|
139
|
+
}), p(() => {
|
|
140
140
|
this.repeatingTransactions = [...this.repeatingTransactions, ...o(this.globalStore.accountStore.visibleAccounts, [r], this.globalStore.transactionStore.transactions)];
|
|
141
141
|
}), this.setAlert(this.copy.add_repeating_transaction_success, "success"), !0;
|
|
142
142
|
} catch (r) {
|
|
@@ -145,7 +145,7 @@ var d = (e, t) => h(t.expectedDate, e), a = (e, t) => e + t.amount, U = class {
|
|
|
145
145
|
};
|
|
146
146
|
deleteRepeatingTransaction = async (e) => {
|
|
147
147
|
try {
|
|
148
|
-
return await this.api.deleteRepeatingTransaction(e),
|
|
148
|
+
return await this.api.deleteRepeatingTransaction(e), p(() => {
|
|
149
149
|
this.repeatingTransactions = this.repeatingTransactions.filter((t) => t.guid !== e);
|
|
150
150
|
}), this.setAlert(this.copy.remove_repeating_transaction_success, "success"), !0;
|
|
151
151
|
} catch (t) {
|
|
@@ -155,7 +155,7 @@ var d = (e, t) => h(t.expectedDate, e), a = (e, t) => e + t.amount, U = class {
|
|
|
155
155
|
updateRepeatingTransaction = async (e) => {
|
|
156
156
|
try {
|
|
157
157
|
const t = await this.api.updateRepeatingTransaction(e), r = this.repeatingTransactions.findIndex((i) => i.guid === t.guid);
|
|
158
|
-
return r < 0 ? !1 : (
|
|
158
|
+
return r < 0 ? !1 : (p(() => {
|
|
159
159
|
this.repeatingTransactions = [
|
|
160
160
|
...this.repeatingTransactions.slice(0, r),
|
|
161
161
|
...o(this.globalStore.accountStore.visibleAccounts, [t], this.globalStore.transactionStore.transactions),
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { AccountNotificationTypes as r, BudgetNotificationTypes as a, InsightNotificationTypes as l } from "../types/Notification.es.js";
|
|
2
|
+
import { SettingsApi as n } from "../api/SettingsApi.es.js";
|
|
3
|
+
import { TransactionApi as c } from "../api/TransactionApi.es.js";
|
|
4
4
|
import { augmentNotificationProfiles as u } from "../utils/SettingsUtil.es.js";
|
|
5
5
|
import { makeAutoObservable as p, runInAction as o } from "mobx";
|
|
6
6
|
var _ = class {
|
|
7
7
|
globalStore;
|
|
8
|
-
api = new
|
|
9
|
-
transactionApi = new
|
|
8
|
+
api = new n("/", "");
|
|
9
|
+
transactionApi = new c("/", "");
|
|
10
10
|
alert = {
|
|
11
11
|
message: "",
|
|
12
12
|
severity: void 0
|
|
@@ -16,7 +16,7 @@ var _ = class {
|
|
|
16
16
|
selectedRule = void 0;
|
|
17
17
|
transactionRules = [];
|
|
18
18
|
constructor(t) {
|
|
19
|
-
this.globalStore = t, this.api = new
|
|
19
|
+
this.globalStore = t, this.api = new n(t.endpoint, t.sessionToken, t.onError), this.transactionApi = new c(t.endpoint, t.sessionToken, t.onError), p(this);
|
|
20
20
|
}
|
|
21
21
|
get accountProfiles() {
|
|
22
22
|
const t = this.globalStore.appDataStore.clientCommunicationProfile;
|
|
@@ -24,7 +24,7 @@ var _ = class {
|
|
|
24
24
|
}
|
|
25
25
|
get budgetProfiles() {
|
|
26
26
|
const t = this.globalStore.appDataStore.clientCommunicationProfile;
|
|
27
|
-
return this.detailedNotificationProfiles.filter((e) => e.notification_type ===
|
|
27
|
+
return this.detailedNotificationProfiles.filter((e) => e.notification_type === a.BudgetExceeded && t.budget_exceeded_notifications_enabled || e.notification_type === a.BudgetOffTarget && t.budget_off_target_notifications_enabled);
|
|
28
28
|
}
|
|
29
29
|
get insightsProfiles() {
|
|
30
30
|
return this.detailedNotificationProfiles.filter((t) => Object.values(l).includes(t.notification_type));
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { TransactionType as T } from "../types/Transaction.es.js";
|
|
2
|
+
import { endOfUtcDay as d, startOfUtcDay as g } from "../utils/DateUtil.es.js";
|
|
3
|
+
import { BeatApi as l } from "../api/BeatApi.es.js";
|
|
4
|
+
import { TransactionApi as h } from "../api/TransactionApi.es.js";
|
|
5
|
+
import { upsertByGuid as f } from "../utils/upsertByGuid.es.js";
|
|
6
6
|
import { TABLE_CONST as S } from "../constants/Table.es.js";
|
|
7
7
|
import { COLUMN_NAMES as w, DEFAULT_TRANSACTION as y } from "../constants/Transaction.es.js";
|
|
8
8
|
import { buildDetailedTransactions as m, flattenTransactionsWithSplits as L, sortAndFilterTransactions as E } from "../utils/TransactionUtils.es.js";
|
|
@@ -11,13 +11,13 @@ import { isBefore as x } from "date-fns/isBefore";
|
|
|
11
11
|
import { startOfMonth as u } from "date-fns/startOfMonth";
|
|
12
12
|
import { startOfToday as c } from "date-fns/startOfToday";
|
|
13
13
|
import { subDays as D } from "date-fns/subDays";
|
|
14
|
-
import { makeAutoObservable as p, runInAction as o } from "mobx";
|
|
15
14
|
import { formatISO as A } from "date-fns/formatISO";
|
|
15
|
+
import { makeAutoObservable as p, runInAction as o } from "mobx";
|
|
16
16
|
var P = class {
|
|
17
17
|
globalStore;
|
|
18
18
|
uiStore;
|
|
19
|
-
api = new
|
|
20
|
-
beatApi = new
|
|
19
|
+
api = new h("/", "");
|
|
20
|
+
beatApi = new l("/", "");
|
|
21
21
|
associatedBeats = [];
|
|
22
22
|
associatedBeatsLoaded = !1;
|
|
23
23
|
associatedBeatsLoading = !1;
|
|
@@ -41,7 +41,7 @@ var P = class {
|
|
|
41
41
|
sortColumn = w.DATE;
|
|
42
42
|
sortDirection = S.DESC;
|
|
43
43
|
constructor(t) {
|
|
44
|
-
this.globalStore = t, this.uiStore = new R(), this.api = new
|
|
44
|
+
this.globalStore = t, this.uiStore = new R(), this.api = new h(t.endpoint, t.sessionToken, t.onError), this.beatApi = new l(t.endpoint, t.sessionToken, t.onError), p(this);
|
|
45
45
|
}
|
|
46
46
|
loadTransactionData = async () => {
|
|
47
47
|
this.globalStore.accountStore.isAccountDataLoaded || await this.globalStore.accountStore.loadAccountData(), this.globalStore.categoryStore.categoriesLoaded || await this.globalStore.categoryStore.loadCategories(), await Promise.all([
|
|
@@ -119,8 +119,8 @@ var P = class {
|
|
|
119
119
|
try {
|
|
120
120
|
const a = await this.api.addTransaction(t);
|
|
121
121
|
a && o(() => {
|
|
122
|
-
this.setTransactions(
|
|
123
|
-
const s = a.transaction_type ===
|
|
122
|
+
this.setTransactions(f(this.transactions, a, !0));
|
|
123
|
+
const s = a.transaction_type === T.CREDIT ? a.amount : -a.amount;
|
|
124
124
|
this.globalStore.accountStore.updateAccountBalance(a.account_guid, s);
|
|
125
125
|
});
|
|
126
126
|
} catch (a) {
|
|
@@ -191,7 +191,7 @@ var P = class {
|
|
|
191
191
|
if (!this.transactionsLoading) {
|
|
192
192
|
this.setIsLoading(!0), this.transactionsLoading = !0;
|
|
193
193
|
try {
|
|
194
|
-
const a = await this.api.getTransactionsByDateRange(
|
|
194
|
+
const a = await this.api.getTransactionsByDateRange(g(t), d(c()));
|
|
195
195
|
this.setTransactions(a), o(() => {
|
|
196
196
|
this.cachedStartDate = t;
|
|
197
197
|
});
|
|
@@ -319,7 +319,7 @@ var P = class {
|
|
|
319
319
|
};
|
|
320
320
|
loadEmbeddedInstanceTransactions = async (t) => {
|
|
321
321
|
try {
|
|
322
|
-
const a = await this.api.getTransactionsByDateRange(
|
|
322
|
+
const a = await this.api.getTransactionsByDateRange(g(t), d(c()));
|
|
323
323
|
this.cachedStartDate = t, this.transactions = a;
|
|
324
324
|
} catch (a) {
|
|
325
325
|
console.error("Error occurred while loading embedded instance transactions:", a), this.globalStore.captureException(a, { store: "TransactionStore" });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { buildDynamicCopy as f } from "./Localization.es.js";
|
|
2
|
-
import { findDetailedCategory as B, findDetailedSubCategory as y } from "./CategoryUtil.es.js";
|
|
3
2
|
import { formatCurrency as p } from "./NumberFormatting.es.js";
|
|
3
|
+
import { findDetailedCategory as B, findDetailedSubCategory as y } from "./CategoryUtil.es.js";
|
|
4
4
|
var x = (e) => e === void 0 || e === "" || Number(e) < 0 || isNaN(Number(e)), l = (e, t) => !e && !t ? 0 : !e && t ? 101 : t / e * 100, m = (e, t) => {
|
|
5
5
|
const r = {
|
|
6
6
|
background: t.palette.success.main,
|
|
@@ -6,13 +6,13 @@ import { startOfToday as a } from "date-fns/startOfToday";
|
|
|
6
6
|
import { addYears as M } from "date-fns/addYears";
|
|
7
7
|
import { addQuarters as g } from "date-fns/addQuarters";
|
|
8
8
|
import { addWeeks as y } from "date-fns/addWeeks";
|
|
9
|
-
import { getDay as v } from "date-fns/getDay";
|
|
10
|
-
import { nextDay as U } from "date-fns/nextDay";
|
|
11
|
-
import { setDate as u } from "date-fns/setDate";
|
|
12
9
|
import { fromUnixTime as x } from "date-fns/fromUnixTime";
|
|
10
|
+
import { nextDay as v } from "date-fns/nextDay";
|
|
11
|
+
import { setDate as u } from "date-fns/setDate";
|
|
12
|
+
import { getDay as U } from "date-fns/getDay";
|
|
13
13
|
var B = (t) => {
|
|
14
|
-
const e =
|
|
15
|
-
let r =
|
|
14
|
+
const e = U(t);
|
|
15
|
+
let r = v(t, e);
|
|
16
16
|
for (; n(r, a()); ) r = y(r, 1);
|
|
17
17
|
return r;
|
|
18
18
|
}, H = (t) => {
|
|
@@ -3,8 +3,8 @@ import { DebtPriority as b } from "../constants/Debts.es.js";
|
|
|
3
3
|
import { addMonths as E } from "date-fns/addMonths";
|
|
4
4
|
import { startOfMonth as x } from "date-fns/startOfMonth";
|
|
5
5
|
import { fromUnixTime as d } from "date-fns/fromUnixTime";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { getUnixTime as w } from "date-fns/getUnixTime";
|
|
7
|
+
import { getDate as T } from "date-fns/getDate";
|
|
8
8
|
var F = { unnamed_label: "Unnamed Debt" }, G = (a, n, t = 0) => {
|
|
9
9
|
const o = a.map((s) => ({ ...s }));
|
|
10
10
|
S(o, n);
|
|
@@ -63,10 +63,10 @@ function P(a, n) {
|
|
|
63
63
|
guid: a.guid
|
|
64
64
|
};
|
|
65
65
|
if (n) {
|
|
66
|
-
const o = n.payment_due_at ?
|
|
66
|
+
const o = n.payment_due_at ? T(d(n.payment_due_at)) : 1, i = x(/* @__PURE__ */ new Date()).setDate(o);
|
|
67
67
|
t.balance = Math.abs(n.amount - n.current_amount), t.interest_rate = n.interest_rate, t.is_paid_off = n.is_complete, t.monthly_payment = n.monthly_payment, t.name = n.name, t.original_balance = n.initial_amount, t.payment_due_date = i;
|
|
68
68
|
} else {
|
|
69
|
-
const o = a.payment_due_at ?
|
|
69
|
+
const o = a.payment_due_at ? T(d(a.payment_due_at)) : 1, i = x(/* @__PURE__ */ new Date()).setDate(o), e = a.balance ?? 0, r = a.minimum_payment ?? void 0, m = a.interest_rate ?? void 0;
|
|
70
70
|
t.balance = Math.max(e, 0), t.interest_rate = m, t.is_paid_off = e === 0, t.monthly_payment = r, t.name = a?.name ?? F.unnamed_label, t.original_balance = a.original_balance, t.payment_due_date = i;
|
|
71
71
|
}
|
|
72
72
|
return t.is_impossible = !1, t.priority = void 0, t.projected_payoff_date = void 0, t;
|
|
@@ -114,14 +114,14 @@ var I = (a) => (a[a.length - 1] || {}).timestamp, S = (a, n) => {
|
|
|
114
114
|
interest: t,
|
|
115
115
|
payment: p,
|
|
116
116
|
principal: p,
|
|
117
|
-
timestamp:
|
|
117
|
+
timestamp: w(E(d(i), m + 1))
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
120
|
return e;
|
|
121
121
|
}
|
|
122
122
|
const r = t / 1200;
|
|
123
123
|
for (let m = 0; m < a; m++) {
|
|
124
|
-
const s =
|
|
124
|
+
const s = w(E(d(i), m + 1)), c = Math.pow(1 + r, m), p = n * c - o * ((c - 1) / r), _ = Math.pow(1 + r, m + 1), l = n * _ - o * ((_ - 1) / r), y = o + Math.min(l, 0), u = p * r;
|
|
125
125
|
e.push({
|
|
126
126
|
balance: Math.max(0, l),
|
|
127
127
|
interest: u,
|
|
@@ -11,4 +11,16 @@ export declare const groupRecurrencesByDate: (recurrences: Recurrence[]) => Grou
|
|
|
11
11
|
export declare const getFrequencyLabel: (copy: RecurringCopy, repeatingTransaction: RepeatingTransaction, showOrdinal: boolean) => string;
|
|
12
12
|
export declare const getNextPaymentDate: (frequency: Frequency, date: Date, recurrenceDay?: number, secondRecurrenceDay?: number) => Date;
|
|
13
13
|
export declare const getNextUpcomingDate: (recurringTransaction: RepeatingTransaction, recurrences: Recurrence[]) => Date;
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Mirrors Sherlock's recurrence eligibility (`RepeatingTransaction#has_detectable_recurrences` +
|
|
16
|
+
* `Sherlock::Recurrence`): a supported account type, plus either a merchant or a description with
|
|
17
|
+
* an allowlisted leaf bill category or income main class. Only the leaf category counts, so
|
|
18
|
+
* `top_level_category_guid` is deliberately ignored.
|
|
19
|
+
*
|
|
20
|
+
* Description is `payee || description || feed_description` — the value the create flows send and
|
|
21
|
+
* Sherlock validates — so checking the bare `description` would wrongly hide eligible transactions.
|
|
22
|
+
*
|
|
23
|
+
* `account` is required (may be undefined) so a caller can't forget it and silently fail everything;
|
|
24
|
+
* an unresolved account returns false, as Sherlock would never see such a transaction.
|
|
25
|
+
*/
|
|
26
|
+
export declare const isEligibleRepeatingTransaction: (transaction: Transaction, account: Account | undefined) => boolean;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { buildDynamicCopy as h } from "./Localization.es.js";
|
|
2
2
|
import { DATE_FORMATS_INTL as k, formatDate as O } from "../constants/DateFormats.es.js";
|
|
3
|
-
import { ALLOWED_MERCHANTLESS_BILL_CATEGORIES as
|
|
4
|
-
import { Frequency as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { ALLOWED_MERCHANTLESS_BILL_CATEGORIES as G, ALLOWED_MERCHANTLESS_INCOME_MAIN_CLASSES as B, VALID_REPEATING_TRANSACTION_ACCOUNT_TYPES as C } from "../constants/repeatingTransactions.es.js";
|
|
4
|
+
import { Frequency as s, RecurrenceStatus as f, RecurrenceType as N, RepeatingType as U } from "../types/RepeatingTransaction.es.js";
|
|
5
|
+
import { getNextBiMonthlyDate as q, getNextBiQuarterlyDate as P, getNextBiWeeklyDate as T, getNextMonthlyDate as F, getNextQuarterlyDate as H, getNextTwiceMonthlyDate as $, getNextWeeklyDate as K, getNextYearlyDate as V, getTwiceMonthlyDates as j } from "./DateUtil.es.js";
|
|
6
|
+
import { formatOrdinal as w } from "./NumberFormatting.es.js";
|
|
7
7
|
import { addDays as S } from "date-fns/addDays";
|
|
8
8
|
import { addMonths as _ } from "date-fns/addMonths";
|
|
9
9
|
import { isBefore as i } from "date-fns/isBefore";
|
|
@@ -11,79 +11,79 @@ import { startOfToday as x } from "date-fns/startOfToday";
|
|
|
11
11
|
import { subMonths as z } from "date-fns/subMonths";
|
|
12
12
|
import { isSameDay as J } from "date-fns/isSameDay";
|
|
13
13
|
import { addYears as Y } from "date-fns/addYears";
|
|
14
|
-
import { subDays as
|
|
15
|
-
import { subYears as
|
|
16
|
-
import {
|
|
17
|
-
import { addQuarters as Q } from "date-fns/addQuarters";
|
|
14
|
+
import { subDays as W } from "date-fns/subDays";
|
|
15
|
+
import { subYears as X } from "date-fns/subYears";
|
|
16
|
+
import { addQuarters as I } from "date-fns/addQuarters";
|
|
18
17
|
import { addWeeks as E } from "date-fns/addWeeks";
|
|
18
|
+
import { differenceInDays as Z } from "date-fns/differenceInDays";
|
|
19
|
+
import { formatISO as ee } from "date-fns/formatISO";
|
|
20
|
+
import { fromUnixTime as te } from "date-fns/fromUnixTime";
|
|
21
|
+
import { getUnixTime as l } from "date-fns/getUnixTime";
|
|
22
|
+
import { isAfter as p } from "date-fns/isAfter";
|
|
23
|
+
import { lastDayOfMonth as re } from "date-fns/lastDayOfMonth";
|
|
19
24
|
import { nextDay as M } from "date-fns/nextDay";
|
|
25
|
+
import { parseISO as Q } from "date-fns/parseISO";
|
|
20
26
|
import { setDate as g } from "date-fns/setDate";
|
|
21
|
-
import {
|
|
22
|
-
import { getUnixTime as l } from "date-fns/getUnixTime";
|
|
23
|
-
import { isAfter as f } from "date-fns/isAfter";
|
|
24
|
-
import { formatISO as ee } from "date-fns/formatISO";
|
|
25
|
-
import { lastDayOfMonth as te } from "date-fns/lastDayOfMonth";
|
|
26
|
-
import { parseISO as I } from "date-fns/parseISO";
|
|
27
|
-
import { setDay as re } from "date-fns/setDay";
|
|
27
|
+
import { setDay as ae } from "date-fns/setDay";
|
|
28
28
|
import { setDayOfYear as L } from "date-fns/setDayOfYear";
|
|
29
|
-
import { subQuarters as
|
|
30
|
-
import { subWeeks as
|
|
31
|
-
var
|
|
29
|
+
import { subQuarters as R } from "date-fns/subQuarters";
|
|
30
|
+
import { subWeeks as ce } from "date-fns/subWeeks";
|
|
31
|
+
var ne = (e) => {
|
|
32
32
|
if (!e) return "";
|
|
33
33
|
let c = e.user_name || e.feed_name || "";
|
|
34
34
|
return e.account_number && (c = `${c} *${e.account_number}`), c;
|
|
35
|
-
},
|
|
36
|
-
const r = [], n = e.recurrence_type ===
|
|
35
|
+
}, oe = (e, c) => {
|
|
36
|
+
const r = [], n = e.recurrence_type === s.EveryYear, t = e.transactions.find((m) => m.repeating_transaction_guid === e.guid);
|
|
37
37
|
if (!n && !t) return [];
|
|
38
|
-
const a =
|
|
38
|
+
const a = Q(e.predicted_occurs_on), u = {
|
|
39
39
|
accountGuid: e.account?.guid || "",
|
|
40
40
|
amount: e.amount,
|
|
41
41
|
categoryGuid: t?.category_guid || "",
|
|
42
42
|
expectedDate: a,
|
|
43
43
|
frequency: e.recurrence_type,
|
|
44
44
|
institutionGuid: e.account?.institution_guid || "",
|
|
45
|
-
institutionName:
|
|
45
|
+
institutionName: ne(e.account),
|
|
46
46
|
merchantGuid: e.merchant_guid,
|
|
47
47
|
name: e.description,
|
|
48
48
|
recurrenceDay: e.recurrence_day,
|
|
49
49
|
repeatingTransactionGuid: e.guid,
|
|
50
50
|
secondRecurrenceDay: e.second_recurrence_day,
|
|
51
|
-
status:
|
|
52
|
-
type: e.repeating_transaction_type ===
|
|
51
|
+
status: f.Upcoming,
|
|
52
|
+
type: e.repeating_transaction_type === U.Income ? N.Income : N.Expense,
|
|
53
53
|
transaction: void 0
|
|
54
54
|
}, o = c.start, d = c.end;
|
|
55
55
|
switch (e.recurrence_type) {
|
|
56
|
-
case
|
|
57
|
-
r.push(...
|
|
56
|
+
case s.EveryWeek:
|
|
57
|
+
r.push(...se(u, o, d));
|
|
58
58
|
break;
|
|
59
|
-
case
|
|
60
|
-
r.push(...ue(
|
|
59
|
+
case s.EveryOtherWeek:
|
|
60
|
+
r.push(...ue(u, o, d));
|
|
61
61
|
break;
|
|
62
|
-
case
|
|
63
|
-
r.push(...
|
|
62
|
+
case s.TwiceAMonth:
|
|
63
|
+
r.push(...ie(u, o, d));
|
|
64
64
|
break;
|
|
65
|
-
case
|
|
66
|
-
r.push(...
|
|
65
|
+
case s.EveryMonth:
|
|
66
|
+
r.push(...de(u, o, d));
|
|
67
67
|
break;
|
|
68
|
-
case
|
|
69
|
-
r.push(...
|
|
68
|
+
case s.EveryOtherMonth:
|
|
69
|
+
r.push(...me(u, o, d));
|
|
70
70
|
break;
|
|
71
|
-
case
|
|
72
|
-
r.push(...
|
|
71
|
+
case s.EveryQuarter:
|
|
72
|
+
r.push(...ye(u, o, d));
|
|
73
73
|
break;
|
|
74
|
-
case
|
|
75
|
-
r.push(...
|
|
74
|
+
case s.EveryOtherQuarter:
|
|
75
|
+
r.push(..._e(u, o, d));
|
|
76
76
|
break;
|
|
77
|
-
case
|
|
78
|
-
r.push(...
|
|
77
|
+
case s.EveryYear:
|
|
78
|
+
r.push(...he(u, o, d));
|
|
79
79
|
}
|
|
80
80
|
const D = /* @__PURE__ */ new Set();
|
|
81
81
|
for (const m of r) {
|
|
82
|
-
const b = e.transactions.filter((y) => y.repeating_transaction_guid === e.guid && !D.has(y.guid)), v = b.find((y) => y.date > l(
|
|
83
|
-
v ? (D.add(v.guid), m.transaction = v, m.status =
|
|
82
|
+
const b = e.transactions.filter((y) => y.repeating_transaction_guid === e.guid && !D.has(y.guid)), v = b.find((y) => y.date > l(W(m.expectedDate, 5)) && y.date < l(S(m.expectedDate, 5))) || (i(m.expectedDate, x()) ? b.reduce((y, A) => Math.abs(A.date - l(m.expectedDate)) < (y ? Math.abs(y.date - l(m.expectedDate)) : 1 / 0) ? A : y, void 0) : void 0);
|
|
83
|
+
v ? (D.add(v.guid), m.transaction = v, m.status = f.Paid, m.occurredOnDate = te(v.date)) : i(m.expectedDate, W(x(), 3)) && (m.status = f.Missed);
|
|
84
84
|
}
|
|
85
85
|
return r;
|
|
86
|
-
},
|
|
86
|
+
}, se = (e, c, r) => {
|
|
87
87
|
const n = [];
|
|
88
88
|
let t = M(c, e.recurrenceDay);
|
|
89
89
|
for (; i(t, r); )
|
|
@@ -97,7 +97,7 @@ var ce = (e) => {
|
|
|
97
97
|
let t = e.expectedDate;
|
|
98
98
|
if (i(t, c)) for (; i(t, c); ) t = E(t, 2);
|
|
99
99
|
else {
|
|
100
|
-
for (;
|
|
100
|
+
for (; p(t, c) || J(t, c); ) t = ce(t, 2);
|
|
101
101
|
t = E(t, 2);
|
|
102
102
|
}
|
|
103
103
|
for (; i(t, r); )
|
|
@@ -106,7 +106,7 @@ var ce = (e) => {
|
|
|
106
106
|
expectedDate: t
|
|
107
107
|
}), t = S(t, 14);
|
|
108
108
|
return n;
|
|
109
|
-
},
|
|
109
|
+
}, ie = (e, c, r) => {
|
|
110
110
|
const n = [];
|
|
111
111
|
let t = g(c, e.recurrenceDay);
|
|
112
112
|
for (; i(t, r); )
|
|
@@ -114,14 +114,14 @@ var ce = (e) => {
|
|
|
114
114
|
...e,
|
|
115
115
|
expectedDate: t
|
|
116
116
|
}), t = _(t, 1);
|
|
117
|
-
let a = e.secondRecurrenceDay && e.secondRecurrenceDay < 28 ? g(c, e.secondRecurrenceDay) :
|
|
117
|
+
let a = e.secondRecurrenceDay && e.secondRecurrenceDay < 28 ? g(c, e.secondRecurrenceDay) : re(c);
|
|
118
118
|
for (; i(a, r); )
|
|
119
119
|
n.push({
|
|
120
120
|
...e,
|
|
121
121
|
expectedDate: a
|
|
122
122
|
}), a = _(a, 1);
|
|
123
123
|
return n;
|
|
124
|
-
},
|
|
124
|
+
}, de = (e, c, r) => {
|
|
125
125
|
const n = [];
|
|
126
126
|
let t = g(c, e.recurrenceDay);
|
|
127
127
|
for (n.push({
|
|
@@ -133,38 +133,38 @@ var ce = (e) => {
|
|
|
133
133
|
expectedDate: t
|
|
134
134
|
}), t = _(t, 1);
|
|
135
135
|
return n;
|
|
136
|
-
},
|
|
136
|
+
}, me = (e, c, r) => {
|
|
137
137
|
const n = [], t = e.expectedDate;
|
|
138
138
|
let a = i(t, r) ? t : z(t, 2);
|
|
139
139
|
for (; i(a, r); )
|
|
140
|
-
|
|
140
|
+
p(a, c) && n.push({
|
|
141
141
|
...e,
|
|
142
142
|
expectedDate: a
|
|
143
143
|
}), a = _(a, 2);
|
|
144
144
|
return n;
|
|
145
|
-
},
|
|
145
|
+
}, ye = (e, c, r) => {
|
|
146
146
|
const n = [], t = e.expectedDate;
|
|
147
|
-
let a = i(t, r) ? t :
|
|
147
|
+
let a = i(t, r) ? t : R(t, 1);
|
|
148
148
|
for (; i(a, r); )
|
|
149
|
-
|
|
149
|
+
p(a, c) && n.push({
|
|
150
150
|
...e,
|
|
151
151
|
expectedDate: a
|
|
152
|
-
}), a =
|
|
152
|
+
}), a = I(a, 1);
|
|
153
153
|
return n;
|
|
154
|
-
},
|
|
154
|
+
}, _e = (e, c, r) => {
|
|
155
155
|
const n = [], t = e.expectedDate;
|
|
156
|
-
let a = i(t, r) ? t :
|
|
156
|
+
let a = i(t, r) ? t : R(t, 2);
|
|
157
157
|
for (; i(a, r); )
|
|
158
|
-
|
|
158
|
+
p(a, c) && n.push({
|
|
159
159
|
...e,
|
|
160
160
|
expectedDate: a
|
|
161
|
-
}), a =
|
|
161
|
+
}), a = I(a, 2);
|
|
162
162
|
return n;
|
|
163
|
-
},
|
|
163
|
+
}, he = (e, c, r) => {
|
|
164
164
|
const n = [], t = e.expectedDate;
|
|
165
|
-
let a = i(t, r) ? t :
|
|
165
|
+
let a = i(t, r) ? t : X(t, 1);
|
|
166
166
|
for (; i(a, r); )
|
|
167
|
-
|
|
167
|
+
p(a, c) && n.push({
|
|
168
168
|
...e,
|
|
169
169
|
expectedDate: a
|
|
170
170
|
}), a = Y(a, 1);
|
|
@@ -172,22 +172,22 @@ var ce = (e) => {
|
|
|
172
172
|
}, $e = (e, c) => {
|
|
173
173
|
const r = [];
|
|
174
174
|
for (const n of e) {
|
|
175
|
-
const t =
|
|
175
|
+
const t = oe(n, c);
|
|
176
176
|
r.push(...t);
|
|
177
177
|
}
|
|
178
178
|
return r.sort((n, t) => l(n.occurredOnDate || n.expectedDate) - l(t.occurredOnDate || t.expectedDate));
|
|
179
179
|
}, Ke = (e, c, r) => {
|
|
180
180
|
const n = [];
|
|
181
181
|
for (const t of c) {
|
|
182
|
-
const a = r.filter((
|
|
182
|
+
const a = r.filter((u) => u.repeating_transaction_guid === t.guid);
|
|
183
183
|
r.length > 0 && n.push({
|
|
184
184
|
...t,
|
|
185
|
-
account: e.find((
|
|
185
|
+
account: e.find((u) => u.guid === t.account_guid),
|
|
186
186
|
transactions: a
|
|
187
187
|
});
|
|
188
188
|
}
|
|
189
189
|
return n;
|
|
190
|
-
},
|
|
190
|
+
}, Ve = (e) => e.reduce((c, r) => {
|
|
191
191
|
const n = ee(r.expectedDate, { representation: "date" }), t = c.find((a) => a.date.toString() === r.expectedDate.toString());
|
|
192
192
|
return t ? t.recurrences.push(r) : c.push({
|
|
193
193
|
date: r.expectedDate,
|
|
@@ -195,89 +195,94 @@ var ce = (e) => {
|
|
|
195
195
|
recurrences: [r]
|
|
196
196
|
}), c;
|
|
197
197
|
}, []), je = (e, c, r) => {
|
|
198
|
-
const n = M(x(), c.recurrence_day), t = L(x(), c.recurrence_day), a =
|
|
198
|
+
const n = M(x(), c.recurrence_day), t = L(x(), c.recurrence_day), a = w(c.recurrence_day), u = c.second_recurrence_day ? w(c.second_recurrence_day) : "";
|
|
199
199
|
let o = r ? h(e.monthly_ordinal, a) : e.monthly;
|
|
200
200
|
switch (c.recurrence_type) {
|
|
201
|
-
case
|
|
201
|
+
case s.EveryQuarter:
|
|
202
202
|
o = r ? h(e.quarterly_ordinal, a) : e.quarterly;
|
|
203
203
|
break;
|
|
204
|
-
case
|
|
204
|
+
case s.EveryWeek:
|
|
205
205
|
o = r ? h(e.weekly_ordinal, O(n, k.DAY_OF_WEEK)) : e.weekly;
|
|
206
206
|
break;
|
|
207
|
-
case
|
|
207
|
+
case s.EveryYear:
|
|
208
208
|
o = r ? h(e.anually_ordinal, O(t, k.MONTH_DAY)) : e.anually;
|
|
209
209
|
break;
|
|
210
|
-
case
|
|
210
|
+
case s.EveryOtherWeek:
|
|
211
211
|
o = r ? h(e.every_other_week_ordinal, O(n, k.DAY_OF_WEEK)) : e.every_other_week;
|
|
212
212
|
break;
|
|
213
|
-
case
|
|
213
|
+
case s.EveryOtherMonth:
|
|
214
214
|
o = r ? h(e.every_other_month_ordinal, a) : e.every_other_month;
|
|
215
215
|
break;
|
|
216
|
-
case
|
|
216
|
+
case s.EveryOtherQuarter:
|
|
217
217
|
o = r ? h(e.every_other_quarter_ordinal, a) : e.every_other_quarter;
|
|
218
218
|
break;
|
|
219
|
-
case
|
|
220
|
-
o = r ? h(e.twice_a_month_ordinal, a,
|
|
219
|
+
case s.TwiceAMonth:
|
|
220
|
+
o = r ? h(e.twice_a_month_ordinal, a, u) : e.twice_a_month;
|
|
221
221
|
}
|
|
222
222
|
return o;
|
|
223
|
-
},
|
|
223
|
+
}, le = (e, c, r, n) => {
|
|
224
224
|
let t = c;
|
|
225
|
-
r !== void 0 && (e ===
|
|
225
|
+
r !== void 0 && (e === s.EveryWeek || e === s.EveryOtherWeek ? t = ae(c, r) : e === s.EveryYear ? t = L(c, r) : t = g(c, r));
|
|
226
226
|
let a = t;
|
|
227
227
|
switch (e) {
|
|
228
|
-
case
|
|
228
|
+
case s.EveryWeek:
|
|
229
229
|
a = K(t);
|
|
230
230
|
break;
|
|
231
|
-
case
|
|
232
|
-
a =
|
|
231
|
+
case s.EveryOtherWeek:
|
|
232
|
+
a = T(t);
|
|
233
233
|
break;
|
|
234
|
-
case
|
|
234
|
+
case s.TwiceAMonth:
|
|
235
235
|
a = $(r ?? t.getDate(), n ?? 28);
|
|
236
236
|
break;
|
|
237
|
-
case
|
|
238
|
-
a =
|
|
237
|
+
case s.EveryMonth:
|
|
238
|
+
a = F(t);
|
|
239
239
|
break;
|
|
240
|
-
case
|
|
241
|
-
a =
|
|
240
|
+
case s.EveryOtherMonth:
|
|
241
|
+
a = q(t);
|
|
242
242
|
break;
|
|
243
|
-
case
|
|
243
|
+
case s.EveryQuarter:
|
|
244
244
|
a = H(t);
|
|
245
245
|
break;
|
|
246
|
-
case
|
|
247
|
-
a =
|
|
246
|
+
case s.EveryOtherQuarter:
|
|
247
|
+
a = P(t);
|
|
248
248
|
break;
|
|
249
|
-
case
|
|
250
|
-
a =
|
|
249
|
+
case s.EveryYear:
|
|
250
|
+
a = V(t);
|
|
251
251
|
}
|
|
252
252
|
return a;
|
|
253
253
|
}, ze = (e, c) => {
|
|
254
|
-
const r = c.find((o) => o.repeatingTransactionGuid === e.guid && o.status ===
|
|
254
|
+
const r = c.find((o) => o.repeatingTransactionGuid === e.guid && o.status === f.Upcoming);
|
|
255
255
|
if (r) return r.expectedDate;
|
|
256
|
-
const n = (o) => c.some((d) => d.repeatingTransactionGuid === e.guid && d.status ===
|
|
257
|
-
[
|
|
258
|
-
[
|
|
259
|
-
[
|
|
256
|
+
const n = (o) => c.some((d) => d.repeatingTransactionGuid === e.guid && d.status === f.Paid && Math.abs(Z(d.expectedDate, o)) <= 5), t = {
|
|
257
|
+
[s.EveryWeek]: (o) => E(o, 1),
|
|
258
|
+
[s.EveryOtherWeek]: (o) => E(o, 2),
|
|
259
|
+
[s.TwiceAMonth]: (o) => {
|
|
260
260
|
const d = j(e.recurrence_day, e.second_recurrence_day ?? 28);
|
|
261
|
-
return d.find((D) =>
|
|
261
|
+
return d.find((D) => p(D, o)) ?? d[d.length - 1];
|
|
262
262
|
},
|
|
263
|
-
[
|
|
264
|
-
[
|
|
265
|
-
[
|
|
266
|
-
[
|
|
267
|
-
[
|
|
268
|
-
}, a =
|
|
263
|
+
[s.EveryMonth]: (o) => _(o, 1),
|
|
264
|
+
[s.EveryOtherMonth]: (o) => _(o, 2),
|
|
265
|
+
[s.EveryQuarter]: (o) => _(o, 3),
|
|
266
|
+
[s.EveryOtherQuarter]: (o) => _(o, 6),
|
|
267
|
+
[s.EveryYear]: (o) => Y(o, 1)
|
|
268
|
+
}, a = le(e.recurrence_type, Q(e.predicted_occurs_on), e.recurrence_day, e.second_recurrence_day);
|
|
269
269
|
if (!n(a)) return a;
|
|
270
|
-
const
|
|
271
|
-
return
|
|
272
|
-
}, Je = (e
|
|
270
|
+
const u = t[e.recurrence_type];
|
|
271
|
+
return u ? u(a) : a;
|
|
272
|
+
}, Je = (e, c) => {
|
|
273
|
+
if (!c || !C.includes(c.account_type)) return !1;
|
|
274
|
+
if (e.merchant_guid && e.merchant_guid.trim() !== "") return !0;
|
|
275
|
+
const r = e.payee || e.description || e.feed_description;
|
|
276
|
+
return !r || r.trim() === "" ? !1 : e.category_guid && G.includes(e.category_guid) ? !0 : !!(e.main_class_guid && B.includes(e.main_class_guid));
|
|
277
|
+
};
|
|
273
278
|
export {
|
|
274
279
|
Ke as augmentRepeatingTransactions,
|
|
275
280
|
$e as buildAllRecurrences,
|
|
276
|
-
|
|
281
|
+
ne as buildInstitutionName,
|
|
277
282
|
je as getFrequencyLabel,
|
|
278
|
-
|
|
283
|
+
le as getNextPaymentDate,
|
|
279
284
|
ze as getNextUpcomingDate,
|
|
280
|
-
|
|
285
|
+
Ve as groupRecurrencesByDate,
|
|
281
286
|
Je as isEligibleRepeatingTransaction
|
|
282
287
|
};
|
|
283
288
|
|