[WIP] Implement growth assessment using WHO indicators #80

Draft
joao.dubas wants to merge 76 commits from jpd-feat-add-bmi-module-with-live-view into main

76 Commits

Author SHA1 Message Date
0bf11bb809
feat(deps): upgrade transitive dependencies
All checks were successful
continuous-integration/drone/pr Build is passing
* `earmark_parser` from 1.4.43 to 1.4.44
* `makeup` from 1.1.2 to 1.2.1
* `makeup_elixir` from 0.16.2 to 1.0.1
* `makeup_erlang` from 1.0.1 to 1.0.2
* `plug` from 1.16.1 to 1.17.0
* `saxy` from 1.5.0 to 1.6.0
2025-03-14 17:47:57 +00:00
706f065dc8
feat(deps): upgrade dependencies
* `ex_doc` from 0.36.1 to 0.37.3
* `xlsx_reader` from 0.8.7 to 0.8.8
2025-03-14 17:45:52 +00:00
8d07a04b95
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
Conflicts:
    mix.lock
2025-03-14 17:38:28 +00:00
81ea8bc06b
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
2025-02-14 22:07:52 +00:00
18759bf234
feat(deps): upgrade dependencies
All checks were successful
continuous-integration/drone/pr Build is passing
* `decimal`: from 2.1.1 to 2.3.0
* `earmark_parser`: from 1.4.41 to 1.4.43
* `ex_doc`: from 0.34.2 to 0.36.1
* `req`: from 0.5.7 to 0.5.8

https://diff.hex.pm/diffs?diffs[]=decimal:2.1.1:2.3.0&diffs[]=earmark_parser:1.4.41:1.4.43&diffs[]=ex_doc:0.34.2:0.36.1&diffs[]=req:0.5.7:0.5.8&
2025-01-26 15:10:24 +00:00
d385451a5e
merge: updates from upstream
Conflicts:
    mix.exs
    mix.lock
2025-01-26 15:07:39 +00:00
97b1ef9a6b
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
2024-12-07 15:50:18 +00:00
4b643202c3
feat: update deps
All checks were successful
continuous-integration/drone/pr Build is passing
* `req` from 0.5.6 to 0.5.7
2024-11-02 14:24:09 +00:00
adfb85533b
merge: updates from upstream
Conflicts:
    mix.lock
2024-11-02 14:22:34 +00:00
f5d001d419
merge: updates from upstream 2024-11-02 13:30:15 +00:00
aef062dcf5
fix(growth): remove unused match
All checks were successful
continuous-integration/drone/pr Build is passing
2024-11-02 12:56:38 +00:00
02540e1046
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
Conflicts:
  mix.exs
  mix.lock
2024-10-30 19:56:46 +00:00
69cd36d7e1
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
2024-10-21 02:16:01 +00:00
f6cfff14e7
merge: update from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
2024-10-21 02:14:48 +00:00
ffa2a68b7a
fix(growth): use Application.app_dir to write/read priv dir
All checks were successful
continuous-integration/drone/pr Build is passing
2024-10-21 01:53:14 +00:00
fb38910137
test(growth): add test for happy download paths
All checks were successful
continuous-integration/drone/pr Build is passing
2024-10-07 19:27:27 +00:00
6ba171343d
test(growth): add dep to write in-memory excel data
This will be used to mock data from WHO site.
2024-10-07 19:23:26 +00:00
0fc8c56c41
chore(growth): add separated method to merge genders data
This makes easier to test aggregation logic for multiple gender
configuration.
2024-10-07 19:22:14 +00:00
c77d4eb97d
chore(growth): allow one to customize Req options
With this change it's possible to change the way the application make
requests to WHO website.
2024-10-07 19:21:27 +00:00
df16f2ce1c
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
2024-10-07 12:17:42 +00:00
25cb7508bb
test(growth): add main module tests
All checks were successful
continuous-integration/drone/pr Build is passing
2024-10-05 15:11:33 +00:00
84cf6758bb
fix(growth): results is now a keyword list 2024-10-05 15:10:40 +00:00
7e041ae6c9
chore(growth): adjust indicator lookup to use atoms for unit 2024-10-05 15:09:44 +00:00
82d7009b34
chore(growth): adjust key in ets tables to contain atoms
The `ets` tables containing growth indicator has a key in the form of
`{gender :: atom(), unit :: atom(), value :: number()}`.
2024-10-05 15:07:10 +00:00
fa65a36852
test(growth): fix doctest for centile and percentile
All checks were successful
continuous-integration/drone/pr Build is passing
2024-10-05 12:58:36 +00:00
1e36c29180
test(growth): add percentile test 2024-10-05 12:58:04 +00:00
8c89b55487
test(growth): add centile compute test 2024-10-05 12:57:20 +00:00
a427e11958
test(growth): add zscore compute test 2024-10-05 12:56:28 +00:00
c9e3bf68ae
test(growth): add bmi test 2024-10-05 12:55:44 +00:00
7670dce630
test(growth): add sample data to be used in tests 2024-10-05 12:53:56 +00:00
f3846cad24
chore(growth): update doc to reflect percentile values
All checks were successful
continuous-integration/drone/pr Build is passing
This fixes an issue were the returned value represented the measurment
at a given z-score (the centile value).
2024-10-03 22:16:15 +00:00
27a7a05584
fix(growth): improve doc for centile calculation
This module converts a given z-score and Box-Cox values into the related
measurement.
2024-10-03 22:14:56 +00:00
fc0d9db7a5
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
Conflicts:
  mix.exs
  mix.lock
