Implement minus 8 day rule

This commit is contained in:
Julia Friesel
2018-07-13 07:14:36 +02:00
parent d5aa903da4
commit 7382bff0dd
5 changed files with 308 additions and 85 deletions
+26
View File
@@ -0,0 +1,26 @@
import { LocalDate } from 'js-joda'
import getNfpStatus from './index'
export default function (previousCycles) {
const fhms = previousCycles
.map(cycle => {
const status = getNfpStatus({ cycle })
if (status.temperatureShift) {
const day = status.temperatureShift.firstHighMeasurementDay
const firstCycleDayDate = LocalDate.parse(cycle[0].date)
const fhmDate = LocalDate.parse(day.date)
return fhmDate.compareTo(firstCycleDayDate) + 1
}
return null
})
.filter(val => typeof val === 'number')
const preOvuLength = Math.min(...fhms) - 8
// pre ovu length may only be lengthened if we have more than 12 previous fhms
// if pre ovu length is less than 5, it shortened even with fewer prev fhms
if (preOvuLength < 5) return preOvuLength
if (fhms.length >= 12) return preOvuLength
return null
}
+11 -9
View File
@@ -1,20 +1,21 @@
import { LocalDate } from "js-joda"
import apply8DayRule from './minus-8-day-rule'
export default function(cycle, previousCycles) {
// TODO handle no previous cycles
let preOvuPhaseLength = 5
//TODO make sure it handles weird cases like fhm < 9
const minus8DayRuleResult = apply8DayRule(previousCycles)
if (minus8DayRuleResult) preOvuPhaseLength = minus8DayRuleResult
const startDate = LocalDate.parse(cycle[0].date)
const preOvuPhaseEndDate = startDate.plusDays(preOvuPhaseLength - 1).toString()
const maybePreOvuDays = cycle.slice(0, 5).filter(d => d.date <= preOvuPhaseEndDate)
const preOvuEndDate = startDate.plusDays(preOvuPhaseLength - 1).toString()
const maybePreOvuDays = cycle.slice(0, preOvuPhaseLength).filter(d => {
return d.date <= preOvuEndDate
})
const preOvulatoryDays = getDaysUntilFertileMucus(maybePreOvuDays)
let endDate
if (preOvulatoryDays.length === maybePreOvuDays.length) {
endDate = preOvuPhaseEndDate
endDate = preOvuEndDate
} else {
endDate = preOvulatoryDays[preOvulatoryDays.length - 1].date
}
@@ -31,11 +32,12 @@ export default function(cycle, previousCycles) {
}
function getDaysUntilFertileMucus(days) {
const firstFertileMucusDayIndex = days.findIndex(day => day.mucus && day.mucus.value > 1)
const firstFertileMucusDayIndex = days.findIndex(day => {
return day.mucus && day.mucus.value > 1
})
if (firstFertileMucusDayIndex > -1) {
return days.slice(0, firstFertileMucusDayIndex)
}
return days
}
function apply8DayRule(previousCycles) {}
}