Files
clinicpro/graphify-out/cache/ast/v0.8.44/ba39a2e1ccfbc1a98662ecc71225aa32583a410df8e238dad15de69a62fdb521.json
T
hamed c2c6ae4d02 feat(migrations): add national_code_verified flag to users and normalize bank_account representation
- Added a new column `national_code_verified` to the `users` table.
- Normalized the `bank_account` field in the `representations` table from a single object to an array of IBANs with a default `verified` status of false.

feat(ApiIrService): implement identity verification client for api.ir

- Created `ApiIrService` to handle identity verification via api.ir.
- Implemented methods for matching national code with mobile and IBAN with national code and birth date.
- Added error handling and logging for external API requests.
2026-06-25 19:38:47 +03:30

1 line
51 KiB
JSON

{"nodes": [{"id": "users_hamed_pj_my_pj_clinic_pro_clinicpro_claude_prompt_implement_phase2_backend_md", "label": "implement-phase2-backend.md", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L1"}, {"id": "prompt_implement_phase2_backend_\u067e\u06cc\u0627\u062f\u0647_\u0633\u0627\u0632\u06cc_\u0641\u0627\u0632_\u06f2_backend_\u062a\u0633\u06a9_\u0628\u0647_\u062a\u0633\u06a9", "label": "\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0641\u0627\u0632 \u06f2 \u2014 Backend \u062a\u0633\u06a9\u200c\u0628\u0647\u200c\u062a\u0633\u06a9", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L1"}, {"id": "prompt_implement_phase2_backend_\u0632\u0645\u06cc\u0646\u0647", "label": "\u0632\u0645\u06cc\u0646\u0647", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L3"}, {"id": "prompt_implement_phase2_backend_\u062a\u0631\u062a\u06cc\u0628_\u0627\u062c\u0628\u0627\u0631\u06cc_\u062a\u0633\u06a9_\u0647\u0627_\u0648\u0627\u0628\u0633\u062a\u06af\u06cc", "label": "\u062a\u0631\u062a\u06cc\u0628 \u0627\u062c\u0628\u0627\u0631\u06cc \u062a\u0633\u06a9\u200c\u0647\u0627 (\u0648\u0627\u0628\u0633\u062a\u06af\u06cc)", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L9"}, {"id": "prompt_implement_phase2_backend_\u0642\u0648\u0627\u0646\u06cc\u0646_\u0639\u0645\u0648\u0645\u06cc_\u067e\u0631\u0648\u0698\u0647", "label": "\u0642\u0648\u0627\u0646\u06cc\u0646 \u0639\u0645\u0648\u0645\u06cc \u067e\u0631\u0648\u0698\u0647", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L27"}, {"id": "prompt_implement_phase2_backend_backend_symfony_7", "label": "Backend (Symfony 7)", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L29"}, {"id": "prompt_implement_phase2_backend_\u0633\u0627\u062e\u062a\u0627\u0631_entity_\u0627\u0644\u06af\u0648", "label": "\u0633\u0627\u062e\u062a\u0627\u0631 Entity (\u0627\u0644\u06af\u0648)", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L40"}, {"id": "prompt_implement_phase2_backend_\u062a\u0648\u062c\u0647_\u0645\u0647\u0645_basecontroller_success_double_nested", "label": "\u062a\u0648\u062c\u0647 \u0645\u0647\u0645 \u2014 BaseController::success() double-nested", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L74"}, {"id": "prompt_implement_phase2_backend_secretarycontroller_\u0648\u0636\u0639\u06cc\u062a_\u0648\u0627\u0642\u0639\u06cc_\u0641\u0639\u0644\u06cc", "label": "SecretaryController \u2014 \u0648\u0636\u0639\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc \u0641\u0639\u0644\u06cc", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L88"}, {"id": "prompt_implement_phase2_backend_payment_entity_\u0648\u0636\u0639\u06cc\u062a_\u0648\u0627\u0642\u0639\u06cc", "label": "Payment entity \u2014 \u0648\u0636\u0639\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L99"}, {"id": "prompt_implement_phase2_backend_smsservice_signature_\u0648\u0627\u0642\u0639\u06cc", "label": "SmsService \u2014 signature \u0648\u0627\u0642\u0639\u06cc", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L107"}, {"id": "prompt_implement_phase2_backend_appointmentcontroller_updatestatus_\u0648\u0636\u0639\u06cc\u062a_\u0648\u0627\u0642\u0639\u06cc", "label": "AppointmentController::updateStatus \u2014 \u0648\u0636\u0639\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L115"}, {"id": "prompt_implement_phase2_backend_\u062a\u0633\u06a9_\u0647\u0627", "label": "\u062a\u0633\u06a9\u200c\u0647\u0627", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L124"}, {"id": "prompt_implement_phase2_backend_task_10_\u0645\u062f\u06cc\u0631\u06cc\u062a_\u067e\u0631\u0633\u0646\u0644_staff", "label": "TASK-10: \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u0631\u0633\u0646\u0644 (Staff)", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L128"}, {"id": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062c\u062f\u06cc\u062f", "label": "\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L132"}, {"id": "prompt_implement_phase2_backend_entity_clinicstaff", "label": "Entity ClinicStaff:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L141"}, {"id": "prompt_implement_phase2_backend_controller_endpoints", "label": "Controller endpoints:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L148"}, {"id": "prompt_implement_phase2_backend_\u0646\u06a9\u0627\u062a", "label": "\u0646\u06a9\u0627\u062a:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L156"}, {"id": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "label": "TASK-11: \u067e\u0646\u0644 \u0627\u0634\u062a\u0631\u0627\u06a9\u06cc (Subscription Tiers)", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L164"}, {"id": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062c\u062f\u06cc\u062f_168", "label": "\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L168"}, {"id": "prompt_implement_phase2_backend_subscriptionplan_id_uuid_name_varchar_30_free_basic_professional_level_tinyint", "label": "SubscriptionPlan: `id`, `uuid`, `name` (VARCHAR 30: free/basic/professional), `level` (TINYINT),", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L181"}, {"id": "prompt_implement_phase2_backend_subscriptionperiod_id_uuid_plan_fk_subscriptionplan_label_varchar_50", "label": "SubscriptionPeriod: `id`, `uuid`, `plan` (FK\u2192SubscriptionPlan), `label` (VARCHAR 50),", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L185"}, {"id": "prompt_implement_phase2_backend_clinicsubscription_id_uuid_entitytype_entityid_plan_fk", "label": "ClinicSubscription: `id`, `uuid`, `entityType`, `entityId`, `plan` (FK),", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L189"}, {"id": "prompt_implement_phase2_backend_subscriptionservice_\u0645\u062a\u062f\u0647\u0627\u06cc_\u0627\u0644\u0632\u0627\u0645\u06cc", "label": "SubscriptionService \u2014 \u0645\u062a\u062f\u0647\u0627\u06cc \u0627\u0644\u0632\u0627\u0645\u06cc:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L195"}, {"id": "prompt_implement_phase2_backend_subscriptioncontroller_endpoints", "label": "SubscriptionController endpoints:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L219"}, {"id": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_paymentcontroller", "label": "\u062a\u063a\u06cc\u06cc\u0631 PaymentController:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L233"}, {"id": "prompt_implement_phase2_backend_seed_data_\u062f\u0631_migration", "label": "Seed data \u062f\u0631 migration:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L242"}, {"id": "prompt_implement_phase2_backend_error_codes_\u062c\u062f\u06cc\u062f_\u062f\u0631_errorcodes_php", "label": "Error codes \u062c\u062f\u06cc\u062f \u062f\u0631 ErrorCodes.php:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L245"}, {"id": "prompt_implement_phase2_backend_task_12_\u062a\u06a9\u0645\u06cc\u0644_\u0645\u0646\u0634\u06cc_\u0645\u062d\u062f\u0648\u062f\u06cc\u062a_\u067e\u0646\u0644", "label": "TASK-12: \u062a\u06a9\u0645\u06cc\u0644 \u0645\u0646\u0634\u06cc \u2014 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u067e\u0646\u0644", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L256"}, {"id": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647_\u0647\u06cc\u0686_\u0641\u0627\u06cc\u0644_\u062c\u062f\u06cc\u062f\u06cc_\u0646\u06cc\u0633\u062a", "label": "\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647 (\u0647\u06cc\u0686 \u0641\u0627\u06cc\u0644 \u062c\u062f\u06cc\u062f\u06cc \u0646\u06cc\u0633\u062a):", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L260"}, {"id": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_secretarycontroller_create", "label": "\u062a\u063a\u06cc\u06cc\u0631 SecretaryController::create():", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L264"}, {"id": "prompt_implement_phase2_backend_\u0646\u06a9\u062a\u0647_\u0645\u0647\u0645_\u0645\u062a\u062f_\u0645\u0648\u062c\u0648\u062f", "label": "\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u2014 \u0645\u062a\u062f \u0645\u0648\u062c\u0648\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L277"}, {"id": "prompt_implement_phase2_backend_error_code_\u0645\u0648\u062c\u0648\u062f", "label": "Error code \u0645\u0648\u062c\u0648\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L280"}, {"id": "prompt_implement_phase2_backend_task_13_\u0633\u0631\u0648\u06cc\u0633_\u0647\u0627\u06cc_\u06a9\u0644\u06cc\u0646\u06cc\u06a9_clinic_services", "label": "TASK-13: \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u06a9\u0644\u06cc\u0646\u06cc\u06a9 (Clinic Services)", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L287"}, {"id": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062c\u062f\u06cc\u062f_291", "label": "\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L291"}, {"id": "prompt_implement_phase2_backend_servicesection_id_uuid_entitytype_entityid_name_varchar_200_active_bool_true_createdat_updatedat", "label": "ServiceSection: `id`, `uuid`, `entityType`, `entityId`, `name` (VARCHAR 200), `active` (bool=true), `createdAt`, `updatedAt`.", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L301"}, {"id": "prompt_implement_phase2_backend_serviceitem_id_uuid_section_fk_servicesection_on_delete_cascade", "label": "ServiceItem: `id`, `uuid`, `section` (FK\u2192ServiceSection ON DELETE CASCADE),", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L304"}, {"id": "prompt_implement_phase2_backend_controller_endpoints_308", "label": "Controller endpoints:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L308"}, {"id": "prompt_implement_phase2_backend_gate_check_helper", "label": "gate check helper:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L320"}, {"id": "prompt_implement_phase2_backend_\u062d\u0630\u0641_serviceitem_\u0628\u0627_\u0627\u0633\u062a\u0641\u0627\u062f\u0647_\u062f\u0631_\u067e\u0631\u0648\u0646\u062f\u0647", "label": "\u062d\u0630\u0641 ServiceItem \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u067e\u0631\u0648\u0646\u062f\u0647:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L331"}, {"id": "prompt_implement_phase2_backend_error_codes_\u062c\u062f\u06cc\u062f", "label": "Error codes \u062c\u062f\u06cc\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L342"}, {"id": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "label": "TASK-14: \u067e\u0646\u0644 \u067e\u06cc\u0627\u0645\u06a9\u06cc (SMS Panel)", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L351"}, {"id": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062c\u062f\u06cc\u062f_355", "label": "\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L355"}, {"id": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647", "label": "\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L368"}, {"id": "prompt_implement_phase2_backend_smswallet_id_entitytype_entityid_balancerials_int_0_createdat_updatedat", "label": "SmsWallet: `id`, `entityType`, `entityId`, `balanceRials` (INT=0), `createdAt`, `updatedAt`.", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L372"}, {"id": "prompt_implement_phase2_backend_smswallettransaction_id_uuid_wallet_fk_smswallet_on_delete_cascade", "label": "SmsWalletTransaction: `id`, `uuid`, `wallet` (FK\u2192SmsWallet ON DELETE CASCADE),", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L375"}, {"id": "prompt_implement_phase2_backend_smssettings_id_entitytype_entityid_reminderenabled_bool_false", "label": "SmsSettings: `id`, `entityType`, `entityId`, `reminderEnabled` (bool=false),", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L379"}, {"id": "prompt_implement_phase2_backend_smswalletservice", "label": "SmsWalletService:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L383"}, {"id": "prompt_implement_phase2_backend_smswalletcontroller_endpoints", "label": "SmsWalletController endpoints:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L391"}, {"id": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_paymentcontroller_callback_\u0628\u0631\u0627\u06cc_sms_wallet", "label": "\u062a\u063a\u06cc\u06cc\u0631 PaymentController callback \u0628\u0631\u0627\u06cc sms_wallet:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L401"}, {"id": "prompt_implement_phase2_backend_siteconfig_key", "label": "SiteConfig key:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L409"}, {"id": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "label": "TASK-15: \u067e\u0631\u0648\u0646\u062f\u0647 \u0628\u06cc\u0645\u0627\u0631 (Patient Records)", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L416"}, {"id": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062c\u062f\u06cc\u062f_420", "label": "\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L420"}, {"id": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647", "label": "\u0641\u0627\u06cc\u0644 \u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L432"}, {"id": "prompt_implement_phase2_backend_patientrecord_id_uuid_entitytype_entityid_user_fk_user_on_delete_restrict", "label": "PatientRecord: `id`, `uuid`, `entityType`, `entityId`, `user` (FK\u2192User ON DELETE RESTRICT),", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L435"}, {"id": "prompt_implement_phase2_backend_patientsession_id_uuid_record_fk_patientrecord_cascade_appointment_fk_nullable_set_null", "label": "PatientSession: `id`, `uuid`, `record` (FK\u2192PatientRecord CASCADE), `appointment` (FK nullable SET NULL),", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L439"}, {"id": "prompt_implement_phase2_backend_sessionservice_entity_id_uuid_session_fk_patientsession_cascade", "label": "SessionService (entity): `id`, `uuid`, `session` (FK\u2192PatientSession CASCADE),", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L446"}, {"id": "prompt_implement_phase2_backend_patientservice", "label": "PatientService:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L450"}, {"id": "prompt_implement_phase2_backend_patientcontroller_endpoints", "label": "PatientController endpoints:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L473"}, {"id": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_appointmentcontroller_updatestatus", "label": "\u062a\u063a\u06cc\u06cc\u0631 AppointmentController::updateStatus():", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L483"}, {"id": "prompt_implement_phase2_backend_error_codes_\u062c\u062f\u06cc\u062f_489", "label": "Error codes \u062c\u062f\u06cc\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L489"}, {"id": "prompt_implement_phase2_backend_task_16_\u062f\u0627\u0634\u0628\u0648\u0631\u062f_\u0647\u0648\u0634\u0645\u0646\u062f_smart_dashboard", "label": "TASK-16: \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0647\u0648\u0634\u0645\u0646\u062f (Smart Dashboard)", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L499"}, {"id": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647_\u0647\u06cc\u0686_\u0641\u0627\u06cc\u0644_\u062c\u062f\u06cc\u062f\u06cc_\u0646\u06cc\u0633\u062a_503", "label": "\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647 (\u0647\u06cc\u0686 \u0641\u0627\u06cc\u0644 \u062c\u062f\u06cc\u062f\u06cc \u0646\u06cc\u0633\u062a):", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L503"}, {"id": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_dashboardcontroller_\u0627\u0636\u0627\u0641\u0647_\u06a9\u0631\u062f\u0646_from_to", "label": "\u062a\u063a\u06cc\u06cc\u0631 DashboardController \u2014 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 `from`/`to`:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L507"}, {"id": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_adminapicontroller_dashboardcharts", "label": "\u062a\u063a\u06cc\u06cc\u0631 AdminApiController::dashboardCharts():", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L519"}, {"id": "prompt_implement_phase2_backend_patientrecordrepository_\u0645\u062a\u062f_\u062c\u062f\u06cc\u062f", "label": "PatientRecordRepository \u0645\u062a\u062f \u062c\u062f\u06cc\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L529"}, {"id": "prompt_implement_phase2_backend_patientsessionrepository_\u0645\u062a\u062f_\u062c\u062f\u06cc\u062f", "label": "PatientSessionRepository \u0645\u062a\u062f \u062c\u062f\u06cc\u062f:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L535"}, {"id": "prompt_implement_phase2_backend_\u0646\u06a9\u0627\u062a_\u0645\u0647\u0645_\u0628\u0631\u0627\u06cc_\u0647\u0645\u0647_\u062a\u0633\u06a9_\u0647\u0627", "label": "\u0646\u06a9\u0627\u062a \u0645\u0647\u0645 \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u062a\u0633\u06a9\u200c\u0647\u0627", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L545"}, {"id": "prompt_implement_phase2_backend_resolveentityfromjwt_helper_\u0645\u0634\u062a\u0631\u06a9", "label": "resolveEntityFromJwt \u2014 helper \u0645\u0634\u062a\u0631\u06a9", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L547"}, {"id": "prompt_implement_phase2_backend_migration_\u0628\u0639\u062f_\u0627\u0632_\u0647\u0631_\u062a\u0633\u06a9", "label": "migration \u0628\u0639\u062f \u0627\u0632 \u0647\u0631 \u062a\u0633\u06a9:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L557"}, {"id": "prompt_implement_phase2_backend_\u0628\u0631\u0631\u0633\u06cc_route_\u0628\u0639\u062f_\u0627\u0632_\u0647\u0631_\u062a\u0633\u06a9", "label": "\u0628\u0631\u0631\u0633\u06cc route \u0628\u0639\u062f \u0627\u0632 \u0647\u0631 \u062a\u0633\u06a9:", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L564"}, {"id": "prompt_implement_phase2_backend_\u062a\u0631\u062a\u06cc\u0628_\u0645\u0633\u062a\u0646\u062f\u0633\u0627\u0632\u06cc_docs_api", "label": "\u062a\u0631\u062a\u06cc\u0628 \u0645\u0633\u062a\u0646\u062f\u0633\u0627\u0632\u06cc (docs/api/):", "file_type": "document", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L569"}], "edges": [{"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_claude_prompt_implement_phase2_backend_md", "target": "prompt_implement_phase2_backend_\u067e\u06cc\u0627\u062f\u0647_\u0633\u0627\u0632\u06cc_\u0641\u0627\u0632_\u06f2_backend_\u062a\u0633\u06a9_\u0628\u0647_\u062a\u0633\u06a9", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L1", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u067e\u06cc\u0627\u062f\u0647_\u0633\u0627\u0632\u06cc_\u0641\u0627\u0632_\u06f2_backend_\u062a\u0633\u06a9_\u0628\u0647_\u062a\u0633\u06a9", "target": "prompt_implement_phase2_backend_\u0632\u0645\u06cc\u0646\u0647", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L3", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u067e\u06cc\u0627\u062f\u0647_\u0633\u0627\u0632\u06cc_\u0641\u0627\u0632_\u06f2_backend_\u062a\u0633\u06a9_\u0628\u0647_\u062a\u0633\u06a9", "target": "prompt_implement_phase2_backend_\u062a\u0631\u062a\u06cc\u0628_\u0627\u062c\u0628\u0627\u0631\u06cc_\u062a\u0633\u06a9_\u0647\u0627_\u0648\u0627\u0628\u0633\u062a\u06af\u06cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L9", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u067e\u06cc\u0627\u062f\u0647_\u0633\u0627\u0632\u06cc_\u0641\u0627\u0632_\u06f2_backend_\u062a\u0633\u06a9_\u0628\u0647_\u062a\u0633\u06a9", "target": "prompt_implement_phase2_backend_\u0642\u0648\u0627\u0646\u06cc\u0646_\u0639\u0645\u0648\u0645\u06cc_\u067e\u0631\u0648\u0698\u0647", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L27", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0642\u0648\u0627\u0646\u06cc\u0646_\u0639\u0645\u0648\u0645\u06cc_\u067e\u0631\u0648\u0698\u0647", "target": "prompt_implement_phase2_backend_backend_symfony_7", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L29", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0642\u0648\u0627\u0646\u06cc\u0646_\u0639\u0645\u0648\u0645\u06cc_\u067e\u0631\u0648\u0698\u0647", "target": "prompt_implement_phase2_backend_\u0633\u0627\u062e\u062a\u0627\u0631_entity_\u0627\u0644\u06af\u0648", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L40", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0642\u0648\u0627\u0646\u06cc\u0646_\u0639\u0645\u0648\u0645\u06cc_\u067e\u0631\u0648\u0698\u0647", "target": "prompt_implement_phase2_backend_\u062a\u0648\u062c\u0647_\u0645\u0647\u0645_basecontroller_success_double_nested", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L74", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0642\u0648\u0627\u0646\u06cc\u0646_\u0639\u0645\u0648\u0645\u06cc_\u067e\u0631\u0648\u0698\u0647", "target": "prompt_implement_phase2_backend_secretarycontroller_\u0648\u0636\u0639\u06cc\u062a_\u0648\u0627\u0642\u0639\u06cc_\u0641\u0639\u0644\u06cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L88", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0642\u0648\u0627\u0646\u06cc\u0646_\u0639\u0645\u0648\u0645\u06cc_\u067e\u0631\u0648\u0698\u0647", "target": "prompt_implement_phase2_backend_payment_entity_\u0648\u0636\u0639\u06cc\u062a_\u0648\u0627\u0642\u0639\u06cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L99", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0642\u0648\u0627\u0646\u06cc\u0646_\u0639\u0645\u0648\u0645\u06cc_\u067e\u0631\u0648\u0698\u0647", "target": "prompt_implement_phase2_backend_smsservice_signature_\u0648\u0627\u0642\u0639\u06cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L107", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0642\u0648\u0627\u0646\u06cc\u0646_\u0639\u0645\u0648\u0645\u06cc_\u067e\u0631\u0648\u0698\u0647", "target": "prompt_implement_phase2_backend_appointmentcontroller_updatestatus_\u0648\u0636\u0639\u06cc\u062a_\u0648\u0627\u0642\u0639\u06cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L115", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u067e\u06cc\u0627\u062f\u0647_\u0633\u0627\u0632\u06cc_\u0641\u0627\u0632_\u06f2_backend_\u062a\u0633\u06a9_\u0628\u0647_\u062a\u0633\u06a9", "target": "prompt_implement_phase2_backend_\u062a\u0633\u06a9_\u0647\u0627", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L124", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_task_10_\u0645\u062f\u06cc\u0631\u06cc\u062a_\u067e\u0631\u0633\u0646\u0644_staff", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L128", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_10_\u0645\u062f\u06cc\u0631\u06cc\u062a_\u067e\u0631\u0633\u0646\u0644_staff", "target": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062c\u062f\u06cc\u062f", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L132", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_10_\u0645\u062f\u06cc\u0631\u06cc\u062a_\u067e\u0631\u0633\u0646\u0644_staff", "target": "prompt_implement_phase2_backend_entity_clinicstaff", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L141", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_10_\u0645\u062f\u06cc\u0631\u06cc\u062a_\u067e\u0631\u0633\u0646\u0644_staff", "target": "prompt_implement_phase2_backend_controller_endpoints", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L148", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_10_\u0645\u062f\u06cc\u0631\u06cc\u062a_\u067e\u0631\u0633\u0646\u0644_staff", "target": "prompt_implement_phase2_backend_\u0646\u06a9\u0627\u062a", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L156", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L164", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "target": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062c\u062f\u06cc\u062f_168", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L168", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "target": "prompt_implement_phase2_backend_subscriptionplan_id_uuid_name_varchar_30_free_basic_professional_level_tinyint", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L181", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "target": "prompt_implement_phase2_backend_subscriptionperiod_id_uuid_plan_fk_subscriptionplan_label_varchar_50", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L185", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "target": "prompt_implement_phase2_backend_clinicsubscription_id_uuid_entitytype_entityid_plan_fk", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L189", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "target": "prompt_implement_phase2_backend_subscriptionservice_\u0645\u062a\u062f\u0647\u0627\u06cc_\u0627\u0644\u0632\u0627\u0645\u06cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L195", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "target": "prompt_implement_phase2_backend_subscriptioncontroller_endpoints", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L219", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "target": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_paymentcontroller", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L233", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "target": "prompt_implement_phase2_backend_seed_data_\u062f\u0631_migration", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L242", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_11_\u067e\u0646\u0644_\u0627\u0634\u062a\u0631\u0627\u06a9\u06cc_subscription_tiers", "target": "prompt_implement_phase2_backend_error_codes_\u062c\u062f\u06cc\u062f_\u062f\u0631_errorcodes_php", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L245", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_task_12_\u062a\u06a9\u0645\u06cc\u0644_\u0645\u0646\u0634\u06cc_\u0645\u062d\u062f\u0648\u062f\u06cc\u062a_\u067e\u0646\u0644", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L256", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_12_\u062a\u06a9\u0645\u06cc\u0644_\u0645\u0646\u0634\u06cc_\u0645\u062d\u062f\u0648\u062f\u06cc\u062a_\u067e\u0646\u0644", "target": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647_\u0647\u06cc\u0686_\u0641\u0627\u06cc\u0644_\u062c\u062f\u06cc\u062f\u06cc_\u0646\u06cc\u0633\u062a", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L260", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_12_\u062a\u06a9\u0645\u06cc\u0644_\u0645\u0646\u0634\u06cc_\u0645\u062d\u062f\u0648\u062f\u06cc\u062a_\u067e\u0646\u0644", "target": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_secretarycontroller_create", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L264", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_12_\u062a\u06a9\u0645\u06cc\u0644_\u0645\u0646\u0634\u06cc_\u0645\u062d\u062f\u0648\u062f\u06cc\u062a_\u067e\u0646\u0644", "target": "prompt_implement_phase2_backend_\u0646\u06a9\u062a\u0647_\u0645\u0647\u0645_\u0645\u062a\u062f_\u0645\u0648\u062c\u0648\u062f", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L277", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_12_\u062a\u06a9\u0645\u06cc\u0644_\u0645\u0646\u0634\u06cc_\u0645\u062d\u062f\u0648\u062f\u06cc\u062a_\u067e\u0646\u0644", "target": "prompt_implement_phase2_backend_error_code_\u0645\u0648\u062c\u0648\u062f", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L280", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_task_13_\u0633\u0631\u0648\u06cc\u0633_\u0647\u0627\u06cc_\u06a9\u0644\u06cc\u0646\u06cc\u06a9_clinic_services", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L287", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_13_\u0633\u0631\u0648\u06cc\u0633_\u0647\u0627\u06cc_\u06a9\u0644\u06cc\u0646\u06cc\u06a9_clinic_services", "target": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062c\u062f\u06cc\u062f_291", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L291", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_13_\u0633\u0631\u0648\u06cc\u0633_\u0647\u0627\u06cc_\u06a9\u0644\u06cc\u0646\u06cc\u06a9_clinic_services", "target": "prompt_implement_phase2_backend_servicesection_id_uuid_entitytype_entityid_name_varchar_200_active_bool_true_createdat_updatedat", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L301", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_13_\u0633\u0631\u0648\u06cc\u0633_\u0647\u0627\u06cc_\u06a9\u0644\u06cc\u0646\u06cc\u06a9_clinic_services", "target": "prompt_implement_phase2_backend_serviceitem_id_uuid_section_fk_servicesection_on_delete_cascade", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L304", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_13_\u0633\u0631\u0648\u06cc\u0633_\u0647\u0627\u06cc_\u06a9\u0644\u06cc\u0646\u06cc\u06a9_clinic_services", "target": "prompt_implement_phase2_backend_controller_endpoints_308", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L308", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_13_\u0633\u0631\u0648\u06cc\u0633_\u0647\u0627\u06cc_\u06a9\u0644\u06cc\u0646\u06cc\u06a9_clinic_services", "target": "prompt_implement_phase2_backend_gate_check_helper", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L320", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_13_\u0633\u0631\u0648\u06cc\u0633_\u0647\u0627\u06cc_\u06a9\u0644\u06cc\u0646\u06cc\u06a9_clinic_services", "target": "prompt_implement_phase2_backend_\u062d\u0630\u0641_serviceitem_\u0628\u0627_\u0627\u0633\u062a\u0641\u0627\u062f\u0647_\u062f\u0631_\u067e\u0631\u0648\u0646\u062f\u0647", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L331", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_13_\u0633\u0631\u0648\u06cc\u0633_\u0647\u0627\u06cc_\u06a9\u0644\u06cc\u0646\u06cc\u06a9_clinic_services", "target": "prompt_implement_phase2_backend_error_codes_\u062c\u062f\u06cc\u062f", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L342", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L351", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "target": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062c\u062f\u06cc\u062f_355", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L355", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "target": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L368", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "target": "prompt_implement_phase2_backend_smswallet_id_entitytype_entityid_balancerials_int_0_createdat_updatedat", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L372", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "target": "prompt_implement_phase2_backend_smswallettransaction_id_uuid_wallet_fk_smswallet_on_delete_cascade", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L375", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "target": "prompt_implement_phase2_backend_smssettings_id_entitytype_entityid_reminderenabled_bool_false", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L379", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "target": "prompt_implement_phase2_backend_smswalletservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L383", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "target": "prompt_implement_phase2_backend_smswalletcontroller_endpoints", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L391", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "target": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_paymentcontroller_callback_\u0628\u0631\u0627\u06cc_sms_wallet", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L401", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_14_\u067e\u0646\u0644_\u067e\u06cc\u0627\u0645\u06a9\u06cc_sms_panel", "target": "prompt_implement_phase2_backend_siteconfig_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L409", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L416", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "target": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062c\u062f\u06cc\u062f_420", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L420", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "target": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L432", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "target": "prompt_implement_phase2_backend_patientrecord_id_uuid_entitytype_entityid_user_fk_user_on_delete_restrict", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L435", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "target": "prompt_implement_phase2_backend_patientsession_id_uuid_record_fk_patientrecord_cascade_appointment_fk_nullable_set_null", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L439", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "target": "prompt_implement_phase2_backend_sessionservice_entity_id_uuid_session_fk_patientsession_cascade", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L446", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "target": "prompt_implement_phase2_backend_patientservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L450", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "target": "prompt_implement_phase2_backend_patientcontroller_endpoints", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L473", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "target": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_appointmentcontroller_updatestatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L483", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_15_\u067e\u0631\u0648\u0646\u062f\u0647_\u0628\u06cc\u0645\u0627\u0631_patient_records", "target": "prompt_implement_phase2_backend_error_codes_\u062c\u062f\u06cc\u062f_489", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L489", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_task_16_\u062f\u0627\u0634\u0628\u0648\u0631\u062f_\u0647\u0648\u0634\u0645\u0646\u062f_smart_dashboard", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L499", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_16_\u062f\u0627\u0634\u0628\u0648\u0631\u062f_\u0647\u0648\u0634\u0645\u0646\u062f_smart_dashboard", "target": "prompt_implement_phase2_backend_\u0641\u0627\u06cc\u0644_\u0647\u0627\u06cc_\u062a\u063a\u06cc\u06cc\u0631\u06a9\u0646\u0646\u062f\u0647_\u0647\u06cc\u0686_\u0641\u0627\u06cc\u0644_\u062c\u062f\u06cc\u062f\u06cc_\u0646\u06cc\u0633\u062a_503", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L503", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_16_\u062f\u0627\u0634\u0628\u0648\u0631\u062f_\u0647\u0648\u0634\u0645\u0646\u062f_smart_dashboard", "target": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_dashboardcontroller_\u0627\u0636\u0627\u0641\u0647_\u06a9\u0631\u062f\u0646_from_to", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L507", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_16_\u062f\u0627\u0634\u0628\u0648\u0631\u062f_\u0647\u0648\u0634\u0645\u0646\u062f_smart_dashboard", "target": "prompt_implement_phase2_backend_\u062a\u063a\u06cc\u06cc\u0631_adminapicontroller_dashboardcharts", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L519", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_16_\u062f\u0627\u0634\u0628\u0648\u0631\u062f_\u0647\u0648\u0634\u0645\u0646\u062f_smart_dashboard", "target": "prompt_implement_phase2_backend_patientrecordrepository_\u0645\u062a\u062f_\u062c\u062f\u06cc\u062f", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L529", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_task_16_\u062f\u0627\u0634\u0628\u0648\u0631\u062f_\u0647\u0648\u0634\u0645\u0646\u062f_smart_dashboard", "target": "prompt_implement_phase2_backend_patientsessionrepository_\u0645\u062a\u062f_\u062c\u062f\u06cc\u062f", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L535", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u067e\u06cc\u0627\u062f\u0647_\u0633\u0627\u0632\u06cc_\u0641\u0627\u0632_\u06f2_backend_\u062a\u0633\u06a9_\u0628\u0647_\u062a\u0633\u06a9", "target": "prompt_implement_phase2_backend_\u0646\u06a9\u0627\u062a_\u0645\u0647\u0645_\u0628\u0631\u0627\u06cc_\u0647\u0645\u0647_\u062a\u0633\u06a9_\u0647\u0627", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L545", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0646\u06a9\u0627\u062a_\u0645\u0647\u0645_\u0628\u0631\u0627\u06cc_\u0647\u0645\u0647_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_resolveentityfromjwt_helper_\u0645\u0634\u062a\u0631\u06a9", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L547", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0646\u06a9\u0627\u062a_\u0645\u0647\u0645_\u0628\u0631\u0627\u06cc_\u0647\u0645\u0647_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_migration_\u0628\u0639\u062f_\u0627\u0632_\u0647\u0631_\u062a\u0633\u06a9", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L557", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0646\u06a9\u0627\u062a_\u0645\u0647\u0645_\u0628\u0631\u0627\u06cc_\u0647\u0645\u0647_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_\u0628\u0631\u0631\u0633\u06cc_route_\u0628\u0639\u062f_\u0627\u0632_\u0647\u0631_\u062a\u0633\u06a9", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L564", "weight": 1.0}, {"source": "prompt_implement_phase2_backend_\u0646\u06a9\u0627\u062a_\u0645\u0647\u0645_\u0628\u0631\u0627\u06cc_\u0647\u0645\u0647_\u062a\u0633\u06a9_\u0647\u0627", "target": "prompt_implement_phase2_backend_\u062a\u0631\u062a\u06cc\u0628_\u0645\u0633\u062a\u0646\u062f\u0633\u0627\u0632\u06cc_docs_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".claude/prompt/implement-phase2-backend.md", "source_location": "L569", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}