<commit_before># NEMO/ELMO architecture

See also the auto-generated [entity-relationship diagram](erd.pdf) of our database schema.

## Codebase

TODO: Document some of the main files,
per the advice of <https://matklad.github.io//2021/02/06/ARCHITECTURE.md.html>.<commit_msg>Move I/O into architecture.md<commit_after># NEMO/ELMO architecture

See also the auto-generated [entity-relationship diagram](erd.pdf)
of our database schema.

## Codebase

TODO: Document some of the main files,
per the advice of <https://matklad.github.io//2021/02/06/ARCHITECTURE.md.html>.

## Input and output

This summarizes all the ways data can flow in and out of the app.
It's important to consider each of these when considering a core change.

- Form/Question
    - Create/Edit/Delete:
        - Form Builder
        - Replication
    - View:
        - Form Builder
        - SMS Guide
        - Printable Form View
        - ODK XML
        - ODK manifest
- Response/Answer
    - Create:
        - Response Form
        - SMS
        - ODK
    - Edit/Delete:
        - Response Form
    - View:
        - Response View
        - Search
        - Reports
        - Response List Key Questions (also on dashboard)
        - Dashboard Map
        - API (both legacy and OData)
        - CSV
{'fraction_non_alphanumeric': 0.08627450980392157, 'fraction_numerical': 0.012549019607843137, 'mean_word_length': 2.2060301507537687, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7108760', 'n_tokens_mistral': 388, 'n_tokens_neox': 368, 'n_words': 129}