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.
Files changed (969) hide show
  1. package/.claude/settings.local.json +27 -0
  2. package/.dockerignore +6 -0
  3. package/.env.example +43 -0
  4. package/BEFORE-PRODUCTION.md +32 -0
  5. package/Dockerfile +23 -0
  6. package/SYSTEM_OVERVIEW.md +942 -0
  7. package/SYSTEM_STATUS.md +332 -0
  8. package/backup_script/main.py +146 -0
  9. package/baileys/.dockerignore +7 -0
  10. package/baileys/Dockerfile +13 -0
  11. package/baileys/README.md +412 -0
  12. package/baileys/index.js +499 -0
  13. package/baileys/package-lock.json +2532 -0
  14. package/baileys/package.json +25 -0
  15. package/baileys/server.js +96 -0
  16. package/baileys/src/config.js +55 -0
  17. package/baileys/src/middleware/api-key.js +16 -0
  18. package/baileys/src/routes/accounts.js +51 -0
  19. package/baileys/src/routes/chats.js +103 -0
  20. package/baileys/src/routes/webhooks.js +34 -0
  21. package/baileys/src/services/account-store.js +259 -0
  22. package/baileys/src/services/webhook-dispatcher.js +161 -0
  23. package/baileys/src/services/worker-manager.js +597 -0
  24. package/baileys/src/utils/jid.js +79 -0
  25. package/baileys/src/utils/logger.js +16 -0
  26. package/baileys/src/utils/use-mongodb-auth-state.js +122 -0
  27. package/baileys/worker.js +721 -0
  28. package/dist/app.d.ts +1 -0
  29. package/dist/app.js +84 -0
  30. package/dist/app.js.map +1 -0
  31. package/dist/config/agentPrompts.json +19 -0
  32. package/dist/config/database.d.ts +1 -0
  33. package/dist/config/database.js +26 -0
  34. package/dist/config/database.js.map +1 -0
  35. package/dist/config/env.d.ts +41 -0
  36. package/dist/config/env.js +81 -0
  37. package/dist/config/env.js.map +1 -0
  38. package/dist/config/index.d.ts +3 -0
  39. package/dist/config/index.js +73 -0
  40. package/dist/config/index.js.map +1 -0
  41. package/dist/controllers/webhook.controller.d.ts +10 -0
  42. package/dist/controllers/webhook.controller.js +128 -0
  43. package/dist/controllers/webhook.controller.js.map +1 -0
  44. package/dist/errors/index.d.ts +4 -0
  45. package/dist/errors/index.js +13 -0
  46. package/dist/errors/index.js.map +1 -0
  47. package/dist/hooks/webhookValidator.d.ts +2 -0
  48. package/dist/hooks/webhookValidator.js +47 -0
  49. package/dist/hooks/webhookValidator.js.map +1 -0
  50. package/dist/index.d.ts +1 -0
  51. package/dist/index.js +55 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/migrations/001_session-architecture.d.ts +3 -0
  54. package/dist/migrations/001_session-architecture.js +119 -0
  55. package/dist/migrations/001_session-architecture.js.map +1 -0
  56. package/dist/migrations/002_agent-ref.d.ts +3 -0
  57. package/dist/migrations/002_agent-ref.js +55 -0
  58. package/dist/migrations/002_agent-ref.js.map +1 -0
  59. package/dist/migrations/003_shift-schedule.d.ts +3 -0
  60. package/dist/migrations/003_shift-schedule.js +48 -0
  61. package/dist/migrations/003_shift-schedule.js.map +1 -0
  62. package/dist/migrations/004_invert-shift-to-clinic-hours.d.ts +3 -0
  63. package/dist/migrations/004_invert-shift-to-clinic-hours.js +27 -0
  64. package/dist/migrations/004_invert-shift-to-clinic-hours.js.map +1 -0
  65. package/dist/migrations/005_composite-baileys-chat-ids.d.ts +3 -0
  66. package/dist/migrations/005_composite-baileys-chat-ids.js +47 -0
  67. package/dist/migrations/005_composite-baileys-chat-ids.js.map +1 -0
  68. package/dist/migrations/migration.model.d.ts +18 -0
  69. package/dist/migrations/migration.model.js +45 -0
  70. package/dist/migrations/migration.model.js.map +1 -0
  71. package/dist/migrations/migration.routes.d.ts +2 -0
  72. package/dist/migrations/migration.routes.js +37 -0
  73. package/dist/migrations/migration.routes.js.map +1 -0
  74. package/dist/migrations/migration.runner.d.ts +19 -0
  75. package/dist/migrations/migration.runner.js +74 -0
  76. package/dist/migrations/migration.runner.js.map +1 -0
  77. package/dist/models/ConversationClaim.d.ts +13 -0
  78. package/dist/models/ConversationClaim.js +44 -0
  79. package/dist/models/ConversationClaim.js.map +1 -0
  80. package/dist/models/ConversationEvaluation.d.ts +23 -0
  81. package/dist/models/ConversationEvaluation.js +92 -0
  82. package/dist/models/ConversationEvaluation.js.map +1 -0
  83. package/dist/models/Summary.d.ts +37 -0
  84. package/dist/models/Summary.js +78 -0
  85. package/dist/models/Summary.js.map +1 -0
  86. package/dist/models/Transcription.d.ts +34 -0
  87. package/dist/models/Transcription.js +71 -0
  88. package/dist/models/Transcription.js.map +1 -0
  89. package/dist/models/WhatsAppRecipient.d.ts +23 -0
  90. package/dist/models/WhatsAppRecipient.js +53 -0
  91. package/dist/models/WhatsAppRecipient.js.map +1 -0
  92. package/dist/modules/admin/admin.routes.d.ts +2 -0
  93. package/dist/modules/admin/admin.routes.js +1966 -0
  94. package/dist/modules/admin/admin.routes.js.map +1 -0
  95. package/dist/modules/admin/elevenlabs-test-chat.routes.d.ts +2 -0
  96. package/dist/modules/admin/elevenlabs-test-chat.routes.js +158 -0
  97. package/dist/modules/admin/elevenlabs-test-chat.routes.js.map +1 -0
  98. package/dist/modules/admin/whatsapp-test-chat.routes.d.ts +2 -0
  99. package/dist/modules/admin/whatsapp-test-chat.routes.js +204 -0
  100. package/dist/modules/admin/whatsapp-test-chat.routes.js.map +1 -0
  101. package/dist/modules/agents/agent.model.d.ts +38 -0
  102. package/dist/modules/agents/agent.model.js +92 -0
  103. package/dist/modules/agents/agent.model.js.map +1 -0
  104. package/dist/modules/agents/agent.routes.d.ts +2 -0
  105. package/dist/modules/agents/agent.routes.js +61 -0
  106. package/dist/modules/agents/agent.routes.js.map +1 -0
  107. package/dist/modules/appointment-validation/appointment-validation.model.d.ts +76 -0
  108. package/dist/modules/appointment-validation/appointment-validation.model.js +118 -0
  109. package/dist/modules/appointment-validation/appointment-validation.model.js.map +1 -0
  110. package/dist/modules/appointment-validation/appointment-validation.routes.d.ts +2 -0
  111. package/dist/modules/appointment-validation/appointment-validation.routes.js +202 -0
  112. package/dist/modules/appointment-validation/appointment-validation.routes.js.map +1 -0
  113. package/dist/modules/appointment-validation/appointment-validation.service.d.ts +53 -0
  114. package/dist/modules/appointment-validation/appointment-validation.service.js +827 -0
  115. package/dist/modules/appointment-validation/appointment-validation.service.js.map +1 -0
  116. package/dist/modules/auth/auth.model.d.ts +17 -0
  117. package/dist/modules/auth/auth.model.js +64 -0
  118. package/dist/modules/auth/auth.model.js.map +1 -0
  119. package/dist/modules/auth/auth.routes.d.ts +2 -0
  120. package/dist/modules/auth/auth.routes.js +202 -0
  121. package/dist/modules/auth/auth.routes.js.map +1 -0
  122. package/dist/modules/auth/auth.service.d.ts +28 -0
  123. package/dist/modules/auth/auth.service.js +183 -0
  124. package/dist/modules/auth/auth.service.js.map +1 -0
  125. package/dist/modules/auth/refresh-token.model.d.ts +13 -0
  126. package/dist/modules/auth/refresh-token.model.js +52 -0
  127. package/dist/modules/auth/refresh-token.model.js.map +1 -0
  128. package/dist/modules/billing/billing-alert.model.d.ts +16 -0
  129. package/dist/modules/billing/billing-alert.model.js +47 -0
  130. package/dist/modules/billing/billing-alert.model.js.map +1 -0
  131. package/dist/modules/billing/billing-period-snapshot.model.d.ts +35 -0
  132. package/dist/modules/billing/billing-period-snapshot.model.js +68 -0
  133. package/dist/modules/billing/billing-period-snapshot.model.js.map +1 -0
  134. package/dist/modules/billing/billing.model.d.ts +18 -0
  135. package/dist/modules/billing/billing.model.js +62 -0
  136. package/dist/modules/billing/billing.model.js.map +1 -0
  137. package/dist/modules/billing/billing.routes.d.ts +2 -0
  138. package/dist/modules/billing/billing.routes.js +63 -0
  139. package/dist/modules/billing/billing.routes.js.map +1 -0
  140. package/dist/modules/billing/billing.service.d.ts +69 -0
  141. package/dist/modules/billing/billing.service.js +498 -0
  142. package/dist/modules/billing/billing.service.js.map +1 -0
  143. package/dist/modules/billing/payment.model.d.ts +24 -0
  144. package/dist/modules/billing/payment.model.js +57 -0
  145. package/dist/modules/billing/payment.model.js.map +1 -0
  146. package/dist/modules/calls/call.model.d.ts +41 -0
  147. package/dist/modules/calls/call.model.js +97 -0
  148. package/dist/modules/calls/call.model.js.map +1 -0
  149. package/dist/modules/calls/call.routes.d.ts +2 -0
  150. package/dist/modules/calls/call.routes.js +103 -0
  151. package/dist/modules/calls/call.routes.js.map +1 -0
  152. package/dist/modules/campaigns/campaign.model.d.ts +45 -0
  153. package/dist/modules/campaigns/campaign.model.js +98 -0
  154. package/dist/modules/campaigns/campaign.model.js.map +1 -0
  155. package/dist/modules/campaigns/campaign.routes.d.ts +2 -0
  156. package/dist/modules/campaigns/campaign.routes.js +323 -0
  157. package/dist/modules/campaigns/campaign.routes.js.map +1 -0
  158. package/dist/modules/campaigns/campaign.service.d.ts +11 -0
  159. package/dist/modules/campaigns/campaign.service.js +86 -0
  160. package/dist/modules/campaigns/campaign.service.js.map +1 -0
  161. package/dist/modules/google-calendar/google-calendar.routes.d.ts +2 -0
  162. package/dist/modules/google-calendar/google-calendar.routes.js +32 -0
  163. package/dist/modules/google-calendar/google-calendar.routes.js.map +1 -0
  164. package/dist/modules/inbound-call/inbound-call-config.model.d.ts +20 -0
  165. package/dist/modules/inbound-call/inbound-call-config.model.js +68 -0
  166. package/dist/modules/inbound-call/inbound-call-config.model.js.map +1 -0
  167. package/dist/modules/inbound-call/inbound-call.routes.d.ts +2 -0
  168. package/dist/modules/inbound-call/inbound-call.routes.js +243 -0
  169. package/dist/modules/inbound-call/inbound-call.routes.js.map +1 -0
  170. package/dist/modules/leads/lead.model.d.ts +24 -0
  171. package/dist/modules/leads/lead.model.js +54 -0
  172. package/dist/modules/leads/lead.model.js.map +1 -0
  173. package/dist/modules/leads/lead.routes.d.ts +2 -0
  174. package/dist/modules/leads/lead.routes.js +201 -0
  175. package/dist/modules/leads/lead.routes.js.map +1 -0
  176. package/dist/modules/plans/plan.model.d.ts +25 -0
  177. package/dist/modules/plans/plan.model.js +59 -0
  178. package/dist/modules/plans/plan.model.js.map +1 -0
  179. package/dist/modules/surveys/survey.model.d.ts +30 -0
  180. package/dist/modules/surveys/survey.model.js +75 -0
  181. package/dist/modules/surveys/survey.model.js.map +1 -0
  182. package/dist/modules/surveys/survey.routes.d.ts +2 -0
  183. package/dist/modules/surveys/survey.routes.js +153 -0
  184. package/dist/modules/surveys/survey.routes.js.map +1 -0
  185. package/dist/modules/tenants/tenant.model.d.ts +86 -0
  186. package/dist/modules/tenants/tenant.model.js +127 -0
  187. package/dist/modules/tenants/tenant.model.js.map +1 -0
  188. package/dist/modules/tenants/tenant.routes.d.ts +2 -0
  189. package/dist/modules/tenants/tenant.routes.js +65 -0
  190. package/dist/modules/tenants/tenant.routes.js.map +1 -0
  191. package/dist/modules/users/user.routes.d.ts +2 -0
  192. package/dist/modules/users/user.routes.js +106 -0
  193. package/dist/modules/users/user.routes.js.map +1 -0
  194. package/dist/modules/webhooks/elevenlabs-tool.routes.d.ts +20 -0
  195. package/dist/modules/webhooks/elevenlabs-tool.routes.js +85 -0
  196. package/dist/modules/webhooks/elevenlabs-tool.routes.js.map +1 -0
  197. package/dist/modules/webhooks/elevenlabs-tool.service.d.ts +11 -0
  198. package/dist/modules/webhooks/elevenlabs-tool.service.js +360 -0
  199. package/dist/modules/webhooks/elevenlabs-tool.service.js.map +1 -0
  200. package/dist/modules/webhooks/elevenlabs.routes.d.ts +2 -0
  201. package/dist/modules/webhooks/elevenlabs.routes.js +34 -0
  202. package/dist/modules/webhooks/elevenlabs.routes.js.map +1 -0
  203. package/dist/modules/webhooks/elevenlabs.service.d.ts +6 -0
  204. package/dist/modules/webhooks/elevenlabs.service.js +512 -0
  205. package/dist/modules/webhooks/elevenlabs.service.js.map +1 -0
  206. package/dist/modules/webhooks/unipile.routes.d.ts +2 -0
  207. package/dist/modules/webhooks/unipile.routes.js +780 -0
  208. package/dist/modules/webhooks/unipile.routes.js.map +1 -0
  209. package/dist/modules/whatsapp/appointment.model.d.ts +27 -0
  210. package/dist/modules/whatsapp/appointment.model.js +58 -0
  211. package/dist/modules/whatsapp/appointment.model.js.map +1 -0
  212. package/dist/modules/whatsapp/operator-request.model.d.ts +29 -0
  213. package/dist/modules/whatsapp/operator-request.model.js +65 -0
  214. package/dist/modules/whatsapp/operator-request.model.js.map +1 -0
  215. package/dist/modules/whatsapp/stt-usage.model.d.ts +16 -0
  216. package/dist/modules/whatsapp/stt-usage.model.js +53 -0
  217. package/dist/modules/whatsapp/stt-usage.model.js.map +1 -0
  218. package/dist/modules/whatsapp/whatsapp-chat.model.d.ts +23 -0
  219. package/dist/modules/whatsapp/whatsapp-chat.model.js +55 -0
  220. package/dist/modules/whatsapp/whatsapp-chat.model.js.map +1 -0
  221. package/dist/modules/whatsapp/whatsapp-contact-profile.model.d.ts +23 -0
  222. package/dist/modules/whatsapp/whatsapp-contact-profile.model.js +54 -0
  223. package/dist/modules/whatsapp/whatsapp-contact-profile.model.js.map +1 -0
  224. package/dist/modules/whatsapp/whatsapp-message.model.d.ts +30 -0
  225. package/dist/modules/whatsapp/whatsapp-message.model.js +52 -0
  226. package/dist/modules/whatsapp/whatsapp-message.model.js.map +1 -0
  227. package/dist/modules/whatsapp/whatsapp-session.model.d.ts +33 -0
  228. package/dist/modules/whatsapp/whatsapp-session.model.js +65 -0
  229. package/dist/modules/whatsapp/whatsapp-session.model.js.map +1 -0
  230. package/dist/modules/whatsapp/whatsapp.routes.d.ts +2 -0
  231. package/dist/modules/whatsapp/whatsapp.routes.js +1237 -0
  232. package/dist/modules/whatsapp/whatsapp.routes.js.map +1 -0
  233. package/dist/plugins/cors.d.ts +3 -0
  234. package/dist/plugins/cors.js +11 -0
  235. package/dist/plugins/cors.js.map +1 -0
  236. package/dist/plugins/jwt.d.ts +3 -0
  237. package/dist/plugins/jwt.js +22 -0
  238. package/dist/plugins/jwt.js.map +1 -0
  239. package/dist/plugins/rawBody.d.ts +3 -0
  240. package/dist/plugins/rawBody.js +16 -0
  241. package/dist/plugins/rawBody.js.map +1 -0
  242. package/dist/plugins/rbac.d.ts +5 -0
  243. package/dist/plugins/rbac.js +29 -0
  244. package/dist/plugins/rbac.js.map +1 -0
  245. package/dist/routes/admin.routes.d.ts +2 -0
  246. package/dist/routes/admin.routes.js +169 -0
  247. package/dist/routes/admin.routes.js.map +1 -0
  248. package/dist/routes/health.routes.d.ts +2 -0
  249. package/dist/routes/health.routes.js +16 -0
  250. package/dist/routes/health.routes.js.map +1 -0
  251. package/dist/routes/webhook.routes.d.ts +2 -0
  252. package/dist/routes/webhook.routes.js +17 -0
  253. package/dist/routes/webhook.routes.js.map +1 -0
  254. package/dist/services/ai/base.ai.d.ts +19 -0
  255. package/dist/services/ai/base.ai.js +120 -0
  256. package/dist/services/ai/base.ai.js.map +1 -0
  257. package/dist/services/ai/gemini.service.d.ts +11 -0
  258. package/dist/services/ai/gemini.service.js +43 -0
  259. package/dist/services/ai/gemini.service.js.map +1 -0
  260. package/dist/services/ai/index.d.ts +2 -0
  261. package/dist/services/ai/index.js +26 -0
  262. package/dist/services/ai/index.js.map +1 -0
  263. package/dist/services/ai/openai.service.d.ts +11 -0
  264. package/dist/services/ai/openai.service.js +50 -0
  265. package/dist/services/ai/openai.service.js.map +1 -0
  266. package/dist/services/elevenlabs.service.d.ts +52 -0
  267. package/dist/services/elevenlabs.service.js +447 -0
  268. package/dist/services/elevenlabs.service.js.map +1 -0
  269. package/dist/services/google-calendar.service.d.ts +60 -0
  270. package/dist/services/google-calendar.service.js +494 -0
  271. package/dist/services/google-calendar.service.js.map +1 -0
  272. package/dist/services/inbound-call-schedule.service.d.ts +11 -0
  273. package/dist/services/inbound-call-schedule.service.js +162 -0
  274. package/dist/services/inbound-call-schedule.service.js.map +1 -0
  275. package/dist/services/netgsm.service.d.ts +41 -0
  276. package/dist/services/netgsm.service.js +89 -0
  277. package/dist/services/netgsm.service.js.map +1 -0
  278. package/dist/services/unipile.service.d.ts +41 -0
  279. package/dist/services/unipile.service.js +149 -0
  280. package/dist/services/unipile.service.js.map +1 -0
  281. package/dist/services/whatsapp-agent.service.d.ts +139 -0
  282. package/dist/services/whatsapp-agent.service.js +2055 -0
  283. package/dist/services/whatsapp-agent.service.js.map +1 -0
  284. package/dist/services/whatsapp.service.d.ts +26 -0
  285. package/dist/services/whatsapp.service.js +206 -0
  286. package/dist/services/whatsapp.service.js.map +1 -0
  287. package/dist/templates/index.d.ts +39 -0
  288. package/dist/templates/index.js +35 -0
  289. package/dist/templates/index.js.map +1 -0
  290. package/dist/templates/receptionist.d.ts +2 -0
  291. package/dist/templates/receptionist.js +39 -0
  292. package/dist/templates/receptionist.js.map +1 -0
  293. package/dist/templates/survey.d.ts +2 -0
  294. package/dist/templates/survey.js +41 -0
  295. package/dist/templates/survey.js.map +1 -0
  296. package/dist/types/index.d.ts +173 -0
  297. package/dist/types/index.js +3 -0
  298. package/dist/types/index.js.map +1 -0
  299. package/dist/utils/logger.d.ts +3 -0
  300. package/dist/utils/logger.js +105 -0
  301. package/dist/utils/logger.js.map +1 -0
  302. package/docker-compose.nestjs.yml +89 -0
  303. package/docker-compose.yml +78 -0
  304. package/docs/AI_AGENT_ENHANCEMENT_PLAN.md +164 -0
  305. package/docs/API.md +1193 -0
  306. package/docs/API_ENDPOINTS.md +344 -0
  307. package/docs/ARCHITECTURE.md +305 -0
  308. package/docs/AUTH_API.md +252 -0
  309. package/docs/BILLING_SMS_ALERTS.md +94 -0
  310. package/docs/CHAT_ASSIGNMENT_SYSTEM.md +118 -0
  311. package/docs/CLIENT_TOOLS_AND_FEATURES.md +337 -0
  312. package/docs/ELEVENLABS_WEBHOOK_TOOLS.md +644 -0
  313. package/docs/FRONTEND_CHECKLIST.md +227 -0
  314. package/docs/IMPLEMENTATION_STATUS.md +470 -0
  315. package/docs/MIGRATION_GUIDE.md +96 -0
  316. package/docs/MISSINGS_REPORT.md +507 -0
  317. package/docs/NESTJS_MIGRATION_REFERENCE.md +5136 -0
  318. package/docs/PROJECT_DESCRIPTION.md +1038 -0
  319. package/docs/SCALING.md +148 -0
  320. package/docs/SESSION_SUMMARY_2026_03_17.md +135 -0
  321. package/docs/WHATSAPP_AGENT.md +1086 -0
  322. package/docs/architecture/00-SYSTEM-OVERVIEW.md +318 -0
  323. package/docs/architecture/01-DATABASE-SCHEMA.md +2564 -0
  324. package/docs/architecture/02-AUTHENTICATION.md +1040 -0
  325. package/docs/architecture/03-MULTI-CLINIC.md +742 -0
  326. package/docs/architecture/04-WHATSAPP-AGENT.md +608 -0
  327. package/docs/architecture/05-OPERATOR-WORKFLOW.md +444 -0
  328. package/docs/architecture/06-BAILEYS-MICROSERVICE.md +616 -0
  329. package/docs/architecture/07-APPOINTMENTS.md +849 -0
  330. package/docs/architecture/08-VOICE-CALLS.md +470 -0
  331. package/docs/architecture/09-OUTBOUND-CAMPAIGNS.md +542 -0
  332. package/docs/architecture/10-CLIENT-TOOLS.md +665 -0
  333. package/docs/architecture/11-BILLING.md +458 -0
  334. package/docs/architecture/12-SECURITY.md +216 -0
  335. package/docs/architecture/13-LOGGING-AUDIT.md +549 -0
  336. package/docs/architecture/14-META-BUSINESS-API.md +454 -0
  337. package/docs/architecture/15-AI-MODULE.md +479 -0
  338. package/docs/architecture/16-BACKGROUND-JOBS.md +469 -0
  339. package/docs/architecture/17-REALTIME-LIVECHAT.md +447 -0
  340. package/docs/architecture/18-FILE-STORAGE.md +410 -0
  341. package/docs/architecture/19-PATIENTS.md +1034 -0
  342. package/docs/architecture/20-TREATMENTS-AND-PLANS.md +774 -0
  343. package/docs/architecture/21-BEFORE-AFTER-PHOTOS.md +519 -0
  344. package/docs/database.md +456 -0
  345. package/docs/ornek-randevu-onay.csv +3 -0
  346. package/ecosystem.config.js +16 -0
  347. package/elevenlabs-convai-api-reference.md +1171 -0
  348. package/frontend/.dockerignore +2 -0
  349. package/frontend/Dockerfile +24 -0
  350. package/frontend/README.md +75 -0
  351. package/frontend/components.json +25 -0
  352. package/frontend/eslint.config.js +23 -0
  353. package/frontend/index.html +13 -0
  354. package/frontend/nginx.conf +37 -0
  355. package/frontend/package-lock.json +8709 -0
  356. package/frontend/package.json +71 -0
  357. package/frontend/public/favicon.svg +1 -0
  358. package/frontend/public/icons.svg +24 -0
  359. package/frontend/src/App.tsx +125 -0
  360. package/frontend/src/components/error-boundary.tsx +50 -0
  361. package/frontend/src/components/shared/activity-timeline.tsx +66 -0
  362. package/frontend/src/components/shared/appointment-calendar.css +80 -0
  363. package/frontend/src/components/shared/appointment-calendar.tsx +245 -0
  364. package/frontend/src/components/shared/chat-bubble.tsx +72 -0
  365. package/frontend/src/components/shared/combobox.tsx +119 -0
  366. package/frontend/src/components/shared/confirm-dialog.tsx +57 -0
  367. package/frontend/src/components/shared/data-table-pagination.tsx +97 -0
  368. package/frontend/src/components/shared/data-table-toolbar.tsx +39 -0
  369. package/frontend/src/components/shared/empty-state.tsx +27 -0
  370. package/frontend/src/components/shared/file-upload.tsx +140 -0
  371. package/frontend/src/components/shared/index.ts +20 -0
  372. package/frontend/src/components/shared/language-switcher.tsx +29 -0
  373. package/frontend/src/components/shared/notification-dropdown.tsx +115 -0
  374. package/frontend/src/components/shared/page-header.tsx +23 -0
  375. package/frontend/src/components/shared/stat-card.tsx +37 -0
  376. package/frontend/src/components/shared/status-badge.tsx +70 -0
  377. package/frontend/src/components/shared/status-dot.tsx +43 -0
  378. package/frontend/src/components/ui/alert-dialog.tsx +187 -0
  379. package/frontend/src/components/ui/alert.tsx +76 -0
  380. package/frontend/src/components/ui/avatar.tsx +109 -0
  381. package/frontend/src/components/ui/badge.tsx +52 -0
  382. package/frontend/src/components/ui/breadcrumb.tsx +125 -0
  383. package/frontend/src/components/ui/button.tsx +60 -0
  384. package/frontend/src/components/ui/calendar.tsx +219 -0
  385. package/frontend/src/components/ui/card.tsx +103 -0
  386. package/frontend/src/components/ui/chart.tsx +371 -0
  387. package/frontend/src/components/ui/checkbox.tsx +29 -0
  388. package/frontend/src/components/ui/collapsible.tsx +19 -0
  389. package/frontend/src/components/ui/command.tsx +194 -0
  390. package/frontend/src/components/ui/dialog.tsx +158 -0
  391. package/frontend/src/components/ui/dropdown-menu.tsx +268 -0
  392. package/frontend/src/components/ui/input-group.tsx +156 -0
  393. package/frontend/src/components/ui/input.tsx +20 -0
  394. package/frontend/src/components/ui/label.tsx +20 -0
  395. package/frontend/src/components/ui/pagination.tsx +130 -0
  396. package/frontend/src/components/ui/popover.tsx +90 -0
  397. package/frontend/src/components/ui/progress.tsx +83 -0
  398. package/frontend/src/components/ui/radio-group.tsx +36 -0
  399. package/frontend/src/components/ui/scroll-area.tsx +54 -0
  400. package/frontend/src/components/ui/select.tsx +199 -0
  401. package/frontend/src/components/ui/separator.tsx +23 -0
  402. package/frontend/src/components/ui/sheet.tsx +138 -0
  403. package/frontend/src/components/ui/sidebar.tsx +723 -0
  404. package/frontend/src/components/ui/skeleton.tsx +13 -0
  405. package/frontend/src/components/ui/sonner.tsx +47 -0
  406. package/frontend/src/components/ui/switch.tsx +30 -0
  407. package/frontend/src/components/ui/table.tsx +114 -0
  408. package/frontend/src/components/ui/tabs.tsx +82 -0
  409. package/frontend/src/components/ui/textarea.tsx +18 -0
  410. package/frontend/src/components/ui/toggle-group.tsx +89 -0
  411. package/frontend/src/components/ui/toggle.tsx +43 -0
  412. package/frontend/src/components/ui/tooltip.tsx +64 -0
  413. package/frontend/src/hooks/use-mobile.ts +19 -0
  414. package/frontend/src/i18n/index.ts +20 -0
  415. package/frontend/src/i18n/locales/en.json +786 -0
  416. package/frontend/src/i18n/locales/tr.json +786 -0
  417. package/frontend/src/index.css +134 -0
  418. package/frontend/src/layouts/admin-layout.tsx +111 -0
  419. package/frontend/src/layouts/app-header.tsx +130 -0
  420. package/frontend/src/layouts/app-layout.tsx +19 -0
  421. package/frontend/src/layouts/app-sidebar.tsx +212 -0
  422. package/frontend/src/layouts/auth-guard.tsx +31 -0
  423. package/frontend/src/layouts/mobile-sidebar.tsx +120 -0
  424. package/frontend/src/lib/api.ts +68 -0
  425. package/frontend/src/lib/hooks/use-appointments.ts +224 -0
  426. package/frontend/src/lib/hooks/use-availability-blocks.ts +83 -0
  427. package/frontend/src/lib/hooks/use-chats.ts +236 -0
  428. package/frontend/src/lib/hooks/use-clinic-detail.ts +171 -0
  429. package/frontend/src/lib/hooks/use-clinics.ts +37 -0
  430. package/frontend/src/lib/hooks/use-doctor-calendar.ts +80 -0
  431. package/frontend/src/lib/hooks/use-examinations.ts +89 -0
  432. package/frontend/src/lib/hooks/use-medical-history.ts +52 -0
  433. package/frontend/src/lib/hooks/use-patients.ts +296 -0
  434. package/frontend/src/lib/hooks/use-photo-sets.ts +118 -0
  435. package/frontend/src/lib/hooks/use-treatment-plans.ts +152 -0
  436. package/frontend/src/lib/hooks/use-treatments.ts +125 -0
  437. package/frontend/src/lib/hooks/use-users.ts +172 -0
  438. package/frontend/src/lib/utils.ts +6 -0
  439. package/frontend/src/main.tsx +17 -0
  440. package/frontend/src/pages/admin/agents/detail.tsx +774 -0
  441. package/frontend/src/pages/admin/agents/import.tsx +280 -0
  442. package/frontend/src/pages/admin/agents/index.tsx +245 -0
  443. package/frontend/src/pages/admin/ai-playground.tsx +543 -0
  444. package/frontend/src/pages/appointments/create-appointment-dialog.tsx +390 -0
  445. package/frontend/src/pages/appointments/index.tsx +860 -0
  446. package/frontend/src/pages/audit/index.tsx +24 -0
  447. package/frontend/src/pages/auth/login.tsx +194 -0
  448. package/frontend/src/pages/billing/index.tsx +24 -0
  449. package/frontend/src/pages/calendar/index.tsx +704 -0
  450. package/frontend/src/pages/calendar-connections/index.tsx +295 -0
  451. package/frontend/src/pages/calls/index.tsx +24 -0
  452. package/frontend/src/pages/campaigns/index.tsx +24 -0
  453. package/frontend/src/pages/chats/index.tsx +981 -0
  454. package/frontend/src/pages/clinics/index.tsx +224 -0
  455. package/frontend/src/pages/clinics/settings.tsx +412 -0
  456. package/frontend/src/pages/components-showcase.tsx +773 -0
  457. package/frontend/src/pages/connections/index.tsx +328 -0
  458. package/frontend/src/pages/dashboard.tsx +50 -0
  459. package/frontend/src/pages/leads/index.tsx +24 -0
  460. package/frontend/src/pages/my-schedule/index.tsx +496 -0
  461. package/frontend/src/pages/patients/create-patient-dialog.tsx +358 -0
  462. package/frontend/src/pages/patients/detail.tsx +1195 -0
  463. package/frontend/src/pages/patients/edit-patient-dialog.tsx +387 -0
  464. package/frontend/src/pages/patients/examinations-tab.tsx +460 -0
  465. package/frontend/src/pages/patients/index.tsx +381 -0
  466. package/frontend/src/pages/patients/medical-history-dialog.tsx +207 -0
  467. package/frontend/src/pages/patients/photo-sets-tab.tsx +616 -0
  468. package/frontend/src/pages/patients/timeline-tab.tsx +164 -0
  469. package/frontend/src/pages/patients/treatment-plans-tab.tsx +598 -0
  470. package/frontend/src/pages/phone-numbers/detail.tsx +427 -0
  471. package/frontend/src/pages/phone-numbers/index.tsx +455 -0
  472. package/frontend/src/pages/platform/index.tsx +454 -0
  473. package/frontend/src/pages/settings/index.tsx +126 -0
  474. package/frontend/src/pages/treatments/index.tsx +487 -0
  475. package/frontend/src/pages/users/doctor-profile.tsx +672 -0
  476. package/frontend/src/pages/users/edit.tsx +329 -0
  477. package/frontend/src/pages/users/index.tsx +407 -0
  478. package/frontend/src/pages/validation/index.tsx +24 -0
  479. package/frontend/src/stores/auth.store.ts +108 -0
  480. package/frontend/src/stores/ui.store.ts +41 -0
  481. package/frontend/tsconfig.app.json +32 -0
  482. package/frontend/tsconfig.json +13 -0
  483. package/frontend/tsconfig.node.json +26 -0
  484. package/frontend/vite.config.ts +29 -0
  485. package/nestjs/.dockerignore +5 -0
  486. package/nestjs/.env.docker +64 -0
  487. package/nestjs/.prettierrc +4 -0
  488. package/nestjs/Dockerfile +36 -0
  489. package/nestjs/README.md +98 -0
  490. package/nestjs/eslint.config.mjs +35 -0
  491. package/nestjs/nest-cli.json +8 -0
  492. package/nestjs/package-lock.json +13390 -0
  493. package/nestjs/package.json +114 -0
  494. package/nestjs/prisma/migrations/20260409161536_add_message_metadata_fields/migration.sql +1746 -0
  495. package/nestjs/prisma/migrations/20260410140436_add_agent_ai_fields/migration.sql +36 -0
  496. package/nestjs/prisma/migrations/20260410175519_add_agent_clinic_assignments/migration.sql +21 -0
  497. package/nestjs/prisma/migrations/20260412094344_make_agent_tenant_optional/migration.sql +2 -0
  498. package/nestjs/prisma/migrations/20260412110008_add_admin_chat_sessions/migration.sql +47 -0
  499. package/nestjs/prisma/migrations/migration_lock.toml +3 -0
  500. package/nestjs/prisma/schema.prisma +1843 -0
  501. package/nestjs/prisma/seed.ts +375 -0
  502. package/nestjs/prisma.config.ts +14 -0
  503. package/nestjs/src/admin/admin.controller.ts +27 -0
  504. package/nestjs/src/admin/admin.module.ts +16 -0
  505. package/nestjs/src/admin/admin.service.ts +91 -0
  506. package/nestjs/src/admin/ai-chat-session.service.ts +454 -0
  507. package/nestjs/src/admin/ai-test.controller.ts +191 -0
  508. package/nestjs/src/admin/superadmin.controller.ts +106 -0
  509. package/nestjs/src/agents/agents.controller.ts +262 -0
  510. package/nestjs/src/agents/agents.module.ts +13 -0
  511. package/nestjs/src/agents/agents.service.ts +733 -0
  512. package/nestjs/src/agents/dto/create-agent.dto.ts +99 -0
  513. package/nestjs/src/agents/dto/index.ts +2 -0
  514. package/nestjs/src/agents/dto/update-agent.dto.ts +148 -0
  515. package/nestjs/src/app.module.ts +115 -0
  516. package/nestjs/src/appointment-validation/appointment-validation.controller.ts +194 -0
  517. package/nestjs/src/appointment-validation/appointment-validation.module.ts +16 -0
  518. package/nestjs/src/appointment-validation/appointment-validation.service.ts +450 -0
  519. package/nestjs/src/appointment-validation/dto/create-batch.dto.ts +105 -0
  520. package/nestjs/src/appointment-validation/dto/index.ts +1 -0
  521. package/nestjs/src/appointment-validation/processors/validation-dispatch.processor.ts +26 -0
  522. package/nestjs/src/appointment-validation/processors/validation-sync.processor.ts +23 -0
  523. package/nestjs/src/appointments/appointments.controller.ts +268 -0
  524. package/nestjs/src/appointments/appointments.module.ts +13 -0
  525. package/nestjs/src/appointments/appointments.service.ts +773 -0
  526. package/nestjs/src/appointments/dto/create-appointment.dto.ts +72 -0
  527. package/nestjs/src/appointments/dto/index.ts +4 -0
  528. package/nestjs/src/appointments/dto/query-appointments.dto.ts +60 -0
  529. package/nestjs/src/appointments/dto/update-appointment.dto.ts +43 -0
  530. package/nestjs/src/appointments/dto/update-status.dto.ts +18 -0
  531. package/nestjs/src/appointments/processors/reminder.processor.ts +243 -0
  532. package/nestjs/src/audit/audit.controller.ts +84 -0
  533. package/nestjs/src/audit/audit.decorator.ts +20 -0
  534. package/nestjs/src/audit/audit.interceptor.ts +67 -0
  535. package/nestjs/src/audit/audit.interfaces.ts +15 -0
  536. package/nestjs/src/audit/audit.module.ts +12 -0
  537. package/nestjs/src/audit/audit.service.ts +177 -0
  538. package/nestjs/src/auth/auth.controller.ts +116 -0
  539. package/nestjs/src/auth/auth.module.ts +25 -0
  540. package/nestjs/src/auth/auth.service.ts +612 -0
  541. package/nestjs/src/auth/dto/change-password.dto.ts +13 -0
  542. package/nestjs/src/auth/dto/forgot-password.dto.ts +8 -0
  543. package/nestjs/src/auth/dto/index.ts +6 -0
  544. package/nestjs/src/auth/dto/login.dto.ts +13 -0
  545. package/nestjs/src/auth/dto/refresh.dto.ts +8 -0
  546. package/nestjs/src/auth/dto/register.dto.ts +28 -0
  547. package/nestjs/src/auth/dto/reset-password.dto.ts +13 -0
  548. package/nestjs/src/auth/permissions.config.ts +85 -0
  549. package/nestjs/src/availability-blocks/availability-blocks.controller.ts +83 -0
  550. package/nestjs/src/availability-blocks/availability-blocks.module.ts +10 -0
  551. package/nestjs/src/availability-blocks/availability-blocks.service.ts +202 -0
  552. package/nestjs/src/billing/billing.controller.ts +104 -0
  553. package/nestjs/src/billing/billing.module.ts +12 -0
  554. package/nestjs/src/billing/billing.service.ts +398 -0
  555. package/nestjs/src/billing/dto/index.ts +2 -0
  556. package/nestjs/src/billing/dto/query-billing.dto.ts +29 -0
  557. package/nestjs/src/billing/dto/record-payment.dto.ts +60 -0
  558. package/nestjs/src/billing/processors/alerts.processor.ts +216 -0
  559. package/nestjs/src/billing/processors/snapshot.processor.ts +181 -0
  560. package/nestjs/src/calls/calls.controller.ts +92 -0
  561. package/nestjs/src/calls/calls.module.ts +10 -0
  562. package/nestjs/src/calls/calls.service.ts +359 -0
  563. package/nestjs/src/calls/dto/index.ts +1 -0
  564. package/nestjs/src/calls/dto/query-calls.dto.ts +46 -0
  565. package/nestjs/src/clinics/clinics.controller.ts +226 -0
  566. package/nestjs/src/clinics/clinics.module.ts +11 -0
  567. package/nestjs/src/clinics/clinics.service.ts +203 -0
  568. package/nestjs/src/clinics/dto/create-clinic.dto.ts +40 -0
  569. package/nestjs/src/clinics/dto/create-meta-connection.dto.ts +44 -0
  570. package/nestjs/src/clinics/dto/index.ts +4 -0
  571. package/nestjs/src/clinics/dto/update-clinic.dto.ts +133 -0
  572. package/nestjs/src/clinics/dto/update-meta-connection.dto.ts +22 -0
  573. package/nestjs/src/clinics/meta-connections.service.ts +210 -0
  574. package/nestjs/src/common/decorators/accessible-clinics.decorator.ts +9 -0
  575. package/nestjs/src/common/decorators/current-user.decorator.ts +10 -0
  576. package/nestjs/src/common/decorators/features.decorator.ts +7 -0
  577. package/nestjs/src/common/decorators/index.ts +4 -0
  578. package/nestjs/src/common/decorators/permissions.decorator.ts +13 -0
  579. package/nestjs/src/common/gateways/events.gateway.ts +157 -0
  580. package/nestjs/src/common/guards/clinic-access.guard.ts +40 -0
  581. package/nestjs/src/common/guards/features.guard.ts +38 -0
  582. package/nestjs/src/common/guards/index.ts +5 -0
  583. package/nestjs/src/common/guards/jwt-auth.guard.ts +54 -0
  584. package/nestjs/src/common/guards/permissions.guard.ts +50 -0
  585. package/nestjs/src/common/guards/superadmin.guard.ts +35 -0
  586. package/nestjs/src/common/interceptors/request-context.interceptor.ts +32 -0
  587. package/nestjs/src/common/interceptors/superadmin-tenant.interceptor.ts +42 -0
  588. package/nestjs/src/common/interfaces/jwt-payload.interface.ts +11 -0
  589. package/nestjs/src/config/config.module.ts +13 -0
  590. package/nestjs/src/database/database.module.ts +9 -0
  591. package/nestjs/src/database/prisma.service.ts +20 -0
  592. package/nestjs/src/database/tenant-context.ts +27 -0
  593. package/nestjs/src/google-calendar/google-calendar.controller.ts +259 -0
  594. package/nestjs/src/google-calendar/google-calendar.module.ts +10 -0
  595. package/nestjs/src/google-calendar/google-calendar.service.ts +811 -0
  596. package/nestjs/src/integrations/ai/ai.interface.ts +74 -0
  597. package/nestjs/src/integrations/ai/ai.module.ts +11 -0
  598. package/nestjs/src/integrations/ai/ai.service.ts +148 -0
  599. package/nestjs/src/integrations/ai/providers/anthropic.provider.ts +146 -0
  600. package/nestjs/src/integrations/ai/providers/openai.provider.ts +158 -0
  601. package/nestjs/src/integrations/elevenlabs/elevenlabs.module.ts +8 -0
  602. package/nestjs/src/integrations/elevenlabs/elevenlabs.service.ts +226 -0
  603. package/nestjs/src/integrations/encryption/encryption.module.ts +9 -0
  604. package/nestjs/src/integrations/encryption/encryption.service.ts +31 -0
  605. package/nestjs/src/integrations/image/image.module.ts +9 -0
  606. package/nestjs/src/integrations/image/image.service.ts +61 -0
  607. package/nestjs/src/integrations/meta-business/meta-business.module.ts +10 -0
  608. package/nestjs/src/integrations/meta-business/meta-instagram.service.ts +94 -0
  609. package/nestjs/src/integrations/meta-business/meta-webhook.service.ts +52 -0
  610. package/nestjs/src/integrations/meta-business/meta-whatsapp.service.ts +254 -0
  611. package/nestjs/src/integrations/minio/minio.module.ts +9 -0
  612. package/nestjs/src/integrations/minio/minio.service.ts +88 -0
  613. package/nestjs/src/integrations/netgsm/netgsm.module.ts +8 -0
  614. package/nestjs/src/integrations/netgsm/netgsm.service.ts +17 -0
  615. package/nestjs/src/integrations/tektippay/tektippay.module.ts +8 -0
  616. package/nestjs/src/integrations/tektippay/tektippay.service.ts +23 -0
  617. package/nestjs/src/leads/dto/index.ts +2 -0
  618. package/nestjs/src/leads/dto/query-leads.dto.ts +50 -0
  619. package/nestjs/src/leads/dto/update-lead.dto.ts +26 -0
  620. package/nestjs/src/leads/leads.controller.ts +184 -0
  621. package/nestjs/src/leads/leads.module.ts +10 -0
  622. package/nestjs/src/leads/leads.service.ts +375 -0
  623. package/nestjs/src/logging/logging.controller.ts +82 -0
  624. package/nestjs/src/logging/logging.module.ts +11 -0
  625. package/nestjs/src/logging/logging.service.ts +180 -0
  626. package/nestjs/src/main.ts +86 -0
  627. package/nestjs/src/outbound-campaigns/dto/create-campaign.dto.ts +47 -0
  628. package/nestjs/src/outbound-campaigns/dto/index.ts +3 -0
  629. package/nestjs/src/outbound-campaigns/dto/update-campaign.dto.ts +31 -0
  630. package/nestjs/src/outbound-campaigns/dto/upload-entries.dto.ts +35 -0
  631. package/nestjs/src/outbound-campaigns/outbound-campaigns.controller.ts +307 -0
  632. package/nestjs/src/outbound-campaigns/outbound-campaigns.module.ts +13 -0
  633. package/nestjs/src/outbound-campaigns/outbound-campaigns.service.ts +471 -0
  634. package/nestjs/src/outbound-campaigns/processors/campaign-dispatch.processor.ts +366 -0
  635. package/nestjs/src/patients/documents.service.ts +231 -0
  636. package/nestjs/src/patients/dto/create-examination.dto.ts +34 -0
  637. package/nestjs/src/patients/dto/create-note.dto.ts +14 -0
  638. package/nestjs/src/patients/dto/create-patient.dto.ts +86 -0
  639. package/nestjs/src/patients/dto/create-photo-set.dto.ts +32 -0
  640. package/nestjs/src/patients/dto/index.ts +10 -0
  641. package/nestjs/src/patients/dto/update-examination.dto.ts +29 -0
  642. package/nestjs/src/patients/dto/update-medical-history.dto.ts +47 -0
  643. package/nestjs/src/patients/dto/update-patient.dto.ts +87 -0
  644. package/nestjs/src/patients/dto/update-photo-set.dto.ts +28 -0
  645. package/nestjs/src/patients/dto/upload-document.dto.ts +31 -0
  646. package/nestjs/src/patients/dto/upload-photo.dto.ts +27 -0
  647. package/nestjs/src/patients/examinations.service.ts +271 -0
  648. package/nestjs/src/patients/medical-history.service.ts +149 -0
  649. package/nestjs/src/patients/notes.service.ts +172 -0
  650. package/nestjs/src/patients/patients.controller.ts +485 -0
  651. package/nestjs/src/patients/patients.module.ts +22 -0
  652. package/nestjs/src/patients/patients.service.ts +412 -0
  653. package/nestjs/src/patients/photo-sets.service.ts +389 -0
  654. package/nestjs/src/phone-numbers/dto/create-phone-number.dto.ts +57 -0
  655. package/nestjs/src/phone-numbers/dto/index.ts +3 -0
  656. package/nestjs/src/phone-numbers/dto/update-phone-number.dto.ts +38 -0
  657. package/nestjs/src/phone-numbers/dto/update-schedule.dto.ts +39 -0
  658. package/nestjs/src/phone-numbers/phone-numbers.controller.ts +125 -0
  659. package/nestjs/src/phone-numbers/phone-numbers.module.ts +10 -0
  660. package/nestjs/src/phone-numbers/phone-numbers.service.ts +209 -0
  661. package/nestjs/src/plans/dto/create-plan.dto.ts +70 -0
  662. package/nestjs/src/plans/dto/index.ts +2 -0
  663. package/nestjs/src/plans/dto/update-plan.dto.ts +80 -0
  664. package/nestjs/src/plans/plans.controller.ts +50 -0
  665. package/nestjs/src/plans/plans.module.ts +10 -0
  666. package/nestjs/src/plans/plans.service.ts +115 -0
  667. package/nestjs/src/platform/dto/create-tenant.dto.ts +36 -0
  668. package/nestjs/src/platform/dto/index.ts +2 -0
  669. package/nestjs/src/platform/dto/update-tenant-platform.dto.ts +44 -0
  670. package/nestjs/src/platform/platform.controller.ts +79 -0
  671. package/nestjs/src/platform/platform.module.ts +10 -0
  672. package/nestjs/src/platform/platform.service.ts +301 -0
  673. package/nestjs/src/queue/queue.module.ts +56 -0
  674. package/nestjs/src/redis/redis.module.ts +20 -0
  675. package/nestjs/src/tenants/dto/index.ts +1 -0
  676. package/nestjs/src/tenants/dto/update-tenant.dto.ts +15 -0
  677. package/nestjs/src/tenants/tenants.controller.ts +45 -0
  678. package/nestjs/src/tenants/tenants.module.ts +10 -0
  679. package/nestjs/src/tenants/tenants.service.ts +41 -0
  680. package/nestjs/src/tools/adapters/elevenlabs-http.adapter.ts +51 -0
  681. package/nestjs/src/tools/adapters/elevenlabs-ws.adapter.ts +59 -0
  682. package/nestjs/src/tools/handlers/calendar.tools.ts +441 -0
  683. package/nestjs/src/tools/handlers/notification.tools.ts +34 -0
  684. package/nestjs/src/tools/handlers/operator.tools.ts +303 -0
  685. package/nestjs/src/tools/handlers/patient.tools.ts +242 -0
  686. package/nestjs/src/tools/handlers/payment.tools.ts +43 -0
  687. package/nestjs/src/tools/handlers/validation.tools.ts +152 -0
  688. package/nestjs/src/tools/tool-registry.service.ts +221 -0
  689. package/nestjs/src/tools/tool.decorator.ts +16 -0
  690. package/nestjs/src/tools/tool.interfaces.ts +26 -0
  691. package/nestjs/src/tools/tools.module.ts +50 -0
  692. package/nestjs/src/treatments/dto/create-plan-item.dto.ts +27 -0
  693. package/nestjs/src/treatments/dto/create-treatment-plan.dto.ts +69 -0
  694. package/nestjs/src/treatments/dto/create-treatment.dto.ts +59 -0
  695. package/nestjs/src/treatments/dto/index.ts +6 -0
  696. package/nestjs/src/treatments/dto/update-plan-item.dto.ts +23 -0
  697. package/nestjs/src/treatments/dto/update-treatment-plan.dto.ts +22 -0
  698. package/nestjs/src/treatments/dto/update-treatment.dto.ts +70 -0
  699. package/nestjs/src/treatments/treatment-plans.service.ts +362 -0
  700. package/nestjs/src/treatments/treatments.controller.ts +265 -0
  701. package/nestjs/src/treatments/treatments.module.ts +14 -0
  702. package/nestjs/src/treatments/treatments.service.ts +165 -0
  703. package/nestjs/src/users/doctor-profiles.service.ts +202 -0
  704. package/nestjs/src/users/dto/index.ts +4 -0
  705. package/nestjs/src/users/dto/invite-user.dto.ts +52 -0
  706. package/nestjs/src/users/dto/update-clinic-assignments.dto.ts +9 -0
  707. package/nestjs/src/users/dto/update-doctor-profile.dto.ts +49 -0
  708. package/nestjs/src/users/dto/update-user.dto.ts +41 -0
  709. package/nestjs/src/users/users.controller.ts +142 -0
  710. package/nestjs/src/users/users.module.ts +11 -0
  711. package/nestjs/src/users/users.service.ts +250 -0
  712. package/nestjs/src/webhooks/elevenlabs-tool.controller.ts +66 -0
  713. package/nestjs/src/webhooks/elevenlabs-webhook.controller.ts +60 -0
  714. package/nestjs/src/webhooks/meta-webhook.controller.ts +178 -0
  715. package/nestjs/src/webhooks/processors/elevenlabs-webhook.processor.ts +28 -0
  716. package/nestjs/src/webhooks/webhooks.module.ts +17 -0
  717. package/nestjs/src/whatsapp/chat-context.service.ts +281 -0
  718. package/nestjs/src/whatsapp/dto/add-blacklist.dto.ts +13 -0
  719. package/nestjs/src/whatsapp/dto/index.ts +2 -0
  720. package/nestjs/src/whatsapp/dto/send-message.dto.ts +14 -0
  721. package/nestjs/src/whatsapp/listeners/meta-message.listener.ts +579 -0
  722. package/nestjs/src/whatsapp/meta-auth.controller.ts +268 -0
  723. package/nestjs/src/whatsapp/meta-instagram-auth.controller.ts +244 -0
  724. package/nestjs/src/whatsapp/operator.service.ts +692 -0
  725. package/nestjs/src/whatsapp/processors/cost-sweep.processor.ts +130 -0
  726. package/nestjs/src/whatsapp/processors/grace.processor.ts +191 -0
  727. package/nestjs/src/whatsapp/processors/message-buffer.processor.ts +138 -0
  728. package/nestjs/src/whatsapp/processors/message-cleanup.processor.ts +148 -0
  729. package/nestjs/src/whatsapp/processors/meta-token-refresh.processor.ts +114 -0
  730. package/nestjs/src/whatsapp/processors/operator-expiry.processor.ts +105 -0
  731. package/nestjs/src/whatsapp/processors/profile-update.processor.ts +234 -0
  732. package/nestjs/src/whatsapp/processors/session-cleanup.processor.ts +178 -0
  733. package/nestjs/src/whatsapp/processors/session-labels.processor.ts +248 -0
  734. package/nestjs/src/whatsapp/whatsapp-agent.service.ts +2506 -0
  735. package/nestjs/src/whatsapp/whatsapp-recovery.service.ts +117 -0
  736. package/nestjs/src/whatsapp/whatsapp.controller.ts +398 -0
  737. package/nestjs/src/whatsapp/whatsapp.module.ts +51 -0
  738. package/nestjs/src/whatsapp/whatsapp.service.ts +592 -0
  739. package/nestjs/test/app.e2e-spec.ts +25 -0
  740. package/nestjs/test/jest-e2e.json +9 -0
  741. package/nestjs/tsconfig.build.json +4 -0
  742. package/nestjs/tsconfig.json +25 -0
  743. package/nginx.example.conf +18 -0
  744. package/package.json +47 -0
  745. package/scripts/addRecipient.ts +48 -0
  746. package/scripts/listRecipients.ts +31 -0
  747. package/scripts/migrate-agent-ref.ts +86 -0
  748. package/scripts/migrate-sessions.ts +183 -0
  749. package/scripts/promote.ts +27 -0
  750. package/scripts/retrigger.ts +84 -0
  751. package/scripts/seed.ts +435 -0
  752. package/scripts/testSend.ts +63 -0
  753. package/src/app.ts +85 -0
  754. package/src/config/agentPrompts.json +19 -0
  755. package/src/config/database.ts +21 -0
  756. package/src/config/env.ts +94 -0
  757. package/src/config/index.ts +86 -0
  758. package/src/controllers/webhook.controller.ts +150 -0
  759. package/src/errors/index.ts +9 -0
  760. package/src/hooks/webhookValidator.ts +55 -0
  761. package/src/index.ts +68 -0
  762. package/src/migrations/001_session-architecture.ts +138 -0
  763. package/src/migrations/002_agent-ref.ts +65 -0
  764. package/src/migrations/003_shift-schedule.ts +55 -0
  765. package/src/migrations/004_invert-shift-to-clinic-hours.ts +30 -0
  766. package/src/migrations/005_composite-baileys-chat-ids.ts +60 -0
  767. package/src/migrations/migration.model.ts +27 -0
  768. package/src/migrations/migration.routes.ts +40 -0
  769. package/src/migrations/migration.runner.ts +112 -0
  770. package/src/models/ConversationClaim.ts +17 -0
  771. package/src/models/ConversationEvaluation.ts +91 -0
  772. package/src/models/Summary.ts +77 -0
  773. package/src/models/Transcription.ts +68 -0
  774. package/src/models/WhatsAppRecipient.ts +37 -0
  775. package/src/modules/admin/admin.routes.ts +2385 -0
  776. package/src/modules/admin/elevenlabs-test-chat.routes.ts +193 -0
  777. package/src/modules/admin/whatsapp-test-chat.routes.ts +244 -0
  778. package/src/modules/agents/agent.model.ts +93 -0
  779. package/src/modules/agents/agent.routes.ts +65 -0
  780. package/src/modules/appointment-validation/appointment-validation.model.ts +163 -0
  781. package/src/modules/appointment-validation/appointment-validation.routes.ts +275 -0
  782. package/src/modules/appointment-validation/appointment-validation.service.ts +1028 -0
  783. package/src/modules/auth/auth.model.ts +42 -0
  784. package/src/modules/auth/auth.routes.ts +199 -0
  785. package/src/modules/auth/auth.service.ts +210 -0
  786. package/src/modules/auth/refresh-token.model.ts +26 -0
  787. package/src/modules/billing/billing-alert.model.ts +28 -0
  788. package/src/modules/billing/billing-period-snapshot.model.ts +68 -0
  789. package/src/modules/billing/billing.model.ts +42 -0
  790. package/src/modules/billing/billing.routes.ts +67 -0
  791. package/src/modules/billing/billing.service.ts +562 -0
  792. package/src/modules/billing/payment.model.ts +42 -0
  793. package/src/modules/calls/call.model.ts +102 -0
  794. package/src/modules/calls/call.routes.ts +118 -0
  795. package/src/modules/campaigns/campaign.model.ts +111 -0
  796. package/src/modules/campaigns/campaign.routes.ts +402 -0
  797. package/src/modules/campaigns/campaign.service.ts +99 -0
  798. package/src/modules/google-calendar/google-calendar.routes.ts +31 -0
  799. package/src/modules/inbound-call/inbound-call-config.model.ts +49 -0
  800. package/src/modules/inbound-call/inbound-call.routes.ts +289 -0
  801. package/src/modules/leads/lead.model.ts +40 -0
  802. package/src/modules/leads/lead.routes.ts +246 -0
  803. package/src/modules/logs/log.model.ts +27 -0
  804. package/src/modules/logs/log.routes.ts +102 -0
  805. package/src/modules/plans/plan.model.ts +45 -0
  806. package/src/modules/surveys/survey.model.ts +70 -0
  807. package/src/modules/surveys/survey.routes.ts +187 -0
  808. package/src/modules/tenants/tenant.model.ts +181 -0
  809. package/src/modules/tenants/tenant.routes.ts +78 -0
  810. package/src/modules/users/user.routes.ts +126 -0
  811. package/src/modules/webhooks/elevenlabs-tool.routes.ts +94 -0
  812. package/src/modules/webhooks/elevenlabs-tool.service.ts +491 -0
  813. package/src/modules/webhooks/elevenlabs.routes.ts +34 -0
  814. package/src/modules/webhooks/elevenlabs.service.ts +565 -0
  815. package/src/modules/webhooks/unipile.routes.ts +917 -0
  816. package/src/modules/whatsapp/appointment.model.ts +47 -0
  817. package/src/modules/whatsapp/operator-request.model.ts +58 -0
  818. package/src/modules/whatsapp/stt-usage.model.ts +30 -0
  819. package/src/modules/whatsapp/whatsapp-chat.model.ts +39 -0
  820. package/src/modules/whatsapp/whatsapp-contact-profile.model.ts +41 -0
  821. package/src/modules/whatsapp/whatsapp-message.model.ts +41 -0
  822. package/src/modules/whatsapp/whatsapp-session.model.ts +60 -0
  823. package/src/modules/whatsapp/whatsapp.routes.ts +1435 -0
  824. package/src/plugins/cors.ts +7 -0
  825. package/src/plugins/jwt.ts +18 -0
  826. package/src/plugins/rawBody.ts +12 -0
  827. package/src/plugins/rbac.ts +24 -0
  828. package/src/routes/admin.routes.ts +208 -0
  829. package/src/routes/health.routes.ts +12 -0
  830. package/src/routes/webhook.routes.ts +12 -0
  831. package/src/services/ai/base.ai.ts +132 -0
  832. package/src/services/ai/gemini.service.ts +41 -0
  833. package/src/services/ai/index.ts +24 -0
  834. package/src/services/ai/openai.service.ts +48 -0
  835. package/src/services/elevenlabs.service.ts +532 -0
  836. package/src/services/google-calendar.service.ts +656 -0
  837. package/src/services/inbound-call-schedule.service.ts +174 -0
  838. package/src/services/netgsm.service.ts +128 -0
  839. package/src/services/unipile.service.ts +200 -0
  840. package/src/services/whatsapp-agent.service.ts +2479 -0
  841. package/src/services/whatsapp.service.ts +245 -0
  842. package/src/templates/index.ts +71 -0
  843. package/src/templates/receptionist.ts +44 -0
  844. package/src/templates/survey.ts +44 -0
  845. package/src/types/index.ts +218 -0
  846. package/src/utils/logger.ts +83 -0
  847. package/tsconfig.json +19 -0
  848. package/web/.dockerignore +4 -0
  849. package/web/Dockerfile +18 -0
  850. package/web/README.md +73 -0
  851. package/web/components.json +23 -0
  852. package/web/eslint.config.js +23 -0
  853. package/web/index.html +14 -0
  854. package/web/nginx.conf +18 -0
  855. package/web/package-lock.json +10292 -0
  856. package/web/package.json +48 -0
  857. package/web/public/favicon.ico +0 -0
  858. package/web/public/vite.svg +1 -0
  859. package/web/src/App.tsx +191 -0
  860. package/web/src/assets/react.svg +1 -0
  861. package/web/src/components/Layout.tsx +261 -0
  862. package/web/src/components/LeadConversation.tsx +251 -0
  863. package/web/src/components/ProtectedRoute.tsx +20 -0
  864. package/web/src/components/conversation-review/CardAudioPlayer.tsx +200 -0
  865. package/web/src/components/conversation-review/CardEvaluation.tsx +351 -0
  866. package/web/src/components/conversation-review/CardMetadata.tsx +44 -0
  867. package/web/src/components/conversation-review/ConversationCard.tsx +95 -0
  868. package/web/src/components/conversation-review/ReviewContainer.tsx +120 -0
  869. package/web/src/components/conversation-review/ReviewFilters.tsx +88 -0
  870. package/web/src/components/empty-state.tsx +15 -0
  871. package/web/src/components/page-header.tsx +19 -0
  872. package/web/src/components/page-loader.tsx +32 -0
  873. package/web/src/components/pagination.tsx +38 -0
  874. package/web/src/components/stat-card.tsx +27 -0
  875. package/web/src/components/status-badge.tsx +125 -0
  876. package/web/src/components/ui/alert.tsx +66 -0
  877. package/web/src/components/ui/badge.tsx +48 -0
  878. package/web/src/components/ui/button.tsx +64 -0
  879. package/web/src/components/ui/card.tsx +92 -0
  880. package/web/src/components/ui/checkbox.tsx +32 -0
  881. package/web/src/components/ui/dialog.tsx +158 -0
  882. package/web/src/components/ui/dropdown-menu.tsx +255 -0
  883. package/web/src/components/ui/input.tsx +21 -0
  884. package/web/src/components/ui/label.tsx +22 -0
  885. package/web/src/components/ui/progress.tsx +29 -0
  886. package/web/src/components/ui/select.tsx +188 -0
  887. package/web/src/components/ui/separator.tsx +28 -0
  888. package/web/src/components/ui/sheet.tsx +123 -0
  889. package/web/src/components/ui/skeleton.tsx +13 -0
  890. package/web/src/components/ui/sonner.tsx +35 -0
  891. package/web/src/components/ui/table.tsx +116 -0
  892. package/web/src/components/ui/tabs.tsx +89 -0
  893. package/web/src/components/ui/textarea.tsx +18 -0
  894. package/web/src/components/ui/tooltip.tsx +57 -0
  895. package/web/src/components/whatsapp/ChatDetail.tsx +417 -0
  896. package/web/src/components/whatsapp/ChatHeader.tsx +78 -0
  897. package/web/src/components/whatsapp/ChatList.tsx +107 -0
  898. package/web/src/components/whatsapp/ChatListItem.tsx +60 -0
  899. package/web/src/components/whatsapp/MessageBubble.tsx +46 -0
  900. package/web/src/components/whatsapp/MessageInput.tsx +63 -0
  901. package/web/src/components/whatsapp/MessageStream.tsx +135 -0
  902. package/web/src/components/whatsapp/SessionDivider.tsx +65 -0
  903. package/web/src/components/whatsapp/SessionHistory.tsx +119 -0
  904. package/web/src/components/whatsapp/settings/AiSettingsTab.tsx +268 -0
  905. package/web/src/components/whatsapp/settings/CalendarTab.tsx +339 -0
  906. package/web/src/components/whatsapp/settings/ConnectionTab.tsx +236 -0
  907. package/web/src/components/whatsapp/settings/NotificationsTab.tsx +109 -0
  908. package/web/src/components/whatsapp/settings/OperatorTab.tsx +303 -0
  909. package/web/src/contexts/AuthContext.tsx +103 -0
  910. package/web/src/index.css +130 -0
  911. package/web/src/lib/api.ts +92 -0
  912. package/web/src/lib/utils.ts +6 -0
  913. package/web/src/main.tsx +10 -0
  914. package/web/src/pages/AppointmentDetail.tsx +206 -0
  915. package/web/src/pages/AppointmentValidation.tsx +157 -0
  916. package/web/src/pages/AppointmentValidationDetail.tsx +617 -0
  917. package/web/src/pages/AppointmentValidationNew.tsx +1005 -0
  918. package/web/src/pages/Appointments.tsx +283 -0
  919. package/web/src/pages/Billing.tsx +126 -0
  920. package/web/src/pages/CallDetail.tsx +293 -0
  921. package/web/src/pages/CallSettings.tsx +313 -0
  922. package/web/src/pages/Calls.tsx +188 -0
  923. package/web/src/pages/CampaignDetail.tsx +216 -0
  924. package/web/src/pages/CampaignNew.tsx +277 -0
  925. package/web/src/pages/CampaignResults.tsx +185 -0
  926. package/web/src/pages/Campaigns.tsx +171 -0
  927. package/web/src/pages/Dashboard.tsx +336 -0
  928. package/web/src/pages/InboundSchedule.tsx +246 -0
  929. package/web/src/pages/LeadDetail.tsx +183 -0
  930. package/web/src/pages/Leads.tsx +258 -0
  931. package/web/src/pages/Login.tsx +99 -0
  932. package/web/src/pages/Register.tsx +129 -0
  933. package/web/src/pages/Settings.tsx +133 -0
  934. package/web/src/pages/SurveyDetail.tsx +232 -0
  935. package/web/src/pages/SurveyPreview.tsx +179 -0
  936. package/web/src/pages/Surveys.tsx +207 -0
  937. package/web/src/pages/Users.tsx +199 -0
  938. package/web/src/pages/WhatsApp.tsx +147 -0
  939. package/web/src/pages/WhatsAppSettings.tsx +215 -0
  940. package/web/src/pages/admin/AdminBaileysMessageLog.tsx +331 -0
  941. package/web/src/pages/admin/AdminBaileysRawMessages.tsx +318 -0
  942. package/web/src/pages/admin/AdminConversationReview.tsx +116 -0
  943. package/web/src/pages/admin/AdminCredits.tsx +467 -0
  944. package/web/src/pages/admin/AdminElevenLabsAgentDetail.tsx +332 -0
  945. package/web/src/pages/admin/AdminElevenLabsAgents.tsx +164 -0
  946. package/web/src/pages/admin/AdminElevenLabsBatchCallDetail.tsx +214 -0
  947. package/web/src/pages/admin/AdminElevenLabsBatchCalls.tsx +293 -0
  948. package/web/src/pages/admin/AdminElevenLabsConversationDetail.tsx +230 -0
  949. package/web/src/pages/admin/AdminElevenLabsConversations.tsx +228 -0
  950. package/web/src/pages/admin/AdminElevenLabsInboundCalls.tsx +293 -0
  951. package/web/src/pages/admin/AdminElevenLabsPhoneNumbers.tsx +506 -0
  952. package/web/src/pages/admin/AdminElevenLabsTestChat.tsx +258 -0
  953. package/web/src/pages/admin/AdminElevenLabsWebhooks.tsx +289 -0
  954. package/web/src/pages/admin/AdminEvaluationDashboard.tsx +520 -0
  955. package/web/src/pages/admin/AdminLeads.tsx +339 -0
  956. package/web/src/pages/admin/AdminLogs.tsx +283 -0
  957. package/web/src/pages/admin/AdminMigrations.tsx +247 -0
  958. package/web/src/pages/admin/AdminPlans.tsx +313 -0
  959. package/web/src/pages/admin/AdminSystem.tsx +391 -0
  960. package/web/src/pages/admin/AdminTenantBillableItems.tsx +464 -0
  961. package/web/src/pages/admin/AdminTenantDetail.tsx +1317 -0
  962. package/web/src/pages/admin/AdminTenants.tsx +274 -0
  963. package/web/src/pages/admin/AdminWhatsApp.tsx +618 -0
  964. package/web/src/pages/admin/AdminWhatsAppTestChat.tsx +328 -0
  965. package/web/src/types/index.ts +242 -0
  966. package/web/tsconfig.app.json +32 -0
  967. package/web/tsconfig.json +13 -0
  968. package/web/tsconfig.node.json +26 -0
  969. package/web/vite.config.ts +23 -0
