@hedia/recommendation-screen 2.1.14 → 2.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/coverage/clover.xml +588 -590
  2. package/coverage/coverage-final.json +27 -27
  3. package/coverage/lcov-report/index.html +7 -7
  4. package/coverage/lcov-report/src/RecommendationScreen.tsx.html +1039 -70
  5. package/coverage/lcov-report/src/__tests__/index.html +1 -1
  6. package/coverage/lcov-report/src/__tests__/utils.tsx.html +35 -14
  7. package/coverage/lcov-report/src/components/Header.tsx.html +14 -5
  8. package/coverage/lcov-report/src/components/InfoBars.tsx.html +97 -13
  9. package/coverage/lcov-report/src/components/InvisibleNumberInput.tsx.html +206 -14
  10. package/coverage/lcov-report/src/components/LimitationMessage.tsx.html +20 -2
  11. package/coverage/lcov-report/src/components/LineSeparator.tsx.html +13 -4
  12. package/coverage/lcov-report/src/components/RecentInsulin.tsx.html +30 -3
  13. package/coverage/lcov-report/src/components/RecommendationModal.tsx.html +200 -20
  14. package/coverage/lcov-report/src/components/RecommendedCarbs.tsx.html +218 -20
  15. package/coverage/lcov-report/src/components/RecommendedInsulin.tsx.html +195 -27
  16. package/coverage/lcov-report/src/components/Remeasure.tsx.html +125 -14
  17. package/coverage/lcov-report/src/components/TransferToLogbook.tsx.html +71 -8
  18. package/coverage/lcov-report/src/components/TwoOptionModal.tsx.html +34 -10
  19. package/coverage/lcov-report/src/components/activity/Activity.tsx.html +58 -7
  20. package/coverage/lcov-report/src/components/activity/ActivityIcon.tsx.html +42 -3
  21. package/coverage/lcov-report/src/components/activity/ActivityIntensity.tsx.html +30 -6
  22. package/coverage/lcov-report/src/components/activity/index.html +1 -1
  23. package/coverage/lcov-report/src/components/index.html +10 -10
  24. package/coverage/lcov-report/src/components/mood/Emotion.tsx.html +85 -10
  25. package/coverage/lcov-report/src/components/mood/MoodIcon.tsx.html +87 -12
  26. package/coverage/lcov-report/src/components/mood/index.html +1 -1
  27. package/coverage/lcov-report/src/index.html +1 -1
  28. package/coverage/lcov-report/src/locale/i18nUtils.ts.html +47 -8
  29. package/coverage/lcov-report/src/locale/index.html +1 -1
  30. package/coverage/lcov-report/src/utils/AttentionMessages.tsx.html +235 -7
  31. package/coverage/lcov-report/src/utils/Constants.ts.html +71 -2
  32. package/coverage/lcov-report/src/utils/RecommendationError.tsx.html +89 -2
  33. package/coverage/lcov-report/src/utils/RecommendationUtils.ts.html +337 -40
  34. package/coverage/lcov-report/src/utils/Translations.ts.html +27 -3
  35. package/coverage/lcov-report/src/utils/Utils.ts.html +295 -19
  36. package/coverage/lcov-report/src/utils/Validations.ts.html +763 -61
  37. package/coverage/lcov-report/src/utils/index.html +1 -1
  38. package/coverage/lcov.info +1243 -1249
  39. package/ignore-git.sh +1 -0
  40. package/ignore-publish.sh +1 -0
  41. package/package.json +5 -3
  42. package/src/RecommendationScreen.d.ts +323 -6
  43. package/src/RecommendationScreen.js +234 -1
  44. package/src/__tests__/RecommendationScreen.test.js +35 -1
  45. package/src/__tests__/utils.d.ts +5 -5
  46. package/src/__tests__/utils.js +1 -1
  47. package/src/components/Header.d.ts +4 -43
  48. package/src/components/Header.js +3 -1
  49. package/src/components/Icon.d.ts +9 -2
  50. package/src/components/Icon.js +6 -1
  51. package/src/components/InfoBars.d.ts +28 -0
  52. package/src/components/InfoBars.js +23 -0
  53. package/src/components/InvisibleNumberInput.d.ts +66 -3
  54. package/src/components/InvisibleNumberInput.js +53 -0
  55. package/src/components/LimitationMessage.d.ts +6 -0
  56. package/src/components/LimitationMessage.js +4 -0
  57. package/src/components/LineSeparator.d.ts +4 -2
  58. package/src/components/LineSeparator.js +2 -0
  59. package/src/components/RecentInsulin.d.ts +10 -2
  60. package/src/components/RecentInsulin.js +7 -0
  61. package/src/components/RecommendationModal.d.ts +61 -3
  62. package/src/components/RecommendationModal.js +45 -0
  63. package/src/components/RecommendedCarbs.d.ts +71 -4
  64. package/src/components/RecommendedCarbs.js +56 -0
  65. package/src/components/RecommendedInsulin.d.ts +66 -4
  66. package/src/components/RecommendedInsulin.js +51 -5
  67. package/src/components/Remeasure.d.ts +38 -2
  68. package/src/components/Remeasure.js +31 -0
  69. package/src/components/TransferToLogbook.d.ts +23 -3
  70. package/src/components/TransferToLogbook.js +18 -0
  71. package/src/components/TwoOptionModal.d.ts +12 -1
  72. package/src/components/TwoOptionModal.js +3 -3
  73. package/src/components/activity/Activity.d.ts +21 -5
  74. package/src/components/activity/Activity.js +14 -0
  75. package/src/components/activity/ActivityIcon.d.ts +15 -0
  76. package/src/components/activity/ActivityIcon.js +14 -1
  77. package/src/components/activity/ActivityIntensity.d.ts +11 -4
  78. package/src/components/activity/ActivityIntensity.js +7 -0
  79. package/src/components/mood/Emotion.d.ts +26 -1
  80. package/src/components/mood/Emotion.js +20 -0
  81. package/src/components/mood/MoodIcon.d.ts +28 -2
  82. package/src/components/mood/MoodIcon.js +20 -2
  83. package/src/locale/i18nUtils.d.ts +13 -0
  84. package/src/locale/i18nUtils.js +13 -0
  85. package/src/types/enum.d.ts +10 -0
  86. package/src/types/enum.js +9 -0
  87. package/src/types/types.d.ts +9 -7
  88. package/src/utils/AttentionMessages.d.ts +65 -0
  89. package/src/utils/AttentionMessages.js +65 -1
  90. package/src/utils/Constants.d.ts +23 -0
  91. package/src/utils/Constants.js +23 -0
  92. package/src/utils/RecommendationError.d.ts +29 -0
  93. package/src/utils/RecommendationError.js +29 -0
  94. package/src/utils/RecommendationUtils.d.ts +98 -6
  95. package/src/utils/RecommendationUtils.js +92 -0
  96. package/src/utils/Translations.d.ts +7 -0
  97. package/src/utils/Translations.js +7 -0
  98. package/src/utils/Utils.d.ts +92 -0
  99. package/src/utils/Utils.js +94 -2
  100. package/src/utils/Validations.d.ts +232 -9
  101. package/src/utils/Validations.js +225 -2
  102. package/typedoc.json +13 -0
@@ -311,7 +311,255 @@
311
311
  <a name='L252'></a><a href='#L252'>252</a>
312
312
  <a name='L253'></a><a href='#L253'>253</a>
313
313
  <a name='L254'></a><a href='#L254'>254</a>
