Charter billing had a recurring argument: how many hours was that flight, really? Crew allowances had the same argument whenever legs overlapped on the same day.
Part of the answer is vocabulary. Each leg stores four Zulu-time timestamps — wheels up and down, chocks off and on — and flight hours and block hours are computed separately, because they are genuinely different quantities. Billing runs on contract hours: flight hours plus an agreed additional-minutes allowance. Correct one chock time and the flight, and its journal entry, reprice.
Crew allowances count calendar days across all of a crew member's legs, after converting to local time. Two legs on the same day are paid once, and a 22:00Z departure lands on the day the allowance is actually owed.
The other part is how a batch behaves. Stopping at the first incomplete flight log rolls everything back and tells the user almost nothing. Confirmation now processes everything it can, counts why the rest failed — a missing journal, a missing account, a missing hourly cost, a zero amount — and reports those reasons in one message.
Billing and crew pay now trace back to the same source of truth, and a batch that can't finish tells you what to fix.
Read the case study: One source of truth for billable flight hours and crew pay