@litfamily/litopencode 1.0.16 → 1.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README-Ko-KR.md +11 -11
  3. package/README.md +11 -11
  4. package/dist/activation-routing.js +1 -1
  5. package/dist/features.js +2 -2
  6. package/dist/skills.js +6 -4
  7. package/docs/assets/readme/badge-version.svg +1 -1
  8. package/docs/reference-Ko-KR.md +1 -1
  9. package/package.json +1 -1
  10. package/skills/frontend-ui-ux/data/THIRD-PARTY-NOTICE.txt +1 -3
  11. package/skills/lit-docx/SKILL.md +80 -19
  12. package/skills/lit-docx/references/components.md +253 -0
  13. package/skills/lit-docx/references/direction-step.md +234 -0
  14. package/skills/lit-docx/references/examples/01-report-ko.md +160 -0
  15. package/skills/lit-docx/references/examples/02-brief-ko.md +58 -0
  16. package/skills/lit-docx/references/examples/03-manual-ko.md +107 -0
  17. package/skills/lit-docx/references/examples/04-proposal-ko.md +93 -0
  18. package/skills/lit-docx/references/examples/05-memo-ko.md +42 -0
  19. package/skills/lit-docx/references/examples/06-journal-en.md +84 -0
  20. package/skills/lit-docx/references/examples/07-report-en.md +137 -0
  21. package/skills/lit-docx/references/examples/08-journal-ko.md +93 -0
  22. package/skills/lit-docx/references/examples/09-brief-en.md +64 -0
  23. package/skills/lit-docx/references/page-composition.md +306 -0
  24. package/skills/lit-docx/references/tonalities/brief.md +104 -0
  25. package/skills/lit-docx/references/tonalities/journal.md +101 -0
  26. package/skills/lit-docx/references/tonalities/manual.md +111 -0
  27. package/skills/lit-docx/references/tonalities/memo.md +105 -0
  28. package/skills/lit-docx/references/tonalities/proposal.md +101 -0
  29. package/skills/lit-docx/references/tonalities/report.md +126 -0
  30. package/skills/lit-docx/run.py +2 -1
  31. package/skills/lit-docx/scripts/convert_md_to_docx.py +384 -67
  32. package/skills/lit-docx/scripts/craft_docx.py +204 -1
  33. package/skills/lit-docx/scripts/docx_design.py +2445 -0
  34. package/skills/lit-docx/scripts/docx_layout.py +959 -0
  35. package/skills/lit-docx/scripts/slop_lint.py +23 -6
  36. package/skills/lit-docx/templates/tonalities/brief.yaml +29 -0
  37. package/skills/lit-docx/templates/tonalities/journal.yaml +26 -0
  38. package/skills/lit-docx/templates/tonalities/manual.yaml +27 -0
  39. package/skills/lit-docx/templates/tonalities/memo.yaml +27 -0
  40. package/skills/lit-docx/templates/tonalities/proposal.yaml +27 -0
  41. package/skills/lit-docx/templates/tonalities/report.yaml +27 -0
  42. package/skills/lit-pptx/NOTICE.md +1 -1
  43. package/skills/lit-pptx/SKILL.md +108 -19
  44. package/skills/lit-pptx/pretendard-font/public/static/Pretendard-Bold.otf +0 -0
  45. package/skills/lit-pptx/pretendard-font/public/static/Pretendard-Regular.otf +0 -0
  46. package/skills/lit-pptx/references/density-and-fill.md +283 -0
  47. package/skills/lit-pptx/references/direction-step.md +249 -0
  48. package/skills/lit-pptx/references/examples/01-ops-review-ledger-ko.md +173 -0
  49. package/skills/lit-pptx/references/examples/02-launch-pitch-signal-en.md +153 -0
  50. package/skills/lit-pptx/references/examples/03-field-survey-atlas-ko.md +120 -0
  51. package/skills/lit-pptx/references/examples/04-lecture-chalk-ko.md +132 -0
  52. package/skills/lit-pptx/references/examples/05-research-talk-paper-en.md +162 -0
  53. package/skills/lit-pptx/references/examples/06-policy-briefing-gazette-ko.md +176 -0
  54. package/skills/lit-pptx/references/examples/07-annual-story-studio-en.md +131 -0
  55. package/skills/lit-pptx/references/examples/08-reliability-keynote-night-en.md +182 -0
  56. package/skills/lit-pptx/references/examples/09-status-update-ledger-en.md +147 -0
  57. package/skills/lit-pptx/references/examples/10-investor-pitch-signal-ko.md +136 -0
  58. package/skills/lit-pptx/references/examples/11-forecast-review-night-ko.md +177 -0
  59. package/skills/lit-pptx/references/examples/12-exhibition-proposal-studio-ko.md +149 -0
  60. package/skills/lit-pptx/references/layout-families.md +470 -0
  61. package/skills/lit-pptx/references/title-treatments.md +271 -0
  62. package/skills/lit-pptx/references/tonalities/atlas.md +132 -0
  63. package/skills/lit-pptx/references/tonalities/chalk.md +132 -0
  64. package/skills/lit-pptx/references/tonalities/gazette.md +137 -0
  65. package/skills/lit-pptx/references/tonalities/ledger.md +151 -0
  66. package/skills/lit-pptx/references/tonalities/night.md +148 -0
  67. package/skills/lit-pptx/references/tonalities/paper.md +136 -0
  68. package/skills/lit-pptx/references/tonalities/signal.md +148 -0
  69. package/skills/lit-pptx/references/tonalities/studio.md +149 -0
  70. package/skills/lit-pptx/scripts/compile-deck.js +68 -21
  71. package/skills/lit-pptx/scripts/craft-thresholds.json +45 -1
  72. package/skills/lit-pptx/scripts/craft_extras.py +37 -8
  73. package/skills/lit-pptx/scripts/deck_output.py +654 -0
  74. package/skills/lit-pptx/scripts/embed_fonts.py +2 -2
  75. package/skills/lit-pptx/scripts/layout_inventory.py +35 -2
  76. package/skills/lit-pptx/scripts/lib/directive-parser.js +2 -2
  77. package/skills/lit-pptx/scripts/lib/font-map.js +4 -4
  78. package/skills/lit-pptx/scripts/lib/grid-resolver.js +521 -0
  79. package/skills/lit-pptx/scripts/lib/layout-resolver.js +403 -21
  80. package/skills/lit-pptx/scripts/lib/markdown-loader.js +6 -4
  81. package/skills/lit-pptx/scripts/lib/render-adapter-html.js +3 -9
  82. package/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +500 -113
  83. package/skills/lit-pptx/scripts/lib/render-pack.js +3558 -0
  84. package/skills/lit-pptx/scripts/lib/slide-ast.js +55 -24
  85. package/skills/lit-pptx/scripts/lib/spec-validator.js +2 -2
  86. package/skills/lit-pptx/scripts/lib/template-registry.js +335 -11
  87. package/skills/lit-pptx/scripts/qa_deck.py +48 -13
  88. package/skills/lit-pptx/scripts/validate_pptx.py +17 -5
  89. package/skills/lit-pptx/specs/template-enrollment-contract.md +4 -4
  90. package/skills/lit-pptx/templates/boilerplate_professional.css +13 -13
  91. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +1 -1
  92. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +5 -2
  93. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +20 -20
  94. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +1 -11
  95. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +10 -7
  96. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +17 -17
  97. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +8 -8
  98. package/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +105 -0
  99. package/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +110 -0
  100. package/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +106 -0
  101. package/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +107 -0
  102. package/skills/lit-pptx/templates/tonalities/night/pack.yaml +106 -0
  103. package/skills/lit-pptx/templates/tonalities/paper/pack.yaml +111 -0
  104. package/skills/lit-pptx/templates/tonalities/signal/pack.yaml +107 -0
  105. package/skills/lit-pptx/templates/tonalities/studio/pack.yaml +105 -0
  106. package/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +1 -1
  107. package/skills/lit-typographic-motion/engine/stage/capture.mjs +2 -2
  108. package/skills/lit-typographic-motion/engine/treatment.mjs +1 -1
  109. package/skills/lit-typographic-motion/fonts/pins.json +2 -2
  110. package/skills/lit-typographic-motion/gate.mjs +1 -1
  111. package/skills/lit-typographic-motion/references/stage.md +1 -1
  112. package/skills/lit-typographic-motion/references/style-bibles.md +2 -2
  113. package/skills/lit-typographic-motion/references/treatment.md +1 -1
  114. package/skills/lit-typographic-motion/references/type-craft.md +3 -3
  115. package/skills/managed-skill-manifest.json +288 -44
  116. package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Bold.otf +0 -0
  117. package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Regular.otf +0 -0
