Backoffice stage 3: orders and providers, auto-assignment
- Auto-assignment: a new order is offered to the best free provider (same ranking as
the dispatcher hint); a decline or timeout passes it to the next one; nobody is
offered the same order twice; after N tries it waits for a dispatcher and the team
is notified once. The worker retries waiting orders every minute. Settings
assign.auto / assign.maxAutoOffers (toggle on the Orders page, checkbox in old admin).
- Orders: list by day with groups (need a provider, offered, assigned, in progress,
done, cancelled), periods and search; order card with progress, provider or ranked
candidates ("offer" / "pick automatically"), details, checklist and photos,
history in plain words, client, money (superadmin), payment, status change,
reschedule (slots or custom time), cancel with fee.
- New order for a client (from the client card or the Orders page): params form,
address, free slots for 14 days, price with the client's discount.
- Providers: list with rating, orders, declines, low ratings, next order; card with
quality, ratings, upcoming orders, schedule and districts, admission documents,
block/unblock with reason, new bot link, money and payouts (superadmin).
- Payout gets paidAt/note/createdById; Provider gets blockedReason/blockedAt/adminNote
and documents (ProviderDoc).
- Tests for auto-assignment.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
2772837e29
commit
e7de4f5893
33 files changed
+4521
-45
No files matched your search
@@ -871,7 +871,8 @@
|
||||
"file": "file",
|
||||
"chatAssigned": "{{by}} passed you a conversation: {{name}}",
|
||||
"order": "Order #{{number}}",
|
||||
"noOrder": "No current order"
|
||||
"noOrder": "No current order",
|
||||
"autoFailed": "No free provider found for order #{{number}} — please assign manually."
|
||||
},
|
||||
"partner": {
|
||||
"valid": "{{name}} — {{level}}, card is valid",
|
||||
@@ -1269,7 +1270,9 @@
|
||||
"residence_escortFrom": "Residence permit: support from, AMD",
|
||||
"residence_stateFee": "Residence permit: state fee (1 year), AMD",
|
||||
"transfer_standardPrice": "Transfer “Standard”, AMD",
|
||||
"transfer_premiumPrice": "Transfer “Premium”, AMD"
|
||||
"transfer_premiumPrice": "Transfer “Premium”, AMD",
|
||||
"assign_auto": "Assign orders automatically",
|
||||
"assign_maxAutoOffers": "How many providers to try automatically"
|
||||
},
|
||||
"presets": {
|
||||
"add": "Add preset",
|
||||
|
||||
@@ -871,7 +871,8 @@
|
||||
"file": "archivo",
|
||||
"chatAssigned": "{{by}} te ha pasado una conversación: {{name}}",
|
||||
"order": "Pedido n.º {{number}}",
|
||||
"noOrder": "Sin pedido en curso"
|
||||
"noOrder": "Sin pedido en curso",
|
||||
"autoFailed": "No hay profesional libre para el pedido n.º {{number}}: asígnalo manualmente."
|
||||
},
|
||||
"partner": {
|
||||
"valid": "{{name}} — {{level}}, tarjeta válida",
|
||||
@@ -1269,7 +1270,9 @@
|
||||
"residence_escortFrom": "Residencia: acompañamiento desde, AMD",
|
||||
"residence_stateFee": "Residencia: tasa estatal (1 año), AMD",
|
||||
"transfer_standardPrice": "Traslado «Estándar», AMD",
|
||||
"transfer_premiumPrice": "Traslado «Premium», AMD"
|
||||
"transfer_premiumPrice": "Traslado «Premium», AMD",
|
||||
"assign_auto": "Asignar pedidos automáticamente",
|
||||
"assign_maxAutoOffers": "Cuántos profesionales probar automáticamente"
|
||||
},
|
||||
"presets": {
|
||||
"add": "Añadir plantilla",
|
||||
|
||||
@@ -871,7 +871,8 @@
|
||||
"file": "ֆայլ",
|
||||
"chatAssigned": "{{by}}-ը ձեզ փոխանցեց զրույցը՝ {{name}}",
|
||||
"order": "Պատվեր №{{number}}",
|
||||
"noOrder": "Այժմ պատվեր չկա"
|
||||
"noOrder": "Այժմ պատվեր չկա",
|
||||
"autoFailed": "№{{number}} պատվերի համար ազատ կատարող չգտնվեց․ նշանակեք ձեռքով։"
|
||||
},
|
||||
"partner": {
|
||||
"valid": "{{name}} — {{level}}, քարտը գործում է",
|
||||
@@ -1269,7 +1270,9 @@
|
||||
"residence_escortFrom": "Կացության քարտ՝ ուղեկցում «սկսած», ֏",
|
||||
"residence_stateFee": "Կացության քարտ՝ պետտուրք 1 տարի, ֏",
|
||||
"transfer_standardPrice": "Տրանսֆեր «Ստանդարտ», ֏",
|
||||
"transfer_premiumPrice": "Տրանսֆեր «Պրեմիում», ֏"
|
||||
"transfer_premiumPrice": "Տրանսֆեր «Պրեմիում», ֏",
|
||||
"assign_auto": "Պատվերների ավտոմատ բաշխում",
|
||||
"assign_maxAutoOffers": "Քանի կատարող փորձել ավտոմատ"
|
||||
},
|
||||
"presets": {
|
||||
"add": "Ավելացնել նախադրվածք",
|
||||
|
||||
@@ -871,7 +871,8 @@
|
||||
"file": "файл",
|
||||
"chatAssigned": "{{by}} передал(а) вам диалог: {{name}}",
|
||||
"order": "Заказ №{{number}}",
|
||||
"noOrder": "Сейчас без заказа"
|
||||
"noOrder": "Сейчас без заказа",
|
||||
"autoFailed": "Не нашли свободного исполнителя для заказа №{{number}} — назначьте вручную."
|
||||
},
|
||||
"partner": {
|
||||
"valid": "{{name}} — {{level}}, карта действует",
|
||||
@@ -1269,7 +1270,9 @@
|
||||
"residence_escortFrom": "ВНЖ: сопровождение «от», ֏",
|
||||
"residence_stateFee": "ВНЖ: госпошлина на 1 год, ֏",
|
||||
"transfer_standardPrice": "Трансфер «Стандарт», ֏",
|
||||
"transfer_premiumPrice": "Трансфер «Премиум», ֏"
|
||||
"transfer_premiumPrice": "Трансфер «Премиум», ֏",
|
||||
"assign_auto": "Автораспределение заказов",
|
||||
"assign_maxAutoOffers": "Сколько исполнителей пробовать автоматически"
|
||||
},
|
||||
"presets": {
|
||||
"add": "Добавить пресет",
|
||||
|
||||
@@ -871,7 +871,8 @@
|
||||
"file": "文件",
|
||||
"chatAssigned": "{{by}} 将对话转交给你:{{name}}",
|
||||
"order": "订单 #{{number}}",
|
||||
"noOrder": "当前没有订单"
|
||||
"noOrder": "当前没有订单",
|
||||
"autoFailed": "订单 #{{number}} 没有找到空闲的服务人员,请手动分配。"
|
||||
},
|
||||
"partner": {
|
||||
"valid": "{{name}} — {{level}},会员卡有效",
|
||||
@@ -1269,7 +1270,9 @@
|
||||
"residence_escortFrom": "居留许可:陪同办理起价,֏",
|
||||
"residence_stateFee": "居留许可:1年国家规费,֏",
|
||||
"transfer_standardPrice": "接机「标准」,֏",
|
||||
"transfer_premiumPrice": "接机「高级」,֏"
|
||||
"transfer_premiumPrice": "接机「高级」,֏",
|
||||
"assign_auto": "自动分配订单",
|
||||
"assign_maxAutoOffers": "自动尝试的服务人员数量"
|
||||
},
|
||||
"presets": {
|
||||
"add": "添加方案",
|
||||
|
||||
Reference in new issue
Block a user