314
- <a name='L255'></a><a href='#L255'>255</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
314
+ <a name='L255'></a><a href='#L255'>255</a>
315
+ <a name='L256'></a><a href='#L256'>256</a>
316
+ <a name='L257'></a><a href='#L257'>257</a>
317
+ <a name='L258'></a><a href='#L258'>258</a>
318
+ <a name='L259'></a><a href='#L259'>259</a>
319
+ <a name='L260'></a><a href='#L260'>260</a>
320
+ <a name='L261'></a><a href='#L261'>261</a>
321
+ <a name='L262'></a><a href='#L262'>262</a>
322
+ <a name='L263'></a><a href='#L263'>263</a>
323
+ <a name='L264'></a><a href='#L264'>264</a>
324
+ <a name='L265'></a><a href='#L265'>265</a>
325
+ <a name='L266'></a><a href='#L266'>266</a>
326
+ <a name='L267'></a><a href='#L267'>267</a>
327
+ <a name='L268'></a><a href='#L268'>268</a>
328
+ <a name='L269'></a><a href='#L269'>269</a>
329
+ <a name='L270'></a><a href='#L270'>270</a>
330
+ <a name='L271'></a><a href='#L271'>271</a>
331
+ <a name='L272'></a><a href='#L272'>272</a>
332
+ <a name='L273'></a><a href='#L273'>273</a>
333
+ <a name='L274'></a><a href='#L274'>274</a>
334
+ <a name='L275'></a><a href='#L275'>275</a>
335
+ <a name='L276'></a><a href='#L276'>276</a>
336
+ <a name='L277'></a><a href='#L277'>277</a>
337
+ <a name='L278'></a><a href='#L278'>278</a>
338
+ <a name='L279'></a><a href='#L279'>279</a>
339
+ <a name='L280'></a><a href='#L280'>280</a>
340
+ <a name='L281'></a><a href='#L281'>281</a>
341
+ <a name='L282'></a><a href='#L282'>282</a>
342
+ <a name='L283'></a><a href='#L283'>283</a>
343
+ <a name='L284'></a><a href='#L284'>284</a>
344
+ <a name='L285'></a><a href='#L285'>285</a>
345
+ <a name='L286'></a><a href='#L286'>286</a>
346
+ <a name='L287'></a><a href='#L287'>287</a>
347
+ <a name='L288'></a><a href='#L288'>288</a>
348
+ <a name='L289'></a><a href='#L289'>289</a>
349
+ <a name='L290'></a><a href='#L290'>290</a>
350
+ <a name='L291'></a><a href='#L291'>291</a>
351
+ <a name='L292'></a><a href='#L292'>292</a>
352
+ <a name='L293'></a><a href='#L293'>293</a>
353
+ <a name='L294'></a><a href='#L294'>294</a>
354
+ <a name='L295'></a><a href='#L295'>295</a>
355
+ <a name='L296'></a><a href='#L296'>296</a>
356
+ <a name='L297'></a><a href='#L297'>297</a>
357
+ <a name='L298'></a><a href='#L298'>298</a>
358
+ <a name='L299'></a><a href='#L299'>299</a>
359
+ <a name='L300'></a><a href='#L300'>300</a>
360
+ <a name='L301'></a><a href='#L301'>301</a>
361
+ <a name='L302'></a><a href='#L302'>302</a>
362
+ <a name='L303'></a><a href='#L303'>303</a>
363
+ <a name='L304'></a><a href='#L304'>304</a>
364
+ <a name='L305'></a><a href='#L305'>305</a>
365
+ <a name='L306'></a><a href='#L306'>306</a>
366
+ <a name='L307'></a><a href='#L307'>307</a>
367
+ <a name='L308'></a><a href='#L308'>308</a>
368
+ <a name='L309'></a><a href='#L309'>309</a>
369
+ <a name='L310'></a><a href='#L310'>310</a>
370
+ <a name='L311'></a><a href='#L311'>311</a>
371
+ <a name='L312'></a><a href='#L312'>312</a>
372
+ <a name='L313'></a><a href='#L313'>313</a>
373
+ <a name='L314'></a><a href='#L314'>314</a>
374
+ <a name='L315'></a><a href='#L315'>315</a>
375
+ <a name='L316'></a><a href='#L316'>316</a>
376
+ <a name='L317'></a><a href='#L317'>317</a>
377
+ <a name='L318'></a><a href='#L318'>318</a>
378
+ <a name='L319'></a><a href='#L319'>319</a>
379
+ <a name='L320'></a><a href='#L320'>320</a>
380
+ <a name='L321'></a><a href='#L321'>321</a>
381
+ <a name='L322'></a><a href='#L322'>322</a>
382
+ <a name='L323'></a><a href='#L323'>323</a>
383
+ <a name='L324'></a><a href='#L324'>324</a>
384
+ <a name='L325'></a><a href='#L325'>325</a>
385
+ <a name='L326'></a><a href='#L326'>326</a>
386
+ <a name='L327'></a><a href='#L327'>327</a>
387
+ <a name='L328'></a><a href='#L328'>328</a>
388
+ <a name='L329'></a><a href='#L329'>329</a>
389
+ <a name='L330'></a><a href='#L330'>330</a>
390
+ <a name='L331'></a><a href='#L331'>331</a>
391
+ <a name='L332'></a><a href='#L332'>332</a>
392
+ <a name='L333'></a><a href='#L333'>333</a>
393
+ <a name='L334'></a><a href='#L334'>334</a>
394
+ <a name='L335'></a><a href='#L335'>335</a>
395
+ <a name='L336'></a><a href='#L336'>336</a>
396
+ <a name='L337'></a><a href='#L337'>337</a>
397
+ <a name='L338'></a><a href='#L338'>338</a>
398
+ <a name='L339'></a><a href='#L339'>339</a>
399
+ <a name='L340'></a><a href='#L340'>340</a>
400
+ <a name='L341'></a><a href='#L341'>341</a>
401
+ <a name='L342'></a><a href='#L342'>342</a>
402
+ <a name='L343'></a><a href='#L343'>343</a>
403
+ <a name='L344'></a><a href='#L344'>344</a>
404
+ <a name='L345'></a><a href='#L345'>345</a>
405
+ <a name='L346'></a><a href='#L346'>346</a>
406
+ <a name='L347'></a><a href='#L347'>347</a>
407
+ <a name='L348'></a><a href='#L348'>348</a>
408
+ <a name='L349'></a><a href='#L349'>349</a>
409
+ <a name='L350'></a><a href='#L350'>350</a>
410
+ <a name='L351'></a><a href='#L351'>351</a>
411
+ <a name='L352'></a><a href='#L352'>352</a>
412
+ <a name='L353'></a><a href='#L353'>353</a>
413
+ <a name='L354'></a><a href='#L354'>354</a>
414
+ <a name='L355'></a><a href='#L355'>355</a>
415
+ <a name='L356'></a><a href='#L356'>356</a>
416
+ <a name='L357'></a><a href='#L357'>357</a>
417
+ <a name='L358'></a><a href='#L358'>358</a>
418
+ <a name='L359'></a><a href='#L359'>359</a>
419
+ <a name='L360'></a><a href='#L360'>360</a>
420
+ <a name='L361'></a><a href='#L361'>361</a>
421
+ <a name='L362'></a><a href='#L362'>362</a>
422
+ <a name='L363'></a><a href='#L363'>363</a>
423
+ <a name='L364'></a><a href='#L364'>364</a>
424
+ <a name='L365'></a><a href='#L365'>365</a>
425
+ <a name='L366'></a><a href='#L366'>366</a>
426
+ <a name='L367'></a><a href='#L367'>367</a>
427
+ <a name='L368'></a><a href='#L368'>368</a>
428
+ <a name='L369'></a><a href='#L369'>369</a>
429
+ <a name='L370'></a><a href='#L370'>370</a>
430
+ <a name='L371'></a><a href='#L371'>371</a>
431
+ <a name='L372'></a><a href='#L372'>372</a>
432
+ <a name='L373'></a><a href='#L373'>373</a>
433
+ <a name='L374'></a><a href='#L374'>374</a>
434
+ <a name='L375'></a><a href='#L375'>375</a>
435
+ <a name='L376'></a><a href='#L376'>376</a>
436
+ <a name='L377'></a><a href='#L377'>377</a>
437
+ <a name='L378'></a><a href='#L378'>378</a>
438
+ <a name='L379'></a><a href='#L379'>379</a>
439
+ <a name='L380'></a><a href='#L380'>380</a>
440
+ <a name='L381'></a><a href='#L381'>381</a>
441
+ <a name='L382'></a><a href='#L382'>382</a>
442
+ <a name='L383'></a><a href='#L383'>383</a>
443
+ <a name='L384'></a><a href='#L384'>384</a>
444
+ <a name='L385'></a><a href='#L385'>385</a>
445
+ <a name='L386'></a><a href='#L386'>386</a>
446
+ <a name='L387'></a><a href='#L387'>387</a>
447
+ <a name='L388'></a><a href='#L388'>388</a>
448
+ <a name='L389'></a><a href='#L389'>389</a>
449
+ <a name='L390'></a><a href='#L390'>390</a>
450
+ <a name='L391'></a><a href='#L391'>391</a>
451
+ <a name='L392'></a><a href='#L392'>392</a>
452
+ <a name='L393'></a><a href='#L393'>393</a>
453
+ <a name='L394'></a><a href='#L394'>394</a>
454
+ <a name='L395'></a><a href='#L395'>395</a>
455
+ <a name='L396'></a><a href='#L396'>396</a>
456
+ <a name='L397'></a><a href='#L397'>397</a>
457
+ <a name='L398'></a><a href='#L398'>398</a>
458
+ <a name='L399'></a><a href='#L399'>399</a>
459
+ <a name='L400'></a><a href='#L400'>400</a>
460
+ <a name='L401'></a><a href='#L401'>401</a>
461
+ <a name='L402'></a><a href='#L402'>402</a>
462
+ <a name='L403'></a><a href='#L403'>403</a>
463
+ <a name='L404'></a><a href='#L404'>404</a>
464
+ <a name='L405'></a><a href='#L405'>405</a>
465
+ <a name='L406'></a><a href='#L406'>406</a>
466
+ <a name='L407'></a><a href='#L407'>407</a>
467
+ <a name='L408'></a><a href='#L408'>408</a>
468
+ <a name='L409'></a><a href='#L409'>409</a>
469
+ <a name='L410'></a><a href='#L410'>410</a>
470
+ <a name='L411'></a><a href='#L411'>411</a>
471
+ <a name='L412'></a><a href='#L412'>412</a>
472
+ <a name='L413'></a><a href='#L413'>413</a>
473
+ <a name='L414'></a><a href='#L414'>414</a>
474
+ <a name='L415'></a><a href='#L415'>415</a>
475
+ <a name='L416'></a><a href='#L416'>416</a>
476
+ <a name='L417'></a><a href='#L417'>417</a>
477
+ <a name='L418'></a><a href='#L418'>418</a>
478
+ <a name='L419'></a><a href='#L419'>419</a>
479
+ <a name='L420'></a><a href='#L420'>420</a>
480
+ <a name='L421'></a><a href='#L421'>421</a>
481
+ <a name='L422'></a><a href='#L422'>422</a>
482
+ <a name='L423'></a><a href='#L423'>423</a>
483
+ <a name='L424'></a><a href='#L424'>424</a>
484
+ <a name='L425'></a><a href='#L425'>425</a>
485
+ <a name='L426'></a><a href='#L426'>426</a>
486
+ <a name='L427'></a><a href='#L427'>427</a>
487
+ <a name='L428'></a><a href='#L428'>428</a>
488
+ <a name='L429'></a><a href='#L429'>429</a>
489
+ <a name='L430'></a><a href='#L430'>430</a>
490
+ <a name='L431'></a><a href='#L431'>431</a>
491
+ <a name='L432'></a><a href='#L432'>432</a>
492
+ <a name='L433'></a><a href='#L433'>433</a>
493
+ <a name='L434'></a><a href='#L434'>434</a>
494
+ <a name='L435'></a><a href='#L435'>435</a>
495
+ <a name='L436'></a><a href='#L436'>436</a>
496
+ <a name='L437'></a><a href='#L437'>437</a>
497
+ <a name='L438'></a><a href='#L438'>438</a>
498
+ <a name='L439'></a><a href='#L439'>439</a>
499
+ <a name='L440'></a><a href='#L440'>440</a>
500
+ <a name='L441'></a><a href='#L441'>441</a>
501
+ <a name='L442'></a><a href='#L442'>442</a>
502
+ <a name='L443'></a><a href='#L443'>443</a>
503
+ <a name='L444'></a><a href='#L444'>444</a>
504
+ <a name='L445'></a><a href='#L445'>445</a>
505
+ <a name='L446'></a><a href='#L446'>446</a>
506
+ <a name='L447'></a><a href='#L447'>447</a>
507
+ <a name='L448'></a><a href='#L448'>448</a>
508
+ <a name='L449'></a><a href='#L449'>449</a>
509
+ <a name='L450'></a><a href='#L450'>450</a>
510
+ <a name='L451'></a><a href='#L451'>451</a>
511
+ <a name='L452'></a><a href='#L452'>452</a>
512
+ <a name='L453'></a><a href='#L453'>453</a>
513
+ <a name='L454'></a><a href='#L454'>454</a>
514
+ <a name='L455'></a><a href='#L455'>455</a>
515
+ <a name='L456'></a><a href='#L456'>456</a>
516
+ <a name='L457'></a><a href='#L457'>457</a>
517
+ <a name='L458'></a><a href='#L458'>458</a>
518
+ <a name='L459'></a><a href='#L459'>459</a>
519
+ <a name='L460'></a><a href='#L460'>460</a>
520
+ <a name='L461'></a><a href='#L461'>461</a>
521
+ <a name='L462'></a><a href='#L462'>462</a>
522
+ <a name='L463'></a><a href='#L463'>463</a>
523
+ <a name='L464'></a><a href='#L464'>464</a>
524
+ <a name='L465'></a><a href='#L465'>465</a>
525
+ <a name='L466'></a><a href='#L466'>466</a>
526
+ <a name='L467'></a><a href='#L467'>467</a>
527
+ <a name='L468'></a><a href='#L468'>468</a>
528
+ <a name='L469'></a><a href='#L469'>469</a>
529
+ <a name='L470'></a><a href='#L470'>470</a>
530
+ <a name='L471'></a><a href='#L471'>471</a>
531
+ <a name='L472'></a><a href='#L472'>472</a>
532
+ <a name='L473'></a><a href='#L473'>473</a>
533
+ <a name='L474'></a><a href='#L474'>474</a>
534
+ <a name='L475'></a><a href='#L475'>475</a>
535
+ <a name='L476'></a><a href='#L476'>476</a>
536
+ <a name='L477'></a><a href='#L477'>477</a>
537
+ <a name='L478'></a><a href='#L478'>478</a>
538
+ <a name='L479'></a><a href='#L479'>479</a>
539
+ <a name='L480'></a><a href='#L480'>480</a>
540
+ <a name='L481'></a><a href='#L481'>481</a>
541
+ <a name='L482'></a><a href='#L482'>482</a>
542
+ <a name='L483'></a><a href='#L483'>483</a>
543
+ <a name='L484'></a><a href='#L484'>484</a>
544
+ <a name='L485'></a><a href='#L485'>485</a>
545
+ <a name='L486'></a><a href='#L486'>486</a>
546
+ <a name='L487'></a><a href='#L487'>487</a>
547
+ <a name='L488'></a><a href='#L488'>488</a>
548
+ <a name='L489'></a><a href='#L489'>489</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
563
  <span class="cline-any cline-neutral">&nbsp;</span>
