elevenlabs-webhook-nodejs 1.0.0
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/.claude/settings.local.json +27 -0
- package/.dockerignore +6 -0
- package/.env.example +43 -0
- package/BEFORE-PRODUCTION.md +32 -0
- package/Dockerfile +23 -0
- package/SYSTEM_OVERVIEW.md +942 -0
- package/SYSTEM_STATUS.md +332 -0
- package/backup_script/main.py +146 -0
- package/baileys/.dockerignore +7 -0
- package/baileys/Dockerfile +13 -0
- package/baileys/README.md +412 -0
- package/baileys/index.js +499 -0
- package/baileys/package-lock.json +2532 -0
- package/baileys/package.json +25 -0
- package/baileys/server.js +96 -0
- package/baileys/src/config.js +55 -0
- package/baileys/src/middleware/api-key.js +16 -0
- package/baileys/src/routes/accounts.js +51 -0
- package/baileys/src/routes/chats.js +103 -0
- package/baileys/src/routes/webhooks.js +34 -0
- package/baileys/src/services/account-store.js +259 -0
- package/baileys/src/services/webhook-dispatcher.js +161 -0
- package/baileys/src/services/worker-manager.js +597 -0
- package/baileys/src/utils/jid.js +79 -0
- package/baileys/src/utils/logger.js +16 -0
- package/baileys/src/utils/use-mongodb-auth-state.js +122 -0
- package/baileys/worker.js +721 -0
- package/dist/app.d.ts +1 -0
- package/dist/app.js +84 -0
- package/dist/app.js.map +1 -0
- package/dist/config/agentPrompts.json +19 -0
- package/dist/config/database.d.ts +1 -0
- package/dist/config/database.js +26 -0
- package/dist/config/database.js.map +1 -0
- package/dist/config/env.d.ts +41 -0
- package/dist/config/env.js +81 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.js +73 -0
- package/dist/config/index.js.map +1 -0
- package/dist/controllers/webhook.controller.d.ts +10 -0
- package/dist/controllers/webhook.controller.js +128 -0
- package/dist/controllers/webhook.controller.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.js +13 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/hooks/webhookValidator.d.ts +2 -0
- package/dist/hooks/webhookValidator.js +47 -0
- package/dist/hooks/webhookValidator.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/001_session-architecture.d.ts +3 -0
- package/dist/migrations/001_session-architecture.js +119 -0
- package/dist/migrations/001_session-architecture.js.map +1 -0
- package/dist/migrations/002_agent-ref.d.ts +3 -0
- package/dist/migrations/002_agent-ref.js +55 -0
- package/dist/migrations/002_agent-ref.js.map +1 -0
- package/dist/migrations/003_shift-schedule.d.ts +3 -0
- package/dist/migrations/003_shift-schedule.js +48 -0
- package/dist/migrations/003_shift-schedule.js.map +1 -0
- package/dist/migrations/004_invert-shift-to-clinic-hours.d.ts +3 -0
- package/dist/migrations/004_invert-shift-to-clinic-hours.js +27 -0
- package/dist/migrations/004_invert-shift-to-clinic-hours.js.map +1 -0
- package/dist/migrations/005_composite-baileys-chat-ids.d.ts +3 -0
- package/dist/migrations/005_composite-baileys-chat-ids.js +47 -0
- package/dist/migrations/005_composite-baileys-chat-ids.js.map +1 -0
- package/dist/migrations/migration.model.d.ts +18 -0
- package/dist/migrations/migration.model.js +45 -0
- package/dist/migrations/migration.model.js.map +1 -0
- package/dist/migrations/migration.routes.d.ts +2 -0
- package/dist/migrations/migration.routes.js +37 -0
- package/dist/migrations/migration.routes.js.map +1 -0
- package/dist/migrations/migration.runner.d.ts +19 -0
- package/dist/migrations/migration.runner.js +74 -0
- package/dist/migrations/migration.runner.js.map +1 -0
- package/dist/models/ConversationClaim.d.ts +13 -0
- package/dist/models/ConversationClaim.js +44 -0
- package/dist/models/ConversationClaim.js.map +1 -0
- package/dist/models/ConversationEvaluation.d.ts +23 -0
- package/dist/models/ConversationEvaluation.js +92 -0
- package/dist/models/ConversationEvaluation.js.map +1 -0
- package/dist/models/Summary.d.ts +37 -0
- package/dist/models/Summary.js +78 -0
- package/dist/models/Summary.js.map +1 -0
- package/dist/models/Transcription.d.ts +34 -0
- package/dist/models/Transcription.js +71 -0
- package/dist/models/Transcription.js.map +1 -0
- package/dist/models/WhatsAppRecipient.d.ts +23 -0
- package/dist/models/WhatsAppRecipient.js +53 -0
- package/dist/models/WhatsAppRecipient.js.map +1 -0
- package/dist/modules/admin/admin.routes.d.ts +2 -0
- package/dist/modules/admin/admin.routes.js +1966 -0
- package/dist/modules/admin/admin.routes.js.map +1 -0
- package/dist/modules/admin/elevenlabs-test-chat.routes.d.ts +2 -0
- package/dist/modules/admin/elevenlabs-test-chat.routes.js +158 -0
- package/dist/modules/admin/elevenlabs-test-chat.routes.js.map +1 -0
- package/dist/modules/admin/whatsapp-test-chat.routes.d.ts +2 -0
- package/dist/modules/admin/whatsapp-test-chat.routes.js +204 -0
- package/dist/modules/admin/whatsapp-test-chat.routes.js.map +1 -0
- package/dist/modules/agents/agent.model.d.ts +38 -0
- package/dist/modules/agents/agent.model.js +92 -0
- package/dist/modules/agents/agent.model.js.map +1 -0
- package/dist/modules/agents/agent.routes.d.ts +2 -0
- package/dist/modules/agents/agent.routes.js +61 -0
- package/dist/modules/agents/agent.routes.js.map +1 -0
- package/dist/modules/appointment-validation/appointment-validation.model.d.ts +76 -0
- package/dist/modules/appointment-validation/appointment-validation.model.js +118 -0
- package/dist/modules/appointment-validation/appointment-validation.model.js.map +1 -0
- package/dist/modules/appointment-validation/appointment-validation.routes.d.ts +2 -0
- package/dist/modules/appointment-validation/appointment-validation.routes.js +202 -0
- package/dist/modules/appointment-validation/appointment-validation.routes.js.map +1 -0
- package/dist/modules/appointment-validation/appointment-validation.service.d.ts +53 -0
- package/dist/modules/appointment-validation/appointment-validation.service.js +827 -0
- package/dist/modules/appointment-validation/appointment-validation.service.js.map +1 -0
- package/dist/modules/auth/auth.model.d.ts +17 -0
- package/dist/modules/auth/auth.model.js +64 -0
- package/dist/modules/auth/auth.model.js.map +1 -0
- package/dist/modules/auth/auth.routes.d.ts +2 -0
- package/dist/modules/auth/auth.routes.js +202 -0
- package/dist/modules/auth/auth.routes.js.map +1 -0
- package/dist/modules/auth/auth.service.d.ts +28 -0
- package/dist/modules/auth/auth.service.js +183 -0
- package/dist/modules/auth/auth.service.js.map +1 -0
- package/dist/modules/auth/refresh-token.model.d.ts +13 -0
- package/dist/modules/auth/refresh-token.model.js +52 -0
- package/dist/modules/auth/refresh-token.model.js.map +1 -0
- package/dist/modules/billing/billing-alert.model.d.ts +16 -0
- package/dist/modules/billing/billing-alert.model.js +47 -0
- package/dist/modules/billing/billing-alert.model.js.map +1 -0
- package/dist/modules/billing/billing-period-snapshot.model.d.ts +35 -0
- package/dist/modules/billing/billing-period-snapshot.model.js +68 -0
- package/dist/modules/billing/billing-period-snapshot.model.js.map +1 -0
- package/dist/modules/billing/billing.model.d.ts +18 -0
- package/dist/modules/billing/billing.model.js +62 -0
- package/dist/modules/billing/billing.model.js.map +1 -0
- package/dist/modules/billing/billing.routes.d.ts +2 -0
- package/dist/modules/billing/billing.routes.js +63 -0
- package/dist/modules/billing/billing.routes.js.map +1 -0
- package/dist/modules/billing/billing.service.d.ts +69 -0
- package/dist/modules/billing/billing.service.js +498 -0
- package/dist/modules/billing/billing.service.js.map +1 -0
- package/dist/modules/billing/payment.model.d.ts +24 -0
- package/dist/modules/billing/payment.model.js +57 -0
- package/dist/modules/billing/payment.model.js.map +1 -0
- package/dist/modules/calls/call.model.d.ts +41 -0
- package/dist/modules/calls/call.model.js +97 -0
- package/dist/modules/calls/call.model.js.map +1 -0
- package/dist/modules/calls/call.routes.d.ts +2 -0
- package/dist/modules/calls/call.routes.js +103 -0
- package/dist/modules/calls/call.routes.js.map +1 -0
- package/dist/modules/campaigns/campaign.model.d.ts +45 -0
- package/dist/modules/campaigns/campaign.model.js +98 -0
- package/dist/modules/campaigns/campaign.model.js.map +1 -0
- package/dist/modules/campaigns/campaign.routes.d.ts +2 -0
- package/dist/modules/campaigns/campaign.routes.js +323 -0
- package/dist/modules/campaigns/campaign.routes.js.map +1 -0
- package/dist/modules/campaigns/campaign.service.d.ts +11 -0
- package/dist/modules/campaigns/campaign.service.js +86 -0
- package/dist/modules/campaigns/campaign.service.js.map +1 -0
- package/dist/modules/google-calendar/google-calendar.routes.d.ts +2 -0
- package/dist/modules/google-calendar/google-calendar.routes.js +32 -0
- package/dist/modules/google-calendar/google-calendar.routes.js.map +1 -0
- package/dist/modules/inbound-call/inbound-call-config.model.d.ts +20 -0
- package/dist/modules/inbound-call/inbound-call-config.model.js +68 -0
- package/dist/modules/inbound-call/inbound-call-config.model.js.map +1 -0
- package/dist/modules/inbound-call/inbound-call.routes.d.ts +2 -0
- package/dist/modules/inbound-call/inbound-call.routes.js +243 -0
- package/dist/modules/inbound-call/inbound-call.routes.js.map +1 -0
- package/dist/modules/leads/lead.model.d.ts +24 -0
- package/dist/modules/leads/lead.model.js +54 -0
- package/dist/modules/leads/lead.model.js.map +1 -0
- package/dist/modules/leads/lead.routes.d.ts +2 -0
- package/dist/modules/leads/lead.routes.js +201 -0
- package/dist/modules/leads/lead.routes.js.map +1 -0
- package/dist/modules/plans/plan.model.d.ts +25 -0
- package/dist/modules/plans/plan.model.js +59 -0
- package/dist/modules/plans/plan.model.js.map +1 -0
- package/dist/modules/surveys/survey.model.d.ts +30 -0
- package/dist/modules/surveys/survey.model.js +75 -0
- package/dist/modules/surveys/survey.model.js.map +1 -0
- package/dist/modules/surveys/survey.routes.d.ts +2 -0
- package/dist/modules/surveys/survey.routes.js +153 -0
- package/dist/modules/surveys/survey.routes.js.map +1 -0
- package/dist/modules/tenants/tenant.model.d.ts +86 -0
- package/dist/modules/tenants/tenant.model.js +127 -0
- package/dist/modules/tenants/tenant.model.js.map +1 -0
- package/dist/modules/tenants/tenant.routes.d.ts +2 -0
- package/dist/modules/tenants/tenant.routes.js +65 -0
- package/dist/modules/tenants/tenant.routes.js.map +1 -0
- package/dist/modules/users/user.routes.d.ts +2 -0
- package/dist/modules/users/user.routes.js +106 -0
- package/dist/modules/users/user.routes.js.map +1 -0
- package/dist/modules/webhooks/elevenlabs-tool.routes.d.ts +20 -0
- package/dist/modules/webhooks/elevenlabs-tool.routes.js +85 -0
- package/dist/modules/webhooks/elevenlabs-tool.routes.js.map +1 -0
- package/dist/modules/webhooks/elevenlabs-tool.service.d.ts +11 -0
- package/dist/modules/webhooks/elevenlabs-tool.service.js +360 -0
- package/dist/modules/webhooks/elevenlabs-tool.service.js.map +1 -0
- package/dist/modules/webhooks/elevenlabs.routes.d.ts +2 -0
- package/dist/modules/webhooks/elevenlabs.routes.js +34 -0
- package/dist/modules/webhooks/elevenlabs.routes.js.map +1 -0
- package/dist/modules/webhooks/elevenlabs.service.d.ts +6 -0
- package/dist/modules/webhooks/elevenlabs.service.js +512 -0
- package/dist/modules/webhooks/elevenlabs.service.js.map +1 -0
- package/dist/modules/webhooks/unipile.routes.d.ts +2 -0
- package/dist/modules/webhooks/unipile.routes.js +780 -0
- package/dist/modules/webhooks/unipile.routes.js.map +1 -0
- package/dist/modules/whatsapp/appointment.model.d.ts +27 -0
- package/dist/modules/whatsapp/appointment.model.js +58 -0
- package/dist/modules/whatsapp/appointment.model.js.map +1 -0
- package/dist/modules/whatsapp/operator-request.model.d.ts +29 -0
- package/dist/modules/whatsapp/operator-request.model.js +65 -0
- package/dist/modules/whatsapp/operator-request.model.js.map +1 -0
- package/dist/modules/whatsapp/stt-usage.model.d.ts +16 -0
- package/dist/modules/whatsapp/stt-usage.model.js +53 -0
- package/dist/modules/whatsapp/stt-usage.model.js.map +1 -0
- package/dist/modules/whatsapp/whatsapp-chat.model.d.ts +23 -0
- package/dist/modules/whatsapp/whatsapp-chat.model.js +55 -0
- package/dist/modules/whatsapp/whatsapp-chat.model.js.map +1 -0
- package/dist/modules/whatsapp/whatsapp-contact-profile.model.d.ts +23 -0
- package/dist/modules/whatsapp/whatsapp-contact-profile.model.js +54 -0
- package/dist/modules/whatsapp/whatsapp-contact-profile.model.js.map +1 -0
- package/dist/modules/whatsapp/whatsapp-message.model.d.ts +30 -0
- package/dist/modules/whatsapp/whatsapp-message.model.js +52 -0
- package/dist/modules/whatsapp/whatsapp-message.model.js.map +1 -0
- package/dist/modules/whatsapp/whatsapp-session.model.d.ts +33 -0
- package/dist/modules/whatsapp/whatsapp-session.model.js +65 -0
- package/dist/modules/whatsapp/whatsapp-session.model.js.map +1 -0
- package/dist/modules/whatsapp/whatsapp.routes.d.ts +2 -0
- package/dist/modules/whatsapp/whatsapp.routes.js +1237 -0
- package/dist/modules/whatsapp/whatsapp.routes.js.map +1 -0
- package/dist/plugins/cors.d.ts +3 -0
- package/dist/plugins/cors.js +11 -0
- package/dist/plugins/cors.js.map +1 -0
- package/dist/plugins/jwt.d.ts +3 -0
- package/dist/plugins/jwt.js +22 -0
- package/dist/plugins/jwt.js.map +1 -0
- package/dist/plugins/rawBody.d.ts +3 -0
- package/dist/plugins/rawBody.js +16 -0
- package/dist/plugins/rawBody.js.map +1 -0
- package/dist/plugins/rbac.d.ts +5 -0
- package/dist/plugins/rbac.js +29 -0
- package/dist/plugins/rbac.js.map +1 -0
- package/dist/routes/admin.routes.d.ts +2 -0
- package/dist/routes/admin.routes.js +169 -0
- package/dist/routes/admin.routes.js.map +1 -0
- package/dist/routes/health.routes.d.ts +2 -0
- package/dist/routes/health.routes.js +16 -0
- package/dist/routes/health.routes.js.map +1 -0
- package/dist/routes/webhook.routes.d.ts +2 -0
- package/dist/routes/webhook.routes.js +17 -0
- package/dist/routes/webhook.routes.js.map +1 -0
- package/dist/services/ai/base.ai.d.ts +19 -0
- package/dist/services/ai/base.ai.js +120 -0
- package/dist/services/ai/base.ai.js.map +1 -0
- package/dist/services/ai/gemini.service.d.ts +11 -0
- package/dist/services/ai/gemini.service.js +43 -0
- package/dist/services/ai/gemini.service.js.map +1 -0
- package/dist/services/ai/index.d.ts +2 -0
- package/dist/services/ai/index.js +26 -0
- package/dist/services/ai/index.js.map +1 -0
- package/dist/services/ai/openai.service.d.ts +11 -0
- package/dist/services/ai/openai.service.js +50 -0
- package/dist/services/ai/openai.service.js.map +1 -0
- package/dist/services/elevenlabs.service.d.ts +52 -0
- package/dist/services/elevenlabs.service.js +447 -0
- package/dist/services/elevenlabs.service.js.map +1 -0
- package/dist/services/google-calendar.service.d.ts +60 -0
- package/dist/services/google-calendar.service.js +494 -0
- package/dist/services/google-calendar.service.js.map +1 -0
- package/dist/services/inbound-call-schedule.service.d.ts +11 -0
- package/dist/services/inbound-call-schedule.service.js +162 -0
- package/dist/services/inbound-call-schedule.service.js.map +1 -0
- package/dist/services/netgsm.service.d.ts +41 -0
- package/dist/services/netgsm.service.js +89 -0
- package/dist/services/netgsm.service.js.map +1 -0
- package/dist/services/unipile.service.d.ts +41 -0
- package/dist/services/unipile.service.js +149 -0
- package/dist/services/unipile.service.js.map +1 -0
- package/dist/services/whatsapp-agent.service.d.ts +139 -0
- package/dist/services/whatsapp-agent.service.js +2055 -0
- package/dist/services/whatsapp-agent.service.js.map +1 -0
- package/dist/services/whatsapp.service.d.ts +26 -0
- package/dist/services/whatsapp.service.js +206 -0
- package/dist/services/whatsapp.service.js.map +1 -0
- package/dist/templates/index.d.ts +39 -0
- package/dist/templates/index.js +35 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/receptionist.d.ts +2 -0
- package/dist/templates/receptionist.js +39 -0
- package/dist/templates/receptionist.js.map +1 -0
- package/dist/templates/survey.d.ts +2 -0
- package/dist/templates/survey.js +41 -0
- package/dist/templates/survey.js.map +1 -0
- package/dist/types/index.d.ts +173 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.js +105 -0
- package/dist/utils/logger.js.map +1 -0
- package/docker-compose.nestjs.yml +89 -0
- package/docker-compose.yml +78 -0
- package/docs/AI_AGENT_ENHANCEMENT_PLAN.md +164 -0
- package/docs/API.md +1193 -0
- package/docs/API_ENDPOINTS.md +344 -0
- package/docs/ARCHITECTURE.md +305 -0
- package/docs/AUTH_API.md +252 -0
- package/docs/BILLING_SMS_ALERTS.md +94 -0
- package/docs/CHAT_ASSIGNMENT_SYSTEM.md +118 -0
- package/docs/CLIENT_TOOLS_AND_FEATURES.md +337 -0
- package/docs/ELEVENLABS_WEBHOOK_TOOLS.md +644 -0
- package/docs/FRONTEND_CHECKLIST.md +227 -0
- package/docs/IMPLEMENTATION_STATUS.md +470 -0
- package/docs/MIGRATION_GUIDE.md +96 -0
- package/docs/MISSINGS_REPORT.md +507 -0
- package/docs/NESTJS_MIGRATION_REFERENCE.md +5136 -0
- package/docs/PROJECT_DESCRIPTION.md +1038 -0
- package/docs/SCALING.md +148 -0
- package/docs/SESSION_SUMMARY_2026_03_17.md +135 -0
- package/docs/WHATSAPP_AGENT.md +1086 -0
- package/docs/architecture/00-SYSTEM-OVERVIEW.md +318 -0
- package/docs/architecture/01-DATABASE-SCHEMA.md +2564 -0
- package/docs/architecture/02-AUTHENTICATION.md +1040 -0
- package/docs/architecture/03-MULTI-CLINIC.md +742 -0
- package/docs/architecture/04-WHATSAPP-AGENT.md +608 -0
- package/docs/architecture/05-OPERATOR-WORKFLOW.md +444 -0
- package/docs/architecture/06-BAILEYS-MICROSERVICE.md +616 -0
- package/docs/architecture/07-APPOINTMENTS.md +849 -0
- package/docs/architecture/08-VOICE-CALLS.md +470 -0
- package/docs/architecture/09-OUTBOUND-CAMPAIGNS.md +542 -0
- package/docs/architecture/10-CLIENT-TOOLS.md +665 -0
- package/docs/architecture/11-BILLING.md +458 -0
- package/docs/architecture/12-SECURITY.md +216 -0
- package/docs/architecture/13-LOGGING-AUDIT.md +549 -0
- package/docs/architecture/14-META-BUSINESS-API.md +454 -0
- package/docs/architecture/15-AI-MODULE.md +479 -0
- package/docs/architecture/16-BACKGROUND-JOBS.md +469 -0
- package/docs/architecture/17-REALTIME-LIVECHAT.md +447 -0
- package/docs/architecture/18-FILE-STORAGE.md +410 -0
- package/docs/architecture/19-PATIENTS.md +1034 -0
- package/docs/architecture/20-TREATMENTS-AND-PLANS.md +774 -0
- package/docs/architecture/21-BEFORE-AFTER-PHOTOS.md +519 -0
- package/docs/database.md +456 -0
- package/docs/ornek-randevu-onay.csv +3 -0
- package/ecosystem.config.js +16 -0
- package/elevenlabs-convai-api-reference.md +1171 -0
- package/frontend/.dockerignore +2 -0
- package/frontend/Dockerfile +24 -0
- package/frontend/README.md +75 -0
- package/frontend/components.json +25 -0
- package/frontend/eslint.config.js +23 -0
- package/frontend/index.html +13 -0
- package/frontend/nginx.conf +37 -0
- package/frontend/package-lock.json +8709 -0
- package/frontend/package.json +71 -0
- package/frontend/public/favicon.svg +1 -0
- package/frontend/public/icons.svg +24 -0
- package/frontend/src/App.tsx +125 -0
- package/frontend/src/components/error-boundary.tsx +50 -0
- package/frontend/src/components/shared/activity-timeline.tsx +66 -0
- package/frontend/src/components/shared/appointment-calendar.css +80 -0
- package/frontend/src/components/shared/appointment-calendar.tsx +245 -0
- package/frontend/src/components/shared/chat-bubble.tsx +72 -0
- package/frontend/src/components/shared/combobox.tsx +119 -0
- package/frontend/src/components/shared/confirm-dialog.tsx +57 -0
- package/frontend/src/components/shared/data-table-pagination.tsx +97 -0
- package/frontend/src/components/shared/data-table-toolbar.tsx +39 -0
- package/frontend/src/components/shared/empty-state.tsx +27 -0
- package/frontend/src/components/shared/file-upload.tsx +140 -0
- package/frontend/src/components/shared/index.ts +20 -0
- package/frontend/src/components/shared/language-switcher.tsx +29 -0
- package/frontend/src/components/shared/notification-dropdown.tsx +115 -0
- package/frontend/src/components/shared/page-header.tsx +23 -0
- package/frontend/src/components/shared/stat-card.tsx +37 -0
- package/frontend/src/components/shared/status-badge.tsx +70 -0
- package/frontend/src/components/shared/status-dot.tsx +43 -0
- package/frontend/src/components/ui/alert-dialog.tsx +187 -0
- package/frontend/src/components/ui/alert.tsx +76 -0
- package/frontend/src/components/ui/avatar.tsx +109 -0
- package/frontend/src/components/ui/badge.tsx +52 -0
- package/frontend/src/components/ui/breadcrumb.tsx +125 -0
- package/frontend/src/components/ui/button.tsx +60 -0
- package/frontend/src/components/ui/calendar.tsx +219 -0
- package/frontend/src/components/ui/card.tsx +103 -0
- package/frontend/src/components/ui/chart.tsx +371 -0
- package/frontend/src/components/ui/checkbox.tsx +29 -0
- package/frontend/src/components/ui/collapsible.tsx +19 -0
- package/frontend/src/components/ui/command.tsx +194 -0
- package/frontend/src/components/ui/dialog.tsx +158 -0
- package/frontend/src/components/ui/dropdown-menu.tsx +268 -0
- package/frontend/src/components/ui/input-group.tsx +156 -0
- package/frontend/src/components/ui/input.tsx +20 -0
- package/frontend/src/components/ui/label.tsx +20 -0
- package/frontend/src/components/ui/pagination.tsx +130 -0
- package/frontend/src/components/ui/popover.tsx +90 -0
- package/frontend/src/components/ui/progress.tsx +83 -0
- package/frontend/src/components/ui/radio-group.tsx +36 -0
- package/frontend/src/components/ui/scroll-area.tsx +54 -0
- package/frontend/src/components/ui/select.tsx +199 -0
- package/frontend/src/components/ui/separator.tsx +23 -0
- package/frontend/src/components/ui/sheet.tsx +138 -0
- package/frontend/src/components/ui/sidebar.tsx +723 -0
- package/frontend/src/components/ui/skeleton.tsx +13 -0
- package/frontend/src/components/ui/sonner.tsx +47 -0
- package/frontend/src/components/ui/switch.tsx +30 -0
- package/frontend/src/components/ui/table.tsx +114 -0
- package/frontend/src/components/ui/tabs.tsx +82 -0
- package/frontend/src/components/ui/textarea.tsx +18 -0
- package/frontend/src/components/ui/toggle-group.tsx +89 -0
- package/frontend/src/components/ui/toggle.tsx +43 -0
- package/frontend/src/components/ui/tooltip.tsx +64 -0
- package/frontend/src/hooks/use-mobile.ts +19 -0
- package/frontend/src/i18n/index.ts +20 -0
- package/frontend/src/i18n/locales/en.json +786 -0
- package/frontend/src/i18n/locales/tr.json +786 -0
- package/frontend/src/index.css +134 -0
- package/frontend/src/layouts/admin-layout.tsx +111 -0
- package/frontend/src/layouts/app-header.tsx +130 -0
- package/frontend/src/layouts/app-layout.tsx +19 -0
- package/frontend/src/layouts/app-sidebar.tsx +212 -0
- package/frontend/src/layouts/auth-guard.tsx +31 -0
- package/frontend/src/layouts/mobile-sidebar.tsx +120 -0
- package/frontend/src/lib/api.ts +68 -0
- package/frontend/src/lib/hooks/use-appointments.ts +224 -0
- package/frontend/src/lib/hooks/use-availability-blocks.ts +83 -0
- package/frontend/src/lib/hooks/use-chats.ts +236 -0
- package/frontend/src/lib/hooks/use-clinic-detail.ts +171 -0
- package/frontend/src/lib/hooks/use-clinics.ts +37 -0
- package/frontend/src/lib/hooks/use-doctor-calendar.ts +80 -0
- package/frontend/src/lib/hooks/use-examinations.ts +89 -0
- package/frontend/src/lib/hooks/use-medical-history.ts +52 -0
- package/frontend/src/lib/hooks/use-patients.ts +296 -0
- package/frontend/src/lib/hooks/use-photo-sets.ts +118 -0
- package/frontend/src/lib/hooks/use-treatment-plans.ts +152 -0
- package/frontend/src/lib/hooks/use-treatments.ts +125 -0
- package/frontend/src/lib/hooks/use-users.ts +172 -0
- package/frontend/src/lib/utils.ts +6 -0
- package/frontend/src/main.tsx +17 -0
- package/frontend/src/pages/admin/agents/detail.tsx +774 -0
- package/frontend/src/pages/admin/agents/import.tsx +280 -0
- package/frontend/src/pages/admin/agents/index.tsx +245 -0
- package/frontend/src/pages/admin/ai-playground.tsx +543 -0
- package/frontend/src/pages/appointments/create-appointment-dialog.tsx +390 -0
- package/frontend/src/pages/appointments/index.tsx +860 -0
- package/frontend/src/pages/audit/index.tsx +24 -0
- package/frontend/src/pages/auth/login.tsx +194 -0
- package/frontend/src/pages/billing/index.tsx +24 -0
- package/frontend/src/pages/calendar/index.tsx +704 -0
- package/frontend/src/pages/calendar-connections/index.tsx +295 -0
- package/frontend/src/pages/calls/index.tsx +24 -0
- package/frontend/src/pages/campaigns/index.tsx +24 -0
- package/frontend/src/pages/chats/index.tsx +981 -0
- package/frontend/src/pages/clinics/index.tsx +224 -0
- package/frontend/src/pages/clinics/settings.tsx +412 -0
- package/frontend/src/pages/components-showcase.tsx +773 -0
- package/frontend/src/pages/connections/index.tsx +328 -0
- package/frontend/src/pages/dashboard.tsx +50 -0
- package/frontend/src/pages/leads/index.tsx +24 -0
- package/frontend/src/pages/my-schedule/index.tsx +496 -0
- package/frontend/src/pages/patients/create-patient-dialog.tsx +358 -0
- package/frontend/src/pages/patients/detail.tsx +1195 -0
- package/frontend/src/pages/patients/edit-patient-dialog.tsx +387 -0
- package/frontend/src/pages/patients/examinations-tab.tsx +460 -0
- package/frontend/src/pages/patients/index.tsx +381 -0
- package/frontend/src/pages/patients/medical-history-dialog.tsx +207 -0
- package/frontend/src/pages/patients/photo-sets-tab.tsx +616 -0
- package/frontend/src/pages/patients/timeline-tab.tsx +164 -0
- package/frontend/src/pages/patients/treatment-plans-tab.tsx +598 -0
- package/frontend/src/pages/phone-numbers/detail.tsx +427 -0
- package/frontend/src/pages/phone-numbers/index.tsx +455 -0
- package/frontend/src/pages/platform/index.tsx +454 -0
- package/frontend/src/pages/settings/index.tsx +126 -0
- package/frontend/src/pages/treatments/index.tsx +487 -0
- package/frontend/src/pages/users/doctor-profile.tsx +672 -0
- package/frontend/src/pages/users/edit.tsx +329 -0
- package/frontend/src/pages/users/index.tsx +407 -0
- package/frontend/src/pages/validation/index.tsx +24 -0
- package/frontend/src/stores/auth.store.ts +108 -0
- package/frontend/src/stores/ui.store.ts +41 -0
- package/frontend/tsconfig.app.json +32 -0
- package/frontend/tsconfig.json +13 -0
- package/frontend/tsconfig.node.json +26 -0
- package/frontend/vite.config.ts +29 -0
- package/nestjs/.dockerignore +5 -0
- package/nestjs/.env.docker +64 -0
- package/nestjs/.prettierrc +4 -0
- package/nestjs/Dockerfile +36 -0
- package/nestjs/README.md +98 -0
- package/nestjs/eslint.config.mjs +35 -0
- package/nestjs/nest-cli.json +8 -0
- package/nestjs/package-lock.json +13390 -0
- package/nestjs/package.json +114 -0
- package/nestjs/prisma/migrations/20260409161536_add_message_metadata_fields/migration.sql +1746 -0
- package/nestjs/prisma/migrations/20260410140436_add_agent_ai_fields/migration.sql +36 -0
- package/nestjs/prisma/migrations/20260410175519_add_agent_clinic_assignments/migration.sql +21 -0
- package/nestjs/prisma/migrations/20260412094344_make_agent_tenant_optional/migration.sql +2 -0
- package/nestjs/prisma/migrations/20260412110008_add_admin_chat_sessions/migration.sql +47 -0
- package/nestjs/prisma/migrations/migration_lock.toml +3 -0
- package/nestjs/prisma/schema.prisma +1843 -0
- package/nestjs/prisma/seed.ts +375 -0
- package/nestjs/prisma.config.ts +14 -0
- package/nestjs/src/admin/admin.controller.ts +27 -0
- package/nestjs/src/admin/admin.module.ts +16 -0
- package/nestjs/src/admin/admin.service.ts +91 -0
- package/nestjs/src/admin/ai-chat-session.service.ts +454 -0
- package/nestjs/src/admin/ai-test.controller.ts +191 -0
- package/nestjs/src/admin/superadmin.controller.ts +106 -0
- package/nestjs/src/agents/agents.controller.ts +262 -0
- package/nestjs/src/agents/agents.module.ts +13 -0
- package/nestjs/src/agents/agents.service.ts +733 -0
- package/nestjs/src/agents/dto/create-agent.dto.ts +99 -0
- package/nestjs/src/agents/dto/index.ts +2 -0
- package/nestjs/src/agents/dto/update-agent.dto.ts +148 -0
- package/nestjs/src/app.module.ts +115 -0
- package/nestjs/src/appointment-validation/appointment-validation.controller.ts +194 -0
- package/nestjs/src/appointment-validation/appointment-validation.module.ts +16 -0
- package/nestjs/src/appointment-validation/appointment-validation.service.ts +450 -0
- package/nestjs/src/appointment-validation/dto/create-batch.dto.ts +105 -0
- package/nestjs/src/appointment-validation/dto/index.ts +1 -0
- package/nestjs/src/appointment-validation/processors/validation-dispatch.processor.ts +26 -0
- package/nestjs/src/appointment-validation/processors/validation-sync.processor.ts +23 -0
- package/nestjs/src/appointments/appointments.controller.ts +268 -0
- package/nestjs/src/appointments/appointments.module.ts +13 -0
- package/nestjs/src/appointments/appointments.service.ts +773 -0
- package/nestjs/src/appointments/dto/create-appointment.dto.ts +72 -0
- package/nestjs/src/appointments/dto/index.ts +4 -0
- package/nestjs/src/appointments/dto/query-appointments.dto.ts +60 -0
- package/nestjs/src/appointments/dto/update-appointment.dto.ts +43 -0
- package/nestjs/src/appointments/dto/update-status.dto.ts +18 -0
- package/nestjs/src/appointments/processors/reminder.processor.ts +243 -0
- package/nestjs/src/audit/audit.controller.ts +84 -0
- package/nestjs/src/audit/audit.decorator.ts +20 -0
- package/nestjs/src/audit/audit.interceptor.ts +67 -0
- package/nestjs/src/audit/audit.interfaces.ts +15 -0
- package/nestjs/src/audit/audit.module.ts +12 -0
- package/nestjs/src/audit/audit.service.ts +177 -0
- package/nestjs/src/auth/auth.controller.ts +116 -0
- package/nestjs/src/auth/auth.module.ts +25 -0
- package/nestjs/src/auth/auth.service.ts +612 -0
- package/nestjs/src/auth/dto/change-password.dto.ts +13 -0
- package/nestjs/src/auth/dto/forgot-password.dto.ts +8 -0
- package/nestjs/src/auth/dto/index.ts +6 -0
- package/nestjs/src/auth/dto/login.dto.ts +13 -0
- package/nestjs/src/auth/dto/refresh.dto.ts +8 -0
- package/nestjs/src/auth/dto/register.dto.ts +28 -0
- package/nestjs/src/auth/dto/reset-password.dto.ts +13 -0
- package/nestjs/src/auth/permissions.config.ts +85 -0
- package/nestjs/src/availability-blocks/availability-blocks.controller.ts +83 -0
- package/nestjs/src/availability-blocks/availability-blocks.module.ts +10 -0
- package/nestjs/src/availability-blocks/availability-blocks.service.ts +202 -0
- package/nestjs/src/billing/billing.controller.ts +104 -0
- package/nestjs/src/billing/billing.module.ts +12 -0
- package/nestjs/src/billing/billing.service.ts +398 -0
- package/nestjs/src/billing/dto/index.ts +2 -0
- package/nestjs/src/billing/dto/query-billing.dto.ts +29 -0
- package/nestjs/src/billing/dto/record-payment.dto.ts +60 -0
- package/nestjs/src/billing/processors/alerts.processor.ts +216 -0
- package/nestjs/src/billing/processors/snapshot.processor.ts +181 -0
- package/nestjs/src/calls/calls.controller.ts +92 -0
- package/nestjs/src/calls/calls.module.ts +10 -0
- package/nestjs/src/calls/calls.service.ts +359 -0
- package/nestjs/src/calls/dto/index.ts +1 -0
- package/nestjs/src/calls/dto/query-calls.dto.ts +46 -0
- package/nestjs/src/clinics/clinics.controller.ts +226 -0
- package/nestjs/src/clinics/clinics.module.ts +11 -0
- package/nestjs/src/clinics/clinics.service.ts +203 -0
- package/nestjs/src/clinics/dto/create-clinic.dto.ts +40 -0
- package/nestjs/src/clinics/dto/create-meta-connection.dto.ts +44 -0
- package/nestjs/src/clinics/dto/index.ts +4 -0
- package/nestjs/src/clinics/dto/update-clinic.dto.ts +133 -0
- package/nestjs/src/clinics/dto/update-meta-connection.dto.ts +22 -0
- package/nestjs/src/clinics/meta-connections.service.ts +210 -0
- package/nestjs/src/common/decorators/accessible-clinics.decorator.ts +9 -0
- package/nestjs/src/common/decorators/current-user.decorator.ts +10 -0
- package/nestjs/src/common/decorators/features.decorator.ts +7 -0
- package/nestjs/src/common/decorators/index.ts +4 -0
- package/nestjs/src/common/decorators/permissions.decorator.ts +13 -0
- package/nestjs/src/common/gateways/events.gateway.ts +157 -0
- package/nestjs/src/common/guards/clinic-access.guard.ts +40 -0
- package/nestjs/src/common/guards/features.guard.ts +38 -0
- package/nestjs/src/common/guards/index.ts +5 -0
- package/nestjs/src/common/guards/jwt-auth.guard.ts +54 -0
- package/nestjs/src/common/guards/permissions.guard.ts +50 -0
- package/nestjs/src/common/guards/superadmin.guard.ts +35 -0
- package/nestjs/src/common/interceptors/request-context.interceptor.ts +32 -0
- package/nestjs/src/common/interceptors/superadmin-tenant.interceptor.ts +42 -0
- package/nestjs/src/common/interfaces/jwt-payload.interface.ts +11 -0
- package/nestjs/src/config/config.module.ts +13 -0
- package/nestjs/src/database/database.module.ts +9 -0
- package/nestjs/src/database/prisma.service.ts +20 -0
- package/nestjs/src/database/tenant-context.ts +27 -0
- package/nestjs/src/google-calendar/google-calendar.controller.ts +259 -0
- package/nestjs/src/google-calendar/google-calendar.module.ts +10 -0
- package/nestjs/src/google-calendar/google-calendar.service.ts +811 -0
- package/nestjs/src/integrations/ai/ai.interface.ts +74 -0
- package/nestjs/src/integrations/ai/ai.module.ts +11 -0
- package/nestjs/src/integrations/ai/ai.service.ts +148 -0
- package/nestjs/src/integrations/ai/providers/anthropic.provider.ts +146 -0
- package/nestjs/src/integrations/ai/providers/openai.provider.ts +158 -0
- package/nestjs/src/integrations/elevenlabs/elevenlabs.module.ts +8 -0
- package/nestjs/src/integrations/elevenlabs/elevenlabs.service.ts +226 -0
- package/nestjs/src/integrations/encryption/encryption.module.ts +9 -0
- package/nestjs/src/integrations/encryption/encryption.service.ts +31 -0
- package/nestjs/src/integrations/image/image.module.ts +9 -0
- package/nestjs/src/integrations/image/image.service.ts +61 -0
- package/nestjs/src/integrations/meta-business/meta-business.module.ts +10 -0
- package/nestjs/src/integrations/meta-business/meta-instagram.service.ts +94 -0
- package/nestjs/src/integrations/meta-business/meta-webhook.service.ts +52 -0
- package/nestjs/src/integrations/meta-business/meta-whatsapp.service.ts +254 -0
- package/nestjs/src/integrations/minio/minio.module.ts +9 -0
- package/nestjs/src/integrations/minio/minio.service.ts +88 -0
- package/nestjs/src/integrations/netgsm/netgsm.module.ts +8 -0
- package/nestjs/src/integrations/netgsm/netgsm.service.ts +17 -0
- package/nestjs/src/integrations/tektippay/tektippay.module.ts +8 -0
- package/nestjs/src/integrations/tektippay/tektippay.service.ts +23 -0
- package/nestjs/src/leads/dto/index.ts +2 -0
- package/nestjs/src/leads/dto/query-leads.dto.ts +50 -0
- package/nestjs/src/leads/dto/update-lead.dto.ts +26 -0
- package/nestjs/src/leads/leads.controller.ts +184 -0
- package/nestjs/src/leads/leads.module.ts +10 -0
- package/nestjs/src/leads/leads.service.ts +375 -0
- package/nestjs/src/logging/logging.controller.ts +82 -0
- package/nestjs/src/logging/logging.module.ts +11 -0
- package/nestjs/src/logging/logging.service.ts +180 -0
- package/nestjs/src/main.ts +86 -0
- package/nestjs/src/outbound-campaigns/dto/create-campaign.dto.ts +47 -0
- package/nestjs/src/outbound-campaigns/dto/index.ts +3 -0
- package/nestjs/src/outbound-campaigns/dto/update-campaign.dto.ts +31 -0
- package/nestjs/src/outbound-campaigns/dto/upload-entries.dto.ts +35 -0
- package/nestjs/src/outbound-campaigns/outbound-campaigns.controller.ts +307 -0
- package/nestjs/src/outbound-campaigns/outbound-campaigns.module.ts +13 -0
- package/nestjs/src/outbound-campaigns/outbound-campaigns.service.ts +471 -0
- package/nestjs/src/outbound-campaigns/processors/campaign-dispatch.processor.ts +366 -0
- package/nestjs/src/patients/documents.service.ts +231 -0
- package/nestjs/src/patients/dto/create-examination.dto.ts +34 -0
- package/nestjs/src/patients/dto/create-note.dto.ts +14 -0
- package/nestjs/src/patients/dto/create-patient.dto.ts +86 -0
- package/nestjs/src/patients/dto/create-photo-set.dto.ts +32 -0
- package/nestjs/src/patients/dto/index.ts +10 -0
- package/nestjs/src/patients/dto/update-examination.dto.ts +29 -0
- package/nestjs/src/patients/dto/update-medical-history.dto.ts +47 -0
- package/nestjs/src/patients/dto/update-patient.dto.ts +87 -0
- package/nestjs/src/patients/dto/update-photo-set.dto.ts +28 -0
- package/nestjs/src/patients/dto/upload-document.dto.ts +31 -0
- package/nestjs/src/patients/dto/upload-photo.dto.ts +27 -0
- package/nestjs/src/patients/examinations.service.ts +271 -0
- package/nestjs/src/patients/medical-history.service.ts +149 -0
- package/nestjs/src/patients/notes.service.ts +172 -0
- package/nestjs/src/patients/patients.controller.ts +485 -0
- package/nestjs/src/patients/patients.module.ts +22 -0
- package/nestjs/src/patients/patients.service.ts +412 -0
- package/nestjs/src/patients/photo-sets.service.ts +389 -0
- package/nestjs/src/phone-numbers/dto/create-phone-number.dto.ts +57 -0
- package/nestjs/src/phone-numbers/dto/index.ts +3 -0
- package/nestjs/src/phone-numbers/dto/update-phone-number.dto.ts +38 -0
- package/nestjs/src/phone-numbers/dto/update-schedule.dto.ts +39 -0
- package/nestjs/src/phone-numbers/phone-numbers.controller.ts +125 -0
- package/nestjs/src/phone-numbers/phone-numbers.module.ts +10 -0
- package/nestjs/src/phone-numbers/phone-numbers.service.ts +209 -0
- package/nestjs/src/plans/dto/create-plan.dto.ts +70 -0
- package/nestjs/src/plans/dto/index.ts +2 -0
- package/nestjs/src/plans/dto/update-plan.dto.ts +80 -0
- package/nestjs/src/plans/plans.controller.ts +50 -0
- package/nestjs/src/plans/plans.module.ts +10 -0
- package/nestjs/src/plans/plans.service.ts +115 -0
- package/nestjs/src/platform/dto/create-tenant.dto.ts +36 -0
- package/nestjs/src/platform/dto/index.ts +2 -0
- package/nestjs/src/platform/dto/update-tenant-platform.dto.ts +44 -0
- package/nestjs/src/platform/platform.controller.ts +79 -0
- package/nestjs/src/platform/platform.module.ts +10 -0
- package/nestjs/src/platform/platform.service.ts +301 -0
- package/nestjs/src/queue/queue.module.ts +56 -0
- package/nestjs/src/redis/redis.module.ts +20 -0
- package/nestjs/src/tenants/dto/index.ts +1 -0
- package/nestjs/src/tenants/dto/update-tenant.dto.ts +15 -0
- package/nestjs/src/tenants/tenants.controller.ts +45 -0
- package/nestjs/src/tenants/tenants.module.ts +10 -0
- package/nestjs/src/tenants/tenants.service.ts +41 -0
- package/nestjs/src/tools/adapters/elevenlabs-http.adapter.ts +51 -0
- package/nestjs/src/tools/adapters/elevenlabs-ws.adapter.ts +59 -0
- package/nestjs/src/tools/handlers/calendar.tools.ts +441 -0
- package/nestjs/src/tools/handlers/notification.tools.ts +34 -0
- package/nestjs/src/tools/handlers/operator.tools.ts +303 -0
- package/nestjs/src/tools/handlers/patient.tools.ts +242 -0
- package/nestjs/src/tools/handlers/payment.tools.ts +43 -0
- package/nestjs/src/tools/handlers/validation.tools.ts +152 -0
- package/nestjs/src/tools/tool-registry.service.ts +221 -0
- package/nestjs/src/tools/tool.decorator.ts +16 -0
- package/nestjs/src/tools/tool.interfaces.ts +26 -0
- package/nestjs/src/tools/tools.module.ts +50 -0
- package/nestjs/src/treatments/dto/create-plan-item.dto.ts +27 -0
- package/nestjs/src/treatments/dto/create-treatment-plan.dto.ts +69 -0
- package/nestjs/src/treatments/dto/create-treatment.dto.ts +59 -0
- package/nestjs/src/treatments/dto/index.ts +6 -0
- package/nestjs/src/treatments/dto/update-plan-item.dto.ts +23 -0
- package/nestjs/src/treatments/dto/update-treatment-plan.dto.ts +22 -0
- package/nestjs/src/treatments/dto/update-treatment.dto.ts +70 -0
- package/nestjs/src/treatments/treatment-plans.service.ts +362 -0
- package/nestjs/src/treatments/treatments.controller.ts +265 -0
- package/nestjs/src/treatments/treatments.module.ts +14 -0
- package/nestjs/src/treatments/treatments.service.ts +165 -0
- package/nestjs/src/users/doctor-profiles.service.ts +202 -0
- package/nestjs/src/users/dto/index.ts +4 -0
- package/nestjs/src/users/dto/invite-user.dto.ts +52 -0
- package/nestjs/src/users/dto/update-clinic-assignments.dto.ts +9 -0
- package/nestjs/src/users/dto/update-doctor-profile.dto.ts +49 -0
- package/nestjs/src/users/dto/update-user.dto.ts +41 -0
- package/nestjs/src/users/users.controller.ts +142 -0
- package/nestjs/src/users/users.module.ts +11 -0
- package/nestjs/src/users/users.service.ts +250 -0
- package/nestjs/src/webhooks/elevenlabs-tool.controller.ts +66 -0
- package/nestjs/src/webhooks/elevenlabs-webhook.controller.ts +60 -0
- package/nestjs/src/webhooks/meta-webhook.controller.ts +178 -0
- package/nestjs/src/webhooks/processors/elevenlabs-webhook.processor.ts +28 -0
- package/nestjs/src/webhooks/webhooks.module.ts +17 -0
- package/nestjs/src/whatsapp/chat-context.service.ts +281 -0
- package/nestjs/src/whatsapp/dto/add-blacklist.dto.ts +13 -0
- package/nestjs/src/whatsapp/dto/index.ts +2 -0
- package/nestjs/src/whatsapp/dto/send-message.dto.ts +14 -0
- package/nestjs/src/whatsapp/listeners/meta-message.listener.ts +579 -0
- package/nestjs/src/whatsapp/meta-auth.controller.ts +268 -0
- package/nestjs/src/whatsapp/meta-instagram-auth.controller.ts +244 -0
- package/nestjs/src/whatsapp/operator.service.ts +692 -0
- package/nestjs/src/whatsapp/processors/cost-sweep.processor.ts +130 -0
- package/nestjs/src/whatsapp/processors/grace.processor.ts +191 -0
- package/nestjs/src/whatsapp/processors/message-buffer.processor.ts +138 -0
- package/nestjs/src/whatsapp/processors/message-cleanup.processor.ts +148 -0
- package/nestjs/src/whatsapp/processors/meta-token-refresh.processor.ts +114 -0
- package/nestjs/src/whatsapp/processors/operator-expiry.processor.ts +105 -0
- package/nestjs/src/whatsapp/processors/profile-update.processor.ts +234 -0
- package/nestjs/src/whatsapp/processors/session-cleanup.processor.ts +178 -0
- package/nestjs/src/whatsapp/processors/session-labels.processor.ts +248 -0
- package/nestjs/src/whatsapp/whatsapp-agent.service.ts +2506 -0
- package/nestjs/src/whatsapp/whatsapp-recovery.service.ts +117 -0
- package/nestjs/src/whatsapp/whatsapp.controller.ts +398 -0
- package/nestjs/src/whatsapp/whatsapp.module.ts +51 -0
- package/nestjs/src/whatsapp/whatsapp.service.ts +592 -0
- package/nestjs/test/app.e2e-spec.ts +25 -0
- package/nestjs/test/jest-e2e.json +9 -0
- package/nestjs/tsconfig.build.json +4 -0
- package/nestjs/tsconfig.json +25 -0
- package/nginx.example.conf +18 -0
- package/package.json +47 -0
- package/scripts/addRecipient.ts +48 -0
- package/scripts/listRecipients.ts +31 -0
- package/scripts/migrate-agent-ref.ts +86 -0
- package/scripts/migrate-sessions.ts +183 -0
- package/scripts/promote.ts +27 -0
- package/scripts/retrigger.ts +84 -0
- package/scripts/seed.ts +435 -0
- package/scripts/testSend.ts +63 -0
- package/src/app.ts +85 -0
- package/src/config/agentPrompts.json +19 -0
- package/src/config/database.ts +21 -0
- package/src/config/env.ts +94 -0
- package/src/config/index.ts +86 -0
- package/src/controllers/webhook.controller.ts +150 -0
- package/src/errors/index.ts +9 -0
- package/src/hooks/webhookValidator.ts +55 -0
- package/src/index.ts +68 -0
- package/src/migrations/001_session-architecture.ts +138 -0
- package/src/migrations/002_agent-ref.ts +65 -0
- package/src/migrations/003_shift-schedule.ts +55 -0
- package/src/migrations/004_invert-shift-to-clinic-hours.ts +30 -0
- package/src/migrations/005_composite-baileys-chat-ids.ts +60 -0
- package/src/migrations/migration.model.ts +27 -0
- package/src/migrations/migration.routes.ts +40 -0
- package/src/migrations/migration.runner.ts +112 -0
- package/src/models/ConversationClaim.ts +17 -0
- package/src/models/ConversationEvaluation.ts +91 -0
- package/src/models/Summary.ts +77 -0
- package/src/models/Transcription.ts +68 -0
- package/src/models/WhatsAppRecipient.ts +37 -0
- package/src/modules/admin/admin.routes.ts +2385 -0
- package/src/modules/admin/elevenlabs-test-chat.routes.ts +193 -0
- package/src/modules/admin/whatsapp-test-chat.routes.ts +244 -0
- package/src/modules/agents/agent.model.ts +93 -0
- package/src/modules/agents/agent.routes.ts +65 -0
- package/src/modules/appointment-validation/appointment-validation.model.ts +163 -0
- package/src/modules/appointment-validation/appointment-validation.routes.ts +275 -0
- package/src/modules/appointment-validation/appointment-validation.service.ts +1028 -0
- package/src/modules/auth/auth.model.ts +42 -0
- package/src/modules/auth/auth.routes.ts +199 -0
- package/src/modules/auth/auth.service.ts +210 -0
- package/src/modules/auth/refresh-token.model.ts +26 -0
- package/src/modules/billing/billing-alert.model.ts +28 -0
- package/src/modules/billing/billing-period-snapshot.model.ts +68 -0
- package/src/modules/billing/billing.model.ts +42 -0
- package/src/modules/billing/billing.routes.ts +67 -0
- package/src/modules/billing/billing.service.ts +562 -0
- package/src/modules/billing/payment.model.ts +42 -0
- package/src/modules/calls/call.model.ts +102 -0
- package/src/modules/calls/call.routes.ts +118 -0
- package/src/modules/campaigns/campaign.model.ts +111 -0
- package/src/modules/campaigns/campaign.routes.ts +402 -0
- package/src/modules/campaigns/campaign.service.ts +99 -0
- package/src/modules/google-calendar/google-calendar.routes.ts +31 -0
- package/src/modules/inbound-call/inbound-call-config.model.ts +49 -0
- package/src/modules/inbound-call/inbound-call.routes.ts +289 -0
- package/src/modules/leads/lead.model.ts +40 -0
- package/src/modules/leads/lead.routes.ts +246 -0
- package/src/modules/logs/log.model.ts +27 -0
- package/src/modules/logs/log.routes.ts +102 -0
- package/src/modules/plans/plan.model.ts +45 -0
- package/src/modules/surveys/survey.model.ts +70 -0
- package/src/modules/surveys/survey.routes.ts +187 -0
- package/src/modules/tenants/tenant.model.ts +181 -0
- package/src/modules/tenants/tenant.routes.ts +78 -0
- package/src/modules/users/user.routes.ts +126 -0
- package/src/modules/webhooks/elevenlabs-tool.routes.ts +94 -0
- package/src/modules/webhooks/elevenlabs-tool.service.ts +491 -0
- package/src/modules/webhooks/elevenlabs.routes.ts +34 -0
- package/src/modules/webhooks/elevenlabs.service.ts +565 -0
- package/src/modules/webhooks/unipile.routes.ts +917 -0
- package/src/modules/whatsapp/appointment.model.ts +47 -0
- package/src/modules/whatsapp/operator-request.model.ts +58 -0
- package/src/modules/whatsapp/stt-usage.model.ts +30 -0
- package/src/modules/whatsapp/whatsapp-chat.model.ts +39 -0
- package/src/modules/whatsapp/whatsapp-contact-profile.model.ts +41 -0
- package/src/modules/whatsapp/whatsapp-message.model.ts +41 -0
- package/src/modules/whatsapp/whatsapp-session.model.ts +60 -0
- package/src/modules/whatsapp/whatsapp.routes.ts +1435 -0
- package/src/plugins/cors.ts +7 -0
- package/src/plugins/jwt.ts +18 -0
- package/src/plugins/rawBody.ts +12 -0
- package/src/plugins/rbac.ts +24 -0
- package/src/routes/admin.routes.ts +208 -0
- package/src/routes/health.routes.ts +12 -0
- package/src/routes/webhook.routes.ts +12 -0
- package/src/services/ai/base.ai.ts +132 -0
- package/src/services/ai/gemini.service.ts +41 -0
- package/src/services/ai/index.ts +24 -0
- package/src/services/ai/openai.service.ts +48 -0
- package/src/services/elevenlabs.service.ts +532 -0
- package/src/services/google-calendar.service.ts +656 -0
- package/src/services/inbound-call-schedule.service.ts +174 -0
- package/src/services/netgsm.service.ts +128 -0
- package/src/services/unipile.service.ts +200 -0
- package/src/services/whatsapp-agent.service.ts +2479 -0
- package/src/services/whatsapp.service.ts +245 -0
- package/src/templates/index.ts +71 -0
- package/src/templates/receptionist.ts +44 -0
- package/src/templates/survey.ts +44 -0
- package/src/types/index.ts +218 -0
- package/src/utils/logger.ts +83 -0
- package/tsconfig.json +19 -0
- package/web/.dockerignore +4 -0
- package/web/Dockerfile +18 -0
- package/web/README.md +73 -0
- package/web/components.json +23 -0
- package/web/eslint.config.js +23 -0
- package/web/index.html +14 -0
- package/web/nginx.conf +18 -0
- package/web/package-lock.json +10292 -0
- package/web/package.json +48 -0
- package/web/public/favicon.ico +0 -0
- package/web/public/vite.svg +1 -0
- package/web/src/App.tsx +191 -0
- package/web/src/assets/react.svg +1 -0
- package/web/src/components/Layout.tsx +261 -0
- package/web/src/components/LeadConversation.tsx +251 -0
- package/web/src/components/ProtectedRoute.tsx +20 -0
- package/web/src/components/conversation-review/CardAudioPlayer.tsx +200 -0
- package/web/src/components/conversation-review/CardEvaluation.tsx +351 -0
- package/web/src/components/conversation-review/CardMetadata.tsx +44 -0
- package/web/src/components/conversation-review/ConversationCard.tsx +95 -0
- package/web/src/components/conversation-review/ReviewContainer.tsx +120 -0
- package/web/src/components/conversation-review/ReviewFilters.tsx +88 -0
- package/web/src/components/empty-state.tsx +15 -0
- package/web/src/components/page-header.tsx +19 -0
- package/web/src/components/page-loader.tsx +32 -0
- package/web/src/components/pagination.tsx +38 -0
- package/web/src/components/stat-card.tsx +27 -0
- package/web/src/components/status-badge.tsx +125 -0
- package/web/src/components/ui/alert.tsx +66 -0
- package/web/src/components/ui/badge.tsx +48 -0
- package/web/src/components/ui/button.tsx +64 -0
- package/web/src/components/ui/card.tsx +92 -0
- package/web/src/components/ui/checkbox.tsx +32 -0
- package/web/src/components/ui/dialog.tsx +158 -0
- package/web/src/components/ui/dropdown-menu.tsx +255 -0
- package/web/src/components/ui/input.tsx +21 -0
- package/web/src/components/ui/label.tsx +22 -0
- package/web/src/components/ui/progress.tsx +29 -0
- package/web/src/components/ui/select.tsx +188 -0
- package/web/src/components/ui/separator.tsx +28 -0
- package/web/src/components/ui/sheet.tsx +123 -0
- package/web/src/components/ui/skeleton.tsx +13 -0
- package/web/src/components/ui/sonner.tsx +35 -0
- package/web/src/components/ui/table.tsx +116 -0
- package/web/src/components/ui/tabs.tsx +89 -0
- package/web/src/components/ui/textarea.tsx +18 -0
- package/web/src/components/ui/tooltip.tsx +57 -0
- package/web/src/components/whatsapp/ChatDetail.tsx +417 -0
- package/web/src/components/whatsapp/ChatHeader.tsx +78 -0
- package/web/src/components/whatsapp/ChatList.tsx +107 -0
- package/web/src/components/whatsapp/ChatListItem.tsx +60 -0
- package/web/src/components/whatsapp/MessageBubble.tsx +46 -0
- package/web/src/components/whatsapp/MessageInput.tsx +63 -0
- package/web/src/components/whatsapp/MessageStream.tsx +135 -0
- package/web/src/components/whatsapp/SessionDivider.tsx +65 -0
- package/web/src/components/whatsapp/SessionHistory.tsx +119 -0
- package/web/src/components/whatsapp/settings/AiSettingsTab.tsx +268 -0
- package/web/src/components/whatsapp/settings/CalendarTab.tsx +339 -0
- package/web/src/components/whatsapp/settings/ConnectionTab.tsx +236 -0
- package/web/src/components/whatsapp/settings/NotificationsTab.tsx +109 -0
- package/web/src/components/whatsapp/settings/OperatorTab.tsx +303 -0
- package/web/src/contexts/AuthContext.tsx +103 -0
- package/web/src/index.css +130 -0
- package/web/src/lib/api.ts +92 -0
- package/web/src/lib/utils.ts +6 -0
- package/web/src/main.tsx +10 -0
- package/web/src/pages/AppointmentDetail.tsx +206 -0
- package/web/src/pages/AppointmentValidation.tsx +157 -0
- package/web/src/pages/AppointmentValidationDetail.tsx +617 -0
- package/web/src/pages/AppointmentValidationNew.tsx +1005 -0
- package/web/src/pages/Appointments.tsx +283 -0
- package/web/src/pages/Billing.tsx +126 -0
- package/web/src/pages/CallDetail.tsx +293 -0
- package/web/src/pages/CallSettings.tsx +313 -0
- package/web/src/pages/Calls.tsx +188 -0
- package/web/src/pages/CampaignDetail.tsx +216 -0
- package/web/src/pages/CampaignNew.tsx +277 -0
- package/web/src/pages/CampaignResults.tsx +185 -0
- package/web/src/pages/Campaigns.tsx +171 -0
- package/web/src/pages/Dashboard.tsx +336 -0
- package/web/src/pages/InboundSchedule.tsx +246 -0
- package/web/src/pages/LeadDetail.tsx +183 -0
- package/web/src/pages/Leads.tsx +258 -0
- package/web/src/pages/Login.tsx +99 -0
- package/web/src/pages/Register.tsx +129 -0
- package/web/src/pages/Settings.tsx +133 -0
- package/web/src/pages/SurveyDetail.tsx +232 -0
- package/web/src/pages/SurveyPreview.tsx +179 -0
- package/web/src/pages/Surveys.tsx +207 -0
- package/web/src/pages/Users.tsx +199 -0
- package/web/src/pages/WhatsApp.tsx +147 -0
- package/web/src/pages/WhatsAppSettings.tsx +215 -0
- package/web/src/pages/admin/AdminBaileysMessageLog.tsx +331 -0
- package/web/src/pages/admin/AdminBaileysRawMessages.tsx +318 -0
- package/web/src/pages/admin/AdminConversationReview.tsx +116 -0
- package/web/src/pages/admin/AdminCredits.tsx +467 -0
- package/web/src/pages/admin/AdminElevenLabsAgentDetail.tsx +332 -0
- package/web/src/pages/admin/AdminElevenLabsAgents.tsx +164 -0
- package/web/src/pages/admin/AdminElevenLabsBatchCallDetail.tsx +214 -0
- package/web/src/pages/admin/AdminElevenLabsBatchCalls.tsx +293 -0
- package/web/src/pages/admin/AdminElevenLabsConversationDetail.tsx +230 -0
- package/web/src/pages/admin/AdminElevenLabsConversations.tsx +228 -0
- package/web/src/pages/admin/AdminElevenLabsInboundCalls.tsx +293 -0
- package/web/src/pages/admin/AdminElevenLabsPhoneNumbers.tsx +506 -0
- package/web/src/pages/admin/AdminElevenLabsTestChat.tsx +258 -0
- package/web/src/pages/admin/AdminElevenLabsWebhooks.tsx +289 -0
- package/web/src/pages/admin/AdminEvaluationDashboard.tsx +520 -0
- package/web/src/pages/admin/AdminLeads.tsx +339 -0
- package/web/src/pages/admin/AdminLogs.tsx +283 -0
- package/web/src/pages/admin/AdminMigrations.tsx +247 -0
- package/web/src/pages/admin/AdminPlans.tsx +313 -0
- package/web/src/pages/admin/AdminSystem.tsx +391 -0
- package/web/src/pages/admin/AdminTenantBillableItems.tsx +464 -0
- package/web/src/pages/admin/AdminTenantDetail.tsx +1317 -0
- package/web/src/pages/admin/AdminTenants.tsx +274 -0
- package/web/src/pages/admin/AdminWhatsApp.tsx +618 -0
- package/web/src/pages/admin/AdminWhatsAppTestChat.tsx +328 -0
- package/web/src/types/index.ts +242 -0
- package/web/tsconfig.app.json +32 -0
- package/web/tsconfig.json +13 -0
- package/web/tsconfig.node.json +26 -0
- package/web/vite.config.ts +23 -0
|
@@ -0,0 +1,786 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common": {
|
|
3
|
+
"appName": "Portal Asistan 7/24",
|
|
4
|
+
"tagline": "Clinic Management Platform",
|
|
5
|
+
"save": "Save",
|
|
6
|
+
"cancel": "Cancel",
|
|
7
|
+
"delete": "Delete",
|
|
8
|
+
"edit": "Edit",
|
|
9
|
+
"create": "Create",
|
|
10
|
+
"add": "Add",
|
|
11
|
+
"search": "Search",
|
|
12
|
+
"filter": "Filter",
|
|
13
|
+
"export": "Export",
|
|
14
|
+
"import": "Import",
|
|
15
|
+
"back": "Back",
|
|
16
|
+
"next": "Next",
|
|
17
|
+
"previous": "Previous",
|
|
18
|
+
"close": "Close",
|
|
19
|
+
"confirm": "Confirm",
|
|
20
|
+
"yes": "Yes",
|
|
21
|
+
"no": "No",
|
|
22
|
+
"loading": "Loading...",
|
|
23
|
+
"noResults": "No results found",
|
|
24
|
+
"hours": "hours",
|
|
25
|
+
"days": "days",
|
|
26
|
+
"upload": "Upload",
|
|
27
|
+
"all": "All",
|
|
28
|
+
"active": "Active",
|
|
29
|
+
"inactive": "Inactive",
|
|
30
|
+
"status": "Status",
|
|
31
|
+
"actions": "Actions",
|
|
32
|
+
"details": "Details",
|
|
33
|
+
"settings": "Settings",
|
|
34
|
+
"name": "Name",
|
|
35
|
+
"email": "Email",
|
|
36
|
+
"phone": "Phone",
|
|
37
|
+
"date": "Date",
|
|
38
|
+
"time": "Time",
|
|
39
|
+
"notes": "Notes",
|
|
40
|
+
"description": "Description",
|
|
41
|
+
"type": "Type",
|
|
42
|
+
"rows": "Rows",
|
|
43
|
+
"page": "Page",
|
|
44
|
+
"of": "of",
|
|
45
|
+
"darkMode": "Dark Mode",
|
|
46
|
+
"lightMode": "Light Mode",
|
|
47
|
+
"language": "Language"
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
"auth": {
|
|
51
|
+
"signIn": "Sign In",
|
|
52
|
+
"signOut": "Sign Out",
|
|
53
|
+
"email": "Email",
|
|
54
|
+
"password": "Password",
|
|
55
|
+
"emailPlaceholder": "you@clinic.com",
|
|
56
|
+
"passwordPlaceholder": "Enter your password",
|
|
57
|
+
"forgotPassword": "Forgot password?",
|
|
58
|
+
"signingIn": "Signing in...",
|
|
59
|
+
"welcomeBack": "Welcome back!",
|
|
60
|
+
"invalidCredentials": "Invalid email or password",
|
|
61
|
+
"enterCredentials": "Enter your credentials to access the dashboard",
|
|
62
|
+
"passwordResetNotImplemented": "Password reset is not yet implemented"
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
"validation": {
|
|
66
|
+
"required": "This field is required",
|
|
67
|
+
"emailRequired": "Enter a valid email address",
|
|
68
|
+
"passwordMin": "Password must be at least 6 characters",
|
|
69
|
+
"nameRequired": "Name is required"
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
"errors": {
|
|
73
|
+
"invalidCredentials": "Invalid email or password",
|
|
74
|
+
"accountDeactivated": "Your account has been deactivated",
|
|
75
|
+
"tooManyAttempts": "Too many attempts. Please wait and try again.",
|
|
76
|
+
"serverError": "Server error. Please try again later.",
|
|
77
|
+
"networkError": "Cannot reach server. Check your connection.",
|
|
78
|
+
"unknownError": "An unexpected error occurred"
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
"nav": {
|
|
82
|
+
"dashboard": "Dashboard",
|
|
83
|
+
"patients": "Patients",
|
|
84
|
+
"appointments": "Appointments",
|
|
85
|
+
"calendar": "Calendar",
|
|
86
|
+
"treatments": "Treatments",
|
|
87
|
+
"treatmentPlans": "Treatment Plans",
|
|
88
|
+
"chats": "Messages",
|
|
89
|
+
"calls": "Calls",
|
|
90
|
+
"leads": "Leads",
|
|
91
|
+
"campaigns": "Campaigns",
|
|
92
|
+
"validation": "Appointment Validation",
|
|
93
|
+
"billing": "Billing",
|
|
94
|
+
"users": "Users",
|
|
95
|
+
"clinics": "Clinics",
|
|
96
|
+
"agents": "AI Agents",
|
|
97
|
+
"phoneNumbers": "Phone Numbers",
|
|
98
|
+
"connections": "Connections",
|
|
99
|
+
"calendarConnections": "Calendar Connections",
|
|
100
|
+
"settings": "Settings",
|
|
101
|
+
"audit": "Audit Trail",
|
|
102
|
+
"logs": "System Logs",
|
|
103
|
+
"platform": "Platform",
|
|
104
|
+
"aiPlayground": "AI Playground",
|
|
105
|
+
"adminPanel": "Admin Panel"
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
"dashboard": {
|
|
109
|
+
"title": "Dashboard",
|
|
110
|
+
"description": "Overview of today's clinic activity",
|
|
111
|
+
"totalPatients": "Total Patients",
|
|
112
|
+
"todayAppointments": "Today's Appointments",
|
|
113
|
+
"activeSessions": "Active AI Sessions",
|
|
114
|
+
"openLeads": "Open Leads",
|
|
115
|
+
"fromLastMonth": "from last month",
|
|
116
|
+
"vsYesterday": "vs yesterday",
|
|
117
|
+
"fromLastWeek": "from last week",
|
|
118
|
+
"completed": "completed",
|
|
119
|
+
"upcoming": "upcoming"
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
"patients": {
|
|
123
|
+
"title": "Patients",
|
|
124
|
+
"description": "Manage your clinic's patients and medical records",
|
|
125
|
+
"newPatient": "New Patient",
|
|
126
|
+
"searchPatients": "Search patients...",
|
|
127
|
+
"firstName": "First Name",
|
|
128
|
+
"lastName": "Last Name",
|
|
129
|
+
"dateOfBirth": "Date of Birth",
|
|
130
|
+
"gender": "Gender",
|
|
131
|
+
"male": "Male",
|
|
132
|
+
"female": "Female",
|
|
133
|
+
"other": "Other",
|
|
134
|
+
"bloodType": "Blood Type",
|
|
135
|
+
"idNumber": "ID Number",
|
|
136
|
+
"preferredLanguage": "Preferred Language",
|
|
137
|
+
"source": "Source",
|
|
138
|
+
"tags": "Tags",
|
|
139
|
+
"lastVisit": "Last Visit",
|
|
140
|
+
"nextAppointment": "Next Appointment",
|
|
141
|
+
"medicalHistory": "Medical History",
|
|
142
|
+
"anamnesis": "Anamnesis",
|
|
143
|
+
"allergies": "Allergies",
|
|
144
|
+
"chronicConditions": "Chronic Conditions",
|
|
145
|
+
"medications": "Current Medications",
|
|
146
|
+
"pastSurgeries": "Past Surgeries",
|
|
147
|
+
"smoking": "Smoking",
|
|
148
|
+
"alcohol": "Alcohol",
|
|
149
|
+
"pregnancyStatus": "Pregnancy Status",
|
|
150
|
+
"documents": "Documents",
|
|
151
|
+
"photoSets": "Photo Sets",
|
|
152
|
+
"examinations": "Examinations",
|
|
153
|
+
"treatmentPlan": "Treatment Plan",
|
|
154
|
+
"noPatients": "No patients yet",
|
|
155
|
+
"noPatientsDesc": "Add your first patient to get started.",
|
|
156
|
+
"noAppointments": "No appointments found",
|
|
157
|
+
"deletePatient": "Delete Patient",
|
|
158
|
+
"deleteConfirm": "This will permanently deactivate the patient record. This action cannot be undone.",
|
|
159
|
+
"viewProfile": "View Profile",
|
|
160
|
+
"bookAppointment": "Book Appointment",
|
|
161
|
+
"sessions": "Sessions",
|
|
162
|
+
"appointments": "Appointments",
|
|
163
|
+
"lastContact": "Last Contact",
|
|
164
|
+
"createSuccess": "Patient created successfully",
|
|
165
|
+
"deleteSuccess": "Patient deleted successfully",
|
|
166
|
+
"createError": "Failed to create patient",
|
|
167
|
+
"phoneFormat": "Phone must be in E.164 format (e.g. +905551234567)",
|
|
168
|
+
"tagsHelp": "Comma-separated tags",
|
|
169
|
+
"sourceWhatsapp": "WhatsApp",
|
|
170
|
+
"sourceVoiceCall": "Voice Call",
|
|
171
|
+
"sourceInstagram": "Instagram",
|
|
172
|
+
"sourceWalkIn": "Walk-in",
|
|
173
|
+
"sourceReferral": "Referral",
|
|
174
|
+
"referredBy": "Referred By",
|
|
175
|
+
"referredByPlaceholder": "Name of the person or clinic who referred",
|
|
176
|
+
"allClinics": "All Clinics",
|
|
177
|
+
"overview": "Overview",
|
|
178
|
+
"editPatient": "Edit Patient",
|
|
179
|
+
"editPatientDesc": "Update patient information",
|
|
180
|
+
"aiSummary": "AI Summary",
|
|
181
|
+
"noAiSummary": "No AI summary available for this patient yet.",
|
|
182
|
+
"anamnesisIncomplete": "Medical history (anamnesis) has not been completed for this patient.",
|
|
183
|
+
"completeAnamnesis": "Complete Anamnesis",
|
|
184
|
+
"addNote": "Add Note",
|
|
185
|
+
"notePlaceholder": "Write a note about this patient...",
|
|
186
|
+
"noNotes": "No notes yet",
|
|
187
|
+
"noteCreated": "Note added successfully",
|
|
188
|
+
"noteDeleted": "Note deleted successfully",
|
|
189
|
+
"deleteNote": "Delete Note",
|
|
190
|
+
"deleteNoteConfirm": "This note will be permanently deleted. This action cannot be undone.",
|
|
191
|
+
"noDocuments": "No documents yet",
|
|
192
|
+
"uploadDocument": "Upload Document",
|
|
193
|
+
"noPhotos": "No photos yet",
|
|
194
|
+
"noExaminations": "No examinations yet",
|
|
195
|
+
"comingSoon": "This feature is coming soon.",
|
|
196
|
+
"backToPatients": "Back to Patients",
|
|
197
|
+
"updateSuccess": "Patient updated successfully",
|
|
198
|
+
"updateError": "Failed to update patient",
|
|
199
|
+
"latestNotes": "Latest",
|
|
200
|
+
"firstContact": "First contact",
|
|
201
|
+
"fileSize": "Size",
|
|
202
|
+
"uploadSuccess": "Document uploaded successfully",
|
|
203
|
+
"uploadError": "Failed to upload document",
|
|
204
|
+
"deleteDocSuccess": "Document deleted",
|
|
205
|
+
"deleteDocument": "Delete Document",
|
|
206
|
+
"deleteDocConfirm": "This document will be permanently deleted.",
|
|
207
|
+
"uploadDocDesc": "Upload a document for this patient.",
|
|
208
|
+
"selectFile": "File",
|
|
209
|
+
"clickToUpload": "Click to select a file",
|
|
210
|
+
"docNotesPlaceholder": "Optional notes about this document...",
|
|
211
|
+
"docTypeConsent": "Consent Form",
|
|
212
|
+
"docTypeLab": "Lab Result",
|
|
213
|
+
"docTypeXray": "X-Ray",
|
|
214
|
+
"docTypePrescription": "Prescription",
|
|
215
|
+
"docTypeReferral": "Referral",
|
|
216
|
+
"docTypeOther": "Other",
|
|
217
|
+
"viewDocument": "View document",
|
|
218
|
+
"openInNewTab": "Open in new tab",
|
|
219
|
+
"previewNotSupported": "Preview not available for this file type.",
|
|
220
|
+
"downloadInstead": "Download file",
|
|
221
|
+
"uploadedBy": "Uploaded by",
|
|
222
|
+
"editMedicalHistory": "Edit Medical History",
|
|
223
|
+
"editMedicalHistoryDesc": "Update the patient's medical history.",
|
|
224
|
+
"medicalHistoryUpdated": "Medical history updated",
|
|
225
|
+
"saveError": "Failed to save",
|
|
226
|
+
"commaHint": "Separate with commas",
|
|
227
|
+
"pregnancy_not_applicable": "N/A",
|
|
228
|
+
"pregnancy_not_pregnant": "Not Pregnant",
|
|
229
|
+
"pregnancy_pregnant": "Pregnant",
|
|
230
|
+
"pregnancy_breastfeeding": "Breastfeeding",
|
|
231
|
+
"timeline": "Timeline",
|
|
232
|
+
"noActivity": "No activity recorded yet"
|
|
233
|
+
},
|
|
234
|
+
|
|
235
|
+
"examinations": {
|
|
236
|
+
"noExaminations": "No examination records",
|
|
237
|
+
"newExamination": "New Examination",
|
|
238
|
+
"newExamDesc": "Create an examination record linked to an appointment.",
|
|
239
|
+
"editExamination": "Edit Examination",
|
|
240
|
+
"editExamDesc": "Update the examination details.",
|
|
241
|
+
"appointment": "Appointment",
|
|
242
|
+
"selectAppointment": "Select appointment",
|
|
243
|
+
"noAppointments": "No eligible appointments",
|
|
244
|
+
"appointmentOptional": "Optional — link to an existing appointment or leave empty.",
|
|
245
|
+
"findings": "Findings",
|
|
246
|
+
"diagnosis": "Diagnosis",
|
|
247
|
+
"procedureNotes": "Procedure Notes",
|
|
248
|
+
"prescription": "Prescription",
|
|
249
|
+
"instructions": "Patient Instructions",
|
|
250
|
+
"noDetails": "No details recorded yet.",
|
|
251
|
+
"created": "Examination created",
|
|
252
|
+
"updated": "Examination updated",
|
|
253
|
+
"saveError": "Failed to save examination"
|
|
254
|
+
},
|
|
255
|
+
|
|
256
|
+
"appointments": {
|
|
257
|
+
"title": "Appointments",
|
|
258
|
+
"description": "Manage appointments and plan your schedule",
|
|
259
|
+
"newAppointment": "New Appointment",
|
|
260
|
+
"bookAppointment": "Book Appointment",
|
|
261
|
+
"searchAppointments": "Search appointments...",
|
|
262
|
+
"patient": "Patient",
|
|
263
|
+
"doctor": "Doctor",
|
|
264
|
+
"treatment": "Treatment",
|
|
265
|
+
"clinic": "Clinic",
|
|
266
|
+
"startTime": "Start Time",
|
|
267
|
+
"endTime": "End Time",
|
|
268
|
+
"duration": "Duration",
|
|
269
|
+
"minutes": "min",
|
|
270
|
+
"selectPatient": "Select patient",
|
|
271
|
+
"selectDoctor": "Select doctor",
|
|
272
|
+
"selectTreatment": "Select treatment",
|
|
273
|
+
"selectClinic": "Select clinic",
|
|
274
|
+
"selectType": "Select type",
|
|
275
|
+
"noAppointments": "No appointments",
|
|
276
|
+
"noAppointmentsToday": "No appointments today",
|
|
277
|
+
"noAppointmentsDesc": "There are no scheduled appointments for today. Book a new one or check another date.",
|
|
278
|
+
"noAppointmentsFilterDesc": "No appointments match your current filters.",
|
|
279
|
+
"cancelAppointment": "Cancel Appointment",
|
|
280
|
+
"cancelConfirm": "The patient will be notified about the cancellation.",
|
|
281
|
+
"cancelReason": "Reason",
|
|
282
|
+
"cancelReasonPlaceholder": "Why is this appointment being cancelled?",
|
|
283
|
+
"availability": "Availability",
|
|
284
|
+
"checkAvailability": "Check Availability",
|
|
285
|
+
"todayAppts": "Today",
|
|
286
|
+
"upcoming": "Upcoming",
|
|
287
|
+
"allStatuses": "All Statuses",
|
|
288
|
+
"allDoctors": "All Doctors",
|
|
289
|
+
"from": "From",
|
|
290
|
+
"to": "To",
|
|
291
|
+
"createSuccess": "Appointment created successfully",
|
|
292
|
+
"createError": "Failed to create appointment",
|
|
293
|
+
"statusUpdateSuccess": "Appointment status updated",
|
|
294
|
+
"statusUpdateError": "Failed to update status",
|
|
295
|
+
"cancelSuccess": "Appointment cancelled",
|
|
296
|
+
"notesPlaceholder": "Optional notes about this appointment...",
|
|
297
|
+
"typeAppointment": "Appointment",
|
|
298
|
+
"typeWalkIn": "Walk-in",
|
|
299
|
+
"typeFollowUp": "Follow-up",
|
|
300
|
+
"typeConsultation": "Consultation",
|
|
301
|
+
"action_confirmed": "Confirm",
|
|
302
|
+
"action_in_progress": "Start",
|
|
303
|
+
"action_completed": "Complete",
|
|
304
|
+
"action_cancelled": "Cancel",
|
|
305
|
+
"action_no_show": "No Show",
|
|
306
|
+
"slotsAvailable": "available",
|
|
307
|
+
"slotsBooked": "booked",
|
|
308
|
+
"noSlotsConfigured": "No working hours configured for this day.",
|
|
309
|
+
"checkAvailabilityDesc": "Select a date and optionally a doctor to see available slots.",
|
|
310
|
+
"selectDateToCheck": "Select a date to check availability."
|
|
311
|
+
},
|
|
312
|
+
|
|
313
|
+
"treatments": {
|
|
314
|
+
"title": "Treatments",
|
|
315
|
+
"description": "Manage clinic treatment catalog",
|
|
316
|
+
"newTreatment": "New Treatment",
|
|
317
|
+
"editTreatment": "Edit Treatment",
|
|
318
|
+
"deleteTreatment": "Delete Treatment",
|
|
319
|
+
"deleteConfirm": "This treatment will be deactivated.",
|
|
320
|
+
"noTreatments": "No treatments",
|
|
321
|
+
"category": "Category",
|
|
322
|
+
"categoryPlaceholder": "e.g. Restorative, Orthodontics",
|
|
323
|
+
"price": "Price",
|
|
324
|
+
"durationMinutes": "Duration (min)",
|
|
325
|
+
"recallDays": "Recall (days)",
|
|
326
|
+
"createSuccess": "Treatment created",
|
|
327
|
+
"updateSuccess": "Treatment updated",
|
|
328
|
+
"deleteSuccess": "Treatment deleted",
|
|
329
|
+
"deleteError": "Failed to delete treatment",
|
|
330
|
+
"saveError": "Failed to save treatment",
|
|
331
|
+
"plans": "Treatment Plans",
|
|
332
|
+
"planName": "Plan Name",
|
|
333
|
+
"planNamePlaceholder": "e.g. Full mouth restoration",
|
|
334
|
+
"planDesc": "Create a treatment plan for this patient.",
|
|
335
|
+
"planItems": "Plan Items",
|
|
336
|
+
"toothNumber": "Tooth No.",
|
|
337
|
+
"addItem": "Add Item",
|
|
338
|
+
"addItemDesc": "Add an item to this treatment plan.",
|
|
339
|
+
"newPlan": "New Plan",
|
|
340
|
+
"noPlans": "No treatment plans",
|
|
341
|
+
"noItems": "No items in this plan yet.",
|
|
342
|
+
"planCreated": "Treatment plan created",
|
|
343
|
+
"planDeleted": "Treatment plan deleted",
|
|
344
|
+
"itemAdded": "Item added",
|
|
345
|
+
"itemUpdated": "Item updated",
|
|
346
|
+
"itemRemoved": "Item removed"
|
|
347
|
+
},
|
|
348
|
+
|
|
349
|
+
"chats": {
|
|
350
|
+
"title": "Messages",
|
|
351
|
+
"description": "Manage WhatsApp and Instagram conversations",
|
|
352
|
+
"noChats": "No active conversations",
|
|
353
|
+
"noMessages": "No messages yet",
|
|
354
|
+
"searchChats": "Search chats...",
|
|
355
|
+
"allChats": "All Chats",
|
|
356
|
+
"selectChat": "Select a conversation",
|
|
357
|
+
"typeMessage": "Type a message...",
|
|
358
|
+
"sendMessage": "Send",
|
|
359
|
+
"sendError": "Failed to send message",
|
|
360
|
+
"takeover": "Take Over",
|
|
361
|
+
"takenOver": "Session taken over",
|
|
362
|
+
"release": "Release",
|
|
363
|
+
"released": "Session released to AI",
|
|
364
|
+
"resolve": "Resolve",
|
|
365
|
+
"resolved_msg": "Session resolved",
|
|
366
|
+
"blacklist": "Blacklist",
|
|
367
|
+
"ai": "AI",
|
|
368
|
+
"human": "Human",
|
|
369
|
+
"status_active": "Active",
|
|
370
|
+
"status_waiting": "Waiting",
|
|
371
|
+
"status_resolved": "Resolved",
|
|
372
|
+
"unassigned_label": "Unassigned",
|
|
373
|
+
"chatAssigned": "Chat assigned",
|
|
374
|
+
"chatUnassigned": "Chat unassigned",
|
|
375
|
+
"assignError": "Failed to assign chat",
|
|
376
|
+
"waConnected": "WhatsApp connected",
|
|
377
|
+
"waNotConnected": "WhatsApp not connected"
|
|
378
|
+
},
|
|
379
|
+
|
|
380
|
+
"calls": {
|
|
381
|
+
"title": "Calls",
|
|
382
|
+
"description": "View voice call records and transcripts",
|
|
383
|
+
"inbound": "Inbound",
|
|
384
|
+
"outbound": "Outbound",
|
|
385
|
+
"duration": "Duration",
|
|
386
|
+
"transcript": "Transcript",
|
|
387
|
+
"summary": "Summary"
|
|
388
|
+
},
|
|
389
|
+
|
|
390
|
+
"leads": {
|
|
391
|
+
"title": "Leads",
|
|
392
|
+
"description": "Track AI-generated potential patients",
|
|
393
|
+
"newLead": "New",
|
|
394
|
+
"contacted": "Contacted",
|
|
395
|
+
"appointmentScheduled": "Appointment Scheduled",
|
|
396
|
+
"completed": "Completed",
|
|
397
|
+
"lost": "Lost",
|
|
398
|
+
"expired": "Expired",
|
|
399
|
+
"serviceOfInterest": "Service of Interest",
|
|
400
|
+
"today": "Today's Leads"
|
|
401
|
+
},
|
|
402
|
+
|
|
403
|
+
"billing": {
|
|
404
|
+
"title": "Billing",
|
|
405
|
+
"description": "Usage and subscription management",
|
|
406
|
+
"usage": "Usage",
|
|
407
|
+
"plan": "Plan",
|
|
408
|
+
"inboundMinutes": "Inbound Minutes",
|
|
409
|
+
"inboundCalls": "Inbound Calls",
|
|
410
|
+
"waChats": "WhatsApp Chats",
|
|
411
|
+
"included": "Included",
|
|
412
|
+
"used": "Used",
|
|
413
|
+
"remaining": "Remaining"
|
|
414
|
+
},
|
|
415
|
+
|
|
416
|
+
"users": {
|
|
417
|
+
"title": "Users",
|
|
418
|
+
"description": "Manage staff and role assignments",
|
|
419
|
+
"inviteUser": "Invite User",
|
|
420
|
+
"inviteDesc": "Create a new staff account.",
|
|
421
|
+
"inviteSuccess": "User invited successfully",
|
|
422
|
+
"inviteError": "Failed to invite user",
|
|
423
|
+
"editUser": "Edit User",
|
|
424
|
+
"updateSuccess": "User updated",
|
|
425
|
+
"updateError": "Failed to update user",
|
|
426
|
+
"noUsers": "No users",
|
|
427
|
+
"role": "Role",
|
|
428
|
+
"roles": {
|
|
429
|
+
"owner": "Owner",
|
|
430
|
+
"admin": "Admin",
|
|
431
|
+
"doctor": "Doctor",
|
|
432
|
+
"receptionist": "Receptionist",
|
|
433
|
+
"superadmin": "Super Admin",
|
|
434
|
+
"sales": "Sales"
|
|
435
|
+
},
|
|
436
|
+
"clinicAssignments": "Clinics",
|
|
437
|
+
"lastLogin": "Last Login",
|
|
438
|
+
"password": "Password",
|
|
439
|
+
"passwordMin": "At least 6 characters",
|
|
440
|
+
"deactivate": "Deactivate",
|
|
441
|
+
"deactivateConfirm": "This user will no longer be able to log in.",
|
|
442
|
+
"deactivated": "User deactivated",
|
|
443
|
+
"deleteError": "Failed to deactivate user",
|
|
444
|
+
"customPermissions": "Permissions",
|
|
445
|
+
"permissionsHint": "When customized, these replace the role defaults entirely. Reset to use role defaults.",
|
|
446
|
+
"resetToDefaults": "Reset to role defaults",
|
|
447
|
+
"doctorProfile": "Doctor Profile",
|
|
448
|
+
"profileUpdated": "Doctor profile updated",
|
|
449
|
+
"profileError": "Failed to update profile",
|
|
450
|
+
"title": "Title",
|
|
451
|
+
"specialty": "Specialty",
|
|
452
|
+
"specialtyPlaceholder": "e.g. Orthodontics, General Dentistry",
|
|
453
|
+
"bio": "Bio",
|
|
454
|
+
"apptDuration": "Appt Duration (min)",
|
|
455
|
+
"calendarColor": "Calendar Color",
|
|
456
|
+
"accepting": "Accepting",
|
|
457
|
+
"workingHours": "Working Hours",
|
|
458
|
+
"break": "Break",
|
|
459
|
+
"workHours": "Hours",
|
|
460
|
+
"slotDur": "Slot",
|
|
461
|
+
"blockedDates": "Holidays / Blocked Dates",
|
|
462
|
+
"noBlockedDates": "No holidays set",
|
|
463
|
+
"profileInfo": "Profile Information",
|
|
464
|
+
"userInfo": "User Information",
|
|
465
|
+
"preferences": "Preferences",
|
|
466
|
+
"apptDurationHint": "Default length of appointments",
|
|
467
|
+
"acceptingPatients": "Accepting patients",
|
|
468
|
+
"notAccepting": "Not accepting",
|
|
469
|
+
"acceptingHint": "Toggle patient intake",
|
|
470
|
+
"daysActive": "days active",
|
|
471
|
+
"dayOff": "Day off",
|
|
472
|
+
"mySchedule": "My Schedule"
|
|
473
|
+
},
|
|
474
|
+
|
|
475
|
+
"blocks": {
|
|
476
|
+
"title": "Holidays & Unavailability",
|
|
477
|
+
"titlePlaceholder": "e.g. Annual Leave, National Holiday",
|
|
478
|
+
"created": "Block added",
|
|
479
|
+
"createError": "Failed to add block",
|
|
480
|
+
"deleted": "Block removed",
|
|
481
|
+
"deleteError": "Failed to remove block",
|
|
482
|
+
"noBlocks": "No holidays or blocked dates set",
|
|
483
|
+
"clinicHolidays": "Clinic Holidays",
|
|
484
|
+
"allDay": "All day",
|
|
485
|
+
"yearly": "Yearly",
|
|
486
|
+
"type_holiday": "Holiday",
|
|
487
|
+
"type_leave": "Leave",
|
|
488
|
+
"type_break_time": "Break",
|
|
489
|
+
"type_other": "Other"
|
|
490
|
+
},
|
|
491
|
+
|
|
492
|
+
"days": {
|
|
493
|
+
"monday": "Monday",
|
|
494
|
+
"tuesday": "Tuesday",
|
|
495
|
+
"wednesday": "Wednesday",
|
|
496
|
+
"thursday": "Thursday",
|
|
497
|
+
"friday": "Friday",
|
|
498
|
+
"saturday": "Saturday",
|
|
499
|
+
"sunday": "Sunday"
|
|
500
|
+
},
|
|
501
|
+
|
|
502
|
+
"clinics": {
|
|
503
|
+
"title": "Clinics",
|
|
504
|
+
"description": "Manage clinic branches and settings",
|
|
505
|
+
"newClinic": "New Clinic",
|
|
506
|
+
"address": "Address",
|
|
507
|
+
"timezone": "Timezone",
|
|
508
|
+
"language": "Language",
|
|
509
|
+
"aiProvider": "AI Provider",
|
|
510
|
+
"gracePeriod": "Grace Period",
|
|
511
|
+
"operatorPhone": "Operator Phone",
|
|
512
|
+
"smsEnabled": "SMS Enabled",
|
|
513
|
+
"messageRetention": "Message Retention",
|
|
514
|
+
"noClinics": "No clinics",
|
|
515
|
+
"newClinicDesc": "Create a new clinic branch.",
|
|
516
|
+
"namePlaceholder": "e.g. Main Branch",
|
|
517
|
+
"slug": "Slug",
|
|
518
|
+
"default": "Default",
|
|
519
|
+
"patients": "patients",
|
|
520
|
+
"appointments": "appointments",
|
|
521
|
+
"settings": "Settings",
|
|
522
|
+
"general": "General",
|
|
523
|
+
"aiOperator": "AI & Operator",
|
|
524
|
+
"dataSettings": "Data & Privacy",
|
|
525
|
+
"operatorPrefix": "REF Prefix",
|
|
526
|
+
"operatorTimeout": "Operator Timeout",
|
|
527
|
+
"createSuccess": "Clinic created",
|
|
528
|
+
"createError": "Failed to create clinic",
|
|
529
|
+
"updateSuccess": "Clinic updated",
|
|
530
|
+
"updateError": "Failed to update clinic",
|
|
531
|
+
"metaConnections": "Meta Connections (WhatsApp / Instagram)",
|
|
532
|
+
"noMetaConnections": "No connections configured",
|
|
533
|
+
"connectionLabel": "Label",
|
|
534
|
+
"connectionLabelPlaceholder": "e.g. Main WhatsApp",
|
|
535
|
+
"connect": "Connect",
|
|
536
|
+
"disconnect": "Disconnect",
|
|
537
|
+
"metaConnected": "Connection added",
|
|
538
|
+
"metaDisconnected": "Connection removed",
|
|
539
|
+
"metaError": "Connection failed",
|
|
540
|
+
"igDesc": "Connect your Instagram Business account to manage DMs.",
|
|
541
|
+
"connectInstagram": "Connect Instagram",
|
|
542
|
+
"igConnected": "Instagram connected successfully",
|
|
543
|
+
"disconnect": "Disconnect",
|
|
544
|
+
"connectGoogle": "Connect Google Calendar",
|
|
545
|
+
"googleNotConnected": "Google Calendar is not connected.",
|
|
546
|
+
"googleDisconnected": "Google Calendar disconnected",
|
|
547
|
+
"googleError": "Google Calendar error"
|
|
548
|
+
},
|
|
549
|
+
|
|
550
|
+
"photos": {
|
|
551
|
+
"noSets": "No photo sets",
|
|
552
|
+
"noPhotos": "No photos in this set",
|
|
553
|
+
"newSet": "New Photo Set",
|
|
554
|
+
"newSetDesc": "Create a photo set to organize patient photos.",
|
|
555
|
+
"photos": "photos",
|
|
556
|
+
"label": "Label",
|
|
557
|
+
"labelPlaceholder": "e.g. Pre-op front view",
|
|
558
|
+
"setCreated": "Photo set created",
|
|
559
|
+
"setDeleted": "Photo set deleted",
|
|
560
|
+
"uploadPhoto": "Upload Photo",
|
|
561
|
+
"uploadPhotoDesc": "Add a photo to this set.",
|
|
562
|
+
"photoUploaded": "Photo uploaded",
|
|
563
|
+
"photoDeleted": "Photo deleted",
|
|
564
|
+
"deleteError": "Failed to delete",
|
|
565
|
+
"saveError": "Failed to save",
|
|
566
|
+
"selectFile": "Please select a file",
|
|
567
|
+
"clickToSelect": "Click to select a photo",
|
|
568
|
+
"angle": "Angle",
|
|
569
|
+
"caption": "Caption",
|
|
570
|
+
"captionPlaceholder": "e.g. Front view, mouth closed",
|
|
571
|
+
"type_before": "Before",
|
|
572
|
+
"type_after": "After",
|
|
573
|
+
"type_progress": "Progress",
|
|
574
|
+
"type_consultation": "Consultation",
|
|
575
|
+
"type_other": "Other",
|
|
576
|
+
"angle_front": "Front",
|
|
577
|
+
"angle_left": "Left",
|
|
578
|
+
"angle_right": "Right",
|
|
579
|
+
"angle_closeup": "Close-up",
|
|
580
|
+
"angle_other": "Other"
|
|
581
|
+
},
|
|
582
|
+
|
|
583
|
+
"agents": {
|
|
584
|
+
"title": "AI Agents",
|
|
585
|
+
"description": "Manage, configure, and test your AI agents.",
|
|
586
|
+
"create": "Create Agent",
|
|
587
|
+
"createDesc": "Create a new AI agent configuration.",
|
|
588
|
+
"created": "Agent created",
|
|
589
|
+
"createError": "Failed to create agent",
|
|
590
|
+
"noAgents": "No agents configured yet",
|
|
591
|
+
"inactive": "Inactive Agents",
|
|
592
|
+
"tenantWide": "All clinics",
|
|
593
|
+
"namePlaceholder": "e.g. Reception Agent",
|
|
594
|
+
"descriptionPlaceholder": "Briefly describe the agent's role",
|
|
595
|
+
"description": "Description",
|
|
596
|
+
"language": "Language",
|
|
597
|
+
"aiProvider": "AI Provider",
|
|
598
|
+
"defaultProvider": "Default",
|
|
599
|
+
"systemPrompt": "System Prompt",
|
|
600
|
+
"systemPromptPlaceholder": "Instructions that define the agent's behavior...",
|
|
601
|
+
"updated": "Agent updated",
|
|
602
|
+
"updateError": "Failed to update agent",
|
|
603
|
+
"importEL": "Import from ElevenLabs",
|
|
604
|
+
"importELDesc": "Import agents from your ElevenLabs account.",
|
|
605
|
+
"import": "Import",
|
|
606
|
+
"imported": "Agent imported successfully",
|
|
607
|
+
"noELAgents": "No agents found in ElevenLabs account",
|
|
608
|
+
"alreadyLinked": "Already linked"
|
|
609
|
+
},
|
|
610
|
+
|
|
611
|
+
"phoneNumbers": {
|
|
612
|
+
"title": "Phone Numbers",
|
|
613
|
+
"description": "Manage phone numbers for WhatsApp and voice calls",
|
|
614
|
+
"addNumber": "Add Number",
|
|
615
|
+
"addDesc": "Register a new phone number.",
|
|
616
|
+
"noNumbers": "No phone numbers registered",
|
|
617
|
+
"number": "Number",
|
|
618
|
+
"label": "Label",
|
|
619
|
+
"labelPlaceholder": "e.g. Main Line, Reception",
|
|
620
|
+
"purpose": "Purpose",
|
|
621
|
+
"provider": "Provider",
|
|
622
|
+
"clinic": "Clinic",
|
|
623
|
+
"schedule": "Schedule",
|
|
624
|
+
"purpose_whatsapp": "WhatsApp",
|
|
625
|
+
"purpose_inbound_call": "Inbound Call",
|
|
626
|
+
"purpose_outbound_call": "Outbound Call",
|
|
627
|
+
"invalidFormat": "Must be E.164 format (e.g. +905551234567)",
|
|
628
|
+
"editSchedule": "AI Active Hours",
|
|
629
|
+
"scheduleEnabled": "AI active hours enabled",
|
|
630
|
+
"scheduleUpdated": "Schedule updated",
|
|
631
|
+
"scheduleError": "Failed to update schedule",
|
|
632
|
+
"created": "Phone number created",
|
|
633
|
+
"createError": "Failed to create phone number",
|
|
634
|
+
"deleted": "Phone number deleted",
|
|
635
|
+
"whatsappOnly": "WhatsApp messaging is managed through these numbers.",
|
|
636
|
+
"waConnection": "WhatsApp Connection",
|
|
637
|
+
"connected": "Connected",
|
|
638
|
+
"notConnected": "Not connected",
|
|
639
|
+
"updated": "Phone number updated",
|
|
640
|
+
"updateError": "Failed to update",
|
|
641
|
+
"deleteError": "Failed to delete",
|
|
642
|
+
"deleteNumber": "Delete Number",
|
|
643
|
+
"deleteConfirm": "Are you sure? This cannot be undone.",
|
|
644
|
+
"mode_active_hours": "AI active during hours",
|
|
645
|
+
"mode_off_hours": "AI off during hours",
|
|
646
|
+
"mode_active_hours_hint": "AI assistant responds only during the times below.",
|
|
647
|
+
"mode_off_hours_hint": "AI assistant responds 24/7 except during the times below.",
|
|
648
|
+
"waSetup": "WhatsApp Connection",
|
|
649
|
+
"waSetupDesc": "Connect this number to WhatsApp Business API via your Meta Business account.",
|
|
650
|
+
"waOAuthHint": "You'll be redirected to Meta to authorize access.",
|
|
651
|
+
"waConnectedDesc": "This number is connected to WhatsApp Business API and receiving messages.",
|
|
652
|
+
"connectWa": "Connect WhatsApp",
|
|
653
|
+
"waConnected": "WhatsApp connected successfully",
|
|
654
|
+
"waConnectError": "Failed to connect WhatsApp",
|
|
655
|
+
"waError_denied": "Meta authorization was denied",
|
|
656
|
+
"waError_missing_params": "Connection parameters missing, please try again",
|
|
657
|
+
"waError_invalid_state": "Security validation failed, please try again",
|
|
658
|
+
"waError_token_exchange_failed": "Could not retrieve Meta token, please try again",
|
|
659
|
+
"waError_phone_not_found": "Phone number not found",
|
|
660
|
+
"waError_no_clinic": "No clinic found for this number",
|
|
661
|
+
"waError_connection_failed": "Connection failed, please try again",
|
|
662
|
+
"connectedSince": "Connected since"
|
|
663
|
+
},
|
|
664
|
+
|
|
665
|
+
"connections": {
|
|
666
|
+
"title": "Meta Connections",
|
|
667
|
+
"description": "Connect your WhatsApp and Instagram accounts via Meta Business API.",
|
|
668
|
+
"clinic": "Clinic",
|
|
669
|
+
"selectClinic": "Select clinic",
|
|
670
|
+
"selectClinicFirst": "Select a clinic first",
|
|
671
|
+
"connectWhatsApp": "Connect WhatsApp",
|
|
672
|
+
"connectInstagram": "Connect Instagram",
|
|
673
|
+
"connectError": "Connection failed",
|
|
674
|
+
"noConnections": "No connections yet",
|
|
675
|
+
"noConnectionsDesc": "Connect your WhatsApp or Instagram account to start managing messages.",
|
|
676
|
+
"disconnected": "Connection removed",
|
|
677
|
+
"disconnectError": "Failed to remove connection",
|
|
678
|
+
"waConnected": "WhatsApp connected successfully",
|
|
679
|
+
"igConnected": "Instagram connected successfully",
|
|
680
|
+
"tokenHealthy": "Healthy",
|
|
681
|
+
"tokenExpiring": "Expiring soon",
|
|
682
|
+
"tokenExpired": "Expired",
|
|
683
|
+
"error_denied": "Meta authorization was denied",
|
|
684
|
+
"error_missing_params": "Parameters missing, please try again",
|
|
685
|
+
"error_invalid_state": "Security validation failed",
|
|
686
|
+
"error_token_exchange_failed": "Could not retrieve Meta token",
|
|
687
|
+
"error_no_instagram_account": "No Instagram Business account found",
|
|
688
|
+
"error_connection_failed": "Connection failed, please try again"
|
|
689
|
+
},
|
|
690
|
+
|
|
691
|
+
"calendarConnections": {
|
|
692
|
+
"title": "Calendar Connections",
|
|
693
|
+
"description": "Manage doctors' Google Calendar connections.",
|
|
694
|
+
"noDoctors": "No active doctors found",
|
|
695
|
+
"connected": "Connected",
|
|
696
|
+
"notConnected": "Not connected",
|
|
697
|
+
"connect": "Connect Google Calendar",
|
|
698
|
+
"disconnect": "Disconnect",
|
|
699
|
+
"disconnected": "Google Calendar disconnected",
|
|
700
|
+
"connectError": "Connection failed",
|
|
701
|
+
"disconnectError": "Failed to disconnect",
|
|
702
|
+
"changeCalendar": "Change Calendar",
|
|
703
|
+
"selectCalendar": "Select calendar",
|
|
704
|
+
"calendarSelected": "Calendar selected",
|
|
705
|
+
"calendarError": "Calendar operation failed"
|
|
706
|
+
},
|
|
707
|
+
|
|
708
|
+
"settings": {
|
|
709
|
+
"title": "Settings",
|
|
710
|
+
"description": "Manage your account",
|
|
711
|
+
"profile": "Profile",
|
|
712
|
+
"changePassword": "Change Password",
|
|
713
|
+
"currentPassword": "Current Password",
|
|
714
|
+
"newPassword": "New Password",
|
|
715
|
+
"confirmPassword": "Confirm New Password",
|
|
716
|
+
"passwordMin": "Password must be at least 6 characters",
|
|
717
|
+
"passwordMismatch": "Passwords do not match",
|
|
718
|
+
"passwordChanged": "Password changed successfully",
|
|
719
|
+
"passwordError": "Failed to change password"
|
|
720
|
+
},
|
|
721
|
+
|
|
722
|
+
"gcal": {
|
|
723
|
+
"connect": "Connect Google Calendar",
|
|
724
|
+
"notConnected": "Google Calendar is not connected. Connect to sync your appointments.",
|
|
725
|
+
"changeCalendar": "Change Calendar",
|
|
726
|
+
"selectCalendar": "Select a calendar to sync with",
|
|
727
|
+
"calendarSelected": "Calendar selected"
|
|
728
|
+
},
|
|
729
|
+
|
|
730
|
+
"platform": {
|
|
731
|
+
"title": "Platform Management",
|
|
732
|
+
"description": "Manage tenants, plans, and resource limits",
|
|
733
|
+
"searchTenants": "Search tenants...",
|
|
734
|
+
"noTenants": "No tenants",
|
|
735
|
+
"tenant": "Tenant",
|
|
736
|
+
"plan": "Plan",
|
|
737
|
+
"usage": "Usage",
|
|
738
|
+
"limits": "Limits",
|
|
739
|
+
"editLimits": "Configure resource limits for this tenant.",
|
|
740
|
+
"maxClinics": "Max Clinics",
|
|
741
|
+
"maxUsers": "Max Users",
|
|
742
|
+
"maxDoctors": "Max Doctors",
|
|
743
|
+
"maxPatients": "Max Patients",
|
|
744
|
+
"currentUsage": "Current usage",
|
|
745
|
+
"created": "Created",
|
|
746
|
+
"tenantUpdated": "Tenant updated",
|
|
747
|
+
"updateError": "Failed to update tenant",
|
|
748
|
+
"newTenant": "New Tenant",
|
|
749
|
+
"newTenantDesc": "Create a new tenant with an owner account.",
|
|
750
|
+
"tenantName": "Tenant Name",
|
|
751
|
+
"tenantNamePlaceholder": "e.g. Klinik Dental Istanbul",
|
|
752
|
+
"ownerFirstName": "Owner First Name",
|
|
753
|
+
"ownerLastName": "Owner Last Name",
|
|
754
|
+
"ownerEmail": "Owner Email",
|
|
755
|
+
"ownerPassword": "Owner Password",
|
|
756
|
+
"tenantCreated": "Tenant created",
|
|
757
|
+
"createError": "Failed to create tenant"
|
|
758
|
+
},
|
|
759
|
+
|
|
760
|
+
"status": {
|
|
761
|
+
"scheduled": "Scheduled",
|
|
762
|
+
"confirmed": "Confirmed",
|
|
763
|
+
"in_progress": "In Progress",
|
|
764
|
+
"completed": "Completed",
|
|
765
|
+
"cancelled": "Cancelled",
|
|
766
|
+
"no_show": "No Show",
|
|
767
|
+
"active": "Active",
|
|
768
|
+
"waiting": "Waiting",
|
|
769
|
+
"resolved": "Resolved",
|
|
770
|
+
"new_lead": "New",
|
|
771
|
+
"contacted": "Contacted",
|
|
772
|
+
"appointment_scheduled": "Appt Scheduled",
|
|
773
|
+
"lost": "Lost",
|
|
774
|
+
"expired": "Expired",
|
|
775
|
+
"pending": "Pending",
|
|
776
|
+
"responded": "Responded",
|
|
777
|
+
"draft": "Draft",
|
|
778
|
+
"running": "Running",
|
|
779
|
+
"paused": "Paused",
|
|
780
|
+
"submitted": "Submitted",
|
|
781
|
+
"failed": "Failed",
|
|
782
|
+
"no_answer": "No Answer",
|
|
783
|
+
"voicemail": "Voicemail",
|
|
784
|
+
"planned": "Planned"
|
|
785
|
+
}
|
|
786
|
+
}
|