python-hwpx-automation 6.0.3__py3-none-any.whl

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 (217) hide show
  1. hwpx_automation/__init__.py +61 -0
  2. hwpx_automation/__init__.pyi +27 -0
  3. hwpx_automation/__main__.py +8 -0
  4. hwpx_automation/agent_document.py +392 -0
  5. hwpx_automation/api.py +136 -0
  6. hwpx_automation/blind_eval.py +407 -0
  7. hwpx_automation/capabilities.py +110 -0
  8. hwpx_automation/compat.py +48 -0
  9. hwpx_automation/configuration.py +60 -0
  10. hwpx_automation/core/__init__.py +2 -0
  11. hwpx_automation/core/content.py +762 -0
  12. hwpx_automation/core/context.py +111 -0
  13. hwpx_automation/core/diff.py +53 -0
  14. hwpx_automation/core/document.py +37 -0
  15. hwpx_automation/core/formatting.py +513 -0
  16. hwpx_automation/core/handles.py +24 -0
  17. hwpx_automation/core/locations.py +205 -0
  18. hwpx_automation/core/locator.py +162 -0
  19. hwpx_automation/core/plan.py +680 -0
  20. hwpx_automation/core/resources.py +42 -0
  21. hwpx_automation/core/search.py +296 -0
  22. hwpx_automation/core/transactions.py +434 -0
  23. hwpx_automation/core/txn.py +48 -0
  24. hwpx_automation/document_state.py +95 -0
  25. hwpx_automation/errors.py +174 -0
  26. hwpx_automation/execution_lock.py +15 -0
  27. hwpx_automation/fastmcp_adapter.py +672 -0
  28. hwpx_automation/form_fill.py +1177 -0
  29. hwpx_automation/form_output_models.py +223 -0
  30. hwpx_automation/handlers/__init__.py +2 -0
  31. hwpx_automation/handlers/_shared.py +377 -0
  32. hwpx_automation/handlers/agent_document.py +257 -0
  33. hwpx_automation/handlers/authoring.py +750 -0
  34. hwpx_automation/handlers/content_edit.py +1078 -0
  35. hwpx_automation/handlers/form_fill.py +607 -0
  36. hwpx_automation/handlers/layout_style.py +660 -0
  37. hwpx_automation/handlers/quality_render.py +566 -0
  38. hwpx_automation/handlers/read_export.py +1295 -0
  39. hwpx_automation/handlers/specialized.py +624 -0
  40. hwpx_automation/handlers/tracked_changes.py +589 -0
  41. hwpx_automation/handlers/workflow.py +105 -0
  42. hwpx_automation/hwp_converter.py +227 -0
  43. hwpx_automation/hwp_support.py +94 -0
  44. hwpx_automation/hwpx_ops.py +1439 -0
  45. hwpx_automation/identity.json +263 -0
  46. hwpx_automation/identity.py +18 -0
  47. hwpx_automation/ingest_adapters.py +85 -0
  48. hwpx_automation/markdown_plan.py +216 -0
  49. hwpx_automation/mcp_cli.py +29 -0
  50. hwpx_automation/metadata/tools_meta.py +40 -0
  51. hwpx_automation/mixed_form.py +3007 -0
  52. hwpx_automation/mutation_models.py +401 -0
  53. hwpx_automation/network_policy.py +232 -0
  54. hwpx_automation/office/__init__.py +14 -0
  55. hwpx_automation/office/agent/__init__.py +125 -0
  56. hwpx_automation/office/agent/_batch_verification.py +383 -0
  57. hwpx_automation/office/agent/blueprint/__init__.py +58 -0
  58. hwpx_automation/office/agent/blueprint/bundle.py +282 -0
  59. hwpx_automation/office/agent/blueprint/catalog.py +136 -0
  60. hwpx_automation/office/agent/blueprint/dump.py +520 -0
  61. hwpx_automation/office/agent/blueprint/mapping.py +312 -0
  62. hwpx_automation/office/agent/blueprint/model.py +722 -0
  63. hwpx_automation/office/agent/blueprint/native.py +621 -0
  64. hwpx_automation/office/agent/blueprint/replay.py +622 -0
  65. hwpx_automation/office/agent/catalog.py +252 -0
  66. hwpx_automation/office/agent/cli.py +647 -0
  67. hwpx_automation/office/agent/commands.py +1383 -0
  68. hwpx_automation/office/agent/document.py +801 -0
  69. hwpx_automation/office/agent/form_plan.py +1760 -0
  70. hwpx_automation/office/agent/model.py +808 -0
  71. hwpx_automation/office/agent/path.py +155 -0
  72. hwpx_automation/office/agent/query.py +230 -0
  73. hwpx_automation/office/agent/story.py +207 -0
  74. hwpx_automation/office/authoring/__init__.py +3542 -0
  75. hwpx_automation/office/authoring/advanced_generators.py +154 -0
  76. hwpx_automation/office/authoring/builder/__init__.py +52 -0
  77. hwpx_automation/office/authoring/builder/core.py +996 -0
  78. hwpx_automation/office/authoring/builder/report.py +195 -0
  79. hwpx_automation/office/authoring/design/__init__.py +30 -0
  80. hwpx_automation/office/authoring/design/_support.py +144 -0
  81. hwpx_automation/office/authoring/design/composer.py +282 -0
  82. hwpx_automation/office/authoring/design/harvest.py +305 -0
  83. hwpx_automation/office/authoring/design/plan.py +69 -0
  84. hwpx_automation/office/authoring/design/profile.py +88 -0
  85. hwpx_automation/office/authoring/design/profiles/application_form/fragments/body.xml +1 -0
  86. hwpx_automation/office/authoring/design/profiles/application_form/fragments/heading.xml +1 -0
  87. hwpx_automation/office/authoring/design/profiles/application_form/fragments/info_table.xml +1 -0
  88. hwpx_automation/office/authoring/design/profiles/application_form/fragments/title.xml +1 -0
  89. hwpx_automation/office/authoring/design/profiles/application_form/profile.json +25 -0
  90. hwpx_automation/office/authoring/design/profiles/application_form/template.hwpx +0 -0
  91. hwpx_automation/office/authoring/design/profiles/home_notice/fragments/body.xml +1 -0
  92. hwpx_automation/office/authoring/design/profiles/home_notice/fragments/heading.xml +1 -0
  93. hwpx_automation/office/authoring/design/profiles/home_notice/fragments/title.xml +1 -0
  94. hwpx_automation/office/authoring/design/profiles/home_notice/profile.json +24 -0
  95. hwpx_automation/office/authoring/design/profiles/home_notice/template.hwpx +0 -0
  96. hwpx_automation/office/authoring/design/profiles/official_notice/fragments/body.xml +1 -0
  97. hwpx_automation/office/authoring/design/profiles/official_notice/fragments/heading.xml +1 -0
  98. hwpx_automation/office/authoring/design/profiles/official_notice/fragments/info_table.xml +1 -0
  99. hwpx_automation/office/authoring/design/profiles/official_notice/fragments/title.xml +1 -0
  100. hwpx_automation/office/authoring/design/profiles/official_notice/profile.json +25 -0
  101. hwpx_automation/office/authoring/design/profiles/official_notice/template.hwpx +0 -0
  102. hwpx_automation/office/authoring/design/profiles/report/fragments/body.xml +1 -0
  103. hwpx_automation/office/authoring/design/profiles/report/fragments/heading.xml +1 -0
  104. hwpx_automation/office/authoring/design/profiles/report/fragments/info_table.xml +1 -0
  105. hwpx_automation/office/authoring/design/profiles/report/fragments/title.xml +1 -0
  106. hwpx_automation/office/authoring/design/profiles/report/profile.json +25 -0
  107. hwpx_automation/office/authoring/design/profiles/report/template.hwpx +0 -0
  108. hwpx_automation/office/authoring/design/validator.py +107 -0
  109. hwpx_automation/office/authoring/presets/__init__.py +22 -0
  110. hwpx_automation/office/authoring/presets/proposal.py +538 -0
  111. hwpx_automation/office/authoring/report_parser.py +141 -0
  112. hwpx_automation/office/authoring/style_profile.py +437 -0
  113. hwpx_automation/office/authoring/template_analyzer.py +657 -0
  114. hwpx_automation/office/compliance/__init__.py +38 -0
  115. hwpx_automation/office/compliance/official_lint.py +478 -0
  116. hwpx_automation/office/compliance/pii.py +388 -0
  117. hwpx_automation/office/document_ops/__init__.py +13 -0
  118. hwpx_automation/office/document_ops/comparison.py +62 -0
  119. hwpx_automation/office/document_ops/mail_merge.py +73 -0
  120. hwpx_automation/office/document_ops/redline.py +35 -0
  121. hwpx_automation/office/evalplan/__init__.py +36 -0
  122. hwpx_automation/office/evalplan/runtime.py +2762 -0
  123. hwpx_automation/office/exam/__init__.py +44 -0
  124. hwpx_automation/office/exam/compose.py +282 -0
  125. hwpx_automation/office/exam/ir.py +44 -0
  126. hwpx_automation/office/exam/measure.py +163 -0
  127. hwpx_automation/office/exam/parser.py +150 -0
  128. hwpx_automation/office/exam/profile.py +123 -0
  129. hwpx_automation/office/form_fill/__init__.py +66 -0
  130. hwpx_automation/office/form_fill/classification.py +108 -0
  131. hwpx_automation/office/form_fill/fill_residue.py +242 -0
  132. hwpx_automation/office/form_fill/fit/__init__.py +36 -0
  133. hwpx_automation/office/form_fill/fit/apply.py +24 -0
  134. hwpx_automation/office/form_fill/fit/engine.py +24 -0
  135. hwpx_automation/office/form_fill/fit/measure.py +50 -0
  136. hwpx_automation/office/form_fill/fit/policy.py +28 -0
  137. hwpx_automation/office/form_fill/fit/report.py +28 -0
  138. hwpx_automation/office/form_fill/fit/seal.py +457 -0
  139. hwpx_automation/office/form_fill/fit/wordbox.py +1343 -0
  140. hwpx_automation/office/form_fill/guidance.py +704 -0
  141. hwpx_automation/office/form_fill/quality.py +961 -0
  142. hwpx_automation/office/form_fill/split_run.py +333 -0
  143. hwpx_automation/office/form_fill/template_formfit.py +656 -0
  144. hwpx_automation/office/house_style/__init__.py +196 -0
  145. hwpx_automation/office/house_style/composition.py +68 -0
  146. hwpx_automation/office/house_style/data/bank.json +625 -0
  147. hwpx_automation/office/house_style/data/genres.json +43 -0
  148. hwpx_automation/office/quality/__init__.py +14 -0
  149. hwpx_automation/office/quality/page_guard.py +277 -0
  150. hwpx_automation/office/rendering/__init__.py +145 -0
  151. hwpx_automation/office/rendering/_hancom_open_rate.ps1 +374 -0
  152. hwpx_automation/office/rendering/_refresh_hwpx_mac.applescript +162 -0
  153. hwpx_automation/office/rendering/_render_hwpx.ps1 +72 -0
  154. hwpx_automation/office/rendering/_render_hwpx_mac.applescript +249 -0
  155. hwpx_automation/office/rendering/block_splits.py +76 -0
  156. hwpx_automation/office/rendering/detectors.py +151 -0
  157. hwpx_automation/office/rendering/diff.py +153 -0
  158. hwpx_automation/office/rendering/fixture_corpus.py +215 -0
  159. hwpx_automation/office/rendering/oracle.py +909 -0
  160. hwpx_automation/office/rendering/page_qa.py +245 -0
  161. hwpx_automation/office/rendering/qa_contracts.py +293 -0
  162. hwpx_automation/office/rendering/qa_metrics.py +241 -0
  163. hwpx_automation/office/rendering/worker.py +290 -0
  164. hwpx_automation/office/utilities/__init__.py +12 -0
  165. hwpx_automation/office/utilities/table_compute.py +477 -0
  166. hwpx_automation/ops_services/__init__.py +1 -0
  167. hwpx_automation/ops_services/_border_fill.py +283 -0
  168. hwpx_automation/ops_services/composition.py +55 -0
  169. hwpx_automation/ops_services/content_layout.py +322 -0
  170. hwpx_automation/ops_services/context.py +213 -0
  171. hwpx_automation/ops_services/form_fields.py +557 -0
  172. hwpx_automation/ops_services/media.py +178 -0
  173. hwpx_automation/ops_services/memo_style.py +477 -0
  174. hwpx_automation/ops_services/package_validation.py +166 -0
  175. hwpx_automation/ops_services/planning.py +201 -0
  176. hwpx_automation/ops_services/preview_export.py +585 -0
  177. hwpx_automation/ops_services/read_query.py +601 -0
  178. hwpx_automation/ops_services/save_policy.py +604 -0
  179. hwpx_automation/ops_services/tables.py +539 -0
  180. hwpx_automation/ops_services/transactions.py +616 -0
  181. hwpx_automation/preview_output_models.py +69 -0
  182. hwpx_automation/public-modules.json +206 -0
  183. hwpx_automation/py.typed +1 -0
  184. hwpx_automation/quality.py +351 -0
  185. hwpx_automation/quality_generation.py +725 -0
  186. hwpx_automation/runtime.py +321 -0
  187. hwpx_automation/runtime_services.py +100 -0
  188. hwpx_automation/server.py +259 -0
  189. hwpx_automation/storage.py +747 -0
  190. hwpx_automation/tool_bindings.py +170 -0
  191. hwpx_automation/tool_contract.py +982 -0
  192. hwpx_automation/upstream.py +755 -0
  193. hwpx_automation/utils/__init__.py +2 -0
  194. hwpx_automation/utils/helpers.py +29 -0
  195. hwpx_automation/visual_qa.py +667 -0
  196. hwpx_automation/workflow/__init__.py +55 -0
  197. hwpx_automation/workflow/adapters.py +482 -0
  198. hwpx_automation/workflow/dispatcher.py +213 -0
  199. hwpx_automation/workflow/models.py +243 -0
  200. hwpx_automation/workflow/policy.py +198 -0
  201. hwpx_automation/workflow/render_contracts.py +173 -0
  202. hwpx_automation/workflow/render_metrics.py +196 -0
  203. hwpx_automation/workflow/render_queue.py +482 -0
  204. hwpx_automation/workflow/render_security.py +172 -0
  205. hwpx_automation/workflow/render_transport.py +369 -0
  206. hwpx_automation/workflow/rendering.py +206 -0
  207. hwpx_automation/workflow/service.py +758 -0
  208. hwpx_automation/workflow/state_machine.py +65 -0
  209. hwpx_automation/workflow/store.py +747 -0
  210. hwpx_automation/workspace.py +1694 -0
  211. python_hwpx_automation-6.0.3.dist-info/METADATA +279 -0
  212. python_hwpx_automation-6.0.3.dist-info/RECORD +217 -0
  213. python_hwpx_automation-6.0.3.dist-info/WHEEL +5 -0
  214. python_hwpx_automation-6.0.3.dist-info/entry_points.txt +3 -0
  215. python_hwpx_automation-6.0.3.dist-info/licenses/LICENSE +178 -0
  216. python_hwpx_automation-6.0.3.dist-info/licenses/NOTICE +14 -0
  217. python_hwpx_automation-6.0.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,625 @@
