@@ -228,6 +228,7 @@ async function getYasnoData(url, label) {
228228
229229// --- ТРАНСФОРМАЦІЇ ---
230230
231+ // 🔥 ОНОВЛЕНА ЛОГІКА ДЛЯ ПОЛТАВИ ТА ІНШИХ JSON 🔥
231232function transformToSvitloFormat ( dtekRaw ) {
232233 let daysData = null ;
233234 if ( dtekRaw ?. data ?. fact ?. data ) daysData = dtekRaw . data . fact . data ;
@@ -248,21 +249,69 @@ function transformToSvitloFormat(dtekRaw) {
248249 if ( ! scheduleMap [ groupKey ] ) scheduleMap [ groupKey ] = { } ;
249250 if ( ! scheduleMap [ groupKey ] [ dateStr ] ) scheduleMap [ groupKey ] [ dateStr ] = { } ;
250251
252+ // Змінна для зберігання статусу ПОПЕРЕДНЬОЇ години
253+ // За замовчуванням "yes", щоб не малювати відключення на 00:00 без причини
254+ let prevStatus = "yes" ;
255+
251256 for ( let h = 1 ; h <= 24 ; h ++ ) {
252257 const status = hours [ h . toString ( ) ] ;
253258 const hourIndex = h - 1 ;
254259 const hh = String ( hourIndex ) . padStart ( 2 , "0" ) ;
255260
256- let val00 = 1 , val30 = 1 ;
261+ let val00 = 1 ; // 1 = Є світло
262+ let val30 = 1 ; // 1 = Є світло
263+
257264 switch ( status ) {
258- case "yes" : val00 = 1 ; val30 = 1 ; break ;
259- case "no" : val00 = 2 ; val30 = 2 ; break ;
260- case "first" : val00 = 2 ; val30 = 1 ; break ;
261- case "second" : val00 = 1 ; val30 = 2 ; break ;
262- case "default" : val00 = 1 ; val30 = 1 ;
265+ case "yes" :
266+ val00 = 1 ; val30 = 1 ;
267+ break ;
268+
269+ case "no" :
270+ val00 = 2 ; val30 = 2 ; // 2 = Немає світла
271+ break ;
272+
273+ // --- Точні відключення (без "m") - це точно НЕМАЄ ---
274+ case "first" : // Немає 00-30
275+ val00 = 2 ; val30 = 1 ;
276+ break ;
277+
278+ case "second" : // Немає 30-60
279+ val00 = 1 ; val30 = 2 ;
280+ break ;
281+
282+ // --- Сірі зони (з "m") - вважаємо, що світло Є (1) ---
283+
284+ case "mfirst" :
285+ // "Можливе 1-ша половина". Вважаємо як Є (1).
286+ // Навіть якщо до цього було "no", mfirst означає початок слота зі світлом.
287+ val00 = 1 ; val30 = 1 ;
288+ break ;
289+
290+ case "msecond" :
291+ // "Можливе 2-га половина".
292+ // Друга половина (30-60) - це сіра зона, тому вважаємо Є (1).
293+ val30 = 1 ;
294+
295+ // Перша половина (00-30) залежить від попередньої години:
296+ if ( prevStatus === "no" ) {
297+ // Якщо минула година була "чорна", то перші 30 хв поточної -
298+ // це гарантоване продовження відключення.
299+ val00 = 2 ;
300+ } else {
301+ // Інакше все ок, світло є.
302+ val00 = 1 ;
303+ }
304+ break ;
305+
306+ default :
307+ val00 = 1 ; val30 = 1 ;
263308 }
309+
264310 scheduleMap [ groupKey ] [ dateStr ] [ `${ hh } :00` ] = val00 ;
265311 scheduleMap [ groupKey ] [ dateStr ] [ `${ hh } :30` ] = val30 ;
312+
313+ // Оновлюємо статус для наступної ітерації
314+ prevStatus = status ;
266315 }
267316 }
268317 }
0 commit comments