@sugukuru/mcp-houjin-bangou 0.2.0

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 (151) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/LICENSE +21 -0
  3. package/README.ja.md +196 -0
  4. package/README.md +198 -0
  5. package/dist/api/csv-parser.d.ts +37 -0
  6. package/dist/api/csv-parser.d.ts.map +1 -0
  7. package/dist/api/csv-parser.js +189 -0
  8. package/dist/api/csv-parser.js.map +1 -0
  9. package/dist/api/nta-client.d.ts +71 -0
  10. package/dist/api/nta-client.d.ts.map +1 -0
  11. package/dist/api/nta-client.js +117 -0
  12. package/dist/api/nta-client.js.map +1 -0
  13. package/dist/api/rate-limiter.d.ts +39 -0
  14. package/dist/api/rate-limiter.d.ts.map +1 -0
  15. package/dist/api/rate-limiter.js +74 -0
  16. package/dist/api/rate-limiter.js.map +1 -0
  17. package/dist/completion/handler.d.ts +19 -0
  18. package/dist/completion/handler.d.ts.map +1 -0
  19. package/dist/completion/handler.js +136 -0
  20. package/dist/completion/handler.js.map +1 -0
  21. package/dist/domain/check-digit.d.ts +47 -0
  22. package/dist/domain/check-digit.d.ts.map +1 -0
  23. package/dist/domain/check-digit.js +91 -0
  24. package/dist/domain/check-digit.js.map +1 -0
  25. package/dist/domain/close-cause-codes.d.ts +28 -0
  26. package/dist/domain/close-cause-codes.d.ts.map +1 -0
  27. package/dist/domain/close-cause-codes.js +27 -0
  28. package/dist/domain/close-cause-codes.js.map +1 -0
  29. package/dist/domain/corporate-number.d.ts +81 -0
  30. package/dist/domain/corporate-number.d.ts.map +1 -0
  31. package/dist/domain/corporate-number.js +88 -0
  32. package/dist/domain/corporate-number.js.map +1 -0
  33. package/dist/domain/invoice-codes.d.ts +142 -0
  34. package/dist/domain/invoice-codes.d.ts.map +1 -0
  35. package/dist/domain/invoice-codes.js +106 -0
  36. package/dist/domain/invoice-codes.js.map +1 -0
  37. package/dist/domain/invoice-number.d.ts +47 -0
  38. package/dist/domain/invoice-number.d.ts.map +1 -0
  39. package/dist/domain/invoice-number.js +71 -0
  40. package/dist/domain/invoice-number.js.map +1 -0
  41. package/dist/domain/kind-codes.d.ts +62 -0
  42. package/dist/domain/kind-codes.d.ts.map +1 -0
  43. package/dist/domain/kind-codes.js +68 -0
  44. package/dist/domain/kind-codes.js.map +1 -0
  45. package/dist/domain/normalizer.d.ts +50 -0
  46. package/dist/domain/normalizer.d.ts.map +1 -0
  47. package/dist/domain/normalizer.js +280 -0
  48. package/dist/domain/normalizer.js.map +1 -0
  49. package/dist/domain/prefecture-codes.d.ts +61 -0
  50. package/dist/domain/prefecture-codes.d.ts.map +1 -0
  51. package/dist/domain/prefecture-codes.js +67 -0
  52. package/dist/domain/prefecture-codes.js.map +1 -0
  53. package/dist/domain/process-codes.d.ts +52 -0
  54. package/dist/domain/process-codes.d.ts.map +1 -0
  55. package/dist/domain/process-codes.js +28 -0
  56. package/dist/domain/process-codes.js.map +1 -0
  57. package/dist/lib/env.d.ts +35 -0
  58. package/dist/lib/env.d.ts.map +1 -0
  59. package/dist/lib/env.js +40 -0
  60. package/dist/lib/env.js.map +1 -0
  61. package/dist/lib/errors.d.ts +47 -0
  62. package/dist/lib/errors.d.ts.map +1 -0
  63. package/dist/lib/errors.js +92 -0
  64. package/dist/lib/errors.js.map +1 -0
  65. package/dist/lib/mcp-logger.d.ts +29 -0
  66. package/dist/lib/mcp-logger.d.ts.map +1 -0
  67. package/dist/lib/mcp-logger.js +98 -0
  68. package/dist/lib/mcp-logger.js.map +1 -0
  69. package/dist/lib/pagination.d.ts +28 -0
  70. package/dist/lib/pagination.d.ts.map +1 -0
  71. package/dist/lib/pagination.js +48 -0
  72. package/dist/lib/pagination.js.map +1 -0
  73. package/dist/lib/result.d.ts +29 -0
  74. package/dist/lib/result.d.ts.map +1 -0
  75. package/dist/lib/result.js +36 -0
  76. package/dist/lib/result.js.map +1 -0
  77. package/dist/lib/trace-context.d.ts +36 -0
  78. package/dist/lib/trace-context.d.ts.map +1 -0
  79. package/dist/lib/trace-context.js +77 -0
  80. package/dist/lib/trace-context.js.map +1 -0
  81. package/dist/mcp.d.ts +9 -0
  82. package/dist/mcp.d.ts.map +1 -0
  83. package/dist/mcp.js +54 -0
  84. package/dist/mcp.js.map +1 -0
  85. package/dist/prompts/business-card-to-database.d.ts +12 -0
  86. package/dist/prompts/business-card-to-database.d.ts.map +1 -0
  87. package/dist/prompts/business-card-to-database.js +80 -0
  88. package/dist/prompts/business-card-to-database.js.map +1 -0
  89. package/dist/prompts/customer-master-dedup.d.ts +9 -0
  90. package/dist/prompts/customer-master-dedup.d.ts.map +1 -0
  91. package/dist/prompts/customer-master-dedup.js +77 -0
  92. package/dist/prompts/customer-master-dedup.js.map +1 -0
  93. package/dist/prompts/index.d.ts +3 -0
  94. package/dist/prompts/index.d.ts.map +1 -0
  95. package/dist/prompts/index.js +9 -0
  96. package/dist/prompts/index.js.map +1 -0
  97. package/dist/prompts/sales-list-enrichment.d.ts +9 -0
  98. package/dist/prompts/sales-list-enrichment.d.ts.map +1 -0
  99. package/dist/prompts/sales-list-enrichment.js +84 -0
  100. package/dist/prompts/sales-list-enrichment.js.map +1 -0
  101. package/dist/resources/attribution.d.ts +9 -0
  102. package/dist/resources/attribution.d.ts.map +1 -0
  103. package/dist/resources/attribution.js +27 -0
  104. package/dist/resources/attribution.js.map +1 -0
  105. package/dist/resources/corporate-template.d.ts +14 -0
  106. package/dist/resources/corporate-template.d.ts.map +1 -0
  107. package/dist/resources/corporate-template.js +87 -0
  108. package/dist/resources/corporate-template.js.map +1 -0
  109. package/dist/resources/index.d.ts +8 -0
  110. package/dist/resources/index.d.ts.map +1 -0
  111. package/dist/resources/index.js +9 -0
  112. package/dist/resources/index.js.map +1 -0
  113. package/dist/resources/ui-resources.d.ts +9 -0
  114. package/dist/resources/ui-resources.d.ts.map +1 -0
  115. package/dist/resources/ui-resources.js +59 -0
  116. package/dist/resources/ui-resources.js.map +1 -0
  117. package/dist/server.d.ts +13 -0
  118. package/dist/server.d.ts.map +1 -0
  119. package/dist/server.js +217 -0
  120. package/dist/server.js.map +1 -0
  121. package/dist/tools/get-attribution.d.ts +25 -0
  122. package/dist/tools/get-attribution.d.ts.map +1 -0
  123. package/dist/tools/get-attribution.js +120 -0
  124. package/dist/tools/get-attribution.js.map +1 -0
  125. package/dist/tools/index.d.ts +12 -0
  126. package/dist/tools/index.d.ts.map +1 -0
  127. package/dist/tools/index.js +16 -0
  128. package/dist/tools/index.js.map +1 -0
  129. package/dist/tools/lookup-by-number.d.ts +82 -0
  130. package/dist/tools/lookup-by-number.d.ts.map +1 -0
  131. package/dist/tools/lookup-by-number.js +157 -0
  132. package/dist/tools/lookup-by-number.js.map +1 -0
  133. package/dist/tools/normalize-company-name.d.ts +60 -0
  134. package/dist/tools/normalize-company-name.d.ts.map +1 -0
  135. package/dist/tools/normalize-company-name.js +130 -0
  136. package/dist/tools/normalize-company-name.js.map +1 -0
  137. package/dist/tools/search-by-name.d.ts +96 -0
  138. package/dist/tools/search-by-name.d.ts.map +1 -0
  139. package/dist/tools/search-by-name.js +176 -0
  140. package/dist/tools/search-by-name.js.map +1 -0
  141. package/dist/tools/validate-check-digit.d.ts +35 -0
  142. package/dist/tools/validate-check-digit.d.ts.map +1 -0
  143. package/dist/tools/validate-check-digit.js +105 -0
  144. package/dist/tools/validate-check-digit.js.map +1 -0
  145. package/dist/ui/corporate-card/mcp-app.html +157 -0
  146. package/dist/ui/search-results/mcp-app.html +158 -0
  147. package/dist/version.d.ts +6 -0
  148. package/dist/version.d.ts.map +1 -0
  149. package/dist/version.js +6 -0
  150. package/dist/version.js.map +1 -0
  151. package/package.json +96 -0
