CSVインポートAPI


概要

{primary} ルートパラメーターに応じた種類のCSVを登録するAPIです。

監理団体アカウントで、ステータスが 5:利用中 のユーザのみ利用できます。

また、監理団体のマスター、管理者、一般に制限なく利用することができます。

CSVファイルはテンプレートファイルをダウンロードしてもらい、そのファイルをパラメータとして受け取ります。

更新時は、エクスポートしたファイルから、更新内容をテンプレートファイルに記述してパラメータとして受け取ります。


CSVインポート処理

ファイルとルートパラメータのバリデーションチェック

バリデーションを参照。

  • ファイルの存在チェックが必要です。
  • ファイルの拡張子が.csvであるかのチェックが必要です。
  • 1:実習実施先, 10:技能実習生, 20:送出機関 以外のパラメータが来たときは
    result:true の空配列を返します。

文字化け対策のため文字コードを設定

  • CSVファイルはSJIS-winで、DBなどから抽出するときはutf-8なので対策が必要。
  • setFormCharset()とsetToCharset()にて対策。

登録データのバリデーションチェック

バリデーションを参照。

  • 1行目はカラム名なので無視します。
  • 登録できるようにCSVファイルのデータを配列に変換します。
  • バリデーションのチェックをします。
  • 問題がなければ、ルートパラメータに対応するテーブルに登録します。

参考サイト

https://qiita.com/fbfb6123/items/63f4d0735e3a5a127149

{danger} 挙動の不明点が多いので、一旦ここまで記述しておきます。

実装後詳しい挙動などについては追記する予定です。


エンドポイント

メソッド URI Headers
POST /api/csv/{type} Default

リクエストパラメーター

ROUTEパラメータ

パラメーター名 内容 特記
type int エクスポートファイル種類 Enum参照
/api/csv/1

レスポンス

成功時
パラメーター名 内容 特記
count int 何件登録したか結果
file_name string 何というファイル名で登録したか

※ 多分できる想定。できなかったらご連絡を。

{
    "result"   : true,
    "errors"   : "",
    "data"     : {
    'count'     : 25,
    'file_name' : 'sample.csv'
  },
}
失敗時

ステータスコード:200

パラメーター名 内容 特記
result boolean リクエスト結果
error List 失敗した理由を配列
{
  "result"   : false,
  "errors"   : {
    'error'       : ['〇行〇列は必須です。','〇行〇列は必須です。','〇行〇列は必須です。',],
    'file_name'   : 'sample.csv'
  },
  "data"     : "",
}

{primary} 何もなければ空配列で返却。typeが空の場合や、1,10,20以外の場合の存在しないコードが来た場合を

想定しています。取得するデータが存在しないため

失敗ではなく、成功として返却します。

エラー件数は上限100件までとします。


{danger} 失敗時は200以外のエラーコードが返却されます。共通ルールのレスポンスをチェック。


データストア

{primary} 実習実施先、技能実習生、送出機関、共通して監理団体IDを登録します。

実習実施先を登録するとき

  • clientsテーブル

{warning} IDはNULLかどうかで、新規登録or更新の判別を行います。

所属している監理団体の変更は出来ないので、監理団体IDの変更は出来ません。

また、削除理由は管理画面でのみ変更可能のため、CSVインポート処理では変更できません。

作成日時、更新日時、削除日時は自動で更新するためCSVファイルに入力する必要はありません。

