diff --git a/NodeSrv/apps/healthcheck-survey-bot/src/lib/templateFill.js b/NodeSrv/apps/healthcheck-survey-bot/src/lib/templateFill.js new file mode 100644 index 00000000..c077164e --- /dev/null +++ b/NodeSrv/apps/healthcheck-survey-bot/src/lib/templateFill.js @@ -0,0 +1,26 @@ +function isUnsetSentinel(value) { + return typeof value === "string" && value.startsWith("1899"); +} + +function fillTemplate(template, columns, valueHash) { + const labelToColumnName = new Map(); + for (const column of columns) { + if (column.LabelText) { + labelToColumnName.set(column.LabelText, column.ColumnName); + } + } + + return template.replace(/\{([^{}]+)\}/g, (matched, label) => { + const columnName = labelToColumnName.get(label); + if (!columnName) { + return matched; + } + const value = valueHash[columnName]; + if (value === undefined || value === null || value === "" || isUnsetSentinel(value)) { + return "未設定"; + } + return String(value); + }); +} + +module.exports = { fillTemplate }; diff --git a/NodeSrv/apps/healthcheck-survey-bot/test/templateFill.test.js b/NodeSrv/apps/healthcheck-survey-bot/test/templateFill.test.js new file mode 100644 index 00000000..e5deb8b5 --- /dev/null +++ b/NodeSrv/apps/healthcheck-survey-bot/test/templateFill.test.js @@ -0,0 +1,35 @@ +// test/templateFill.test.js +const { test } = require("node:test"); +const assert = require("node:assert"); +const { fillTemplate } = require("../src/lib/templateFill"); + +const columns = [ + { ColumnName: "Class003", LabelText: "検査機関" }, + { ColumnName: "Date001", LabelText: "検査日" }, +]; + +test("プレースホルダーをレコード値で置換する", () => { + const result = fillTemplate( + "検査機関: {検査機関}\n日程: {検査日}", + columns, + { Class003: "next健診クリニック", Date001: "2026-04-01T00:00:00" } + ); + assert.strictEqual(result, "検査機関: next健診クリニック\n日程: 2026-04-01T00:00:00"); +}); + +test("未設定の日付センチネル値は「未設定」に変換する", () => { + const result = fillTemplate("日程: {検査日}", columns, { + Date001: "1899-12-30T00:00:00", + }); + assert.strictEqual(result, "日程: 未設定"); +}); + +test("値が無い列は「未設定」に変換する", () => { + const result = fillTemplate("検査機関: {検査機関}", columns, {}); + assert.strictEqual(result, "検査機関: 未設定"); +}); + +test("対応するラベルが見つからないプレースホルダーはそのまま残す", () => { + const result = fillTemplate("不明: {存在しないラベル}", columns, {}); + assert.strictEqual(result, "不明: {存在しないラベル}"); +});