mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-12 22:13:05 +00:00
fix(C163): calibra link do vídeo do acervo ao t=608s da sessão
This commit is contained in:
parent
bbd147fffb
commit
19c403f0dc
4 changed files with 13 additions and 11 deletions
|
|
@ -180,10 +180,11 @@ cacheado em `data/relatorios-cidade/<base>.emendas.json` para replay.
|
|||
(passagem que cita a cidade ou, se o nome não aparece nos trechos, a marcação
|
||||
do acervo com o nº de municípios), mais **Vídeo** (YouTube no trecho da fala
|
||||
— `youtubeExcerptStartSeconds` = época do trecho (`excerptTMs`) − início da
|
||||
sessão, com folga de 20s no link; o `speechAt` da API é o horário do slot,
|
||||
não o início real; fallback para o VOD da Câmara, que é o clipe do próprio
|
||||
trecho) e **Transcrição** (PDF do Diário) quando existirem ·
|
||||
`11. Notícias e imprensa` ·
|
||||
sessão, calibrado contra o vídeo real: o da sessão de 13/03/2018 começa ~37s
|
||||
depois do `eventStartAt`, então 645s viram `t=608s` (`YOUTUBE_VIDEO_OFFSET_SECONDS`);
|
||||
o `speechAt` da API é o horário do slot, não o início real; fallback para o
|
||||
VOD da Câmara, que é o clipe do próprio trecho) e **Transcrição** (PDF do
|
||||
Diário) quando existirem · `11. Notícias e imprensa` ·
|
||||
`12. Panorama regional` · `13. Abordagem sugerida (personas)` · `14. Fontes e
|
||||
limites`.
|
||||
- **Links clicáveis:** todo URL no PDF é um link (`<a href>`): células de
|
||||
|
|
|
|||
1
docs/changelog/2026-09-15-c163-falas-calibracao-video.md
Normal file
1
docs/changelog/2026-09-15-c163-falas-calibracao-video.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
**C163 — calibração do link do vídeo: t=608s (2026-09-15):** verificação no vídeo real (`youtube.com/live/2cX_gKkJH7Q?t=608`) mostrou que a sessão de 13/03/2018 começa ~37s depois do `eventStartAt`; o trecho da Câmara (645s no relógio da sessão) toca em 608s. O builder trocou a folga genérica de 20s por `YOUTUBE_VIDEO_OFFSET_SECONDS = 37`, calibrado contra essa sessão, e o link da fala 641 ficou `youtube.com/watch?v=2cX_gKkJH7Q&t=608s`. Unit 3118/3118, `tsc`/eslint verdes; PDF regerado.
|
||||
|
|
@ -854,12 +854,12 @@ const buildTransportSection = ({ research }) =>
|
|||
|
||||
/**
|
||||
* YouTube link starts at the Câmara excerpt of the speech (`excerptTMs` −
|
||||
* session start): `speechAt` is the API slot clock, not when the deputy
|
||||
* actually speaks (for speech 641 the previous speaker is still on at
|
||||
* `speechAt`). A short lead-in keeps the link from starting already inside the
|
||||
* speech when the session video drifts a few seconds.
|
||||
* session start), calibrated by the live video: the 2018-03-13 session video
|
||||
* starts ~37s after `eventStartAt`, so the excerpt at 645s plays at 608s
|
||||
* (`youtube.com/live/2cX_gKkJH7Q?t=608`, checked in the browser). `speechAt` is
|
||||
* the API slot clock, not when the deputy speaks.
|
||||
*/
|
||||
const YOUTUBE_LEAD_IN_SECONDS = 20
|
||||
const YOUTUBE_VIDEO_OFFSET_SECONDS = 37
|
||||
|
||||
const withYoutubeTimestamp = (url, offsetSeconds) => {
|
||||
if (!url) return null
|
||||
|
|
@ -870,7 +870,7 @@ const withYoutubeTimestamp = (url, offsetSeconds) => {
|
|||
|
||||
const youtubeStartSeconds = (row) =>
|
||||
Number.isFinite(row.youtubeExcerptStartSeconds)
|
||||
? Math.max(0, Math.floor(row.youtubeExcerptStartSeconds) - YOUTUBE_LEAD_IN_SECONDS)
|
||||
? Math.max(0, Math.floor(row.youtubeExcerptStartSeconds) - YOUTUBE_VIDEO_OFFSET_SECONDS)
|
||||
: null
|
||||
|
||||
const buildSpeechesSection = ({ snapshot }) => {
|
||||
|
|
|
|||
|
|
@ -445,7 +445,7 @@ describe('buildCityReport', () => {
|
|||
expect(falas.columns!.find((column) => column.key === 'mention')!.width).toBe(27)
|
||||
expect(rows[0].description).toBe('Resumo da fala')
|
||||
expect(rows[0].mention).toContain('cita Feira de Santana')
|
||||
expect(rows[0].video).toBe('https://youtube.test/video?t=625s')
|
||||
expect(rows[0].video).toBe('https://youtube.test/video?t=608s')
|
||||
expect(rows[0].transcript).toBe('https://camara.test/discurso')
|
||||
expect(rows[1].description).toBe('Saúde indígena na Bahia')
|
||||
expect(rows[1].mention).toContain('nome não localizado nos trechos')
|
||||
|
|
|
|||
Loading…
Reference in a new issue