Refactor code structure for improved readability and maintainability

This commit is contained in:
hamed
2026-07-23 15:47:17 +03:30
parent a0a2eb1799
commit f00ed23f00
14 changed files with 1406 additions and 1351 deletions
+3
View File
@@ -72,6 +72,8 @@ export function usePayments(filters: PaymentFilters) {
return useQuery<PaginatedResponse<PaymentRow>>({
queryKey: ['payments', filters],
queryFn: () => api.get(`/api/v1/my/billing/payments?${qs.toString()}`),
// ورود دوباره به صفحه همیشه داده را تازه می‌کند (پرداخت‌ها لحظه‌ای عوض می‌شوند).
refetchOnMount: 'always',
});
}
@@ -93,6 +95,7 @@ export function usePaymentsSummary(filters: Omit<PaymentFilters, 'page'>) {
return useQuery<ApiResponse<PaymentsSummary>>({
queryKey: ['payments-summary', filters],
queryFn: () => api.get(`/api/v1/my/billing/payments/summary?${qs.toString()}`),
refetchOnMount: 'always',
});
}
+3 -1
View File
@@ -324,7 +324,7 @@
| param | توضیح |
|-------|-------|
| `national_code` | جست‌وجوی جزئی روی کد ملی بیمار (`LIKE`) |
| `national_code` | جست‌وجوی جزئی روی کد ملی بیمار (`LIKE`) — روی `profiles.national_code` و در نبود آن `users.national_code` |
| `status` | وضعیت **مشتق‌شده‌ی** پرداخت: `paid` · `partial` · `unsettled` |
| `from` / `to` | بازه‌ی `issued_at` بر حسب ثانیه‌ی Unix |
| `page` / `limit` | صفحه‌بندی (پیش‌فرض ۱ / ۲۰، سقف ۱۰۰) |
@@ -343,6 +343,8 @@
```
> `amount_rials` = سهم بیمار (`patient_rials`) همان صورتحساب · `paid_rials` = مجموع پرداخت‌های ثبت‌شده‌ی مراجعه‌ی متناظر.
>
> `national_code` از `profiles.national_code` خوانده می‌شود (منبعِ اصلیِ کد ملی؛ بیمارِ ساخته‌شده در نوبت‌دهی کد ملی را آنجا دارد نه روی `users`)، و در نبودِ آن به `users.national_code` برمی‌گردد.
>
> **وضعیت پرداخت مشتق است، ذخیره نمی‌شود.** ستون `invoices.status` فقط چرخه‌ی حیات صورتحساب را نگه می‌دارد (`draft` → `finalized` → `void`) و هرگز `paid` نمی‌شود؛ پول واقعی در `session_payments` ثبت می‌شود. قاعده در `App\Billing\Service\InvoicePaymentStatus` است:
> | حالت | شرط |
> |------|-----|
+1 -21
View File
@@ -982,37 +982,25 @@
"980": "Community 980",
"981": "Community 981",
"982": "Community 982",
"983": "Community 983",
"984": "Community 984",
"985": "Community 985",
"986": "Community 986",
"987": "Community 987",
"988": "Community 988",
"989": "Community 989",
"990": "Community 990",
"991": "Community 991",
"992": "Community 992",
"993": "Community 993",
"994": "Community 994",
"995": "Community 995",
"996": "Community 996",
"997": "Community 997",
"998": "Community 998",
"999": "Community 999",
"1000": "Community 1000",
"1001": "Community 1001",
"1002": "Community 1002",
"1003": "Community 1003",
"1004": "Community 1004",
"1005": "Community 1005",
"1006": "Community 1006",
"1007": "Community 1007",
"1008": "Community 1008",
"1009": "Community 1009",
"1010": "Community 1010",
"1011": "Community 1011",
"1012": "Community 1012",
"1013": "Community 1013",
"1014": "Community 1014",
"1015": "Community 1015",
"1016": "Community 1016",
@@ -1020,15 +1008,7 @@
"1018": "Community 1018",
"1019": "Community 1019",
"1020": "Community 1020",
"1021": "Community 1021",
"1022": "Community 1022",
"1023": "Community 1023",
"1024": "Community 1024",
"1025": "Community 1025",
"1026": "Community 1026",
"1027": "Community 1027",
"1028": "Community 1028",
"1029": "Community 1029",
"1030": "Community 1030",
"1031": "Community 1031"
"1027": "Community 1027"
}
+134 -230
View File
@@ -1,16 +1,16 @@
# Graph Report - clinicpro (2026-07-23)
## Corpus Check
- 1194 files · ~855,047 words
- 1194 files · ~855,289 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 13967 nodes · 21802 edges · 1032 communities (793 shown, 239 thin omitted)
- 13969 nodes · 21811 edges · 1012 communities (774 shown, 238 thin omitted)
- Extraction: 98% EXTRACTED · 2% INFERRED · 0% AMBIGUOUS · INFERRED: 465 edges (avg confidence: 0.8)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `1d1c3d5f`
- Built from commit: `a0a2eb17`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@@ -981,36 +981,24 @@
- [[_COMMUNITY_Community 980|Community 980]]
- [[_COMMUNITY_Community 981|Community 981]]
- [[_COMMUNITY_Community 982|Community 982]]
- [[_COMMUNITY_Community 983|Community 983]]
- [[_COMMUNITY_Community 985|Community 985]]
- [[_COMMUNITY_Community 986|Community 986]]
- [[_COMMUNITY_Community 987|Community 987]]
- [[_COMMUNITY_Community 988|Community 988]]
- [[_COMMUNITY_Community 989|Community 989]]
- [[_COMMUNITY_Community 990|Community 990]]
- [[_COMMUNITY_Community 991|Community 991]]
- [[_COMMUNITY_Community 992|Community 992]]
- [[_COMMUNITY_Community 993|Community 993]]
- [[_COMMUNITY_Community 994|Community 994]]
- [[_COMMUNITY_Community 995|Community 995]]
- [[_COMMUNITY_Community 996|Community 996]]
- [[_COMMUNITY_Community 997|Community 997]]
- [[_COMMUNITY_Community 998|Community 998]]
- [[_COMMUNITY_Community 999|Community 999]]
- [[_COMMUNITY_Community 1000|Community 1000]]
- [[_COMMUNITY_Community 1001|Community 1001]]
- [[_COMMUNITY_Community 1002|Community 1002]]
- [[_COMMUNITY_Community 1003|Community 1003]]
- [[_COMMUNITY_Community 1004|Community 1004]]
- [[_COMMUNITY_Community 1005|Community 1005]]
- [[_COMMUNITY_Community 1006|Community 1006]]
- [[_COMMUNITY_Community 1007|Community 1007]]
- [[_COMMUNITY_Community 1008|Community 1008]]
- [[_COMMUNITY_Community 1009|Community 1009]]
- [[_COMMUNITY_Community 1010|Community 1010]]
- [[_COMMUNITY_Community 1011|Community 1011]]
- [[_COMMUNITY_Community 1012|Community 1012]]
- [[_COMMUNITY_Community 1013|Community 1013]]
- [[_COMMUNITY_Community 1014|Community 1014]]
- [[_COMMUNITY_Community 1015|Community 1015]]
- [[_COMMUNITY_Community 1016|Community 1016]]
@@ -1018,17 +1006,9 @@
- [[_COMMUNITY_Community 1018|Community 1018]]
- [[_COMMUNITY_Community 1019|Community 1019]]
- [[_COMMUNITY_Community 1020|Community 1020]]
- [[_COMMUNITY_Community 1021|Community 1021]]
- [[_COMMUNITY_Community 1022|Community 1022]]
- [[_COMMUNITY_Community 1023|Community 1023]]
- [[_COMMUNITY_Community 1024|Community 1024]]
- [[_COMMUNITY_Community 1025|Community 1025]]
- [[_COMMUNITY_Community 1026|Community 1026]]
- [[_COMMUNITY_Community 1027|Community 1027]]
- [[_COMMUNITY_Community 1028|Community 1028]]
- [[_COMMUNITY_Community 1029|Community 1029]]
- [[_COMMUNITY_Community 1030|Community 1030]]
- [[_COMMUNITY_Community 1031|Community 1031]]
## God Nodes (most connected - your core abstractions)
1. `ApiTestCase` - 228 edges
@@ -1047,25 +1027,25 @@
.claude/skills/qa-clinicpro/driver.mjs → assets/admin/components/dashboard/dashboardIcons.tsx
- `shot()` --calls--> `S` [INFERRED]
.claude/skills/redesign-page/driver.mjs → assets/admin/components/dashboard/dashboardIcons.tsx
- `ReplaceAppointmentModal()` --calls--> `rialToToman()` [EXTRACTED]
assets/admin/components/AppointmentActions.tsx → assets/admin/lib/utils.ts
- `ClinicDoctorsManager()` --calls--> `formatNumber()` [EXTRACTED]
assets/admin/components/ClinicDoctorsManager.tsx → assets/admin/lib/utils.ts
- `PatientCaseBanner()` --calls--> `formatDate()` [EXTRACTED]
assets/admin/components/PatientCaseBanner.tsx → assets/admin/lib/utils.ts
- `PatientTagsCell()` --calls--> `formatNumber()` [EXTRACTED]
assets/admin/components/PatientTagsCell.tsx → assets/admin/lib/utils.ts
## Import Cycles
- None detected.
## Communities (1032 total, 239 thin omitted)
## Communities (1012 total, 238 thin omitted)
### Community 0 - "Community 0"
Cohesion: 0.06
Nodes (19): ClinicAppointmentAccessTest, ClinicDoctorPermissionTest, ClinicDoctorPermissionRepository, ClinicDoctorPermission, ClinicRecordAccessTest, ClinicDoctorPermissionChecker, Clinic, Doctor (+11 more)
Nodes (18): ClinicAppointmentAccessTest, ClinicOwnerScheduleAccessTest, ClinicDoctorPermissionTest, ClinicDoctorPermissionRepository, ClinicDoctorPermission, ClinicDoctorPermissionChecker, Clinic, Doctor (+10 more)
### Community 1 - "Community 1"
Cohesion: 0.04
Nodes (44): ServiceItemFormModal(), numericField(), emptyFeatures(), FEATURE_KEYS, FEATURE_LABELS, PeriodForm, periodSchema, PLAN_DISPLAY (+36 more)
Cohesion: 0.03
Nodes (55): ServiceItemFormModal(), PaymentConfig, PaymentGatewayInfo, usePaymentConfig(), numericField(), CitiesTab(), CityForm, citySchema (+47 more)
### Community 2 - "Community 2"
Cohesion: 0.10
@@ -1088,12 +1068,12 @@ Cohesion: 0.17
Nodes (8): SettlementController, SettlementRepository, Settlement, JsonResponse, Request, User, ManagerRegistry, User
### Community 7 - "Community 7"
Cohesion: 0.05
Nodes (11): DoctorServiceController, DoctorService, Clinic, DoctorServiceRepository, Collection, Doctor, self, User (+3 more)
Cohesion: 0.06
Nodes (8): DoctorService, Clinic, DoctorServiceRepository, Collection, Doctor, self, User, ManagerRegistry
### Community 8 - "Community 8"
Cohesion: 0.02
Nodes (94): DoctorTab, PickedService, ServicePick, ServiceSlot, ServiceSlotPicker(), get, services, td (+86 more)
Cohesion: 0.03
Nodes (110): AppointmentLike, ConfirmAppointmentModal(), METHOD_OPTIONS, PaymentRow, Props, rowStyle, ServiceItem, STATE_TONE (+102 more)
### Community 9 - "Community 9"
Cohesion: 0.04
@@ -1104,28 +1084,28 @@ Cohesion: 0.17
Nodes (12): Clinic Address Management, `DELETE /api/v1/clinic/{clinicUuid}/address/{addressUuid}`, Errors, Errors, `GET /api/v1/clinic/{clinicUuid}/addresses`, `PATCH /api/v1/clinic/{clinicUuid}/address/{addressUuid}`, `POST /api/v1/clinic/{clinicUuid}/address`, Removed endpoint (+4 more)
### Community 11 - "Community 11"
Cohesion: 0.35
Nodes (4): ClinicOwnerScheduleAccessTest, Clinic, Doctor, DoctorAddress
Cohesion: 0.04
Nodes (42): DoctorTab, PickedService, ServicePick, ServiceSlot, ServiceSlotPicker(), get, services, td (+34 more)
### Community 12 - "Community 12"
Cohesion: 0.05
Nodes (44): Account provisioning, Clinic Doctor Invitation API, Console: `app:invitations:repair`, DELETE `/api/v1/admin/clinic/invitation/{invUuid}`, Errors, Errors, Errors, Errors (+36 more)
Cohesion: 0.04
Nodes (49): Account provisioning, Clinic Doctor Invitation API, Console: `app:invitations:repair`, DELETE `/api/v1/admin/clinic/invitation/{invUuid}`, Errors, Errors, Errors, Errors (+41 more)
### Community 13 - "Community 13"
Cohesion: 0.02
Nodes (118): appointment, get, post, render(), appt, get, openMenu(), patch (+110 more)
Nodes (120): appointment, get, post, render(), appt, get, openMenu(), patch (+112 more)
### Community 14 - "Community 14"
Cohesion: 0.09
Nodes (20): EntityContextResolver, AppointmentSettingsController, DateOverride, EntityContext, Holiday, DateOverrideRepository, HolidayRepository, Clinic (+12 more)
### Community 15 - "Community 15"
Cohesion: 0.05
Nodes (20): PaymentController, DomainContextResolver, LogPruneService, MaintenanceService, DomainCommissionTest, MaintenanceService, SubscriptionService, MaintenanceModeTest (+12 more)
Cohesion: 0.25
Nodes (7): PaymentController, Appointment, JsonResponse, Payment, Request, Response, User
### Community 16 - "Community 16"
Cohesion: 0.04
Nodes (12): AppointmentExpiryServiceTest, PatientSession, AppLog, SecretaryAppointmentScopeTest, Appointment, Collection, InventoryPackage, PatientRecord (+4 more)
Nodes (12): AppointmentCreateReserveTest, PatientSession, SmsWallet, SecretaryAppointmentScopeTest, Appointment, Collection, InventoryPackage, PatientRecord (+4 more)
### Community 17 - "Community 17"
Cohesion: 0.05
@@ -1145,11 +1125,11 @@ Nodes (5): AdminApiController, RepresentationRepository, JsonResponse, Request,
### Community 21 - "Community 21"
Cohesion: 0.02
Nodes (89): PatientTagsCell(), TenantTag, ServiceTariffModal(), TariffResponse, TariffRow, SessionPaymentAccordion(), SessionPaymentData, paid (+81 more)
Nodes (94): SessionPaymentAccordion(), SessionPaymentData, paid, unpaid, TauriStatCards(), InvoicePaymentRow, InvoiceRowStatus, MY_PAYMENTS_LIMIT (+86 more)
### Community 22 - "Community 22"
Cohesion: 0.15
Nodes (9): RatingController, Like, LikeRepository, JsonResponse, Request, User, Comment, ManagerRegistry (+1 more)
Cohesion: 0.11
Nodes (14): RatingController, Like, Rate, LikeRepository, RateRepository, JsonResponse, Request, User (+6 more)
### Community 23 - "Community 23"
Cohesion: 0.05
@@ -1192,8 +1172,8 @@ Cohesion: 0.06
Nodes (32): 10. Modal / Dialog, 11. Toast Notifications, 12. Empty States & Loading, 13. Page Header (هر صفحه), 14. تکنولوژی Stack, 15. Responsive Breakpoints, 16. Dark Mode (اختیاری — فاز دوم), 17. نمونه رنگ‌بندی صفحه داشبورد (+24 more)
### Community 33 - "Community 33"
Cohesion: 0.27
Nodes (7): AbstractAuthenticator, AuthenticationException, Passport, PasswordAuthenticator, Request, Response, TokenInterface
Cohesion: 0.36
Nodes (5): ClinicRecordAccessTest, Clinic, Doctor, PatientRecord, User
### Community 34 - "Community 34"
Cohesion: 0.05
@@ -1256,8 +1236,8 @@ Cohesion: 0.11
Nodes (4): Payment, Appointment, self, User
### Community 49 - "Community 49"
Cohesion: 0.05
Nodes (42): AppointmentLike, ConfirmAppointmentModal(), METHOD_OPTIONS, PaymentRow, Props, rowStyle, ServiceItem, STATE_TONE (+34 more)
Cohesion: 0.07
Nodes (26): ClinicDoctorsManager(), ClinicInvitation, HUES_LIST, INV_STATUS_MAP, Contract, EMPTY_FORM, InsuranceModal(), InsuranceOption (+18 more)
### Community 50 - "Community 50"
Cohesion: 0.07
@@ -1272,8 +1252,8 @@ Cohesion: 0.07
Nodes (26): الزامات UI, باگ‌فیکس صفحه نوبت‌ها, باگ ۱ — کرش تقویم, باگ ۲ — روز هفته در DateNavigator, باگ ۳ — پیام «slot نیست», باگ ۴ — نوبت جدید: نام اجباری + find-or-create patient, باگ ۵ — patient_mobile نشان می‌دهد موبایل پزشک, باگ ۶ — نوبت‌های رزرو شده در نمایش زمانبندی (+18 more)
### Community 53 - "Community 53"
Cohesion: 0.07
Nodes (19): AppLogRepository, ClaimItemRepository, DoctorClaimRequestRepository, PreRegistrationRepository, SessionConsumableRepository, SubscriptionPeriodRepository, TaxRateHistoryRepository, ServiceEntityRepository (+11 more)
Cohesion: 0.06
Nodes (20): ClaimStatusLog, AppLogRepository, ClaimItemRepository, ClaimStatusLogRepository, DoctorClaimRequestRepository, PreRegistrationRepository, SessionAuditLogRepository, SiteConfigRepository (+12 more)
### Community 54 - "Community 54"
Cohesion: 0.10
@@ -1296,8 +1276,8 @@ Cohesion: 0.29
Nodes (5): BlogController, City, JsonResponse, Request, User
### Community 59 - "Community 59"
Cohesion: 0.05
Nodes (18): ClinicController, SpecialtyController, DoctorSpecialtyParentsTest, Specialty, BackfillSpecialtyParentsStep, SpecialtyRepository, Clinic, DoctorAddress (+10 more)
Cohesion: 0.22
Nodes (6): ClinicController, Clinic, DoctorAddress, JsonResponse, Request, User
### Community 60 - "Community 60"
Cohesion: 0.08
@@ -1308,12 +1288,12 @@ Cohesion: 0.17
Nodes (12): Add Session Payment (تسویه چندتکه), Create Patient Record, Create Session, Edit Session Payment, Endpoints, Get Patient Record, List Patient Appointments, List Patient Sessions (+4 more)
### Community 62 - "Community 62"
Cohesion: 0.09
Nodes (27): MethodOption, Props, QUICK_TOMANS, WalletModalSubmit, WalletMode, WalletTransactionModal(), BANK_KEY, BankAccount (+19 more)
Cohesion: 0.08
Nodes (25): WalletTransactionModal(), BANK_KEY, BankAccount, BankAccountInput, Pos, POS_KEY, PosInput, useBankAccounts() (+17 more)
### Community 63 - "Community 63"
Cohesion: 0.02
Nodes (136): PaginatedResponse, formatDateTime(), ALL_STATUSES, AppointmentDetailPage(), isoDay(), timeOf(), FormData, schema (+128 more)
Nodes (123): PaginatedResponse, formatDateTime(), emptyFeatures(), FEATURE_KEYS, FEATURE_LABELS, PeriodForm, periodSchema, PLAN_DISPLAY (+115 more)
### Community 64 - "Community 64"
Cohesion: 0.19
@@ -1375,6 +1355,10 @@ Nodes (3): SubscriptionPlan, Collection, self
Cohesion: 0.09
Nodes (23): dependencies, @ckeditor/ckeditor5-build-classic, @ckeditor/ckeditor5-react, @fontsource/vazirmatn, @heroicons/react, @hookform/resolvers, jalaali-js, leaflet (+15 more)
### Community 82 - "Community 82"
Cohesion: 0.14
Nodes (5): CategoryImportTest, PurgeDoctorsCommand, Connection, InputInterface, OutputInterface
### Community 83 - "Community 83"
Cohesion: 0.09
Nodes (21): Backend, CSS / UI, Frontend, روند اجرای هر قابلیت, قبل از شروع — تحلیل پرامپت و ساخت Todo, قوانین اجرا (اجباری — هیچ استثنایی ندارد), قوانین خاص این پروژه, مثال اجرا (+13 more)
@@ -1389,7 +1373,7 @@ Nodes (30): devDependencies, @babel/core, @babel/preset-env, @babel/preset-react
### Community 86 - "Community 86"
Cohesion: 0.03
Nodes (25): BookingModeImmutableTest, BookingServicesPublicTest, LowTierFixesTest, SendCodeMobileRateLimitTest, ClaimsListNPlusOneTest, ClaimsListPaginationTest, CaptchaFlowTest, ServiceItemDeleteCleanupTest (+17 more)
Nodes (27): AppointmentExpiryServiceTest, BookingModeImmutableTest, BookingServicesPublicTest, DateOverrideOwnershipTest, LowTierFixesTest, SendCodeMobileRateLimitTest, ClaimsListNPlusOneTest, ClaimsListPaginationTest (+19 more)
### Community 87 - "Community 87"
Cohesion: 0.10
@@ -1452,7 +1436,7 @@ Cohesion: 0.10
Nodes (19): Backend — endpoint اشتراک, Frontend — App.tsx, Frontend — authStore, Frontend — Sidebar, اعمال محدودیت‌های اشتراک در پنل ادمین (Frontend Gate), ترتیب اجرا, زمینه, فایل‌های مرتبط (+11 more)
### Community 102 - "Community 102"
Cohesion: 0.08
Cohesion: 0.07
Nodes (26): Bulk import / export, DELETE `/api/v1/admin/tag/{id}`, DELETE `/api/v1/tenant-tag/{uuid}`, Errors, Errors, Errors, Errors, Errors (+18 more)
### Community 103 - "Community 103"
@@ -1460,8 +1444,8 @@ Cohesion: 0.11
Nodes (18): `AdminApiController::paymentDetail` — الان فقط GET, `MellatGateway.php` — الگوی موجود REST/SOAP (پس از کار sandbox), `PaymentGatewayInterface.php`, `PaymentManager.php` — الگوی log و transaction, برگشت/استرداد وجه ملت از پنل ادمین (bpReversalRequest / bpRefundRequest), زمینه, فایل‌های مرتبط, نکات مهم (+10 more)
### Community 104 - "Community 104"
Cohesion: 0.18
Nodes (6): TagController, TagRepository, JsonResponse, Request, ManagerRegistry, Tag
Cohesion: 0.35
Nodes (3): TagController, JsonResponse, Request
### Community 105 - "Community 105"
Cohesion: 0.11
@@ -1472,12 +1456,12 @@ Cohesion: 0.11
Nodes (18): Endpoint ها, gate check در تسک‌های بعدی, GET /api/v1/subscription/my, GET /api/v1/subscription/plans, POST /api/v1/admin/subscription/period, POST /api/v1/subscription-payment (موجود), POST /api/v1/subscription/trial, POST /api/v1/subscription/trial (خطا — قبلاً استفاده شده) (+10 more)
### Community 107 - "Community 107"
Cohesion: 0.12
Nodes (16): AppointmentConfirmationService, BackfillAppointmentSessionsCommand, AppointmentController, AutoCreateSessionOnConfirmTest, InputInterface, OutputInterface, Appointment, Clinic (+8 more)
Cohesion: 0.24
Nodes (8): AppointmentController, Appointment, Clinic, Doctor, JsonResponse, Request, User, WeeklySchedule
### Community 108 - "Community 108"
Cohesion: 0.08
Nodes (17): CaptchaController, BaseController, CategoryController, ClinicInvitationWebController, DoctorImportController, SiteContextController, JsonResponse, ClinicDoctorInvitation (+9 more)
Cohesion: 0.09
Nodes (16): CaptchaController, BaseController, CategoryController, DoctorImportController, SiteContextController, SmsMessageController, JsonResponse, JsonResponse (+8 more)
### Community 109 - "Community 109"
Cohesion: 0.29
@@ -1680,8 +1664,8 @@ Cohesion: 0.13
Nodes (15): Date Overrides, DELETE `/api/v1/appointment-settings/date-override/{uuid}`, Errors, Errors, GET `/api/v1/appointment-settings/date-override/list/{doctorUuid}`, GET `/api/v1/appointment-settings/date-override/{uuid}`, PATCH `/api/v1/appointment-settings/date-override/{uuid}`, POST `/api/v1/appointment-settings/date-override` (+7 more)
### Community 161 - "Community 161"
Cohesion: 0.02
Nodes (81): latinDigitsField(), NumericFieldProps, wrap(), cn(), digitsOnly(), displayDoctorName(), iranMobileOptionalSchema, iranMobileSchema (+73 more)
Cohesion: 0.03
Nodes (48): latinDigitsField(), NumericFieldProps, wrap(), iranMobileSchema, ClinicAddress, ClinicDetailPage(), EditForm, EditModal() (+40 more)
### Community 162 - "Community 162"
Cohesion: 0.10
@@ -1712,8 +1696,8 @@ Cohesion: 0.10
Nodes (20): api.ir (استعلام هویت — Shahkar / IbanMatch), اتصال به دیتابیس‌های مستقل (الزامی), اسرار (الزامی — قبل از اولین دیپلوی), امنیت و منابع, بررسی سلامت, دامنه‌ها و CORS, دیپلوی‌های بعدی, راهنمای دیپلوی ClinicPro (Coolify + Docker Compose) (+12 more)
### Community 169 - "Community 169"
Cohesion: 0.09
Nodes (9): SourceProfileIdTest, MellatGatewayTest, ErrorCodesTest, HealthControllerTest, TimezoneTest, KavehNegarProviderTest, TestCase, EntityManagerInterface (+1 more)
Cohesion: 0.10
Nodes (9): SourceProfileIdTest, UserProfileDemographicsTest, MellatGatewayTest, ErrorCodesTest, HealthControllerTest, TimezoneTest, TestCase, UserProfile (+1 more)
### Community 170 - "Community 170"
Cohesion: 0.13
@@ -1832,8 +1816,8 @@ Cohesion: 0.14
Nodes (13): Endpoint ها, PATCH /api/v1/secretary/{uuid}, POST /api/v1/secretary, تسک ۱۴: ماژول منشی, توضیح, زمان تخمینی, ساختار JSON, سیستم مجوزها — Resource-Based Permissions (مقیاس‌پذیر) (+5 more)
### Community 200 - "Community 200"
Cohesion: 0.18
Nodes (10): ClinicDoctorsManager(), ClinicInvitation, HUES_LIST, INV_STATUS_MAP, ACTION_COLUMNS, ACTION_HEADERS, ClinicDoctorPermissionPayload, DoctorPermissionsModal() (+2 more)
Cohesion: 0.19
Nodes (4): LogPruneService, MaintenanceService, MaintenanceModeTest, SiteConfigRepository
### Community 201 - "Community 201"
Cohesion: 0.11
@@ -1849,7 +1833,7 @@ Nodes (16): Clinic Services API, DELETE /api/v1/service-item/{uuid}, DELETE /api
### Community 204 - "Community 204"
Cohesion: 0.02
Nodes (100): ALLOWED_ROLES, PrivateRoute(), PublicRoute(), RoleRoute(), queryClient, toastStyle, ClinicDoctorItem, get (+92 more)
Nodes (103): ALLOWED_ROLES, PrivateRoute(), PublicRoute(), RoleRoute(), queryClient, toastStyle, ClinicDoctorItem, get (+95 more)
### Community 205 - "Community 205"
Cohesion: 0.21
@@ -1933,7 +1917,7 @@ Nodes (13): DELETE `/api/v1/representation/{uuid}`, Errors, Errors, GET `/api/v1
### Community 230 - "Community 230"
Cohesion: 0.05
Nodes (31): ApiAppointment, NOT_VISITED_STATUSES, ServiceOption, STATUS_OPTIONS, NewAppointmentsTable(), AdminCharts, AdminDashboard(), AdminRecent (+23 more)
Nodes (34): ApiAppointment, NOT_VISITED_STATUSES, ServiceOption, STATUS_OPTIONS, NewAppointmentsTable(), displayDoctorName(), AdminCharts, AdminDashboard() (+26 more)
### Community 231 - "Community 231"
Cohesion: 0.17
@@ -2200,8 +2184,8 @@ Cohesion: 0.22
Nodes (9): require-dev, phpstan/phpstan, phpstan/phpstan-doctrine, phpstan/phpstan-symfony, phpunit/phpunit, symfony/browser-kit, symfony/css-selector, symfony/debug-bundle (+1 more)
### Community 300 - "Community 300"
Cohesion: 0.27
Nodes (9): AddTurn(), PatientsCategoryView(), PatientsGridView(), SearchHeaderP(), TurnsFilter(), countFilters(), dayBound(), EMPTY (+1 more)
Cohesion: 0.37
Nodes (5): AppointmentConfirmationService, AutoCreateSessionOnConfirmTest, Appointment, Clinic, Doctor
### Community 301 - "Community 301"
Cohesion: 0.15
@@ -2216,8 +2200,8 @@ Cohesion: 0.12
Nodes (16): آماده‌سازی پروژه ClinicPro برای دیپلوی روی Coolify با Docker Compose, زمینه, فایل‌های مرتبط, نکات مهم (محدودیت‌ها و edge caseها), هدف, وظایف, ۱. ساخت `Dockerfile` چندمرحله‌ای, ۱۰. ساخت راهنمای `docs/deploy/coolify.md` (+8 more)
### Community 304 - "Community 304"
Cohesion: 0.22
Nodes (9): 29. 🟢 `GET` clinic list 🆕, 30. 🟢 `GET` get 🆕, 36. 🟢 `GET` get my rate, 6. کلینیک (Clinic), هدرهای اضافی, پارامترهای Query, پاسخ‌ها, پاسخ‌ها (+1 more)
Cohesion: 0.04
Nodes (52): 29. 🟢 `GET` clinic list 🆕, 30. 🟢 `GET` get 🆕, 31. 🟡 `PATCH` patch, 33. 🔵 `POST` image_clinic, 34. 🔵 `POST` image logo, 36. 🟢 `GET` get my rate, 37. 🔵 `POST` post, 39. 🟡 `PATCH` Comment confirmation (+44 more)
### Community 306 - "Community 306"
Cohesion: 0.07
@@ -2253,11 +2237,7 @@ Nodes (4): InsuranceRepository, Insurance, InsuranceType, ManagerRegistry
### Community 314 - "Community 314"
Cohesion: 0.02
Nodes (104): AppointmentCardData, AppointmentTurnCard(), base, Invoice, InvoiceItem, InvoiceSummaryModal(), SessionConsumable, SessionData (+96 more)
### Community 315 - "Community 315"
Cohesion: 0.20
Nodes (6): AuthController, RateLimiterFactory, ClinicDoctorPermission, JsonResponse, Request, User
Nodes (121): AppointmentCardData, AppointmentTurnCard(), base, Invoice, InvoiceItem, InvoiceSummaryModal(), SessionConsumable, SessionData (+113 more)
### Community 316 - "Community 316"
Cohesion: 0.12
@@ -2316,8 +2296,8 @@ Cohesion: 0.22
Nodes (8): Query های جدید, بیماران منحصربه‌فرد در بازه, درآمد بر اساس روز (از patient_sessions), فروش اشتراک بر اساس پنل (admin), نوبت‌ها بر اساس روز (admin chart), نکات مهم, هیچ migration لازم نیست, پایگاه داده — تسک ۱۶: داشبورد هوشمند
### Community 333 - "Community 333"
Cohesion: 0.29
Nodes (7): DELETE `/api/v1/clinic-pro/doctor-address/{id}`, Doctor API, Errors, GET `/api/v1/clinic-pro/doctor-addresses/{doctorId}`, Path Parameters, Response `200`, Response `200`
Cohesion: 0.04
Nodes (47): `city` / `state` در پاسخ لیست, DELETE `/api/v1/clinic-pro/doctor-address/{id}`, DELETE `/api/v1/doctor/{uuid}`, Doctor API, Errors, Errors, Errors, Errors (+39 more)
### Community 334 - "Community 334"
Cohesion: 0.25
@@ -2444,8 +2424,8 @@ Cohesion: 0.25
Nodes (7): بازسازی از صفر, دادهٔ انبوه, شناسه‌ها, نام پزشک بدون عنوان, نکته‌ها, پرسوناها, کاربران تستی
### Community 367 - "Community 367"
Cohesion: 0.24
Nodes (3): Altcha, AltchaService, altcha
Cohesion: 0.16
Nodes (6): Altcha, AltchaService, altcha, Altcha(), AltchaProps, IntrinsicElements
### Community 368 - "Community 368"
Cohesion: 0.36
@@ -2580,8 +2560,8 @@ Cohesion: 0.06
Nodes (30): انتقال برنامه کاری، اصلاح فرم تنظیمات نوبت، فیلدهای عددی لاتین، رفع باگ هزینه ویزیت در مودال، و لاگ/تایم‌لاین لغو نوبت, تسک ۱ — انتقال کامل «برنامه کاری» از پروفایل به تنظیمات نوبت‌دهی, تسک ۲ — اصلاح چیدمان دکمه ذخیره در صفحه تنظیمات نوبت‌دهی, تسک ۳ — اجبار ورودی لاتین در همه فیلدهای عددی سراسری, تسک ۴ — رفع باگ: ثبت نوبت هنگام الزامی بودن هزینه ویزیت (۴۲۲), تسک ۵ — ثبت لاگ و رویداد Timeline هنگام لغو نوبت, زمینه, فایل‌های مرتبط (+22 more)
### Community 407 - "Community 407"
Cohesion: 0.17
Nodes (11): MessageBusInterface, MockObject, SmsLogRepository, SmsServiceLookupOnlyTest, SmsLog, SmsLogRepository, SmsMessageTemplateRepository, SmsService (+3 more)
Cohesion: 0.12
Nodes (14): MessageBusInterface, MockObject, SmsLogRepository, SmsService, SmsServiceLookupOnlyTest, SmsLog, SmsLogRepository, SmsMessageTemplateRepository (+6 more)
### Community 410 - "Community 410"
Cohesion: 0.08
@@ -2592,8 +2572,8 @@ Cohesion: 0.10
Nodes (20): edge cases, خلاصهٔ خطاها و اولویت, راه‌حل, راه‌حل, راه‌حل, راه‌حل, رفع خطاهای لاگ سرور (production) — ۱۴۰۵/۰۴/۲۰, ریشه (+12 more)
### Community 416 - "Community 416"
Cohesion: 0.04
Nodes (59): CoverageRow, Draft, KIND, TenantInsurance, EMPTY_FORM, ItemForm, itemSchema, Props (+51 more)
Cohesion: 0.08
Nodes (28): EMPTY_CATS, EMPTY_ITEMS, EMPTY_META, EMPTY_PACKAGES, EMPTY_STATS, InventoryItem, InventoryMeta, InventoryPackage (+20 more)
### Community 418 - "Community 418"
Cohesion: 0.17
@@ -2605,7 +2585,7 @@ Nodes (15): راه‌حل, راه‌حل, راه‌حل, رفع زوم نقشه
### Community 423 - "Community 423"
Cohesion: 0.16
Nodes (7): AbstractMigration, Schema, Version20260609130407, Schema, Version20260610183655, Schema, Version20260719044321
Nodes (7): AbstractMigration, Schema, Version20260610183655, Schema, Version20260705070546, Schema, Version20260719044321
### Community 424 - "Community 424"
Cohesion: 0.35
@@ -2624,24 +2604,24 @@ Cohesion: 0.12
Nodes (16): backend (آماده — فقط annotation/doc ناقص), افزودن فیلد «تاریخ شروع فعالیت» (سال تجربه) در پنل ادمین با تقویم شمسی, زمینه, فایل‌های مرتبط, فرم ساخت پزشک — `DoctorFormPage.tsx` (خط ~282), فرم ویرایش پزشک — `DoctorDetailPage.tsx` (وضعیت فعلی، بدون فیلد تاریخ), مشکل / هدف, نکات مهم (+8 more)
### Community 433 - "Community 433"
Cohesion: 0.18
Nodes (8): ErrorCodes, PatientController, JsonResponse, PatientRecord, PatientRecordScope, PatientSession, Request, User
Cohesion: 0.05
Nodes (32): AbstractAuthenticator, AuthenticationException, ErrorCodes, AuthController, ClinicServiceController, PatientController, ExceptionSubscriber, AppException (+24 more)
### Community 435 - "Community 435"
Cohesion: 0.36
Nodes (3): RepairImportedDoctorsCommand, InputInterface, OutputInterface
Cohesion: 0.28
Nodes (4): SubscriptionService, ClinicSubscription, Payment, SubscriptionPlan
### Community 436 - "Community 436"
Cohesion: 0.12
Nodes (16): `book()` عمومی — الگوی درستِ موجود (کپی از `AppointmentController::book`, خط ۲۴۲–۲۶۳), زمینه, فایل‌های مرتبط, فرم — بدون فیلد کد ملی (کپی از `AppointmentCreatePage.tsx`), مسیر ادمین — بیمار فقط با موبایل (کپی از `MyAppointmentsController::createAppointment`, خط ۸۱–۸۷), نوبت‌دهی ادمین بر اساس کد ملی + موبایل (پرونده یکتا با کد ملی), نکات مهم, هدف (+8 more)
### Community 437 - "Community 437"
Cohesion: 0.09
Nodes (14): AdminCspSubscriber, ExceptionSubscriber, MaintenanceSubscriber, NumericFieldNormalizerSubscriber, SecurityHeadersSubscriber, EventSubscriberInterface, ResponseEvent, ExceptionEvent (+6 more)
Cohesion: 0.11
Nodes (12): AdminCspSubscriber, MaintenanceSubscriber, NumericFieldNormalizerSubscriber, SecurityHeadersSubscriber, EventSubscriberInterface, ResponseEvent, ExceptionEvent, Request (+4 more)
### Community 438 - "Community 438"
Cohesion: 0.26
Nodes (6): ClinicServiceController, JsonResponse, Request, ServiceItem, ServiceSection, User
Cohesion: 0.30
Nodes (4): DomainContextResolver, DomainCommissionTest, Payment, Representation
### Community 439 - "Community 439"
Cohesion: 0.17
@@ -2684,8 +2664,8 @@ Cohesion: 0.15
Nodes (3): DoctorClaimRequest, Doctor, User
### Community 455 - "Community 455"
Cohesion: 0.22
Nodes (3): AppException, SlotTakenException, RuntimeException
Cohesion: 0.28
Nodes (4): DoctorServiceController, SpecialtyRepository, JsonResponse, Request
### Community 456 - "Community 456"
Cohesion: 0.15
@@ -2772,7 +2752,7 @@ Cohesion: 0.10
Nodes (20): book() فعلی فقط slot_start/slot_end می‌گیرد, overlap واقعی از قبل درست است, زمینه, ساخت اسلاتِ ثابت (حالت فعلی = slot mode), فایل‌های مرتبط, متای برنامهٔ هفتگی, مدت خدمت — هست ولی استفاده نمی‌شود, نوبت‌دهی بر اساس مدت سرویس (Service-based booking) — Backend + Admin (+12 more)
### Community 479 - "Community 479"
Cohesion: 0.14
Cohesion: 0.16
Nodes (6): Authentication, ClinicPro — API Documentation Index, Error Code Reference, Modules, Persian digit normalization (global), Standard Response Envelope
### Community 481 - "Community 481"
@@ -2808,8 +2788,8 @@ Cohesion: 0.20
Nodes (9): Backend Audit Backlog — ClinicPro, ☐ CRITICAL, ✅ DONE (committed on backend-audit), ☐ EPICS (design debt — cross-repo, defer; do NOT quick-fix), ☐ HIGH, ☐ LOW, ☐ MEDIUM, Progress (this audit session) (+1 more)
### Community 494 - "Community 494"
Cohesion: 0.42
Nodes (4): ClaimService, Claim, Invoice, User
Cohesion: 0.24
Nodes (8): ClaimSubmitterInterface, ClaimService, ManualClaimSubmitter, Claim, Invoice, User, Claim, ClaimSubmissionResult
### Community 495 - "Community 495"
Cohesion: 0.12
@@ -2824,8 +2804,8 @@ Cohesion: 0.49
Nodes (3): SlotUniquenessTest, Appointment, Doctor
### Community 498 - "Community 498"
Cohesion: 0.25
Nodes (8): scripts, build, dev, dev-server, test, test:cov, test:watch, watch
Cohesion: 0.15
Nodes (12): license, overrides, lodash, private, scripts, build, dev, dev-server (+4 more)
### Community 499 - "Community 499"
Cohesion: 0.12
@@ -3036,8 +3016,8 @@ Cohesion: 0.50
Nodes (4): Errors, POST `/api/v1/admin/sms/template/{uuid}/reject`, Request Body, Response `200`
### Community 559 - "Community 559"
Cohesion: 0.16
Nodes (7): SmsMessageController, SmsMessageTemplateRepository, SmsTextResolver, SmsMessageTemplate, JsonResponse, Request, ManagerRegistry
Cohesion: 0.25
Nodes (4): SmsMessageTemplateRepository, SmsTextResolver, SmsMessageTemplate, ManagerRegistry
### Community 560 - "Community 560"
Cohesion: 0.50
@@ -3088,8 +3068,8 @@ Cohesion: 0.25
Nodes (8): ۲.۲ انواع دسته‌بندی (Category Types), ۲.۲.۱ تگ (Tag), ۲.۲.۲ استان (State), ۲.۲.۳ شهر (City), ۲.۲.۴ بیمه پایه (Basic Insurance), ۲.۲.۵ بیمه مکمل (Supplementary Insurance), ۲.۲.۶ تخصص دکتر (Doctor Specialty), ۲.۲.۷ خدمات دکتر (Doctor Services)
### Community 577 - "Community 577"
Cohesion: 0.05
Nodes (46): grid, PatientFormOptions, patientFormSchema, PatientFormValues, Props, baseValues, options, InvoicePayload (+38 more)
Cohesion: 0.06
Nodes (44): grid, PatientFormOptions, patientFormSchema, PatientFormValues, Props, baseValues, options, InvoicePayload (+36 more)
### Community 578 - "Community 578"
Cohesion: 0.36
@@ -3144,8 +3124,8 @@ Cohesion: 0.29
Nodes (3): FinancialBreakdown, Payment, User
### Community 597 - "Community 597"
Cohesion: 0.20
Nodes (10): Configuration, Errors, Errors, GET `/api/v1/admin/sms/templates`, GET `/api/v1/sms/template/{uuid}`, POST `/api/v1/sms/send` — ⛔ غیرفعال (Deprecated), Response `200`, Response `200` (+2 more)
Cohesion: 0.29
Nodes (7): Configuration, Errors, GET `/api/v1/admin/sms/templates`, GET `/api/v1/sms/template/{uuid}`, Response `200`, Response `200`, SMS API
### Community 598 - "Community 598"
Cohesion: 0.29
@@ -3179,6 +3159,10 @@ Nodes (10): ایمپورت پزشکان نظام پزشکی به کلینیک‌
Cohesion: 0.34
Nodes (5): RepresentationController, JsonResponse, Representation, Request, User
### Community 608 - "Community 608"
Cohesion: 0.18
Nodes (9): AdminUser, ASSIGNABLE_ROLES, ChangeRoleModal(), getPrimaryRole(), HUES_LIST, ROLE_META, ROLE_TABS, RoleBadge() (+1 more)
### Community 612 - "Community 612"
Cohesion: 0.67
Nodes (3): بک‌اند, فرانت‌اند, وضعیت فعلی کد (مهم — قبل از تغییر بخوان)
@@ -3196,7 +3180,7 @@ Cohesion: 0.31
Nodes (3): SubscriptionPlanRepository, ManagerRegistry, SubscriptionPlan
### Community 633 - "Community 633"
Cohesion: 0.29
Cohesion: 0.27
Nodes (5): PatientPaymentsTest, Doctor, Invoice, PatientRecord, PatientSession
### Community 634 - "Community 634"
@@ -3296,8 +3280,8 @@ Cohesion: 0.31
Nodes (3): InventoryItemRepository, InventoryItem, ManagerRegistry
### Community 681 - "Community 681"
Cohesion: 0.21
Nodes (6): PurgeUnclaimedDoctorsCommandTest, RepositoryClassMappingTest, KernelTestCase, DbLoggerTest, CommandTester, Doctor
Cohesion: 0.15
Nodes (8): PurgeDoctorsCommandTest, PurgeUnclaimedDoctorsCommandTest, RepositoryClassMappingTest, KernelTestCase, DbLoggerTest, CommandTester, CommandTester, Doctor
### Community 683 - "Community 683"
Cohesion: 0.33
@@ -3419,9 +3403,13 @@ Nodes (3): PatientResolver, User, UserProfile
Cohesion: 0.15
Nodes (12): call siteهای فعلی PersianDateInput (نباید تغییر کنند — فقط برای اطمینان از سازگاری Props), زمینه, فایل‌های مرتبط, مشکل / هدف, نکات مهم, همه‌ی تقویم‌های پنل ادمین باید شمسی باشند (رفع تقویم میلادی PersianDateInput), وضعیت فعلی (کد مشکل‌دار), وظایف (+4 more)
### Community 733 - "Community 733"
Cohesion: 0.35
Nodes (3): SpecialtyController, JsonResponse, Request
### Community 737 - "Community 737"
Cohesion: 0.38
Nodes (3): PurgeDoctorsCommand, InputInterface, OutputInterface
Cohesion: 0.33
Nodes (5): DoctorImportResult, DoctorImportService, Collection, Doctor, User
### Community 738 - "Community 738"
Cohesion: 0.50
@@ -3540,8 +3528,8 @@ Cohesion: 0.24
Nodes (4): InventoryPackageItem, InventoryItem, InventoryPackage, self
### Community 782 - "Community 782"
Cohesion: 0.10
Nodes (16): Command, AuditScheduleLocationsCommand, CancelExpiredAppointmentsCommand, MaintenanceCommand, PruneLogsCommand, SeedCategoriesCommand, InputInterface, OutputInterface (+8 more)
Cohesion: 0.06
Nodes (25): Command, AuditScheduleLocationsCommand, BackfillAppointmentSessionsCommand, CancelExpiredAppointmentsCommand, NormalizeScheduleFormatCommand, PruneLogsCommand, RepairImportedDoctorsCommand, SeedCategoriesCommand (+17 more)
### Community 783 - "Community 783"
Cohesion: 0.13
@@ -3559,10 +3547,6 @@ Nodes (4): Errors, POST `/oauth/token/refresh`, Request Body, Response `200`
Cohesion: 0.50
Nodes (4): Errors, GET `/oauth/userinfo`, Headers, Response `200`
### Community 789 - "Community 789"
Cohesion: 0.18
Nodes (4): KavehNegarProvider, SmsService, SendSmsMessage, SmsProviderInterface
### Community 791 - "Community 791"
Cohesion: 0.40
Nodes (5): 32. 🔵 `POST` post, Request Body, مثال Request, هدرهای اضافی, پاسخ‌ها
@@ -3616,12 +3600,12 @@ Cohesion: 0.15
Nodes (12): زمینه, فایل‌های مرتبط, مشکل / هدف, نکات مهم, وضعیت فعلی, وظایف, ویرایش سرویس‌های مراجعه + ویرایش/حذف پرداخت + Audit Log مالی جامع, پروژه (+4 more)
### Community 813 - "Community 813"
Cohesion: 0.12
Nodes (10): DoctorImportResult, BackfillSourceProfileIdStep, DoctorImportService, SourceProfileId, Collection, Doctor, User, RepairOptions (+2 more)
Cohesion: 0.17
Nodes (5): BackfillSourceProfileIdStep, SourceProfileId, RepairOptions, RepairResult, SymfonyStyle
### Community 814 - "Community 814"
Cohesion: 0.38
Nodes (5): Rate, RateRepository, Doctor, ManagerRegistry, User
Cohesion: 0.36
Nodes (4): ClinicInvitationWebController, ClinicDoctorInvitation, Request, Response
### Community 815 - "Community 815"
Cohesion: 0.43
@@ -3679,10 +3663,6 @@ Nodes (3): BookingContextResolver, Clinic, Doctor
Cohesion: 0.36
Nodes (4): ClaimAmountBoundsTest, Claim, Doctor, User
### Community 842 - "Community 842"
Cohesion: 0.53
Nodes (4): ClaimSubmitterInterface, ManualClaimSubmitter, Claim, ClaimSubmissionResult
### Community 844 - "Community 844"
Cohesion: 0.15
Nodes (12): اصلاح دادهٔ موجود: افزودن تخصص‌های والد به پزشکان (backfill), زمینه, فایل‌های مرتبط, مشکل / هدف, نکات مهم, وضعیت فعلی, وظایف, پروژه (+4 more)
@@ -3727,10 +3707,6 @@ Nodes (3): DiscountRuleRepository, DiscountRule, ManagerRegistry
Cohesion: 0.50
Nodes (4): GET `/api/v1/admin/settlements`, Query Parameters, Response `200`, Settlement Management
### Community 858 - "Community 858"
Cohesion: 0.11
Nodes (6): IrimcDegreeMappingTest, FixDegreeStep, IrimcDegreeMapper, RepairOptions, RepairResult, SymfonyStyle
### Community 861 - "Community 861"
Cohesion: 0.17
Nodes (11): Gotchas, Troubleshooting, بازطراحی صفحه پنل ادمین ClinicPro, پیش‌نیازها, چک‌لیست بازطراحی, گردش کار, ۱. اسکرین‌شات صفحه فعلی, ۲. نگاشت URL به سورس + آدیت (+3 more)
@@ -3791,9 +3767,13 @@ Nodes (3): PurgeUnclaimedDoctorsCommand, InputInterface, OutputInterface
Cohesion: 0.15
Nodes (12): زمینه, فایل‌های مرتبط, فرآیند ثبت و قطعی کردن نوبت (مودال پرداخت + پرونده), مشکل / هدف, نکات مهم, وضعیت فعلی, وظایف, پروژه (+4 more)
### Community 885 - "Community 885"
Cohesion: 0.25
Nodes (4): BackfillSpecialtyParentsStep, RepairOptions, RepairResult, SymfonyStyle
### Community 890 - "Community 890"
Cohesion: 0.43
Nodes (3): SessionAuditLogRepository, SessionAuditLog, ManagerRegistry
Cohesion: 0.25
Nodes (4): FixDegreeStep, RepairOptions, RepairResult, SymfonyStyle
### Community 899 - "Community 899"
Cohesion: 0.15
@@ -3868,8 +3848,8 @@ Cohesion: 0.36
Nodes (4): SiteConfigController, JsonResponse, Request, User
### Community 929 - "Community 929"
Cohesion: 0.33
Nodes (6): `city` / `state` در پاسخ لیست, GET `/api/v1/doctors`, Query Parameters, Response `200`, اعتبارسنجی نام پزشک, مرتب‌سازی و تعریف «دارای نوبت»
Cohesion: 0.39
Nodes (4): SubscriptionPeriodRepository, ManagerRegistry, SubscriptionPeriod, SubscriptionPlan
### Community 930 - "Community 930"
Cohesion: 0.50
@@ -3884,8 +3864,8 @@ Cohesion: 0.38
Nodes (3): RepairAcceptedInvitationsCommand, InputInterface, OutputInterface
### Community 937 - "Community 937"
Cohesion: 0.38
Nodes (3): NormalizeScheduleFormatCommand, InputInterface, OutputInterface
Cohesion: 0.29
Nodes (5): IbanItem, isValidIranIban(), RepProfile, RepresentationProfilePage(), unwrap()
### Community 939 - "Community 939"
Cohesion: 0.25
@@ -3900,8 +3880,8 @@ Cohesion: 0.50
Nodes (4): Errors, GET `/api/v1/representation/doctors`, Query Parameters, Response `200`
### Community 942 - "Community 942"
Cohesion: 0.40
Nodes (5): Errors, GET `/api/v1/admin/clinic/{uuid}/invitations`, Path Parameters, Query Parameters, Response `200`
Cohesion: 0.38
Nodes (3): MaintenanceCommand, InputInterface, OutputInterface
### Community 943 - "Community 943"
Cohesion: 0.40
@@ -3944,8 +3924,8 @@ Cohesion: 0.40
Nodes (5): DELETE `/api/v1/patient/attachment/{uuid}`, Errors, GET `/api/v1/patient/{uuid}/attachments`, POST `/api/v1/patient/{uuid}/attachment`, ضمیمه‌های بیمار (Attachments)
### Community 960 - "Community 960"
Cohesion: 0.40
Nodes (5): 31. 🟡 `PATCH` patch, Request Body, مثال Request, هدرهای اضافی, پاسخ‌ها
Cohesion: 0.48
Nodes (3): SessionConsumableRepository, ManagerRegistry, SessionConsumable
### Community 962 - "Community 962"
Cohesion: 0.53
@@ -3995,10 +3975,6 @@ Nodes (5): Errors, GET `/api/v1/clinic/my-doctor/{doctorUuid}`, Path Parameters,
Cohesion: 0.17
Nodes (8): CalendarIcon(), CardIcon(), CardTickIcon(), ChevronDownIcon(), UserAddIcon(), HEAD, Props, StatCardModel
### Community 974 - "Community 974"
Cohesion: 0.40
Nodes (5): Errors, PATCH `/api/v1/doctor/{uuid}`, Path Parameters, Request Body (`application/json`), Response `200`
### Community 976 - "Community 976"
Cohesion: 0.50
Nodes (4): Errors, POST `/file/upload/clinic_pro/clinic/field_clinic_logo`, Request, Response `200`
@@ -4016,16 +3992,12 @@ Cohesion: 0.67
Nodes (3): POST `/api/v1/admin/sms/template/{uuid}/approve`, Request Body (`application/json`), Response `200`
### Community 981 - "Community 981"
Cohesion: 0.43
Nodes (3): ClaimStatusLog, ClaimStatusLogRepository, ManagerRegistry
Cohesion: 0.53
Nodes (3): TaxRateHistoryRepository, ManagerRegistry, TaxRateHistory
### Community 982 - "Community 982"
Cohesion: 0.40
Nodes (5): Errors, PATCH `/api/v1/clinic-pro/doctor-address/{id}`, Path Parameters, Request Body, Response `200`
### Community 983 - "Community 983"
Cohesion: 0.40
Nodes (5): 37. 🔵 `POST` post, Request Body, مثال Request, هدرهای اضافی, پاسخ‌ها
Cohesion: 0.67
Nodes (3): Errors, POST `/api/v1/sms/send` — ⛔ غیرفعال (Deprecated), Response `422` (همیشه)
### Community 985 - "Community 985"
Cohesion: 0.67
@@ -4039,18 +4011,6 @@ Nodes (4): run(), RepairOptions, RepairResult, SymfonyStyle
Cohesion: 0.33
Nodes (6): GET `/api/v1/admin/sms/logs`, GET `/api/v1/admin/sms/templates`, Query Parameters, Response `200`, Response `200`, SMS Management (Admin)
### Community 991 - "Community 991"
Cohesion: 0.40
Nodes (5): 41. 🟡 `PATCH` patch, Request Body, مثال Request, هدرهای اضافی, پاسخ‌ها
### Community 992 - "Community 992"
Cohesion: 0.47
Nodes (3): SeedSmsMessageTemplatesCommand, InputInterface, OutputInterface
### Community 997 - "Community 997"
Cohesion: 0.40
Nodes (4): license, overrides, lodash, private
### Community 999 - "Community 999"
Cohesion: 0.40
Nodes (5): GET `/api/v1/admin/financial-breakdowns`, GET `/api/v1/admin/financial-summary`, GET `/api/v1/admin/settings/tax-history`, GET `/api/v1/admin/settlement/{uuid}`, موتور مالی نمایندگی
@@ -4063,42 +4023,18 @@ Nodes (5): 35. 🟡 `PATCH` patch, Request Body, مثال Request, هدرهای
Cohesion: 0.50
Nodes (4): Errors, GET `/api/v1/admin/insurances`, Query Parameters, Response `200`
### Community 1003 - "Community 1003"
Cohesion: 0.50
Nodes (4): DELETE `/api/v1/doctor/{uuid}`, Errors, Path Parameters, Response `200`
### Community 1004 - "Community 1004"
Cohesion: 0.50
Nodes (4): Errors, POST `/api/v1/doctor`, Request Body (`application/json`), Response `201`
### Community 1007 - "Community 1007"
Cohesion: 0.50
Nodes (4): 38. 🟢 `GET` Unapproved comments, هدرهای اضافی, پارامترهای Query, پاسخ‌ها
### Community 1008 - "Community 1008"
Cohesion: 0.50
Nodes (4): Errors, GET `/api/v1/doctor/{uuid}`, Path Parameters, Response `200`
### Community 1009 - "Community 1009"
Cohesion: 0.50
Nodes (4): Errors, POST `/api/v1/admin/insurance`, Request Body (`application/json`), Response `201`
### Community 1010 - "Community 1010"
Cohesion: 0.50
Nodes (4): Errors, POST `/file/upload/clinic_pro/doctor/field_image`, Request, Response `200`
### Community 1011 - "Community 1011"
Cohesion: 0.50
Nodes (4): Errors, POST `/api/v1/clinic-pro/doctor-address`, Request Body, Response `201`
### Community 1012 - "Community 1012"
Cohesion: 0.50
Nodes (4): Errors, PATCH `/api/v1/admin/insurance/{id}`, Path Parameters, Response `200`
### Community 1013 - "Community 1013"
Cohesion: 0.50
Nodes (4): Errors, Path Parameters, POST `/api/v1/clinic-pro/doctor-address/from-clinic/{clinicUuid}`, Response `201`
### Community 1014 - "Community 1014"
Cohesion: 0.50
Nodes (4): Errors, POST `/api/v1/insurance/`, Request Body (`application/json`), Response `201`
@@ -4115,26 +4051,10 @@ Nodes (4): GET `/api/v1/insurance-pricing`, Query Parameters, Response `200`, خ
Cohesion: 0.50
Nodes (4): PUT `/api/v1/insurance-pricing`, Request Body, Response `200`, خطاها
### Community 1021 - "Community 1021"
Cohesion: 0.50
Nodes (4): 39. 🟡 `PATCH` Comment confirmation, مثال Request, هدرهای اضافی, پاسخ‌ها
### Community 1022 - "Community 1022"
Cohesion: 0.50
Nodes (4): 40. 🔵 `POST` post, مثال Request, هدرهای اضافی, پاسخ‌ها
### Community 1023 - "Community 1023"
Cohesion: 0.50
Nodes (4): 44. 🟢 `GET` list comment, هدرهای اضافی, پارامترهای Query, پاسخ‌ها
### Community 1024 - "Community 1024"
Cohesion: 0.50
Nodes (4): 45. 🔵 `POST` post, مثال Request, هدرهای اضافی, پاسخ‌ها
### Community 1025 - "Community 1025"
Cohesion: 0.50
Nodes (4): 46. 🟡 `PATCH` patch, مثال Request, هدرهای اضافی, پاسخ‌ها
### Community 1026 - "Community 1026"
Cohesion: 0.67
Nodes (3): GET `/api/v1/insurances`, Query Parameters, Response `200`
@@ -4143,41 +4063,25 @@ Nodes (3): GET `/api/v1/insurances`, Query Parameters, Response `200`
Cohesion: 0.67
Nodes (3): POST `/api/v1/admin/insurance/{id}/upload-logo`, Request, Response `200`
### Community 1028 - "Community 1028"
Cohesion: 0.67
Nodes (3): 33. 🔵 `POST` image_clinic, هدرهای اضافی, پاسخ‌ها
### Community 1029 - "Community 1029"
Cohesion: 0.67
Nodes (3): 34. 🔵 `POST` image logo, هدرهای اضافی, پاسخ‌ها
### Community 1030 - "Community 1030"
Cohesion: 0.67
Nodes (3): 42. 🔴 `DELETE` delete, هدرهای اضافی, پاسخ‌ها
### Community 1031 - "Community 1031"
Cohesion: 0.67
Nodes (3): 43. 🟢 `GET` get, هدرهای اضافی, پاسخ‌ها
## Knowledge Gaps
- **5274 isolated node(s):** `PORT`, `ROLES`, `[cmd, ...argv]`, `positional`, `opts` (+5269 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **239 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **238 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `Altcha` connect `Community 367` to `Community 204`, `Community 485`?**
- **Why does `Altcha` connect `Community 367` to `Community 485`?**
_High betweenness centrality (0.110) - this node is a cross-community bridge._
- **Why does `SiteConfigRepository` connect `Community 15` to `Community 485`, `Community 809`, `Community 169`, `Community 205`, `Community 206`, `Community 367`, `Community 724`, `Community 693`, `Community 637`, `Community 926`?**
- **Why does `SiteConfigRepository` connect `Community 200` to `Community 485`, `Community 840`, `Community 809`, `Community 169`, `Community 205`, `Community 206`, `Community 15`, `Community 367`, `Community 435`, `Community 724`, `Community 693`, `Community 438`, `Community 637`, `Community 926`?**
_High betweenness centrality (0.096) - this node is a cross-community bridge._
- **Why does `ApiTestCase` connect `Community 86` to `Community 0`, `Community 11`, `Community 15`, `Community 16`, `Community 531`, `Community 534`, `Community 535`, `Community 538`, `Community 539`, `Community 541`, `Community 562`, `Community 565`, `Community 59`, `Community 574`, `Community 575`, `Community 583`, `Community 594`, `Community 82`, `Community 609`, `Community 107`, `Community 633`, `Community 640`, `Community 641`, `Community 646`, `Community 652`, `Community 658`, `Community 659`, `Community 685`, `Community 690`, `Community 697`, `Community 710`, `Community 715`, `Community 717`, `Community 719`, `Community 733`, `Community 743`, `Community 744`, `Community 748`, `Community 765`, `Community 775`, `Community 779`, `Community 784`, `Community 804`, `Community 817`, `Community 826`, `Community 828`, `Community 318`, `Community 837`, `Community 841`, `Community 851`, `Community 854`, `Community 856`, `Community 870`, `Community 871`, `Community 887`, `Community 907`, `Community 403`, `Community 917`, `Community 918`, `Community 920`, `Community 921`, `Community 927`, `Community 928`, `Community 936`, `Community 424`, `Community 938`, `Community 431`, `Community 442`, `Community 445`, `Community 959`, `Community 971`, `Community 975`, `Community 980`, `Community 990`, `Community 480`, `Community 482`, `Community 483`, `Community 484`, `Community 486`, `Community 998`, `Community 1000`, `Community 492`, `Community 1005`, `Community 497`?**
_High betweenness centrality (0.044) - this node is a cross-community bridge._
- **Why does `ApiTestCase` connect `Community 86` to `Community 0`, `Community 16`, `Community 531`, `Community 534`, `Community 535`, `Community 538`, `Community 539`, `Community 541`, `Community 33`, `Community 562`, `Community 565`, `Community 574`, `Community 575`, `Community 583`, `Community 594`, `Community 82`, `Community 609`, `Community 633`, `Community 640`, `Community 641`, `Community 646`, `Community 652`, `Community 658`, `Community 659`, `Community 685`, `Community 690`, `Community 697`, `Community 710`, `Community 200`, `Community 715`, `Community 717`, `Community 719`, `Community 743`, `Community 744`, `Community 748`, `Community 765`, `Community 775`, `Community 779`, `Community 784`, `Community 804`, `Community 300`, `Community 817`, `Community 826`, `Community 828`, `Community 318`, `Community 837`, `Community 841`, `Community 842`, `Community 851`, `Community 854`, `Community 856`, `Community 870`, `Community 871`, `Community 881`, `Community 887`, `Community 907`, `Community 403`, `Community 917`, `Community 918`, `Community 920`, `Community 921`, `Community 927`, `Community 928`, `Community 936`, `Community 424`, `Community 431`, `Community 438`, `Community 442`, `Community 445`, `Community 959`, `Community 971`, `Community 974`, `Community 980`, `Community 990`, `Community 480`, `Community 482`, `Community 483`, `Community 484`, `Community 486`, `Community 1000`, `Community 492`, `Community 1005`, `Community 497`?**
_High betweenness centrality (0.046) - this node is a cross-community bridge._
- **What connects `PORT`, `ROLES`, `[cmd, ...argv]` to the rest of the system?**
_5274 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `Community 0` be split into smaller, more focused modules?**
_Cohesion score 0.06073871409028728 - nodes in this community are weakly interconnected._
_Cohesion score 0.06138975966562173 - nodes in this community are weakly interconnected._
- **Should `Community 1` be split into smaller, more focused modules?**
_Cohesion score 0.0420899854862119 - nodes in this community are weakly interconnected._
_Cohesion score 0.03219315895372234 - nodes in this community are weakly interconnected._
- **Should `Community 2` be split into smaller, more focused modules?**
_Cohesion score 0.09523809523809523 - nodes in this community are weakly interconnected._
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1201 -1085
View File
File diff suppressed because it is too large Load Diff
+10 -10
View File
@@ -970,8 +970,8 @@
"semantic_hash": ""
},
"src/Billing/Controller/BillingController.php": {
"mtime": 1784464902.58483,
"ast_hash": "6d0d11fa7a724830b1c1e9fe86d95162",
"mtime": 1784808838.8976812,
"ast_hash": "f5f39f4f82370d2b13dee2e6bab6491c",
"semantic_hash": ""
},
"src/Billing/Entity/Claim.php": {
@@ -1010,8 +1010,8 @@
"semantic_hash": ""
},
"src/Billing/Repository/InvoiceRepository.php": {
"mtime": 1784464902.5907006,
"ast_hash": "3529c7bce794c8b58deb428f16532791",
"mtime": 1784808794.513476,
"ast_hash": "b81cf990eebd86508fe9774406edff20",
"semantic_hash": ""
},
"src/Billing/Service/BillingCalculator.php": {
@@ -2345,8 +2345,8 @@
"semantic_hash": ""
},
"docs/api/billing.md": {
"mtime": 1784800330.8696327,
"ast_hash": "08efc312af675bedb01558616d266f39",
"mtime": 1784808955.8717575,
"ast_hash": "ee2062e82a8e990c45634cae2f24ac54",
"semantic_hash": ""
},
"docs/api/blog.md": {
@@ -4455,8 +4455,8 @@
"semantic_hash": ""
},
"assets/admin/hooks/useMyPayments.ts": {
"mtime": 1784464897.2272205,
"ast_hash": "8d07c6bc36b92db3824f0986fe9889e3",
"mtime": 1784808653.1351082,
"ast_hash": "8d468496e76cbabcfde29754de60f8e0",
"semantic_hash": ""
},
"assets/admin/pages/MyPaymentDetailPage.test.tsx": {
@@ -4480,8 +4480,8 @@
"semantic_hash": ""
},
"tests/Billing/PatientPaymentsTest.php": {
"mtime": 1784464902.7095838,
"ast_hash": "3eff879518695814933aace087f07100",
"mtime": 1784808879.26677,
"ast_hash": "4314df156d37d50bb87730f080fee1b8",
"semantic_hash": ""
},
"assets/admin/components/PatientTagsCell.tsx": {
+4 -1
View File
@@ -38,6 +38,7 @@ class BillingController extends BaseController
private readonly InsuranceRepository $insuranceRepo,
private readonly ClaimStatusLogRepository $statusLogRepo,
private readonly PatientRecordScopeResolver $scopeResolver,
private readonly \App\UserProfile\Repository\UserProfileRepository $profileRepo,
) {}
/**
@@ -237,12 +238,14 @@ class BillingController extends BaseController
$result = $this->invoiceService->patientInvoiceList($entityType, $entityId, $record->getId(), $page, $limit);
$patient = $record->getUser();
// کد ملی روی پروفایل ذخیره می‌شود؛ users.national_code برای بیمارِ ساخته‌شده در نوبت‌دهی خالی است.
$nationalCode = $this->profileRepo->findByUser($patient)?->getNationalCode() ?? $patient->getNationalCode();
return $this->success([
'patient' => [
'uuid' => $record->getUuid(),
'name' => $patient->getRealName(),
'national_code' => $patient->getNationalCode(),
'national_code' => $nationalCode,
],
'data' => $result['items'],
'summary' => $result['summary'],
+7 -2
View File
@@ -6,6 +6,7 @@ use App\Billing\Entity\Invoice;
use App\Billing\Service\InvoicePaymentStatus;
use App\Patient\Entity\PatientRecord;
use App\Patient\Entity\SessionPayment;
use App\UserProfile\Entity\UserProfile;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder;
@@ -41,7 +42,7 @@ class InvoiceRepository extends ServiceEntityRepository
$rows = $this->tenantInvoicesQuery($entityType, $entityId, $filters)
->select(
'i.uuid AS invoice_uuid', 'r.uuid AS patient_uuid', 'u.realName AS patient_name',
'u.nationalCode AS national_code', 'i.issuedAt AS issued_at',
'COALESCE(p.nationalCode, u.nationalCode) AS national_code', 'i.issuedAt AS issued_at',
'i.patientRials AS amount_rials',
sprintf('%s AS paid_rials', self::paidSumDql('sp_row')),
)
@@ -198,6 +199,9 @@ class InvoiceRepository extends ServiceEntityRepository
$qb = $this->createQueryBuilder('i')
->innerJoin(PatientRecord::class, 'r', Join::WITH, 'r.id = i.patientRecordId')
->innerJoin('r.user', 'u')
// کد ملی روی پروفایل ذخیره می‌شود (profiles.national_code)؛ users.national_code
// برای بیمارانِ ساخته‌شده در نوبت‌دهی خالی می‌ماند.
->leftJoin(UserProfile::class, 'p', Join::WITH, 'p.user = u')
->where('i.entityType = :type')
->andWhere('i.entityId = :id')
->andWhere('i.status IN (:active)')
@@ -206,7 +210,8 @@ class InvoiceRepository extends ServiceEntityRepository
->setParameter('active', [Invoice::STATUS_FINALIZED, Invoice::STATUS_PAID]);
if (!empty($filters['national_code'])) {
$qb->andWhere('u.nationalCode LIKE :nc')->setParameter('nc', '%' . $filters['national_code'] . '%');
$qb->andWhere('(p.nationalCode LIKE :nc OR u.nationalCode LIKE :nc)')
->setParameter('nc', '%' . $filters['national_code'] . '%');
}
if (!empty($filters['from'])) {
$qb->andWhere('i.issuedAt >= :from')->setParameter('from', (int) $filters['from']);
+38
View File
@@ -11,6 +11,7 @@ use App\Patient\Entity\PatientRecord;
use App\Patient\Entity\PatientSession;
use App\Patient\Entity\SessionPayment;
use App\Tests\ApiTestCase;
use App\UserProfile\Entity\UserProfile;
/**
* GET /api/v1/my/billing/payments flat, tenant-scoped list of recorded
@@ -161,6 +162,43 @@ class PatientPaymentsTest extends ApiTestCase
self::assertSame(40000, $onlyPartial['data'][0]['paid_rials']);
}
/** بیمارِ ساخته‌شده در نوبت‌دهی کد ملی را روی پروفایل دارد نه روی users. */
private function patientRecordWithProfileCode(Doctor $doctor, string $realName, string $nationalCode): PatientRecord
{
$patient = $this->createUser(['ROLE_USER']);
$this->setField($patient, 'realName', $realName);
// users.national_code خالی؛ کد ملی فقط روی پروفایل.
$profile = new UserProfile($patient);
$profile->setNationalCode($nationalCode);
$this->em->persist($profile);
$record = new PatientRecord('doctor', $doctor->getId(), $patient, 'doctor', $doctor->getId());
$this->em->persist($record);
$this->em->flush();
return $record;
}
public function testNationalCodeFromProfileSurfacesInListAndDetail(): void
{
[$owner, $doctor] = $this->doctor();
$nc = str_pad((string) random_int(0, 9_999_999_999), 10, '0', STR_PAD_LEFT);
$record = $this->patientRecordWithProfileCode($doctor, 'بیمار پروفایلی', $nc);
$this->invoice($doctor, $record, Invoice::STATUS_FINALIZED, 100000, 1000, null, 0, 100000);
// لیست
$list = $this->authJson('GET', '/api/v1/my/billing/payments', $owner);
self::assertSame($nc, $list['data'][0]['national_code']);
// فیلتر با کد ملیِ پروفایل
$filtered = $this->authJson('GET', '/api/v1/my/billing/payments?national_code=' . $nc, $owner);
self::assertSame(1, $filtered['meta']['totalRecords']);
// هدرِ صفحهٔ جزئیات
$detail = $this->authJson('GET', '/api/v1/my/billing/patients/' . $record->getUuid() . '/invoices', $owner);
self::assertSame($nc, $detail['data']['patient']['national_code']);
}
public function testEmptyWhenNoInvoices(): void
{
[$owner] = $this->doctor();