Return evaluation completed day from mucus eval

This commit is contained in:
Julia Friesel
2018-07-10 10:55:33 +02:00
parent 9102bce7ce
commit 77ad491d30
2 changed files with 25 additions and 15 deletions
+20 -14
View File
@@ -2,31 +2,37 @@ export default function (cycleDays, tempEvalEndIndex) {
const mucusDays = cycleDays.filter(day => day.mucus && !day.mucus.exclude)
const bestQuality = Math.max(...mucusDays.map(day => day.mucus.value))
const mucusPeak = cycleDays.find((day, i) => {
if (!mucusDays.includes(day) || day.mucus.value !== bestQuality) return false
for (let i = 0; i < mucusDays.length; i++) {
const day = mucusDays[i]
if (day.mucus.value !== bestQuality) continue
// sensiplan says the three following days must be of lower quality
// AND no best quality day may occur until temperature evaluation has
// been completed
const mucusDaysIndex = mucusDays.indexOf(day)
const threeFollowingDays = mucusDays.slice(mucusDaysIndex + 1, mucusDaysIndex + 4)
if (threeFollowingDays.length < 3) return false
const threeFollowingDays = mucusDays.slice(i + 1, i + 4)
if (threeFollowingDays.length < 3) continue
const bestQualityOccurringIn3FollowingDays = threeFollowingDays.some(day => day.mucus.value >= bestQuality)
if (bestQualityOccurringIn3FollowingDays) return false
if (bestQualityOccurringIn3FollowingDays) continue
// FIXME mucus peak can be same day as first higher measurement
const cycleDayIndex = cycleDays.indexOf(day)
const relevantDays = cycleDays
.slice(i + 1, tempEvalEndIndex + 1)
.slice(cycleDayIndex + 1, tempEvalEndIndex + 1)
.filter(day => day.mucus && !day.mucus.exclude)
return relevantDays.every(day => day.mucus.value < bestQuality)
})
const evaluationCompleteDay = relevantDays.length > 3 ?
relevantDays[relevantDays.length - 1] : threeFollowingDays[threeFollowingDays.length - 1]
if (!mucusPeak) return { detected: false }
return {
detected: true,
mucusPeak
if (relevantDays.every(day => day.mucus.value < bestQuality)) {
return {
detected: true,
mucusPeak: day,
evaluationCompleteDay
}
}
}
return { detected: false }
}
+5 -1
View File
@@ -16,12 +16,16 @@ describe('sympto', () => {
it('detects mucus shift correctly', function () {
const values = [0, 0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 2, 2, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0]
.map(turnIntoCycleDayObject)
const status = getMucusStatus(values, 30)
const status = getMucusStatus(values, 12)
expect(status).to.eql({
detected: true,
mucusPeak: {
date: 10,
mucus: { value: 3 }
},
evaluationCompleteDay: {
date: 13,
mucus: { value: 0 }
}
})
})