物理名 フィールド名 備考
ID id int
区分 client_type tinyint
法人番号 corporate_number char
雇用保険適用事業所番号 insurance_office_number char
実習実施先名 name varchar
実習実施先名 ふりがな kana varchar
実習実施先名 ローマ字 romaji varchar
代表者名 姓 representative_sei varchar
代表者名 名 representative_mei varchar
代表者名 ふりがな 姓 representative_kana_sei varchar
代表者名 ふりがな 名 representative_kana_mei varchar
代表者名 ローマ字 representative_family_name varchar
代表者名 ローマ字 representative_first_name varchar
代表者役職 representative_rank tinyint
郵便番号 郵便区番号 zip1 char
郵便番号 町域番号 zip2 char
所在地 address varchar
所在地 ふりがな address_kana varchar
所在地 ローマ字 address_romaji varchar
TEL 市外局番 phone1 varchar
TEL 市内局番 phone2 varchar
TEL 加入者番号 phone3 varchar
FAX 市外局番 fax1 varchar
FAX 市内局番 fax2 varchar
FAX 加入者番号 fax3 varchar
資本金 capital_amount bigint
資本金なし no_capital boolean
社員人数 employee_number int
社員人数 事業部員 business_staff_number int
社員人数 現場部員 field_staff_number int
メールアドレス email varchar
職種 target_job boolean
移行対象職種 カテゴリー job_category tinyint
移行対象職種 職種 job_occupation tinyint
移行対象職種 作業 job_operation tinyint
複数実施の場合 移行対象職種 カテゴリー sub_job_category tinyint
複数実施の場合 移行対象職種 職種 sub_job_occupation tinyint
複数実施の場合 移行対象職種 作業 sub_job_operation tinyint
技能実習内容 job_detail varcahr
業種 大分類 industry_large_category char
業種 小分類 industry_small_category char
主要製品・サービス main_product varcahr
実習生受入経験 acceptance_experience tinyint
実習実施者届出受理番号 receipt_number char
実習実施者届出受理年月日 receipt_date date
労働保険番号 insurance_number char
加盟申込書対応日 membership_application_date date
実習生受入申込書対応日 receipt_application_date date

技能実習生を登録するとき

  • trainees(技能実習生)テーブル

{warning} IDはNULLかどうかで、新規登録or更新の判別を行います。

新規、編集にかかわらず監理団体の変更はできません。

編集時は所属している実習実施先、所属事業所、送出国の変更は出来ないので、

監理団体、実習実施先(編集時)、所属事業所(編集時)、送出国(編集時)はCSVインポート処理での変更は出来ません。

ステータスに関しては、更新時に変更可能だと削除同等の処理が実現してしまうため、更新時は変更出来ないようにしております。

また、削除理由は管理画面でのみ変更可能のため、CSVインポート処理では変更できません。

作成日時、更新日時、削除日時は自動で更新するためCSVファイルに入力する必要はありません。

物理名 フィールド名 備考
ID id int
実習実施先企業ID client_id int 新規登録時のみ
所属先事業所 client_location_id int 新規登録時のみ
実習生ステータス status tinyint 新規登録時のみ
送出国 country tinyint 新規登録時のみ
送出機関 sending_agency_id int
実習生氏名 ローマ字 romaji varchar
実習生氏名 フリガナ kana varchar
実習生氏名 漢字 kanji varchar
国籍 nationality tinyint
出身地 birthplace varchar
母国語 native_language varchar
現住所 current_address varchar
TEL 市外局番 phone1 varchar
TEL 市内局番 phone2 varchar
TEL 加入者番号 phone3 varchar
性別 sex tinyint
生年月日 birthday date
パスポート番号 passport_number varchar
パスポート 有効期限 passport_expiration_date date
在留カード番号 residence_card_number varchar
入国日 entry_date date
認定番号 certification_number char
修得等をしようとする技能等に係る職歴 カテゴリー (1) job_category1 tinyint
修得等をしようとする技能等に係る職歴 職種 (1) job_occupation1 tinyint
修得等をしようとする技能等に係る職歴 経験年数 (1) experience_years1 tinyint
修得等をしようとする技能等に係る職歴 カテゴリー (2) job_category2 tinyint
修得等をしようとする技能等に係る職歴 職種 (2) job_occupation2 tinyint
修得等をしようとする技能等に係る職歴 経験年数 (2) experience_years2 tinyint
母国語以外の語学力 日本語 japanese varchar
母国語以外の語学力 英語 english varchar
母国語以外の語学力 その他 other_language varchar
訪日経験 有無 visit_experience tinyint
訪日期間 開始 visit_from date
訪日期間 終了 visit_until date
在留資格 status_of_residence tinyint
訪日経験 チェック1 visit_experience_check1 boolean
訪日経験 チェック2 visit_experience_check2 boolean
第2号技能実習終了後の帰国期間 開始年 no2_return_from_year int
第2号技能実習終了後の帰国期間 開始月 no2_return_from_month tinyint
第2号技能実習終了後の帰国期間 開始日 no2_return_from_day tinyint
第2号技能実習終了後の帰国期間 終了年 no2_return_until_year int
第2号技能実習終了後の帰国期間 終了月 no2_return_until_month tinyint
第2号技能実習終了後の帰国期間 終了日 no2_return_until_day tinyint
建設・造船就労終了後の帰国期間 開始年 construction_return_from_year int
建設・造船就労終了後の帰国期間 開始月 construction_return_from_month tinyint
建設・造船就労終了後の帰国期間 開始日 construction_return_from_day tinyint
建設・造船就労終了後の帰国期間 終了年 construction_return_until_year int
建設・造船就労終了後の帰国期間 終了月 construction_return_until_month tinyint
建設・造船就労終了後の帰国期間 終了日 construction_return_until_day tinyint
活動終了後の帰国期間 開始年 activity_return_from_year int
活動終了後の帰国期間 開始月 activity_return_from_month tinyint
活動終了後の帰国期間 開始日 activity_return_from_day tinyint
活動終了後の帰国期間 終了年 activity_return_until_year int
活動終了後の帰国期間 終了月 activity_return_until_month tinyint
活動終了後の帰国期間 終了日 activity_return_until_day tinyint
技能実習生経験 有無 trainee_experience tinyint
実習期間 開始 training_from date
実習期間 終了 training_until date
技能実習経験及びその区分 trainee_class_experience tinyint
技能実習生経験 区分 trainee_class tinyint
在留資格不交付の有無 non_granted tinyint
在留資格不交付の理由 non_granted_reason varchar
職務内容や責任の程度 duties text
その他 remarks text
技能実習計画認定申請対象 application_target boolean
  • trainee_education_background(実習生 学歴)テーブル

