erDiagram conversation_flows { UUID id PK VARCHAR name TEXT description BOOLEAN is_active TIMESTAMP created_at TIMESTAMP updated_at } slot_definitions { UUID id PK UUID flow_id FK VARCHAR slot_name VARCHAR slot_type BOOLEAN is_required INTEGER priority VARCHAR depends_on_slot JSONB dependency_value TIMESTAMP created_at } slot_validations { UUID id PK UUID slot_id FK VARCHAR validation_type JSONB validation_rule TEXT error_message TIMESTAMP created_at } slot_questions { UUID id PK UUID slot_id FK VARCHAR question_type TEXT question_text TEXT follow_up_text BOOLEAN is_default JSONB context_conditions TIMESTAMP created_at } conversation_sessions { UUID id PK VARCHAR user_id UUID flow_id FK VARCHAR session_status VARCHAR current_slot JSONB collected_slots JSONB context_data TIMESTAMP started_at TIMESTAMP completed_at TIMESTAMP last_interaction } slot_collection_attempts { UUID id PK UUID session_id FK VARCHAR slot_name TEXT user_input JSONB extracted_value BOOLEAN is_valid JSONB validation_errors INTEGER attempt_number TIMESTAMP created_at } %% Relationships conversation_flows ||--o{ slot_definitions : "has many" slot_definitions ||--o{ slot_validations : "has many" slot_definitions ||--o{ slot_questions : "has many" conversation_flows ||--o{ conversation_sessions : "has many" conversation_sessions ||--o{ slot_collection_attempts : "has many" %% Additional annotations slot_definitions { string slot_type "text|number|email|phone|date|boolean|choice" string depends_on_slot "Optional reference to another slot" json dependency_value "Required values for dependency" } slot_validations { string validation_type "regex|range|length|choices|custom" json validation_rule "Validation parameters" } slot_questions { string question_type "initial|clarification|validation_error|confirmation" json context_conditions "When to use this question variant" } conversation_sessions { string session_status "active|completed|paused|abandoned" json collected_slots "Key-value pairs of collected data" json context_data "Additional session context" } slot_collection_attempts { json extracted_value "Processed user input" json validation_errors "List of validation failures" }