feat(miniapp): carry overdue billing and admin role flows

This commit is contained in:
2026-03-23 15:44:55 +04:00
parent ee8c53d89b
commit 5af14e101e
44 changed files with 2965 additions and 329 deletions

View File

@@ -67,6 +67,9 @@ export const dictionary = {
homeUtilitiesTitle: 'Utilities payment',
homeRentTitle: 'Rent payment',
homeNoPaymentTitle: 'No payment period',
homeOverdueRentTitle: 'Overdue rent',
homeOverdueUtilitiesTitle: 'Overdue utilities',
homeOverduePeriodsLabel: 'Overdue periods: {periods}',
homeUtilitiesUpcomingLabel: 'Utilities starts {date}',
homeRentUpcomingLabel: 'Rent starts {date}',
homeFillUtilitiesTitle: 'Fill utilities',
@@ -139,7 +142,7 @@ export const dictionary = {
shareRent: 'Rent',
shareUtilities: 'Utilities',
shareOffset: 'Shared buys',
rentFxTitle: 'House rent FX',
rentFxTitle: 'Rent exchange rate',
sourceAmountLabel: 'Source',
settlementAmountLabel: 'Settlement',
fxEffectiveDateLabel: 'Locked',
@@ -158,6 +161,17 @@ export const dictionary = {
testingPreviewResidentAction: 'Preview resident',
testingCurrentRoleLabel: 'Real access',
testingPreviewRoleLabel: 'Previewing',
testingScenarioLabel: 'Demo scenario',
testingScenarioCurrentCycle: 'Current cycle',
testingScenarioCurrentCycleBody:
'Balanced current-period data with resolved and unresolved purchases, current utility bills, and partial payments from other members.',
testingScenarioOverdueUtilities: 'Overdue utilities',
testingScenarioOverdueUtilitiesBody:
'Shows utility overdue cards, current-cycle utility debt, and purchase carry-over that should survive after overdue closes.',
testingScenarioOverdueBoth: 'Overdue rent + utilities',
testingScenarioOverdueBothBody:
'Shows both overdue cards at once so you can test oldest-first payment routing and admin backfill flows.',
testingResetDemoStateAction: 'Reset demo state',
testingPeriodCurrentLabel: 'Dashboard period',
testingPeriodOverrideLabel: 'Period override',
testingPeriodOverridePlaceholder: 'YYYY-MM',
@@ -184,6 +198,8 @@ export const dictionary = {
copiedToast: 'Copied!',
quickPaymentTitle: 'Record payment',
quickPaymentBody: 'Quickly record a {type} payment for the current cycle.',
quickPaymentCurrentBody: 'Quickly record a {type} payment for the current cycle.',
quickPaymentOverdueBody: 'Quickly record a {type} payment for overdue periods.',
quickPaymentAmountLabel: 'Amount',
quickPaymentCurrencyLabel: 'Currency',
quickPaymentSubmitAction: 'Save payment',
@@ -202,6 +218,10 @@ export const dictionary = {
purchaseSaveAction: 'Save purchase',
purchaseBalanceAction: 'Balance',
purchaseRebalanceAction: 'Rebalance',
unresolvedPurchasesTitle: 'Outstanding purchases',
resolvedPurchasesTitle: 'Settled purchases',
unresolvedPurchasesEmpty: 'No unresolved purchases.',
resolvedPurchasesEmpty: 'No resolved purchases yet.',
purchaseDeleteAction: 'Delete',
deletingPurchase: 'Deleting purchase…',
savingPurchase: 'Saving purchase…',
@@ -320,6 +340,9 @@ export const dictionary = {
saveDisplayName: 'Save name',
savingDisplayName: 'Saving name…',
memberStatusLabel: 'Member status',
memberRoleLabel: 'Role',
memberRoleResident: 'Resident',
memberRoleAdmin: 'Admin',
saveMemberStatusAction: 'Save status',
savingMemberStatus: 'Saving status…',
memberStatusActive: 'Active',
@@ -341,6 +364,8 @@ export const dictionary = {
promoteAdminAction: 'Promote to admin',
promoteAdminLabel: 'Admin access',
promotingAdmin: 'Promoting…',
demoteAdminAction: 'Remove admin access',
demotingAdmin: 'Removing…',
residentHouseTitle: 'Household access',
residentHouseBody:
'Your admins manage household settings and approvals here. You can still switch your own language above.',
@@ -422,6 +447,9 @@ export const dictionary = {
homeUtilitiesTitle: 'Оплата коммуналки',
homeRentTitle: 'Оплата аренды',
homeNoPaymentTitle: 'Период без оплаты',
homeOverdueRentTitle: 'Просроченная аренда',
homeOverdueUtilitiesTitle: 'Просроченная коммуналка',
homeOverduePeriodsLabel: 'Просроченные периоды: {periods}',
homeUtilitiesUpcomingLabel: 'Коммуналка с {date}',
homeRentUpcomingLabel: 'Аренда с {date}',
homeFillUtilitiesTitle: 'Внести коммуналку',
@@ -494,7 +522,7 @@ export const dictionary = {
shareRent: 'Аренда',
shareUtilities: 'Коммуналка',
shareOffset: 'Общие покупки',
rentFxTitle: 'FX по аренде дома',
rentFxTitle: 'Курс для аренды',
sourceAmountLabel: 'Исходник',
settlementAmountLabel: 'Расчёт',
fxEffectiveDateLabel: 'Зафиксировано',
@@ -513,6 +541,17 @@ export const dictionary = {
testingPreviewResidentAction: 'Вид жителя',
testingCurrentRoleLabel: 'Реальный доступ',
testingPreviewRoleLabel: 'Сейчас показан',
testingScenarioLabel: 'Демо-сценарий',
testingScenarioCurrentCycle: 'Текущий цикл',
testingScenarioCurrentCycleBody:
'Сбалансированный текущий период: есть закрытые и незакрытые покупки, актуальные коммунальные счета и частичные оплаты от других участников.',
testingScenarioOverdueUtilities: 'Просроченная коммуналка',
testingScenarioOverdueUtilitiesBody:
'Показывает карточку просроченной коммуналки, долг текущего цикла и перенос покупок, который должен остаться после закрытия просрочки.',
testingScenarioOverdueBoth: 'Просрочены аренда и коммуналка',
testingScenarioOverdueBothBody:
'Показывает обе просроченные карточки сразу, чтобы можно было проверить oldest-first распределение оплат и админский ввод задним числом.',
testingResetDemoStateAction: 'Сбросить демо-данные',
testingPeriodCurrentLabel: 'Период (из API)',
testingPeriodOverrideLabel: 'Переопределить период',
testingPeriodOverridePlaceholder: 'YYYY-MM',
@@ -541,6 +580,8 @@ export const dictionary = {
copiedToast: 'Скопировано!',
quickPaymentTitle: 'Записать оплату',
quickPaymentBody: 'Быстро запиши оплату {type} за текущий цикл.',
quickPaymentCurrentBody: 'Быстро запиши оплату {type} за текущий цикл.',
quickPaymentOverdueBody: 'Быстро запиши оплату {type} за просроченные периоды.',
quickPaymentAmountLabel: 'Сумма',
quickPaymentCurrencyLabel: 'Валюта',
quickPaymentSubmitAction: 'Сохранить оплату',
@@ -559,6 +600,10 @@ export const dictionary = {
purchaseSaveAction: 'Сохранить покупку',
purchaseBalanceAction: 'Сбалансировать',
purchaseRebalanceAction: 'Перераспределить',
unresolvedPurchasesTitle: 'Незакрытые покупки',
resolvedPurchasesTitle: 'Закрытые покупки',
unresolvedPurchasesEmpty: 'Незакрытых покупок нет.',
resolvedPurchasesEmpty: 'Закрытых покупок пока нет.',
purchaseDeleteAction: 'Удалить',
deletingPurchase: 'Удаляем покупку…',
savingPurchase: 'Сохраняем покупку…',
@@ -678,6 +723,9 @@ export const dictionary = {
saveDisplayName: 'Сохранить имя',
savingDisplayName: 'Сохраняем имя…',
memberStatusLabel: 'Статус участника',
memberRoleLabel: 'Роль',
memberRoleResident: 'Житель',
memberRoleAdmin: 'Админ',
saveMemberStatusAction: 'Сохранить статус',
savingMemberStatus: 'Сохраняем статус…',
memberStatusActive: 'Активный',
@@ -699,6 +747,8 @@ export const dictionary = {
promoteAdminAction: 'Сделать админом',
promoteAdminLabel: 'Доступ админа',
promotingAdmin: 'Повышаем…',
demoteAdminAction: 'Убрать доступ админа',
demotingAdmin: 'Убираем…',
residentHouseTitle: 'Доступ к дому',
residentHouseBody:
'Настройками дома и подтверждением заявок управляют админы. Свой язык можно менять переключателем выше.',