feat(migrations): update franchise to percentage in tenant_insurances and tenant_service_coverage
- Changed franchise_rials to franchise_percent in tenant_insurances and tenant_service_coverage tables. - Reset old rial values to 0/NULL as they are not convertible to percentage. feat(command): add SeedInsuranceScenarioCommand for seeding insurance data - Implemented a command to seed supplementary insurance contracts, patients, and claims for a specified doctor. - Includes functionality for purging existing scenario data and generating new entries with predefined contracts and patient scenarios.
This commit is contained in:
@@ -89,17 +89,23 @@ describe('patientShareOf — آینهی BillingCalculator', () => {
|
||||
});
|
||||
|
||||
it('فرانشیز بیمهٔ پایه سهم بیمار را زیاد نمیکند', () => {
|
||||
const share = patientShareOf(600_000, { covered: true, percent: 100, franchise: 50_000, ceiling: null }, null);
|
||||
const share = patientShareOf(600_000, { covered: true, percent: 100, franchise: 50, ceiling: null }, null);
|
||||
expect(share).toBe(0);
|
||||
});
|
||||
|
||||
it('فرانشیز بیمهٔ تکمیلی به سهم بیمار اضافه میشود', () => {
|
||||
it('فرانشیز درصدیِ تکمیلی از سهم بیمه کم میشود', () => {
|
||||
// پایه ۷۰٪ → ۴۲۰٬۰۰۰؛ باقیمانده ۱۸۰٬۰۰۰؛ تکمیلی ۱۰۰٪ منهای فرانشیز ۱۰٪ → ۱۶۲٬۰۰۰.
|
||||
const share = patientShareOf(
|
||||
600_000,
|
||||
{ covered: true, percent: 70, franchise: 90_000, ceiling: null },
|
||||
{ covered: true, percent: 100, franchise: 50_000, ceiling: null },
|
||||
{ covered: true, percent: 70, franchise: 50, ceiling: null },
|
||||
{ covered: true, percent: 100, franchise: 10, ceiling: null },
|
||||
);
|
||||
expect(share).toBe(50_000);
|
||||
expect(share).toBe(18_000);
|
||||
});
|
||||
|
||||
it('فرانشیز بزرگتر از تعهد، سهم بیمه را صفر میکند نه منفی', () => {
|
||||
const share = patientShareOf(600_000, null, { covered: true, percent: 20, franchise: 80, ceiling: null });
|
||||
expect(share).toBe(600_000);
|
||||
});
|
||||
|
||||
it('سقف تعهد سهم بیمه را محدود میکند', () => {
|
||||
@@ -117,7 +123,7 @@ describe('patientShareOf — آینهی BillingCalculator', () => {
|
||||
|
||||
const BASIC_CONTRACT = {
|
||||
uuid: 'c1', insurance_id: 3, insurance_name: 'بیمه ایران', insurance_kind: 'basic',
|
||||
is_active: true, coverage_percent: 70, franchise_rials: 0, annual_ceiling_rials: null,
|
||||
is_active: true, coverage_percent: 70, franchise_percent: 0, annual_ceiling_rials: null,
|
||||
category_coverages: { outpatient: 70, inpatient: 30 },
|
||||
};
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
} from '../../lib/insuranceShares';
|
||||
|
||||
interface Contract extends TenantContract { uuid: string }
|
||||
interface CoverageRow { service_item_uuid: string | null; covered: boolean; coverage_percent: number | null; franchise_rials: number | null; ceiling_rials: number | null }
|
||||
interface CoverageRow { service_item_uuid: string | null; covered: boolean; coverage_percent: number | null; franchise_percent: number | null; ceiling_rials: number | null }
|
||||
interface InventoryItemRow { uuid: string; name: string; unit: string; price: number; stock: number; status: string }
|
||||
interface PackageRow { uuid: string; title: string; total: number; available: boolean }
|
||||
interface StaffRow { uuid: string; full_name: string; active?: boolean }
|
||||
@@ -208,7 +208,7 @@ export default function CreateStep({ recordUuid, profile, onCreated, onCancel, e
|
||||
return {
|
||||
covered: true,
|
||||
percent: ov?.coverage_percent ?? contractPercentFor(contract, category),
|
||||
franchise: isSupplementary ? (ov?.franchise_rials ?? contract.franchise_rials) : 0,
|
||||
franchise: isSupplementary ? (ov?.franchise_percent ?? contract.franchise_percent) : 0,
|
||||
ceiling: ov?.ceiling_rials ?? contract.annual_ceiling_rials,
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user