1
+ {
2
+ "schemaVersion": "hwpx.house-style-bank/v0",
3
+ "generated": "2026-07-21",
4
+ "status": "v0 — owner-decided 2026-07-21 (결정 6항목: 공문 본문 15pt / 보고서 제목 22·27 병행 / 기본 모드 hancom-native / 일반 본문 11pt / 개인용 3트랙 / 공개 위치는 후속 스테이지). 값 자체는 스테이지 실증 전 draft 정밀도",
5
+ "researchDoc": "docs/2026-07-21-house-style-research.md",
6
+ "_usage": "zero-base 저작 시 donor로 주입할 스타일 값. 뱅크=데이터(감각), 프로파일 선택·조합=스킬(두뇌). 값의 prov는 'layer:근거' — layer ∈ statute(법정)|form-rule(서식 설계기준)|practice(실무 관행 웹)|harvest(M3 실물 수확)|measured(기준본·분포 실측)|hwp-default|krds|personal-web",
7
+ "fontSafety": {
8
+ "grades": {
9
+ "S": [
10
+ "함초롬바탕",
11
+ "함초롬돋움"
12
+ ],
13
+ "A": [
14
+ "휴먼명조",
15
+ "휴먼고딕",
16
+ "HY헤드라인M",
17
+ "HY견고딕",
18
+ "HY견명조",
19
+ "한컴바탕",
20
+ "한컴돋움",
21
+ "한컴 고딕",
22
+ "한컴산뜻돋움",
23
+ "한컴 윤고딕 계열",
24
+ "문체부 계열",
25
+ "KBIZ한마음고딕",
26
+ "KBIZ한마음명조",
27
+ "맑은 고딕"
28
+ ],
29
+ "B": [
30
+ "Pretendard",
31
+ "나눔고딕",
32
+ "나눔명조",
33
+ "나눔스퀘어",
34
+ "KoPub돋움",
35
+ "KoPub바탕",
36
+ "Noto Sans KR",
37
+ "마루부리",
38
+ "리디바탕",
39
+ "Apple SD 산돌고딕 Neo",
40
+ "바탕",
41
+ "굴림"
42
+ ]
43
+ },
44
+ "_gradeMeaning": "S=무조건 안전(기본값·자유 라이선스·대체 수렴점) / A=한컴 설치 환경에서 안전(대부분 한컴오피스 전용 라이선스 — 임베드·재배포 금지, 문체부·KBIZ 제외) / B=번들 아님·대체 각오(자유 라이선스는 임베드 시에만)",
45
+ "fallbackChain": [
46
+ "함초롬바탕",
47
+ "함초롬돋움",
48
+ "한컴바탕",
49
+ "한컴돋움",
50
+ "새바탕",
51
+ "바탕",
52
+ "굴림"
53
+ ],
54
+ "modes": {
55
+ "hancom-native": "S+A 허용 — 수신자가 한글로 여는 통상 상황 (기본)",
56
+ "portable": "S만(+자유 라이선스 임베드) — 비한컴 뷰어·재배포·장기 보존"
57
+ },
58
+ "portableMap": {
59
+ "휴먼명조": "함초롬바탕",
60
+ "HY견명조": "함초롬바탕",
61
+ "한컴바탕": "함초롬바탕",
62
+ "마루부리(designIntent)": "함초롬바탕",
63
+ "HY헤드라인M": "함초롬돋움",
64
+ "휴먼고딕": "함초롬돋움",
65
+ "한컴돋움": "함초롬돋움",
66
+ "한컴 고딕": "함초롬돋움",
67
+ "한컴산뜻돋움": "함초롬돋움",
68
+ "맑은 고딕": "함초롬돋움",
69
+ "Pretendard(designIntent)": "함초롬돋움"
70
+ },
71
+ "warnings": [
72
+ "휴먼명조 HFT/TTF 이중형식(TH/TT) — 동명이라도 메트릭 차로 리플로우 가능. 휴먼명조 지정 문서는 실한컴 렌더 게이트 필수",
73
+ "맑은 고딕: 한컴 설치 환경이면 양 플랫폼 존재(Mac 앱 번들 malgun.ttf 실측 2026-07-21, 웹 '없다' 주장 교정), 비한컴 Mac 뷰어에선 부재",
74
+ "OS 시스템 폰트(맑은 고딕·Apple SD 산돌고딕 Neo) 단독 의존 금지 — 크로스플랫폼 편측 대체"
75
+ ]
76
+ },
77
+ "sharedRules": [
78
+ "자간은 좁히고 행간은 넓혀라 — 본문 160%(읽기 문서 180), 고딕 자간 -5~-8, 행간 150% 미만 금지",
79
+ "2서체 이내 — 본문 명조 + 제목 고딕, 무분별 혼용 금지",
80
+ "장평 100 고정 — 90~110 밖 임의 변형 금지",
81
+ "위계는 크기+굵기로 — 제목 >= 본문 x1.4 또는 굵기 대비, 색 남발 금지",
82
+ "정렬 통일(본문 양쪽정렬 일관)·문단 간격 일정·여백 확보",
83
+ "표 안은 본문보다 1~2pt 작고 줄간격 100~130으로 촘촘하게",
84
+ "기본값 그대로 두지 마라 — 크기·행간·위계를 결정해야 문서로 읽힌다"
85
+ ],
86
+ "profiles": {
87
+ "gongmun": {
88
+ "label": "공문 (기안문/시행문/통지/협조)",
89
+ "when": "기관 명의 발신 문서. 규정 게이트(inspect_official_document_style) 병행 필수",
90
+ "page": {
91
+ "paper": "A4",
92
+ "marginsMm": {
93
+ "top": 20,
94
+ "bottom": 15,
95
+ "left": 20,
96
+ "right": 20
97
+ },
98
+ "prov": [
99
+ "statute:A4 규정 제7조제6항",
100
+ "measured:기준본 20/15/20/20 — 일반 기안문 여백 법정 미지정(편람 p.53 자유조정)",
101
+ "form-rule:서식 준거는 20/10/20/20(편람 제3절)"
102
+ ]
103
+ },
104
+ "roles": {
105
+ "agency_head": {
106
+ "font": "HY헤드라인M",
107
+ "sizePt": 16,
108
+ "align": "center",
109
+ "letterSpacing": "확장(자간 벌림)",
110
+ "prov": [
111
+ "harvest:M3 official_notice title 16pt",
112
+ "statute:두문 가운데·자간 확장(편람 p.57)"
113
+ ]
114
+ },
115
+ "subject": {
116
+ "font": "휴먼명조",
117
+ "sizePt": 15,
118
+ "bold": true,
119
+ "prov": [
120
+ "practice:본문 크기+굵기 관행"
121
+ ]
122
+ },
123
+ "body": {
124
+ "font": "휴먼명조",
125
+ "sizePt": 15,
126
+ "lineSpacingPct": 160,
127
+ "altLineSpacingPct": 180,
128
+ "align": "justify",
129
+ "prov": [
130
+ "practice:휴먼명조 15pt(머니투데이·다수)",
131
+ "harvest:M3 body 휴먼명조 15pt",
132
+ "measured:공문 실측 180 우세 → alt",
133
+ "practice:K-에듀파인 도구 기본 123%는 도구값(비채택)"
134
+ ]
135
+ },
136
+ "sender_name": {
137
+ "font": "한컴돋움",
138
+ "sizePt": 15,
139
+ "bold": true,
140
+ "align": "center",
141
+ "prov": [
142
+ "form-rule:발신명의 돋움체 15P 진하게(편람 p.149)"
143
+ ]
144
+ },
145
+ "closing_meta": {
146
+ "font": "휴먼명조",
147
+ "sizePt": 13,
148
+ "prov": [
149
+ "harvest:M3 결문/info_table 12~14pt"
150
+ ]
151
+ },
152
+ "table_cell": {
153
+ "font": "휴먼명조",
154
+ "sizePt": 12,
155
+ "lineSpacingPct": 130,
156
+ "prov": [
157
+ "harvest:M3 info_table 12pt",
158
+ "measured:표 안 100~130 분포"
159
+ ]
160
+ }
161
+ },
162
+ "statutory": {
163
+ "itemNumbering": [
164
+ "1.",
165
+ "가.",
166
+ "1)",
167
+ "가)",
168
+ "(1)",
169
+ "(가)",
170
+ "①",
171
+ "㉮"
172
+ ],
173
+ "itemSymbolsAllowed": [
174
+ "□",
175
+ "○",
176
+ "-",
177
+ "ㆍ"
178
+ ],
179
+ "indentRule": "첫째 항목 왼쪽 기본선, 하위 항목 +2타, 기호-내용 1타 (2타=한글1자), 둘째 줄은 내용 첫 글자 정렬",
180
+ "dateFormat": "2026. 7. 21. (온점·0 미채움)",
181
+ "timeFormat": "24시각제 15:00",
182
+ "endMark": "본문 끝 2타 '끝.' (붙임 있으면 붙임 뒤)",
183
+ "attachment": "'붙임' 쌍점 없이 + 명칭 + '1부.' (2건 이상 번호, 1건은 숫자 생략)",
184
+ "pageNumber": "중앙 하단 (중요문서 4-1, 4-2…)",
185
+ "sealColor": "관인 빨간색(출력 시 검정 가능)",
186
+ "prov": [
187
+ "statute:규칙 제2조·제18조·규정 제7조, 2025 편람 원문"
188
+ ]
189
+ }
190
+ },
191
+ "report": {
192
+ "label": "보고서·계획서",
193
+ "when": "정책/업무 보고, 운영·사업 계획. 개조식(~함/~음), 항목 2줄 이내",
194
+ "page": {
195
+ "paper": "A4",
196
+ "marginsMm": {
197
+ "top": 20,
198
+ "bottom": 15,
199
+ "left": 20,
200
+ "right": 20
201
+ },
202
+ "prov": [
203
+ "practice:좌우 20 관행",
204
+ "measured:기준본 동일"
205
+ ]
206
+ },
207
+ "outlineSymbols": {
208
+ "order": [
209
+ "□",
210
+ "○",
211
+ "-",
212
+ "ㆍ"
213
+ ],
214
+ "prov": [
215
+ "practice:보고서 개요기호(공문 1.가.와 구분)"
216
+ ]
217
+ },
218
+ "roles": {
219
+ "cover_title": {
220
+ "font": "HY헤드라인M",
221
+ "sizePt": 27,
222
+ "bold": true,
223
+ "align": "center",
224
+ "prov": [
225
+ "harvest:M3 report title 27pt bold(표지형)"
226
+ ]
227
+ },
228
+ "title": {
229
+ "font": "HY헤드라인M",
230
+ "sizePt": 22,
231
+ "bold": true,
232
+ "prov": [
233
+ "practice:20~22pt(본문형 제목)"
234
+ ]
235
+ },
236
+ "heading1": {
237
+ "font": "HY헤드라인M",
238
+ "sizePt": 16,
239
+ "spaceAfterPt": 8,
240
+ "prov": [
241
+ "practice:대분류 16pt·뒤 8pt"
242
+ ]
243
+ },
244
+ "heading2": {
245
+ "font": "휴먼명조",
246
+ "sizePt": 15,
247
+ "bold": true,
248
+ "prov": [
249
+ "harvest:M3 heading 휴먼명조 15pt"
250
+ ]
251
+ },
252
+ "body": {
253
+ "font": "휴먼명조",
254
+ "sizePt": 15,
255
+ "lineSpacingPct": 160,
256
+ "prov": [
257
+ "practice:14~15pt·160%",
258
+ "harvest:M3 body 15pt"
259
+ ]
260
+ },
261
+ "paren_note": {
262
+ "font": "휴먼명조",
263
+ "sizePt": 12,
264
+ "prov": [
265
+ "practice:괄호 부연 12pt"
266
+ ]
267
+ },
268
+ "reference": {
269
+ "font": "한컴돋움",
270
+ "sizePt": 10,
271
+ "lineSpacingPct": 130,
272
+ "prov": [
273
+ "practice:참조/주석 10~13pt·130%",
274
+ "measured:주석 10pt"
275
+ ]
276
+ },
277
+ "table_header": {
278
+ "font": "한컴돋움",
279
+ "sizePt": 11,
280
+ "bold": true,
281
+ "prov": [
282
+ "practice:표 안 고딕 10~13pt"
283
+ ]
284
+ },
285
+ "table_cell": {
286
+ "font": "한컴돋움",
287
+ "sizePt": 10.5,
288
+ "lineSpacingPct": 130,
289
+ "prov": [
290
+ "practice",
291
+ "measured:표 안 100~130·셀 10~11.5pt"
292
+ ]
293
+ }
294
+ }
295
+ },
296
+ "home_notice": {
297
+ "label": "가정통신문·안내문",
298
+ "when": "학교→학부모/대상자 공지. 가독 우선(수신자 일반인)",
299
+ "page": {
300
+ "paper": "A4",
301
+ "marginsMm": {
302
+ "top": 15,
303
+ "bottom": 15,
304
+ "left": 15,
305
+ "right": 15
306
+ },
307
+ "prov": [
308
+ "harvest:M3 home_notice 15mm 계열(실물 편차 큼 — 20mm 계열도 무방)"
309
+ ]
310
+ },
311
+ "roles": {
312
+ "title": {
313
+ "font": "맑은 고딕",
314
+ "sizePt": 20,
315
+ "bold": true,
316
+ "align": "center",
317
+ "altFont": "HY헤드라인M",
318
+ "prov": [
319
+ "harvest:M3 title 맑은 고딕 20pt bold",
320
+ "practice:16~20pt"
321
+ ]
322
+ },
323
+ "heading": {
324
+ "font": "함초롬바탕",
325
+ "sizePt": 14,
326
+ "bold": true,
327
+ "prov": [
328
+ "harvest:M3 heading 14pt bold"
329
+ ]
330
+ },
331
+ "body": {
332
+ "font": "함초롬바탕",
333
+ "sizePt": 12,
334
+ "lineSpacingPct": 160,
335
+ "altLineSpacingPct": 180,
336
+ "prov": [
337
+ "harvest:M3 body 12pt",
338
+ "practice:11~12pt·160~180%(저학년·학부모 가독 시 180)"
339
+ ]
340
+ },
341
+ "table_cell": {
342
+ "font": "함초롬돋움",
343
+ "sizePt": 10.5,
344
+ "lineSpacingPct": 130,
345
+ "prov": [
346
+ "practice:표 안 10~10.5pt",
347
+ "measured"
348
+ ]
349
+ }
350
+ }
351
+ },
352
+ "default_document": {
353
+ "label": "일반 문서 기본값",
354
+ "when": "유형 특정 불가 시 안전 기본. HWP 기본값을 실측·관행으로 보정",
355
+ "page": {
356
+ "paper": "A4",
357
+ "marginsMm": {
358
+ "top": 20,
359
+ "bottom": 15,
360
+ "left": 20,
361
+ "right": 20
362
+ },
363
+ "prov": [
364
+ "measured:기준본 실측"
365
+ ]
366
+ },
367
+ "roles": {
368
+ "title": {
369
+ "font": "함초롬돋움",
370
+ "sizePt": 16,
371
+ "bold": true,
372
+ "prov": [
373
+ "practice:본문 x1.4~1.6 대비"
374
+ ]
375
+ },
376
+ "heading": {
377
+ "font": "함초롬돋움",
378
+ "sizePt": 13,
379
+ "bold": true,
380
+ "prov": [
381
+ "measured:소제목 12pt bold",
382
+ "practice:위계 대비 보정 +1"
383
+ ]
384
+ },
385
+ "body": {
386
+ "font": "함초롬바탕",
387
+ "sizePt": 11,
388
+ "lineSpacingPct": 160,
389
+ "altLineSpacingPct": 180,
390
+ "align": "justify",
391
+ "firstLineIndentPt": 10,
392
+ "letterSpacingPct": 0,
393
+ "prov": [
394
+ "hwp-default:함초롬바탕 10pt·160%(한컴 공식)",
395
+ "measured:사람 최종본 11pt",
396
+ "practice:첫줄 들여쓰기 10pt(1글자)"
397
+ ]
398
+ },
399
+ "emphasis": {
400
+ "letterSpacingPct": -5,
401
+ "bold": true,
402
+ "prov": [
403
+ "measured:강조부 자간 -5~-10",
404
+ "practice:고딕 -5~-8"
405
+ ]
406
+ },
407
+ "meta": {
408
+ "font": "함초롬돋움",
409
+ "sizePt": 10,
410
+ "prov": [
411
+ "measured:주석 10pt"
412
+ ]
413
+ },
414
+ "table_header": {
415
+ "font": "함초롬돋움",
416
+ "sizePt": 10.5,
417
+ "bold": true,
418
+ "prov": [
419
+ "practice:표 안 본문-1~2pt"
420
+ ]
421
+ },
422
+ "table_cell": {
423
+ "font": "함초롬돋움",
424
+ "sizePt": 10,
425
+ "lineSpacingPct": 130,
426
+ "prov": [
427
+ "practice",
428
+ "measured:표 안 100~130"
429
+ ]
430
+ }
431
+ },
432
+ "ratioPct": {
433
+ "value": 100,
434
+ "range": [
435
+ 90,
436
+ 110
437
+ ],
438
+ "prov": [
439
+ "practice:장평 임의 변형 금지",
440
+ "measured:100 기본·90~98 혼용"
441
+ ]
442
+ }
443
+ },
444
+ "personal_modern": {
445
+ "label": "개인용 모던 (예쁘게 저장하고 싶은 개인 문서)",
446
+ "when": "이력서/자소서·대학 리포트·계획표/다이어리·노션형 정리 문서 — '예쁘게' 요청 시",
447
+ "colorRule": "60-30-10 — 무채색 본문 + 악센트 1색, 색은 강조·포인트에만. 본문은 순검정 대신 차콜",
448
+ "variants": {
449
+ "modern_blue": {
450
+ "label": "기본형 — 모던 블루",
451
+ "font": {
452
+ "designIntent": "Pretendard",
453
+ "hancomNative": "한컴 고딕",
454
+ "portable": "함초롬돋움",
455
+ "prov": [
456
+ "personal-web:국민 모던 기본체 Pretendard(B등급→매핑)",
457
+ "measured:한컴 고딕 Mac Install 번들 실측"
458
+ ]
459
+ },
460
+ "palette": {
461
+ "text": "#1E2124",
462
+ "meta": "#6D7882",
463
+ "border": "#B1B8BE",
464
+ "tableHeaderBg": "#F4F5F6",
465
+ "accent": "#256EF4",
466
+ "prov": [
467
+ "krds:그레이 램프·primary 블루(KRDS 공식)"
468
+ ]
469
+ },
470
+ "page": {
471
+ "paper": "A4",
472
+ "marginsMm": {
473
+ "top": 25,
474
+ "bottom": 20,
475
+ "left": 28,
476
+ "right": 28
477
+ },
478
+ "prov": [
479
+ "personal-web:넉넉한 여백 상하 20~25·좌우 25~30"
480
+ ]
481
+ },
482
+ "roles": {
483
+ "cover_title": {
484
+ "sizePt": 27,
485
+ "bold": true,
486
+ "align": "center",
487
+ "lineSpacingPct": 130,
488
+ "prov": [
489
+ "personal-web:표지 제목 26~28pt bold 중앙"
490
+ ]
491
+ },
492
+ "cover_meta": {
493
+ "sizePt": 11,
494
+ "lineSpacingPct": 160,
495
+ "color": "#6D7882",
496
+ "align": "center",
497
+ "position": "하단 정돈(과목/교수/학과/학번/이름/제출일)",
498
+ "prov": [
499
+ "personal-web:리포트 표지 관행(다수 대학)"
500
+ ]
501
+ },
502
+ "h1": {
503
+ "sizePt": 17,
504
+ "bold": true,
505
+ "lineSpacingPct": 150,
506
+ "prov": [
507
+ "krds:위계 스케일·150%·700 weight"
508
+ ]
509
+ },
510
+ "h2": {
511
+ "sizePt": 13.5,
512
+ "bold": true,
513
+ "lineSpacingPct": 150,
514
+ "prov": [
515
+ "krds",
516
+ "personal-web:13~14pt"
517
+ ]
518
+ },
519
+ "body": {
520
+ "sizePt": 11,
521
+ "lineSpacingPct": 170,
522
+ "color": "#1E2124",
523
+ "prov": [
524
+ "personal-web:10.5~11pt·행간 170%",
525
+ "measured:사람 본문 11pt"
526
+ ]
527
+ },
528
+ "caption": {
529
+ "sizePt": 9,
530
+ "lineSpacingPct": 150,
531
+ "color": "#6D7882",
532
+ "prov": [
533
+ "personal-web"
534
+ ]
535
+ },
536
+ "table_header": {
537
+ "sizePt": 10,
538
+ "bold": true,
539
+ "bgColor": "#F4F5F6",
540
+ "lineSpacingPct": 140,
541
+ "prov": [
542
+ "personal-web",
543
+ "krds:은은한 면 F4F5F6"
544
+ ]
545
+ },
546
+ "table_cell": {
547
+ "sizePt": 10,
548
+ "lineSpacingPct": 140,
549
+ "borderColor": "#B1B8BE",
550
+ "prov": [
551
+ "personal-web",
552
+ "krds:연회색 테두리"
553
+ ]
554
+ }
555
+ },
556
+ "notes": [
557
+ "쪽번호 2쪽부터 하단 중앙",
558
+ "이력서 힌트: 본문 10pt·행간 130~140·2쪽 이내"
559
+ ]
560
+ },
561
+ "emotive_calm": {
562
+ "label": "감성형 — 톤다운",
563
+ "inherits": "modern_blue",
564
+ "font": {
565
+ "designIntent": "마루부리 (대체: 리디바탕·나눔명조)",
566
+ "hancomNative": "함초롬바탕",
567
+ "portable": "함초롬바탕",
568
+ "prov": [
569
+ "personal-web:감성 본문 폰트 다수 일치(B등급→매핑)"
570
+ ]
571
+ },
572
+ "overrides": {
573
+ "body": {
574
+ "lineSpacingPct": 180,
575
+ "prov": [
576
+ "personal-web:감성 트랙 행간 180%"
577
+ ]
578
+ },
579
+ "accentOptions": [
580
+ "세이지 그린 계열(예시 #7C9070 — 합성값, 확정 전 오너 확인)",
581
+ "네이비 #1F3864(기존 코드 프리셋 계승)"
582
+ ]
583
+ },
584
+ "notes": [
585
+ "제목 대비가 필요하면 고딕(hancomNative: 한컴 고딕) bold 혼용 허용 — 2서체 이내 규칙 내"
586
+ ]
587
+ },
588
+ "minimal_mono": {
589
+ "label": "미니멀 — 무채색",
590
+ "inherits": "modern_blue",
591
+ "font": {
592
+ "designIntent": "Pretendard",
593
+ "hancomNative": "한컴 고딕",
594
+ "portable": "함초롬돋움",
595
+ "prov": [
596
+ "personal-web:국민 모던 기본체 Pretendard(B등급→매핑)",
597
+ "measured:한컴 고딕 Mac Install 번들 실측"
598
+ ]
599
+ },
600
+ "overrides": {
601
+ "palette": {
602
+ "accent": null,
603
+ "_note": "악센트 없음 — 60-30-10의 강조 10%를 색 대신 굵기·크기 대비로 대체"
604
+ },
605
+ "table_header": {
606
+ "bgColor": null,
607
+ "rule": "배경 면 없이 상하 괘선(#B1B8BE)만으로 구분"
608
+ },
609
+ "body": {
610
+ "lineSpacingPct": 170
611
+ }
612
+ },
613
+ "notes": [
614
+ "미니멀의 미감은 여백과 위계 대비에서 옴 — modern_blue의 넉넉한 여백 유지·확대",
615
+ "오너 결정(2026-07-21)으로 추가된 3번째 트랙 — 세부값은 후속 스테이지 실증에서 정밀화"
616
+ ],
617
+ "prov": [
618
+ "personal-web:무채색+굵기 위계 다수 일치",
619
+ "owner:3트랙 결정 2026-07-21"
620
+ ]
621
+ }
622
+ }
623
+ }
624
+ }
625
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "schemaVersion": "hwpx.house-style-genres/v0",
3
+ "generated": "2026-07-23",
4
+ "_usage": "장르 구조 문법(감각 데이터). 스킬(두뇌)이 per-doc 인스턴스화하고, 게이트는 이 데이터에 대해 검사한다. 판단 하드코딩 금지 — 값의 prov는 'layer:근거', layer ∈ harvest(실물 수확 N=3)|template(도교육청 서식 inline)|owner",
5
+ "genres": {
6
+ "operating_plan": {
7
+ "label": "운영계획서 (기관·사업·정책 운영 계획)",
8
+ "when": "기관/사업/정책 운영 계획. 개조식. 정부·공공 장르",
9
+ "typography": {
10
+ "inherits": "report",
11
+ "prov": ["template:도교육청 서식 inline(헤더 HY헤드라인M 14/본문 휴먼명조 13/160%)와 뱅크 report 교차일치"],
12
+ "roles": {
13
+ "section_chip_number": {"font": "HY헤드라인M", "sizePt": 14, "bold": true, "align": "center", "onAccent": true, "prov": ["harvest:섹션칩 번호칸 accent 배경"]},
14
+ "section_chip_title": {"font": "HY헤드라인M", "sizePt": 14, "bold": true, "prov": ["harvest:섹션칩 제목"]},
15
+ "org_box_label": {"font": "휴먼명조", "sizePt": 11, "align": "center", "prov": ["harvest:조직도 박스 라벨"]}
16
+ }
17
+ },
18
+ "grammar": {
19
+ "sequence": ["title_band", "issuer", "slogan?", "section+"],
20
+ "section": {"divider": "section_chip", "body": "prose_body", "embeds": "embedded_block*"},
21
+ "blockTypes": {
22
+ "title_band": {"desc": "1x1 boxed title 「…」 운영 계획, 가운데·큰 글자", "required": true},
23
+ "issuer": {"desc": "발신 기관명", "required": true},
24
+ "slogan": {"desc": "인용 슬로건/태그라인", "required": false},
25
+ "section_chip": {"desc": "섹션 구분자 1x3 [번호box][gap][제목] 또는 inline", "required": true},
26
+ "prose_body": {"desc": "개조식 계층 ○/-/□/①/➡/※", "required": true},
27
+ "org_chart": {"desc": "표-기반 박스 조직도(병합 박스+셀 테두리 커넥터). 드로잉 아님(2026-07-23 실측)", "required": false},
28
+ "comparison": {"desc": "AS-IS➡TO-BE 표", "required": false},
29
+ "data_table": {"desc": "현황/예산/spec 표", "required": false},
30
+ "faq": {"desc": "순/질의/응답 3열 표", "required": false}
31
+ },
32
+ "variableSlots": {
33
+ "numbering": {"options": ["roman", "arabic"], "default": "roman", "desc": "섹션 번호 체계 Ⅰ~ vs 1.~"},
34
+ "chipStyle": {"options": ["box", "inline"], "default": "box", "desc": "섹션칩 렌더 색박스 vs inline"},
35
+ "bulletGlyph": {"options": ["○", "ㅇ"], "default": "○"},
36
+ "accentColor": {"desc": "섹션칩·강조 accent 1색(문서마다 변주)", "example": "#3366CC"},
37
+ "headerImage": {"desc": "타이틀 밴드/첫 단 로고·엠블럼(변주, 입력 파라미터)"}
38
+ },
39
+ "prov": ["harvest:N=3 실물(앵커+형제2) 공유 문법", "owner:형 공유·표면 변주 확증 2026-07-22"]
40
+ }
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,14 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ """Canonical office document-quality policy owners."""
3
+
4
+ from .page_guard import (
5
+ DocumentMetrics,
6
+ collect_metrics,
7
+ compare_metrics,
8
+ )
9
+
10
+ __all__ = [
11
+ "DocumentMetrics",
12
+ "collect_metrics",
13
+ "compare_metrics",
14
+ ]