fix(c1): elder 建档日期字段转 Date 落库(修复 50000)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
liuyun 2026-10-14 21:23:21 +08:00
parent 0cbdb7f825
commit a949acbc3b
2 changed files with 43 additions and 3 deletions

View File

@ -132,7 +132,7 @@ describe('ElderService', () => {
});
});
it('create 待遇有效期覆盖今天 → treatStatus = active,且出生日期由身份证带出', async () => {
it('create 待遇有效期覆盖今天 → treatStatus = active,且出生日期由身份证带出为 Date', async () => {
const { service, elderCreate } = makeService();
await runWithRequestContext(ctx, () =>
@ -140,7 +140,35 @@ describe('ElderService', () => {
);
expect(elderCreate).toHaveBeenCalledWith({
data: expect.objectContaining({ treatStatus: 'active', birthDate: '1990-01-01' }),
data: expect.objectContaining({ treatStatus: 'active', birthDate: expect.any(Date) }),
});
});
it('合法建档(含日期字段)成功创建,日期字段转为 Date', async () => {
const { service, elderCreate } = makeService();
await runWithRequestContext(ctx, () =>
service.createElder({
...baseDto,
benefitStart: '2025-01-01',
benefitEnd: '2025-12-31',
assessDate: '2025-01-15',
insurVerifyDate: '2025-01-10',
hospStart: '2025-02-01',
hospEnd: '2025-02-05',
}),
);
expect(elderCreate).toHaveBeenCalledWith({
data: expect.objectContaining({
birthDate: expect.any(Date),
benefitStart: expect.any(Date),
benefitEnd: expect.any(Date),
assessDate: expect.any(Date),
insurVerifyDate: expect.any(Date),
hospStart: expect.any(Date),
hospEnd: expect.any(Date),
}),
});
});

View File

@ -52,6 +52,12 @@ function resolveInitialStatus(benefitStart?: string, benefitEnd?: string): strin
return 'waiting_period';
}
/** YYYY-MM-DD → 本地零点 Date(供 Prisma DateTime @db.Date 列写入);空值返回 undefined。 */
function toDateOnly(v?: string): Date | undefined {
if (!v) return undefined;
return new Date(`${v}T00:00:00`);
}
/**
* 老人档案(elder)业务服务。elder 是租户级软删模型,读写经 Prisma 扩展自动注入
* tenantCode / deletedAt 过滤;创建时 tenantCode/createdBy 由 BaseCrudService 注入。
@ -101,9 +107,15 @@ export class ElderService extends BaseCrudService {
return super.create({
...dto,
idCardNo,
birthDate,
birthDate: toDateOnly(birthDate),
treatStatus,
statusSource: 'manual',
benefitStart: toDateOnly(dto.benefitStart),
benefitEnd: toDateOnly(dto.benefitEnd),
assessDate: toDateOnly(dto.assessDate),
insurVerifyDate: toDateOnly(dto.insurVerifyDate),
hospStart: toDateOnly(dto.hospStart),
hospEnd: toDateOnly(dto.hospEnd),
});
}