{warning} 学歴の登録を行います。最大3つまでの登録となります。

本来は1学歴に対して1レコードとなりますが、CSVの仕様上

最大3学歴までを1レコードとします。

作成日時、更新日時、削除日時は自動で更新するためCSVファイルに入力する必要はありません。

データが挿入されている分_1~_3をループして登録していきます。

更新時は監理団体IDと技能実習生IDで検索し、対応するレコードを一度deleteし、

挿入された値をInsertします。

  • 登録時のテーブル
物理名 フィールド名 備考
期間 から period_from date
期間 まで period_until date
学校名 school_name varchar
  • CSVでの形
物理名 フィールド名 備考
期間 から_1 period_from_1 date
期間 まで_1 period_until_1 date
学校名_1 school_name_1 varchar
期間 から_2 period_from_2 date
期間 まで_2 period_until_2 date
学校名_2 school_name_2 varchar
期間 から_3 period_from_3 date
期間 まで_3 period_until_3 date
学校名_3 school_name_3 varchar
  • trainee_employment_histories(実習生 職歴)テーブル

{warning} 職歴の登録を行います。最大5つまでの登録となります。

本来は1職歴に対して1レコードとなりますが、CSVの仕様上

最大5職歴までを1レコードとします。

作成日時、更新日時、削除日時は自動で更新するためCSVファイルに入力する必要はありません。

データが挿入されている分_1~_5をループして登録していきます。

更新時は監理団体IDと技能実習生IDで検索し、対応するレコードを一度deleteし、

挿入された値をInsertします。

  • 登録時のテーブル
物理名 フィールド名 備考
期間 から period_from date
期間 まで period_until date
就職先名 company_name varchar
就職先名 職種 employment_history varchar
  • CSVでの形
物理名 フィールド名 備考
期間 から_1 period_from_1 date
期間 まで_1 period_until_1 date
就職先名_1 company_name_1 varchar
就職先名 職種_1 employment_history_1 varchar
期間 から_2 period_from_2 date
期間 まで_2 period_until_2 date
就職先名_2 company_name_2 varchar
就職先名 職種_2 employment_history_2 varchar
期間 から_3 period_from_3 date
期間 まで_3 period_until_3 date
就職先名_3 company_name_3 varchar
就職先名 職種_3 employment_history_3 varchar
期間 から_4 period_from_4 date
期間 まで_4 period_until_4 date
就職先名_4 company_name_4 varchar
就職先名 職種_4 employment_history_4 varchar
期間 から_5 period_from_5 date
期間 まで_5 period_until_5 date
就職先名_5 company_name_5 varchar
就職先名 職種_5 employment_history_5 varchar

