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>
54 lines
1.9 KiB
PHP
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']);
|
|
}
|
|
}
|