@@ -0,0 +1,142 @@
1
+ /**
2
+ * 適格請求書発行事業者公表システム コード辞書
3
+ * Code dictionaries for the Invoice Issuer Publication System
4
+ *
5
+ * 根拠 / Source:
6
+ * 国税庁 リソース定義書 1.5版 (令和6年5月)
7
+ * 項番9 事業者処理区分 / 項番11 人格区分 / 項番12 国内外区分 / 項番13 最新履歴
8
+ *
9
+ * v0.3.0 のインボイス API 統合時に本格利用される (ADR 0012)。
10
+ * v0.1.0 では準備層として定義のみ提供、未使用。
11
+ */
12
+ /**
13
+ * 事業者処理区分 (process) — リソース定義書 項番9
14
+ */
15
+ export declare const INVOICE_PROCESS_CODES: {
16
+ readonly '01': {
17
+ readonly ja: "新規 (登録)";
18
+ readonly en: "Newly registered";
19
+ };
20
+ readonly '02': {
21
+ readonly ja: "公表内容の変更";
22
+ readonly en: "Publication content changed";
23
+ };
24
+ readonly '03': {
25
+ readonly ja: "登録の失効";
26
+ readonly en: "Registration expired";
27
+ };
28
+ readonly '04': {
29
+ readonly ja: "登録の取消";
30
+ readonly en: "Registration cancelled";
31
+ };
32
+ readonly '99': {
33
+ readonly ja: "削除";
34
+ readonly en: "Deleted (差分データのみ)";
35
+ };
36
+ };
37
+ export type InvoiceProcessCode = keyof typeof INVOICE_PROCESS_CODES;
38
+ export declare function isInvoiceProcessCode(value: string): value is InvoiceProcessCode;
39
+ export declare function invoiceProcessLabel(code: string, lang?: 'ja' | 'en'): string;
40
+ /**
41
+ * 人格区分 (kind) — リソース定義書 項番11
42
+ */
43
+ export declare const INVOICE_KIND_CODES: {
44
+ readonly '1': {
45
+ readonly ja: "個人";
46
+ readonly en: "Individual (sole proprietor)";
47
+ };
48
+ readonly '2': {
49
+ readonly ja: "法人 (人格のない社団等を含む)";
50
+ readonly en: "Corporation (incl. unincorporated association)";
51
+ };
52
+ };
53
+ export type InvoiceKindCode = keyof typeof INVOICE_KIND_CODES;
54
+ export declare function isInvoiceKindCode(value: string): value is InvoiceKindCode;
55
+ export declare function invoiceKindLabel(code: string, lang?: 'ja' | 'en'): string;
56
+ /**
57
+ * 国内外区分 (country) — リソース定義書 項番12
58
+ */
59
+ export declare const INVOICE_COUNTRY_CODES: {
60
+ readonly '1': {
61
+ readonly ja: "国内事業者";
62
+ readonly en: "Domestic business";
63
+ };
64
+ readonly '2': {
65
+ readonly ja: "特定国外事業者";
66
+ readonly en: "Specified foreign business";
67
+ };
68
+ readonly '3': {
69
+ readonly ja: "特定国外事業者以外の国外事業者";
70
+ readonly en: "Other foreign business";
71
+ };
72
+ };
73
+ export type InvoiceCountryCode = keyof typeof INVOICE_COUNTRY_CODES;
74
+ export declare function isInvoiceCountryCode(value: string): value is InvoiceCountryCode;
75
+ export declare function invoiceCountryLabel(code: string, lang?: 'ja' | 'en'): string;
76
+ /**
77
+ * 最新履歴 (latest) — リソース定義書 項番13
78
+ */
79
+ export declare const INVOICE_LATEST_CODES: {
80
+ readonly '0': {
81
+ readonly ja: "過去情報";
82
+ readonly en: "Past information";
83
+ };
84
+ readonly '1': {
85
+ readonly ja: "最新情報";
86
+ readonly en: "Latest information";
87
+ };
88
+ };
89
+ export type InvoiceLatestCode = keyof typeof INVOICE_LATEST_CODES;
90
+ export declare function isInvoiceLatestCode(value: string): value is InvoiceLatestCode;
91
+ /**
92
+ * 応答形式 (type) — 第二編 2.1.3 条件
93
+ * 注意: 法人番号 API と値が異なる (01=CSV, 11=XML, 21=JSON)
94
+ */
95
+ export declare const INVOICE_RESPONSE_TYPES: {
96
+ readonly '01': {
97
+ readonly format: "CSV";
98
+ readonly encoding: "UTF-8";
99
+ };
100
+ readonly '11': {
101
+ readonly format: "XML";
102
+ readonly encoding: "UTF-8";
103
+ };
104
+ readonly '21': {
105
+ readonly format: "JSON";
106
+ readonly encoding: "UTF-8";
107
+ };
108
+ };
109
+ export type InvoiceResponseType = keyof typeof INVOICE_RESPONSE_TYPES;
110
+ export declare function isInvoiceResponseType(value: string): value is InvoiceResponseType;
111
+ /**
112
+ * 訂正区分 (correct) — リソース定義書 項番10
113
+ * Web-API 機能では常に「0」(訂正以外) が設定される (§2.3.1 参照)
114
+ * 差分データの場合のみ「1」(訂正) もあり得る
115
+ */
116
+ export declare const INVOICE_CORRECT_CODES: {
117
+ readonly '0': {
118
+ readonly ja: "訂正以外";
119
+ readonly en: "Not corrected";
120
+ };
121
+ readonly '1': {
122
+ readonly ja: "訂正";
123
+ readonly en: "Corrected";
124
+ };
125
+ };
126
+ export type InvoiceCorrectCode = keyof typeof INVOICE_CORRECT_CODES;
127
+ /**
128
+ * 差分 API で使う人格区分パラメータ (division) — 第二編 3.1.3
129
+ * 法人番号 API の `kind` パラメータとは別物に注意
130
+ */
131
+ export declare const INVOICE_DIVISION_PARAMS: {
132
+ readonly '1': {
133
+ readonly ja: "個人";
134
+ readonly en: "Individual";
135
+ };
136
+ readonly '2': {
137
+ readonly ja: "法人";
138
+ readonly en: "Corporation";
139
+ };
140
+ };
141
+ export type InvoiceDivisionParam = keyof typeof INVOICE_DIVISION_PARAMS;
142
+ //# sourceMappingURL=invoice-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-codes.d.ts","sourceRoot":"","sources":["../../src/domain/invoice-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;CAMxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,qBAAqB,CAAC;AAEpE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,kBAAkB,CAE/E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,GAAG,IAAW,GAAG,MAAM,CAKlF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;CAMrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAE9D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,eAAe,CAEzE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,GAAG,IAAW,GAAG,MAAM,CAK/E;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;CAIxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,qBAAqB,CAAC;AAEpE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,kBAAkB,CAE/E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,GAAG,IAAW,GAAG,MAAM,CAKlF;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;CAGvB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,oBAAoB,CAAC;AAElE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,iBAAiB,CAE7E;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;CAIzB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAEtE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,mBAAmB,CAEjF;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;CAGxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,qBAAqB,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;CAG1B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,uBAAuB,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * 適格請求書発行事業者公表システム コード辞書
3
+ * Code dictionaries for the Invoice Issuer Publication System
4
+ *
5
+ * 根拠 / Source:
6
+ * 国税庁 リソース定義書 1.5版 (令和6年5月)
7
+ * 項番9 事業者処理区分 / 項番11 人格区分 / 項番12 国内外区分 / 項番13 最新履歴
8
+ *
9
+ * v0.3.0 のインボイス API 統合時に本格利用される (ADR 0012)。
10
+ * v0.1.0 では準備層として定義のみ提供、未使用。
11
+ */
12
+ /**
13
+ * 事業者処理区分 (process) — リソース定義書 項番9
14
+ */
15
+ export const INVOICE_PROCESS_CODES = {
16
+ '01': { ja: '新規 (登録)', en: 'Newly registered' },
17
+ '02': { ja: '公表内容の変更', en: 'Publication content changed' },
18
+ '03': { ja: '登録の失効', en: 'Registration expired' },
19
+ '04': { ja: '登録の取消', en: 'Registration cancelled' },
20
+ '99': { ja: '削除', en: 'Deleted (差分データのみ)' },
21
+ };
22
+ export function isInvoiceProcessCode(value) {
23
+ return Object.prototype.hasOwnProperty.call(INVOICE_PROCESS_CODES, value);
24
+ }
25
+ export function invoiceProcessLabel(code, lang = 'ja') {
26
+ if (isInvoiceProcessCode(code)) {
27
+ return INVOICE_PROCESS_CODES[code][lang];
28
+ }
29
+ return `unknown(${code})`;
30
+ }
31
+ /**
32
+ * 人格区分 (kind) — リソース定義書 項番11
33
+ */
34
+ export const INVOICE_KIND_CODES = {
35
+ '1': { ja: '個人', en: 'Individual (sole proprietor)' },
36
+ '2': {
37
+ ja: '法人 (人格のない社団等を含む)',
38
+ en: 'Corporation (incl. unincorporated association)',
39
+ },
40
+ };
41
+ export function isInvoiceKindCode(value) {
42
+ return value === '1' || value === '2';
43
+ }
44
+ export function invoiceKindLabel(code, lang = 'ja') {
45
+ if (isInvoiceKindCode(code)) {
46
+ return INVOICE_KIND_CODES[code][lang];
47
+ }
48
+ return `unknown(${code})`;
49
+ }
50
+ /**
51
+ * 国内外区分 (country) — リソース定義書 項番12
52
+ */
53
+ export const INVOICE_COUNTRY_CODES = {
54
+ '1': { ja: '国内事業者', en: 'Domestic business' },
55
+ '2': { ja: '特定国外事業者', en: 'Specified foreign business' },
56
+ '3': { ja: '特定国外事業者以外の国外事業者', en: 'Other foreign business' },
57
+ };
58
+ export function isInvoiceCountryCode(value) {
59
+ return value === '1' || value === '2' || value === '3';
60
+ }
61
+ export function invoiceCountryLabel(code, lang = 'ja') {
62
+ if (isInvoiceCountryCode(code)) {
63
+ return INVOICE_COUNTRY_CODES[code][lang];
64
+ }
65
+ return `unknown(${code})`;
66
+ }
67
+ /**
68
+ * 最新履歴 (latest) — リソース定義書 項番13
69
+ */
70
+ export const INVOICE_LATEST_CODES = {
71
+ '0': { ja: '過去情報', en: 'Past information' },
72
+ '1': { ja: '最新情報', en: 'Latest information' },
73
+ };
74
+ export function isInvoiceLatestCode(value) {
75
+ return value === '0' || value === '1';
76
+ }
77
+ /**
78
+ * 応答形式 (type) — 第二編 2.1.3 条件
79
+ * 注意: 法人番号 API と値が異なる (01=CSV, 11=XML, 21=JSON)
80
+ */
81
+ export const INVOICE_RESPONSE_TYPES = {
82
+ '01': { format: 'CSV', encoding: 'UTF-8' },
83
+ '11': { format: 'XML', encoding: 'UTF-8' },
84
+ '21': { format: 'JSON', encoding: 'UTF-8' },
85
+ };
86
+ export function isInvoiceResponseType(value) {
87
+ return value === '01' || value === '11' || value === '21';
88
+ }
89
+ /**
90
+ * 訂正区分 (correct) — リソース定義書 項番10
91
+ * Web-API 機能では常に「0」(訂正以外) が設定される (§2.3.1 参照)
92
+ * 差分データの場合のみ「1」(訂正) もあり得る
93
+ */
94
+ export const INVOICE_CORRECT_CODES = {
95
+ '0': { ja: '訂正以外', en: 'Not corrected' },
96
+ '1': { ja: '訂正', en: 'Corrected' },
97
+ };
98
+ /**
99
+ * 差分 API で使う人格区分パラメータ (division) — 第二編 3.1.3
100
+ * 法人番号 API の `kind` パラメータとは別物に注意
101
+ */
102
+ export const INVOICE_DIVISION_PARAMS = {
103
+ '1': { ja: '個人', en: 'Individual' },
104
+ '2': { ja: '法人', en: 'Corporation' },
105
+ };
106
+ //# sourceMappingURL=invoice-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-codes.js","sourceRoot":"","sources":["../../src/domain/invoice-codes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 適格請求書発行事業者 登録番号 (T+13桁) の Branded Type
3
+ * Qualified Invoice Issuer Registration Number (T + 13 digits)
4
+ * Nomor Registrasi Penerbit Invoice Berkualifikasi (T + 13 digit)
5
+ *
6
+ * 根拠 / Source:
7
+ * 国税庁 第二編 1.5版 2.1.3 条件: 登録番号は "T"+13桁
8
+ * 国税庁 リソース定義書 1.5版 項番8: "T"+9999999999999 (14桁)
9
+ *
10
+ * T の次の 13 桁は法人番号 (法人の場合) または 個人事業主の識別番号 (個人の場合) であり、
11
+ * いずれもチェックデジット計算式は法人番号と同一 (第二編 別紙1 項番8 で定義)。
12
+ *
13
+ * 本ファイルは v0.3.0 のインボイス API 統合時に本格利用されるが、
14
+ * 法人番号ロジックの再利用可能性を担保するため、v0.1.0 で Branded type の骨格を提供する
15
+ * (ADR 0012 の前倒し実装方針)。
16
+ */
17
+ import { z } from 'zod';
18
+ /**
19
+ * "T" + 13桁の登録番号 (Branded type)
20
+ * Registered number: literal "T" prefix + 13-digit base (check digit + 12-digit basis)
21
+ */
22
+ export declare const InvoiceNumberSchema: z.core.$ZodBranded<z.ZodString, "InvoiceNumber", "out">;
23
+ export type InvoiceNumber = z.infer<typeof InvoiceNumberSchema>;
24
+ export type InvoiceValidationReason = 'not_prefixed_with_T' | 'not_13_digits_after_T' | 'check_digit_mismatch' | 'invalid_characters' | 'first_digit_zero_after_T';
25
+ export interface InvoiceValidationOk {
26
+ isValid: true;
27
+ normalized: string;
28
+ corporateNumberPart: string;
29
+ }
30
+ export interface InvoiceValidationError {
31
+ isValid: false;
32
+ reason: InvoiceValidationReason;
33
+ }
34
+ export type InvoiceValidationResult = InvoiceValidationOk | InvoiceValidationError;
35
+ /**
36
+ * T番号文字列の正規化 + チェックデジット検証
37
+ *
38
+ * 入力は以下を許容:
39
+ * - `T1234567890123` (半角)
40
+ * - `t1234567890123` (全角 t)
41
+ * - `T-1234-5678-90123` (ハイフン区切り)
42
+ * - `T1234567890123` (全角 T + 全角数字)
43
+ *
44
+ * @param raw 検証対象の文字列
45
+ */
46
+ export declare function normalizeAndValidateInvoiceNumber(raw: string): InvoiceValidationResult;
47
+ //# sourceMappingURL=invoice-number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-number.d.ts","sourceRoot":"","sources":["../../src/domain/invoice-number.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;GAGG;AACH,eAAO,MAAM,mBAAmB,yDAOL,CAAC;AAE5B,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,MAAM,uBAAuB,GAC/B,qBAAqB,GACrB,uBAAuB,GACvB,sBAAsB,GACtB,oBAAoB,GACpB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,uBAAuB,CAAC;CACjC;AAED,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;AAEnF;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAkCtF"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * 適格請求書発行事業者 登録番号 (T+13桁) の Branded Type
3
+ * Qualified Invoice Issuer Registration Number (T + 13 digits)
4
+ * Nomor Registrasi Penerbit Invoice Berkualifikasi (T + 13 digit)
5
+ *
6
+ * 根拠 / Source:
7
+ * 国税庁 第二編 1.5版 2.1.3 条件: 登録番号は "T"+13桁
8
+ * 国税庁 リソース定義書 1.5版 項番8: "T"+9999999999999 (14桁)
9
+ *
10
+ * T の次の 13 桁は法人番号 (法人の場合) または 個人事業主の識別番号 (個人の場合) であり、
11
+ * いずれもチェックデジット計算式は法人番号と同一 (第二編 別紙1 項番8 で定義)。
12
+ *
13
+ * 本ファイルは v0.3.0 のインボイス API 統合時に本格利用されるが、
14
+ * 法人番号ロジックの再利用可能性を担保するため、v0.1.0 で Branded type の骨格を提供する
15
+ * (ADR 0012 の前倒し実装方針)。
16
+ */
17
+ import { z } from 'zod';
18
+ import { isValidCheckDigit, normalizeAndValidateCorporateNumber } from './check-digit.js';
19
+ /**
20
+ * "T" + 13桁の登録番号 (Branded type)
21
+ * Registered number: literal "T" prefix + 13-digit base (check digit + 12-digit basis)
22
+ */
23
+ export const InvoiceNumberSchema = z
24
+ .string()
25
+ .regex(/^T\d{13}$/, '登録番号は T + 半角数字13桁です / Must be "T" + 13 half-width digits')
26
+ .refine((s) => isValidCheckDigit(s.slice(1)), {
27
+ message: '登録番号のチェックデジットが一致しません (T を除いた 13桁部分) / Invalid check digit on the 13-digit base',
28
+ })
29
+ .brand();
30
+ /**
31
+ * T番号文字列の正規化 + チェックデジット検証
32
+ *
33
+ * 入力は以下を許容:
34
+ * - `T1234567890123` (半角)
35
+ * - `t1234567890123` (全角 t)
36
+ * - `T-1234-5678-90123` (ハイフン区切り)
37
+ * - `T1234567890123` (全角 T + 全角数字)
38
+ *
39
+ * @param raw 検証対象の文字列
40
+ */
41
+ export function normalizeAndValidateInvoiceNumber(raw) {
42
+ if (raw.length === 0) {
43
+ return { isValid: false, reason: 'not_prefixed_with_T' };
44
+ }
45
+ // 全角 T/t を半角 T に、全角数字を半角数字に
46
+ const normalizedT = raw
47
+ .replace(/[\uFF34\uFF54]/g, 'T') // T (U+FF34), t (U+FF54)
48
+ .replace(/^[tT]/, 'T')
49
+ .replace(/[\uFF10-\uFF19]/g, (ch) => String.fromCharCode(ch.charCodeAt(0) - 0xfee0));
50
+ if (!normalizedT.startsWith('T')) {
51
+ return { isValid: false, reason: 'not_prefixed_with_T' };
52
+ }
53
+ const afterT = normalizedT.slice(1);
54
+ // 法人番号と同じ正規化ロジックを 13桁部分に適用
55
+ const cnResult = normalizeAndValidateCorporateNumber(afterT);
56
+ if (!cnResult.isValid) {
57
+ const mapReason = {
58
+ not_13_digits: 'not_13_digits_after_T',
59
+ check_digit_mismatch: 'check_digit_mismatch',
60
+ invalid_characters: 'invalid_characters',
61
+ first_digit_zero: 'first_digit_zero_after_T',
62
+ };
63
+ return { isValid: false, reason: mapReason[cnResult.reason] };
64
+ }
65
+ return {
66
+ isValid: true,
67
+ normalized: `T${cnResult.normalized}`,
68
+ corporateNumberPart: cnResult.normalized,
69
+ };
70
+ }
71
+ //# sourceMappingURL=invoice-number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-number.js","sourceRoot":"","sources":["../../src/domain/invoice-number.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,mCAAmC,EAAE,MAAM,kBAAkB,CAAC;AAE1F;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,EAAE;KACR,KAAK,CAAC,WAAW,EAAE,0DAA0D,CAAC;KAC9E,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;IAC5C,OAAO,EACL,gFAAgF;CACnF,CAAC;KACD,KAAK,EAAmB,CAAC;AAwB5B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iCAAiC,CAAC,GAAW;IAC3D,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC3D,CAAC;IAED,4BAA4B;IAC5B,MAAM,WAAW,GAAG,GAAG;SACpB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,yBAAyB;SACzD,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAEvF,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEpC,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,SAAS,GAA4D;YACzE,aAAa,EAAE,uBAAuB;YACtC,oBAAoB,EAAE,sBAAsB;YAC5C,kBAAkB,EAAE,oBAAoB;YACxC,gBAAgB,EAAE,0BAA0B;SAC7C,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,IAAI,QAAQ,CAAC,UAAU,EAAE;QACrC,mBAAmB,EAAE,QAAQ,CAAC,UAAU;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * 法人種別コード辞書
3
+ * Corporate kind code dictionary
4
+ *
5
+ * 根拠 / Source: 国税庁仕様書 第二編 別紙1 項番15 法人種別
6
+ */
7
+ export declare const KIND_CODES: {
8
+ readonly '101': {
9
+ readonly ja: "国の機関";
10
+ readonly en: "State agency";
11
+ readonly id: "state_agency";
12
+ };
13
+ readonly '201': {
14
+ readonly ja: "地方公共団体";
15
+ readonly en: "Local government";
16
+ readonly id: "local_government";
17
+ };
18
+ readonly '301': {
19
+ readonly ja: "株式会社";
20
+ readonly en: "Kabushiki Kaisha (Corporation)";
21
+ readonly id: "kabushiki_kaisha";
22
+ };
23
+ readonly '302': {
24
+ readonly ja: "有限会社(特例有限会社)";
25
+ readonly en: "Yugen Kaisha (Special LLC)";
26
+ readonly id: "yugen_kaisha";
27
+ };
28
+ readonly '303': {
29
+ readonly ja: "合名会社";
30
+ readonly en: "Gomei Kaisha (General partnership)";
31
+ readonly id: "gomei_kaisha";
32
+ };
33
+ readonly '304': {
34
+ readonly ja: "合資会社";
35
+ readonly en: "Goshi Kaisha (Limited partnership)";
36
+ readonly id: "goshi_kaisha";
37
+ };
38
+ readonly '305': {
39
+ readonly ja: "合同会社";
40
+ readonly en: "Godo Kaisha (LLC)";
41
+ readonly id: "godo_kaisha";
42
+ };
43
+ readonly '399': {
44
+ readonly ja: "その他の設立登記法人";
45
+ readonly en: "Other registered juridical persons";
46
+ readonly id: "other_registered";
47
+ };
48
+ readonly '401': {
49
+ readonly ja: "外国会社等";
50
+ readonly en: "Foreign companies etc.";
51
+ readonly id: "foreign_company";
52
+ };
53
+ readonly '499': {
54
+ readonly ja: "その他";
55
+ readonly en: "Other (unincorporated associations etc.)";
56
+ readonly id: "other";
57
+ };
58
+ };
59
+ export type KindCode = keyof typeof KIND_CODES;
60
+ export declare function isKindCode(value: string): value is KindCode;
61
+ export declare function kindLabel(code: string, lang?: 'ja' | 'en' | 'id'): string;
62
+ //# sourceMappingURL=kind-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kind-codes.d.ts","sourceRoot":"","sources":["../../src/domain/kind-codes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAE/C,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAE3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,GAAG,IAAI,GAAG,IAAW,GAAG,MAAM,CAK/E"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * 法人種別コード辞書
3
+ * Corporate kind code dictionary
4
+ *
5
+ * 根拠 / Source: 国税庁仕様書 第二編 別紙1 項番15 法人種別
6
+ */
7
+ export const KIND_CODES = {
8
+ '101': {
9
+ ja: '国の機関',
10
+ en: 'State agency',
11
+ id: 'state_agency',
12
+ },
13
+ '201': {
14
+ ja: '地方公共団体',
15
+ en: 'Local government',
16
+ id: 'local_government',
17
+ },
18
+ '301': {
19
+ ja: '株式会社',
20
+ en: 'Kabushiki Kaisha (Corporation)',
21
+ id: 'kabushiki_kaisha',
22
+ },
23
+ '302': {
24
+ ja: '有限会社(特例有限会社)',
25
+ en: 'Yugen Kaisha (Special LLC)',
26
+ id: 'yugen_kaisha',
27
+ },
28
+ '303': {
29
+ ja: '合名会社',
30
+ en: 'Gomei Kaisha (General partnership)',
31
+ id: 'gomei_kaisha',
32
+ },
33
+ '304': {
34
+ ja: '合資会社',
35
+ en: 'Goshi Kaisha (Limited partnership)',
36
+ id: 'goshi_kaisha',
37
+ },
38
+ '305': {
39
+ ja: '合同会社',
40
+ en: 'Godo Kaisha (LLC)',
41
+ id: 'godo_kaisha',
42
+ },
43
+ '399': {
44
+ ja: 'その他の設立登記法人',
45
+ en: 'Other registered juridical persons',
46
+ id: 'other_registered',
47
+ },
48
+ '401': {
49
+ ja: '外国会社等',
50
+ en: 'Foreign companies etc.',
51
+ id: 'foreign_company',
52
+ },
53
+ '499': {
54
+ ja: 'その他',
55
+ en: 'Other (unincorporated associations etc.)',
56
+ id: 'other',
57
+ },
58
+ };
59
+ export function isKindCode(value) {
60
+ return Object.prototype.hasOwnProperty.call(KIND_CODES, value);
61
+ }
62
+ export function kindLabel(code, lang = 'ja') {
63
+ if (isKindCode(code)) {
64
+ return KIND_CODES[code][lang];
65
+ }
66
+ return `unknown(${code})`;
67
+ }
68
+ //# sourceMappingURL=kind-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kind-codes.js","sourceRoot":"","sources":["../../src/domain/kind-codes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE;QACL,EAAE,EAAE,MAAM;QACV,EAAE,EAAE,cAAc;QAClB,EAAE,EAAE,cAAc;KACnB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,QAAQ;QACZ,EAAE,EAAE,kBAAkB;QACtB,EAAE,EAAE,kBAAkB;KACvB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,MAAM;QACV,EAAE,EAAE,gCAAgC;QACpC,EAAE,EAAE,kBAAkB;KACvB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,cAAc;QAClB,EAAE,EAAE,4BAA4B;QAChC,EAAE,EAAE,cAAc;KACnB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,MAAM;QACV,EAAE,EAAE,oCAAoC;QACxC,EAAE,EAAE,cAAc;KACnB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,MAAM;QACV,EAAE,EAAE,oCAAoC;QACxC,EAAE,EAAE,cAAc;KACnB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,MAAM;QACV,EAAE,EAAE,mBAAmB;QACvB,EAAE,EAAE,aAAa;KAClB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,YAAY;QAChB,EAAE,EAAE,oCAAoC;QACxC,EAAE,EAAE,kBAAkB;KACvB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,EAAE,EAAE,wBAAwB;QAC5B,EAAE,EAAE,iBAAiB;KACtB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,KAAK;QACT,EAAE,EAAE,0CAA0C;QAC9C,EAAE,EAAE,OAAO;KACZ;CACO,CAAC;AAIX,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,OAA2B,IAAI;IACrE,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,WAAW,IAAI,GAAG,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * 表記揺れ正規化 (T7 の核)
3
+ * Company name normalization (T7 core logic)
4
+ * Normalisasi nama perusahaan (inti T7)
5
+ *
6
+ * ポジショニング / Positioning:
7
+ * 国税庁 API `target=1` が既にあいまい検索を内蔵する (第二編 §4.6.2):
8
+ * - ひらがな → カタカナ置換
9
+ * - 英小文字 → 英大文字置換
10
+ * - 中点 (・) や全角スペース削除
11
+ *
12
+ * T7 はこれらを重複実装せず、国税庁が拾えない 7 パターンを補完:
13
+ * 1. (株)/㈱/株式会社 表記揺れ (前株・後株・省略 の3展開)
14
+ * 2. 法人種別 [株式/有限/合同/合名/合資/一般社団/...] の正規化 + 分離
15
+ * 3. 英語法人名 → 日本語候補 (K.K. / Kabushiki Kaisha / Inc. 検出)
16
+ * 4. 半角/全角英数字の正規化 (NFKC)
17
+ * 5. 旧字体 → 新字体 (髙 → 高、齋 → 斎 等)
18
+ * 6. 異体字セレクタ (IVS / VS) 除去
19
+ * 7. 空白類の揃え (タブ・連続スペース・全角/半角スペース)
20
+ */
21
+ export type KindHint = 'state_agency' | 'local_government' | 'kabushiki_kaisha' | 'yugen_kaisha' | 'gomei_kaisha' | 'goshi_kaisha' | 'godo_kaisha' | 'ippan_shadan_hojin' | 'ippan_zaidan_hojin' | 'koueki_shadan_hojin' | 'koueki_zaidan_hojin' | 'npo_hojin' | 'other_registered' | 'foreign_company' | 'other' | 'unknown';
22
+ export type PrefixOrSuffix = 'mae_kabu' | 'ato_kabu' | 'none';
23
+ export interface NormalizedCandidate {
24
+ /** 国税庁 API に投げる法人名候補 */
25
+ name: string;
26
+ /** 推定される法人種別 */
27
+ kind_hint: KindHint;
28
+ /** 法人種別の位置 (前株/後株/無し) */
29
+ prefix_or_suffix: PrefixOrSuffix;
30
+ /** 国税庁 API の target パラメータ推奨値 */
31
+ suggested_target: '1' | '2' | '3';
32
+ /** 信頼度 (0.0-1.0) */
33
+ confidence: number;
34
+ /** このルールで適用された補完パターン */
35
+ applied_rules: string[];
36
+ }
37
+ export interface NormalizerResult {
38
+ original: string;
39
+ extracted_core_name: string;
40
+ normalized_candidates: NormalizedCandidate[];
41
+ fallback_note?: string;
42
+ }
43
+ /**
44
+ * 文字列を正規化して法人名候補リストを生成
45
+ *
46
+ * @param raw 入力文字列 (名刺OCR や手入力の揺れを含む)
47
+ * @returns 最大10件の正規化候補
48
+ */
49
+ export declare function normalizeCompanyName(raw: string): NormalizerResult;
50
+ //# sourceMappingURL=normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../../src/domain/normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,cAAc,GACd,cAAc,GACd,cAAc,GACd,aAAa,GACb,oBAAoB,GACpB,oBAAoB,GACpB,qBAAqB,GACrB,qBAAqB,GACrB,WAAW,GACX,kBAAkB,GAClB,iBAAiB,GACjB,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,SAAS,EAAE,QAAQ,CAAC;IACpB,yBAAyB;IACzB,gBAAgB,EAAE,cAAc,CAAC;IACjC,gCAAgC;IAChC,gBAAgB,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAClC,oBAAoB;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,mBAAmB,EAAE,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAwFD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAyIlE"}