feat(patient): implement record number pattern management
- Add RecordNumberSettingsController for managing patient record number patterns. - Create RecordNumberPattern entity to represent the pattern configuration. - Implement RecordNumberPatternRepository for database interactions. - Develop RecordNumberGenerator service for generating and validating record numbers. - Add tests for record number generation, backfilling, and API interactions. - Ensure proper access control for viewing and updating patterns based on user roles.
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
import { toast } from 'sonner';
|
||||
import { api, ApiError, type ApiResponse } from '../lib/api';
|
||||
|
||||
export type RecordNumberResetPolicy = 'none' | 'yearly' | 'monthly';
|
||||
|
||||
export interface RecordNumberSettings {
|
||||
enabled: boolean;
|
||||
pattern: string;
|
||||
reset_policy: RecordNumberResetPolicy;
|
||||
counter: number;
|
||||
/** شمارهٔ بعدی، بدون مصرفکردن شمارنده. */
|
||||
next_preview: string;
|
||||
/** فقط صاحب مجموعه (و ادمین) اجازهٔ ذخیره دارد؛ گیت اصلی سمت سرور است. */
|
||||
can_edit: boolean;
|
||||
}
|
||||
|
||||
const KEY = ['record-number-settings'];
|
||||
|
||||
/**
|
||||
* الگوی شمارهٔ پروندهٔ محیط جاری.
|
||||
*
|
||||
* هم صفحهٔ تنظیمات از آن میخواند، هم فرم پرونده — فرم باید بداند شماره خودکار
|
||||
* ساخته میشود یا هنوز دستی است.
|
||||
*/
|
||||
export function useRecordNumberSettings() {
|
||||
const qc = useQueryClient();
|
||||
|
||||
const query = useQuery({
|
||||
queryKey: KEY,
|
||||
queryFn: () => api.get<ApiResponse<RecordNumberSettings>>('/api/v1/patient-record-number-settings'),
|
||||
staleTime: 60_000,
|
||||
// منشیِ بدون مجوز `patients.view` اینجا ۴۰۳ میگیرد؛ تلاش دوباره چیزی عوض نمیکند.
|
||||
retry: false,
|
||||
});
|
||||
|
||||
const save = useMutation({
|
||||
mutationFn: (d: Pick<RecordNumberSettings, 'enabled' | 'pattern' | 'reset_policy'>) =>
|
||||
api.put<ApiResponse<RecordNumberSettings>>('/api/v1/patient-record-number-settings', d),
|
||||
onSuccess: () => {
|
||||
toast.success('الگوی شماره پرونده ذخیره شد');
|
||||
qc.invalidateQueries({ queryKey: KEY });
|
||||
},
|
||||
onError: (e) => toast.error(e instanceof ApiError ? e.message : 'ذخیرهٔ الگو ناموفق بود'),
|
||||
});
|
||||
|
||||
return { settings: query.data?.data ?? null, loading: query.isLoading, save };
|
||||
}
|
||||
Reference in New Issue
Block a user