316
564
  <span class="cline-any cline-neutral">&nbsp;</span>
317
565
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -361,87 +609,192 @@
361
609
  <span class="cline-any cline-yes">2x</span>
362
610
  <span class="cline-any cline-neutral">&nbsp;</span>
363
611
  <span class="cline-any cline-neutral">&nbsp;</span>
364
- <span class="cline-any cline-yes">56x</span>
365
- <span class="cline-any cline-yes">56x</span>
366
612
  <span class="cline-any cline-neutral">&nbsp;</span>
367
- <span class="cline-any cline-yes">56x</span>
368
- <span class="cline-any cline-yes">56x</span>
369
- <span class="cline-any cline-yes">56x</span>
370
613
  <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-yes">56x</span>
372
- <span class="cline-any cline-yes">56x</span>
373
- <span class="cline-any cline-yes">56x</span>
374
- <span class="cline-any cline-yes">55x</span>
375
- <span class="cline-any cline-yes">55x</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-neutral">&nbsp;</span>
616
+ <span class="cline-any cline-neutral">&nbsp;</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
+ <span class="cline-any cline-neutral">&nbsp;</span>
620
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
+ <span class="cline-any cline-neutral">&nbsp;</span>
622
+ <span class="cline-any cline-neutral">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</span>
628
+ <span class="cline-any cline-neutral">&nbsp;</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-yes">64x</span>
631
+ <span class="cline-any cline-yes">64x</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-yes">64x</span>
634
+ <span class="cline-any cline-yes">64x</span>
635
+ <span class="cline-any cline-yes">64x</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-yes">64x</span>
638
+ <span class="cline-any cline-yes">64x</span>
639
+ <span class="cline-any cline-yes">64x</span>
640
+ <span class="cline-any cline-yes">63x</span>
641
+ <span class="cline-any cline-yes">63x</span>
376
642
  <span class="cline-any cline-yes">5x</span>
377
643
  <span class="cline-any cline-neutral">&nbsp;</span>
378
644
  <span class="cline-any cline-neutral">&nbsp;</span>
379
645
  <span class="cline-any cline-neutral">&nbsp;</span>
380
- <span class="cline-any cline-yes">61x</span>
646
+ <span class="cline-any cline-neutral">&nbsp;</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-neutral">&nbsp;</span>
654
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
+ <span class="cline-any cline-yes">69x</span>
381
656
  <span class="cline-any cline-yes">2x</span>
382
657
  <span class="cline-any cline-neutral">&nbsp;</span>
383
658
  <span class="cline-any cline-neutral">&nbsp;</span>
384
659
  <span class="cline-any cline-neutral">&nbsp;</span>
385
660
  <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-yes">66x</span>
661
+ <span class="cline-any cline-neutral">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-yes">74x</span>
387
670
  <span class="cline-any cline-yes">5x</span>
388
671
  <span class="cline-any cline-neutral">&nbsp;</span>
389
672
  <span class="cline-any cline-neutral">&nbsp;</span>
390
673
  <span class="cline-any cline-neutral">&nbsp;</span>
391
- <span class="cline-any cline-yes">63x</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-neutral">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-neutral">&nbsp;</span>
678
+ <span class="cline-any cline-neutral">&nbsp;</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-neutral">&nbsp;</span>
682
+ <span class="cline-any cline-neutral">&nbsp;</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</span>
684
+ <span class="cline-any cline-neutral">&nbsp;</span>
685
+ <span class="cline-any cline-yes">71x</span>
392
686
  <span class="cline-any cline-yes">1x</span>
393
687
  <span class="cline-any cline-neutral">&nbsp;</span>
394
- <span class="cline-any cline-yes">62x</span>
395
- <span class="cline-any cline-yes">60x</span>
688
+ <span class="cline-any cline-yes">70x</span>
689
+ <span class="cline-any cline-yes">68x</span>
396
690
  <span class="cline-any cline-yes">4x</span>
