Developer documentation v1.x

Documentation

WhatsApp Bot - Lab Order Flow

User selects "Order Lab Exam(s)" from the main menu.

Flow Diagram

flowchart TD
    START([User selects 'Order Lab Exam']) --> CHECK_PINNED{Pinned tests available?}
    
    CHECK_PINNED -->|Yes| LAB_OPTIONS[/"Quick tests:
    1. Test A (5000 XAF)
    2. Test B (3000 XAF)
    3. Test C (7500 XAF)
    4. Test D (4000 XAF)
    5. Test E (6000 XAF)
    6. Other test"/]
    
    CHECK_PINNED -->|No| CHOICE_TYPE
    
    LAB_OPTIONS --> USER_INPUT{User Input}
    
    USER_INPUT -->|"1-5"| CREATE_CHECKOUT[Create Checkout Cart]
    USER_INPUT -->|"6 - Other"| CHOICE_TYPE[/"How would you like to order?
    1. Describe test name
    2. Upload prescription"/]
    USER_INPUT -->|"0"| MAIN_MENU[Return to Main Menu]
    USER_INPUT -->|Invalid| LAB_OPTIONS
    
    CREATE_CHECKOUT --> CHECKOUT_LINK[/"✅ Your order is ready!
    🔗 Complete Payment"/]
    CHECKOUT_LINK --> COMPLETED([Conversation Completed])
    
    CHOICE_TYPE --> CHOICE{User Choice}
    
    CHOICE -->|"1 - Describe"| DESCRIBE_FLOW
    CHOICE -->|"2 - Upload"| UPLOAD_FLOW
    
    subgraph DESCRIBE_FLOW[Describe Test Flow]
        direction TB
        DESCRIBE_PROMPT[/"Please describe the test(s):"/]
        DESCRIBE_PROMPT --> TEST_NAME[User enters test name]
        TEST_NAME --> VALIDATE_TEST{Valid input?}
        VALIDATE_TEST -->|No| DESCRIBE_PROMPT
        VALIDATE_TEST -->|Yes| CHECK_USER{User exists?}
        CHECK_USER -->|Yes| CREATE_ORDER_EXISTING[Create order]
        CHECK_USER -->|No| ASK_NAME[/"Please enter your name:"/]
        ASK_NAME --> USER_NAME[User enters name]
        USER_NAME --> VALIDATE_NAME{Valid name?}
        VALIDATE_NAME -->|No| ASK_NAME
        VALIDATE_NAME -->|Yes| CREATE_ORDER_NEW[Create order & user]
    end
    
    CREATE_ORDER_EXISTING --> ORDER_CONFIRM
    CREATE_ORDER_NEW --> ORDER_CONFIRM
    
    ORDER_CONFIRM[/"✅ Order received!
    We'll contact you shortly."/]
    ORDER_CONFIRM --> COMPLETED

Upload Prescription Flow

flowchart TD
    UPLOAD_START([User chose 'Upload']) --> UPLOAD_PROMPT[/"📎 Please upload your
    prescription (image/PDF)"/]
    
    UPLOAD_PROMPT --> FIRST_FILE[User uploads file]
    FIRST_FILE --> VALIDATE_FILE{Valid file type?}
    
    VALIDATE_FILE -->|No| FILE_ERROR[/"❌ Invalid file type.
    Please upload image or PDF"/]
    FILE_ERROR --> UPLOAD_PROMPT
    
    VALIDATE_FILE -->|Yes| ASK_SECOND[/"File received! ✅
    Upload another? (Yes/No)"/]
    
    ASK_SECOND --> SECOND_CHOICE{User Choice}
    
    SECOND_CHOICE -->|"Yes/Oui/1"| SECOND_UPLOAD[/"📎 Upload second file:"/]
    SECOND_CHOICE -->|"No/Non/0"| NOTES_CONFIRM
    SECOND_CHOICE -->|Upload file directly| SECOND_FILE_DIRECT[Process as 2nd file]
    
    SECOND_UPLOAD --> SECOND_FILE[User uploads 2nd file]
    SECOND_FILE --> GRACE_PERIOD[15-20 sec grace period]
    SECOND_FILE_DIRECT --> GRACE_PERIOD
    
    GRACE_PERIOD --> NOTES_CONFIRM[/"Add notes? (Yes/No)"/]
    
    NOTES_CONFIRM --> NOTES_CHOICE{User Choice}
    NOTES_CHOICE -->|"Yes/Oui/1"| ENTER_NOTES[/"Enter your notes:"/]
    NOTES_CHOICE -->|"No/Non/0"| FINAL_CONFIRM
    
    ENTER_NOTES --> NOTES_INPUT[User enters notes]
    NOTES_INPUT --> FINAL_CONFIRM
    
    FINAL_CONFIRM[/"📋 Order Summary:
    🔬 Type: Lab
    📎 Files: 2
    📝 Notes: ...
    
    Confirm? (Yes/No)"/]
    
    FINAL_CONFIRM --> CONFIRM_CHOICE{User Choice}
    
    CONFIRM_CHOICE -->|"Yes/Confirm"| CHECK_USER_UPLOAD{User exists?}
    CONFIRM_CHOICE -->|"No/Cancel"| CANCELLED[/"Order cancelled"/]
    
    CHECK_USER_UPLOAD -->|Yes| CREATE_FILE_ORDER[Create order with files]
    CHECK_USER_UPLOAD -->|No| ASK_NAME_UPLOAD[/"Please enter your name:"/]
    ASK_NAME_UPLOAD --> NAME_INPUT[User enters name]
    NAME_INPUT --> CREATE_FILE_ORDER
    
    CREATE_FILE_ORDER --> ORDER_SUCCESS[/"✅ Order created!
    We'll contact you shortly."/]
    
    ORDER_SUCCESS --> COMPLETED([Conversation Completed])
    CANCELLED --> COMPLETED