Skip to main content

gbiz_info_api/
types.rs

1//! gBizINFO REST API (v2) のレスポンス型定義。
2//!
3//! 各構造体は OpenAPI 定義のスキーマ名(`V2` サフィックスを除く)に対応する。
4
5use serde::{Deserialize, Serialize};
6use std::collections::HashMap;
7
8/// レスポンスの共通ラッパー。
9///
10/// `T` にはエンドポイントに応じて、法人基本情報 [`HojinInfo`]・
11/// 法人検索結果 [`HojinInfoSearch`]・カテゴリ別情報 [`HojinInfoForChild`] のいずれかが入る。
12#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
13pub struct HojinInfoResponse<T> {
14    /// エラー情報(エラーがある場合に出力)
15    pub errors: Option<Vec<ApiError>>,
16    /// gBizINFOデータ
17    #[serde(rename = "hojin-infos")]
18    pub hojin_infos: Option<Vec<T>>,
19    /// リクエストID
20    pub id: Option<String>,
21    /// メッセージ
22    pub message: Option<String>,
23}
24
25impl<T> HojinInfoResponse<T> {
26    /// `hojin-infos` を所有権ごと取り出す。未設定の場合は空の `Vec`。
27    pub fn into_hojin_infos(self) -> Vec<T> {
28        self.hojin_infos.unwrap_or_default()
29    }
30}
31
32/// `updateInfo` 系エンドポイントのレスポンスラッパー(ページング情報付き)。
33#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
34pub struct UpdateInfoResponse<T> {
35    /// エラー情報(エラーがある場合に出力)
36    pub errors: Option<Vec<ApiError>>,
37    /// gBizINFOデータ
38    #[serde(rename = "hojin-infos")]
39    pub hojin_infos: Option<Vec<T>>,
40    /// リクエストID
41    pub id: Option<String>,
42    /// メッセージ
43    pub message: Option<String>,
44    /// ページ番号
45    #[serde(rename = "pageNumber")]
46    pub page_number: Option<String>,
47    /// 総件数
48    #[serde(rename = "totalCount")]
49    pub total_count: Option<String>,
50    /// 総ページ数
51    #[serde(rename = "totalPage")]
52    pub total_page: Option<String>,
53}
54
55impl<T> UpdateInfoResponse<T> {
56    /// `hojin-infos` を所有権ごと取り出す。未設定の場合は空の `Vec`。
57    pub fn into_hojin_infos(self) -> Vec<T> {
58        self.hojin_infos.unwrap_or_default()
59    }
60}
61
62/// 法人検索(`GET /v2/hojin`)のレスポンス。
63pub type SearchResponse = HojinInfoResponse<HojinInfoSearch>;
64/// 法人基本情報(`GET /v2/hojin/{corporate_number}`)のレスポンス。
65pub type HojinResponse = HojinInfoResponse<HojinInfo>;
66/// カテゴリ別情報(`GET /v2/hojin/{corporate_number}/xxx`)のレスポンス。
67pub type HojinChildResponse = HojinInfoResponse<HojinInfoForChild>;
68/// 法人基本情報の更新情報(`GET /v2/hojin/updateInfo`)のレスポンス。
69pub type UpdateInfoHojinResponse = UpdateInfoResponse<HojinInfo>;
70/// カテゴリ別の更新情報(`GET /v2/hojin/updateInfo/xxx`)のレスポンス。
71pub type UpdateInfoChildResponse = UpdateInfoResponse<HojinInfoForChild>;
72
73/// エラー情報
74#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
75pub struct ApiError {
76    /// エラー箇所(項目)
77    pub item: Option<String>,
78    /// エラーメッセージ
79    pub message: Option<String>,
80}
81
82/// 法人検索の結果1件分(スキーマ: `HojinInfoSearchV2`)。
83#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
84pub struct HojinInfoSearch {
85    /// 法人番号
86    pub corporate_number: Option<String>,
87    /// 本社所在地
88    pub location: Option<String>,
89    /// メタデータ
90    #[serde(rename = "meta-data")]
91    pub meta_data: Option<ChildMetadata>,
92    /// 法人名
93    pub name: Option<String>,
94    /// 法人名英語
95    pub name_en: Option<String>,
96    /// 法人活動情報件数
97    pub number_of_activity: Option<String>,
98    /// 郵便番号
99    pub postal_code: Option<String>,
100    /// ステータス
101    pub status: Option<String>,
102    /// 更新年月日
103    pub update_date: Option<String>,
104}
105
106/// 法人基本情報(スキーマ: `HojinInfoV2`)。
107#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
108pub struct HojinInfo {
109    /// 訂正区分
110    pub aggregated_year: Option<String>,
111    /// 全省庁統一資格の営業品目
112    pub business_items: Option<Vec<String>>,
113    /// 事業概要
114    pub business_summary: Option<String>,
115    /// 資本金
116    pub capital_stock: Option<i64>,
117    /// 届出・認定情報
118    pub certification: Option<Vec<CertificationInfo>>,
119    /// 登記記録の閉鎖等の事由
120    pub close_cause: Option<String>,
121    /// 登記記録の閉鎖等年月日
122    pub close_date: Option<String>,
123    /// 表彰情報
124    pub commendation: Option<Vec<CommendationInfo>>,
125    /// 企業規模詳細(女性)
126    pub company_size_female: Option<i64>,
127    /// 企業規模詳細(男性)
128    pub company_size_male: Option<i64>,
129    /// 企業ホームページ
130    pub company_url: Option<String>,
131    /// 法人番号
132    pub corporate_number: Option<String>,
133    /// 事業所情報
134    #[serde(rename = "corporation-info")]
135    pub corporation_info: Option<Vec<CorporationInfo>>,
136    /// 設立年月日
137    pub date_of_establishment: Option<String>,
138    /// 従業員数
139    pub employee_number: Option<i64>,
140    /// 財務情報
141    pub finance: Option<Finance>,
142    /// 創業年
143    pub founding_year: Option<i32>,
144    /// 業種
145    pub industry: Option<Vec<String>>,
146    /// 法人名フリガナ
147    pub kana: Option<String>,
148    /// 法人種別
149    pub kind: Option<String>,
150    /// 本社所在地
151    pub location: Option<String>,
152    /// メタデータ
153    #[serde(rename = "meta-data")]
154    pub meta_data: Option<Metadata>,
155    /// 法人名
156    pub name: Option<String>,
157    /// 法人名英語
158    pub name_en: Option<String>,
159    /// 特許情報
160    pub patent: Option<Vec<PatentInfo>>,
161    /// 郵便番号
162    pub postal_code: Option<String>,
163    /// 処理区分
164    pub process: Option<String>,
165    /// 調達情報
166    pub procurement: Option<Vec<ProcurementInfo>>,
167    /// 全省庁統一資格の資格等級(物品の製造、物品の販売、役務の提供等、物品の買受け)
168    pub qualification_grade: Option<String>,
169    /// 法人代表者名
170    pub representative_name: Option<String>,
171    /// ステータス
172    pub status: Option<String>,
173    /// 補助金情報
174    pub subsidy: Option<Vec<SubsidyInfo>>,
175    /// 更新年月日
176    pub update_date: Option<String>,
177    /// 職場情報
178    pub workplace_info: Option<WorkplaceInfo>,
179}
180
181/// カテゴリ別取得の結果1件分(スキーマ: `HojinInfoForChildV2`)。
182///
183/// 呼び出したエンドポイントに対応するカテゴリのフィールドのみ値が入る。
184#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
185pub struct HojinInfoForChild {
186    /// 届出・認定情報
187    pub certification: Option<Vec<CertificationInfo>>,
188    /// 表彰情報
189    pub commendation: Option<Vec<CommendationInfo>>,
190    /// 法人番号
191    pub corporate_number: Option<String>,
192    /// 事業所情報
193    #[serde(rename = "corporation-info")]
194    pub corporation_info: Option<Vec<CorporationInfo>>,
195    /// 財務情報
196    pub finance: Option<Finance>,
197    /// 本社所在地
198    pub location: Option<String>,
199    /// 法人名
200    pub name: Option<String>,
201    /// 特許情報
202    pub patent: Option<Vec<PatentInfo>>,
203    /// 調達情報
204    pub procurement: Option<Vec<ProcurementInfo>>,
205    /// 補助金情報
206    pub subsidy: Option<Vec<SubsidyInfo>>,
207    /// 職場情報
208    pub workplace_info: Option<WorkplaceInfo>,
209}
210
211/// 届出・認定情報(スキーマ: `CertificationInfoV2`)
212#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
213pub struct CertificationInfo {
214    /// 部門
215    pub category: Option<String>,
216    /// 認定日
217    pub date_of_approval: Option<String>,
218    /// 府省
219    pub government_departments: Option<String>,
220    /// メタデータ
221    #[serde(rename = "meta-data")]
222    pub meta_data: Option<ChildMetadata>,
223    /// 対象
224    pub target: Option<String>,
225    /// 届出認定等
226    pub title: Option<String>,
227}
228
229/// 表彰情報(スキーマ: `CommendationInfoV2`)
230#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
231pub struct CommendationInfo {
232    /// 部門
233    pub category: Option<String>,
234    /// 年月日
235    pub date_of_commendation: Option<String>,
236    /// 府省
237    pub government_departments: Option<String>,
238    /// メタデータ
239    #[serde(rename = "meta-data")]
240    pub meta_data: Option<ChildMetadata>,
241    /// 備考
242    pub note: Option<String>,
243    /// 受賞対象
244    pub target: Option<String>,
245    /// 表彰名
246    pub title: Option<String>,
247}
248
249/// 事業所情報(スキーマ: `CorporationInfo`)
250#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
251pub struct CorporationInfo {
252    /// 事業所所在地
253    pub corporation_location: Option<String>,
254    /// 事業所所在地フリガナ
255    pub corporation_location_furigana: Option<String>,
256    /// 事業所名
257    pub corporation_name: Option<String>,
258    /// 事業所名フリガナ
259    pub corporation_name_furigana: Option<String>,
260    /// 被保険者数
261    pub insured_number: Option<String>,
262    /// 全喪年月日
263    pub loss_date: Option<String>,
264    /// メタデータ
265    #[serde(rename = "meta-data")]
266    pub meta_data: Option<ChildMetadata>,
267}
268
269/// 財務情報(スキーマ: `FinanceV2`)
270#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
271pub struct Finance {
272    /// 会計基準
273    pub accounting_standards: Option<String>,
274    /// 事業年度
275    pub fiscal_year_cover_page: Option<String>,
276    /// 大株主
277    pub major_shareholders: Option<Vec<MajorShareholder>>,
278    /// 財務
279    pub management_index: Option<Vec<ManagementIndex>>,
280    /// メタデータ
281    #[serde(rename = "meta-data")]
282    pub meta_data: Option<ChildMetadata>,
283}
284
285/// 特許情報(スキーマ: `PatentInfoV2`)
286#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
287pub struct PatentInfo {
288    /// 出願年月日
289    pub application_date: Option<String>,
290    /// 分類
291    pub classifications: Option<Vec<HashMap<String, String>>>,
292    /// メタデータ
293    #[serde(rename = "meta-data")]
294    pub meta_data: Option<ChildMetadata>,
295    /// 特許/意匠/商標
296    pub patent_type: Option<String>,
297    /// 登録番号
298    pub registration_number: Option<String>,
299    /// 発明の名称(等)/意匠に係る物品/表示用商標
300    pub title: Option<String>,
301    /// 文献固定アドレス
302    pub url: Option<String>,
303}
304
305/// 調達情報(スキーマ: `ProcurementInfoV2`)
306#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
307pub struct ProcurementInfo {
308    /// 金額
309    pub amount: Option<i64>,
310    /// 受注日
311    pub date_of_order: Option<String>,
312    /// 府省
313    pub government_departments: Option<String>,
314    /// メタデータ
315    #[serde(rename = "meta-data")]
316    pub meta_data: Option<ChildMetadata>,
317    /// 備考
318    pub note: Option<String>,
319    /// 事業名
320    pub title: Option<String>,
321}
322
323/// 補助金情報(スキーマ: `SubsidyInfoV2`)
324#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
325pub struct SubsidyInfo {
326    /// 金額
327    pub amount: Option<String>,
328    /// 認定日
329    pub date_of_approval: Option<String>,
330    /// 府省
331    pub government_departments: Option<String>,
332    /// メタデータ
333    #[serde(rename = "meta-data")]
334    pub meta_data: Option<ChildMetadata>,
335    /// 対象
336    pub target: Option<String>,
337    /// 補助金等
338    pub title: Option<String>,
339}
340
341/// 職場情報(スキーマ: `WorkplaceInfoBeanV2`)
342#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
343pub struct WorkplaceInfo {
344    /// 勤務基本情報
345    pub base_infos: Option<WorkplaceBaseInfos>,
346    /// 育児・仕事の両立に関する情報
347    pub compatibility_of_childcare_and_work: Option<CompatibilityOfChildcareAndWork>,
348    /// メタデータ
349    #[serde(rename = "meta-data")]
350    pub meta_data: Option<ChildMetadata>,
351    /// 女性の活躍に関する情報
352    pub women_activity_infos: Option<WomenActivityInfos>,
353}
354
355/// 勤務基本情報(スキーマ: `WorkplaceBaseInfosV2`)
356#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
357pub struct WorkplaceBaseInfos {
358    /// 従業員の平均年齢
359    pub average_age: Option<f64>,
360    /// 正社員の平均継続勤務年数
361    pub average_continuous_service_years: Option<f64>,
362    /// 平均継続勤務年数-女性
363    #[serde(rename = "average_continuous_service_years_Female")]
364    pub average_continuous_service_years_female: Option<f64>,
365    /// 平均継続勤務年数-男性
366    #[serde(rename = "average_continuous_service_years_Male")]
367    pub average_continuous_service_years_male: Option<f64>,
368    /// 平均継続勤務年数-範囲
369    pub average_continuous_service_years_type: Option<String>,
370    /// 月平均所定外労働時間
371    pub month_average_predetermined_overtime_hours: Option<f64>,
372}
373
374/// 育児・仕事の両立に関する情報(スキーマ: `CompatibilityOfChildcareAndWorkV2`)
375#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
376pub struct CompatibilityOfChildcareAndWork {
377    /// 育児休業取得者数(女性)
378    pub maternity_leave_acquisition_num: Option<i64>,
379    /// 育児休業対象者数(女性)
380    pub number_of_maternity_leave: Option<i64>,
381    /// 育児休業対象者数(男性)
382    pub number_of_paternity_leave: Option<i64>,
383    /// 育児休業取得者数(男性)
384    pub paternity_leave_acquisition_num: Option<i64>,
385}
386
387/// 女性の活躍に関する情報(スキーマ: `WomenActivityInfosV2`)
388#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
389pub struct WomenActivityInfos {
390    /// 女性管理職人数
391    pub female_share_of_manager: Option<i64>,
392    /// 女性役員人数
393    pub female_share_of_officers: Option<i64>,
394    /// 労働者に占める女性労働者の割合
395    pub female_workers_proportion: Option<f64>,
396    /// 労働者に占める女性労働者の割合-範囲
397    pub female_workers_proportion_type: Option<String>,
398    /// 管理職全体人数(男女計)
399    pub gender_total_of_manager: Option<i64>,
400    /// 役員全体人数(男女計)
401    pub gender_total_of_officers: Option<i64>,
402}
403
404/// 大株主(スキーマ: `MajorShareholders`)
405#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
406pub struct MajorShareholder {
407    /// 氏名又は名称
408    pub name_major_shareholders: Option<String>,
409    /// 発行済株式総数に対する所有株式数の割合
410    pub shareholding_ratio: Option<f64>,
411}
412
413/// 財務(スキーマ: `ManagementIndex`)
414#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
415pub struct ManagementIndex {
416    /// 資本金
417    pub capital_stock_summary_of_business_results: Option<i64>,
418    /// 資本金(単位)
419    pub capital_stock_summary_of_business_results_unit_ref: Option<String>,
420    /// 営業総収入
421    pub gross_operating_revenue_summary_of_business_results: Option<i64>,
422    /// 営業総収入(単位)
423    pub gross_operating_revenue_summary_of_business_results_unit_ref: Option<String>,
424    /// 純資産額
425    pub net_assets_summary_of_business_results: Option<i64>,
426    /// 純資産額(単位)
427    pub net_assets_summary_of_business_results_unit_ref: Option<String>,
428    /// 当期純利益又は当期純損失(△)
429    pub net_income_loss_summary_of_business_results: Option<i64>,
430    /// 当期純利益又は当期純損失(△)(単位)
431    pub net_income_loss_summary_of_business_results_unit_ref: Option<String>,
432    /// 正味収入保険料
433    pub net_premiums_written_summary_of_business_results_ins: Option<i64>,
434    /// 正味収入保険料(単位)
435    pub net_premiums_written_summary_of_business_results_ins_unit_ref: Option<String>,
436    /// 売上高
437    pub net_sales_summary_of_business_results: Option<i64>,
438    /// 売上高(単位)
439    pub net_sales_summary_of_business_results_unit_ref: Option<String>,
440    /// 従業員数
441    pub number_of_employees: Option<i64>,
442    /// 従業員数(単位)
443    pub number_of_employees_unit_ref: Option<String>,
444    /// 営業収益
445    pub operating_revenue1_summary_of_business_results: Option<i64>,
446    /// 営業収益(単位)
447    pub operating_revenue1_summary_of_business_results_unit_ref: Option<String>,
448    /// 営業収入
449    pub operating_revenue2_summary_of_business_results: Option<i64>,
450    /// 営業収入(単位)
451    pub operating_revenue2_summary_of_business_results_unit_ref: Option<String>,
452    /// 経常利益又は経常損失(△)
453    pub ordinary_income_loss_summary_of_business_results: Option<i64>,
454    /// 経常利益又は経常損失(△)(単位)
455    pub ordinary_income_loss_summary_of_business_results_unit_ref: Option<String>,
456    /// 経常収益
457    pub ordinary_income_summary_of_business_results: Option<i64>,
458    /// 経常収益(単位)
459    pub ordinary_income_summary_of_business_results_unit_ref: Option<String>,
460    /// 回次
461    pub period: Option<String>,
462    /// 総資産額
463    pub total_assets_summary_of_business_results: Option<i64>,
464    /// 総資産額(単位)
465    pub total_assets_summary_of_business_results_unit_ref: Option<String>,
466}
467
468/// 法人基本情報のメタデータ(スキーマ: `Metadata`)。
469///
470/// `metadata_flg=true` を指定した場合のみ出力される。
471#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
472pub struct Metadata {
473    /// データ品質
474    pub data_quality: Option<MetadataFields>,
475    /// データ取込頻度
476    pub import_frequency: Option<MetadataFields>,
477    /// キー情報
478    pub key_field: Option<String>,
479    /// 最終取得日
480    pub last_acquisition_date: Option<MetadataFields>,
481    /// 最終更新日
482    pub last_update_date: Option<MetadataFields>,
483    /// 出典元
484    pub source: Option<MetadataFields>,
485}
486
487/// [`Metadata`] の項目別の値。
488///
489/// OpenAPI 定義では `MetadataDataQuality` / `MetadataImportFrequency` /
490/// `MetadataLastAcquisitionDate` / `MetadataLastUpdateDate` / `MetadataSource`
491/// に分かれているが、全て同一の構造のため1つの型で表現する。
492#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
493pub struct MetadataFields {
494    /// 訂正区分
495    pub aggregated_year: Option<String>,
496    /// 全省庁統一資格の営業品目
497    pub business_items: Option<String>,
498    /// 事業概要
499    pub business_summary: Option<String>,
500    /// 資本金
501    pub capital_stock: Option<String>,
502    /// 登記記録の閉鎖等の事由
503    pub close_cause: Option<String>,
504    /// 登記記録の閉鎖等年月日
505    pub close_date: Option<String>,
506    /// 企業規模詳細(女性)
507    pub company_size_female: Option<String>,
508    /// 企業規模詳細(男性)
509    pub company_size_male: Option<String>,
510    /// 企業ホームページ
511    pub company_url: Option<String>,
512    /// 法人番号
513    pub corporate_number: Option<String>,
514    /// 設立年月日
515    pub date_of_establishment: Option<String>,
516    /// 従業員数
517    pub employee_number: Option<String>,
518    /// 創業年
519    pub founding_year: Option<String>,
520    /// 業種
521    pub industry: Option<String>,
522    /// 法人名フリガナ
523    pub kana: Option<String>,
524    /// 法人種別
525    pub kind: Option<String>,
526    /// 本社所在地
527    pub location: Option<String>,
528    /// 法人名
529    pub name: Option<String>,
530    /// 法人名英語
531    pub name_en: Option<String>,
532    /// 郵便番号
533    pub postal_code: Option<String>,
534    /// 処理区分
535    pub process: Option<String>,
536    /// 全省庁統一資格の資格等級
537    pub qualification_grade: Option<String>,
538    /// 法人代表者名
539    pub representative_name: Option<String>,
540    /// ステータス
541    pub status: Option<String>,
542    /// 更新年月日
543    pub update_date: Option<String>,
544}
545
546/// カテゴリ別情報・検索結果のメタデータ(スキーマ: `ChildMetadata`)。
547///
548/// `metadata_flg=true` を指定した場合のみ出力される。
549#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
550pub struct ChildMetadata {
551    /// データ品質
552    pub data_quality: Option<String>,
553    /// データ取込頻度
554    pub import_frequency: Option<String>,
555    /// キー情報
556    pub key_field: Option<String>,
557    /// 最終取得日
558    pub last_acquisition_date: Option<String>,
559    /// 最終更新日
560    pub last_update_date: Option<String>,
561    /// 出典元
562    pub source: Option<String>,
563}