feat(B09): 설계서 구성표 — 법이 정한 목차와 우리가 내는 것을 맞대 봄
별표2 (5)(가) 가 설계서 작성 순서를 열셋으로 못 박아 두었는데, 우리가 무엇을 내고 무엇을 못 내는지가 계획서에만 있었음. 원가계산에 「설계서 구성」 탭으로 세움. - 법이 적은 차례 그대로. 줄마다 상태(있음·반쪽·없음)와 어디서 나오는지를 적음. - ⚠ 「없음」과 「우리 몫 아님」을 가름 — 일반시방서·특별시방서·예정공정표는 현장을 아는 사람이 쓰는 문서라 프로그램이 지어낼 것이 아님. 법이 목차를 정했다고 열셋을 다 우리가 만드는 것은 아님. - 못 내는 것에는 무엇을 받아야 내는지를 적음(공사설명서 = 서식·설계하중 표기). - 사방사업은 목록이 다름(별표0 은 위치도·관계지적조서·설계도면을 더 둠)을 함께 적음. ⇒ 법이 정한 13 중 7 이 서 있고, 3 은 설계자·발주청 몫, 우리가 더 낼 것은 3 (공사설명서 · 각종 중기경비계산서 · 산출기초). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -189,6 +189,57 @@ export function drawMachineTab(body: HTMLElement, data: BaseDataDto): void {
|
||||
body.append(note("잡재료(주연료의 %)는 연료 소요량에 포함되어 있습니다 — 따로 세지 않습니다."));
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* 설계서 구성표 — 법이 정한 목차와 우리가 내는 것을 맞대 본다(별표2 (5)(가)).
|
||||
* ⚠ 「없음」과 「우리 몫 아님」을 갈라 보인다 — 갈라야 다음에 할 일이 달라진다.
|
||||
* ========================================================================== */
|
||||
|
||||
export interface DesignDocDto {
|
||||
status: string;
|
||||
law: string;
|
||||
summary: string;
|
||||
counts: Record<string, number>;
|
||||
items: Array<{
|
||||
order: number;
|
||||
name: string;
|
||||
status: string;
|
||||
owner: string;
|
||||
where: string;
|
||||
note: string;
|
||||
}>;
|
||||
notes: string[];
|
||||
}
|
||||
|
||||
export async function fetchDesignDocIndex(projectId: string): Promise<DesignDocDto> {
|
||||
const response = await fetch(
|
||||
`${API_BASE_URL}/projects/${encodeURIComponent(projectId)}/estimation/design-doc-index`,
|
||||
{ credentials: "include" },
|
||||
);
|
||||
if (!response.ok) throw new Error(`design-doc-index ${response.status}`);
|
||||
return (await response.json()) as DesignDocDto;
|
||||
}
|
||||
|
||||
export function drawDesignDocTab(body: HTMLElement, data: DesignDocDto): void {
|
||||
body.append(head(`설계서 구성 (법이 정한 ${data.items.length})`));
|
||||
body.append(note(data.summary));
|
||||
body.append(note(data.law));
|
||||
body.append(
|
||||
table(
|
||||
["차례", "이 름", "상 태", "누가 만드나", "어디서 나오나", "비 고"],
|
||||
data.items.map((row) => [
|
||||
String(row.order),
|
||||
row.name,
|
||||
row.status,
|
||||
row.owner,
|
||||
row.where || "—",
|
||||
row.note,
|
||||
]),
|
||||
[0, 1, 2, 3, 4, 5],
|
||||
),
|
||||
);
|
||||
for (const line of data.notes) body.append(note(line));
|
||||
}
|
||||
|
||||
/** 두 탭이 함께 쓰는 「아직 못 불러왔습니다」 문구. */
|
||||
export function drawBaseDataError(body: HTMLElement): void {
|
||||
body.append(note(L("B09_Estimation_Tab_Pending")));
|
||||
|
||||
Reference in New Issue
Block a user