@@ -0,0 +1,253 @@
1
+ # Page components and the directive syntax
2
+
3
+ The Markdown source may hold six fenced directives: `cover`, `callout`, `sidebar`, `pullquote`,
4
+ `keyfigures` and `columns`, plus a `<!-- column-break -->` marker inside `columns`. The converter splits
5
+ them out before Markdown sees the text, so a fence never reaches the page. Everything else in the source
6
+ is ordinary Markdown: headings, paragraphs, lists, pipe tables, images and captions.
7
+
8
+ This file gives the exact syntax the converter accepts, what each directive produces, which tonalities
9
+ draw it, and the budget that keeps a document from turning into a page of boxes. A directive that is
10
+ valid but not drawn by the chosen tonality, or that falls outside the budget, is not lost: its content is
11
+ set as ordinary text, with its `title=` as a bold lead line.
12
+
13
+ ## The budget
14
+
15
+ Most documents need no component at all beyond the page-1 block. A component earns its place when it
16
+ carries content that does not belong in the running order of the text: a decision the reader must make,
17
+ a warning that interrupts a procedure, definitions consulted out of sequence, the three numbers a summary
18
+ stands on. The rules:
19
+
20
+ - **Three kinds at most** beyond headings, paragraphs, lists, tables and figures. The kinds counted are
21
+ callout, sidebar, keyfigures and columns. A fourth kind in the source is set as plain text.
22
+ - **One key-figure strip per document**, placed in the summary, with three or four real metrics that are
23
+ comparable and each carry a basis (period, source or method). A second strip becomes a bulleted list. A
24
+ strip is never a list of facts that are not measurements ("two sites", "phase 1").
25
+ - **Callouts about one per four pages**, for out-of-sequence content only: a decision request, a warning,
26
+ a definition the reader needs before the next step. The converter estimates the page count and draws
27
+ that many callouts, never fewer than one; a pack may cap the number lower (Brief and Proposal draw one).
28
+ When the source has more callouts than the budget, the converter keeps a `kind=key` callout first, then
29
+ warnings, then notes, each group in source order; the rest are set as text.
30
+ - **No pull quotes.** Every pack has them off. A pull quote that repeats a sentence of the body is
31
+ dropped with a note; any other pull quote is set as a normal paragraph.
32
+ - **Sidebars in Manual only.**
33
+ - **Two columns only for balanced blocks.** The parts of a `columns` block must be within 20 % of each
34
+ other in length, counted in characters without spaces or Markdown marks. An unbalanced block is set as
35
+ one column with the break removed.
36
+ - **No box inside a box.** `columns` is refused inside a callout or sidebar; nesting a callout inside a
37
+ callout is legal syntax but defeats the purpose of either.
38
+ - **A purpose line on the direction card** for every component the source uses. No line, no component.
39
+
40
+ The gate's `component.budget` check fails a tonality document with more than three kinds, more than one
41
+ key-figure strip, any pull quote, or key figures on a cover page.
42
+
43
+ ## Grammar
44
+
45
+ ```text
46
+ ::: <name> [positional] [key=value] [key="value with spaces"]
47
+ <body: Markdown, which may contain further directives>
48
+ :::
49
+ ```
50
+
51
+ - The opening line is three or more colons, a space, the directive name and its attributes.
52
+ - The closing line is the same number of colons on a line of its own. To put one directive inside
53
+ another, give the outer fence more colons (`::::`) than the inner one.
54
+ - Values without spaces need no quotes (`kind=warning`, `width=third`). Values with spaces use double
55
+ quotes (`title="Decision requested"`). A literal double quote inside a value is written `\"`.
56
+ - An unknown directive name, an unknown attribute, a repeated attribute, an unclosed fence and a closing
57
+ fence with nothing open are all errors. The converter stops and names what it accepts; it does not
58
+ guess.
59
+ - Fenced code blocks are left alone: a `:::` line inside a code fence is text.
60
+
61
+ Attributes each directive accepts:
62
+
63
+ | Directive | Positional | Attributes |
64
+ |---|---|---|
65
+ | `cover` | none | `kicker`, `variant`, `image` |
66
+ | `callout` | none | `kind` (required), `title` |
67
+ | `sidebar` | none | `title`, `width`, `float` |
68
+ | `pullquote` | none | `cite` |
69
+ | `keyfigures` | none | `cols` |
70
+ | `columns` | `1`, `2` or `3` | `gap`, `rule` |
71
+
72
+ ## Which tonality draws what
73
+
74
+ | Tonality | cover block | callout | sidebar | keyfigures | columns |
75
+ |---|---|---|---|---|---|
76
+ | Report | masthead | yes | text | yes | yes |
77
+ | Brief | masthead | yes, one | text | text | yes |
78
+ | Manual | control block | yes | yes | text | yes |
79
+ | Proposal | cover page | yes, one | text | yes | yes |
80
+ | Memo | memo block | text | text | text | text |
81
+ | Journal | masthead | yes | text | text | already two columns |
82
+
83
+ "Text" means the content is set in the flow: a callout or sidebar as its bold title and body, key figures
84
+ as a bulleted list with each basis in parentheses after the label. A short block set this way is kept on one
85
+ page.
86
+
87
+ ## `::: cover`
88
+
89
+ ```markdown
90
+ ::: cover kicker="시설 운영 보고 2026-4호"
91
+ 본문 첫 쪽 제목 아래에 둘 한두 문장의 안내.
92
+ :::
93
+ ```
94
+
95
+ The cover directive must be the first block of the body, straight after the frontmatter. It carries the
96
+ page-1 extras; the title, subtitle, byline, date and notice come from the frontmatter, and a cover with no
97
+ frontmatter `title:` is an error. What the block becomes depends on the tonality's title block, not on
98
+ the directive:
99
+
100
+ - **Masthead** (Report, Brief, Journal): a series line with the kicker on the left and the date on the
101
+ right, the title, the subtitle, the byline, one rule, the notice, then the body text of the directive as
102
+ a lead set half a point above the body size.
103
+ - **Cover page** (Proposal): the kicker, the title in the upper third, a short rule, the subtitle and the
104
+ lead on a page of their own; byline, date and notice at the foot of that page. The body starts on the
105
+ next page as page 1.
106
+ - **Memo block** (Memo): the kicker as the label (default 메모 or Memo), the title, and the rows of the
107
+ body lines that start with `To:`, `From:`, `Date:`, `Subject:`, `Cc:` or their Korean forms `받는 사람:`,
108
+ `보내는 사람:`, `날짜:`, `제목:`, `참조:`. Several pairs may share one line separated by ` · `. The
109
+ frontmatter date is inserted after the sender when no date row is given.
110
+ - **Control block** (Manual): the title, the subtitle and a two-column block of document, owner,
111
+ organisation and issue date (문서, 작성 부서, 기관, 시행일), filled from `short_title` (or `title`),
112
+ `author`, `organization` and `date`. The kicker is printed above the title without a date.
113
+
114
+ An empty directive (opening and closing line only, or only a kicker) is valid; leave the directive out
115
+ altogether when there is no kicker and no lead.
116
+
117
+ `variant=` accepts `typographic`, `band`, `split` and `masthead` and rejects anything else, but every
118
+ tonality draws its own typographic block whatever the variant says; omit it. `image=` is accepted and not
119
+ drawn: covers carry no pictures. A `keyfigures` block placed inside a cover (with a longer outer fence) is
120
+ moved to the summary when the tonality draws key figures and left out with a note otherwise, because key
121
+ figures never stand on a cover.
122
+
123
+ ## `::: callout kind=<note|key|warning> [title="…"]`
124
+
125
+ ```markdown
126
+ ::: callout kind=key title="결정 요청"
127
+ 2027년 추가 예산 2,150만 원과 급속기 예약제 시행을 승인해 주시기 바랍니다.
128
+ :::
129
+ ```
130
+
131
+ One callout style per document: a single-cell box with a 0.75 pt rule above and a 0.5 pt rule below, no
132
+ side rules, no fill, the title in bold ink at body size, the body in the body face. The rules take the
133
+ pack's accent where the pack lists `callout_rule` among its accent places (Report, Brief, Manual,
134
+ Proposal) and ink otherwise. The box does not split across pages and keeps with what follows.
135
+
136
+ The three kinds differ in label and priority, not in look. Default labels are 참고 / 핵심 / 주의 in Korean
137
+ and Note / Key point / Warning in English; a `title=` replaces the label and is almost always better.
138
+
139
+ - `kind=key` is the decision request or the one conclusion the reader must take away. In a Brief, the
140
+ first key callout moves to the top of the body, straight under the title block. In other tonalities it
141
+ usually closes the document.
142
+ - `kind=warning` interrupts a procedure: a hazard, an irreversible step, a combination that must not
143
+ happen. Manual is its natural home.
144
+ - `kind=note` holds a definition or a reading aid the text depends on but does not argue.
145
+
146
+ A callout earns its place when removing it would leave the reader without a decision or a safety fact.
147
+ A summary restated in a box, a "tip", or a second copy of the conclusion does not.
148
+
149
+ ## `::: sidebar [title="…"] [width=third|half] [float=right|left|none]`
150
+
151
+ ```markdown
152
+ ::: sidebar title="이 절차서의 용어" width=third float=right
153
+ **보관소**: 지하 1층 B-104호 임시 보관 시설.
154
+
155
+ **인계**: 용기를 넘기고 대장에 서명하는 절차.
156
+ :::
157
+ ```
158
+
159
+ Manual only. A box beside the text with a 0.75 pt hairline down its left side in the pack's accent, no
160
+ fill, body text at table size (about 92 % of the body). Defaults are a third of the text width floating
161
+ right. A sidebar inside a two-column body does not float.
162
+
163
+ The converter measures the text between the sidebar and the next heading. When that text is shorter than
164
+ the box, the next heading would start beside it, so the sidebar loses its float and stands full width in
165
+ the flow. To keep a floating sidebar, place it at the start of a section with two or three paragraphs
166
+ after it, as the Manual example does under its first h2. A good sidebar holds definitions, contact
167
+ numbers or reference values the reader looks up while following the main text; a sidebar that repeats
168
+ the text beside it is padding.
169
+
170
+ ## `::: pullquote [cite="…"]`
171
+
172
+ Accepted by the parser and drawn by no tonality. A pull quote that repeats a sentence already in the body
173
+ is dropped and the converter prints `Note: line N: the pull quote repeats the body and is left out`. Any
174
+ other pull quote becomes an ordinary paragraph. Write the sentence in the body instead.
175
+
176
+ ## `::: keyfigures [cols=2|3|4]`
177
+
178
+ ```markdown
179
+ ::: keyfigures
180
+ - **1,050MWh** 연간 예상 발전량
181
+ - 일평균 발전시간 3.6시간 가정, 공장 사용량의 11%
182
+ - **1억 5,900만 원** 연간 순절감액
183
+ - 평균 단가 165원/kWh, 유지비 1,400만 원 차감
184
+ - **5.8년** 단순 회수 기간
185
+ - 총사업비 9억 2,000만 원 기준
186
+ :::
187
+ ```
188
+
189
+ The body is one list. Each item is `- **figure** label`, where the bold figure contains at least one
190
+ digit. An indented `- ` line under an item is that item's basis: the period, the source or the
191
+ assumption. One to eight items are accepted; three or four is the useful range. `cols=` sets the number
192
+ per row (default 3 in Report and Proposal, at most 4, never more than the number of items).
193
+
194
+ The strip is drawn as one borderless row with an ink hairline over each figure, the figure in bold at the
195
+ h2 size (one step above the body, never a display number), the label at table size and the basis at note
196
+ size in muted ink. Drawn in Report and Proposal; elsewhere the items become a bulleted list with the basis
197
+ in parentheses after the label.
198
+
199
+ Place the strip inside the summary, after its first paragraph. The figures must also appear in the text
200
+ or a table, with the same values and rounding: a reader who checks the 4,360만 원 in the strip against the
201
+ cost table must find 4,360. Metrics in one strip should be comparable in kind (outputs, costs, rates)
202
+ and drawn from the same period.
203
+
204
+ ## `::: columns <1|2|3> [gap=<mm>] [rule=true]`
205
+
206
+ ```markdown
207
+ ::: columns 2
208
+ **방안 A. 전체 협력사 월 2회.** 196곳 모두에 매월 10일과 25일 지급을 적용한다. …
209
+ <!-- column-break -->
210
+ **방안 B. 중소 협력사만 월 2회.** 연 매출 100억 원 미만 148곳에만 적용한다. …
211
+ :::
212
+ ```
213
+
214
+ With a `<!-- column-break -->` marker, each part goes in its own cell of one borderless row, tops aligned,
215
+ with the gap split between the cells; `rule=true` draws a hairline between them. Without a marker, the
216
+ block becomes a balanced column section that flows into as many columns as asked. `gap` is in
217
+ millimetres (the pack default is 6 mm).
218
+
219
+ Columns stand at the top level only, never inside a callout or sidebar, and the marker is an error
220
+ anywhere outside a `columns` block. The balance rule applies to the parts separated by markers: two
221
+ options of 119 and 107 characters pass; a paragraph beside a one-line note does not. Use columns for two
222
+ parallel things the reader compares: two options, before and after, two sites. A list split in half to
223
+ save space is not a comparison.
224
+
225
+ ## Table captions and table styles
226
+
227
+ A table caption is the paragraph immediately before the table, written `표 1. 제목` in Korean or
228
+ `Table 1. Title` in English. There must be no other paragraph between the caption and the table. The
229
+ converter keeps the caption with the table, sets Korean captions as `<표 1> 제목` with the label in bold,
230
+ and bolds `Table 1.` in English. Figure captions written `그림 1. 제목` become `[그림 1] 제목`.
231
+
232
+ A caption may end with `{style=booktabs}`, `{style=banded}`, `{style=light-grid}` or
233
+ `{style=header-fill}`. Every tonality draws booktabs regardless and prints a note when another style is
234
+ named; the attribute only matters on the plain profile. Leave it out.
235
+
236
+ ## Source and note lines
237
+
238
+ A paragraph straight after a table that starts with `주:`, `자료:`, `출처:`, `Note:`, `Notes:`, `Source:`
239
+ or `Sources:` is set as a note line: note size, muted ink, kept with the table. Korean `출처:` is
240
+ rewritten as `자료:`. Order them `주:` first, then `자료:`, each as its own paragraph (separate them with a
241
+ blank line, or the two lines merge into one paragraph with a line break).
242
+
243
+ ## Misuse the gate will not catch
244
+
245
+ The gate counts components; it does not read them. These pass every check and still read as
246
+ machine-made:
247
+
248
+ - A callout in every section, each restating the section's first paragraph.
249
+ - Key figures that are not measurements, or figures with no basis line.
250
+ - A key-figure strip whose numbers differ from the table that carries the same quantity.
251
+ - Two columns holding unrelated content because the page "looked empty".
252
+ - A sidebar of definitions nobody needs, added because the Manual allows one.
253
+ - A `kind=warning` callout used for emphasis in a document with no hazard.
@@ -0,0 +1,234 @@
1
+ # Choosing a direction before writing
2
+
3
+ A Word document built by this skill takes its page structure from one of six tonality packs in
4
+ `templates/tonalities/`: Report, Brief, Manual, Proposal, Memo and Journal. The pack decides what stands
5
+ on page 1, how the summary is set, whether headings carry numbers, which page components the source may
6
+ use, what the running head carries and whether a contents list appears. Colour plays almost no part:
7
+ every pack sets text and headings in near-black ink, and four of the six allow one muted accent on two
8
+ kinds of element at most.
9
+
10
+ The pack is chosen before a line of the Markdown source is written, because the choice changes the
11
+ source itself. A Brief wants its first section written as three or four paragraphs that each open with
12
+ a finished sentence. A Manual wants numbered steps. A Proposal wants a budget table and one decision box.
13
+ Rewriting a Report source into a Brief after the fact usually means rewriting most of it.
14
+
15
+ This file covers the decision: the inputs, the mapping from document type to candidates, how content
16
+ signals reorder the candidates, the direction card that records the choice, the dials, and what to do
17
+ when the request names a journal instead of a look.
18
+
19
+ ## Two cases that skip the choice
20
+
21
+ **A named publisher.** When the user names a journal or publisher profile (Elsevier, ACS, IEEE, Nature,
22
+ or the Korean generic profile by name), the document goes down the publisher path and no tonality is
23
+ picked. Convert with `python3 <skill>/run.py md-to-docx draft.md draft.docx --publisher elsevier` and gate
24
+ with `python3 <skill>/run.py qa draft.docx --source draft.md --publisher elsevier --kind manuscript`. The
25
+ converter refuses `--tonality` together with `--publisher`, and it also stops when the frontmatter holds
26
+ `tonality:` while `--publisher` is given. A manuscript keeps the publisher's own section order, heading
27
+ case and caption style; nothing in this file applies to it.
28
+
29
+ **A bare request.** A bare `lit` request for a report, or any request that gives a topic and nothing
30
+ else, asks no questions. Pick the tonality from the tables below, write the direction card, build the
31
+ document and say in the reply which tonality was used and which two were considered. A question about
32
+ format, font or look costs the user a round trip and almost never changes the outcome; the card makes the
33
+ choice visible so the user can redirect it in one sentence.
34
+
35
+ An explicit request that asks for a different look ("make it a one-page brief instead", "use the manual
36
+ layout") overrides the tables. So does a frontmatter `tonality:` line the user wrote. The skill keeps the
37
+ user's choice even when the signals point elsewhere, and says so on the card.
38
+
39
+ ## The three inputs
40
+
41
+ **Document type.** What the user calls the document and what it is for: a results report, a briefing for
42
+ a decision, an operating procedure, a funding or investment proposal, a notice or memo, a long-form essay
43
+ or research summary. Korean requests often name the type directly (보고서, 검토 보고, 절차서, 제안서,
44
+ 안내문, 기획서). When the type is ambiguous, the purpose decides: a document that asks a reader to approve
45
+ something within days is a Brief or a Memo even if the user said "report".
46
+
47
+ **Reader.** Who reads it and how. A department head deciding on a budget reads the first page and the
48
+ decision box. A technician following a procedure reads one section at a time with the document open on a
49
+ bench. A committee member reads a long paper at a desk. The reader sets the length budget and whether the
50
+ summary must stand alone.
51
+
52
+ **Content signals.** What the source material actually holds: how many tables, how many figures, how much
53
+ prose, how many numbered procedures or warnings, which language, and the expected length. When the user
54
+ supplies files, count these from the files. When the skill writes the content itself, count them from the
55
+ outline before drafting.
56
+
57
+ ## Document type to candidates
58
+
59
+ Each row lists the candidates in order; the first is the default. The dials are each pack's own values
60
+ (the `dials:` line of its YAML), which the converter uses unless told otherwise.
61
+
62
+ | Document type or wording | Candidates, default first | Pack dials of the default |
63
+ |---|---|---|
64
+ | Results report, analysis, periodic report (보고서, 결과 보고, 분석, 실적) | Report, Brief, Manual | density 9, variance 5 |
65
+ | Decision briefing of one to three pages (검토 보고, 현황 보고, 개조식 보고) | Brief, Memo, Report | density 9, variance 3 |
66
+ | Procedure, guide, manual, onboarding (절차서, 매뉴얼, 가이드, 운영 지침) | Manual, Report | density 9, variance 6 |
67
+ | Proposal, plan, pitch, funding request (제안서, 기획서, 계획서, 사업 계획) | Proposal, Report, Brief | density 8, variance 6 |
68
+ | Notice, memo, letter of one or two pages (안내문, 공지, 메모, 협조 요청) | Memo, Brief | density 9, variance 2 |
69
+ | Essay, white paper, newsletter, research summary not for a journal | Journal, Report | density 9, variance 6 |
70
+ | Manuscript for a named journal | that publisher profile | none |
71
+
72
+ ## Signals that reorder the candidates
73
+
74
+ Signals change the order inside a row. They never pull in a tonality from outside the row: a proposal with
75
+ many tables becomes a Report-first proposal, not a Manual.
76
+
77
+ | Signal in the source or outline | Effect on the order |
78
+ |---|---|
79
+ | Four or more tables, or tables make up more than about 30 % of the blocks | Report or Manual moves up |
80
+ | Three or more figures | Proposal or Journal moves up |
81
+ | Under about 900 words, or the user says one or two pages | Memo or Brief moves up |
82
+ | English, mostly continuous prose, few tables | Journal moves up |
83
+ | Many warnings, numbered procedures or check items | Manual moves up |
84
+ | A single decision the reader must make, with a deadline | Brief moves up, and the decision goes in a `kind=key` callout |
85
+ | A budget table and a schedule | Proposal moves up |
86
+
87
+ When two signals pull in opposite directions, the purpose wins. A forty-row data appendix attached to a
88
+ two-page decision is still a Brief; the appendix becomes a second document or a short table of the five
89
+ rows the decision depends on.
90
+
91
+ ## What each tonality sets
92
+
93
+ Read this table when two candidates seem equally good. Two tonalities chosen for the same source should
94
+ differ in at least three of these columns, which is also what the gate's `--compare` mode checks.
95
+
96
+ | Tonality | Page 1 | Summary form | Heading numbers | Components it accepts | Running head | Contents |
97
+ |---|---|---|---|---|---|---|
98
+ | Report | masthead title block, series line with date | prose, optional key-figure strip | Korean Ⅰ. / 1. / 가., English 1 / 1.1 | keyfigures, callout, columns | footer: short title left, folio right | from about five pages |
99
+ | Brief | compact masthead, decision box directly under it | numbered points ① to ④, bold lead sentence each | none; each h1 opens under a hairline | callout (one), columns | footer: folio right | never |
100
+ | Manual | title over a document-control block | prose | 1 / 1.1 | callout, sidebar, columns | header: short title; footer: folio right | from about five pages |
101
+ | Proposal | separate typographic cover page | prose with one key-figure strip | none | keyfigures, callout (one), columns | footer: folio centred | never |
102
+ | Memo | label, subject as title, To / From / Date rows | prose | none | none | footer: folio right, from page 2 | never |
103
+ | Journal | masthead with byline, abstract, keywords | prose (abstract above) | 1 / 1.1 | callout | header: short title left, folio right | never |
104
+
105
+ No tonality prints a running head on the page that carries the title block; the Proposal prints none on
106
+ its cover and starts the folio at 1 on the first body page.
107
+
108
+ ## The direction card
109
+
110
+ Before building, write a direction card. It goes in the reply (short form) and in the task's build log
111
+ (full form). It is the record of why the document looks the way it does, and it is the checklist the
112
+ draft is written against.
113
+
114
+ The card has eight lines:
115
+
116
+ 1. **Type.** The document type in the user's words, plus the purpose in one clause.
117
+ 2. **Reader.** Who reads it and how far they read.
118
+ 3. **Tonality and two alternatives.** The chosen pack, then two candidates from the same row with the
119
+ reason each lost.
120
+ 4. **Reason from signals.** The counted signals that decided the order: table count, figure count, word
121
+ estimate, language, procedures, decision.
122
+ 5. **Dials.** Density and variance, normally the pack's values. Any change is stated with its reason.
123
+ 6. **Page 1 and headings.** What the title block or cover holds (kicker, subtitle, byline, notice, lead
124
+ sentence) and how headings are treated (numbered or not, the hairline in a Brief).
125
+ 7. **Components.** Each component the source will use, with a one-line purpose. A component without a
126
+ purpose line is not used. Headings, paragraphs, lists, tables and figures are not components and are
127
+ not listed.
128
+ 8. **Wrong if.** One sentence naming the fact that would make this direction the wrong one. This is the
129
+ line a reviewer checks first.
130
+
131
+ A full card for the Korean report among the worked examples:
132
+
133
+ ```text
134
+ Direction card
135
+ Type: 시설 운영 결과 보고서 (사내 충전소 1년 실적과 2027년 예산 승인)
136
+ Reader: 경영지원본부장과 재무팀. 요약과 결정 요청을 먼저 읽고 표는 필요한 곳만 확인
137
+ Tonality: Report
138
+ Alternative Brief: 결정 사항은 하나지만 근거 표가 5개라 3쪽 안에 들어가지 않음
139
+ Alternative Manual: 절차 문서가 아님
140
+ Signals: 표 5개, 그림 0개, 약 3,400자, 한국어, 결정 요청 1건
141
+ Dials: density 9, variance 5 (팩 기본값)
142
+ Page 1: masthead, series line "시설 운영 보고 2026-4호" with date, subtitle, byline, notice under the rule
143
+ Headings: Ⅰ. / 1. numbered in ink, no rules
144
+ Components:
145
+ keyfigures: 요약의 1년 실적 세 가지(충전 횟수, 기당 일평균, 순운영비), 각각 기준 표기
146
+ callout key: 2027년 추가 예산 승인 요청
147
+ Wrong if: 독자가 이미 실적을 알고 있어 결정 요청만 필요하다면 Brief가 맞다
148
+ ```
149
+
150
+ The short form in the reply is two or three sentences: the tonality, the two alternatives and the reason
151
+ in plain words. For example: "Built as a Report (numbered sections, contents from five pages, one
152
+ key-figure strip). A Brief was the alternative if only the budget decision mattered; a Manual does not fit
153
+ a results document."
154
+
155
+ ## The dials
156
+
157
+ Each pack carries two dials, both integers from 1 to 10. The converter accepts them from the command line
158
+ (`--density 8`) or from frontmatter (`density: 8`), and prints the values it used in its success line, for
159
+ example `[tonality=Report, density=9, variance=5, locale=ko]`.
160
+
161
+ **Density** is the dial that changes the page. It selects the margins and the body leading:
162
+
163
+ | Density | Margins top / bottom / sides (mm) | Korean body pitch | English body pitch |
164
+ |---|---|---|---|
165
+ | 1 to 2 | 30 / 32 / 30 | 185 % of size | 140 % |
166
+ | 3 to 4 | 28 / 30 / 28 | 185 % | 140 % |
167
+ | 5 to 6 | 27 / 29 / 27 | 180 % | 137 % |
168
+ | 7 | 26 / 28 / 26 | 180 % | 137 % |
169
+ | 8 | 26 / 28 / 26 | 175 % | 133 % |
170
+ | 9 | 25 / 27 / 25 | 175 % | 133 % |
171
+ | 10 | 24 / 26 / 25 | 175 % | 133 % |
172
+
173
+ Density 3 or lower also adds half a point to the body size. The side margins never drop under 25 mm, so
174
+ the text block on A4 stays at 160 mm or narrower whatever the dial says.
175
+
176
+ **Variance** describes how far the layout may depart from the pack's plainest form: how freely the source
177
+ mixes components, side-by-side blocks and figure sizes. The converter validates it and prints it, and in
178
+ this engine version no layout value is computed from it. It belongs on the card as a statement of intent:
179
+ a variance of 2 or 3 means the author keeps to paragraphs, tables and at most one box; 6 means the author
180
+ may use the full component set the pack allows, within the budget.
181
+
182
+ **Moving a dial.** Move either dial by at most 2 from the pack value without asking, and state the change
183
+ and its reason on the card. A density of 7 for a Report that will be read on paper by older readers is a
184
+ reasonable unasked change; a density of 3 for the same Report changes its character and needs the user's
185
+ word. Density cannot rescue a document that is too long for its tonality: a Brief that runs to five pages
186
+ at density 10 is a Report.
187
+
188
+ ## Saying it and keeping it
189
+
190
+ The card is written once, before the build, and changed only when the build shows the direction was
191
+ wrong. If the gate reports `component.variety` on a four-page Report, the fix is to add a component the
192
+ card already justifies or to cut the document to three pages, not to add a box with no purpose. If the
193
+ rendered pages show a Brief spilling to four pages, the direction was wrong; rewrite as a Report and
194
+ update the card's Wrong-if line to say what happened.
195
+
196
+ Record the card in the task's build log next to the conversion line and the qa JSON. When the user asks
197
+ why the document looks as it does, the card is the answer.
198
+
199
+ ## Comparing two directions
200
+
201
+ When the user wants to see alternatives, build the same source in two tonalities and compare them:
202
+
203
+ ```bash
204
+ python3 <skill>/run.py md-to-docx draft.md report.docx --tonality Report
205
+ python3 <skill>/run.py md-to-docx draft.md brief.docx --tonality Brief
206
+ python3 <skill>/run.py qa report.docx --source draft.md --compare brief.docx
207
+ ```
208
+
209
+ The compare run fails with `tonality.structure` when the two documents differ in fewer than three of the
210
+ six structural features (title block, summary form, heading numbering, component set, running head,
211
+ contents). Two packs that pass this still need a human look at the first pages of each; the check proves
212
+ the structures differ, not that both are good. A source written for one tonality rarely reads well in
213
+ another, so a comparison is a decision aid, not a deliverable.
214
+
215
+ ## Failure patterns
216
+
217
+ - **Choosing by colour.** The packs are not themes. Choosing Proposal "because it looks warmer" gives a
218
+ separate cover page and a centred folio to a document that needed numbered sections.
219
+ - **A Report for everything.** The default row is a starting point. A one-page notice set as a Report
220
+ gets a contents check, a series line and Roman numerals it has no use for.
221
+ - **Asking instead of choosing.** A bare request gets a built document and a card, not a menu.
222
+ - **A component without a purpose line.** If the card cannot say what a callout is for in one line, the
223
+ content belongs in a paragraph.
224
+ - **Overriding the user.** A frontmatter `tonality:` written by the user, or an explicit instruction,
225
+ stays even when the signals disagree; the card notes the disagreement.
226
+ - **Mixing paths.** A tonality and a publisher in the same run is refused by the converter. A journal
227
+ submission never takes a tonality, and a tonality document is never gated with `--kind manuscript`.
228
+
229
+ ## Where to look next
230
+
231
+ - `components.md`: the directive syntax the converter accepts and the component budget.
232
+ - `page-composition.md`: the page, the type, Korean conventions and pagination.
233
+ - `tonalities/<name>.md`: one sheet per pack, with a short source fragment.
234
+ - `examples/`: nine complete sources across all six tonalities, each converted and gated.
@@ -0,0 +1,160 @@
1
+ ---
2
+ title: 사내 전기차 충전소 1년 운영 결과
3
+ subtitle: 한빛정밀 본사·평택공장 충전기 36기의 이용, 비용, 전력 부하
4
+ author: 한빛정밀 총무팀 시설파트
5
+ organization: 한빛정밀(가상 기업)
6
+ date: 2026-10-05
7
+ short_title: 전기차 충전소 1년 운영 결과
8
+ notice: "예시 데이터: 회사, 설비, 금액, 이용 수치는 모두 가정이다."
9
+ tonality: Report
10
+ ---
11
+
12
+ ::: cover kicker="시설 운영 보고 2026-4호"
13
+ :::
14
+
15
+ # 요약
16
+
17
+ 본사와 평택공장에 설치한 충전기 36기는 2025년 10월부터 1년 동안 1만 2,480회 충전을 처리했다. 기당 하루 평균 0.95회로 계획치 0.8회를 넘었고, 직원 부담 요금을 반영한 순운영비는 계획보다 13% 적었다.
18
+
19
+ ::: keyfigures
20
+ - **1만 2,480회** 누적 충전 횟수
21
+ - 2025. 10.~2026. 9., 충전 관리 시스템 집계
22
+ - **0.95회** 기당 하루 평균 충전
23
+ - 역일 기준, 계획 0.8회
24
+ - **4,360만 원** 연간 순운영비
25
+ - 전기요금·유지보수에서 직원 부담금 차감, 계획 5,010만 원
26
+ :::
27
+
28
+ 문제는 이용이 고르지 않다는 점이다. 평택공장 완속기 22기 중 6기는 주차장 북쪽 끝에 있어 가동률이 18%에 그쳤고, 본사 급속기 2기는 출근 시간대 대기 행렬이 평균 4.2대까지 늘었다. 여름철 오후에는 충전 부하가 공장 계약전력의 여유분을 잠식해 두 차례 충전 출력을 강제로 낮췄다.
29
+
30
+ 2027년에는 충전기를 더 늘리기보다 배치와 시간대 운영을 바꾸는 데 예산을 쓴다. 북쪽 완속기 6기를 출입구 쪽으로 옮기고, 급속기에는 1회 40분 제한과 예약제를 도입하며, 오후 1시부터 4시까지는 완속기 출력을 7kW에서 3.5kW로 낮추는 부하 관리를 상시 적용한다.
31
+
32
+ # 사업 개요
33
+
34
+ 충전소는 직원 전기차 보급 지원 계획의 첫 단계로 설치했다. 사업 목적은 출퇴근 차량의 전환을 돕는 동시에 공장 전력 계약을 바꾸지 않는 범위에서 충전 수요를 흡수하는 것이었다.
35
+
36
+ ## 설치 현황
37
+
38
+ 설치는 2025년 9월에 마쳤고 10월 1일부터 유료 운영을 시작했다. 본사는 방문객 주차장과 겹치지 않도록 지하 2층에, 평택공장은 직원 주차장 두 곳에 나누어 배치했다.
39
+
40
+ 표 1. 사업장별 충전기 설치 현황
41
+
42
+ | 사업장 | 급속 100kW (기) | 완속 7kW (기) | 합계 (기) |
43
+ |---|---:|---:|---:|
44
+ | 본사 지하 2층 | 2 | 10 | 12 |
45
+ | 평택공장 동측 주차장 | 2 | 8 | 10 |
46
+ | 평택공장 북측 주차장 | 0 | 12 | 12 |
47
+ | 평택공장 정문 | 0 | 2 | 2 |
48
+ | 합계 | 4 | 32 | 36 |
49
+
50
+ 자료: 총무팀 시설파트 설비 대장(예시)
51
+
52
+ ## 요금과 이용 규칙
53
+
54
+ 직원 부담 요금은 kWh당 급속 250원, 완속 150원으로 정했다. 외부 공용 충전소 요금의 약 3분의 2 수준이다. 사번 인증 카드로만 충전할 수 있고, 충전 완료 후 30분이 지나면 분당 100원의 점유 요금을 부과한다.
55
+
56
+ # 이용 실적
57
+
58
+ 1년 동안 등록한 직원 차량은 412대로 시작 시점 236대에서 75% 늘었다. 충전 횟수는 분기마다 증가했으며, 겨울철에는 배터리 효율 저하로 1회 충전량이 커졌다.
59
+
60
+ ## 분기별 충전 횟수와 충전량
61
+
62
+ 표 2. 분기별 충전 실적
63
+
64
+ | 구분 | 2025년 4분기 | 2026년 1분기 | 2026년 2분기 | 2026년 3분기 |
65
+ |---|---:|---:|---:|---:|
66
+ | 급속 충전 횟수 (회) | 610 | 742 | 805 | 868 |
67
+ | 완속 충전 횟수 (회) | 1,944 | 2,310 | 2,512 | 2,689 |
68
+ | 총 충전량 (MWh) | 58.4 | 73.9 | 70.2 | 74.6 |
69
+ | 등록 차량 (대) | 271 | 318 | 367 | 412 |
70
+
71
+ 주: 충전 횟수는 5분 미만 세션을 제외한 값이다.
72
+
73
+ 자료: 충전 관리 시스템 월간 보고서(예시)
74
+
75
+ 급속 충전은 전체 횟수의 24%였지만 전력량으로는 31%를 차지했다. 완속기는 주간 근무자가 출근 직후 꽂아 두고 점심 이후 옮기는 방식으로 하루 두 차례 쓰이는 경우가 많았다.
76
+
77
+ ## 충전기별 가동률 편차
78
+
79
+ 가동률은 충전기가 실제로 전력을 공급한 시간을 영업일 근무 시간 10시간으로 나눈 값이다. 완속기 32기의 평균은 45%였으나 위치별 차이가 컸다.
80
+
81
+ 표 3. 위치별 완속기 가동률
82
+
83
+ | 위치 | 기수 (기) | 평균 가동률 (%) | 최저 가동률 (%) |
84
+ |---|---:|---:|---:|
85
+ | 본사 지하 2층 | 10 | 58 | 49 |
86
+ | 평택공장 동측 | 8 | 52 | 44 |
87
+ | 평택공장 북측 남쪽 열 | 6 | 39 | 31 |
88
+ | 평택공장 북측 북쪽 열 | 6 | 18 | 11 |
89
+ | 평택공장 정문 | 2 | 47 | 45 |
90
+
91
+ 자료: 충전 관리 시스템 세션 기록(예시)
92
+
93
+ 북쪽 열 6기는 생산동 출입구까지 걸어서 7분 거리다. 설문에 응한 이용자 128명 중 61%가 "가깝지 않으면 다른 충전기가 빌 때까지 기다린다"고 답했다.
94
+
95
+ # 비용과 전력 부하
96
+
97
+ 운영비는 전기요금, 유지보수 계약, 통신·관리 시스템 이용료로 구성된다. 직원 부담금은 전기요금의 약 71%를 회수했다.
98
+
99
+ ## 연간 운영비
100
+
101
+ 표 4. 연간 운영비 계획과 실적
102
+
103
+ | 항목 | 계획 (만 원) | 실적 (만 원) | 차이 (만 원) |
104
+ |---|---:|---:|---:|
105
+ | 전기요금 | 6,120 | 7,040 | 920 |
106
+ | 유지보수 계약 | 1,800 | 1,800 | 0 |
107
+ | 관리 시스템·통신 | 540 | 540 | 0 |
108
+ | 직원 부담금 회수 | -3,450 | -5,020 | -1,570 |
109
+ | 순운영비 | 5,010 | 4,360 | -650 |
110
+
111
+ 주: 직원 부담금 회수는 비용에서 차감하는 값이므로 음수로 적었다.
112
+
113
+ 자료: 재무팀 계정별 원장(예시)
114
+
115
+ 전기요금이 계획을 넘은 것은 이용량이 많아서다. 같은 이유로 회수액도 늘었고, 결과적으로 순운영비는 650만 원 줄었다.
116
+
117
+ ## 여름철 피크와 출력 제한
118
+
119
+ 평택공장의 계약전력 여유분은 약 600kW다. 2026년 7월 29일과 8월 12일 오후에는 생산 설비 부하와 충전 부하가 겹쳐 여유분이 80kW 아래로 떨어졌고, 시설파트가 완속기 전체 출력을 수동으로 3.5kW로 낮췄다. 두 날 모두 충전 중단은 없었지만 해당 시간대 충전량은 평소의 절반 수준이었다.
120
+
121
+ 평택공장 완속기 22기가 오후 1시부터 4시 사이에 동시에 7kW로 충전하면 154kW가 된다. 여유분이 줄어드는 날에는 이 부하만으로 피크 요금 구간을 넘기므로, 2027년 6월 전까지 관리 시스템에 자동 출력 제한을 설정한다.
122
+
123
+ # 운영상 문제와 대응
124
+
125
+ 1년 동안 접수한 민원과 장애는 모두 57건이었다. 이 가운데 장기 점유가 23건으로 가장 많았고, 인증 카드 오류 14건, 충전기 고장 11건, 기타 9건 순이었다.
126
+
127
+ ## 장기 점유
128
+
129
+ 점유 요금을 도입한 뒤에도 완속기에 하루 종일 주차하는 사례가 남았다. 점유 요금을 받는 시점부터 이동까지 걸린 시간의 중앙값은 2026년 1분기 74분에서 3분기 38분으로 줄었다.
130
+
131
+ ## 고장과 복구 시간
132
+
133
+ 고장 11건의 평균 복구 시간은 2.6영업일이었다. 급속기 통신 모듈 교체처럼 부품 수급이 필요한 경우에는 최대 9영업일이 걸렸다.
134
+
135
+ # 2027년 운영 계획
136
+
137
+ 2027년 예산은 충전기 추가 설치 대신 배치 조정과 운영 규칙 개선에 배정한다. 새로 필요한 비용은 이설 공사와 관리 시스템 기능 추가를 합해 2,150만 원이다.
138
+
139
+ ## 배치 조정
140
+
141
+ 북측 북쪽 열 완속기 6기를 생산동 출입구 앞 주차 구역으로 옮긴다. 이설 공사는 생산 휴무일인 2027년 2월 첫째 주에 진행하며 공사비는 1,480만 원으로 추산했다.
142
+
143
+ ## 급속기 예약제와 시간 제한
144
+
145
+ 본사 급속기 2기에 30분 단위 예약과 1회 40분 제한을 적용한다. 대기 행렬이 긴 오전 8시부터 10시까지는 예약 차량만 충전한다.
146
+
147
+ 표 5. 2027년 추가 예산
148
+
149
+ | 항목 | 금액 (만 원) | 시기 |
150
+ |---|---:|---|
151
+ | 북측 완속기 6기 이설 | 1,480 | 2027년 2월 |
152
+ | 예약·시간 제한 기능 | 420 | 2027년 3월 |
153
+ | 자동 출력 제한 기능 | 250 | 2027년 5월 |
154
+ | 합계 | 2,150 | |
155
+
156
+ 자료: 시설파트 견적 비교표(예시)
157
+
158
+ ::: callout kind=key title="결정 요청 사항"
159
+ 2027년 추가 예산 2,150만 원과 급속기 예약제 시행을 승인해 주시기 바랍니다. 승인되면 2월 이설 공사부터 순서대로 착수하고, 6월에 시행 효과를 중간 보고합니다.
160
+ :::