Initial commit: HealthCarePregnant project documentation and platform

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
selfrelease
2026-06-18 09:48:05 +08:00
commit eab91174db
301 changed files with 42491 additions and 0 deletions
@@ -0,0 +1,45 @@
import { Injectable } from '@nestjs/common';
import { PregnancyCase } from './case.types';
import { CarePlan } from './care-plan.types';
/** 个案与照护计划仓储抽象(内存实现,后续接入 DB)。 */
export abstract class CaseflowRepository {
abstract saveCase(c: PregnancyCase): Promise<PregnancyCase>;
abstract findCaseById(id: string): Promise<PregnancyCase | null>;
abstract findCaseByPatient(patientId: string): Promise<PregnancyCase | null>;
abstract savePlan(p: CarePlan): Promise<CarePlan>;
abstract findPlansByCase(caseId: string): Promise<CarePlan[]>;
}
@Injectable()
export class InMemoryCaseflowRepository extends CaseflowRepository {
private readonly cases = new Map<string, PregnancyCase>();
private readonly plans: CarePlan[] = [];
async saveCase(c: PregnancyCase): Promise<PregnancyCase> {
this.cases.set(c.id, c);
return c;
}
async findCaseById(id: string): Promise<PregnancyCase | null> {
return this.cases.get(id) ?? null;
}
async findCaseByPatient(patientId: string): Promise<PregnancyCase | null> {
for (const c of this.cases.values()) {
if (c.patientId === patientId) return c;
}
return null;
}
async savePlan(p: CarePlan): Promise<CarePlan> {
const idx = this.plans.findIndex((x) => x.id === p.id);
if (idx >= 0) this.plans[idx] = p;
else this.plans.push(p);
return p;
}
async findPlansByCase(caseId: string): Promise<CarePlan[]> {
return this.plans.filter((p) => p.caseId === caseId);
}
}