送出機関を登録するとき

  • sending_agencies(送出機関)テーブル

{warning} IDはNULLかどうかで、新規登録or更新の判別を行います。

新規、編集にかかわらず監理団体の変更はできません。

送出機関の新規作成、編集時にアカウントも新規作成、編集を行います。

作成日時、更新日時、削除日時は自動で更新するためCSVファイルに入力する必要はありません。

物理名 フィールド名 備考
送出国 country tinyint
送出機関名 name varchar
略称 abbreviated_name varchar
所在地 location varchar
責任者氏名 supervisor_name varchar
責任者役職 supervisor_rank varchar
  • accounts(アカウント)テーブル

{warning} 送出機関の新規登録のタイミングで送出機関のアカウントを作成します。

送出機関編集時にパスワードがnullで来た場合は、更新しないということなので

パスワードは更新しません。

物理名 フィールド名 備考
送出機関ID sending_agency_if int (リレーション)sending_agencies.id
氏名 name varchar sending_agencies.name
ログインID login_ig varchar 10桁のユニークなIDを自動生成します。
パスワード password varchar パスワードはHash化して登録します。
権限レベル authority tinyint 4:送出機関

バリデーション

{primary}エラー件数は上限100件までとします。

100件以上存在する場合は、101件目以降は返却しません。

共通のバリデーション

画面項目名 フィールド名 チェック内容 備考
CSV required / 拡張子がcsvかどうかのチェック

実習実施先のバリデーション

  • clients(実習実施先)テーブル
画面項目名 フィールド名 チェック内容 備考
ID id nullable / integer
IDが入力されていた場合、監理団体配下に正しく存在するかのチェック
区分 client_type required / Enum一致チェック
重複チェック(法人の場合は法人番号、個人の場合は電話番号)
法人番号 corporate_number 区分が法人の場合のみ必須
雇用保険適用事業所番号 insurance_office_number required / int / digits:11
実習実施先名 name required / max:100
実習実施先名 ふりがな kana required / max:100
実習実施先名 ローマ字 romaji required / max:100
代表者名 姓 representative_sei required / max:50
代表者名 名 representative_mei required / max:50
代表者名 ふりがな 姓 representative_kana_sei required / max:50
代表者名 ふりがな 名 representative_kana_mei required / max:50
代表者名 ローマ字 representative_family_name required / max:50
代表者名 ローマ字 representative_first_name required / max:50
代表者役職 representative_rank required
郵便番号 郵便区番号 zip1 required / digits:3
郵便番号 町域番号 zip2 required / digits:4
所在地 address required / max:255
所在地 ふりがな address_kana required / max:255
所在地 ローマ字 address_romaji required / max:255
TEL 市外局番 phone1 required / digits_between:1,5
TEL 市内局番 phone2 required / digits_between:1,4
TEL 加入者番号 phone3 required / digits_between:1,4
FAX 市外局番 fax1 required_with:fax2,fax3 / nullable / digits_between:1,5
FAX 市内局番 fax2 required_with:fax1,fax3 / nullable / digits_between:1,4
FAX 加入者番号 fax3 required_with:fax1,fax2 / nullable / digits_between:1,4
資本金 capital_amount required_without:no_capital / nullable / integer / max:9999999999
資本金なし no_capital required_without:capital_amount / Enum一致チェック
社員人数 employee_number required / digits_between:1,6
社員人数 事業部員 business_staff_number required / digits_between:1,10
社員人数 現場部員 field_staff_number required / digits_between:1,10
メールアドレス email nullable / max:100 / 重複チェック
職種 target_job required / Enum一致チェック
移行対象職種 カテゴリー job_category 職種が移行対象職種・作業であった場合必須 / テーブル一致チェック
移行対象職種 職種 job_occupation 職種が移行対象職種・作業であった場合必須 / テーブル一致チェック
移行対象職種 作業 job_operation 職種が移行対象職種・作業であった場合必須 / テーブル一致チェック
複数実施の場合 移行対象職種 カテゴリー sub_job_category required_with:sub_job_occupation,sub_job_operation / テーブル一致チェック
複数実施の場合 移行対象職種 職種 sub_job_occupation required_with:sub_job_category,sub_job_operation / テーブル一致チェック
複数実施の場合 移行対象職種 作業 sub_job_operation required_with:sub_job_category,sub_job_occupation / テーブル一致チェック
技能実習内容 job_detail max:255 / 職種が移行対象職種・作業以外であった場合必須
業種 大分類 industry_large_category required / テーブル一致チェック
業種 小分類 industry_small_category required / テーブル一致チェック
主要製品・サービス main_product required / max:255
実習生受入経験 acceptance_experience required
実習実施者届出受理番号 receipt_number nullable / digits:10 / 実習生受入経験が"過去に経験あり"または"在籍中"だった場合必須
実習実施者届出受理年月日 receipt_date nullable /date / 実習生受入経験が"過去に経験あり"または"在籍中"だった場合必須
労働保険番号 insurance_number nullable / digits:14
加盟申込書対応日 membership_application_date ログインユーザが監理団体の場合:nullable / date
ログインユーザが監理団体以外の場合:required / date
実習生受入申込書対応日 receipt_application_date ログインユーザが監理団体の場合:nullable / date
ログインユーザが監理団体以外の場合:required / date