2024-10-02 12:31:04 +00:00
d9dcfa3846
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
2024-10-02 10:40:04 +00:00
3a69b8d4ff
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
2024-10-01 14:29:26 +00:00
7c15e1fae6
chore: execute dialyzer with short format
All checks were successful
continuous-integration/drone/pr Build is passing
2024-09-26 00:32:44 +00:00
8328bbe9fb
merge: updates from tracking
All checks were successful
continuous-integration/drone/pr Build is passing
2024-09-25 23:48:32 +00:00
90613635fb
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
Conflicts:
    .gitignore
    lib/wabanex/application.ex
    mix.lock
2024-09-22 19:06:02 +00:00
dc6e00d54b
chore: ignore elixir tools folder
All checks were successful
continuous-integration/drone/pr Build is passing
2024-09-18 11:49:23 +00:00
5c044e69d9
fix(growth): use centile and percentile correctly
1. The calculation made in `Grownth.Calc.Centile.compute/4` converts a
   given z-score into the expected measurement value.
   This can be used to get specific values for key z-scores, such as,
   -3, -2, 2 and 3.
2. To calculate the percentile of a given z-score the system uses the
   cumulative distribution function.
2024-08-28 13:03:45 +00:00
824a70452f
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
2024-08-13 14:17:32 +00:00
b696cc129d
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
Conflicts:
    mix.exs
    mix.lock
2024-08-12 20:19:36 +00:00
c923b2efb7
test(growth): work on age calculation
All checks were successful
continuous-integration/drone/pr Build is passing
2024-07-12 11:18:40 +00:00
8e9907a3e8
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
2024-07-12 11:15:30 +00:00
3914bd5240
merge: updates from upstream
All checks were successful
continuous-integration/drone/pr Build is passing
2024-07-08 21:55:02 +00:00
8dffb86d01
chore(deps): update deps of deps
All checks were successful
continuous-integration/drone/pr Build is passing
2024-07-08 21:36:37 +00:00
866730238e
feat(deps): upgrade req from 0.5.0 to 0.5.2 2024-07-08 21:28:35 +00:00
eeb6964348
merge: updates from upstream
Conflicts:
    mix.lock
