Только что разбирали с программистами задачу.
Выполняется операция оплаты по чиповой карте. В проведении транзакции участвуют два человека: владелец карты и кассир. При этом кассир сидит за стеклом перед экраном кассового терминала. К терминалу подключен ПИН пад, в который вставляется карта и на котором при необходимости должен вводиться ПИН клиента.
Последовательность выполнения такая (пока грубо, это не usecase).
- клиент передаёт свою карту кассиру
- кассир проверяет карту по определённой процедуре (сверяет с паспортом, удостоверением или смотрит фотографию на карте)
- кассир начинает операцию оплаты на кассовом терминале, вводит сумму
- кассир вставляет карту в ПИН пад
...
дальше начинается самое интересное. При выполнении EMV операции карта может потребовать взаимодействия с её владельцем, при этом кассир должен отдать ПИН пад клиенту
...
- клиент выбирает приложение на карте или подтверждает выбор единственного приложения (в зависимости от карты, этот шаг может и не выполняться)
- клиент вводит ПИН, возможно, делая при этом несколько попыток
...
на этом взаимодействие клиента с картой заканчивается, и клиент должен вернуть ПИН пад со вставленной картой кассиру
...
- кассовый терминал связывается с хостом для получения авторизации
- ... и так далее, до завершения операции.
Особенность операции в том, что на определённом этапе ход выполнения транзакции распараллеливается, и в ней участвуют два человека, каждый со своим экраном (экран кассового терминала и экран ПИН пада) и устройством ввода (кассир должен видеть, что происходит с ПИН падом, и может прервать операцию в любой момент со своего терминала). При этом ПИН пад выполняет мастер-приложение, управляющее и экраном ПИН пада, и экраном кассы, но не имеющее доступа к клавиатуре терминала.
Собственно вопрос в том, описываются ли такие ситуации с помощью usecase и если да, то каким образом?
То есть я могу себе представить разбиение на более мелкие варианты, например, выделение ПИН пада и терминала в виде отдельных акторов и описывать взаимодействие всех четырёх участников (на самом деле, тут есть ещё и хост) независимо, но при этом теряется целостность восприятия всей транзакции. Кроме того, получается, что два или больше варианта использования протекают параллельно и зависят друг от друга.
Простой, вроде бы, пример, но при попытке представить его в виде usecase транзакция разваливается на части, которые потом будет трудно интегрировать.