feat(payments): add transparent balance guidance

This commit is contained in:
2026-03-11 14:52:09 +04:00
parent 8401688032
commit 79f96ba45b
25 changed files with 3855 additions and 93 deletions

View File

@@ -345,6 +345,7 @@ function App() {
const [addingPayment, setAddingPayment] = createSignal(false)
const [billingForm, setBillingForm] = createSignal({
settlementCurrency: 'GEL' as 'USD' | 'GEL',
paymentBalanceAdjustmentPolicy: 'utilities' as 'utilities' | 'rent' | 'separate',
rentAmountMajor: '',
rentCurrency: 'USD' as 'USD' | 'GEL',
rentDueDay: 20,
@@ -530,6 +531,7 @@ function App() {
}))
setBillingForm({
settlementCurrency: payload.settings.settlementCurrency,
paymentBalanceAdjustmentPolicy: payload.settings.paymentBalanceAdjustmentPolicy,
rentAmountMajor: payload.settings.rentAmountMinor
? (Number(payload.settings.rentAmountMinor) / 100).toFixed(2)
: '',
@@ -2273,6 +2275,29 @@ function App() {
<option value="USD">USD</option>
</select>
</label>
<label class="settings-field settings-field--wide">
<span>{copy().paymentBalanceAdjustmentPolicy}</span>
<select
value={billingForm().paymentBalanceAdjustmentPolicy}
onChange={(event) =>
setBillingForm((current) => ({
...current,
paymentBalanceAdjustmentPolicy: event.currentTarget.value as
| 'utilities'
| 'rent'
| 'separate'
}))
}
>
<option value="utilities">
{copy().paymentBalanceAdjustmentUtilities}
</option>
<option value="rent">{copy().paymentBalanceAdjustmentRent}</option>
<option value="separate">
{copy().paymentBalanceAdjustmentSeparate}
</option>
</select>
</label>
<label class="settings-field">
<span>{copy().rentAmount}</span>
<input

View File

@@ -108,6 +108,10 @@ export const dictionary = {
topicUnbound: 'Unbound',
billingSettingsTitle: 'Billing settings',
settlementCurrency: 'Settlement currency',
paymentBalanceAdjustmentPolicy: 'Purchase balance adjustment',
paymentBalanceAdjustmentUtilities: 'Adjust through utilities',
paymentBalanceAdjustmentRent: 'Adjust through rent',
paymentBalanceAdjustmentSeparate: 'Keep purchases separate',
billingCycleTitle: 'Current billing cycle',
billingCycleEmpty: 'No open cycle',
billingCycleStatus: 'Current cycle currency: {currency}',
@@ -286,6 +290,10 @@ export const dictionary = {
topicUnbound: 'Не привязан',
billingSettingsTitle: 'Настройки биллинга',
settlementCurrency: 'Валюта расчёта',
paymentBalanceAdjustmentPolicy: 'Зачёт баланса по покупкам',
paymentBalanceAdjustmentUtilities: 'Зачитывать через коммуналку',
paymentBalanceAdjustmentRent: 'Зачитывать через аренду',
paymentBalanceAdjustmentSeparate: 'Держать покупки отдельно',
billingCycleTitle: 'Текущий billing cycle',
billingCycleEmpty: 'Нет открытого цикла',
billingCycleStatus: 'Валюта текущего цикла: {currency}',

View File

@@ -60,6 +60,7 @@ export interface MiniAppMember {
export interface MiniAppBillingSettings {
householdId: string
settlementCurrency: 'USD' | 'GEL'
paymentBalanceAdjustmentPolicy: 'utilities' | 'rent' | 'separate'
rentAmountMinor: string | null
rentCurrency: 'USD' | 'GEL'
rentDueDay: number
@@ -410,6 +411,7 @@ export async function updateMiniAppBillingSettings(
initData: string,
input: {
settlementCurrency?: 'USD' | 'GEL'
paymentBalanceAdjustmentPolicy?: 'utilities' | 'rent' | 'separate'
rentAmountMajor?: string
rentCurrency: 'USD' | 'GEL'
rentDueDay: number