task-h.5.3

This commit is contained in:
phaichayon
2026-06-19 17:15:28 +07:00
parent fd01ebf7c7
commit 51d67ef7c2
35 changed files with 4301 additions and 633 deletions

View File

@@ -1,4 +1,6 @@
import {
classifyTemplateField,
computeFieldDiff,
createSqlClient,
getEffectiveMappedKeys,
extractTemplateFields,
@@ -18,11 +20,31 @@ async function main() {
for (const template of templates) {
const fields = extractTemplateFields(template.schemaJson);
const previousVersion =
(
await sql`
select schema_json as "schemaJson", version
from crm_document_template_versions
where template_id = ${template.templateId}
and deleted_at is null
and id <> ${template.versionId}
order by created_at desc
limit 1
`
)[0] ?? null;
const previousFields = previousVersion
? extractTemplateFields(previousVersion.schemaJson)
: [];
const { mappings } = await getMappingsForVersion(sql, template.versionId);
const fieldNames = new Set(fields.map((field) => field.name).filter(Boolean));
const mappedKeys = getEffectiveMappedKeys(fields, mappings);
const duplicateFields = getDuplicateFieldNames(fields);
const unknownFields = getUnknownFieldNames(fields, mappedKeys);
const fieldDiff = computeFieldDiff(fields, previousFields);
const requiredTableFields = ['quotation_price_data'];
const missingRequiredTableFields = requiredTableFields.filter(
(fieldName) => !fields.some((field) => field.name === fieldName && field.type === 'table')
);
const tableFields = fields.filter((field) => field.type === 'table').map((field) => field.name);
const dynamicTopicFields = fields
.filter((field) => field.name === 'topic' || field.name === 'data_topic')
@@ -39,8 +61,14 @@ async function main() {
mapping.placeholderKey !== 'items_table'
)
.map((mapping) => mapping.placeholderKey);
const classifications = fields.map((field) => ({
name: field.name,
type: field.type,
classification: classifyTemplateField(field, mappedKeys)
}));
const status = summarizeIssues([
duplicateFields.length ? 'FAIL' : 'PASS',
missingRequiredTableFields.length ? 'FAIL' : 'PASS',
missingMappings.length ? 'FAIL' : 'PASS',
orphanMappings.length ? 'WARNING' : 'PASS',
unknownFields.length ? 'WARNING' : 'PASS'
@@ -49,12 +77,17 @@ async function main() {
results.push({
templateName: template.templateName,
version: template.version,
previousVersion: previousVersion?.version ?? null,
organizationId: template.organizationId,
schemaFieldCount: fields.length,
tableFields,
missingRequiredTableFields,
dynamicTopicFields,
deletedFields: fieldDiff.deletedFields,
newFields: fieldDiff.newFields,
duplicateFields,
unknownFields,
classifications,
missingMappings,
orphanMappings,
mappedFieldCount: mappings.length,