Ramda - Validating a Number Sequence

I had to make sure I wasn't missing any events. So I built a concept with a number that counts up with every event. If the numbers aren't consecutive, I know the collection isn't valid.

The solution uses Ramda for functional validation: events get sorted, the numbers extracted, and a reduce checks whether each number is an increment over the previous one.

Dataset

const data = {
'transactions': [{
'transaction': 'A',
'events': [{
'number': 0 // <-- Valid
}, {
'number': 1 // <-- Valid
}]
}, {
'transaction': 'C',
'events': [{
'number': 5 // <-- Valid
}, {
'number': 6 // <-- Valid
}]
}, {
'transaction': 'B',
'events': [{
'number': 3,
}, {
'number': 10, // <-- Nicht valid weil Events fehlen
}]
}]
};

Code

const eventsAreIncrementing = R.pipe(
R.sortBy(R.prop('number')), // Events sortieren
R.map(R.prop('number')), // Liste der Event-Nummern holen
R.reduce((acc, current) => {
if (acc === false) return false; // Skip wenn wir schon einen fehlerhaften Wert gefunden haben
// Für das erste Element das aktuelle zurückgeben
// oder
// Checken ob das aktuelle Element ein Increment vom vorherigen ist
if (acc === null || acc + 1 === current) { return current; }
return false; // False zurückgeben um zu signalisieren dass die Sequenz nicht um 1 inkrementiert
}, null),
R.is(Number) // Reduce gibt false zurück wenn die Nummern nicht aufeinanderfolgend sind, sonst die letzte Nummer
// Deshalb check ich ob das Ergebnis eine Nummer ist
);

const allEventsAreIncrementing = R.pipe(
R.map(R.prop('events')),
R.all(eventsAreIncrementing)
);

const valid = allEventsAreIncrementing(data.transactions);