> ## Documentation Index
> Fetch the complete documentation index at: https://developer.box.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 21 CFR Part 11リクエスト

export const MultiRelatedLinks = ({sections = []}) => {
  if (!sections || sections.length === 0) {
    return null;
  }
  return <div className="space-y-8">
      {sections.map((section, index) => <RelatedLinks key={index} title={section.title} items={section.items} />)}
    </div>;
};

export const RelatedLinks = ({title, items = []}) => {
  const getBadgeClass = badge => {
    if (!badge) return "badge-default";
    const badgeType = badge.toLowerCase().replace(/\s+/g, "-");
    return `badge-${badge === "ガイド" ? "guide" : badgeType}`;
  };
  if (!items || items.length === 0) {
    return null;
  }
  return <div className="my-8">
      {}
      <h3 className="text-sm font-bold uppercase tracking-wider mb-4">{title}</h3>

      {}
      <div className="flex flex-col gap-3">
        {items.map((item, index) => <a key={index} href={item.href} className="py-2 px-3 rounded related_link hover:bg-[#f2f2f2] dark:hover:bg-[#111827] flex items-center gap-3 group no-underline hover:no-underline border-b-0">
            {}
            <span className={`px-2 py-1 rounded-full text-xs font-semibold uppercase tracking-wide flex-shrink-0 ${getBadgeClass(item.badge)}`}>
              {item.badge}
            </span>

            {}
            <span className="text-base">{item.label}</span>
          </a>)}
      </div>
    </div>;
};

export const Link = ({href, children, className, ...props}) => {
  const localizedHref = localizeLink(href);
  return <a href={localizedHref} className={className} {...props}>
      {children}
    </a>;
};

[21 CFR Part 11][cfr]は、電子記録および電子サインを紙の記録および手書きの署名と同等のものとして承認する場合の基準を定めた、米国食品医薬品局 (FDA) の規制です。ライフサイエンス業界など、規制の対象となる業界の組織では、これらの要件をGxP (適正実施) コンプライアンスと呼んでいます。

Box Sign APIを使用すると、21 CFR Part 11署名リクエストと標準的な署名リクエストの両方を作成して管理できます。Boxウェブアプリだけでなく、独自のアプリケーションやBox Automateワークフロー、Box for Salesforce統合でも21 CFR Part 11の署名を要求できるようになりました。

<Note>
  Box Signにおける21 CFR Part 11のサポートには、GxP Validationが必要です。GxP Validationに加え、お客様はAPIを通じて`cfr11`リクエストを作成する前に、管理コンソールで特定のユーザーおよびグループに対して21 CFR Part 11を有効にする必要があります。詳細については、[21 CFR Part 11コンプライアンスのサポート][cfr]を参照してください。
</Note>

## リクエストフローの選択

リクエストが21 CFR Part 11フローと標準フローのどちらに従うのかは、`request_flow`フィールドによって決まります。このフィールドには以下の値を使用できます。

| 値          | 説明                                        |
| ---------- | ----------------------------------------- |
| `cfr11`    | リクエストは21 CFR Part 11フローに従って、関連する要件を適用します。 |
| `standard` | リクエストはBox Signの標準フローに従います。                |

リクエストを作成する際、`request_flow`フィールドは省略可能です。このフィールドを設定しない場合は、企業の管理者設定に基づいてデフォルト値が選択されます。アカウントにアクセス権限のない値を設定した場合は、APIから`403 Forbidden`エラーが返されます。

また、`request_flow`フィールドは、署名リクエストやテンプレートを作成、取得する際、またはそれらのリストを取得する際にレスポンスで返されるため、各リクエストまたはテンプレートで使用されているフローを特定できます。

## 21 CFR Part 11リクエストの要件

`request_flow`が`cfr11`の場合は、以下の要件が適用されます。

* **署名者のログインが必須です。**各署名者の`login_required`フィールドは常に`true`です。`login_required`を`false`に設定すると、APIから`400 Bad Request`エラーが返されます。
* **署名の色は赤にできません。**`signature_color`を`red`に設定すると、APIから`400 Bad Request`エラーが返されます。代わりに`blue`か`black`を使用してください。
* **各受信者には有効なフィールドが必要です。**各受信者または受信者グループには、フィールドを1つも割り当てないか、必須の署名またはイニシャルフィールドを少なくとも1つ割り当てる必要があります。たとえば、テキストフィールドのみを含む21 CFR Part 11リクエストは作成できませんが、プレースホルダが1つもない21 CFR Part 11リクエストは作成できます。

## 21 CFR Part 11リクエストの作成

<Link href="/reference/post-sign-requests">署名リクエストを作成する</Link>際は、`request_flow`を`cfr11`に設定します。Boxがリクエストを検証する方法は、お客様がテンプレート、ソースファイル、またはその両方のいずれを指定するかによって異なります。