397
691
  <span class="cline-any cline-neutral">&nbsp;</span>
398
692
  <span class="cline-any cline-neutral">&nbsp;</span>
399
693
  <span class="cline-any cline-neutral">&nbsp;</span>
400
694
  <span class="cline-any cline-neutral">&nbsp;</span>
401
695
  <span class="cline-any cline-neutral">&nbsp;</span>
402
- <span class="cline-any cline-yes">62x</span>
403
- <span class="cline-any cline-yes">75x</span>
404
696
  <span class="cline-any cline-neutral">&nbsp;</span>
405
- <span class="cline-any cline-yes">62x</span>
697
+ <span class="cline-any cline-neutral">&nbsp;</span>
698
+ <span class="cline-any cline-neutral">&nbsp;</span>
699
+ <span class="cline-any cline-neutral">&nbsp;</span>
700
+ <span class="cline-any cline-neutral">&nbsp;</span>
701
+ <span class="cline-any cline-neutral">&nbsp;</span>
702
+ <span class="cline-any cline-neutral">&nbsp;</span>
703
+ <span class="cline-any cline-neutral">&nbsp;</span>
704
+ <span class="cline-any cline-yes">70x</span>
705
+ <span class="cline-any cline-yes">83x</span>
706
+ <span class="cline-any cline-neutral">&nbsp;</span>
707
+ <span class="cline-any cline-yes">70x</span>
406
708
  <span class="cline-any cline-yes">3x</span>
407
709
  <span class="cline-any cline-neutral">&nbsp;</span>
408
710
  <span class="cline-any cline-neutral">&nbsp;</span>
409
711
  <span class="cline-any cline-neutral">&nbsp;</span>
410
712
  <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-yes">66x</span>
412
- <span class="cline-any cline-yes">61x</span>
713
+ <span class="cline-any cline-neutral">&nbsp;</span>
714
+ <span class="cline-any cline-neutral">&nbsp;</span>
715
+ <span class="cline-any cline-neutral">&nbsp;</span>
716
+ <span class="cline-any cline-neutral">&nbsp;</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
+ <span class="cline-any cline-neutral">&nbsp;</span>
719
+ <span class="cline-any cline-neutral">&nbsp;</span>
720
+ <span class="cline-any cline-yes">76x</span>
721
+ <span class="cline-any cline-yes">69x</span>
413
722
  <span class="cline-any cline-yes">3x</span>
414
723
  <span class="cline-any cline-neutral">&nbsp;</span>
415
724
  <span class="cline-any cline-neutral">&nbsp;</span>
416
725
  <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-yes">62x</span>
418
- <span class="cline-any cline-yes">66x</span>
419
- <span class="cline-any cline-yes">60x</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-neutral">&nbsp;</span>
728
+ <span class="cline-any cline-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-neutral">&nbsp;</span>
730
+ <span class="cline-any cline-neutral">&nbsp;</span>
731
+ <span class="cline-any cline-neutral">&nbsp;</span>
732
+ <span class="cline-any cline-neutral">&nbsp;</span>
733
+ <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-neutral">&nbsp;</span>
735
+ <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-yes">70x</span>
737
+ <span class="cline-any cline-yes">76x</span>
738
+ <span class="cline-any cline-yes">68x</span>
420
739
  <span class="cline-any cline-yes">3x</span>
421
740
  <span class="cline-any cline-neutral">&nbsp;</span>
422
741
  <span class="cline-any cline-neutral">&nbsp;</span>
423
742
  <span class="cline-any cline-neutral">&nbsp;</span>
424
743
  <span class="cline-any cline-neutral">&nbsp;</span>
425
744
  <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-yes">64x</span>
745
+ <span class="cline-any cline-neutral">&nbsp;</span>
746
+ <span class="cline-any cline-neutral">&nbsp;</span>
747
+ <span class="cline-any cline-neutral">&nbsp;</span>
748
+ <span class="cline-any cline-neutral">&nbsp;</span>
749
+ <span class="cline-any cline-neutral">&nbsp;</span>
750
+ <span class="cline-any cline-neutral">&nbsp;</span>
751
+ <span class="cline-any cline-neutral">&nbsp;</span>
752
+ <span class="cline-any cline-yes">72x</span>
427
753
  <span class="cline-any cline-yes">4x</span>
428
754
  <span class="cline-any cline-neutral">&nbsp;</span>
429
755
  <span class="cline-any cline-neutral">&nbsp;</span>
430
756
  <span class="cline-any cline-neutral">&nbsp;</span>
431
757
  <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-yes">56x</span>
433
- <span class="cline-any cline-yes">56x</span>
434
- <span class="cline-any cline-yes">56x</span>
435
- <span class="cline-any cline-yes">56x</span>
436
- <span class="cline-any cline-yes">56x</span>
437
- <span class="cline-any cline-yes">56x</span>
438
- <span class="cline-any cline-yes">56x</span>
439
- <span class="cline-any cline-yes">56x</span>
440
- <span class="cline-any cline-yes">56x</span>
441
758
  <span class="cline-any cline-neutral">&nbsp;</span>
442
759
  <span class="cline-any cline-neutral">&nbsp;</span>
443
760
  <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-yes">58x</span>
761
+ <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-neutral">&nbsp;</span>
765
+ <span class="cline-any cline-neutral">&nbsp;</span>
766
+ <span class="cline-any cline-neutral">&nbsp;</span>
767
+ <span class="cline-any cline-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-neutral">&nbsp;</span>
769
+ <span class="cline-any cline-neutral">&nbsp;</span>
770
+ <span class="cline-any cline-neutral">&nbsp;</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-yes">64x</span>
774
+ <span class="cline-any cline-yes">64x</span>
775
+ <span class="cline-any cline-yes">64x</span>
776
+ <span class="cline-any cline-yes">64x</span>
777
+ <span class="cline-any cline-yes">64x</span>
778
+ <span class="cline-any cline-yes">64x</span>
779
+ <span class="cline-any cline-yes">64x</span>
780
+ <span class="cline-any cline-yes">64x</span>
781
+ <span class="cline-any cline-yes">64x</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-neutral">&nbsp;</span>
792
+ <span class="cline-any cline-neutral">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-yes">66x</span>
445
798
  <span class="cline-any cline-yes">7x</span>
446
799
  <span class="cline-any cline-yes">6x</span>
447
800
  <span class="cline-any cline-yes">6x</span>
@@ -451,34 +804,74 @@
451
804
  <span class="cline-any cline-neutral">&nbsp;</span>
452
805
  <span class="cline-any cline-neutral">&nbsp;</span>
453
806
  <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-yes">58x</span>
807
+ <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-neutral">&nbsp;</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span>
811
+ <span class="cline-any cline-neutral">&nbsp;</span>
812
+ <span class="cline-any cline-neutral">&nbsp;</span>
813
+ <span class="cline-any cline-neutral">&nbsp;</span>
814
+ <span class="cline-any cline-yes">66x</span>
455
815
  <span class="cline-any cline-yes">2x</span>
456
816
  <span class="cline-any cline-neutral">&nbsp;</span>
457
817
  <span class="cline-any cline-neutral">&nbsp;</span>
458
818
  <span class="cline-any cline-neutral">&nbsp;</span>
459
819
  <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-yes">62x</span>
461
- <span class="cline-any cline-yes">77x</span>
820
+ <span class="cline-any cline-neutral">&nbsp;</span>
821
+ <span class="cline-any cline-neutral">&nbsp;</span>
822
+ <span class="cline-any cline-neutral">&nbsp;</span>
823
+ <span class="cline-any cline-neutral">&nbsp;</span>
824
+ <span class="cline-any cline-neutral">&nbsp;</span>
825
+ <span class="cline-any cline-neutral">&nbsp;</span>
826
+ <span class="cline-any cline-neutral">&nbsp;</span>
827
+ <span class="cline-any cline-neutral">&nbsp;</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-yes">70x</span>
830
+ <span class="cline-any cline-yes">93x</span>
462
831
  <span class="cline-any cline-yes">3x</span>
463
832
  <span class="cline-any cline-neutral">&nbsp;</span>
464
833
  <span class="cline-any cline-neutral">&nbsp;</span>
465
834
  <span class="cline-any cline-neutral">&nbsp;</span>
466
835
  <span class="cline-any cline-neutral">&nbsp;</span>
467
836
  <span class="cline-any cline-neutral">&nbsp;</span>
468
- <span class="cline-any cline-yes">62x</span>
469
- <span class="cline-any cline-yes">78x</span>
837
+ <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-neutral">&nbsp;</span>
840
+ <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</span>
843
+ <span class="cline-any cline-neutral">&nbsp;</span>
844
+ <span class="cline-any cline-neutral">&nbsp;</span>
845
+ <span class="cline-any cline-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-yes">70x</span>
847
+ <span class="cline-any cline-yes">94x</span>
470
848
  <span class="cline-any cline-yes">3x</span>
471
849
  <span class="cline-any cline-neutral">&nbsp;</span>
