請求テストの失敗談～あれだけ頑張ったのに、初歩的なミスがデカかった～

## はじめに
　こんにちは。[LITALICO](https://litalico.co.jp/)にQAエンジニアとして所属しています@take_takehiroです。「障害福祉サービスを展開する事業所様向けの請求業務支援システム」に関わらせてもらっております。本記事は、[LITALICO Advent Calendar 2024](https://qiita.com/advent-calendar/2024/litalico)の3日目の記事となり、2024年4月にございました「[令和６年度障害福祉サービス等報酬改定について](https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000202214_00009.html)」への奮闘記と失敗談を記載いたしました。

## 障害福祉サービスとは
　障害者総合支援法に記載されている「障害者及び障害児が基本的人権を享有する個人としての尊厳にふさわしい日常生活又は社会生活を営む」ことを目的に、様々なニーズに合わせたサービスが用意されております（[障害福祉サービスの利用について](https://www.mhlw.go.jp/content/12200000/001327493.pdf)をご参照ください）。対象サービスは障害者総合支援法または児童福祉法にてサービス内容が定義されております。例えば、障害者総合支援法で定義されている一部サービスは下図（[厚生労働省HP](https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/hukushi_kaigo/shougaishahukushi/service/naiyou.html)より）となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984521/a63fd7dc-76b1-59e6-6152-bfd03fb34929.png)


　また、弊社では下記の要領にて、障害福祉サービスを展開しております。サービス内容とニーズが一致すればどなたでも利用可能なので、ご興味ある方はご検討いただいてはいかがでしょうか。

| LITALICOのサービス | サービス内容 |
| -------- | -------- |
| [LITALICOワークス](https://works.litalico.jp/) | 就労移行支援、就労定着支援、計画相談支援（障害者向け） |
| [LITALICOジュニア](https://junior.litalico.jp/) | 児童発達支援、放課後等デイサービス、保育所等訪問支援、計画相談支援（障害児向け） |

　前述した通り、障害福祉サービスは障害者総合支援法または児童福祉法にて定義されているのですが、3年に1度大きく法律内容が改定（以下、法改正）されます。法改正により、支援方法だけでなく、利用者様がサービスを利用した分に対する費用の算定方法にも大きな影響を及ぼすものとなっているため、我々エンジニアも算定方法だけでなく、算定される内容がどのようなものなのかを把握しておく必要があります。

 

## 障害福祉サービス利用による費用について

### 費用の発生の仕方
　障害福祉サービスは、障害者総合支援法または児童福祉法に則ったサービスのため、支援を行った際には各法に記載されている「単位数」を用いて費用の算出を行います。単位数がなじみのない方には、病院で会計をした時にもらう、明細書に記載されている内容と同様のものと考えていただければと思います。同じサービス・同じ支援であっても、サービス提供をしている事業所様の状況に応じて算定単位数は変化してしまうのですが、1回あたりの費用は下記を参考にされても良いかもしれません。（後述しますが、利用者が負担する費用は障害者総合支援法や児童福祉法に則り、大幅に削減される場合が多いです）
 
| 障害福祉サービス | 1回あたりの単位数 / 目安の金額<br>※地域区分が「その他」の場合（単位数に「×10[円/単位]」が発生） | 事業所様の運営や支援の状況<br>サービス名称は令和6年4月施行のもの |
| -------- | -------- | -------- |
| 就労移行支援 | 1,210単位 / 12,100円 | 定員20人以下<br>就職後の6か月後の定着率が5割以上<br>※サービス名称「就移１１」 |
| 児童発達支援 | 901単位 / 9,010円 | 定員10人以下<br>1時間程度の支援提供<br>※サービス名称「児発２１４１１」 |

### 利用者が負担する金額
　障害福祉サービスは、基本的に利用者負担額が1割負担となっており、他9割は給付費という形で自治体が負担することになってます。例えば、先ほどの表に記載されている就労移行支援のサービスを受けた場合には、12,100円×0.1=1,210円を利用者が負担することになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984521/293cc7cd-41bc-6d80-2c65-8cecca3e307b.png)
 
　そのため、就労移行支援を平日毎日利用（20日とします）すると仮定すると、利用者負担額は下記計算式の通りとなります。1割負担とはいえ、利用者負担額は大きな金額になることが分かります。

　   1,210[単位]×20[日]×10[円/単位]×0.1=24,200円

　ただし、一定の利用者負担額以上の負担が見込まれる場合は、一定の負担額以上は利用者が負担せずに済む制度があり、前年の世帯収入に応じて毎月の利用者による負担上限額が決定されます（実費利用分がある場合、その分別途費用が発生します）。2022年時点にて、就労移行支援を提供したLITALICOワークスでは、利用者の8割以上が自己負担なしでサービスを受けることが出来たそうです（[参考：LITALICOワークスHPより](https://works.litalico.jp/syuro_shien/price/)）。


## 請求テストをやろう

### そもそも請求テストとは
　言葉の通り「請求」に関するテストです。詳しく申しますと「利用者の利用実績に応じてサービス算定内容に誤りがないように算定され」「正しい金額で請求業務を行うことが出来るか」を確認するものとなります。請求テストが必要になる理由として、下記が挙げられます。

- 利用者ごとの請求金額を明白にして、正しい請求情報にて請求業務を行いたい
- 請求情報が不正である場合、サービス提供を行った事業所様が給付費を受給出来なくなる場合があり、最悪の事態として事業所の閉鎖につながってしまう


### 総費用額の成り立ち

　障害福祉サービスは9割以上が給付費という自治体負担になるため、サービス提供を行う事業所様がどのような支援をしたらどれだけ給付を受けられるかを、厚生労働省や子ども家庭庁が定義をしております。例えば、2024年の4月と6月にありました法改正は、[厚生労働省のHP](https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000174644_00018.html)の「障害福祉サービス費等の報酬算定構造」や「介護給付費等単位数サービスコード」にて算定条件や算定単位数が具体的に定義されており、それを元に総費用額を計算することになります。算定される状況によりますが、ざっくりと総費用額を算出するには下図によって算出されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984521/ce9b8e90-cd7a-7345-6dce-6326be930c5e.png)



　上図の黄枠記載内容がサービス提供により変幻自在に変化するため、全てのパターンを網羅して請求テストを行うことは、現実的ではありません。さらには、請求テストを実施出来る期間は2週間以内の短い期間で完了させる必要があります（請求テストを作成する期間は別途発生します）。そのため、請求テストの実施において、量を調整しながらも品質を担保してテストを行う作戦を立てる必要がありました。



## 請求テストの作戦立て
　法改正対応期間の活動において、法改正内容の確立が2月上旬・法改正の施行が4月1日のため、短期間で膨大な法改正による影響内容に対処する必要がございます。法改正に対して、請求テストの準備から実施までのざっくりとしたプロセスを示したものが下図となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984521/94d8fea6-2878-2e7b-a830-01bea18757bf.png)



「①法改正内容の理解」は請求テスト内容を作成するうえで重要なプロセスですが、本記事ではこのプロセスの記載は割愛させていただきます。以下、②以降について記載します。以降に出てくる数については、障害福祉サービスのひとつである児童発達支援に対して請求テストを行った時の内容となります。


### ②パターンを作成すべき内容を整理・③パターン作成
　請求テスト実施において、考えるパターンの種類は下記3種類がございました。請求テストを行う際には、大きく分けて4種類のパターンを組み合わせたテストを行う必要がありました。

| 考慮するパターン | 考慮が必要となる理由 |
| -------- | -------- |
| 事業所の運営情報 | 事業所にかかる加算、基本報酬に影響のある設定に種類があるため |
| 利用者に関する情報（受給者証記載情報） | 受給者証の記載内容により、利用者ごと算定される単位数が異なるため |
| 利用者がサービスを利用した実績 | 日々の活動によって算定出来る内容が異なるため |
| 地域区分 | 「円」請求を確定させる情報のため |


具体的なパターン数は後述しますが、JSTQBで定義されているテストの7原則の一つである「全数テストは不可能」とあるように、限られた時間内に全てのテストパターンを実施することは困難です。今回の請求テストも2週間以内の短い期間で完了する必要がございました。そこで、下記の考え方を基にパターンの作成を行いました。

- 全ての選択肢を最低1回は用いる
- 特に用いられる加算をピックアップして、PictMasterを用いてパターンを作成する


#### 全ての選択肢を最低1回は用いる

　請求金額を確認する大前提として、「システムにおける請求に影響を及ぼす全ての選択肢が正しく制御出来ていること」があげられます。ただし、全ての選択肢の組み合わせをテストする場合、パターンの要素が1つ増えるだけでも爆発的にパターン数が増大してしまいます。
　そのため、全ての選択肢の組み合わせを網羅するのではなく、「全選択肢を最低1回は用いる」としました。「全選択肢を最低1回は用いる」テストを行うことで、画面から選択出来る全項目を網羅することになります。この考えに則ることでテストすべきパターン数は、「パターンの要素のうち、最大の選択肢の個数」と一致することになるため、テストを行うべきパターン数を大幅に削減することが出来ます。下記表は今回の請求テストにてパターン数の比較したものです。


| 考慮するパターン | 全てのテストパターン数 | 考慮後の想定パターン数 |
| -------- | -------- | -------- |
| 事業所の運営情報 | 約7億 | 8<br>※「地域区分」を含めたもの |
| 利用者に関する情報（受給者証記載情報） | 約250万 | 13 |
| 利用者がサービスを利用した実績 | 約2兆 | 9 |
| 地域区分 | 8 | ※「事業所の運営情報」に統合 |
| **全実施件数** | **10の28乗以上（＝上記4つの掛け算）** | **13（＝「利用者に関する情報」のパターン数）** |

「利用者がサービスを利用した実績」の考慮後の想定パターン数については、同時算定不可の場合があるため、実際には15パターン程度発生しております。最低限のパターンにおける出力結果の正しさ確認することで、画面から選択出来る全項目を網羅することは出来ました。


#### 特に用いられる加算をピックアップして、PictMasterを用いてパターンを作成する

　最低限のパターン作成については前述に記載しましたが、あくまで最低限であるため、テストしていないパターンが数多く存在します。ただし、限られた時間において無作為にパターンを作成してテストをしても、パターン内容に偏りが発生する可能性があることから、テストの品質が向上する訳ではございません。
　そのため、過去の実績から「法改正後も特に用いられるであろう加算」を抜粋し、PictMasterを用いてパターンを作成しました。PictMasterとは、組み合わせパターンを自動で生成するソフトです。パターンの作成にはペアワイズ法と呼ばれる手法を採用して、特定の組み合わせに偏らないようにテストを行うパターン数を抑えることにしました。ペアワイズ法とは、「[「ペアワイズ法」テスト技法解説 | HQW!](https://www.veriserve.co.jp/helloqualityworld/media/20240125003/)」から引用させて頂きますが、下記のような技法です。
> 「ソフトウェアの不具合の多くが1つまたは2つのパラメータ（因子）の組み合わせによって発生している、という経験則に基づいて、2パラメータ間の値の組み合わせを網羅するテストケースを作成する技法


例えば、3つのHPでの挙動確認を行う場合を想定します。その時の条件を下記とします。
- 使用するOSは2種類（Windows、Mac）
- 使用するブラウザは3種類（Chrome、Edge、FireFox）
- 対象のHPは3種類（集客サイト、販促サイト、管理サイト）

この場合、全パターンのテストを行う場合は「2×3×3=18パターン」を実施する必要があります。一方で、ペアワイズ法によるPictMasterを用いてパターンを作成すると下図の通り9パターンになり、内容の偏りを抑えながらもテスト実施するする量を半分に抑えることが出来ることが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984521/2ae3082b-26cc-dbf7-33ea-71d1aab8fec1.png)


　請求テストではPictMasterを用いて、新たに49パターンを用意することが出来ました。結果的に「全ての選択肢を最低1回は用いる」で用意した13パターンと合わせて、合計62パターンを用いて請求テストを行うことになりました。


### ④パターンに則りデータ登録・⑤出力結果の正当性の確認

　パターンの準備が出来ましたら、作成したパターンをシステムに登録していきます。最初はパターン内容を手入力していきましたが、パターンと登録内容の不一致がたびたび起こってしまい、確認するために多くの時間を必要としてしまいました。後半でmablを用いてパターンの登録を行ったことで、人力によるミスを減らすことが出来ました。
　用意したパターンをシステムに登録してからは、その内容を元に得られた出力結果が正しいかの確認を行うことになります。素晴らしい同僚により、大量に出力される内容を一目でOK/NGを確認出来ました（本当に頭が上がらないです・・・。2027年法改正の時には自分がそれを出来るように精進してまいります）。


## 請求テストで失敗したこと～反省することは、初歩的なことだった～

　今回の請求テストでは、3サービスを対象に実施しました。開発の皆さまのご尽力、またPictMasterを用いたパターンによるテストの甲斐があり、法改正施行後にシステムを利用してくださっている事業所様の請求業務が停止するようなことは発生せずに済みました。ただし、リリース後に、事業所様からの問い合わせで1件の不具合が判明しました。
 　不具合内容としては、**特定の加算が算定されていない**とのことでした。上記②③の工程において「全選択肢を最低1回は用いる」としたので、テストしたことと不具合内容に矛盾が生じています。そのため、請求テストの進捗記録を整理していたところ、**システムに登録していないパターンが1件ありました**。
　登録していないパターンが出てきてしまった理由として、「**テスト中の不具合改修に応じて、一部パターンのシステムに登録するタイミングをずらしていた。その過程で管理漏れが発生し、結果的にシステム未登録のパターンが発生させてまった**」ことでした。管理が出来ていれば防げた初歩的なミスのため、後悔が大きいところです。
　今後同じことを繰り返さないために、明白な段取りであってもテキスト化することで行動の定義化を図ることも大事ですが、集中すべきタイミングをなるべく減らす工夫の必要性を痛感しました。テスト期間中とはいえ、常時高い注意力を払うことは難しいため、例えばmablなどの自動化ツールの力を借りる場面を多くすることで「高い注意力を払う場面を減らせられるのでは」と感じております。