Use per-day available_rooms from forecasting API (overflow excluded)

Switch from a single total_rooms scalar to rm.available_rooms per day,
now that the forecasting public API returns it from daily_occupancy.
Fixes worksheet Avail column showing 80 (total physical beds) instead
of the correct occupancy-reportable room count.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
jtricerolph 2026-07-20 10:51:58 +00:00
parent fc903564fb
commit 822ce2f970

View file

@ -53,7 +53,7 @@ async function fetchMonthFromApi(year, month, lastDayNum) {
for (const d of revData.data) revMap[d.date] = d
const roomsMap = {}
for (const d of roomsData.data) roomsMap[d.date] = d
return { revMap, roomsMap, available: roomsData.total_rooms }
return { revMap, roomsMap }
}
export async function directorsForecastRoutes(fastify) {
@ -71,7 +71,7 @@ export async function directorsForecastRoutes(fastify) {
const today = new Date().toISOString().split('T')[0]
const sessionRate = 135
const [{ session, overrideMap }, { revMap, roomsMap, available }] = await Promise.all([
const [{ session, overrideMap }, { revMap, roomsMap }] = await Promise.all([
getSessionAndOverrides(year, month),
fetchMonthFromApi(year, month, lastDayNum),
])
@ -89,8 +89,9 @@ export async function directorsForecastRoutes(fastify) {
const isToday = dateStr === today
const dow = new Date(dateStr + 'T00:00:00').getDay()
const otbRooms = rm.otb_rooms ?? 0
const otbNetRev = rev.accom?.otb ?? 0
const available = rm.available_rooms ?? 0
const otbRooms = rm.otb_rooms ?? 0
const otbNetRev = rev.accom?.otb ?? 0
const avgRateNet = otbRooms > 0 ? otbNetRev / otbRooms : null
// ML pickup suggestion from the forecasting model
@ -187,7 +188,7 @@ export async function directorsForecastRoutes(fastify) {
const month = parseInt(request.params.month)
const lastDayNum = new Date(year, month, 0).getDate()
const [{ session, overrideMap }, { revMap, roomsMap, available }] = await Promise.all([
const [{ session, overrideMap }, { revMap, roomsMap }] = await Promise.all([
getSessionAndOverrides(year, month),
fetchMonthFromApi(year, month, lastDayNum),
])
@ -213,9 +214,10 @@ export async function directorsForecastRoutes(fastify) {
const rm = roomsMap[dateStr] || {}
const ovr = overrideMap[dateStr] || {}
const isPast = rev.is_past ?? false
const otbRooms = rm.otb_rooms ?? 0
const otbNetRev = rev.accom?.otb ?? 0
const isPast = rev.is_past ?? false
const available = rm.available_rooms ?? 0
const otbRooms = rm.otb_rooms ?? 0
const otbNetRev = rev.accom?.otb ?? 0
const pickupRooms = ovr.pickup_rooms != null ? parseInt(ovr.pickup_rooms) : 0
const dayRate = ovr.pickup_avg_rate != null ? parseFloat(ovr.pickup_avg_rate) : sessionRate
const totalRooms = otbRooms + pickupRooms