472
850
  <span class="cline-any cline-neutral">&nbsp;</span>
473
851
  <span class="cline-any cline-neutral">&nbsp;</span>
474
852
  <span class="cline-any cline-neutral">&nbsp;</span>
475
853
  <span class="cline-any cline-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-neutral">&nbsp;</span>
855
+ <span class="cline-any cline-neutral">&nbsp;</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-neutral">&nbsp;</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-neutral">&nbsp;</span>
860
+ <span class="cline-any cline-neutral">&nbsp;</span>
476
861
  <span class="cline-any cline-yes">14x</span>
477
862
  <span class="cline-any cline-yes">4x</span>
478
863
  <span class="cline-any cline-neutral">&nbsp;</span>
479
864
  <span class="cline-any cline-neutral">&nbsp;</span>
480
865
  <span class="cline-any cline-neutral">&nbsp;</span>
481
866
  <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-neutral">&nbsp;</span>
868
+ <span class="cline-any cline-neutral">&nbsp;</span>
869
+ <span class="cline-any cline-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-neutral">&nbsp;</span>
872
+ <span class="cline-any cline-neutral">&nbsp;</span>
873
+ <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
875
  <span class="cline-any cline-yes">13x</span>
483
876
  <span class="cline-any cline-yes">31x</span>
484
877
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -488,6 +881,14 @@
488
881
  <span class="cline-any cline-neutral">&nbsp;</span>
489
882
  <span class="cline-any cline-neutral">&nbsp;</span>
490
883
  <span class="cline-any cline-neutral">&nbsp;</span>
884
+ <span class="cline-any cline-neutral">&nbsp;</span>
885
+ <span class="cline-any cline-neutral">&nbsp;</span>
886
+ <span class="cline-any cline-neutral">&nbsp;</span>
887
+ <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-neutral">&nbsp;</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
892
  <span class="cline-any cline-yes">45x</span>
492
893
  <span class="cline-any cline-yes">15x</span>
493
894
  <span class="cline-any cline-yes">5x</span>
@@ -495,6 +896,15 @@
495
896
  <span class="cline-any cline-neutral">&nbsp;</span>
496
897
  <span class="cline-any cline-neutral">&nbsp;</span>
497
898
  <span class="cline-any cline-neutral">&nbsp;</span>
899
+ <span class="cline-any cline-neutral">&nbsp;</span>
900
+ <span class="cline-any cline-neutral">&nbsp;</span>
901
+ <span class="cline-any cline-neutral">&nbsp;</span>
902
+ <span class="cline-any cline-neutral">&nbsp;</span>
903
+ <span class="cline-any cline-neutral">&nbsp;</span>
904
+ <span class="cline-any cline-neutral">&nbsp;</span>
905
+ <span class="cline-any cline-neutral">&nbsp;</span>
906
+ <span class="cline-any cline-neutral">&nbsp;</span>
907
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
908
  <span class="cline-any cline-yes">11x</span>
499
909
  <span class="cline-any cline-neutral">&nbsp;</span>
500
910
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -504,6 +914,15 @@
504
914
  <span class="cline-any cline-neutral">&nbsp;</span>
505
915
  <span class="cline-any cline-neutral">&nbsp;</span>
506
916
  <span class="cline-any cline-neutral">&nbsp;</span>
917
+ <span class="cline-any cline-neutral">&nbsp;</span>
918
+ <span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-neutral">&nbsp;</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-neutral">&nbsp;</span>
923
+ <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
926
  <span class="cline-any cline-yes">12x</span>
508
927
  <span class="cline-any cline-yes">49x</span>
509
928
  <span class="cline-any cline-yes">49x</span>
@@ -521,54 +940,117 @@
521
940
  <span class="cline-any cline-neutral">&nbsp;</span>
522
941
  <span class="cline-any cline-neutral">&nbsp;</span>
523
942
  <span class="cline-any cline-neutral">&nbsp;</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-neutral">&nbsp;</span>
946
+ <span class="cline-any cline-neutral">&nbsp;</span>
947
+ <span class="cline-any cline-neutral">&nbsp;</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
950
  <span class="cline-any cline-yes">14x</span>
525
951
  <span class="cline-any cline-yes">4x</span>
526
952
  <span class="cline-any cline-neutral">&nbsp;</span>
527
953
  <span class="cline-any cline-neutral">&nbsp;</span>
528
954
  <span class="cline-any cline-neutral">&nbsp;</span>
529
955
  <span class="cline-any cline-neutral">&nbsp;</span>
530
- <span class="cline-any cline-yes">64x</span>
531
- <span class="cline-any cline-yes">62x</span>
956
+ <span class="cline-any cline-neutral">&nbsp;</span>
957
+ <span class="cline-any cline-neutral">&nbsp;</span>
958
+ <span class="cline-any cline-neutral">&nbsp;</span>
959
+ <span class="cline-any cline-neutral">&nbsp;</span>
960
+ <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-neutral">&nbsp;</span>
962
+ <span class="cline-any cline-neutral">&nbsp;</span>
963
+ <span class="cline-any cline-yes">72x</span>
964
+ <span class="cline-any cline-yes">70x</span>
532
965
  <span class="cline-any cline-yes">4x</span>
533
966
  <span class="cline-any cline-neutral">&nbsp;</span>
534
967
  <span class="cline-any cline-neutral">&nbsp;</span>
535
968
  <span class="cline-any cline-neutral">&nbsp;</span>
536
969
  <span class="cline-any cline-neutral">&nbsp;</span>
537
970
  <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-yes">64x</span>
971
+ <span class="cline-any cline-neutral">&nbsp;</span>
972
+ <span class="cline-any cline-neutral">&nbsp;</span>
973
+ <span class="cline-any cline-neutral">&nbsp;</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-neutral">&nbsp;</span>
976
+ <span class="cline-any cline-neutral">&nbsp;</span>
977
+ <span class="cline-any cline-neutral">&nbsp;</span>
978
+ <span class="cline-any cline-yes">72x</span>
539
979
  <span class="cline-any cline-yes">4x</span>
540
980
  <span class="cline-any cline-neutral">&nbsp;</span>
541
981
  <span class="cline-any cline-neutral">&nbsp;</span>
542
982
  <span class="cline-any cline-neutral">&nbsp;</span>
543
983
  <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-yes">64x</span>
545
- <span class="cline-any cline-yes">61x</span>
984
+ <span class="cline-any cline-neutral">&nbsp;</span>
985
+ <span class="cline-any cline-neutral">&nbsp;</span>
986
+ <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-neutral">&nbsp;</span>
989
+ <span class="cline-any cline-neutral">&nbsp;</span>
990
+ <span class="cline-any cline-neutral">&nbsp;</span>
991
+ <span class="cline-any cline-yes">72x</span>
992
+ <span class="cline-any cline-yes">69x</span>
546
993
  <span class="cline-any cline-yes">4x</span>
547
994
  <span class="cline-any cline-neutral">&nbsp;</span>
548
995
  <span class="cline-any cline-neutral">&nbsp;</span>
549
996
  <span class="cline-any cline-neutral">&nbsp;</span>
550
997
  <span class="cline-any cline-neutral">&nbsp;</span>
551
998
  <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-yes">64x</span>
999
+ <span class="cline-any cline-neutral">&nbsp;</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-neutral">&nbsp;</span>
1002
+ <span class="cline-any cline-neutral">&nbsp;</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
+ <span class="cline-any cline-neutral">&nbsp;</span>
1006
+ <span class="cline-any cline-yes">72x</span>
553
1007
  <span class="cline-any cline-yes">4x</span>
554
1008
  <span class="cline-any cline-neutral">&nbsp;</span>
555
1009
  <span class="cline-any cline-neutral">&nbsp;</span>
556
1010
  <span class="cline-any cline-neutral">&nbsp;</span>
557
1011
  <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-yes">64x</span>
1012
+ <span class="cline-any cline-neutral">&nbsp;</span>
1013
+ <span class="cline-any cline-neutral">&nbsp;</span>
1014
+ <span class="cline-any cline-neutral">&nbsp;</span>
1015
+ <span class="cline-any cline-neutral">&nbsp;</span>
1016
+ <span class="cline-any cline-neutral">&nbsp;</span>
1017
+ <span class="cline-any cline-neutral">&nbsp;</span>
1018
+ <span class="cline-any cline-neutral">&nbsp;</span>
1019
+ <span class="cline-any cline-yes">72x</span>
559
1020
  <span class="cline-any cline-yes">4x</span>
560
1021
  <span class="cline-any cline-neutral">&nbsp;</span>
561
1022
  <span class="cline-any cline-neutral">&nbsp;</span>
562
1023
  <span class="cline-any cline-neutral">&nbsp;</span>
563
1024
  <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-yes">64x</span>
1025
+ <span class="cline-any cline-neutral">&nbsp;</span>
1026
+ <span class="cline-any cline-neutral">&nbsp;</span>
1027
+ <span class="cline-any cline-neutral">&nbsp;</span>
1028
+ <span class="cline-any cline-neutral">&nbsp;</span>
1029
+ <span class="cline-any cline-neutral">&nbsp;</span>
1030
+ <span class="cline-any cline-neutral">&nbsp;</span>
1031
+ <span class="cline-any cline-neutral">&nbsp;</span>
1032
+ <span class="cline-any cline-yes">72x</span>
565
1033
  <span class="cline-any cline-yes">4x</span>