技能実習生のバリデーション

  • trainees(技能実習生)テーブル
画面項目名 フィールド名 チェック内容 備考
ID id nullable / integer / IDが入力されていた場合、監理団体配下に正しく存在するかのチェック
実習実施先企業ID client_id 新規登録時のみ: required / integer ※更新時はnull必須
所属先事業所 client_location_id 新規登録時のみ: required / integer ※更新時はnull必須
実習生ステータス status 新規登録時のみ: required / integer / Enum一致チェック ※更新時はnull必須
送出国 country 新規登録時のみ: required / integer ※更新時はnull必須
送出機関 sending_agency_id required / integer
実習生氏名 ローマ字 romaji required / string / max:50 / 重複チェック
実習生氏名 フリガナ kana required / string / max:50
実習生氏名 漢字 kanji nullable / string / max:50
国籍 nationality required / integer
出身地 birthplace required / string / max:100
母国語 native_language nullable / string / max:20
現住所 current_address required / string / max:255
TEL 市外局番 phone1 required / digits_between:1/5
TEL 市内局番 phone2 required / digits_between:1/4
TEL 加入者番号 phone3 required / digits_between:1/4
性別 sex required / integer
生年月日 birthday required / date_format:Y/m/d / before:today
パスポート番号 passport_number nullable / string
パスポート 有効期限 passport_expiration_date nullable / date_format:Y/m/d
在留カード番号 residence_card_number 実習中の時: required / size:12 / 重複チェック
入国日 entry_date 実習中の時: required / date_format:Y/m/d
認定番号 certification_number required / string / size:10
修得等をしようとする技能等に係る職歴 カテゴリー (1) job_category1 nullable / integer
required_with:job_occupation1, experience_years1, job2, experience_years2
カテゴリーの重複チェック
修得等をしようとする技能等に係る職歴 職種 (1) job_occupation1 nullable / integer
required_with:job_category1, experience_years1, job2, experience_years2
職種の重複チェック
修得等をしようとする技能等に係る職歴 経験年数 (1) experience_years1 nullable / integer / min:1
required_with:job_category1, job_occupation1, job2, experience_years2
年の重複チェック
修得等をしようとする技能等に係る職歴 カテゴリー (2) job_category2 nullable / integer
required_with:job_occupation2, experience_years2
カテゴリーの重複チェック
修得等をしようとする技能等に係る職歴 職種 (2) job_occupation2 nullable / integer
required_with:job_category2, experience_years2'
職種の重複チェック
修得等をしようとする技能等に係る職歴 経験年数 (2) experience_years2 nullable / integer / min:1
required_with:job_category2, job_occupation2
年の重複チェック
母国語以外の語学力 日本語 japanese nullable / max:50
母国語以外の語学力 英語 english nullable / max:50
母国語以外の語学力 その他 other_language nullable / max:50
訪日経験 有無 visit_experience required/ integer
訪日期間 開始 visit_from nullable / date_format:Y/m/d / before:visit_until / 訪日経験が有の場合必須
訪日期間 終了 visit_until nullable / date_format:Y/m/d / before:visit_until / 訪日経験が無の場合必須
在留資格 status_of_residence nullable / integer / 訪日経験が有の場合必須
訪日経験 チェック1 visit_experience_check1 nullable / string / in:on
訪日経験 チェック2 visit_experience_check2 nullable / string / in:on
第2号技能実習終了後の帰国期間 開始年 / 開始月 / 開始日 no2_return_from nullable / date_format:Y/m/d / before:no2_return_until
第2号技能実習終了後の帰国期間 終了年 / 終了月 / 終了日 no2_return_until nullable / date_format:Y/m/d / after:no2_return_from / before:today
建設・造船就労終了後の帰国期間 開始年 / 開始月 / 開始日 construction_return_from nullable / date_format:Y/m/d / before:construction_return_until
建設・造船就労終了後の帰国期間 終了年 / 終了月 / 終了日 construction_returnuntil nullable / date_format:Y/m/d / after:construction_return_from / before:today
活動終了後の帰国期間 開始年 / 開始月 / 開始日 activity_return_from nullable / required_if:visit_experience_check2,on / date_format:Y/m/d / before:activity_return_until
活動終了後の帰国期間 終了年 / 終了月 / 終了日 activity_return_until nullable / required_if:visit_experience_check2,on / date_format:Y/m/d / after:activity_return_from
技能実習生経験 有無 trainee_experience required / integer
実習期間 開始 training_from nullable / date_format:Y/m/d / before:training_until
実習期間 終了 training_until nullable / date_format:Y/m/d / after:training_from
技能実習経験及びその区分 trainee_clsas_experience nullable / integer
技能実習生経験 区分 trainee_class 実習中の時のみ必須
在留資格不交付の有無 non_granted required / integer
在留資格不交付の理由 non_granted_reason nullable / string / max:100 / 在留資格不交付の有無が有の時のみ必須
職務内容や責任の程度 duties nullable
その他 remarks nullable
技能実習計画認定申請対象 application_target nullable
  • trainee_education_background(実習生 学歴)テーブル

