feat: 社員マスタ(504412)照合ロジック(メール整合性チェック・フリガナ補完)を追加
This commit is contained in:
parent
1b8018da6e
commit
c03a2376ca
@ -0,0 +1,18 @@
|
||||
// src/lib/employeeMasterCheck.js
|
||||
function checkEmailConsistency(pleasanterEmail, masterRecord) {
|
||||
const masterEmail = masterRecord.Class036 || masterRecord.ClassB || null;
|
||||
if (!masterEmail) {
|
||||
return { consistent: false, masterEmail: null };
|
||||
}
|
||||
return { consistent: masterEmail === pleasanterEmail, masterEmail };
|
||||
}
|
||||
|
||||
function resolveKanaFromMaster(masterRecord) {
|
||||
return [masterRecord.Class003, masterRecord.Class004].filter(Boolean).join(" ");
|
||||
}
|
||||
|
||||
function needsKanaFill(currentKana) {
|
||||
return currentKana === null || currentKana === undefined || currentKana === "";
|
||||
}
|
||||
|
||||
module.exports = { checkEmailConsistency, resolveKanaFromMaster, needsKanaFill };
|
||||
@ -0,0 +1,56 @@
|
||||
// test/employeeMasterCheck.test.js
|
||||
const { test } = require("node:test");
|
||||
const assert = require("node:assert");
|
||||
const {
|
||||
checkEmailConsistency,
|
||||
resolveKanaFromMaster,
|
||||
needsKanaFill,
|
||||
} = require("../src/lib/employeeMasterCheck");
|
||||
|
||||
test("checkEmailConsistency: PLメールアドレス(Class036)と一致すればconsistent:true", () => {
|
||||
const result = checkEmailConsistency("taro.yamada@next-hd.co.jp", {
|
||||
Class036: "taro.yamada@next-hd.co.jp",
|
||||
ClassB: "taro.yamada@example.com",
|
||||
});
|
||||
assert.deepStrictEqual(result, { consistent: true, masterEmail: "taro.yamada@next-hd.co.jp" });
|
||||
});
|
||||
|
||||
test("checkEmailConsistency: Class036が無ければClassBにフォールバックする", () => {
|
||||
const result = checkEmailConsistency("taro.yamada@example.com", {
|
||||
ClassB: "taro.yamada@example.com",
|
||||
});
|
||||
assert.deepStrictEqual(result, { consistent: true, masterEmail: "taro.yamada@example.com" });
|
||||
});
|
||||
|
||||
test("checkEmailConsistency: 不一致ならconsistent:false", () => {
|
||||
const result = checkEmailConsistency("taro.yamada@next-hd.co.jp", {
|
||||
Class036: "different@next-hd.co.jp",
|
||||
});
|
||||
assert.deepStrictEqual(result, { consistent: false, masterEmail: "different@next-hd.co.jp" });
|
||||
});
|
||||
|
||||
test("checkEmailConsistency: マスタ側にメールが無ければmasterEmail:null・consistent:false", () => {
|
||||
const result = checkEmailConsistency("taro.yamada@next-hd.co.jp", {});
|
||||
assert.deepStrictEqual(result, { consistent: false, masterEmail: null });
|
||||
});
|
||||
|
||||
test("resolveKanaFromMaster: 姓カナ+名カナを空白区切りで結合する", () => {
|
||||
assert.strictEqual(
|
||||
resolveKanaFromMaster({ Class003: "ヤマダ", Class004: "タロウ" }),
|
||||
"ヤマダ タロウ"
|
||||
);
|
||||
});
|
||||
|
||||
test("resolveKanaFromMaster: 片方欠けていても結合できる", () => {
|
||||
assert.strictEqual(resolveKanaFromMaster({ Class003: "ヤマダ" }), "ヤマダ");
|
||||
});
|
||||
|
||||
test("needsKanaFill: 空文字・未定義はtrue", () => {
|
||||
assert.strictEqual(needsKanaFill(""), true);
|
||||
assert.strictEqual(needsKanaFill(undefined), true);
|
||||
assert.strictEqual(needsKanaFill(null), true);
|
||||
});
|
||||
|
||||
test("needsKanaFill: 値が入っていればfalse", () => {
|
||||
assert.strictEqual(needsKanaFill("ヤマダ タロウ"), false);
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user