{t(
- 'Review and close operational alerts without changing the underlying pending or manual financial settlement.'
+ 'Select one or more alerts and close them with one click. The underlying financial settlement record remains available for safe retry and audit.'
)}
@@ -172,21 +241,12 @@ export function BillingSettlementEvidence(
)}
- {formatLocalizedCount(
- props.data.reviewed_count,
- i18n.language,
- t,
- 'Reviewed record: {{count}}',
- 'Reviewed records: {{count}}'
- )}
-
-
- {t('Pending: {{count}}', {
+ {t('Open pending settlements: {{count}}', {
count: formatCount(props.data.pending_count, i18n.language),
})}
- {t('Manual: {{count}}', {
+ {t('Open manual settlements: {{count}}', {
count: formatCount(props.data.manual_count, i18n.language),
})}
@@ -230,25 +290,56 @@ export function BillingSettlementEvidence(
{props.data.items.length === 0 ? (
- {t('No unresolved reconciliation records.')}
+ {t('No open reconciliation alerts.')}
{t(
- 'There are no pending or manual positive final settlements requiring operator review.'
+ 'There are no pending or manual positive final settlements waiting for administrator review.'
)}
) : (
-
+
- ) : (
-
- {t('Not reviewed')}
-
- )}
- props.onSelectItem(item)}
+ onClick={() =>
+ props.onReviewTargets([
+ { id: item.id, revision: item.revision },
+ ])
+ }
+ disabled={props.reviewPending}
>
- {item.reconciliation_reviewed_at > 0 && (
-
- )}
- {item.reconciliation_reviewed_at > 0
- ? t('Edit review')
- : t('Review and close')}
+ {t('Review and close')}
diff --git a/web/default/src/features/smart-ops/components/settlement-review-dialog.tsx b/web/default/src/features/smart-ops/components/settlement-review-dialog.tsx
deleted file mode 100644
index 7a1207dd..00000000
--- a/web/default/src/features/smart-ops/components/settlement-review-dialog.tsx
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
-Copyright (C) 2023-2026 MAX-API-Next
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see .
-
-For commercial licensing, please contact https://github.com/MAX-API-Next/MAX-API/issues
-*/
-import { useState, type ReactElement } from 'react'
-import { useMutation, useQueryClient } from '@tanstack/react-query'
-import { Loader2, LockKeyhole, LockOpen } from 'lucide-react'
-import { useTranslation } from 'react-i18next'
-import { toast } from 'sonner'
-import { handleServerError } from '@/lib/handle-server-error'
-import { Button } from '@/components/ui/button'
-import {
- Dialog,
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from '@/components/ui/dialog'
-import {
- Field,
- FieldDescription,
- FieldError,
- FieldGroup,
- FieldLabel,
-} from '@/components/ui/field'
-import { Textarea } from '@/components/ui/textarea'
-import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'
-import { reviewBillingSettlement } from '../api'
-import { formatLocalizedCount } from '../lib/format'
-import { mutationErrorMessage } from '../lib/mutation-error'
-import {
- SMART_OPS_ACTIVE_ALERTS_QUERY_KEY,
- SMART_OPS_BILLING_RECONCILIATION_QUERY_KEY,
-} from '../lib/query-keys'
-import type { BillingSettlementReconciliationItem } from '../types'
-
-interface SettlementReviewDialogProps {
- item: BillingSettlementReconciliationItem
- open: boolean
- onOpenChange: (open: boolean) => void
-}
-
-export function SettlementReviewDialog(
- props: SettlementReviewDialogProps
-): ReactElement {
- const { t, i18n } = useTranslation()
- const [decision, setDecision] = useState<'block' | 'allow'>(
- props.item.record_blocks_user ? 'block' : 'allow'
- )
- const [note, setNote] = useState(props.item.reconciliation_review_note || '')
- const queryClient = useQueryClient()
-
- const trimmedNote = note.trim()
- const noteLength = Array.from(trimmedNote).length
- const noteInvalid = noteLength < 3 || noteLength > 1000
-
- const reviewMutation = useMutation({
- mutationKey: ['smart-ops', 'billing-settlement-review', props.item.id],
- mutationFn: async () => {
- const response = await reviewBillingSettlement(props.item.id, {
- block_user: decision === 'block',
- note: trimmedNote,
- })
- if (!response.success) {
- throw new Error(response.message || t('Failed to save review.'))
- }
- },
- onSuccess: async () => {
- toast.success(t('Billing reconciliation alert closed.'))
- props.onOpenChange(false)
- await Promise.all([
- queryClient.invalidateQueries({
- queryKey: SMART_OPS_ACTIVE_ALERTS_QUERY_KEY,
- }),
- queryClient.invalidateQueries({
- queryKey: SMART_OPS_BILLING_RECONCILIATION_QUERY_KEY,
- }),
- ])
- },
- onError: (error) => {
- handleServerError(error, {
- fallback: mutationErrorMessage(error, t('Failed to save review.')),
- })
- },
- })
-
- const handleSubmit = () => {
- if (noteLength < 3 || noteLength > 1000) return
- reviewMutation.mutate()
- }
-
- return (
-
- )
-}
diff --git a/web/default/src/features/smart-ops/hooks/use-billing-settlement-selection.ts b/web/default/src/features/smart-ops/hooks/use-billing-settlement-selection.ts
new file mode 100644
index 00000000..5d145859
--- /dev/null
+++ b/web/default/src/features/smart-ops/hooks/use-billing-settlement-selection.ts
@@ -0,0 +1,92 @@
+/*
+Copyright (C) 2023-2026 MAX-API-Next
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+
+For commercial licensing, please contact https://github.com/MAX-API-Next/MAX-API/issues
+*/
+import { useCallback, useMemo } from 'react'
+import type {
+ BillingSettlementReconciliationItem,
+ BillingSettlementReviewTarget,
+} from '../types'
+
+interface UseBillingSettlementSelectionParams {
+ items: BillingSettlementReconciliationItem[]
+ selectedTargets: ReadonlyMap
+ onSelectedTargetsChange: (
+ targets: Map
+ ) => void
+}
+
+interface UseBillingSettlementSelectionResult {
+ allSelected: boolean
+ someSelected: boolean
+ isSelected: (item: BillingSettlementReconciliationItem) => boolean
+ toggleAll: (checked: boolean) => void
+ toggleItem: (
+ item: BillingSettlementReconciliationItem,
+ checked: boolean
+ ) => void
+}
+
+export function useBillingSettlementSelection(
+ params: UseBillingSettlementSelectionParams
+): UseBillingSettlementSelectionResult {
+ const items = params.items
+ const selectedTargets = params.selectedTargets
+ const onSelectedTargetsChange = params.onSelectedTargetsChange
+ const isSelected = useCallback(
+ (item: BillingSettlementReconciliationItem): boolean =>
+ selectedTargets.get(item.id)?.revision === item.revision,
+ [selectedTargets]
+ )
+ const { allSelected, someSelected } = useMemo(() => {
+ return {
+ allSelected: items.length > 0 && items.every((item) => isSelected(item)),
+ someSelected: items.some((item) => isSelected(item)),
+ }
+ }, [isSelected, items])
+
+ const toggleAll = useCallback(
+ (checked: boolean): void => {
+ onSelectedTargetsChange(
+ checked
+ ? new Map(
+ items.map((item) => [
+ item.id,
+ { id: item.id, revision: item.revision },
+ ])
+ )
+ : new Map()
+ )
+ },
+ [items, onSelectedTargetsChange]
+ )
+
+ const toggleItem = useCallback(
+ (item: BillingSettlementReconciliationItem, checked: boolean): void => {
+ const next = new Map(selectedTargets)
+ if (checked) {
+ next.set(item.id, { id: item.id, revision: item.revision })
+ } else {
+ next.delete(item.id)
+ }
+ onSelectedTargetsChange(next)
+ },
+ [onSelectedTargetsChange, selectedTargets]
+ )
+
+ return { allSelected, someSelected, isSelected, toggleAll, toggleItem }
+}
diff --git a/web/default/src/features/smart-ops/lib/format.test.ts b/web/default/src/features/smart-ops/lib/format.test.ts
index d933e9d5..4e0ddc38 100644
--- a/web/default/src/features/smart-ops/lib/format.test.ts
+++ b/web/default/src/features/smart-ops/lib/format.test.ts
@@ -16,7 +16,6 @@ along with this program. If not, see .
For commercial licensing, please contact https://github.com/MAX-API-Next/MAX-API/issues
*/
-import en from '@/i18n/locales/en.json'
import fr from '@/i18n/locales/fr.json'
import ja from '@/i18n/locales/ja.json'
import ru from '@/i18n/locales/ru.json'
@@ -116,81 +115,86 @@ describe('formatLocalizedCount', () => {
)
})
- test('keeps reconciliation terminology localized and consistent', (): void => {
+ test('keeps active reconciliation terminology localized and consistent', (): void => {
const reviewSummaryKey =
- 'Review and close operational alerts without changing the underlying pending or manual financial settlement.'
- const emptyStateKey = 'No unresolved reconciliation records.'
+ 'Select one or more alerts and close them with one click. The underlying financial settlement record remains available for safe retry and audit.'
+ const selectionKey = 'Review and close selected ({{count}})'
const blockingPolicyKey = 'Block affected users by default'
- const userAccessHeadingKey = 'User access'
- const userAccessKey = 'User access while unresolved'
- const rootPolicyKey =
- 'Only root administrators can change the default blocking policy.'
- const closeAlertKey =
- 'Closing this alert records an administrator review only. It does not mark the settlement as applied or change any balance.'
- const positiveSettlementKey =
- 'When enabled, new paid requests remain blocked while any unresolved positive final settlement record still blocks the user. Allowing one reviewed record does not override other blocking records.'
- const oldPositiveSettlementKey =
- 'When enabled, unresolved positive final settlements block new paid requests unless a reviewed record explicitly allows the user to continue.'
- const paidAdmissionKey =
- 'This choice affects only new paid-request admission while the financial settlement remains pending or manual.'
assert.doesNotMatch(ru.translation[reviewSummaryKey], /pending|manual/i)
- assert.doesNotMatch(
- ja.translation[reviewSummaryKey],
- /決済|pending|manual/i
+ assert.doesNotMatch(ja.translation[reviewSummaryKey], /pending|manual/i)
+ assert.equal(
+ ru.translation['Open manual settlements: {{count}}'],
+ 'Открытые расчёты на ручной обработке: {{count}}'
)
- assert.equal(fr.translation['Token #{{id}}'], 'Jeton n° {{id}}')
assert.equal(
- fr.translation['Administrator review'],
- 'Examen par l’administrateur'
+ ru.translation['Open pending settlements: {{count}}'],
+ 'Открытые расчёты в ожидании: {{count}}'
)
assert.equal(
- fr.translation['Outstanding funding'],
- 'Financement en attente'
+ ja.translation['Open pending settlements: {{count}}'],
+ '未対応の保留中精算:{{count}}件'
)
- assert.doesNotMatch(fr.translation['Administrator review'], /vérification/i)
- assert.equal(fr.translation.Reviewed, 'Examiné')
- assert.doesNotMatch(ru.translation[closeAlertKey], /\bapplied\b/i)
assert.equal(
- ru.translation['Manual: {{count}}'],
- 'Ручная обработка: {{count}}'
+ vi.translation['Open pending settlements: {{count}}'],
+ 'Quyết toán đang chờ có cảnh báo mở: {{count}}'
)
- assert.equal(ru.translation['Open alert'], 'Открытое оповещение')
assert.equal(
- ru.translation['Open alert: {{count}}'],
- 'Открытое оповещение: {{count}}'
+ vi.translation['Open manual settlements: {{count}}'],
+ 'Quyết toán thủ công có cảnh báo mở: {{count}}'
)
assert.equal(
- vi.translation['Administrator controls'],
- 'Kiểm soát dành cho quản trị viên'
+ zh.translation['Open pending settlements: {{count}}'],
+ '未关闭的待结算:{{count}}'
+ )
+ assert.equal(
+ zh.translation['Open manual settlements: {{count}}'],
+ '未关闭的需人工处理的结算:{{count}}'
+ )
+ assert.doesNotMatch(
+ zh.translation['Open pending settlements: {{count}}'],
+ /重试|处理/
+ )
+ assert.doesNotMatch(
+ ja.translation['Open pending settlements: {{count}}'],
+ /再試行/
+ )
+ assert.doesNotMatch(
+ ru.translation['Open pending settlements: {{count}}'],
+ /повтор/i
+ )
+ assert.doesNotMatch(
+ vi.translation['Open pending settlements: {{count}}'],
+ /thử lại/i
)
assert.equal(
- vi.translation['Billing reconciliation controls'],
- 'Kiểm soát đối soát tính phí'
+ vi.translation['Open billing reconciliation alerts'],
+ 'Cảnh báo đối soát tính phí đang mở'
)
assert.equal(
- vi.translation['Attempts / next retry'],
- 'Số lần thử / lần thử lại tiếp theo'
+ ja.translation['Open billing reconciliation alerts'],
+ '未対応の請求照合アラート'
)
assert.equal(
- vi.translation[paidAdmissionKey],
- 'Lựa chọn này chỉ ảnh hưởng đến việc tiếp nhận yêu cầu có tính phí mới trong khi quyết toán tài chính vẫn ở trạng thái đang chờ hoặc xử lý thủ công.'
+ ru.translation['Open billing reconciliation alerts'],
+ 'Открытые оповещения о сверке биллинга'
+ )
+ assert.doesNotMatch(
+ ja.translation['Billing reconciliation alerts closed: {{count}}'],
+ /課金照合/
+ )
+ assert.doesNotMatch(
+ ru.translation['Billing reconciliation alerts closed: {{count}}'],
+ /сверк[аеи] расчётов/i
)
assert.equal(
- vi.translation[positiveSettlementKey],
- 'Khi bật, các yêu cầu có tính phí mới vẫn bị chặn chừng nào còn bất kỳ bản ghi quyết toán cuối có số tiền dương chưa xử lý nào chặn người dùng. Việc cho phép một bản ghi đã kiểm tra không vô hiệu hóa các bản ghi chặn khác.'
+ zh.translation['No open reconciliation alerts.'],
+ '没有未关闭的对账告警。'
)
- assert.equal(en.translation[positiveSettlementKey], positiveSettlementKey)
- for (const locale of [en, fr, ja, ru, vi, zh]) {
- assert.equal(
- Object.hasOwn(locale.translation, oldPositiveSettlementKey),
- false
- )
- }
- assert.match(vi.translation[rootPolicyKey], /quản trị viên Root/)
- assert.equal(zh.translation[emptyStateKey], '没有未解决的对账记录。')
assert.equal(zh.translation[blockingPolicyKey], '默认阻止受影响用户')
- assert.equal(zh.translation[userAccessHeadingKey], '用户访问状态')
- assert.equal(zh.translation[userAccessKey], '未解决期间的用户访问权限')
+ assert.equal(
+ zh.translation[selectionKey],
+ '核对并关闭所选告警({{count}})'
+ )
})
})
diff --git a/web/default/src/features/smart-ops/lib/reconciliation-validation.test.ts b/web/default/src/features/smart-ops/lib/reconciliation-validation.test.ts
index ca697e0b..86e2223e 100644
--- a/web/default/src/features/smart-ops/lib/reconciliation-validation.test.ts
+++ b/web/default/src/features/smart-ops/lib/reconciliation-validation.test.ts
@@ -27,7 +27,6 @@ function validData(): BillingSettlementReconciliationData {
pending_count: 1,
manual_count: 0,
open_alert_count: 1,
- reviewed_count: 0,
blocking_record_count: 1,
blocked_user_count: 1,
block_user_by_default: true,
@@ -37,6 +36,7 @@ function validData(): BillingSettlementReconciliationData {
items: [
{
id: 3,
+ revision: 1,
operation_key: 'request:validation:finalize',
status: 'pending',
source: 'wallet',
diff --git a/web/default/src/features/smart-ops/lib/reconciliation-validation.ts b/web/default/src/features/smart-ops/lib/reconciliation-validation.ts
index fcaf9e7e..5f08749b 100644
--- a/web/default/src/features/smart-ops/lib/reconciliation-validation.ts
+++ b/web/default/src/features/smart-ops/lib/reconciliation-validation.ts
@@ -25,6 +25,7 @@ import type {
const billingSettlementReconciliationItemSchema: z.ZodType =
z.object({
id: z.number(),
+ revision: z.number(),
operation_key: z.string(),
status: z.enum(['pending', 'manual']),
source: z.enum(['wallet', 'subscription']),
@@ -55,7 +56,6 @@ const billingSettlementReconciliationDataSchema: z.ZodType
}
+export type BillingSettlementReviewTarget = {
+ id: number
+ revision: number
+}
+
export type BillingSettlementReviewRequest = {
- block_user: boolean
- note: string
+ items: BillingSettlementReviewTarget[]
}
export type BillingSettlementReconciliationResponse = {
diff --git a/web/default/src/i18n/locales/en.json b/web/default/src/i18n/locales/en.json
index 4131b497..c48ff705 100644
--- a/web/default/src/i18n/locales/en.json
+++ b/web/default/src/i18n/locales/en.json
@@ -22,10 +22,10 @@
"Funding source": "Funding source",
"Manual": "Manual",
"Manual review": "Manual review",
- "Manual: {{count}}": "Manual: {{count}}",
+ "Manual settlements: {{count}}": "Manual settlements: {{count}}",
"No error detail": "No error detail",
"Outstanding funding": "Outstanding funding",
- "Pending: {{count}}": "Pending: {{count}}",
+ "Pending settlements: {{count}}": "Pending settlements: {{count}}",
"References": "References",
"Showing the oldest {{count}} records; the summary covers all {{total}} unresolved records.": "Showing the oldest {{count}} records; the summary covers all {{total}} unresolved records.",
"SmartOps reports sustained host pressure and billing reconciliation backlogs here for manual investigation.": "SmartOps reports sustained host pressure and billing reconciliation backlogs here for manual investigation.",
@@ -5526,6 +5526,7 @@
"Administrator review": "Administrator review",
"Allow user to continue": "Allow user to continue",
"Billing reconciliation alert closed.": "Billing reconciliation alert closed.",
+ "Billing reconciliation alerts closed: {{count}}": "Billing reconciliation alerts closed: {{count}}",
"Billing reconciliation controls": "Billing reconciliation controls",
"Block affected users by default": "Block affected users by default",
"Close alert": "Close alert",
@@ -5534,10 +5535,13 @@
"Default user-blocking policy updated.": "Default user-blocking policy updated.",
"Edit reconciliation review": "Edit reconciliation review",
"Edit review": "Edit review",
+ "Failed to close reconciliation alerts.": "Failed to close reconciliation alerts.",
"Failed to save review.": "Failed to save review.",
"Failed to update blocking policy.": "Failed to update blocking policy.",
"Financial / alert status": "Financial / alert status",
+ "Financial status": "Financial status",
"Last error": "Last error",
+ "No open reconciliation alerts.": "No open reconciliation alerts.",
"No unresolved reconciliation records.": "No unresolved reconciliation records.",
"Node": "Node",
"Not reviewed": "Not reviewed",
@@ -5545,10 +5549,14 @@
"Open alert": "Open alert",
"Open alert: {{count}}": "Open alert: {{count}}",
"Open alerts: {{count}}": "Open alerts: {{count}}",
+ "Open billing reconciliation alerts": "Open billing reconciliation alerts",
+ "Open manual settlements: {{count}}": "Open manual settlements: {{count}}",
+ "Open pending settlements: {{count}}": "Open pending settlements: {{count}}",
"Record policy: allow": "Record policy: allow",
"Record policy: block": "Record policy: block",
"Record the evidence checked, the conclusion, and any follow-up action.": "Record the evidence checked, the conclusion, and any follow-up action.",
"Review and close": "Review and close",
+ "Review and close selected ({{count}})": "Review and close selected ({{count}})",
"Review and close operational alerts without changing the underlying pending or manual financial settlement.": "Review and close operational alerts without changing the underlying pending or manual financial settlement.",
"Review billing reconciliation": "Review billing reconciliation",
"Review note": "Review note",
@@ -5557,7 +5565,13 @@
"Reviewed record: {{count}}": "Reviewed record: {{count}}",
"Reviewed records: {{count}}": "Reviewed records: {{count}}",
"Save review": "Save review",
+ "Select all billing reconciliation alerts": "Select all billing reconciliation alerts",
+ "Select billing reconciliation alert {{id}}": "Select billing reconciliation alert {{id}}",
+ "Select one or more alerts and close them with one click. The underlying financial settlement record remains available for safe retry and audit.": "Select one or more alerts and close them with one click. The underlying financial settlement record remains available for safe retry and audit.",
+ "Selected alerts: {{count}}": "Selected alerts: {{count}}",
+ "Showing the oldest {{count}} alerts; the summary covers all {{total}} open alerts.": "Showing the oldest {{count}} alerts; the summary covers all {{total}} open alerts.",
"There are no pending or manual positive final settlements requiring operator review.": "There are no pending or manual positive final settlements requiring operator review.",
+ "There are no pending or manual positive final settlements waiting for administrator review.": "There are no pending or manual positive final settlements waiting for administrator review.",
"This choice affects only new paid-request admission while the financial settlement remains pending or manual.": "This choice affects only new paid-request admission while the financial settlement remains pending or manual.",
"This process is not currently reporting sustained host pressure or an open billing reconciliation alert.": "This process is not currently reporting sustained host pressure or an open billing reconciliation alert.",
"User access": "User access",
diff --git a/web/default/src/i18n/locales/fr.json b/web/default/src/i18n/locales/fr.json
index 0b7e2f4b..2567ed69 100644
--- a/web/default/src/i18n/locales/fr.json
+++ b/web/default/src/i18n/locales/fr.json
@@ -22,10 +22,10 @@
"Funding source": "Source de financement",
"Manual": "Manuel",
"Manual review": "Examen manuel",
- "Manual: {{count}}": "Manuel : {{count}}",
+ "Manual settlements: {{count}}": "Règlements manuels : {{count}}",
"No error detail": "Aucun détail d’erreur",
"Outstanding funding": "Financement en attente",
- "Pending: {{count}}": "En attente : {{count}}",
+ "Pending settlements: {{count}}": "Règlements en attente : {{count}}",
"References": "Références",
"Showing the oldest {{count}} records; the summary covers all {{total}} unresolved records.": "Affichage des {{count}} enregistrements les plus anciens ; le résumé couvre les {{total}} enregistrements non résolus.",
"SmartOps reports sustained host pressure and billing reconciliation backlogs here for manual investigation.": "SmartOps signale ici la pression persistante sur l’hôte et les retards de rapprochement de facturation pour examen manuel.",
@@ -5526,6 +5526,7 @@
"Administrator review": "Examen par l’administrateur",
"Allow user to continue": "Autoriser l’utilisateur à continuer",
"Billing reconciliation alert closed.": "Alerte de rapprochement de facturation fermée.",
+ "Billing reconciliation alerts closed: {{count}}": "Alertes de rapprochement de facturation fermées : {{count}}",
"Billing reconciliation controls": "Contrôles du rapprochement de facturation",
"Block affected users by default": "Bloquer les utilisateurs concernés par défaut",
"Close alert": "Fermer l’alerte",
@@ -5534,10 +5535,13 @@
"Default user-blocking policy updated.": "La politique de blocage par défaut a été mise à jour.",
"Edit reconciliation review": "Modifier l’examen du rapprochement",
"Edit review": "Modifier l’examen",
+ "Failed to close reconciliation alerts.": "Échec de la fermeture des alertes de rapprochement.",
"Failed to save review.": "Échec de l’enregistrement de l’examen.",
"Failed to update blocking policy.": "Échec de la mise à jour de la politique de blocage.",
"Financial / alert status": "État financier / de l’alerte",
+ "Financial status": "État financier",
"Last error": "Dernière erreur",
+ "No open reconciliation alerts.": "Aucune alerte de rapprochement ouverte.",
"No unresolved reconciliation records.": "Aucun enregistrement de rapprochement non résolu.",
"Node": "Nœud",
"Not reviewed": "Non examiné",
@@ -5545,10 +5549,14 @@
"Open alert": "Alerte ouverte",
"Open alert: {{count}}": "Alerte ouverte : {{count}}",
"Open alerts: {{count}}": "Alertes ouvertes : {{count}}",
+ "Open billing reconciliation alerts": "Alertes ouvertes de rapprochement de facturation",
+ "Open manual settlements: {{count}}": "Règlements manuels avec alerte ouverte : {{count}}",
+ "Open pending settlements: {{count}}": "Règlements en attente avec alerte ouverte : {{count}}",
"Record policy: allow": "Politique de l’enregistrement : autoriser",
"Record policy: block": "Politique de l’enregistrement : bloquer",
"Record the evidence checked, the conclusion, and any follow-up action.": "Consignez les preuves vérifiées, la conclusion et toute action de suivi.",
"Review and close": "Examiner et fermer",
+ "Review and close selected ({{count}})": "Examiner et fermer la sélection ({{count}})",
"Review and close operational alerts without changing the underlying pending or manual financial settlement.": "Examinez et fermez les alertes opérationnelles sans modifier le règlement financier sous-jacent en attente ou manuel.",
"Review billing reconciliation": "Examiner le rapprochement de facturation",
"Review note": "Note d’examen",
@@ -5557,7 +5565,13 @@
"Reviewed record: {{count}}": "Enregistrement examiné : {{count}}",
"Reviewed records: {{count}}": "Enregistrements examinés : {{count}}",
"Save review": "Enregistrer l’examen",
+ "Select all billing reconciliation alerts": "Sélectionner toutes les alertes de rapprochement de facturation",
+ "Select billing reconciliation alert {{id}}": "Sélectionner l’alerte de rapprochement de facturation {{id}}",
+ "Select one or more alerts and close them with one click. The underlying financial settlement record remains available for safe retry and audit.": "Sélectionnez une ou plusieurs alertes et fermez-les en un clic. L’enregistrement de règlement financier sous-jacent reste disponible pour une nouvelle tentative sûre et l’audit.",
+ "Selected alerts: {{count}}": "Alertes sélectionnées : {{count}}",
+ "Showing the oldest {{count}} alerts; the summary covers all {{total}} open alerts.": "Affichage des {{count}} alertes les plus anciennes ; le résumé couvre les {{total}} alertes ouvertes.",
"There are no pending or manual positive final settlements requiring operator review.": "Aucun règlement final positif en attente ou manuel ne nécessite d’examen opérateur.",
+ "There are no pending or manual positive final settlements waiting for administrator review.": "Aucun règlement final positif en attente ou manuel n’attend l’examen d’un administrateur.",
"This choice affects only new paid-request admission while the financial settlement remains pending or manual.": "Ce choix affecte uniquement l’admission de nouvelles requêtes payantes tant que le règlement financier reste en attente ou manuel.",
"This process is not currently reporting sustained host pressure or an open billing reconciliation alert.": "Ce processus ne signale actuellement aucune pression persistante sur l’hôte ni aucune alerte ouverte de rapprochement de facturation.",
"User access": "Accès utilisateur",
diff --git a/web/default/src/i18n/locales/ja.json b/web/default/src/i18n/locales/ja.json
index 095ca5e4..e7ee2add 100644
--- a/web/default/src/i18n/locales/ja.json
+++ b/web/default/src/i18n/locales/ja.json
@@ -22,10 +22,10 @@
"Funding source": "資金元",
"Manual": "手動対応",
"Manual review": "手動確認",
- "Manual: {{count}}": "手動対応:{{count}}",
+ "Manual settlements: {{count}}": "手動処理の精算:{{count}}",
"No error detail": "エラー詳細なし",
"Outstanding funding": "未処理の資金差額",
- "Pending: {{count}}": "保留中:{{count}}",
+ "Pending settlements: {{count}}": "保留中の精算:{{count}}",
"References": "関連情報",
"Showing the oldest {{count}} records; the summary covers all {{total}} unresolved records.": "最も古い {{count}} 件を表示しています。概要には未解決の全 {{total}} 件が含まれます。",
"SmartOps reports sustained host pressure and billing reconciliation backlogs here for manual investigation.": "SmartOps は、継続的なホスト負荷と請求照合の滞留を手動調査用にここへ報告します。",
@@ -5526,6 +5526,7 @@
"Administrator review": "管理者確認",
"Allow user to continue": "ユーザーの利用継続を許可",
"Billing reconciliation alert closed.": "請求照合アラートを閉じました。",
+ "Billing reconciliation alerts closed: {{count}}": "請求照合アラートを閉じました:{{count}}件",
"Billing reconciliation controls": "請求照合コントロール",
"Block affected users by default": "影響を受けるユーザーをデフォルトでブロック",
"Close alert": "アラートを閉じる",
@@ -5534,10 +5535,13 @@
"Default user-blocking policy updated.": "デフォルトのユーザーブロックポリシーを更新しました。",
"Edit reconciliation review": "照合確認を編集",
"Edit review": "確認を編集",
+ "Failed to close reconciliation alerts.": "照合アラートを閉じられませんでした。",
"Failed to save review.": "確認を保存できませんでした。",
"Failed to update blocking policy.": "ブロックポリシーを更新できませんでした。",
"Financial / alert status": "財務 / アラート状態",
+ "Financial status": "財務ステータス",
"Last error": "直近のエラー",
+ "No open reconciliation alerts.": "未対応の照合アラートはありません。",
"No unresolved reconciliation records.": "未解決の照合レコードはありません。",
"Node": "ノード",
"Not reviewed": "未確認",
@@ -5545,10 +5549,14 @@
"Open alert": "未対応アラート",
"Open alert: {{count}}": "未対応アラート:{{count}}",
"Open alerts: {{count}}": "未対応アラート:{{count}}",
+ "Open billing reconciliation alerts": "未対応の請求照合アラート",
+ "Open manual settlements: {{count}}": "未対応の手動精算:{{count}}件",
+ "Open pending settlements: {{count}}": "未対応の保留中精算:{{count}}件",
"Record policy: allow": "レコードポリシー:許可",
"Record policy: block": "レコードポリシー:ブロック",
"Record the evidence checked, the conclusion, and any follow-up action.": "確認した証拠、結論、今後の対応を記録してください。",
"Review and close": "確認して閉じる",
+ "Review and close selected ({{count}})": "選択項目を確認して閉じる({{count}}件)",
"Review and close operational alerts without changing the underlying pending or manual financial settlement.": "基になる保留中または手動処理の財務精算を変更せずに、運用アラートを確認して閉じます。",
"Review billing reconciliation": "請求照合を確認",
"Review note": "確認メモ",
@@ -5557,7 +5565,13 @@
"Reviewed record: {{count}}": "確認済みレコード:{{count}}",
"Reviewed records: {{count}}": "確認済みレコード:{{count}}",
"Save review": "確認を保存",
+ "Select all billing reconciliation alerts": "すべての請求照合アラートを選択",
+ "Select billing reconciliation alert {{id}}": "請求照合アラート {{id}} を選択",
+ "Select one or more alerts and close them with one click. The underlying financial settlement record remains available for safe retry and audit.": "1件以上のアラートを選択し、ワンクリックで確認して閉じます。基礎となる財務精算レコードは、安全な再試行と監査のため保持されます。",
+ "Selected alerts: {{count}}": "選択したアラート:{{count}}件",
+ "Showing the oldest {{count}} alerts; the summary covers all {{total}} open alerts.": "古い順に{{count}}件のアラートを表示しています。概要は未対応の全{{total}}件を対象とします。",
"There are no pending or manual positive final settlements requiring operator review.": "管理者による確認が必要な保留中または手動処理の正の最終精算はありません。",
+ "There are no pending or manual positive final settlements waiting for administrator review.": "管理者の確認を待つ保留中または手動の正の最終精算はありません。",
"This choice affects only new paid-request admission while the financial settlement remains pending or manual.": "この選択は、財務精算が保留中または手動処理の間における新規有料リクエストの受付だけに影響します。",
"This process is not currently reporting sustained host pressure or an open billing reconciliation alert.": "このプロセスでは現在、継続的なホスト負荷や未対応の請求照合アラートは報告されていません。",
"User access": "ユーザーアクセス",
diff --git a/web/default/src/i18n/locales/ru.json b/web/default/src/i18n/locales/ru.json
index 3faf9c58..32b4e169 100644
--- a/web/default/src/i18n/locales/ru.json
+++ b/web/default/src/i18n/locales/ru.json
@@ -22,10 +22,10 @@
"Funding source": "Источник средств",
"Manual": "Ручная обработка",
"Manual review": "Ручная проверка",
- "Manual: {{count}}": "Ручная обработка: {{count}}",
+ "Manual settlements: {{count}}": "Расчёты на ручной обработке: {{count}}",
"No error detail": "Нет сведений об ошибке",
"Outstanding funding": "Неприменённая сумма",
- "Pending: {{count}}": "В ожидании: {{count}}",
+ "Pending settlements: {{count}}": "Расчёты в ожидании: {{count}}",
"References": "Связанные объекты",
"Showing the oldest {{count}} records; the summary covers all {{total}} unresolved records.": "Показаны {{count}} самых старых записей; сводка охватывает все {{total}} неразрешённых записей.",
"SmartOps reports sustained host pressure and billing reconciliation backlogs here for manual investigation.": "SmartOps сообщает здесь о длительной нагрузке на узел и очередях сверки биллинга для ручной диагностики.",
@@ -5526,6 +5526,7 @@
"Administrator review": "Проверка администратором",
"Allow user to continue": "Разрешить пользователю продолжить работу",
"Billing reconciliation alert closed.": "Оповещение о сверке биллинга закрыто.",
+ "Billing reconciliation alerts closed: {{count}}": "Закрыто оповещений о сверке биллинга: {{count}}",
"Billing reconciliation controls": "Управление сверкой биллинга",
"Block affected users by default": "По умолчанию блокировать затронутых пользователей",
"Close alert": "Закрыть оповещение",
@@ -5534,10 +5535,13 @@
"Default user-blocking policy updated.": "Политика блокировки пользователей по умолчанию обновлена.",
"Edit reconciliation review": "Изменить проверку сверки",
"Edit review": "Изменить проверку",
+ "Failed to close reconciliation alerts.": "Не удалось закрыть оповещения о сверке.",
"Failed to save review.": "Не удалось сохранить проверку.",
"Failed to update blocking policy.": "Не удалось обновить политику блокировки.",
"Financial / alert status": "Финансовое состояние / состояние оповещения",
+ "Financial status": "Финансовое состояние",
"Last error": "Последняя ошибка",
+ "No open reconciliation alerts.": "Нет открытых оповещений о сверке.",
"No unresolved reconciliation records.": "Нет неразрешённых записей сверки.",
"Node": "Узел",
"Not reviewed": "Не проверено",
@@ -5545,10 +5549,14 @@
"Open alert": "Открытое оповещение",
"Open alert: {{count}}": "Открытое оповещение: {{count}}",
"Open alerts: {{count}}": "Открытых оповещений: {{count}}",
+ "Open billing reconciliation alerts": "Открытые оповещения о сверке биллинга",
+ "Open manual settlements: {{count}}": "Открытые расчёты на ручной обработке: {{count}}",
+ "Open pending settlements: {{count}}": "Открытые расчёты в ожидании: {{count}}",
"Record policy: allow": "Политика записи: разрешить",
"Record policy: block": "Политика записи: блокировать",
"Record the evidence checked, the conclusion, and any follow-up action.": "Зафиксируйте проверенные данные, вывод и последующие действия.",
"Review and close": "Проверить и закрыть",
+ "Review and close selected ({{count}})": "Проверить и закрыть выбранные ({{count}})",
"Review and close operational alerts without changing the underlying pending or manual financial settlement.": "Проверяйте и закрывайте операционные оповещения, не изменяя соответствующий финансовый расчёт в статусе «ожидание» или «ручная обработка».",
"Review billing reconciliation": "Проверить сверку биллинга",
"Review note": "Примечание к проверке",
@@ -5557,7 +5565,13 @@
"Reviewed record: {{count}}": "Проверено записей: {{count}}",
"Reviewed records: {{count}}": "Проверено записей: {{count}}",
"Save review": "Сохранить проверку",
+ "Select all billing reconciliation alerts": "Выбрать все оповещения о сверке биллинга",
+ "Select billing reconciliation alert {{id}}": "Выбрать оповещение о сверке биллинга {{id}}",
+ "Select one or more alerts and close them with one click. The underlying financial settlement record remains available for safe retry and audit.": "Выберите одно или несколько оповещений и закройте их одним нажатием. Исходная запись финансового расчёта сохраняется для безопасного повтора и аудита.",
+ "Selected alerts: {{count}}": "Выбрано оповещений: {{count}}",
+ "Showing the oldest {{count}} alerts; the summary covers all {{total}} open alerts.": "Показаны самые старые оповещения: {{count}}; сводка охватывает все открытые оповещения: {{total}}.",
"There are no pending or manual positive final settlements requiring operator review.": "Нет положительных окончательных расчётов в статусе «ожидание» или «ручная обработка», требующих проверки оператором.",
+ "There are no pending or manual positive final settlements waiting for administrator review.": "Нет ожидающих проверки администратором положительных итоговых расчётов в состоянии ожидания или ручной обработки.",
"This choice affects only new paid-request admission while the financial settlement remains pending or manual.": "Этот выбор влияет только на допуск новых платных запросов, пока финансовый расчёт имеет статус «ожидание» или «ручная обработка».",
"This process is not currently reporting sustained host pressure or an open billing reconciliation alert.": "Сейчас этот процесс не сообщает о длительной нагрузке на узел или открытом оповещении сверки биллинга.",
"User access": "Доступ пользователя",
diff --git a/web/default/src/i18n/locales/vi.json b/web/default/src/i18n/locales/vi.json
index 05138c12..1ac3ccd5 100644
--- a/web/default/src/i18n/locales/vi.json
+++ b/web/default/src/i18n/locales/vi.json
@@ -22,10 +22,10 @@
"Funding source": "Nguồn tiền",
"Manual": "Xử lý thủ công",
"Manual review": "Kiểm tra thủ công",
- "Manual: {{count}}": "Thủ công: {{count}}",
+ "Manual settlements: {{count}}": "Quyết toán thủ công: {{count}}",
"No error detail": "Không có chi tiết lỗi",
"Outstanding funding": "Chênh lệch tiền chưa xử lý",
- "Pending: {{count}}": "Đang chờ: {{count}}",
+ "Pending settlements: {{count}}": "Quyết toán đang chờ xử lý: {{count}}",
"References": "Đối tượng liên quan",
"Showing the oldest {{count}} records; the summary covers all {{total}} unresolved records.": "Đang hiển thị {{count}} bản ghi cũ nhất; phần tóm tắt bao gồm toàn bộ {{total}} bản ghi chưa xử lý.",
"SmartOps reports sustained host pressure and billing reconciliation backlogs here for manual investigation.": "SmartOps báo cáo tại đây tình trạng áp lực máy chủ kéo dài và tồn đọng đối soát tính phí để quản trị viên kiểm tra thủ công.",
@@ -5526,6 +5526,7 @@
"Administrator review": "Kiểm tra của quản trị viên",
"Allow user to continue": "Cho phép người dùng tiếp tục",
"Billing reconciliation alert closed.": "Đã đóng cảnh báo đối soát tính phí.",
+ "Billing reconciliation alerts closed: {{count}}": "Đã đóng cảnh báo đối soát tính phí: {{count}}",
"Billing reconciliation controls": "Kiểm soát đối soát tính phí",
"Block affected users by default": "Mặc định chặn người dùng bị ảnh hưởng",
"Close alert": "Đóng cảnh báo",
@@ -5534,10 +5535,13 @@
"Default user-blocking policy updated.": "Đã cập nhật chính sách chặn người dùng mặc định.",
"Edit reconciliation review": "Chỉnh sửa kiểm tra đối soát",
"Edit review": "Chỉnh sửa kiểm tra",
+ "Failed to close reconciliation alerts.": "Không thể đóng các cảnh báo đối soát.",
"Failed to save review.": "Không thể lưu kết quả kiểm tra.",
"Failed to update blocking policy.": "Không thể cập nhật chính sách chặn.",
"Financial / alert status": "Trạng thái tài chính / cảnh báo",
+ "Financial status": "Trạng thái tài chính",
"Last error": "Lỗi gần nhất",
+ "No open reconciliation alerts.": "Không có cảnh báo đối soát đang mở.",
"No unresolved reconciliation records.": "Không có bản ghi đối soát chưa xử lý.",
"Node": "Nút",
"Not reviewed": "Chưa kiểm tra",
@@ -5545,10 +5549,14 @@
"Open alert": "Cảnh báo đang mở",
"Open alert: {{count}}": "Cảnh báo đang mở: {{count}}",
"Open alerts: {{count}}": "Cảnh báo đang mở: {{count}}",
+ "Open billing reconciliation alerts": "Cảnh báo đối soát tính phí đang mở",
+ "Open manual settlements: {{count}}": "Quyết toán thủ công có cảnh báo mở: {{count}}",
+ "Open pending settlements: {{count}}": "Quyết toán đang chờ có cảnh báo mở: {{count}}",
"Record policy: allow": "Chính sách bản ghi: cho phép",
"Record policy: block": "Chính sách bản ghi: chặn",
"Record the evidence checked, the conclusion, and any follow-up action.": "Ghi lại bằng chứng đã kiểm tra, kết luận và hành động tiếp theo.",
"Review and close": "Kiểm tra và đóng",
+ "Review and close selected ({{count}})": "Kiểm tra và đóng mục đã chọn ({{count}})",
"Review and close operational alerts without changing the underlying pending or manual financial settlement.": "Kiểm tra và đóng cảnh báo vận hành mà không thay đổi quyết toán tài chính tương ứng đang chờ hoặc xử lý thủ công.",
"Review billing reconciliation": "Kiểm tra đối soát tính phí",
"Review note": "Ghi chú kiểm tra",
@@ -5557,7 +5565,13 @@
"Reviewed record: {{count}}": "Đã kiểm tra bản ghi: {{count}}",
"Reviewed records: {{count}}": "Đã kiểm tra bản ghi: {{count}}",
"Save review": "Lưu kết quả kiểm tra",
+ "Select all billing reconciliation alerts": "Chọn tất cả cảnh báo đối soát tính phí",
+ "Select billing reconciliation alert {{id}}": "Chọn cảnh báo đối soát tính phí {{id}}",
+ "Select one or more alerts and close them with one click. The underlying financial settlement record remains available for safe retry and audit.": "Chọn một hoặc nhiều cảnh báo và đóng chúng bằng một lần nhấp. Bản ghi quyết toán tài chính nền tảng vẫn được giữ lại để thử lại an toàn và kiểm toán.",
+ "Selected alerts: {{count}}": "Cảnh báo đã chọn: {{count}}",
+ "Showing the oldest {{count}} alerts; the summary covers all {{total}} open alerts.": "Đang hiển thị {{count}} cảnh báo cũ nhất; phần tóm tắt bao gồm toàn bộ {{total}} cảnh báo đang mở.",
"There are no pending or manual positive final settlements requiring operator review.": "Không có quyết toán cuối có số tiền dương nào đang chờ hoặc xử lý thủ công cần quản trị viên kiểm tra.",
+ "There are no pending or manual positive final settlements waiting for administrator review.": "Không có quyết toán cuối dương đang chờ hoặc cần xử lý thủ công nào chờ quản trị viên kiểm tra.",
"This choice affects only new paid-request admission while the financial settlement remains pending or manual.": "Lựa chọn này chỉ ảnh hưởng đến việc tiếp nhận yêu cầu có tính phí mới trong khi quyết toán tài chính vẫn ở trạng thái đang chờ hoặc xử lý thủ công.",
"This process is not currently reporting sustained host pressure or an open billing reconciliation alert.": "Tiến trình này hiện không báo cáo áp lực máy chủ kéo dài hoặc cảnh báo đối soát tính phí đang mở.",
"User access": "Quyền truy cập của người dùng",
diff --git a/web/default/src/i18n/locales/zh.json b/web/default/src/i18n/locales/zh.json
index 9d4219a9..ac7bb32f 100644
--- a/web/default/src/i18n/locales/zh.json
+++ b/web/default/src/i18n/locales/zh.json
@@ -22,10 +22,10 @@
"Funding source": "资金来源",
"Manual": "人工处理",
"Manual review": "需要人工核对",
- "Manual: {{count}}": "人工处理:{{count}}",
+ "Manual settlements: {{count}}": "需人工处理的结算:{{count}}",
"No error detail": "无错误详情",
"Outstanding funding": "未完成资金差额",
- "Pending: {{count}}": "待处理:{{count}}",
+ "Pending settlements: {{count}}": "待结算:{{count}}",
"References": "关联对象",
"Showing the oldest {{count}} records; the summary covers all {{total}} unresolved records.": "当前展示最早的 {{count}} 条记录;摘要覆盖全部 {{total}} 条未解决记录。",
"SmartOps reports sustained host pressure and billing reconciliation backlogs here for manual investigation.": "SmartOps 会在此报告持续的主机资源压力和计费对账积压,供管理员人工排查。",
@@ -5526,6 +5526,7 @@
"Administrator review": "管理员核对",
"Allow user to continue": "允许用户继续使用",
"Billing reconciliation alert closed.": "计费对账告警已关闭。",
+ "Billing reconciliation alerts closed: {{count}}": "已关闭计费对账告警:{{count}}",
"Billing reconciliation controls": "计费对账控制",
"Block affected users by default": "默认阻止受影响用户",
"Close alert": "关闭告警",
@@ -5534,10 +5535,13 @@
"Default user-blocking policy updated.": "默认用户阻止策略已更新。",
"Edit reconciliation review": "编辑对账核对",
"Edit review": "编辑核对",
+ "Failed to close reconciliation alerts.": "关闭对账告警失败。",
"Failed to save review.": "保存核对失败。",
"Failed to update blocking policy.": "更新阻止策略失败。",
"Financial / alert status": "财务 / 告警状态",
+ "Financial status": "财务状态",
"Last error": "最近错误",
+ "No open reconciliation alerts.": "没有未关闭的对账告警。",
"No unresolved reconciliation records.": "没有未解决的对账记录。",
"Node": "节点",
"Not reviewed": "未核对",
@@ -5545,10 +5549,14 @@
"Open alert": "打开告警",
"Open alert: {{count}}": "未关闭告警:{{count}}",
"Open alerts: {{count}}": "未关闭告警:{{count}}",
+ "Open billing reconciliation alerts": "未关闭的计费对账告警",
+ "Open manual settlements: {{count}}": "未关闭的需人工处理的结算:{{count}}",
+ "Open pending settlements: {{count}}": "未关闭的待结算:{{count}}",
"Record policy: allow": "记录策略:允许",
"Record policy: block": "记录策略:阻止",
"Record the evidence checked, the conclusion, and any follow-up action.": "记录已核查的证据、结论和后续操作。",
"Review and close": "核对并关闭",
+ "Review and close selected ({{count}})": "核对并关闭所选告警({{count}})",
"Review and close operational alerts without changing the underlying pending or manual financial settlement.": "核对并关闭运维告警,不更改底层待处理或人工处理财务结算。",
"Review billing reconciliation": "核对计费对账",
"Review note": "核对备注",
@@ -5557,7 +5565,13 @@
"Reviewed record: {{count}}": "已核对记录:{{count}}",
"Reviewed records: {{count}}": "已核对记录:{{count}}",
"Save review": "保存核对",
+ "Select all billing reconciliation alerts": "选择全部计费对账告警",
+ "Select billing reconciliation alert {{id}}": "选择计费对账告警 {{id}}",
+ "Select one or more alerts and close them with one click. The underlying financial settlement record remains available for safe retry and audit.": "选择一条或多条告警,点击一次即可核对并关闭。底层财务结算记录仍会保留,用于安全重试和审计。",
+ "Selected alerts: {{count}}": "已选择告警:{{count}}",
+ "Showing the oldest {{count}} alerts; the summary covers all {{total}} open alerts.": "当前显示最早的 {{count}} 条告警;摘要涵盖全部 {{total}} 条未关闭告警。",
"There are no pending or manual positive final settlements requiring operator review.": "没有需要管理员核对的待处理或人工处理正向最终结算。",
+ "There are no pending or manual positive final settlements waiting for administrator review.": "没有等待管理员核对的待结算或需人工处理的正向最终结算。",
"This choice affects only new paid-request admission while the financial settlement remains pending or manual.": "此选择只影响财务结算保持待处理或人工处理期间的新付费请求准入。",
"This process is not currently reporting sustained host pressure or an open billing reconciliation alert.": "当前进程未报告持续的主机资源压力或未关闭的计费对账告警。",
"User access": "用户访问状态",