diff --git a/M02_MasterTemplete/M02_MasterTemplete_Store.py b/M02_MasterTemplete/M02_MasterTemplete_Store.py index c7147d19..4522430b 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Store.py +++ b/M02_MasterTemplete/M02_MasterTemplete_Store.py @@ -19,9 +19,8 @@ from M02_MasterTemplete import M02_Template_Layers as layers FOLDER: Path = Path(__file__).resolve().parent.parent / "resources" / "master_template" KINDS = layers.KINDS # 시험은 FOLDER 를 사본으로 바꿈 -# 구조물 도면 = 구조물집계표 열 id 마다 하나(파일 이름 = 열 id) · 새로 만들 때 A1 도각을 깖 +# 구조물 도면 = 구조물집계표 열 id 마다 하나(파일 이름 = 열 id) · 도각 없는 전용 화면(그린 만큼이 설계 영역) STRUCTURE_TABLE = "구조물집계표" -STRUCTURE_FRAME = "00_template_A1" _BASIS_HEAD = (("work", "공종"), ("spec", "규격"), ("detail", "산출 내역"), ("unit", "단위")) _NUMBER = re.compile(r"^구-(\d+)$") _BAD_NAME = re.compile(r'[\\/:*?"<>|\x00-\x1f]|\.\.') @@ -80,7 +79,9 @@ def _check_skeleton(kind: str, doc: Any) -> None: def write(kind: str, name: str, version: str, doc: Any) -> dict[str, Any]: - """`version` 이 빈 글이면 새로 만듦(이미 있으면 409) · 아니면 그 판일 때만 덮어씀.""" + """`version` 이 빈 글이면 새로 만듦(이미 있으면 409) · 아니면 그 판일 때만 덮어씀. + 구조물집계표를 저장하면 — 새 열의 빈 구조물 도면도 같이 만듦(잠금 밖에서 · `create_structure` + 가 다시 잠금을 잡으므로 안에서 부르면 죽음).""" path = _path(kind, name) _check_skeleton(kind, doc) with _LOCK: @@ -88,7 +89,10 @@ def write(kind: str, name: str, version: str, doc: Any) -> dict[str, Any]: if have != (version or ""): raise StoreError(409, {"stale": [name], "판": have}) atomic_write_json(path, doc) - return _info(kind, path) + info = _info(kind, path) + if kind == "table" and name == STRUCTURE_TABLE: + backfill_missing_structures() + return info def delete(kind: str, name: str, version: str | None = None) -> None: @@ -127,9 +131,10 @@ def create_structure(column: str) -> dict[str, Any]: table = read("table", STRUCTURE_TABLE)["문서"] if column not in {col.get("id") for col in table.get("열", []) if isinstance(col, dict)}: raise StoreError(404, f"{STRUCTURE_TABLE}에 없는 열 「{column}」") - frame = read("drawing", STRUCTURE_FRAME)["문서"] basis = [{"id": key, "머리": [label], "단위": None, "꼴": "글"} for key, label in _BASIS_HEAD] basis.append({"id": "qty", "머리": ["수량(m당)"], "단위": None, "꼴": "수"}) + # 빈 줄 몇 개를 미리 둠 — 「줄 더하기」 안 눌러도 바로 입력하게 + basis_rows = [{"id": str(i), "값": {}} for i in range(1, 4)] with _LOCK: if path.is_file(): raise StoreError(409, f"이미 있는 구조물 도면 「{column}」") @@ -140,8 +145,26 @@ def create_structure(column: str) -> dict[str, Any]: "판": 1, "열": column, "도번": f"구-{number:02d}", - "도면": frame, - "산출근거": {"양식": "산출근거", "종류": "표", "판": 1, "열": basis, "줄": []}, + "도면": {"format": 6, "entities": []}, + "산출근거": {"양식": "산출근거", "종류": "표", "판": 1, "열": basis, "줄": basis_rows}, } atomic_write_json(path, doc) return read("structure", column) + + +def backfill_missing_structures() -> list[str]: + """구조물집계표 열마다 빈 구조물 도면이 있게 — 없는 열만 열 차례로 새로 만듦(도번 이어서). + 그 사이 남이 만들었거나(409) 열 규칙에 안 맞으면(404) 그 열만 건너뜀.""" + table = read("table", STRUCTURE_TABLE)["문서"] + have = {name for name, _ in _structures()} + made: list[str] = [] + for col in table.get("열", []): + cid = col.get("id") if isinstance(col, dict) else None + if not cid or cid in have: + continue + try: + create_structure(cid) + made.append(cid) + except StoreError: + pass + return made diff --git a/M02_MasterTemplete/M02_MasterTemplete_Structure.css b/M02_MasterTemplete/M02_MasterTemplete_Structure.css index b75bcb29..547f55ae 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Structure.css +++ b/M02_MasterTemplete/M02_MasterTemplete_Structure.css @@ -1,4 +1,5 @@ -/* M02 구조물집계표 아래 설계 컨테이너 — 머리 줄 · 도면 미리보기 · 상세 산출근거 표. */ +/* M02 구조물집계표 아래 설계 컨테이너 — 카드 둘(도면 정보 · 상세 산출근거) · + 카드 모양은 좌측 패널과 같은 공용 ui-sidebar-*(ui_template_overlay.css). */ /* 표 밖 형제 자리 — 비어 있을 때 메인 간격이 벌어지지 않게 칸을 지움. */ .m02-main__extra { @@ -6,14 +7,16 @@ } .m02-struct { - display: flex; - flex-direction: column; - gap: var(--spacing-8); padding-top: var(--spacing-12); border-top: 1px solid var(--color-border); min-width: 0; } +/* ui-sidebar-panel 은 display:flex 라 hidden 속성을 덮어씀 — 안 보일 땐 확실히 안 보이게 */ +.m02-struct[hidden] { + display: none; +} + .m02-struct__head, .m02-struct__subhead { display: flex; @@ -22,8 +25,7 @@ min-width: 0; } -.m02-struct__title, -.m02-struct__subtitle { +.m02-struct__title { margin: 0; overflow: hidden; color: var(--color-text); diff --git a/M02_MasterTemplete/M02_MasterTemplete_Structure.ts b/M02_MasterTemplete/M02_MasterTemplete_Structure.ts index 4a86a9cb..0dee58a3 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Structure.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_Structure.ts @@ -1,17 +1,18 @@ /* ============================================================================= * M02_MasterTemplete_Structure.ts * 구조물집계표 아래 설계 컨테이너 — 고른 열의 구조물 도면 미리보기 · [도면 수정] · 상세 산출근거 표. + * 카드 둘(도면 정보 · 상세 산출근거)은 좌측 패널과 같은 공용 ui-sidebar 틀. * * 구조물 도면은 집계표 열마다 하나(`resources/master_template/structure/<열 id>.json`) · - * 도번은 서버가 매김(`구-01` 꼴 · 없으면 「없음」) · 문서 = {열 · 도번 · 도면(CAD) · 산출근거(표)}. + * 서버가 열마다 미리 만들어 둠(도번 자동 · 새 열도 집계표 저장 때 서버가 같이 만듦 — `M02_MasterTemplete_Store.py`). * 이 칸은 표 부품 host 밖 형제 자리에 붙음 — 집계표는 그대로 두고 여기만 열마다 다시 그림. * 글자는 이 파일에 둠(도면 부품 `M02_MasterTemplete_Drawing.ts` 와 같은 방식). * ========================================================================== */ import { createButton, el, showConfirmDialog, showToast } from "@ui/ui_template_elements"; +import { attachCollapsible } from "@ui/ui_template_collapsible"; import { createSheet, type SheetDoc, type SheetHandle } from "@ui/sheet/ui_template_sheet"; import { - createStructure, fetchStructureNumbers, readTemplate, saveTemplate, @@ -29,20 +30,18 @@ import "./M02_MasterTemplete_Structure.css"; export const STRUCTURE_TABLE = "구조물집계표"; const TEXT = { + drawingInfo: "도면 정보", edit: "도면 수정", save: "산출근거 저장", basis: "상세 산출근거", noNumber: "도번 없음", - noDrawing: "도면 없음 — [도면 수정] 을 누르면 새로 만들어 엶", + noDrawing: "도면 없음", noBasis: "표 없음 — 도면이 아직 없음", - pick: "집계표에서 열을 고를 것", - created: "구조물 도면을 만들었음 — {value}", saved: "산출근거를 저장했음", dirty: "저장 안 한 산출근거 고침이 있음 — 버리고 넘어갈까?", kept: "열을 바꾸지 않음 — 산출근거를 먼저 저장할 것", stale: "그 사이 구조물 도면이 바뀜 — 열을 다시 고를 것", readFailed: "구조물 도면을 못 읽음 — {value}", - makeFailed: "구조물 도면을 못 만듦 — {value}", saveFailed: "저장 못 함 — {value}", }; @@ -60,12 +59,10 @@ export const columnHead = (col: StructureColumn): string => col.머리.filter((part): part is string => !!part && part.trim() !== "").join(" · ") || col.id; export interface StructurePanelOptions { - /** 시스템 관리자만 새로 만들고 저장함 */ + /** 시스템 관리자만 저장함(구조물 도면은 서버가 미리 만들어 둠) */ isAdmin: boolean; - /** [도면 수정] — 그 열 구조물 도면을 CAD 편집으로 엶(페이지의 `open`) */ - onEdit: (column: string) => void; - /** 새로 만든 뒤 — 집계표 도면 줄을 새 도번으로 다시 그림 */ - onCreated: () => void; + /** [도면 수정] — 그 열 구조물 도면을 CAD 편집으로 엶(페이지의 `open`) · label 은 화면 제목에 씀 */ + onEdit: (column: string, label: string) => void; /** 집계표에 저장 안 한 고침이 있으면 버릴지 물음 — 취소면 false */ confirmLeave: () => Promise; } @@ -84,6 +81,7 @@ export interface StructurePanelHandle { export function createStructurePanel(opts: StructurePanelOptions): StructurePanelHandle { let numbers: Record = {}; let column: string | null = null; + let columnLabel = ""; let doc: StructureDoc | null = null; let version = ""; let preview: DrawingTemplateHandle | null = null; @@ -92,26 +90,37 @@ export function createStructurePanel(opts: StructurePanelOptions): StructurePane let busy = false; let seq = 0; - const title = el("h3", { className: "m02-struct__title", text: TEXT.pick }); + const columnName = el("span", { className: "m02-struct__title" }); const number = el("span", { className: "m02-struct__no" }); const edit = createButton({ label: TEXT.edit, variant: "filled" }); - const saveBasis = createButton({ label: TEXT.save, variant: "ghost" }); const previewHost = el("div", { className: "m02-struct__preview" }); - const basisHost = el("div", { className: "m02-struct__sheet" }); - const root = el("section", { - className: "m02-struct", - attrs: { hidden: "" }, + const infoCard = el("section", { + className: "m02-struct__card ui-collapsible ui-sidebar-section ui-sidebar-card", children: [ - el("div", { className: "m02-struct__head", children: [title, number, edit] }), + el("h3", { className: "ui-collapsible__title", text: TEXT.drawingInfo }), + el("div", { className: "m02-struct__head", children: [columnName, number, edit] }), previewHost, - el("div", { - className: "m02-struct__subhead", - children: [el("h4", { className: "m02-struct__subtitle", text: TEXT.basis }), saveBasis], - }), + ], + }); + + const saveBasis = createButton({ label: TEXT.save, variant: "ghost" }); + const basisHost = el("div", { className: "m02-struct__sheet" }); + const basisCard = el("section", { + className: "m02-struct__card ui-collapsible ui-sidebar-section ui-sidebar-card", + children: [ + el("h3", { className: "ui-collapsible__title", text: TEXT.basis }), + el("div", { className: "m02-struct__subhead", children: [saveBasis] }), basisHost, ], }); + const root = el("div", { + className: "m02-struct ui-sidebar-panel", + attrs: { hidden: "" }, + children: [infoCard, basisCard], + }); + attachCollapsible(root); + const drop = (): void => { preview?.destroy(); preview = null; @@ -136,7 +145,7 @@ export function createStructurePanel(opts: StructurePanelOptions): StructurePane apply(); }; - /** 미리보기 · 산출근거 표 — 문서가 없으면 없음 글 */ + /** 미리보기 · 산출근거 표 — 문서가 없으면 없음 글(서버가 열마다 미리 만들어 둬 보통은 없음) */ const paintBody = (): void => { drop(); number.textContent = doc?.도번 || numbers[column ?? ""] || TEXT.noNumber; @@ -174,7 +183,8 @@ export function createStructurePanel(opts: StructurePanelOptions): StructurePane } root.hidden = false; column = col.id; - title.textContent = columnHead(col); + columnLabel = columnHead(col); + columnName.textContent = columnLabel; number.textContent = numbers[col.id] ?? TEXT.noNumber; doc = null; version = ""; @@ -236,25 +246,7 @@ export function createStructurePanel(opts: StructurePanelOptions): StructurePane if (basisDirty && !(await showConfirmDialog(TEXT.dirty))) return; basisDirty = false; if (!(await opts.confirmLeave())) return; - if (!doc) { - busy = true; - edit.disabled = true; - try { - const got = await createStructure(at); - doc = got.문서 as StructureDoc; - version = got.판 ?? ""; - numbers = await fetchStructureNumbers(); - showToast(fill(TEXT.created, doc.도번), "success"); - opts.onCreated(); // 좌측 목록 · 집계표 도면 줄 - } catch (error) { - showToast(fill(TEXT.makeFailed, why(error)), "error"); - return; - } finally { - busy = false; - edit.disabled = false; - } - } - opts.onEdit(at); + opts.onEdit(at, columnLabel); }); return { diff --git a/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts b/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts index 3dfe7e5c..20328a0f 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts @@ -28,6 +28,8 @@ export interface Selection { projectId: string | null; kind: Kind; name: string; + /** 화면 제목에 쓸 글 — 없으면 name 그대로(구조물 도면은 열 머리글) */ + label?: string; } interface EditorHandle { @@ -140,14 +142,10 @@ export function createMain(isAdmin: boolean, onSaved?: () => void): MainHandle { const made = createStructurePanel({ isAdmin, confirmLeave, - // 같은 페이지에서 그 구조물 도면을 CAD 편집으로 엶 · 좌측 목록을 다시 받아 - // 고름 표시를 옮김(`sel` 은 `open` 이 기다리기 전에 이미 새 것 · 목록은 `getOpen` 을 봄) - onEdit: (column) => { - void open({ layer: "system", projectId: null, kind: "structure", name: column }); - onSaved?.(); + // 같은 페이지에서 그 구조물 도면을 CAD 편집으로 엶 + onEdit: (column, label) => { + void open({ layer: "system", projectId: null, kind: "structure", name: column, label }); }, - // 새로 만든 뒤 — 집계표 도면 줄을 새 도번으로 다시 그림 - onCreated: () => sheet?.recalc(), }); extra.replaceChildren(made.root); return made; @@ -212,7 +210,7 @@ export function createMain(isAdmin: boolean, onSaved?: () => void): MainHandle { title.textContent = L("M02_PickTemplate"); return empty(""); } - title.textContent = next.name; + title.textContent = next.label ?? next.name; try { const got = await readTemplate(next.layer, next.kind, next.name, next.projectId); if (mine !== seq) return; @@ -230,7 +228,7 @@ export function createMain(isAdmin: boolean, onSaved?: () => void): MainHandle { // 구조물 도면은 열 id 로 열리니 머리에 도번을 함께 보임 if (next.kind === "structure") { const number = (got.문서 as StructureDoc)?.도번; - if (number) title.textContent = `${number} · ${next.name}`; + if (number) title.textContent = `${number} · ${next.label ?? next.name}`; } await mount(shown, next); } catch (error) { @@ -246,7 +244,7 @@ export function createMain(isAdmin: boolean, onSaved?: () => void): MainHandle { const at = sel; try { const edited = editor ? await editor.getDoc() : loaded; - // 구조물 도면 — CAD 는 `도면` 칸만 다룸 · 도번 · 산출근거는 읽은 그대로 둠 + // 구조물 도면 저장은 `도면` 칸만 갈아 끼움 — 도번 · 산출근거는 읽은 그대로 const doc = at.kind === "structure" && loaded ? { ...(loaded as StructureDoc), 도면: edited as StructureDoc["도면"] } diff --git a/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts b/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts index da78df92..86334a25 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts @@ -1,6 +1,7 @@ /* ============================================================================= * M02_MasterTemplete_UI_Side.ts - * 마스터 템플릿 좌측 패널 — 시스템 양식 목록(표/도면) · 새로 · 본떠 · 지우기. 서버 길은 계약 `6_계약.md`. + * 마스터 템플릿 좌측 패널 — 시스템 양식 목록(표/도면/구조물 도면) · 새로 · 본떠 · 지우기. + * 서버 길은 계약 `6_계약.md`. 구조물 도면 줄은 집계표 열마다 하나(서버가 미리 만들어 둠 · 도번 항상 있음). * ========================================================================== */ import { @@ -16,6 +17,7 @@ import { t as L } from "@ui/ui_template_locale"; import { openModal } from "@ui/ui_template_modal"; import { deleteTemplate, + fetchStructureNumbers, listTemplates, readTemplate, saveTemplate, @@ -23,10 +25,9 @@ import { type Kind, type TemplateInfo, } from "./M02_MasterTemplete_Api_Fetch"; +import { STRUCTURE_TABLE, columnHead, type StructureColumn } from "./M02_MasterTemplete_Structure"; import { canEdit, type Selection } from "./M02_MasterTemplete_UI_Main"; -/** 서버 종류 추가 전까지 `Kind` 에 없음 — 목록 응답에 있을 때만 그림 */ -const STRUCTURE = "structure" as Kind; const KINDS: { kind: Kind; label: () => string }[] = [ { kind: "table", label: () => L("M02_KindTable") }, { kind: "drawing", label: () => L("M02_KindDrawing") }, @@ -73,6 +74,8 @@ const failed = (error: unknown): void => export function buildSide(opt: SideOptions): SideHandle { const layer = "system" as const; let items: TemplateInfo[] = []; + let columns: StructureColumn[] = []; + let numbers: Record = {}; let seq = 0; let picked: { kind: Kind; name: string } | null = null; @@ -83,20 +86,15 @@ export function buildSide(opt: SideOptions): SideHandle { children: [el("h3", { className: "ui-collapsible__title", text: title }), body, ...more], }); const bodies = new Map( - [...KINDS.map((k) => k.kind), STRUCTURE].map((k) => [ - k, - el("div", { className: "m02-side__items ui-sidebar-list" }), - ]), + KINDS.map((k) => [k.kind, el("div", { className: "m02-side__items ui-sidebar-list" })]), ); + const structureBody = el("div", { className: "m02-side__items ui-sidebar-list" }); const listHost = el("div", { className: "m02-side__lists ui-sidebar-panel", children: [ section(L("M02_KindTable"), bodies.get("table")!), - section( - L("M02_KindDrawing"), - bodies.get("drawing")!, - section(L("M02_KindStructure"), bodies.get(STRUCTURE)!), - ), + section(L("M02_KindDrawing"), bodies.get("drawing")!), + section(L("M02_KindStructure"), structureBody), ], }); attachCollapsible(listHost); @@ -111,12 +109,15 @@ export function buildSide(opt: SideOptions): SideHandle { const root = el("div", { className: "m02-side ui-sidebar-panel", children: [listHost, editRow] }); - const isOpen = (info: TemplateInfo): boolean => { - if (picked) return picked.kind === info.종류 && picked.name === info.이름; + /** 고름 표시 — `picked`(방금 누름) 이 있으면 그것 · 없으면 지금 열린 것과 비교 */ + const isPicked = (kind: Kind, name: string): boolean => { + if (picked) return picked.kind === kind && picked.name === name; const cur = opt.getOpen(); - return !!cur && cur.layer === layer && cur.kind === info.종류 && cur.name === info.이름; + return !!cur && cur.layer === layer && cur.kind === kind && cur.name === name; }; + const isOpen = (info: TemplateInfo): boolean => isPicked(info.종류, info.이름); + const currentInfo = (): TemplateInfo | undefined => { const cur = opt.getOpen(); return cur ? items.find((i) => i.종류 === cur.kind && i.이름 === cur.name) : undefined; @@ -141,6 +142,24 @@ export function buildSide(opt: SideOptions): SideHandle { } } + /** 구조물 도면 줄 — 집계표 열마다 하나(서버가 미리 만들어 둬 도번은 항상 있음) */ + function paintStructure(): void { + structureBody.replaceChildren( + ...(columns.length + ? columns.map((col) => { + const num = numbers[col.id] ?? L("M02_StructureNone"); + const b = el("button", { + className: `m02-side__item ui-sidebar-row${isPicked("structure", col.id) ? " is-active" : ""}`, + text: `${columnHead(col)} · ${num}`, + attrs: { type: "button" }, + }); + b.addEventListener("click", () => void selectColumn(col)); + return b; + }) + : [el("p", { className: "m02-side__empty", text: L("M02_NoTemplates") })]), + ); + } + function paintButtons(): void { const editable = canEdit(layer, opt.isAdmin); btnNew.disabled = !editable; @@ -156,6 +175,36 @@ export function buildSide(opt: SideOptions): SideHandle { paintButtons(); } + async function selectColumn(col: StructureColumn): Promise { + if (!isPicked("structure", col.id) && !(await opt.confirmLeave())) return; + picked = null; + opt.onOpen({ + layer, + projectId: null, + kind: "structure", + name: col.id, + label: columnHead(col), + }); + paintStructure(); + paintButtons(); + } + + async function refreshStructure(): Promise { + try { + const [table, nums] = await Promise.all([ + readTemplate(layer, "table", STRUCTURE_TABLE, null), + fetchStructureNumbers(), + ]); + columns = ((table.문서 as { 열?: StructureColumn[] }).열 ?? []) as StructureColumn[]; + numbers = nums; + } catch (error) { + columns = []; + numbers = {}; + showToast(L("M02_LoadFailed").replace("{value}", why(error)), "error"); + } + paintStructure(); + } + async function refresh(): Promise { const mine = ++seq; paintButtons(); @@ -168,9 +217,10 @@ export function buildSide(opt: SideOptions): SideHandle { if (mine !== seq) return; paintList(); paintButtons(); + await refreshStructure(); } - /* --- 시스템 층 새로 · 본떠 · 지우기 --- */ + /* --- 시스템 층 새로 · 본떠 · 지우기(표 · 도면만 — 구조물 도면은 집계표 열이 정함) --- */ const nameDialog = ( title: string, withKind: boolean, @@ -252,6 +302,7 @@ export function buildSide(opt: SideOptions): SideHandle { select: (kind, name) => { picked = { kind, name }; paintList(); + paintStructure(); }, }; } diff --git a/resources/master_template/structure/be.json b/resources/master_template/structure/be.json new file mode 100644 index 00000000..66d85d4c --- /dev/null +++ b/resources/master_template/structure/be.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "be", + "도번": "구-25", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/bg.json b/resources/master_template/structure/bg.json new file mode 100644 index 00000000..80bb0b4b --- /dev/null +++ b/resources/master_template/structure/bg.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "bg", + "도번": "구-33", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/bm_area.json b/resources/master_template/structure/bm_area.json new file mode 100644 index 00000000..46cdf626 --- /dev/null +++ b/resources/master_template/structure/bm_area.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "bm_area", + "도번": "구-23", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/bm_len.json b/resources/master_template/structure/bm_len.json new file mode 100644 index 00000000..a1cf80d4 --- /dev/null +++ b/resources/master_template/structure/bm_len.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "bm_len", + "도번": "구-22", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/bx_len.json b/resources/master_template/structure/bx_len.json new file mode 100644 index 00000000..f900a3e7 --- /dev/null +++ b/resources/master_template/structure/bx_len.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "bx_len", + "도번": "구-12", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/bx_wing.json b/resources/master_template/structure/bx_wing.json new file mode 100644 index 00000000..67f21977 --- /dev/null +++ b/resources/master_template/structure/bx_wing.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "bx_wing", + "도번": "구-13", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/cs.json b/resources/master_template/structure/cs.json new file mode 100644 index 00000000..30d6273d --- /dev/null +++ b/resources/master_template/structure/cs.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "cs", + "도번": "구-35", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/ec.json b/resources/master_template/structure/ec.json new file mode 100644 index 00000000..affd8114 --- /dev/null +++ b/resources/master_template/structure/ec.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "ec", + "도번": "구-24", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/etc.json b/resources/master_template/structure/etc.json new file mode 100644 index 00000000..fed2e8fa --- /dev/null +++ b/resources/master_template/structure/etc.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "etc", + "도번": "구-36", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/fb.json b/resources/master_template/structure/fb.json new file mode 100644 index 00000000..080bd463 --- /dev/null +++ b/resources/master_template/structure/fb.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "fb", + "도번": "구-14", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/fp_l.json b/resources/master_template/structure/fp_l.json new file mode 100644 index 00000000..764a2ae2 --- /dev/null +++ b/resources/master_template/structure/fp_l.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "fp_l", + "도번": "구-16", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/fp_w.json b/resources/master_template/structure/fp_w.json new file mode 100644 index 00000000..f8ff8360 --- /dev/null +++ b/resources/master_template/structure/fp_w.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "fp_w", + "도번": "구-15", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/gr_curb.json b/resources/master_template/structure/gr_curb.json new file mode 100644 index 00000000..360487e7 --- /dev/null +++ b/resources/master_template/structure/gr_curb.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "gr_curb", + "도번": "구-30", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/gr_rail.json b/resources/master_template/structure/gr_rail.json new file mode 100644 index 00000000..066402f1 --- /dev/null +++ b/resources/master_template/structure/gr_rail.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "gr_rail", + "도번": "구-29", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/gr_sign.json b/resources/master_template/structure/gr_sign.json new file mode 100644 index 00000000..b47412c5 --- /dev/null +++ b/resources/master_template/structure/gr_sign.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "gr_sign", + "도번": "구-31", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_break.json b/resources/master_template/structure/h_break.json new file mode 100644 index 00000000..981857b3 --- /dev/null +++ b/resources/master_template/structure/h_break.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_break", + "도번": "구-47", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_ford_basin.json b/resources/master_template/structure/h_ford_basin.json new file mode 100644 index 00000000..4be43476 --- /dev/null +++ b/resources/master_template/structure/h_ford_basin.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_ford_basin", + "도번": "구-45", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_intake.json b/resources/master_template/structure/h_intake.json new file mode 100644 index 00000000..13c5fb13 --- /dev/null +++ b/resources/master_template/structure/h_intake.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_intake", + "도번": "구-37", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_pg_rail.json b/resources/master_template/structure/h_pg_rail.json new file mode 100644 index 00000000..93a629e0 --- /dev/null +++ b/resources/master_template/structure/h_pg_rail.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_pg_rail", + "도번": "구-43", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_pv_rail.json b/resources/master_template/structure/h_pv_rail.json new file mode 100644 index 00000000..44f3fac4 --- /dev/null +++ b/resources/master_template/structure/h_pv_rail.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_pv_rail", + "도번": "구-42", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_rip_c.json b/resources/master_template/structure/h_rip_c.json new file mode 100644 index 00000000..2b3268d3 --- /dev/null +++ b/resources/master_template/structure/h_rip_c.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_rip_c", + "도번": "구-38", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_rip_m.json b/resources/master_template/structure/h_rip_m.json new file mode 100644 index 00000000..12564857 --- /dev/null +++ b/resources/master_template/structure/h_rip_m.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_rip_m", + "도번": "구-39", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_rockfall.json b/resources/master_template/structure/h_rockfall.json new file mode 100644 index 00000000..25195f35 --- /dev/null +++ b/resources/master_template/structure/h_rockfall.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_rockfall", + "도번": "구-46", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_soil_ditch.json b/resources/master_template/structure/h_soil_ditch.json new file mode 100644 index 00000000..d05202cc --- /dev/null +++ b/resources/master_template/structure/h_soil_ditch.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_soil_ditch", + "도번": "구-44", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_stone_bed.json b/resources/master_template/structure/h_stone_bed.json new file mode 100644 index 00000000..f90baf98 --- /dev/null +++ b/resources/master_template/structure/h_stone_bed.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_stone_bed", + "도번": "구-41", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_stone_ch.json b/resources/master_template/structure/h_stone_ch.json new file mode 100644 index 00000000..3c6e4922 --- /dev/null +++ b/resources/master_template/structure/h_stone_ch.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_stone_ch", + "도번": "구-40", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/h_waste.json b/resources/master_template/structure/h_waste.json new file mode 100644 index 00000000..82add70b --- /dev/null +++ b/resources/master_template/structure/h_waste.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "h_waste", + "도번": "구-48", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/memo.json b/resources/master_template/structure/memo.json new file mode 100644 index 00000000..489e5ef8 --- /dev/null +++ b/resources/master_template/structure/memo.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "memo", + "도번": "구-49", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/mr.json b/resources/master_template/structure/mr.json new file mode 100644 index 00000000..53369635 --- /dev/null +++ b/resources/master_template/structure/mr.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "mr", + "도번": "구-32", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/ms.json b/resources/master_template/structure/ms.json new file mode 100644 index 00000000..f0272a10 --- /dev/null +++ b/resources/master_template/structure/ms.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "ms", + "도번": "구-20", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/no.json b/resources/master_template/structure/no.json new file mode 100644 index 00000000..aa348227 --- /dev/null +++ b/resources/master_template/structure/no.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "no", + "도번": "구-01", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/od_cnt.json b/resources/master_template/structure/od_cnt.json new file mode 100644 index 00000000..2d01ffab --- /dev/null +++ b/resources/master_template/structure/od_cnt.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "od_cnt", + "도번": "구-18", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/od_len.json b/resources/master_template/structure/od_len.json new file mode 100644 index 00000000..52ae094a --- /dev/null +++ b/resources/master_template/structure/od_len.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "od_len", + "도번": "구-17", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/pg_in.json b/resources/master_template/structure/pg_in.json new file mode 100644 index 00000000..7293a81e --- /dev/null +++ b/resources/master_template/structure/pg_in.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "pg_in", + "도번": "구-11", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/pp_cp.json b/resources/master_template/structure/pp_cp.json new file mode 100644 index 00000000..0bb30dfe --- /dev/null +++ b/resources/master_template/structure/pp_cp.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "pp_cp", + "도번": "구-10", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/pp_len.json b/resources/master_template/structure/pp_len.json new file mode 100644 index 00000000..c55eb833 --- /dev/null +++ b/resources/master_template/structure/pp_len.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "pp_len", + "도번": "구-09", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/ps.json b/resources/master_template/structure/ps.json new file mode 100644 index 00000000..ceaafad7 --- /dev/null +++ b/resources/master_template/structure/ps.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "ps", + "도번": "구-34", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/pv_a.json b/resources/master_template/structure/pv_a.json new file mode 100644 index 00000000..edb9aed1 --- /dev/null +++ b/resources/master_template/structure/pv_a.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "pv_a", + "도번": "구-07", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/pv_b.json b/resources/master_template/structure/pv_b.json new file mode 100644 index 00000000..04938563 --- /dev/null +++ b/resources/master_template/structure/pv_b.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "pv_b", + "도번": "구-04", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/pv_jt.json b/resources/master_template/structure/pv_jt.json new file mode 100644 index 00000000..ee6a8e75 --- /dev/null +++ b/resources/master_template/structure/pv_jt.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "pv_jt", + "도번": "구-08", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/pv_l.json b/resources/master_template/structure/pv_l.json new file mode 100644 index 00000000..91980abd --- /dev/null +++ b/resources/master_template/structure/pv_l.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "pv_l", + "도번": "구-05", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/pv_w.json b/resources/master_template/structure/pv_w.json new file mode 100644 index 00000000..91a9fa8c --- /dev/null +++ b/resources/master_template/structure/pv_w.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "pv_w", + "도번": "구-06", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/rf.json b/resources/master_template/structure/rf.json new file mode 100644 index 00000000..50cf9500 --- /dev/null +++ b/resources/master_template/structure/rf.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "rf", + "도번": "구-26", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/rv.json b/resources/master_template/structure/rv.json new file mode 100644 index 00000000..34378219 --- /dev/null +++ b/resources/master_template/structure/rv.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "rv", + "도번": "구-03", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/rw.json b/resources/master_template/structure/rw.json new file mode 100644 index 00000000..be6470b2 --- /dev/null +++ b/resources/master_template/structure/rw.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "rw", + "도번": "구-19", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/sg.json b/resources/master_template/structure/sg.json new file mode 100644 index 00000000..1fa04f0c --- /dev/null +++ b/resources/master_template/structure/sg.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "sg", + "도번": "구-21", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/sta.json b/resources/master_template/structure/sta.json new file mode 100644 index 00000000..855f03db --- /dev/null +++ b/resources/master_template/structure/sta.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "sta", + "도번": "구-02", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/ta.json b/resources/master_template/structure/ta.json new file mode 100644 index 00000000..577c44a8 --- /dev/null +++ b/resources/master_template/structure/ta.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "ta", + "도번": "구-28", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/master_template/structure/wy.json b/resources/master_template/structure/wy.json new file mode 100644 index 00000000..1b33e090 --- /dev/null +++ b/resources/master_template/structure/wy.json @@ -0,0 +1,72 @@ +{ + "양식": "구조물도면", + "종류": "structure", + "판": 1, + "열": "wy", + "도번": "구-27", + "도면": { + "format": 6, + "entities": [] + }, + "산출근거": { + "양식": "산출근거", + "종류": "표", + "판": 1, + "열": [ + { + "id": "work", + "머리": [ + "공종" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "spec", + "머리": [ + "규격" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "detail", + "머리": [ + "산출 내역" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "unit", + "머리": [ + "단위" + ], + "단위": null, + "꼴": "글" + }, + { + "id": "qty", + "머리": [ + "수량(m당)" + ], + "단위": null, + "꼴": "수" + } + ], + "줄": [ + { + "id": "1", + "값": {} + }, + { + "id": "2", + "값": {} + }, + { + "id": "3", + "값": {} + } + ] + } +} diff --git a/resources/tester/test_m02_structure.py b/resources/tester/test_m02_structure.py index 90fc9142..9876b26b 100644 --- a/resources/tester/test_m02_structure.py +++ b/resources/tester/test_m02_structure.py @@ -18,7 +18,6 @@ def client(tmp_path, monkeypatch): for kind in store.KINDS: (tmp_path / kind).mkdir() shutil.copy(REAL / "table/구조물집계표.json", tmp_path / "table") - shutil.copy(REAL / "drawing/00_template_A1.json", tmp_path / "drawing") monkeypatch.setattr(store, "FOLDER", tmp_path) app = FastAPI() app.include_router(router) @@ -35,12 +34,13 @@ def test_새로_도번_자동_409_없는_열(client): "pp_len", "구-01", ) - assert ( - doc["도면"]["entities"] and doc["도면"] == store.read("drawing", "00_template_A1")["문서"] - ) + # 도각 없는 전용 화면 — 그린 만큼이 설계 영역 + assert doc["도면"] == {"format": 6, "entities": []} basis = doc["산출근거"] assert [c["머리"][0] for c in basis["열"]] == ["공종", "규격", "산출 내역", "단위", "수량(m당)"] - assert basis["줄"] == [] and basis["종류"] == "표" + # 빈 줄 몇 개를 미리 둠 — 줄 더하기 안 눌러도 바로 입력 + assert basis["줄"] == [{"id": "1", "값": {}}, {"id": "2", "값": {}}, {"id": "3", "값": {}}] + assert basis["종류"] == "표" assert client.post("/api/m02/structures/rv").json()["문서"]["도번"] == "구-02" assert client.post("/api/m02/structures/pp_len").status_code == 409 diff --git a/ui_template/ui_template_locale_m2.ts b/ui_template/ui_template_locale_m2.ts index de4797c5..238cd5f1 100644 --- a/ui_template/ui_template_locale_m2.ts +++ b/ui_template/ui_template_locale_m2.ts @@ -47,4 +47,5 @@ export const ui_locales_m2 = { "Unsaved changes — discard and continue?", ], M02_ActionFailed: ["안 됨 — {value}", "Failed — {value}"], + M02_StructureNone: ["없음", "None"], } as const;