@@ -0,0 +1,786 @@
1
+ {
2
+ "common": {
3
+ "appName": "Portal Asistan 7/24",
4
+ "tagline": "Klinik Yönetim Platformu",
5
+ "save": "Kaydet",
6
+ "cancel": "İptal",
7
+ "delete": "Sil",
8
+ "edit": "Düzenle",
9
+ "create": "Oluştur",
10
+ "add": "Ekle",
11
+ "search": "Ara",
12
+ "filter": "Filtrele",
13
+ "export": "Dışa Aktar",
14
+ "import": "İçe Aktar",
15
+ "back": "Geri",
16
+ "next": "İleri",
17
+ "previous": "Önceki",
18
+ "close": "Kapat",
19
+ "confirm": "Onayla",
20
+ "yes": "Evet",
21
+ "no": "Hayır",
22
+ "loading": "Yükleniyor...",
23
+ "noResults": "Sonuç bulunamadı",
24
+ "hours": "saat",
25
+ "days": "gün",
26
+ "upload": "Yükle",
27
+ "all": "Tümü",
28
+ "active": "Aktif",
29
+ "inactive": "Pasif",
30
+ "status": "Durum",
31
+ "actions": "İşlemler",
32
+ "details": "Detaylar",
33
+ "settings": "Ayarlar",
34
+ "name": "Ad",
35
+ "email": "E-posta",
36
+ "phone": "Telefon",
37
+ "date": "Tarih",
38
+ "time": "Saat",
39
+ "notes": "Notlar",
40
+ "description": "Açıklama",
41
+ "type": "Tür",
42
+ "rows": "Satır",
43
+ "page": "Sayfa",
44
+ "of": "/",
45
+ "darkMode": "Karanlık Mod",
46
+ "lightMode": "Aydınlık Mod",
47
+ "language": "Dil"
48
+ },
49
+
50
+ "auth": {
51
+ "signIn": "Giriş Yap",
52
+ "signOut": "Çıkış Yap",
53
+ "email": "E-posta",
54
+ "password": "Şifre",
55
+ "emailPlaceholder": "kullanici@klinik.com",
56
+ "passwordPlaceholder": "Şifrenizi girin",
57
+ "forgotPassword": "Şifremi Unuttum",
58
+ "signingIn": "Giriş yapılıyor...",
59
+ "welcomeBack": "Tekrar hoş geldiniz!",
60
+ "invalidCredentials": "Geçersiz e-posta veya şifre",
61
+ "enterCredentials": "Panele erişmek için bilgilerinizi girin",
62
+ "passwordResetNotImplemented": "Şifre sıfırlama henüz uygulanmadı"
63
+ },
64
+
65
+ "validation": {
66
+ "required": "Bu alan zorunludur",
67
+ "emailRequired": "Geçerli bir e-posta adresi girin",
68
+ "passwordMin": "Şifre en az 6 karakter olmalıdır",
69
+ "nameRequired": "Ad alanı zorunludur"
70
+ },
71
+
72
+ "errors": {
73
+ "invalidCredentials": "Geçersiz e-posta veya şifre",
74
+ "accountDeactivated": "Hesabınız devre dışı bırakılmış",
75
+ "tooManyAttempts": "Çok fazla deneme yapıldı. Lütfen bekleyin ve tekrar deneyin.",
76
+ "serverError": "Sunucu hatası. Lütfen daha sonra tekrar deneyin.",
77
+ "networkError": "Sunucuya ulaşılamıyor. İnternet bağlantınızı kontrol edin.",
78
+ "unknownError": "Beklenmeyen bir hata oluştu"
79
+ },
80
+
81
+ "nav": {
82
+ "dashboard": "Panel",
83
+ "patients": "Hastalar",
84
+ "appointments": "Randevular",
85
+ "calendar": "Takvim",
86
+ "treatments": "Tedaviler",
87
+ "treatmentPlans": "Tedavi Planları",
88
+ "chats": "Mesajlar",
89
+ "calls": "Aramalar",
90
+ "leads": "Potansiyel Hastalar",
91
+ "campaigns": "Kampanyalar",
92
+ "validation": "Randevu Doğrulama",
93
+ "billing": "Faturalandırma",
94
+ "users": "Kullanıcılar",
95
+ "clinics": "Klinikler",
96
+ "agents": "AI Ajanlar",
97
+ "phoneNumbers": "Telefon Numaraları",
98
+ "connections": "Bağlantılar",
99
+ "calendarConnections": "Takvim Bağlantıları",
100
+ "settings": "Ayarlar",
101
+ "audit": "Denetim Kaydı",
102
+ "logs": "Sistem Kayıtları",
103
+ "platform": "Platform",
104
+ "aiPlayground": "AI Playground",
105
+ "adminPanel": "Yönetim Paneli"
106
+ },
107
+
108
+ "dashboard": {
109
+ "title": "Panel",
110
+ "description": "Bugünkü klinik aktivitesine genel bakış",
111
+ "totalPatients": "Toplam Hasta",
112
+ "todayAppointments": "Bugünkü Randevular",
113
+ "activeSessions": "Aktif AI Oturumları",
114
+ "openLeads": "Açık Potansiyeller",
115
+ "fromLastMonth": "geçen aya göre",
116
+ "vsYesterday": "düne göre",
117
+ "fromLastWeek": "geçen haftaya göre",
118
+ "completed": "tamamlandı",
119
+ "upcoming": "yaklaşan"
120
+ },
121
+
122
+ "patients": {
123
+ "title": "Hastalar",
124
+ "description": "Klinik hastalarını ve tıbbi kayıtlarını yönetin",
125
+ "newPatient": "Yeni Hasta",
126
+ "searchPatients": "Hasta ara...",
127
+ "firstName": "Ad",
128
+ "lastName": "Soyad",
129
+ "dateOfBirth": "Doğum Tarihi",
130
+ "gender": "Cinsiyet",
131
+ "male": "Erkek",
132
+ "female": "Kadın",
133
+ "other": "Diğer",
134
+ "bloodType": "Kan Grubu",
135
+ "idNumber": "TC Kimlik No",
136
+ "preferredLanguage": "Tercih Edilen Dil",
137
+ "source": "Kaynak",
138
+ "tags": "Etiketler",
139
+ "lastVisit": "Son Ziyaret",
140
+ "nextAppointment": "Sonraki Randevu",
141
+ "medicalHistory": "Tıbbi Geçmiş",
142
+ "anamnesis": "Anamnez",
143
+ "allergies": "Alerjiler",
144
+ "chronicConditions": "Kronik Hastalıklar",
145
+ "medications": "İlaçlar",
146
+ "pastSurgeries": "Geçmiş Ameliyatlar",
147
+ "smoking": "Sigara",
148
+ "alcohol": "Alkol",
149
+ "pregnancyStatus": "Gebelik Durumu",
150
+ "documents": "Belgeler",
151
+ "photoSets": "Fotoğraf Setleri",
152
+ "examinations": "Muayeneler",
153
+ "treatmentPlan": "Tedavi Planı",
154
+ "noPatients": "Henüz hasta kaydı yok",
155
+ "noPatientsDesc": "Başlamak için ilk hastanızı ekleyin.",
156
+ "noAppointments": "Randevu bulunamadı",
157
+ "deletePatient": "Hastayı Sil",
158
+ "deleteConfirm": "Bu hasta kaydı kalıcı olarak devre dışı bırakılacak. Bu işlem geri alınamaz.",
159
+ "viewProfile": "Profili Görüntüle",
160
+ "bookAppointment": "Randevu Al",
161
+ "sessions": "Oturumlar",
162
+ "appointments": "Randevular",
163
+ "lastContact": "Son İletişim",
164
+ "createSuccess": "Hasta başarıyla oluşturuldu",
165
+ "deleteSuccess": "Hasta başarıyla silindi",
166
+ "createError": "Hasta oluşturulamadı",
167
+ "phoneFormat": "Telefon E.164 formatında olmalı (ör. +905551234567)",
168
+ "tagsHelp": "Virgülle ayrılmış etiketler",
169
+ "sourceWhatsapp": "WhatsApp",
170
+ "sourceVoiceCall": "Sesli Arama",
171
+ "sourceInstagram": "Instagram",
172
+ "sourceWalkIn": "Yürüyerek Gelen",
173
+ "sourceReferral": "Referans",
174
+ "referredBy": "Referans Veren",
175
+ "referredByPlaceholder": "Yönlendiren kişi veya klinik adı",
176
+ "allClinics": "Tüm Klinikler",
177
+ "overview": "Genel Bakis",
178
+ "editPatient": "Hastayi Duzenle",
179
+ "editPatientDesc": "Hasta bilgilerini guncelleyin",
180
+ "aiSummary": "AI Ozeti",
181
+ "noAiSummary": "Bu hasta icin henuz AI ozeti bulunmuyor.",
182
+ "anamnesisIncomplete": "Bu hasta icin tibbi gecmis (anamnez) henuz tamamlanmadi.",
183
+ "completeAnamnesis": "Anamnezi Tamamla",
184
+ "addNote": "Not Ekle",
185
+ "notePlaceholder": "Bu hasta hakkinda bir not yazin...",
186
+ "noNotes": "Henuz not yok",
187
+ "noteCreated": "Not basariyla eklendi",
188
+ "noteDeleted": "Not basariyla silindi",
189
+ "deleteNote": "Notu Sil",
190
+ "deleteNoteConfirm": "Bu not kalici olarak silinecek. Bu islem geri alinamaz.",
191
+ "noDocuments": "Henuz belge yok",
192
+ "uploadDocument": "Belge Yukle",
193
+ "noPhotos": "Henuz fotograf yok",
194
+ "noExaminations": "Henuz muayene yok",
195
+ "comingSoon": "Bu ozellik yakinda kullanima sunulacak.",
196
+ "backToPatients": "Hastalara Don",
197
+ "updateSuccess": "Hasta basariyla guncellendi",
198
+ "updateError": "Hasta guncellenemedi",
199
+ "latestNotes": "Son",
200
+ "firstContact": "Ilk iletisim",
201
+ "fileSize": "Boyut",
202
+ "uploadSuccess": "Belge başarıyla yüklendi",
203
+ "uploadError": "Belge yüklenemedi",
204
+ "deleteDocSuccess": "Belge silindi",
205
+ "deleteDocument": "Belgeyi Sil",
206
+ "deleteDocConfirm": "Bu belge kalıcı olarak silinecektir.",
207
+ "uploadDocDesc": "Bu hasta için bir belge yükleyin.",
208
+ "selectFile": "Dosya",
209
+ "clickToUpload": "Dosya seçmek için tıklayın",
210
+ "docNotesPlaceholder": "Belge hakkında isteğe bağlı notlar...",
211
+ "docTypeConsent": "Onam Formu",
212
+ "docTypeLab": "Laboratuvar Sonucu",
213
+ "docTypeXray": "Röntgen",
214
+ "docTypePrescription": "Reçete",
215
+ "docTypeReferral": "Sevk",
216
+ "docTypeOther": "Diğer",
217
+ "viewDocument": "Belgeyi görüntüle",
218
+ "openInNewTab": "Yeni sekmede aç",
219
+ "previewNotSupported": "Bu dosya türü için önizleme mevcut değil.",
220
+ "downloadInstead": "Dosyayı indir",
221
+ "uploadedBy": "Yükleyen",
222
+ "editMedicalHistory": "Tıbbi Geçmişi Düzenle",
223
+ "editMedicalHistoryDesc": "Hastanın tıbbi geçmişini güncelleyin.",
224
+ "medicalHistoryUpdated": "Tıbbi geçmiş güncellendi",
225
+ "saveError": "Kaydetme başarısız",
226
+ "commaHint": "Virgülle ayırın",
227
+ "pregnancy_not_applicable": "Uygulanamaz",
228
+ "pregnancy_not_pregnant": "Hamile Değil",
229
+ "pregnancy_pregnant": "Hamile",
230
+ "pregnancy_breastfeeding": "Emziriyor",
231
+ "timeline": "Zaman Çizelgesi",
232
+ "noActivity": "Henüz aktivite kaydedilmemiş"
233
+ },
234
+
235
+ "examinations": {
236
+ "noExaminations": "Muayene kaydı bulunamadı",
237
+ "newExamination": "Yeni Muayene",
238
+ "newExamDesc": "Randevuya bağlı muayene kaydı oluşturun.",
239
+ "editExamination": "Muayeneyi Düzenle",
240
+ "editExamDesc": "Muayene detaylarını güncelleyin.",
241
+ "appointment": "Randevu",
242
+ "selectAppointment": "Randevu seçin",
243
+ "noAppointments": "Uygun randevu yok",
244
+ "appointmentOptional": "İsteğe bağlı — mevcut randevuya bağlayın veya boş bırakın.",
245
+ "findings": "Bulgular",
246
+ "diagnosis": "Teşhis",
247
+ "procedureNotes": "İşlem Notları",
248
+ "prescription": "Reçete",
249
+ "instructions": "Hasta Talimatları",
250
+ "noDetails": "Henüz detay kaydedilmemiş.",
251
+ "created": "Muayene kaydı oluşturuldu",
252
+ "updated": "Muayene kaydı güncellendi",
253
+ "saveError": "Muayene kaydedilemedi"
254
+ },
255
+
256
+ "appointments": {
257
+ "title": "Randevular",
258
+ "description": "Randevuları yönetin ve takviminizi planlayın",
259
+ "newAppointment": "Yeni Randevu",
260
+ "bookAppointment": "Randevu Al",
261
+ "searchAppointments": "Randevu ara...",
262
+ "patient": "Hasta",
263
+ "doctor": "Doktor",
264
+ "treatment": "Tedavi",
265
+ "clinic": "Klinik",
266
+ "startTime": "Başlangıç",
267
+ "endTime": "Bitiş",
268
+ "duration": "Süre",
269
+ "minutes": "dk",
270
+ "selectPatient": "Hasta seçin",
271
+ "selectDoctor": "Doktor seçin",
272
+ "selectTreatment": "Tedavi seçin",
273
+ "selectClinic": "Klinik seçin",
274
+ "selectType": "Tür seçin",
275
+ "noAppointments": "Randevu bulunamadı",
276
+ "noAppointmentsToday": "Bugün randevu yok",
277
+ "noAppointmentsDesc": "Bugün için planlanmış randevu bulunmuyor. Yeni randevu oluşturun veya başka bir tarih kontrol edin.",
278
+ "noAppointmentsFilterDesc": "Seçili filtrelere uygun randevu bulunamadı.",
279
+ "cancelAppointment": "Randevuyu İptal Et",
280
+ "cancelConfirm": "Hasta iptal hakkında bilgilendirilecektir.",
281
+ "cancelReason": "Sebep",
282
+ "cancelReasonPlaceholder": "Bu randevu neden iptal ediliyor?",
283
+ "availability": "Müsaitlik",
284
+ "checkAvailability": "Müsaitlik Kontrol Et",
285
+ "todayAppts": "Bugün",
286
+ "upcoming": "Yaklaşan",
287
+ "allStatuses": "Tüm Durumlar",
288
+ "allDoctors": "Tüm Doktorlar",
289
+ "from": "Başlangıç",
290
+ "to": "Bitiş",
291
+ "createSuccess": "Randevu başarıyla oluşturuldu",
292
+ "createError": "Randevu oluşturulamadı",
293
+ "statusUpdateSuccess": "Randevu durumu güncellendi",
294
+ "statusUpdateError": "Durum güncellenemedi",
295
+ "cancelSuccess": "Randevu iptal edildi",
296
+ "notesPlaceholder": "Randevu hakkında isteğe bağlı notlar...",
297
+ "typeAppointment": "Randevu",
298
+ "typeWalkIn": "Yürüyerek Gelen",
299
+ "typeFollowUp": "Kontrol",
300
+ "typeConsultation": "Konsültasyon",
301
+ "action_confirmed": "Onayla",
302
+ "action_in_progress": "Başlat",
303
+ "action_completed": "Tamamla",
304
+ "action_cancelled": "İptal Et",
305
+ "action_no_show": "Gelmedi",
306
+ "slotsAvailable": "müsait",
307
+ "slotsBooked": "dolu",
308
+ "noSlotsConfigured": "Bu gün için çalışma saati tanımlanmamış.",
309
+ "checkAvailabilityDesc": "Müsait slotları görmek için tarih ve doktor seçin.",
310
+ "selectDateToCheck": "Müsaitliği kontrol etmek için tarih seçin."
311
+ },
312
+
313
+ "treatments": {
314
+ "title": "Tedaviler",
315
+ "description": "Klinik tedavi kataloğunu yönetin",
316
+ "newTreatment": "Yeni Tedavi",
317
+ "editTreatment": "Tedaviyi Düzenle",
318
+ "deleteTreatment": "Tedaviyi Sil",
319
+ "deleteConfirm": "Bu tedavi devre dışı bırakılacaktır.",
320
+ "noTreatments": "Tedavi bulunamadı",
321
+ "category": "Kategori",
322
+ "categoryPlaceholder": "örn. Restoratif, Ortodonti",
323
+ "price": "Fiyat",
324
+ "durationMinutes": "Süre (dk)",
325
+ "recallDays": "Hatırlatma (gün)",
326
+ "createSuccess": "Tedavi oluşturuldu",
327
+ "updateSuccess": "Tedavi güncellendi",
328
+ "deleteSuccess": "Tedavi silindi",
329
+ "deleteError": "Tedavi silinemedi",
330
+ "saveError": "Tedavi kaydedilemedi",
331
+ "plans": "Tedavi Planları",
332
+ "planName": "Plan Adı",
333
+ "planNamePlaceholder": "örn. Tam ağız restorasyonu",
334
+ "planDesc": "Bu hasta için tedavi planı oluşturun.",
335
+ "planItems": "Plan Kalemleri",
336
+ "toothNumber": "Diş No",
337
+ "addItem": "Kalem Ekle",
338
+ "addItemDesc": "Bu tedavi planına kalem ekleyin.",
339
+ "newPlan": "Yeni Plan",
340
+ "noPlans": "Tedavi planı bulunamadı",
341
+ "noItems": "Bu planda henüz kalem yok.",
342
+ "planCreated": "Tedavi planı oluşturuldu",
343
+ "planDeleted": "Tedavi planı silindi",
344
+ "itemAdded": "Kalem eklendi",
345
+ "itemUpdated": "Kalem güncellendi",
346
+ "itemRemoved": "Kalem kaldırıldı"
347
+ },
348
+
349
+ "chats": {
350
+ "title": "Mesajlar",
351
+ "description": "WhatsApp ve Instagram konuşmalarını yönetin",
352
+ "noChats": "Aktif konuşma yok",
353
+ "noMessages": "Henüz mesaj yok",
354
+ "searchChats": "Konuşma ara...",
355
+ "allChats": "Tüm Konuşmalar",
356
+ "selectChat": "Bir konuşma seçin",
357
+ "typeMessage": "Mesaj yazın...",
358
+ "sendMessage": "Gönder",
359
+ "sendError": "Mesaj gönderilemedi",
360
+ "takeover": "Devral",
361
+ "takenOver": "Oturum devralındı",
362
+ "release": "Serbest Bırak",
363
+ "released": "Oturum AI'ya bırakıldı",
364
+ "resolve": "Çöz",
365
+ "resolved_msg": "Oturum çözüldü",
366
+ "blacklist": "Kara Liste",
367
+ "ai": "AI",
368
+ "human": "İnsan",
369
+ "status_active": "Aktif",
370
+ "status_waiting": "Bekliyor",
371
+ "status_resolved": "Çözüldü",
372
+ "unassigned_label": "Atanmamış",
373
+ "chatAssigned": "Konuşma atandı",
374
+ "chatUnassigned": "Atama kaldırıldı",
375
+ "assignError": "Atama başarısız",
376
+ "waConnected": "WhatsApp bağlı",
377
+ "waNotConnected": "WhatsApp bağlı değil"
378
+ },
379
+
380
+ "calls": {
381
+ "title": "Aramalar",
382
+ "description": "Sesli arama kayıtlarını ve transkriptleri görüntüleyin",
383
+ "inbound": "Gelen",
384
+ "outbound": "Giden",
385
+ "duration": "Süre",
386
+ "transcript": "Transkript",
387
+ "summary": "Özet"
388
+ },
389
+
390
+ "leads": {
391
+ "title": "Potansiyel Hastalar",
392
+ "description": "AI tarafından oluşturulan potansiyel hastaları takip edin",
393
+ "newLead": "Yeni",
394
+ "contacted": "İletişime Geçildi",
395
+ "appointmentScheduled": "Randevu Alındı",
396
+ "completed": "Tamamlandı",
397
+ "lost": "Kayıp",
398
+ "expired": "Süresi Doldu",
399
+ "serviceOfInterest": "İlgilenilen Hizmet",
400
+ "today": "Bugünkü Potansiyeller"
401
+ },
402
+
403
+ "billing": {
404
+ "title": "Faturalandırma",
405
+ "description": "Kullanım ve abonelik yönetimi",
406
+ "usage": "Kullanım",
407
+ "plan": "Plan",
408
+ "inboundMinutes": "Gelen Arama Dakikası",
409
+ "inboundCalls": "Gelen Arama Sayısı",
410
+ "waChats": "WhatsApp Sohbet",
411
+ "included": "Dahil",
412
+ "used": "Kullanılan",
413
+ "remaining": "Kalan"
414
+ },
415
+
416
+ "users": {
417
+ "title": "Kullanıcılar",
418
+ "description": "Personeli ve rol atamalarını yönetin",
419
+ "inviteUser": "Kullanıcı Davet Et",
420
+ "inviteDesc": "Yeni personel hesabı oluşturun.",
421
+ "inviteSuccess": "Kullanıcı başarıyla davet edildi",
422
+ "inviteError": "Kullanıcı davet edilemedi",
423
+ "editUser": "Kullanıcıyı Düzenle",
424
+ "updateSuccess": "Kullanıcı güncellendi",
425
+ "updateError": "Kullanıcı güncellenemedi",
426
+ "noUsers": "Kullanıcı bulunamadı",
427
+ "role": "Rol",
428
+ "roles": {
429
+ "owner": "Sahip",
430
+ "admin": "Yönetici",
431
+ "doctor": "Doktor",
432
+ "receptionist": "Resepsiyon",
433
+ "superadmin": "Süper Yönetici",
434
+ "sales": "Satış"
435
+ },
436
+ "clinicAssignments": "Klinikler",
437
+ "lastLogin": "Son Giriş",
438
+ "password": "Şifre",
439
+ "passwordMin": "En az 6 karakter",
440
+ "deactivate": "Devre Dışı Bırak",
441
+ "deactivateConfirm": "Bu kullanıcı artık giriş yapamayacak.",
442
+ "deactivated": "Kullanıcı devre dışı bırakıldı",
443
+ "deleteError": "Kullanıcı devre dışı bırakılamadı",
444
+ "customPermissions": "İzinler",
445
+ "permissionsHint": "Özelleştirildiğinde rol varsayılanlarının yerini alır. Sıfırlayarak rol varsayılanlarını kullanın.",
446
+ "resetToDefaults": "Rol varsayılanlarına sıfırla",
447
+ "doctorProfile": "Doktor Profili",
448
+ "profileUpdated": "Doktor profili güncellendi",
449
+ "profileError": "Profil güncellenemedi",
450
+ "title": "Unvan",
451
+ "specialty": "Uzmanlık",
452
+ "specialtyPlaceholder": "örn. Ortodonti, Genel Diş Hekimliği",
453
+ "bio": "Biyografi",
454
+ "apptDuration": "Randevu Süresi (dk)",
455
+ "calendarColor": "Takvim Rengi",
456
+ "accepting": "Kabul Ediyor",
457
+ "workingHours": "Çalışma Saatleri",
458
+ "break": "Mola",
459
+ "workHours": "Saat",
460
+ "slotDur": "Seans",
461
+ "blockedDates": "Tatiller / Kapalı Günler",
462
+ "noBlockedDates": "Tatil günü ayarlanmamış",
463
+ "profileInfo": "Profil Bilgileri",
464
+ "userInfo": "Kullanıcı Bilgileri",
465
+ "preferences": "Tercihler",
466
+ "apptDurationHint": "Varsayılan randevu süresi",
467
+ "acceptingPatients": "Hasta kabul ediyor",
468
+ "notAccepting": "Hasta kabul etmiyor",
469
+ "acceptingHint": "Hasta kabulünü aç/kapat",
470
+ "daysActive": "gün aktif",
471
+ "dayOff": "Tatil",
472
+ "mySchedule": "Programım"
473
+ },
474
+
475
+ "blocks": {
476
+ "title": "Tatiller ve Müsait Olmayan Zamanlar",
477
+ "titlePlaceholder": "örn. Yıllık İzin, Resmi Tatil",
478
+ "created": "Blok eklendi",
479
+ "createError": "Blok eklenemedi",
480
+ "deleted": "Blok kaldırıldı",
481
+ "deleteError": "Blok kaldırılamadı",
482
+ "noBlocks": "Tatil veya kapalı gün ayarlanmamış",
483
+ "clinicHolidays": "Klinik Tatilleri",
484
+ "allDay": "Tüm gün",
485
+ "yearly": "Yıllık",
486
+ "type_holiday": "Tatil",
487
+ "type_leave": "İzin",
488
+ "type_break_time": "Mola",
489
+ "type_other": "Diğer"
490
+ },
491
+
492
+ "days": {
493
+ "monday": "Pazartesi",
494
+ "tuesday": "Salı",
495
+ "wednesday": "Çarşamba",
496
+ "thursday": "Perşembe",
497
+ "friday": "Cuma",
498
+ "saturday": "Cumartesi",
499
+ "sunday": "Pazar"
500
+ },
501
+
502
+ "clinics": {
503
+ "title": "Klinikler",
504
+ "description": "Klinik şubelerini ve ayarlarını yönetin",
505
+ "newClinic": "Yeni Klinik",
506
+ "address": "Adres",
507
+ "timezone": "Saat Dilimi",
508
+ "language": "Dil",
509
+ "aiProvider": "AI Sağlayıcı",
510
+ "gracePeriod": "Bekleme Süresi",
511
+ "operatorPhone": "Operatör Telefonu",
512
+ "smsEnabled": "SMS Aktif",
513
+ "messageRetention": "Mesaj Saklama",
514
+ "noClinics": "Klinik bulunamadı",
515
+ "newClinicDesc": "Yeni klinik şubesi oluşturun.",
516
+ "namePlaceholder": "örn. Ana Şube",
517
+ "slug": "Kısa Ad",
518
+ "default": "Varsayılan",
519
+ "patients": "hasta",
520
+ "appointments": "randevu",
521
+ "settings": "Ayarlar",
522
+ "general": "Genel",
523
+ "aiOperator": "AI ve Operatör",
524
+ "dataSettings": "Veri ve Gizlilik",
525
+ "operatorPrefix": "REF Ön Eki",
526
+ "operatorTimeout": "Operatör Zaman Aşımı",
527
+ "createSuccess": "Klinik oluşturuldu",
528
+ "createError": "Klinik oluşturulamadı",
529
+ "updateSuccess": "Klinik güncellendi",
530
+ "updateError": "Klinik güncellenemedi",
531
+ "metaConnections": "Meta Bağlantıları (WhatsApp / Instagram)",
532
+ "noMetaConnections": "Bağlantı yapılandırılmamış",
533
+ "connectionLabel": "Etiket",
534
+ "connectionLabelPlaceholder": "örn. Ana WhatsApp",
535
+ "connect": "Bağla",
536
+ "disconnect": "Bağlantıyı Kes",
537
+ "metaConnected": "Bağlantı eklendi",
538
+ "metaDisconnected": "Bağlantı kaldırıldı",
539
+ "metaError": "Bağlantı başarısız",
540
+ "igDesc": "Instagram Business hesabınızı bağlayarak DM'leri yönetin.",
541
+ "connectInstagram": "Instagram Bağla",
542
+ "igConnected": "Instagram başarıyla bağlandı",
543
+ "disconnect": "Bağlantıyı Kes",
544
+ "connectGoogle": "Google Takvim Bağla",
545
+ "googleNotConnected": "Google Takvim bağlı değil.",
546
+ "googleDisconnected": "Google Takvim bağlantısı kesildi",
547
+ "googleError": "Google Takvim hatası"
548
+ },
549
+
550
+ "photos": {
551
+ "noSets": "Fotoğraf seti bulunamadı",
552
+ "noPhotos": "Bu sette fotoğraf yok",
553
+ "newSet": "Yeni Fotoğraf Seti",
554
+ "newSetDesc": "Hasta fotoğraflarını düzenlemek için set oluşturun.",
555
+ "photos": "fotoğraf",
556
+ "label": "Etiket",
557
+ "labelPlaceholder": "örn. Ameliyat öncesi ön görünüm",
558
+ "setCreated": "Fotoğraf seti oluşturuldu",
559
+ "setDeleted": "Fotoğraf seti silindi",
560
+ "uploadPhoto": "Fotoğraf Yükle",
561
+ "uploadPhotoDesc": "Bu sete fotoğraf ekleyin.",
562
+ "photoUploaded": "Fotoğraf yüklendi",
563
+ "photoDeleted": "Fotoğraf silindi",
564
+ "deleteError": "Silme başarısız",
565
+ "saveError": "Kaydetme başarısız",
566
+ "selectFile": "Lütfen bir dosya seçin",
567
+ "clickToSelect": "Fotoğraf seçmek için tıklayın",
568
+ "angle": "Açı",
569
+ "caption": "Açıklama",
570
+ "captionPlaceholder": "örn. Ön görünüm, ağız kapalı",
571
+ "type_before": "Önce",
572
+ "type_after": "Sonra",
573
+ "type_progress": "İlerleme",
574
+ "type_consultation": "Konsültasyon",
575
+ "type_other": "Diğer",
576
+ "angle_front": "Ön",
577
+ "angle_left": "Sol",
578
+ "angle_right": "Sağ",
579
+ "angle_closeup": "Yakın Çekim",
580
+ "angle_other": "Diğer"
581
+ },
582
+
583
+ "agents": {
584
+ "title": "AI Ajanlar",
585
+ "description": "AI ajanlarini yonetin, yapilandirin ve test edin.",
586
+ "create": "Ajan Olustur",
587
+ "createDesc": "Yeni bir AI ajan yapilandirmasi olusturun.",
588
+ "created": "Ajan olusturuldu",
589
+ "createError": "Ajan olusturulamadi",
590
+ "noAgents": "Henuz ajan tanimlanmamis",
591
+ "inactive": "Pasif Ajanlar",
592
+ "tenantWide": "Tum klinikler",
593
+ "namePlaceholder": "orn. Resepsiyon Ajani",
594
+ "descriptionPlaceholder": "Ajanin gorevini kisa aciklayin",
595
+ "description": "Aciklama",
596
+ "language": "Dil",
597
+ "aiProvider": "AI Saglayici",
598
+ "defaultProvider": "Varsayilan",
599
+ "systemPrompt": "Sistem Promptu",
600
+ "systemPromptPlaceholder": "Ajanin davranisini tanimlayan talimatlar...",
601
+ "updated": "Ajan guncellendi",
602
+ "updateError": "Ajan guncellenemedi",
603
+ "importEL": "ElevenLabs'tan Aktar",
604
+ "importELDesc": "ElevenLabs hesabinizdaki ajanlari iceri aktarin.",
605
+ "import": "Aktar",
606
+ "imported": "Ajan basariyla aktarildi",
607
+ "noELAgents": "ElevenLabs hesabinda ajan bulunamadi",
608
+ "alreadyLinked": "Zaten bagli"
609
+ },
610
+
611
+ "phoneNumbers": {
612
+ "title": "Telefon Numaraları",
613
+ "description": "WhatsApp ve sesli arama için telefon numaralarını yönetin",
614
+ "addNumber": "Numara Ekle",
615
+ "addDesc": "Yeni bir telefon numarası kaydedin.",
616
+ "noNumbers": "Kayıtlı telefon numarası yok",
617
+ "number": "Numara",
618
+ "label": "Etiket",
619
+ "labelPlaceholder": "örn. Ana Hat, Resepsiyon",
620
+ "purpose": "Amaç",
621
+ "provider": "Sağlayıcı",
622
+ "clinic": "Klinik",
623
+ "schedule": "Program",
624
+ "purpose_whatsapp": "WhatsApp",
625
+ "purpose_inbound_call": "Gelen Arama",
626
+ "purpose_outbound_call": "Giden Arama",
627
+ "invalidFormat": "E.164 formatında olmalı (örn. +905551234567)",
628
+ "editSchedule": "AI Aktif Saatleri",
629
+ "scheduleEnabled": "AI aktif saatleri etkin",
630
+ "scheduleUpdated": "Program güncellendi",
631
+ "scheduleError": "Program güncellenemedi",
632
+ "created": "Telefon numarası oluşturuldu",
633
+ "createError": "Telefon numarası oluşturulamadı",
634
+ "deleted": "Telefon numarası silindi",
635
+ "whatsappOnly": "WhatsApp mesajlaşma hizmeti bu numaralar üzerinden yönetilir.",
636
+ "waConnection": "WhatsApp Bağlantısı",
637
+ "connected": "Bağlı",
638
+ "notConnected": "Bağlı değil",
639
+ "updated": "Telefon numarası güncellendi",
640
+ "updateError": "Güncelleme başarısız",
641
+ "deleteError": "Silme başarısız",
642
+ "deleteNumber": "Numarayı Sil",
643
+ "deleteConfirm": "Emin misiniz? Bu işlem geri alınamaz.",
644
+ "mode_active_hours": "AI belirtilen saatlerde aktif",
645
+ "mode_off_hours": "AI belirtilen saatlerde kapalı",
646
+ "mode_active_hours_hint": "AI asistanı yalnızca aşağıdaki saatlerde yanıt verir.",
647
+ "mode_off_hours_hint": "AI asistanı 7/24 yanıt verir, aşağıdaki saatler hariç.",
648
+ "waSetup": "WhatsApp Bağlantısı",
649
+ "waSetupDesc": "Bu numarayı Meta Business hesabınız üzerinden WhatsApp Business API'ye bağlayın.",
650
+ "waOAuthHint": "Yetkilendirme için Meta'ya yönlendirileceksiniz.",
651
+ "waConnectedDesc": "Bu numara WhatsApp Business API'ye bağlı ve mesaj alıyor.",
652
+ "connectWa": "WhatsApp Bağla",
653
+ "waConnected": "WhatsApp başarıyla bağlandı",
654
+ "waConnectError": "WhatsApp bağlantısı başarısız",
655
+ "waError_denied": "Meta yetkilendirmesi reddedildi",
656
+ "waError_missing_params": "Bağlantı parametreleri eksik, lütfen tekrar deneyin",
657
+ "waError_invalid_state": "Güvenlik doğrulaması başarısız, lütfen tekrar deneyin",
658
+ "waError_token_exchange_failed": "Meta token alınamadı, lütfen tekrar deneyin",
659
+ "waError_phone_not_found": "Telefon numarası bulunamadı",
660
+ "waError_no_clinic": "Bu numara için bağlanacak klinik bulunamadı",
661
+ "waError_connection_failed": "Bağlantı başarısız, lütfen tekrar deneyin",
662
+ "connectedSince": "Bağlantı tarihi"
663
+ },
664
+
665
+ "connections": {
666
+ "title": "Meta Bağlantıları",
667
+ "description": "WhatsApp ve Instagram hesaplarınızı Meta Business API ile bağlayın.",
668
+ "clinic": "Klinik",
669
+ "selectClinic": "Klinik seçin",
670
+ "selectClinicFirst": "Önce bir klinik seçin",
671
+ "connectWhatsApp": "WhatsApp Bağla",
672
+ "connectInstagram": "Instagram Bağla",
673
+ "connectError": "Bağlantı başarısız",
674
+ "noConnections": "Henüz bağlantı yok",
675
+ "noConnectionsDesc": "WhatsApp veya Instagram hesabınızı bağlayarak mesajları yönetmeye başlayın.",
676
+ "disconnected": "Bağlantı kaldırıldı",
677
+ "disconnectError": "Bağlantı kaldırılamadı",
678
+ "waConnected": "WhatsApp başarıyla bağlandı",
679
+ "igConnected": "Instagram başarıyla bağlandı",
680
+ "tokenHealthy": "Sağlıklı",
681
+ "tokenExpiring": "Süresi dolacak",
682
+ "tokenExpired": "Süresi doldu",
683
+ "error_denied": "Meta yetkilendirmesi reddedildi",
684
+ "error_missing_params": "Parametreler eksik, tekrar deneyin",
685
+ "error_invalid_state": "Güvenlik doğrulaması başarısız",
686
+ "error_token_exchange_failed": "Meta token alınamadı",
687
+ "error_no_instagram_account": "Instagram Business hesabı bulunamadı",
688
+ "error_connection_failed": "Bağlantı başarısız, tekrar deneyin"
689
+ },
690
+
691
+ "calendarConnections": {
692
+ "title": "Takvim Bağlantıları",
693
+ "description": "Doktorların Google Takvim bağlantılarını yönetin.",
694
+ "noDoctors": "Aktif doktor bulunamadı",
695
+ "connected": "Bağlı",
696
+ "notConnected": "Bağlı değil",
697
+ "connect": "Google Takvim Bağla",
698
+ "disconnect": "Bağlantıyı Kes",
699
+ "disconnected": "Google Takvim bağlantısı kaldırıldı",
700
+ "connectError": "Bağlantı başarısız",
701
+ "disconnectError": "Bağlantı kaldırılamadı",
702
+ "changeCalendar": "Takvim Değiştir",
703
+ "selectCalendar": "Takvim seçin",
704
+ "calendarSelected": "Takvim seçildi",
705
+ "calendarError": "Takvim işlemi başarısız"
706
+ },
707
+
708
+ "settings": {
709
+ "title": "Ayarlar",
710
+ "description": "Hesabınızı yönetin",
711
+ "profile": "Profil",
712
+ "changePassword": "Şifre Değiştir",
713
+ "currentPassword": "Mevcut Şifre",
714
+ "newPassword": "Yeni Şifre",
715
+ "confirmPassword": "Yeni Şifre (tekrar)",
716
+ "passwordMin": "Şifre en az 6 karakter olmalı",
717
+ "passwordMismatch": "Şifreler eşleşmiyor",
718
+ "passwordChanged": "Şifre başarıyla değiştirildi",
719
+ "passwordError": "Şifre değiştirilemedi"
720
+ },
721
+
722
+ "gcal": {
723
+ "connect": "Google Takvim Bağla",
724
+ "notConnected": "Google Takvim bağlı değil. Randevularınızı senkronize etmek için bağlayın.",
725
+ "changeCalendar": "Takvim Değiştir",
726
+ "selectCalendar": "Senkronize edilecek takvimi seçin",
727
+ "calendarSelected": "Takvim seçildi"
728
+ },
729
+
730
+ "platform": {
731
+ "title": "Platform Yönetimi",
732
+ "description": "Kiracıları, planları ve kaynak limitlerini yönetin",
733
+ "searchTenants": "Kiracı ara...",
734
+ "noTenants": "Kiracı bulunamadı",
735
+ "tenant": "Kiracı",
736
+ "plan": "Plan",
737
+ "usage": "Kullanım",
738
+ "limits": "Limitler",
739
+ "editLimits": "Bu kiracı için kaynak limitlerini yapılandırın.",
740
+ "maxClinics": "Maks Klinik",
741
+ "maxUsers": "Maks Kullanıcı",
742
+ "maxDoctors": "Maks Doktor",
743
+ "maxPatients": "Maks Hasta",
744
+ "currentUsage": "Mevcut kullanım",
745
+ "created": "Oluşturulma",
746
+ "tenantUpdated": "Kiracı güncellendi",
747
+ "updateError": "Kiracı güncellenemedi",
748
+ "newTenant": "Yeni Kiracı",
749
+ "newTenantDesc": "Sahip hesabıyla yeni kiracı oluşturun.",
750
+ "tenantName": "Kiracı Adı",
751
+ "tenantNamePlaceholder": "örn. Klinik Dental İstanbul",
752
+ "ownerFirstName": "Sahip Adı",
753
+ "ownerLastName": "Sahip Soyadı",
754
+ "ownerEmail": "Sahip E-posta",
755
+ "ownerPassword": "Sahip Şifre",
756
+ "tenantCreated": "Kiracı oluşturuldu",
757
+ "createError": "Kiracı oluşturulamadı"
758
+ },
759
+
760
+ "status": {
761
+ "scheduled": "Planlandı",
762
+ "confirmed": "Onaylandı",
763
+ "in_progress": "Devam Ediyor",
764
+ "completed": "Tamamlandı",
765
+ "cancelled": "İptal Edildi",
766
+ "no_show": "Gelmedi",
767
+ "active": "Aktif",
768
+ "waiting": "Bekliyor",
769
+ "resolved": "Çözüldü",
770
+ "new_lead": "Yeni",
771
+ "contacted": "İletişime Geçildi",
772
+ "appointment_scheduled": "Randevu Alındı",
773
+ "lost": "Kayıp",
774
+ "expired": "Süresi Doldu",
775
+ "pending": "Beklemede",
776
+ "responded": "Yanıtlandı",
777
+ "draft": "Taslak",
778
+ "running": "Çalışıyor",
779
+ "paused": "Duraklatıldı",
780
+ "submitted": "Gönderildi",
781
+ "failed": "Başarısız",
782
+ "no_answer": "Cevap Yok",
783
+ "voicemail": "Sesli Mesaj",
784
+ "planned": "Planlandı"
785
+ }
786
+ }