import type { Issue } from '../types'; export interface AbutImportIssueGroup { name?: string; primary: Issue[]; related: Issue[]; } /** Keep root errors visible while retaining every dependent row in a disclosure. */ export function groupAbutImportIssues(issues: readonly Issue[]): AbutImportIssueGroup[] { const groups: { name?: string; issues: Issue[] }[] = []; const byName = new Map(); for (const issue of issues) { if (issue.pier === undefined) { groups.push({ issues: [issue] }); continue; } let group = byName.get(issue.pier); if (!group) { group = { name: issue.pier, issues: [] }; byName.set(issue.pier, group); groups.push(group); } group.issues.push(issue); } return groups.map(({ name, issues: items }) => { const primary = items.filter((issue) => issue.code !== 'AP04'); const related = items.filter((issue) => issue.code === 'AP04'); if (!primary.length && related.length) primary.push({ ...related[0], message: `교대 ${name ?? ''}: 교대 정보 행이 없어 IP·받침 ${related.length}개 행을 연결하지 못했습니다. 전체 교대명을 확인하세요.`, }); return { name, primary, related }; }); }