{warning} データストア部分に記載した仕様通りなので

データが挿入されている分_1~_3をループしてバリデーションチェックを行います。

画面項目名 フィールド名 チェック内容 備考
期間 から period_from required_with:period_until,school_name / nullable / date_format:Y/m/d / before:period_until
期間 まで period_until required_with:period_form,school_name / nullable / date_format:Y/m/d / before:today
学校名 school_name required_with:period_form,period_until / nullable / string / max:100
  • trainee_employment_histories(実習生 職歴)テーブル

{warning} データストア部分に記載した仕様通りなので

データが挿入されている分_1~_3をループしてバリデーションチェックを行います。

画面項目名 フィールド名 チェック内容 備考
期間 から period_from required_with:period_until,company_name,employment_history / nullable / date_format:Y/m/d / before:period_until
期間 まで period_until required_with:period_from,school_name,employment_history / nullable / date_format:Y/m/d / before:today
就職先名 company_name required_with:period_from,period_until,employment_history / nullable / string / max:100
就職先名 職種 employment_history required_with:period_from,period_until,company_name / nullable / string / max:50

送出機関のバリデーション

  • sending_agencies(送出機関)テーブル
画面項目名 フィールド名 チェック内容 備考
ID id nullable / integer / IDが入力されていた場合、監理団体配下に正しく存在するかのチェック (リレーション)accounts.sending_agencies_id
送出国 country required
送出機関名 name required / max:100
略称 abbreviated_name required / max:100
所在地 location max:255
責任者氏名 supervisor_name required / max:50
責任者役職 supervisor_rank required / max:50
  • accounts(アカウント)テーブル
画面項目名 フィールド名 チェック内容 備考
送出機関ID sending_agency_id nullable / integer (リレーション)sending_agencies.id
氏名 name required / string / max:100 sending_agencies.name
パスワード password required (※) ※編集時にパスワードを変更しない場合は
nullが渡されるのでnullableになります。


指定文字種のみ許可 ・下記3項目を許可
半角英数字
半角ハイフン
半角アンダーバー
・クラス:App\Rules\CharacterType\Identifier


between:8,20

注意事項

  • 技能実習生の登録時、新規登録時と更新時で登録するカラムが変わるので注意。
  • 技能実習生の学歴、職歴の登録時、更新の場合は対象レコードを一度deleteとした後にinsertします。