2024-07-08 21:25:21 +00:00
0d7a4cc9c3
chore(growth): move nil logic to scorer behaviour
All checks were successful
continuous-integration/drone/pr Build is passing
Handle `nil` measurement in `Growth.Score.Scorer`.
2024-06-11 14:53:19 +00:00
7fab746ea8
feat: add ex_doc to generate documentation
All checks were successful
continuous-integration/drone/pr Build is passing
2024-06-11 12:18:18 +00:00
c81e4fda67
chore(growth): add log in loader
All checks were successful
continuous-integration/drone/pr Build is passing
2024-06-11 12:02:14 +00:00
bc9c2124f1
chore(growth): add example for Growth.new/4 2024-06-11 12:01:50 +00:00
c14a26a184
fix(growth): measure for subscapular skinfold 2024-06-11 12:01:25 +00:00
79aec9f7e5
feat(growth): calculate z-score/centile for all indicators
All checks were successful
continuous-integration/drone/pr Build is passing
2024-06-11 11:42:57 +00:00
2545a796c3
chore(growth): return nil when measure isn't set 2024-06-11 11:42:17 +00:00
88b8e811a8
chore(growth): apply scorer behaviour in indicators 2024-06-11 11:41:31 +00:00
fa022b9592
feat(growth): calculate z-score/centile for all indicators
The `Growth.Score.Scorer` behaviour implements the methods needed to
calculate z-score and centile for any indicator.
2024-06-11 11:38:18 +00:00
0ac434c61d
fix(growth): ignore enum result explicitly
All checks were successful
continuous-integration/drone/pr Build is passing
2024-06-10 19:24:41 +00:00
06b35cbceb
wip(growth): implement results for bmi
Some checks failed
continuous-integration/drone/pr Build is failing
This implementation should be made generic for all other scores.
2024-06-10 19:09:35 +00:00
28f0546bcb
chore(growth): add default value for results 2024-06-10 18:35:12 +00:00
c175c3edfd
fix(growth): typespec and doc for centile calc 2024-06-10 18:34:24 +00:00
4234b2e917
chore(growth): load is independent from task
Some checks failed
continuous-integration/drone/pr Build is failing
Ensure that `Growth.Indicators.Load.all/0` can be run independently from
the task.

So, the `ets` table is create based on the filename processed.
2024-06-10 13:01:44 +00:00
04fff60541
wip(growth): add score module
Some checks failed
continuous-integration/drone/pr Build is failing
This module is responsible for calculate the z score/centile for each
measurement.
2024-06-10 12:15:16 +00:00
b415b38184
feat(growth): load data on application start
To make this possible, the following changes were made:

* Use `Task` to start the load process
* Create `ets` table before start the async task
  * This is needed to keep the tables alive after the task process exits
* Adjust the application to start the `Growth.Indicators.Load` task
2024-06-10 12:11:18 +00:00
412250d7ef
feat(growth): add struct to represent measurement
All checks were successful
continuous-integration/drone/pr Build is passing
2024-06-09 20:00:49 +00:00
d3c1aa9b6b
chore(growth): improve age documentation and typing 2024-06-09 19:59:33 +00:00
025ab1537d
chore(growth): name ets tables with score modules 2024-06-09 19:58:34 +00:00
52c1d0c028
feat(growth): load csv indicators into ets tables
All checks were successful
continuous-integration/drone/pr Build is passing
2024-06-07 13:28:13 +00:00
902a22c947
chore(growth): fetch extended data for indicators
All checks were successful
continuous-integration/drone/pr Build is passing
Also, improve module doc.
2024-06-06 22:49:52 +00:00
a8466f0c1d
chore(growth): add documentation and examples
All checks were successful
continuous-integration/drone/pr Build is passing
2024-06-06 20:39:10 +00:00
Joao P Dubas
bb79aa2f3a fix(growth): alias z-score and use if
Some checks failed
continuous-integration/drone/pr Build is failing
2024-06-06 11:34:02 +00:00
500d0e89bb
wip(growth): calculate key metrics for growth
Some checks failed
continuous-integration/drone/pr Build is failing
1. calculate age in days, weeks, and months
2. calculate body mass index for metric and english unities
3. calculate z-score for a given measurement and box-cox parameters (l,
   m, s)
4. calculate centile score for a given measurement and box-cox
   parameters
2024-06-06 01:36:11 +00:00
8be9fa38bb
wip(growth): add fix note on convert/3 method
All checks were successful
continuous-integration/drone/pr Build is passing
2024-06-04 23:56:27 +00:00
9c8e1d20ee
wip(growth): improve data parsing
1. Fetch common data for all indicators
2. Remove headers during merge

Also, re-generate files.
2024-06-04 23:55:03 +00:00
2fedb4ecf0
wip(growth): change from with to case
All checks were successful
continuous-integration/drone/pr Build is passing
2024-06-04 14:36:20 +00:00
58f14c0346
wip(growth): fetch|extract|save indicators from WHO
Initial implementation to fetch growth indicators from WHO.

For now, the system merges the measurements for each gender and age
group in a single `csv` file.

The final solution should do this, saving a `dets` file.
2024-06-04 13:57:32 +00:00