Files
memind/health-mindspace.mjs
T
john 2baf29b3ae feat(health): complete P0 health channel — baseline engine, page-data, MindSpace UI
Deliver encrypted health zone, observation API, baseline maturity pipeline,
page-data bindings, and H5/WeChat channel integration for health P0.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-09 18:04:57 +08:00

70 lines
2.1 KiB
JavaScript

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,
};
}