### テンプレートから作成

テンプレートからリクエストを作成する場合は、`template_id`を渡して`request_flow`を`cfr11`に設定します。Boxはリクエスト時に、テンプレートのプレースホルダが[21 CFR Part 11の要件](#requirements-for-21-cfr-part-11-requests)を満たしているかどうかを検証します。

```sh cURL theme={null}
curl -i -X POST "https://api.box.com/2.0/sign_requests" \
     -H "authorization: Bearer <ACCESS_TOKEN>" \
     -H "content-type: application/json" \
     -d '{
       "request_flow": "cfr11",
       "template_id": "123075213-af2c8822-3ef2-4952-8557-52d69c2fe9cb",
       "signers": [
         {
           "role": "signer",
           "email": "signer@example.com"
         }
       ],
       "parent_folder": {
         "type": "folder",
         "id": "234102987614"
       }
     }'
```

テンプレートに含まれているのが署名以外のフィールドのみの場合、リクエストは`400 Bad Request`エラーで失敗します。[エラーレスポンス](#error-responses)を参照してください。

### ソースファイルから作成

`source_files`からリクエストを作成する場合は、[テンプレートタグ][tags]を使用して、ドキュメント内で直接、署名、イニシャル、その他のプレースホルダを定義します。Boxは、これらのプレースホルダをドキュメントの変換中に非同期的に抽出するため、リクエスト時にそれらを検証できません。そのため、ソースファイルから作成される21 CFR Part 11リクエストでは、`is_document_preparation_needed`フィールドが**必須**となります。設定する値に応じて、検証が実行されるタイミングが決まります。

| `is_document_preparation_needed` | 検証が実行されるタイミング                            |
| -------------------------------- | ---------------------------------------- |
| `true`                           | リクエストの送信前に、Box Signの準備ページでドキュメントを確認するとき。 |
| `false`                          | リクエストの送信後に、ドキュメントが非同期的に変換される間 (自動)。      |

#### 送信前にドキュメントを確認

`is_document_preparation_needed`を`true`に設定すると、レスポンスには`prepare_url`が含まれます。このURLをブラウザで開いて、リクエストの送信前にBox Signの準備ページでドキュメントを確認します。準備中に、Boxによって以下の処理が行われます。

* 署名とイニシャルのプレースホルダを検証する。
* それらのプレースホルダを、21 CFR Part 11の要件を満たすように自動的に調整する。
* プレースホルダのサイズ変更があった場合は警告を表示し、送信前に変更内容を確認できるようにする。

準備ページでは、調整を受け入れてリクエストを送信することも、リクエストをキャンセルすることもできます。

```sh cURL theme={null}
curl -i -X POST "https://api.box.com/2.0/sign_requests" \
     -H "authorization: Bearer <ACCESS_TOKEN>" \
     -H "content-type: application/json" \
     -d '{
       "request_flow": "cfr11",
       "is_document_preparation_needed": true,
       "source_files": [
         {
           "type": "file",
           "id": "1358047520478"
         }
       ],
       "signers": [
         {
           "role": "signer",
           "email": "signer@example.com"
         }
       ],
       "parent_folder": {
         "type": "folder",
         "id": "234102987614"
       }
     }'
```

#### 変換中に検証

`is_document_preparation_needed`を`false`に設定すると、Boxはドキュメントの非同期変換中にプレースホルダを検証します。検証が失敗した場合は、以下のようになります。

* リクエストは`error`状態になり、`error_code`フィールドが`cfr11_validation_failed`に設定されます。
* Boxからリクエスト送信者に失敗を報告するメールが送信され、APIドキュメントが案内されます。
* 21 CFR Part 11の要件を満たすようにファイルを修正し、新しいリクエストを送信する必要があります。

### テンプレートとソースファイルから作成

`template_id`と`source_files`の両方を渡すこともできます。この場合、ソースファイルによってテンプレートのドキュメントが上書きされる一方で、テンプレートのその他の情報 (署名者など) は、リクエストに関連付けられたままになります。Boxは、[ソースファイルから作成](#create-from-source-files)する場合と同様にリクエストを検証するため、`is_document_preparation_needed`は必須です。

## CFR Part 11のリクエストとテンプレートの読み取り

署名リクエストやテンプレートを取得したり、これらのリストを取得したりすると、レスポンスには、21 CFR Part 11のフローと署名の詳細を説明するフィールドが含まれます。

| フィールド                             | 型           | 説明                                                                                                                 |
| --------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------ |
| `request_flow`                    | String      | リクエストまたはテンプレートで使用されているフロー (`cfr11`または`standard`)。                                                                  |
| `signers[].login_required`        | Boolean     | `request_flow`が`cfr11`の場合は常に`true`。                                                                                |
| `signers[].inputs[].reason`       | 文字列、null許容  | 入力のために取得された署名の理由。`cfr11`リクエストの署名フィールドやイニシャルフィールドなど、該当する入力にのみ設定されます。それ以外の入力には`null`が設定されます。                         |
| `signers[].inputs[].is_validated` | ブール値、null許容 | 署名者が入力について再認証を行ったかどうか。再認証が成功した後は`true`、署名者がフィールドに入力したものの、まだ再認証を行っていない場合は`false`、標準リクエストまたは適用対象外の入力の場合は`null`になります。 |

次の例は、取得された21 CFR Part 11リクエストを示しています。

```json theme={null}
{
  "request_flow": "cfr11",
  "signers": [
    {
      "login_required": true,
      "inputs": [
        {
          "text_value": "John Doe",
          "type": "signature",
          "content_type": "signature",
          "page_index": 0,
          "read_only": false,
          "reason": "I read and approve this document",
          "is_validated": true
        }
      ]
    }
  ]
}
```

<Info>
  アカウントに対して21 CFR Part 11が有効になっていない場合でも、21 CFR Part 11リクエストまたはテンプレートへのアクセス権限があれば、そのリクエストまたはテンプレートの取得、リスト取得、キャンセル、再送信を行うことができます。Boxでテンプレートの使用権限が検証されるのは、テンプレートからリクエストを作成したときであり、テンプレートを取得したときではありません。
</Info>

## エラーレスポンス

21 CFR Part 11リクエストは、リクエスト時の検証が失敗した場合に、以下のエラーを同期的に返します。

| シナリオ                                           | ステータス | 理由                    |
| ---------------------------------------------- | ----- | --------------------- |
| `cfr11`リクエストの`login_required`が`false`に設定されている。 | `400` | `invalid_parameter`   |
| `cfr11`リクエストの`signature_color`が`red`に設定されている。  | `400` | `invalid_parameter`   |
| `cfr11`リクエストに、署名以外のフィールドのみが含まれている。             | `400` | `invalid_template`    |
| 指定された`template_id`が存在しない。                      | `404` | `not_found`           |
| 指定された`template_id`を使用する権限がない。                  | `404` | `not_found`           |
| 指定された`request_flow`へのアクセス権限がない。                | `403` | `forbidden_by_policy` |

たとえば、`login_required`を`false`に設定すると、以下が返されます。

```json theme={null}
{
  "type": "error",
  "code": "bad_request",
  "status": 400,
  "message": "Bad request",
  "request_id": "122afdc1863c8713a175148aa614578ff",
  "context_info": {
    "errors": [
      {
        "name": "login_required",
        "message": "The 'login_required' field cannot be set to false when the request flow is 'cfr11'. Please ensure that 'login_required' is true for 'cfr11' requests.",
        "reason": "invalid_parameter"
      }
    ]
  }
}
```

<Note>
  Boxはドキュメントの変換中にプレースホルダを非同期的に抽出するため、[テンプレートタグ][tags]を使用してソースファイルから作成されたリクエストについて、プレースホルダエラーがリクエスト時に返されることはありません。この検証に失敗すると、リクエストは`error`状態になり、`error_code`フィールドが`cfr11_validation_failed`に設定されます。詳細については、[変換中に検証](#validate-during-conversion)を参照してください。
</Note>

## 後方互換性

21 CFR Part 11のサポートがAPIに追加される前に作成された既存のリクエストとテンプレートは、自動的に分類されます。これらの項目については、Boxがユーザーの権限に基づいて`request_flow`の値を決定するため、古いリクエストとテンプレートは、取得時に有効な`request_flow`を返します。

[cfr]: https://docs.box.com/ja/box-sign/sending-a-document-for-signature/21-cfr-part-11-compliance-support

[tags]: https://docs.box.com/ja/box-sign/templates/creating-templates-using-tags

<RelatedLinks
  title="関連するAPI"
  items={[
{ label: translate("Create Box Sign request"), href: "/reference/post-sign-requests", badge: "POST" },
{ label: translate("Get Box Sign request by ID"), href: "/reference/get-sign-requests-id", badge: "GET" },
{ label: translate("List Box Sign requests"), href: "/reference/get-sign-requests", badge: "GET" }
]}
/>

<RelatedLinks
  title="関連するガイド"
  items={[
{ label: translate("Create Box Sign Request"), href: "/guides/box-sign/create-sign-request", badge: "GUIDE" },
{ label: translate("Create Sign Request with Sign Template"), href: "/guides/box-sign/sign-templates", badge: "GUIDE" },
{ label: translate("Extra security (2FA)"), href: "/sign/request-options/extra-security", badge: "GUIDE" }
]}
/>