566
1034
  <span class="cline-any cline-neutral">&nbsp;</span>
567
1035
  <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Activity, BloodGlucoseUnit, BloodKetonesUnit, Languages, UserSettings } from "@hedia/types";
1036
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
1037
+ * The validations module contains functions for checking the integrity of every single value that is being passed in to the recommendation screen from the outside.
1038
+ * If any of the individual integrity checks fails, then an exception will be thrown to indicate that the data that was passed in is untrustworthy
1039
+ * and prevent a recommendation to be shown to the user based on the corrupted data.
1040
+ * @module
1041
+ */
1042
+ &nbsp;
1043
+ import {
1044
+ Activity,
1045
+ BloodGlucoseUnit,
1046
+ BloodKetonesUnit,
1047
+ BolusCalculator,
1048
+ Languages,
1049
+ Logbook,
1050
+ UserSettings,
1051
+ } from "@hedia/types";
569
1052
  import moment from "moment";
570
1053
  import { IRecommendationProps } from "../RecommendationScreen";
571
- import { ActivitySettings, IActivityParams, IRecentBolus, IRecommendationParams, logbookEntry } from "../types/types";
572
1054
  import {
573
1055
  ACTIVITY_BUFFER_MINUTES,
574
1056
  ACTIVITY_DURATION_MINUTES_LIMITS,
@@ -614,6 +1096,24 @@ import { Utils } from "./Utils";
614
1096
  const { hard } = Activity.Enums.ActivityIntensity;
615
1097
  const { fromFortysix } = Activity.Enums.ActivityReductionIntervals;
616
1098
  &nbsp;
1099
+ /**
1100
+ * Main function for validating all input properties for the insulin recommendation screen component.
1101
+ * Throws an exception if any of the individual checks fail.
1102
+ *
1103
+ * Steps:
1104
+ * 1. Call checkCalculatorParams() with the calculatorParams property of the props as argument.
1105
+ * 2. Call checkBGLUnit() with the bloodGlucoseUnit property of the props as argument.
1106
+ * 3. Call checkBKProps() with the bloodKetoneUnit and currentBKL properties of the props as arguments.
1107
+ * 4. Call checkBKLUnit() with the bloodKetoneUnit property of the props as argument.
1108
+ * 5. Call checkBloodKetoneLevel() with the currentBKL property of the props as argument.
1109
+ * 6. Call checkInjectionMethod() with the injectionMethod property of the props as argument.
1110
+ * 7. Call checkUserReminder() with the userReminder property of the props as argument.
1111
+ * 8. Call checkLanguage() with the language property of the props as argument.
1112
+ * 9. Call checkLatestLogbook6Hours() with the latestLogbookFrom6Hours property of the props as argument.
1113
+ * 10. If the activity property of the calculatorParams prop is truthy, and the activityDisplayProps prop is truthy:
1114
+ * call the checkActivityType method with the activityType property of the activityDisplayProps prop as the argument.
1115
+ * @param props All the props that were passed in to the RecommendationScreen component.
1116
+ */
617
1117
  export function validateParams(props: IRecommendationProps): void {
618
1118
  checkCalculatorParams(props.calculatorParams);
619
1119
  checkBGLUnit(props.bloodGlucoseUnit);
@@ -630,18 +1130,46 @@ export function validateParams(props: IRecommendationProps): void {
630
1130
  checkActivityType(props.activityDisplayProps.activityType);
631
1131
  }
632
1132
  }
1133
+ &nbsp;
1134
+ /**
1135
+ * In case the users is providing a blood ketone current level, check if the blood ketone unit is defined.
1136
+ *
1137
+ * Steps:
1138
+ * 1. If the currentBKL is not null and the bloodKetoneUnit is null throw an BloodKetonePropsError
1139
+ * @param bloodKetoneUnit The user’s blood ketone unit.
1140
+ * @param currentBKL The users’s current blood ketone level.
1141
+ */
633
1142
  export function checkBKProps(bloodKetoneUnit: BloodKetonesUnit | null, currentBKL: number | null): void {
634
1143
  if (currentBKL !== null &amp;&amp; bloodKetoneUnit === null) {
635
1144
  throw BloodKetonePropsError();
636
1145
  }
637
1146
  }
638
1147
  &nbsp;
1148
+ /**
1149
+ * The user’s preferred language for using the app.
1150
+ *
1151
+ * Steps:
1152
+ * 1. Search in the Languages enum values the language provided as an argument.
1153
+ * If language is not present in the Languages enum values array, throw a LanguageError.
1154
+ * @param language The user’s preferred language for using the app.
1155
+ */
639
1156
  export function checkLanguage(language: Languages): void {
640
1157
  if (!Object.values(Languages).includes(language)) {
641
1158
  throw LanguageError();
642
1159
  }
643
1160
  }
644
- export function checkLatestLogbook6Hours(logbook: logbookEntry | null): void {
1161
+ &nbsp;
1162
+ /**
1163
+ * Check if the latest logbook from the last 6 hours is valid.
1164
+ *
1165
+ * Steps:
1166
+ * 1. If logbook is undefined, throw an LatestLogbook6HoursBGLError.
1167
+ * 2. If logbook is not null and if the blood_glucose_millimolar property of the logbook object is not null,
1168
+ * check if the blood_glucose_millimolar is inside the allowed range for blood glucose level.
1169
+ * If it is not, throw LatestLogbook6HoursBGLError.
1170
+ * @param logbook The user’s latest logbook from the last 6 hours
1171
+ */
1172
+ export function checkLatestLogbook6Hours(logbook: Logbook.Types.ILogbookEntry | null): void {
645
1173
  if (logbook === undefined) {
646
1174
  throw LatestLogbook6HoursBGLError();
647
1175
  }
@@ -652,6 +1180,14 @@ export function checkLatestLogbook6Hours(logbook: logbookEntry | null): void {
652
1180
  }
653
1181
  }
654
1182
  &nbsp;
1183
+ /**
1184
+ * Check if the injectionMethod parameter is valid.
1185
+ *
1186
+ * Steps:
1187
+ * 1. Search in the InjectionMethod enum values the injectionMethod provided as an argument.
1188
+ * If injectionMethod is not present in the InjectionMethod enum values array, throw a InjectionMethodError.
1189
+ * @param injectionMethod The user’s insulin injection method.
1190
+ */
655
1191
  export function checkInjectionMethod(injectionMethod: UserSettings.Enums.InjectionMethod): void {
656
1192
  const check = Object.values(UserSettings.Enums.InjectionMethod).some(
657
1193
  (method): boolean =&gt; method === injectionMethod,
@@ -661,12 +1197,29 @@ export function checkInjectionMethod(injectionMethod: UserSettings.Enums.Injecti
661
1197
  }
662
1198
  }
663
1199
  &nbsp;
1200
+ /**
1201
+ * Check if the blood glucose unit parameter is valid.
1202
+ * Steps:
1203
+ * 1. Search in the BloodGlucoseUnit enum values the unit provided as an argument.
1204
+ * If unit is not present in the BloodGlucoseUnit enum values array, throw a BloodGlucoseUnitError.
1205
+ * @param unit The user’s preferred blood glucose unit for using the app.
1206
+ */
664
1207
  export function checkBGLUnit(unit: BloodGlucoseUnit): void {
665
1208
  const check = Object.values(BloodGlucoseUnit).some((enumUnit): boolean =&gt; enumUnit === unit);
666
1209
  if (!check) {
667
1210
  throw BloodGlucoseUnitError();
668
1211
  }
669
1212
  }
1213
+ &nbsp;
1214
+ /**
1215
+ * Check if the blood ketones unit parameter is valid.
1216
+ *
1217
+ * Steps:
1218
+ * 1. If the unit is not null, search in the BloodKetonesUnit enum values the unit provided as an argument.
1219
+ * If unit is not present in the BloodKetonesUnit enum values array, throw a BloodKetoneUnitError.
1220
+ * @param unit The user’s preferred blood ketones unit for using the app.
1221
+ * It can be null if the user did not choose a measurement unit at the moment of this validation.
1222
+ */
670
1223
  export function checkBKLUnit(unit: BloodKetonesUnit | null): void {
671
1224
  if (unit !== null) {
672
1225
  const check = Object.values(BloodKetonesUnit).some((enumUnit): boolean =&gt; enumUnit === unit);
@@ -676,13 +1229,35 @@ export function checkBKLUnit(unit: BloodKetonesUnit | null): void {
676
1229
  }
677
1230
  }
678
1231
  &nbsp;
1232
+ /**
1233
+ * Check if the users preferred default reminder duration is valid by verifying that it is within the allowed range.
1234
+ *
1235
+ * Steps:
1236
+ * 1. Use isInRange() {@link Utils} to check if userReminder is in the interval [0; 6]. If it isn’t then throw an UserReminderError().
1237
+ * @param userReminder The default reminder time in hours from the user’s settings
1238
+ */
679
1239
  export function checkUserReminder(userReminder: number): void {
680
1240
  if (!Utils.isInRange(userReminder, REMINDER_HOURS_LIMITS)) {
681
1241
  throw UserReminderError();
682
1242
  }
683
1243
  }
684
1244
  &nbsp;
685
- function checkCalculatorParams(calculatorParams: IRecommendationParams): void {
1245
+ /**
1246
+ * Check validity of the values that are used as input for the actual insulin recommendation calculation.
1247
+ *
1248
+ * Steps:
1249
+ * 1. Call checkActivity() with the activity property of the calculatorParams as argument.
1250
+ * 2. Call checkCarbohydrates() with the carbohydrates property of the calculatorParams as argument.
1251
+ * 3. Call checkCurrentBGL() with the currentBGL property of the calculatorParams as argument.
1252
+ * 4. Call checkTargetBGL() with the targetBGL property of the calculatorParams as argument.
1253
+ * 5. Call checkInsulinToCarbRatio() with the carbohydrateRatio property of the calculatorParams as argument.
1254
+ * 6. Call checkInsulinSensitivity() with the insulinSensitivity property of the calculatorParams as argument.
1255
+ * 7. Call checkRecentBolus() with the recentBoluses property of the calculatorParams as argument.
1256
+ * 8. Call checkRecentBolusesInsulinDose() with the recentBoluses property of the calculatorParams as argument.
1257
+ * 9. Call checkRecentBolusesSecondsPassed() with the recentBoluses property of the calculatorParams as argument.
1258
+ * @param calculatorParams The inputs for calculation to be checked
1259
+ */
1260
+ export function checkCalculatorParams(calculatorParams: BolusCalculator.Types.IRecommendationParams): void {
686
1261
  checkActivity(calculatorParams.activity);
687
1262
  checkCarbohydrates(calculatorParams.carbohydrates);
688
1263
  checkCurrentBGL(calculatorParams.currentBGL);
@@ -694,7 +1269,19 @@ function checkCalculatorParams(calculatorParams: IRecommendationParams): void {
694
1269
  checkRecentBolusesSecondsPassed(calculatorParams.recentBoluses);
695
1270
  }
696
1271
  &nbsp;
697
- export function checkActivity(activity: IActivityParams | null): void {
1272
+ /**
1273
+ * Check the validity of the values inputted for physical activity
1274
+ *
1275
+ * Steps:
1276
+ * 1. If the activity argument is truthy do the following:
1277
+ * - Call checkActivityDate() with the activity as argument
1278
+ * - Call checkActivityDuration() with the activityDuration property of the activity as argument
1279
+ * - Call checkActivityIntensity() with the activityIntensity property of the activity as argument
1280
+ * - Call checkActivitySettings() with the activitySettings property of the activity as argument
1281
+ * - Call checkActivityTargetBGL() with the activitySettings.target property of the activity as argument
1282
+ * @param activity The activity that is associated with the calculation, or null if no activity was entered
1283
+ */
1284
+ export function checkActivity(activity: BolusCalculator.Types.IActivityParams | null): void {
698
1285
  if (activity) {
699
1286
  checkActivityDate(activity);
700
1287
  checkActivityDuration(activity.activityDuration);
@@ -704,34 +1291,74 @@ export function checkActivity(activity: IActivityParams | null): void {
704
1291
  }
705
1292
  }
706
1293
  &nbsp;
707
- export function checkRecentBolus(recentBoluses: Array&lt;IRecentBolus&gt;): void {
1294
+ /**
1295
+ * Check if the recentBoluses is in the right format.
1296
+ *
1297
+ * Steps:
1298
+ * 1. If recentBoluses is null or undefined throw a RecentBolusError.
1299
+ * @param recentBoluses List of all known bolus injections from the past 4 hours including insulin amount and how many seconds has passed since the injection.
1300
+ */
1301
+ export function checkRecentBolus(recentBoluses: Array&lt;BolusCalculator.Types.IRecentBolus&gt;): void {
708
1302
  if (recentBoluses === null || recentBoluses === undefined) {
709
1303
  throw RecentBolusError();
710
1304
  }
711
1305
  }
712
1306
  &nbsp;
713
- export function checkRecentBolusesInsulinDose(recentBoluses: Array&lt;IRecentBolus&gt;): void {
714
- recentBoluses.forEach((bolus: IRecentBolus): void =&gt; {
1307
+ /**
1308
+ * Check if the insulin dose in each of the given recent insulin injections is valid by verifying that they are within the allowed range.
1309
+ *
1310
+ * Steps
1311
+ * 1. If recentBoluses isn’t null, for each bolus element in recentBoluses
1312
+ * use isInRange() to check if the insulinDose parameter of the bolus element is in the interval [0; 50].
1313
+ * If it isn’t then throw an BolusInsulinDoseError().
1314
+ * @param recentBoluses List of all known bolus injections from the past 4 hours including insulin amount and how many seconds has passed since the injection.
1315
+ */
1316
+ export function checkRecentBolusesInsulinDose(recentBoluses: Array&lt;BolusCalculator.Types.IRecentBolus&gt;): void {
1317
+ recentBoluses.forEach((bolus: BolusCalculator.Types.IRecentBolus): void =&gt; {
715
1318
  if (!Utils.isInRange(bolus.insulinDose, INSULIN_DOSE_LIMITS)) {
716
1319
  throw BolusInsulinDoseError();
717
1320
  }
718
1321
  });
719
1322
  }
720
1323
  &nbsp;
721
- export function checkRecentBolusesSecondsPassed(recentBoluses: Array&lt;IRecentBolus&gt;): void {
722
- recentBoluses.forEach((bolus: IRecentBolus): void =&gt; {
1324
+ /**
1325
+ * Check if the amount of time since each recent insulin injection is valid by verifying that they are within the allowed range.
1326
+ *
1327
+ * Steps:
1328
+ * 1. If recentBoluses isn’t null, for each bolus element in recentBoluses
1329
+ * use isInRange() to check if the secondsPassed parameter of the bolus element is in the interval [0; 1440].
1330
+ * If it isn’t then throw an BolusInsulinSecondsPassedError().
1331
+ * @param recentBoluses List of all known bolus injections from the past 4 hours including insulin amount and how many seconds has passed since the injection.
1332
+ */
1333
+ export function checkRecentBolusesSecondsPassed(recentBoluses: Array&lt;BolusCalculator.Types.IRecentBolus&gt;): void {
1334
+ recentBoluses.forEach((bolus: BolusCalculator.Types.IRecentBolus): void =&gt; {
723
1335
  if (!Utils.isInRange(bolus.secondsPassed, BOLUS_SECONDS_PASSED_LIMITS)) {
724
1336
  throw BolusInsulinSecondsPassedError();
725
1337
  }
726
1338
  });
727
1339
  }
728
1340
  &nbsp;
1341
+ /**
1342
+ * Check if the duration of an entered activity is valid by verifying that it is within the allowed range.
1343
+ *
1344
+ * Steps:
1345
+ * 1. Use isInRange() to check if activityDuration is in the interval [0; 60]. If it isn’t then throw an ActivityDurationError().
1346
+ * @param activityDuration The duration of an entered physical activity in minutes.
1347
+ */
729
1348
  export function checkActivityDuration(activityDuration: number): void {
730
1349
  if (!Utils.isInRange(activityDuration, ACTIVITY_DURATION_MINUTES_LIMITS)) {
731
1350
  throw ActivityDurationError();
732
1351
  }
733
1352
  }
734
1353
  &nbsp;
1354
+ /**
1355
+ * Check if the activity intensity parameter is valid.
1356
+ *
1357
+ * Steps:
1358
+ * 1. Search in the {@link ActivityIntensity} enum values the activityIntensity provided as an argument.
1359
+ * If activityIntensity is not present in the ActivityIntensity enum values array, throw an ActivityIntensityError.
1360
+ * @param activityIntensity The intensity of the entered activity.
1361
+ */
735
1362
  export function checkActivityIntensity(activityIntensity: Activity.Enums.ActivityIntensity): void {
736
1363
  const check = Object.values(Activity.Enums.ActivityIntensity).some(
737
1364
  (method): boolean =&gt; method === activityIntensity?.toLowerCase(),
@@ -741,6 +1368,14 @@ export function checkActivityIntensity(activityIntensity: Activity.Enums.Activit
741
1368
  }
742
1369
  }
743
1370
  &nbsp;
1371
+ /**
1372
+ * Check if the activity type parameter is valid.
1373
+ *
1374
+ * Steps:
1375
+ * 1. Search in the {@link ActivityEnum} enum values the activityType provided as an argument.
1376
+ * If activityType is not present in the ActivityEnum enum values array, throw an ActivityTypeError.
1377
+ * @param activityType The type of the entered activity.
1378
+ */
744
1379
  export function checkActivityType(activityType: Activity.Enums.ActivityEnum | null): void {
745
1380
  const check = Object.values(Activity.Enums.ActivityEnum).some((method): boolean =&gt; method === activityType);
746
1381
  if (!check) {
@@ -748,7 +1383,16 @@ export function checkActivityType(activityType: Activity.Enums.ActivityEnum | nu
748
1383
  }
749
1384
  }
750
1385
  &nbsp;
751
- export function checkActivityDate(activity: IActivityParams): void {
1386
+ /**
1387
+ * Verify that the ending time of the given activity has not been passed by more than 4 hours and 10 minutes.
1388
+ *
1389
+ * Steps:
1390
+ * 1. Use the moment library to create an object that represents the start time of the activity by loading from the activityDate property of the activity argument.
1391
+ * Add to the object the duration of the activity plus 4 hours and 10 minutes and save the resulting date as maximumDate.
1392
+ * 2. Check if the current time is after maximumDate throw an ActivityDateError().
1393
+ * @param activity The activity for which we want to check the date
1394
+ */
1395
+ export function checkActivityDate(activity: BolusCalculator.Types.IActivityParams): void {
752
1396
  const maximumDate = moment
753
1397
  .utc(activity.activityDate)
754
1398
  .add(activity.activityDuration + ONE_HOUR_MINUTES * 4 + ACTIVITY_BUFFER_MINUTES, `minutes`);
@@ -757,7 +1401,16 @@ export function checkActivityDate(activity: IActivityParams): void {
757
1401
  }
758
1402
  }
759
1403
  &nbsp;
760
- export function checkActivitySettings(activitySettings: ActivitySettings): void {
1404
+ /**
1405
+ * Steps:
1406
+ * 1. Iterate over all combinations of activity intensities and activity duration intervals and for each one:
1407
+ * - If the current intensity is hard and the duration is long (fromFortysix) then check that the value from activitySettings
1408
+ * for the current combination of activity intensity is either null or in the interval [0; 1]
1409
+ * - If the current intensity isn’t hard or the duration isn’t long then use isInRange() to check that the value from activitySettings
1410
+ * for the current combination of activity intensity is in the interval [0; 1].
1411
+ * @param activitySettings The user’s settings for doing physical activity
1412
+ */
1413
+ export function checkActivitySettings(activitySettings: Activity.Types.ActivitySettings): void {
761
1414
  for (const intensity of Object.keys(activitySettings) as Array&lt;Activity.Enums.ActivityIntensity&gt;) {
762
1415
  const reductionIntervals = activitySettings[intensity];
763
1416
  for (const interval of Object.keys(reductionIntervals) as Array&lt;keyof typeof reductionIntervals&gt;) {
@@ -774,12 +1427,26 @@ export function checkActivitySettings(activitySettings: ActivitySettings): void
774
1427
  }
775
1428
  }
776
1429
  &nbsp;
1430
+ /**
1431
+ * Check if the target blood glucose level for doing exercise is valid by verifying that it is within the allowed range.
1432
+ *
1433
+ * Steps:
1434
+ * 1. Use isInRange() to check if activitySettingsTargetBGL is in the interval [5.0; 13.9]. If it isn’t then throw an ActivityTargetBGLError().
1435
+ * @param activitySettingsTargetBGL The target blood glucose level for doing exercise in mmol/L from the user’s settings.
1436
+ */
777
1437
  export function checkActivityTargetBGL(activitySettingsTargetBGL: number): void {
778
1438
  if (!Utils.isInRange(activitySettingsTargetBGL, ACTIVITY_TARGET_BGL_MMOL_LIMITS)) {
779
1439
  throw ActivityTargetBGLError();
780
1440
  }
781
1441
  }
782
1442
  &nbsp;
1443
+ /**
1444
+ * Check if the current blood glucose level is valid by verifying that it is either null or within the allowed range.
1445
+ * Steps:
1446
+ * 1. If currentBGL is not null then use isInRange() to check if currentBGL is in the interval [1.1; 33.3].
1447
+ * If it isn’t then throw a CurrentBGLError().
1448
+ * @param currentBGL The current blood glucose level in mmol/L entered by the user, or null to indicate that the value is unknown because it wasn’t given.
1449
+ */
783
1450
  export function checkCurrentBGL(currentBGL: number | null): void {
784
1451
  if (currentBGL !== null) {
785
1452
  if (!Utils.isInRange(currentBGL, CURRENT_BGL_MMOL_LIMITS)) {
@@ -788,12 +1455,26 @@ export function checkCurrentBGL(currentBGL: number | null): void {
788
1455
  }
789
1456
  }
790
1457
  &nbsp;
1458
+ /**
1459
+ * Check if the target blood glucose level is valid by verifying that it is within the allowed range.
1460
+ *
1461
+ * Steps:
1462
+ * 1. Use isInRange() to check if targetBGL is in the interval [5.0; 13.9]. If it isn’t then throw a TargetBGLError().
1463
+ * @param targetBGL The target blood glucose level in mmol/L extracted from the user’s settings depending on the time of day.
1464
+ */
791
1465
  export function checkTargetBGL(targetBGL: number): void {
792
1466
  if (!Utils.isInRange(targetBGL, TARGET_BGL_MMOL_LIMITS)) {
793
1467
  throw TargetBGLError();
794
1468
  }
795
1469
  }
796
1470
  &nbsp;
1471
+ /**
1472
+ * Check if the current blood ketones concentration is valid by verifying that it is either null or within the allowed range.
1473
+ *
1474
+ * Steps:
1475
+ * 1. If currentBKL is not null then use isInRange() to check if currentBGL is in the interval [0.0; 8.0]. If it isn’t then throw a CurrentBKLError().
1476
+ * @param currentBKL The current blood ketones concentration in mmol/L entered by the user, or null to indicate that the value is unknown because it wasn’t given.
1477
+ */
797
1478
  export function checkBloodKetoneLevel(currentBKL: number | null): void {
798
1479
  if (currentBKL !== null) {
799
1480
  if (!Utils.isInRange(currentBKL, CURRENT_BKL_MMOL_LIMITS)) {
@@ -802,18 +1483,39 @@ export function checkBloodKetoneLevel(currentBKL: number | null): void {
802
1483
  }
803
1484
  }
804
1485
  &nbsp;
1486
+ /**
1487
+ * Check if the insulin sensitivity is valid by verifying that it is within the allowed range.
1488
+ *
1489
+ * Steps:
1490
+ * 1. Use isInRange() to check if insulinSensitivity is in the interval [0.3; 10]. If it isn’t then throw an InsulinSensitivityError().
1491
+ * @param insulinSensitivity The insulin sensitivity in (mmol/L)/IU extracted from the user’s settings depending on the time of day.
1492
+ */
805
1493
  export function checkInsulinSensitivity(insulinSensitivity: number): void {
806
1494
  if (!Utils.isInRange(insulinSensitivity, INSULIN_SENSITIVITY_MMOL_LIMITS)) {
807
1495
  throw InsulinSensitivityError();
808
1496
  }
809
1497
  }
810
1498
  &nbsp;
1499
+ /**
1500
+ * Check if the insulin-to-carbs ratio is valid by verifying that it is within the allowed range.
1501
+ *
1502
+ * Steps:
1503
+ * 1. Use isInRange() to check if insulinToCarbRatio is in the interval [1; 50]. If it isn’t then throw an InsulinToCarbsRatioError().
1504
+ * @param insulinToCarbRatio The insulin-to-carbs ratio in g/IU extracted from the user’s settings depending on the time of day.
1505
+ */
811
1506
  export function checkInsulinToCarbRatio(insulinToCarbRatio: number): void {
812
1507
  if (!Utils.isInRange(insulinToCarbRatio, INSULIN_TO_CARBS_RATIO_LIMITS)) {
813
1508
  throw InsulinToCarbsRatioError();
814
1509
  }
815
1510
  }
816
1511
  &nbsp;
1512
+ /**
1513
+ * Check if the entered amount of carbohydrates is valid by verifying that it is within the allowed range.
1514
+ *
1515
+ * Steps:
1516
+ * 1. Use isInRange() to check if carbohydrates is in the interval [0; 300]. If it isn’t then throw a CarbohydrateLimitError().
1517
+ * @param carbohydrates The amount of carbohydrates that the user is eating in grams.
1518
+ */
817
1519
  export function checkCarbohydrates(carbohydrates: number): void {
818
1520
  if (!Utils.isInRange(carbohydrates, CARBOHYDRATES_LIMTS)) {
819
1521
  throw CarbohydrateLimitError();
@@ -826,7 +1528,7 @@ export function checkCarbohydrates(carbohydrates: number): void {
826
1528
  <div class='footer quiet pad2 space-top1 center small'>
827
1529
  Code coverage generated by
828
1530
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
829
- at Tue Jul 06 2021 09:58:23 GMT+0000 (Coordinated Universal Time)
1531
+ at Thu Jul 29 2021 07:55:43 GMT+0000 (Coordinated Universal Time)
830
1532
  </div>
831
1533
  </div>
832
1534
  <script src="../../prettify.js"></script>