Files
clinicpro/tests/Patient/PatientRecordFieldsTest.php
T
hamedandClaude Opus 4.8 15c6f5dce7 feat(patients): phase A — records list + create/edit form (Figma)
Rebuild the patient records (پرونده‌ها) area, phase A of the Figma redesign:

- BE: add a clinic-scoped `record_number` and a TenantTag `tags` M2M to
  PatientRecord (migration + EAGER-hydrated collection). POST /patient and
  PATCH /patient/{uuid} now accept `record_number` and tenant-scoped `tags`
  (foreign tag → 422); demographic fields (gender, date_of_birth,
  referral_source, description) continue to live on UserProfile via PATCH.
- FE: new PatientsListPage (table + card views, search, pagination, tags
  column, "تشکیل پرونده") at /admin/patients, and PatientRecordFormPage
  (create/edit) that POSTs the record then PATCHes the demographics. Point
  the sidebar "پرونده" entry to the new list.

Phases B–E (tabbed patient file, service stepper, invoice, payments/wallet,
call-center) follow. Backend covered by PHPUnit, FE by Vitest.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 14:54:38 +03:30

54 lines
1.9 KiB
PHP

<?php
namespace App\Tests\Patient;
use App\Doctor\Entity\Doctor;
use App\Patient\Entity\PatientRecord;
use App\Patient\Repository\PatientRecordRepository;
use App\Tag\Entity\TenantTag;
use App\Tests\ApiTestCase;
/**
* PatientRecord carries clinic-scoped case-file fields (record_number, gender,
* birth_date, referral_source, description) and a set of TenantTag labels.
*/
class PatientRecordFieldsTest extends ApiTestCase
{
public function testFieldsAndTagsRoundTrip(): void
{
$owner = $this->createUser(['ROLE_DOCTOR']);
$doctor = new Doctor($owner, 'دکتر');
$this->em->persist($doctor);
$this->em->flush();
$t1 = new TenantTag('doctor', $doctor->getId(), 'فوری', '#FF0000');
$t2 = new TenantTag('doctor', $doctor->getId(), 'پیگیری', '#00AA00');
$this->em->persist($t1);
$this->em->persist($t2);
$this->em->flush();
$patient = $this->createUser(['ROLE_USER']); // random unique mobile — db_test is never reset
$patient->setRealName('بیمار نمونه');
$this->em->flush();
$record = new PatientRecord('doctor', $doctor->getId(), $patient, 'doctor', $doctor->getId());
$record->setRecordNumber('P-1001')
->setTags([$t1, $t2]);
$this->em->persist($record);
$this->em->flush();
$uuid = $record->getUuid();
$this->em->clear();
/** @var PatientRecordRepository $repo */
$repo = static::getContainer()->get(PatientRecordRepository::class);
$reloaded = $repo->findByUuid($uuid);
self::assertNotNull($reloaded);
self::assertCount(2, $reloaded->getTags());
$arr = $reloaded->toArray();
self::assertSame('P-1001', $arr['record_number']);
self::assertCount(2, $arr['tags']);
self::assertSame('فوری', $arr['tags'][0]['name']);
}
}