2人確認CoSignBeta

2人目の確認者、確認項目、署名済み状態をまとめて扱うダブルチェック用の入力です。

プレビュー

麻薬: モルヒネ 10mg

主担当: 田中(ns-tanaka)

2人確認 要
薬剤名・規格・用量を確認した患者・指示を確認した

ヒント: 確認者IDに ns-tanaka を入れると同一人物ガードが働きます。

状態とバリエーション

未署名

確認項目をすべて選び、主担当者と異なる ID を入力すると署名できます。

麻薬: モルヒネ 10mg

主担当: 田中(ns-tanaka)

2人確認 要
薬剤名・規格・用量を確認した患者・指示を確認した

ヒント: 確認者IDに ns-tanaka を入れると同一人物ガードが働きます。

理由必須

例外対応やリスクの高い操作では、理由入力を署名前に必須にできます。

麻薬: モルヒネ 10mg

主担当: 田中(ns-tanaka)

2人確認 要
薬剤名・規格・用量を確認した患者・指示を確認した

ヒント: 確認者IDに ns-tanaka を入れると同一人物ガードが働きます。

署名済み

value がある場合は、確認者と時刻を持つ読み取り専用状態として表示します。

麻薬: モルヒネ 10mg

主担当: 田中(ns-tanaka)

2人確認 済
2人確認 済確認者: ns-sato

操作のガード

後続の実行ボタンは、2人確認が完了するまで無効化し、理由をツールチップで説明します。

患者・指示を確認した

プロパティ

表は横にスクロールできます
プロパティ初期値説明
primaryIdstring-主担当者の ID です。確認者が同一人物にならないように判定します。
attestationsCoSignAttestation[]-署名前に確認するチェック項目です。すべて選択されるまで署名できません。
valueCoSignValue | undefined-署名済みの値です。値がある場合は読み取り専用の署名済み状態になります。
onSign(value: CoSignValue) => void-2人目が署名した時に呼ばれます。
requireReasonbooleanfalse署名前に理由入力を必須にします。
signerLabel / reasonLabel / samePersonErrorReactNode-確認者 ID、理由、同一人物エラーの文言です。
labels{ sign?, signed?, pending?, signerOf?, signDisabledAttestations?, signDisabledSigner?, signDisabledReason? }-ボタン、署名済み表示、確認者表示、署名ボタンの無効理由を差し替えます。
CoSignBadge{ value?: CoSignValue }-署名済み/未署名を短いバッジとして表示する補助コンポーネントです。

使い方

import * as React from "react";
import { CoSign, CoSignBadge, type CoSignValue } from "@gunjo/ui";

export function MedicationDoubleCheck() {
  const [value, setValue] = React.useState<CoSignValue | undefined>();

  return (
    <div className="flex w-full max-w-md flex-col gap-3 rounded-lg border bg-card p-4">
      <div className="flex items-center justify-between gap-3">
        <div className="text-sm">
          <p className="font-medium text-foreground">麻薬: モルヒネ 10mg</p>
          <p className="text-muted-foreground">主担当: 田中(ns-tanaka)</p>
        </div>
        <CoSignBadge value={value} signedLabel="2人確認 済" pendingLabel="2人確認 要" />
      </div>

      <CoSign
        primaryId="ns-tanaka"
        attestations={[
          { id: "drug", label: "薬剤名・規格・用量を確認した" },
          { id: "patient", label: "患者・指示を確認した" },
        ]}
        value={value}
        onSign={setValue}
      />

      {value ? (
        <button
          type="button"
          className="self-end text-xs text-muted-foreground underline"
          onClick={() => setValue(undefined)}
        >
          リセット
        </button>
      ) : (
        <p className="text-xs text-muted-foreground">
          ヒント: 確認者IDに ns-tanaka を入れると同一人物ガードが働きます。
        </p>
      )}
    </div>
  );
}

使用コンポーネント

設計の判断(UIXHERO)

「いつ・なぜ使うか」の判断は、姉妹サイト UIXHERO の記事で解説しています。