Skip to content

Commit 7a0de7b

Browse files
authored
fix: measure separator gap presence in stint inference (CM-1143) (#4085)
1 parent 8279254 commit 7a0de7b

1 file changed

Lines changed: 14 additions & 17 deletions

File tree

services/libs/common_services/src/services/member-organization.ts

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -201,30 +201,27 @@ export function inferMemberOrganizationStintChanges(
201201
continue
202202
}
203203

204-
// 5. Only split when another org clearly sits between this stint and the new date.
205-
// Overlapping orgs are treated as concurrent evidence, not a break in the stint.
204+
// 5. Only split when another org has meaningful exclusive presence in the gap
205+
// between the closest same-org stint and the new date (>30 days).
206+
// Concurrent/overlapping orgs that barely extend into the gap are not career breaks.
206207
const isForward = targetDate > neighbor.dateEnd
208+
const gapStart = isForward ? neighbor.dateEnd : targetDate
209+
const gapEnd = isForward ? targetDate : neighbor.dateStart
210+
207211
const hasSeparator = stints.some((s) => {
208-
if (
209-
s.organizationId === organizationId ||
210-
!s.dateStart ||
211-
!s.dateEnd ||
212-
diff(s.dateStart, s.dateEnd) < 30
213-
) {
212+
if (s.organizationId === organizationId || !s.dateStart || !s.dateEnd) {
214213
return false
215214
}
216215

217-
if (isForward) {
218-
return (
219-
(s.dateStart > neighbor.dateEnd && s.dateStart <= targetDate) ||
220-
(s.dateEnd > neighbor.dateEnd && s.dateEnd <= targetDate)
221-
)
216+
// Wide umbrella orgs that fully wrap the neighbor are concurrent, not career breaks
217+
if (s.dateStart <= neighbor.dateStart && s.dateEnd >= neighbor.dateEnd) {
218+
return false
222219
}
223220

224-
return (
225-
(s.dateStart >= targetDate && s.dateStart < neighbor.dateStart) ||
226-
(s.dateEnd >= targetDate && s.dateEnd < neighbor.dateStart)
227-
)
221+
const overlapStart = s.dateStart > gapStart ? s.dateStart : gapStart
222+
const overlapEnd = s.dateEnd < gapEnd ? s.dateEnd : gapEnd
223+
224+
return overlapStart < overlapEnd && diff(overlapStart, overlapEnd) > 30
228225
})
229226

230227
if (hasSeparator) {

0 commit comments

Comments
 (0)