---
# System prepended metadata

title: SDD

---

# SDD
## Class/Object Diagram
```graphviz
digraph obj
{
    bgcolor="transparent"

    node[
    shape=Mrecord 
    style=filled 
    color="#bda9ea" 
    fillcolor="#ececff" 
    fontname=Helvetica 
    fontsize=8 
    fontcolor="#3b0053"];
    
    edge [color=black, penwidth=0.4 arrowsize=0.7]

    
    rankdir="TD";
    
    TermProject [label="{TermProject
    |   
    + current_window: Window
    |
    display_main()
    |
    Initialize the project, \n and create the main window.
    }"];
    
    
    ImportWindow [label = "{ImportWindow
    |
    No attributes
    |
    search_system() \n
    user_button_callback() \n
    lower_time_callback() \n
    upper_time_callback() \n
    display_graphs() \n
    |
    Allow the user to pick the .csv \n 
    from the file system, and specify \n 
    simple filters to the data \n 
    before opening them in the graph view.
    }"];
    
    GraphWindow [label = "{GraphWindow
    |
    No attributes
    |
    reset_view() \n
    aggregate_view() \n
    timezone_toggle() \n
    exec_query() \n
    timebox_display() \n
    |
    Display biometric data in a pleasing\n 
    way, allow the user to further query,\n 
    aggregate, and zoom in on data.
    }"];

    DataHandler [label = "{DataHandler
    |
    + database: sqlite3.Connection \n
    + cursor: sqlite3.Cursor \n
    + csv_path: str \n
    |
    is_valid_csv(file_path) \n
    create_database() \n
    |
    Handle the data, and allow the user to\n 
    query the data in a variety of ways.
    }"];

    TimeBox [label = "{TimeBox
    |
    + lower_bound: datetime \n
    + upper_bound: datetime \n
    |
    No operations
    |
    This class will represent the custom time\n 
    box PyQT6 widget. It will basically act like\n
    a slider with two nobs that collide with\n 
    eachother, where each value is a date time.
    }"];

    TermProject -> GraphWindow
    GraphWindow -> ImportWindow
    TimeBox -> GraphWindow
    DataHandler -> GraphWindow
    GraphWindow -> DataHandler
    ImportWindow -> DataHandler
}
```

## Specific Requirements Analysis

| Requirement                  |  1  |  2  |  3  |  4  |  5  |
|:---------------------------- |:---:|:---:|:---:|:---:|:---:|
| Load User Data               |     |     |     |     |  x  |
| Select Filters               |     |     |     |     |  x  |
| Load Time Zone Info          |     |     |     |     |  x  |
| Switch between UTC and local |     |     |     |  x  |     |
| Sync Time Series             |     |     |     |     |  x  |
| Zoom in on data              |     |     |     |  x  |     |
| Time Box Visual              |     |     |     |  x  |     |
| Aggregate Data               |     |     |     |  x  |     |
| Description of Data          |     |     |  x  |     |     |
| Query Interface              |     |  x  |     |     |     |
| Analyze Data Correlations    |  x  |     |     |     |     |
| Mine Patterns                |  x  |     |     |     |     |

## State Transition Diagram

```mermaid
flowchart LR
    Start --> import{Import?}
    import -- button pressed --> pick([Pick File])
    pick --> valid{Is Valid?}
    valid -- yes --> append([Append Database]) --> import
    
    Start --> hasData{Has Data?}
    hasData -- no --> hasData
    hasData -- yes --> gen([Generate Graphs])
    gen --> settings{UI/Settings Changed?}
    settings -- yes --> gen
    settings -- no --> settings
```