import { HEALTH_CATEGORY_CODE, HEALTH_PUBLISH_POLICY, } from './health-feature.mjs'; import { assertHealthShareDatasetPolicy, HEALTH_ALLOWED_ACCESS_MODES, HEALTH_SHARE_FORBIDDEN_DATASETS, } from './health-publish-guard.mjs'; export const HEALTH_MINDSPACE_DESCRIPTION = '加密健康档案:报告原图、Timeline 摘要页。禁止完全公开,分享须口令或登录。'; export const HEALTH_PUBLISH_ACCESS_MODES = Object.freeze([...HEALTH_ALLOWED_ACCESS_MODES]); export function isHealthCategoryCode(categoryCode) { return String(categoryCode ?? '') === HEALTH_CATEGORY_CODE; } export function isHealthPublishPolicyCategory(category) { if (!category) return false; return ( isHealthCategoryCode(category.category_code ?? category.categoryCode) || String(category.publish_policy ?? category.publishPolicy ?? '') === HEALTH_PUBLISH_POLICY ); } export function filterAccessModesForCategory(categoryCode, accessModeLabels) { if (!isHealthCategoryCode(categoryCode)) { return accessModeLabels; } return Object.fromEntries( Object.entries(accessModeLabels).filter(([mode]) => HEALTH_PUBLISH_ACCESS_MODES.includes(mode), ), ); } export function defaultAccessModeForCategory(categoryCode, current = 'public') { if (!isHealthCategoryCode(categoryCode)) return current; if (HEALTH_PUBLISH_ACCESS_MODES.includes(current)) return current; return 'password'; } export function filterPageDataDatasetsForCategory(categoryCode, datasets = []) { if (!isHealthCategoryCode(categoryCode)) return datasets; return datasets.filter((dataset) => !HEALTH_SHARE_FORBIDDEN_DATASETS.includes(dataset.name)); } export function assertHealthCategoryPageDataBind({ categoryCode = null, publishPolicy = null, datasetName, columns = {}, } = {}) { if (!isHealthPublishPolicyCategory({ category_code: categoryCode, publish_policy: publishPolicy })) { return { ok: true, skipped: true }; } return assertHealthShareDatasetPolicy({ datasetName, columns }); } export function healthCategoryPageDataDefaults() { return { read: true, insert: false, update: false, softDelete: false, }; }