improvement: v1 standalone treatment/case creation made possible.

This commit is contained in:
2026-08-19 15:05:58 +03:30
parent e5c39c6b7e
commit 8bfa8c88fe
39 changed files with 3296 additions and 387 deletions

View File

@@ -149,7 +149,16 @@ export const ErrorCode = {
TREATMENT_CASE_INVALID_ATTACHMENTS: 'TREATMENT_CASE_INVALID_ATTACHMENTS',
TREATMENT_TOOTH_PROSTHESIS_INCOMPLETE: 'TREATMENT_TOOTH_PROSTHESIS_INCOMPLETE',
TREATMENT_DETAIL_SENT: 'TREATMENT_DETAIL_SENT',
TREATMENT_NOT_FOUND: 'TREATMENT_NOT_FOUND',
TREATMENT_PATIENT_OR_WALK_IN: 'TREATMENT_PATIENT_OR_WALK_IN',
TREATMENT_NOT_STANDALONE: 'TREATMENT_NOT_STANDALONE',
TREATMENT_HAS_DETAILS: 'TREATMENT_HAS_DETAILS',
LAB_CASE_NOT_FOUND: 'LAB_CASE_NOT_FOUND',
LAB_CASE_NOT_EDITABLE: 'LAB_CASE_NOT_EDITABLE',
LAB_CASE_ALREADY_STARTED: 'LAB_CASE_ALREADY_STARTED',
LAB_CASE_LINES_REQUIRED: 'LAB_CASE_LINES_REQUIRED',
LAB_CASE_START_INCOMPLETE: 'LAB_CASE_START_INCOMPLETE',
LAB_CASE_CLIENT_REQUIRED: 'LAB_CASE_CLIENT_REQUIRED',
TASK_ASSIGNEE_INVALID: 'TASK_ASSIGNEE_INVALID',
TASK_ASSIGNED_TO_OTHER: 'TASK_ASSIGNED_TO_OTHER',

View File

@@ -0,0 +1,40 @@
import type { Prisma } from '@prisma/client';
import type { PrismaService } from '../../prisma/prisma.service';
export const WALK_IN_MOBILE_PREFIX = '__walkin__:';
export function walkInMobileForOrganization(organizationId: string): string {
return `${WALK_IN_MOBILE_PREFIX}${organizationId}`;
}
export function isWalkInMobile(mobile: string): boolean {
return mobile.startsWith(WALK_IN_MOBILE_PREFIX);
}
type PrismaClientLike = PrismaService | Prisma.TransactionClient;
/** One sentinel Patient per clinic for treatments without a named patient. */
export async function ensureWalkInPatient(
prisma: PrismaClientLike,
organizationId: string,
): Promise<{ id: string; isWalkIn: true }> {
const existing = await prisma.patient.findFirst({
where: { createdByOrganizationId: organizationId, isWalkIn: true },
select: { id: true },
});
if (existing) {
return { id: existing.id, isWalkIn: true };
}
const created = await prisma.patient.create({
data: {
firstName: 'Walk-in',
lastName: 'Walk-in',
mobile: walkInMobileForOrganization(organizationId),
isWalkIn: true,
createdByOrganizationId: organizationId,
},
select: { id: true },
});
return { id: created.id, isWalkIn: true };
}