Базовий шар IA

User flows

П'ять шляхів, якими людина проходить свою роботу: не лише щасливий сценарій, а рішення, стани і свідомі тупики. Кожен вузол зареєстрований у карті сайту, кожен колір означає результат: зелений - успіх, червоний - тупик, сірий - нейтральний крок. Звідси кроки шляху беруть детальна IA і вайрфрейми.

Джерело ia/docs/flows.md v0.4
Flows 5
Первинна персона Олена, тренерка
02

User flows

П'ять flows, відрендерених як живі діаграми. Кожна показує не лише happy path, а й рішення, стани і свідомі тупики. Під кожною - словесний список.

екран рішення стан / старт / успіх / тупик
Main job - коуч збирає мультиклієнтське замовлення Олена, первинна - Main JTBD, Рішення 1
flowchart TD s0(["Тренер відкриває Stack"]) q1{"Залогінений як верифікований тренер?"} qacct{"Є акаунт?"} e1["Вхід / реєстрація"] slog(["Завантаження - вхід"]) qauth{"Вхід успішний?"} serr(["Помилка - вхід не вдався"]) qretrylogin{"Повторити вхід?"} c1["«Для тренерів» + опубліковані ціни"] c2["Реєстрація тренера + верифікація соц-лінку"] svrf(["Завантаження - перевірка соц-лінку"]) q2{"Верифікацію пройдено?"} evf(["Помилка - верифікація не вдалася, надішліть лінк ще раз"]) qresub{"Надіслати лінк ще раз?"} de1(["Тупик - верифікацію не пройдено, без доступу тренера"]) c3["Кабінет тренера"] c5p["Профіль клієнта"] cpl(["Завантаження - історія замовлень клієнта"]) qcp{"Історію клієнта завантажено?"} cperr(["Помилка - історія клієнта не завантажилась"]) qcphas{"Є замовлення для цього клієнта?"} cpempty(["Порожньо - для цього клієнта ще нічого не замовляли"]) c4["Мультиклієнтська сесія замовлення"] q3{"Клієнт уже у списку?"} c5["Список клієнтів"] addc(["Додавання клієнта - ім'я і ціль"]) slqa(["Завантаження - швидке додавання й тренерська ціна"]) q4{"Товар у наявності?"} so1(["Немає в наявності"]) q5{"Є заміна?"} csub(["Обрати заміну"]) q7{"Тренерську ціну застосовано?"} ee1(["Помилка - тренерську ціну не застосовано"]) qprice{"Повторити чи зупинити?"} blockc(["Тренерська ціна не вирішена - сесію збережено, оформлення заблоковано"]) q8{"Ще є клієнти для замовлення?"} c6["Кошик"] qce{"Кошик порожній?"} ec(["Порожньо - кошик порожній"]) c7["Оформлення"] addr(["Вибір адреси - читання збережених, ввід якщо немає"]) sl1(["Завантаження - обробка платежу"]) q9{"Платіж успішний?"} ep1(["Помилка - платіж відхилено"]) q10{"Повторити платіж?"} qaband{"Назад у кошик чи покинути?"} de3(["Тупик - платіж покинуто, кошик збережено"]) c8["Замовлення оформлено"] ok1(["Успіх - мультиклієнтське замовлення оформлено й підтверджено"]) s0 --> q1 q1 -->|так| c3 q1 -->|ні| qacct qacct -->|так| e1 e1 --> slog slog --> qauth qauth -->|так| c3 qauth -->|ні| serr serr --> qretrylogin qretrylogin -->|так| e1 qretrylogin -->|ні| qacct qacct -->|ні| c1 c1 --> c2 c2 --> svrf svrf --> q2 q2 -->|так| c3 q2 -->|ні| evf evf --> qresub qresub -->|так| c2 qresub -->|ні| de1 c3 -->|перегляд історії клієнта| c5p c5p --> cpl cpl --> qcp qcp -->|ні| cperr cperr -->|повтор| cpl qcp -->|так| qcphas qcphas -->|є замовлення| c4 qcphas -->|поки немає| cpempty cpempty --> c4 c3 -->|нове замовлення| c4 c4 --> q3 q3 -->|так| slqa q3 -->|ні| c5 c5 --> addc addc -->|клієнта додано й обрано| slqa slqa --> q4 q4 -->|ні| so1 so1 --> q5 q5 -->|ні, пропустити позицію| q8 q5 -->|так| csub csub --> q4 q4 -->|так| q7 q7 -->|ні| ee1 ee1 --> qprice qprice -->|повтор| q7 qprice -->|зупинити| blockc blockc --> c3 q7 -->|так, автоприв'язка до активного клієнта| q8 q8 -->|так| q3 q8 -->|ні| c6 c6 --> qce qce -->|так| ec ec --> c4 qce -->|ні| c7 c7 --> addr addr --> sl1 sl1 --> q9 q9 -->|так| c8 q9 -->|ні| ep1 ep1 --> q10 q10 -->|так| c7 q10 -->|ні| qaband qaband -->|назад у кошик| c6 qaband -->|покинути| de3 c8 --> ok1
Рішеннязалогінений як верифікований тренер; є акаунт; вхід успішний; повторити вхід; верифікацію пройдено; надіслати лінк ще раз; історію клієнта завантажено; є замовлення для цього клієнта; клієнт уже у списку; товар у наявності; є заміна; тренерську ціну застосовано; повторити чи зупинити тренерську ціну; ще є клієнти для замовлення; кошик порожній; платіж успішний; повторити платіж; назад у кошик чи покинути.
Станизавантаження (вхід); помилка (вхід не вдався); завантаження (перевірка соц-лінку); помилка (верифікація не вдалася, надіслати лінк ще раз); завантаження (історія замовлень клієнта); помилка (історія клієнта не завантажилась); порожньо (для цього клієнта ще нічого не замовляли); додавання клієнта (ім'я і ціль); завантаження (швидке додавання); немає в наявності; обрати заміну; помилка (тренерську ціну не застосовано); тренерська ціна не вирішена (сесію збережено, оформлення заблоковано); позиція без тегу; порожньо (кошик порожній); вибір адреси; завантаження (обробка платежу); помилка (платіж відхилено).
Тупикиверифікацію не пройдено і повторне надсилання відхилено (тільки невиправний випадок); платіж покинуто (кошик збережено). Решта проблем мають шлях назад: пропустити позицію, повторити-чи-зупинити, відкинути позицію, назад у кошик, надіслати лінк ще раз.
Job 2 - початківець: ціль до першої покупки Вікторія, вторинна - гостьове оформлення, потім гість до акаунта
flowchart TD b1["Головна / вибір цілі"] b2["Колекція за ціллю"] gcl(["Завантаження - колекція за ціллю"]) qgcl{"Колекцію завантажено?"} gcerr(["Помилка - колекція не завантажилась"]) qgc{"Є товари в наявності?"} gce(["Порожньо - немає товарів у наявності"]) b3["Деталі товару"] qa{"Товар у наявності?"} so(["Немає в наявності"]) b4["Кошик"] qce2{"Кошик порожній?"} ec2(["Порожньо - кошик порожній"]) b5["Оформлення"] qg{"Оформити як гість чи зареєструватися?"} b6["Вхід / реєстрація"] slog2(["Завантаження - вхід"]) qauth2{"Вхід успішний?"} serr2(["Помилка - вхід не вдався"]) qrl2{"Повторити вхід чи продовжити як гість?"} addr2(["Вибір адреси - читання збережених, ввід якщо немає"]) sl(["Завантаження - обробка платежу"]) qp{"Платіж успішний?"} ep(["Помилка - платіж відхилено"]) qr{"Повторити платіж?"} qaband2{"Назад у кошик чи покинути?"} de1b(["Тупик - платіж покинуто, кошик збережено"]) b7["Замовлення оформлено"] qac{"Створити акаунт зараз?"} b6b["Вхід / реєстрація"] b8["Кабінет покупця"] okg(["Успіх - перша покупка завершена як гість"]) oka(["Успіх - покупка завершена, акаунт зберігає історію й лояльність"]) b1 -->|тайл цілі| b2 b2 --> gcl gcl --> qgcl qgcl -->|ні| gcerr gcerr -->|повтор| gcl qgcl -->|так| qgc qgc -->|ні| gce gce -->|інша ціль| b1 qgc -->|так, відкрити товар| b3 b3 --> qa qa -->|ні| so so -->|назад до колекції| b2 qa -->|так, у кошик| b4 b4 --> qce2 qce2 -->|так| ec2 ec2 -->|назад до пошуку товару| b1 qce2 -->|ні| b5 b5 --> qg qg -->|реєстрація| b6 b6 --> slog2 slog2 --> qauth2 qauth2 -->|так| addr2 qauth2 -->|ні| serr2 serr2 --> qrl2 qrl2 -->|повтор| b6 qrl2 -->|гість| addr2 qg -->|гість| addr2 addr2 --> sl sl --> qp qp -->|так| b7 qp -->|ні| ep ep --> qr qr -->|так| b5 qr -->|ні| qaband2 qaband2 -->|назад у кошик| b4 qaband2 -->|покинути| de1b b7 --> qac qac -->|так| b6b b6b --> b8 b8 --> oka qac -->|ні| okg
Рішенняколекцію завантажено; є товари в наявності; товар у наявності; кошик порожній; оформити як гість чи зареєструватися; вхід успішний; повторити вхід чи продовжити як гість; платіж успішний; повторити платіж; назад у кошик чи покинути; створити акаунт зараз.
Станизавантаження (колекція за ціллю); помилка (колекція не завантажилась); порожньо (немає товарів у наявності); немає в наявності; порожньо (кошик порожній); завантаження (вхід); помилка (вхід не вдався); вибір адреси; завантаження (обробка платежу); помилка (платіж відхилено).
Тупикиплатіж покинуто (кошик збережено). Два валідні фінали: гостьовий і з акаунтом.
Job 3 - перевірка безпеки перед покупкою склад, дозування, походження, сертифікати на Деталях товару
flowchart TD j1["Колекція за ціллю"] j2["Каталог і пошук"] csl(["Завантаження - результати пошуку"]) qcsl{"Результати завантажено?"} cserr(["Помилка - пошук не вдався"]) qcs{"Є результати?"} cse(["Порожньо - немає результатів, дивіться поради"]) j3["Деталі товару"] slt(["Завантаження - деталі довіри"]) qd{"Деталі довіри завантажено?"} se(["Помилка - деталі не завантажились"]) qr3{"Повторити?"} q1c{"Склад, дозування, походження, сертифікація - все зрозуміло?"} rev(["Відгуки й вміст сертифіката на Деталях товару"]) qrev{"Переконано після відгуків і сертифіката?"} leave(["Тупик - покупець іде, сумнів у безпеці не знято"]) q2c{"Товар у наявності?"} so3(["Немає в наявності"]) qsub{"Назад до колекції по альтернативу?"} leave2(["Тупик - немає варіанта в наявності, покупець іде"]) j4["Кошик"] ok3(["Успіх - товару довіряють, додано в кошик"]) j1 -->|товар| j3 j2 --> csl csl --> qcsl qcsl -->|ні| cserr cserr -->|повтор| csl qcsl -->|так| qcs qcs -->|ні| cse cse -->|уточнити пошук| j2 qcs -->|так, відкрити товар| j3 j3 --> slt slt --> qd qd -->|ні| se se --> qr3 qr3 -->|так| slt qr3 -->|ні| leave qd -->|так| q1c q1c -->|так| q2c q1c -->|ні| rev rev --> qrev qrev -->|так| q2c qrev -->|ні| leave q2c -->|ні| so3 so3 --> qsub qsub -->|так| j1 qsub -->|ні| leave2 q2c -->|так| j4 j4 --> ok3
Рішеннярезультати завантажено; є результати; деталі довіри завантажено; повторити; склад/дозування/походження/сертифікація все зрозуміло; переконано після відгуків і сертифіката; товар у наявності; назад до колекції по альтернативу.
Станизавантаження (результати пошуку); помилка (пошук не вдався); порожньо (немає результатів, поради); завантаження (деталі довіри); помилка (деталі не завантажились); відгуки й вміст сертифіката; немає в наявності.
Тупикипокупець іде після відгуків і сертифіката (прийнята втрачена покупка); немає варіанта в наявності і покупець іде. Сповіщення «знову в наявності» - у backlog (post-launch).
Job 4 - повторне замовлення в один тап Андрій, підтримувальна персона - повтор в один тап із рядка Історії замовлень
flowchart TD r0(["Андрій хоче поповнити запас"]) rq1{"Залогінений?"} r2["Вхід / реєстрація"] slog3(["Завантаження - вхід"]) qauth3{"Вхід успішний?"} serr3(["Помилка - вхід не вдався"]) qrl3{"Повторити вхід?"} r1["Кабінет покупця"] r3["Історія замовлень"] qe{"Є минулі замовлення?"} se4(["Порожньо - немає минулих замовлень для повтору"]) rexit(["Вихід - за покупками через Головну / вибір цілі"]) qrepeat{"Повтор із рядка історії чи відкрити деталі замовлення?"} r4["Деталі замовлення + повтор"] rq2{"Усі попередні позиції в наявності?"} so4(["Немає в наявності - одна чи більше позицій"]) rq3{"Прибрати недоступне і продовжити?"} qfind{"Назад до історії чи шукати товар?"} csf["Каталог і пошук"] r5["Кошик"] qce4{"Кошик порожній?"} ec4(["Порожньо - кошик порожній"]) r6["Оформлення"] addr4(["Вибір адреси - читання збережених, ввід якщо немає"]) sl4(["Завантаження - обробка платежу"]) rq4{"Платіж успішний?"} ep4(["Помилка - платіж відхилено"]) rq5{"Повторити платіж?"} qaband4{"Назад у кошик чи покинути?"} dep(["Тупик - платіж покинуто, кошик збережено"]) r7["Замовлення оформлено"] ok4(["Успіх - staples повторно замовлено в один тап"]) r0 --> rq1 rq1 -->|ні| r2 r2 --> slog3 slog3 --> qauth3 qauth3 -->|так| r1 qauth3 -->|ні| serr3 serr3 --> qrl3 qrl3 -->|так| r2 qrl3 -->|ні| rexit rq1 -->|так| r1 r1 -->|історія замовлень| r3 r3 --> qe qe -->|ні| se4 se4 --> rexit qe -->|так| qrepeat qrepeat -->|повтор із рядка в один тап| rq2 qrepeat -->|відкрити деталі замовлення| r4 r4 -->|повторити замовлення| rq2 rq2 -->|ні| so4 so4 --> rq3 rq3 -->|так| r5 rq3 -->|ні| qfind qfind -->|історія замовлень| r3 qfind -->|шукати товар| csf csf -->|знайдено, у кошик| r5 rq2 -->|так| r5 r5 --> qce4 qce4 -->|так| ec4 ec4 -->|назад до пошуку товару| r3 qce4 -->|ні| r6 r6 --> addr4 addr4 --> sl4 sl4 --> rq4 rq4 -->|так| r7 rq4 -->|ні| ep4 ep4 --> rq5 rq5 -->|так| r6 rq5 -->|ні| qaband4 qaband4 -->|назад у кошик| r5 qaband4 -->|покинути| dep r7 --> ok4
Рішеннязалогінений; вхід успішний; повторити вхід; є минулі замовлення; повтор із рядка історії чи відкрити деталі замовлення; усі попередні позиції в наявності; прибрати недоступне і продовжити; назад до історії чи шукати товар; кошик порожній; платіж успішний; повторити платіж; назад у кошик чи покинути.
Станизавантаження (вхід); помилка (вхід не вдався); порожньо (немає минулих замовлень для повтору); немає в наявності (одна чи більше позицій); порожньо (кошик порожній); вибір адреси; завантаження (обробка платежу); помилка (платіж відхилено).
Тупикиплатіж покинуто (кошик збережено). Порожня історія замовлень - м'який вихід до Головної / вибору цілі, не жорсткий тупик.
Job 6 - перегляд лояльності Олена первинна, Андрій вторинна - Статус лояльності, тільки перегляд
flowchart TD ch["Кабінет тренера"] bh["Кабінет покупця"] ls["Статус лояльності"] lsl(["Завантаження - статус лояльності"]) qll{"Лояльність завантажено?"} lserr(["Помилка - лояльність не завантажилась"]) qlhas{"Є вже накопичена вигода?"} lsempty(["Порожньо - поки нічого не накопичено"]) lback(["Повернення до кабінету"]) ch -->|перегляд лояльності| ls bh -->|перегляд лояльності| ls ls --> lsl lsl --> qll qll -->|ні| lserr lserr -->|повтор| lsl qll -->|так| qlhas qlhas -->|поки немає| lsempty qlhas -->|вигоду показано| lback lsempty --> lback
Рішенняloyalty loaded; any accumulated benefit yet.
Станиloading (loyalty status); error (loyalty failed to load); empty (nothing accumulated yet).
Тупикинемає. Перегляд тільки для читання, кожен шлях повертає на account home. Цифри лояльності - [?], пороги не малюються.