Files
zkxw/web-admin/src/utils/sample-reception-lab-storage-code.ts
T
2026-06-26 00:50:04 +08:00

66 lines
1.9 KiB
TypeScript

export type SampleReceptionSourceType = 'cell_storage' | 'research_donation'
const SAMPLE_TYPE_PERINATAL_HSC = '围产期造血干细胞'
const SAMPLE_TYPE_UC_MSC = '脐带间充质干细胞'
function normalizeSampleTypeName(name: string): string {
return String(name || '').trim()
}
function normalizeSourceType(source: string): SampleReceptionSourceType {
return source === 'research_donation' ? 'research_donation' : 'cell_storage'
}
function formatYm(d: Date): string {
const pad = (n: number) => String(n).padStart(2, '0')
return `${d.getFullYear()}${pad(d.getMonth() + 1)}`
}
function formatYear(d: Date): string {
return String(d.getFullYear())
}
/** 从接收时间字符串解析参考日期;无效时回退为当前时刻 */
export function parseLabStorageReferenceDate(receptionTime: string): Date {
const s = String(receptionTime || '').trim()
const dateStr = s.length >= 10 ? s.slice(0, 10) : ''
if (!dateStr || dateStr[4] !== '-' || dateStr[7] !== '-') {
return new Date()
}
const [y, m, d] = dateStr.split('-').map((v) => Number(v))
if (!y || !m || !d) return new Date()
return new Date(y, m - 1, d)
}
/**
* 按来源与样本类型预制实验室入库编码;不匹配规则时返回空字符串。
*/
export function buildPrefilledLabStorageCode(
sourceType: string,
sampleTypeName: string,
referenceDate: Date = new Date()
): string {
const source = normalizeSourceType(sourceType)
const typeName = normalizeSampleTypeName(sampleTypeName)
if (source === 'research_donation') {
if (typeName === SAMPLE_TYPE_PERINATAL_HSC) {
return `UBMC${formatYm(referenceDate)}`
}
if (typeName === SAMPLE_TYPE_UC_MSC) {
return `UC${formatYear(referenceDate)}`
}
}
if (source === 'cell_storage') {
if (typeName === SAMPLE_TYPE_UC_MSC) {
return 'BC'
}
if (typeName === SAMPLE_TYPE_PERINATAL_HSC) {
return 'B'
}
}
return ''
}