Cadastrar / editar passeio

Gera um pas:<slug> conforme ph:TourShape e envia pra POST /upload-tour. Campos com "+ adicionar" suportam criar entidades novas (séries, pessoas, organizadores, provedores) inline.

Identificação
Vira pas:<slug>. Já vem preenchido com um slug aleatório — pode trocar (sem _). Edição: campo travado.
Formato 24h: AAAA-MM-DD HH:MM — ou escolha no 📅.
Upload vai pra tour_assets/<id>/announcement.<ext>. Vira schema:image <URL> no TTL automaticamente.
Séries (uma ou mais) + edição
Cada linha vira ph:inSeriesEdition <…/passeio/<série>/<n>> (uma edição de série). Vira schema:organizer. Novas: viram phd:org_<slug> a schema:Organization.
Rota
Pessoas Vira prov:wasAttributedTo. Novas pessoas: digite o nome e Enter.
Métricas estimadas (antes do passeio)
Vira ph:energyEstimate.
Métricas reais (após o passeio)
Vira ph:departedAt. Formato 24h: AAAA-MM-DD HH:MM — ou 📅.
Vira ph:arrivedAt. Formato 24h: AAAA-MM-DD HH:MM — ou 📅.
Chegou em − Partiu em. Com os dois horários é calculado (travado); com um só, digite e o outro é deduzido; sem nenhum, vira ph:totalDuration.
Vira ph:movingDuration "PT…"^^xsd:duration.
Vira ph:departureLocation. Texto livre.
Vira ph:arrivalLocation. Texto livre.
Vira ph:countAttendee.
Vira ph:countNewcomer.
Vira ph:measuredEnergy.
Cada um vira ph:hadBonde true / ph:hadRain true. Marcação ausente = omitido (não negado). Link da gravação GPS real de quem pedalou (RideWithGPS/Strava trip) — distinta da rota planejada acima. Cada uma vira ph:linkActivity; usado por scripts de backfill pra extrair métricas reais (partida/chegada/duração/energia medida).
Incidentes Cada entrada vira ph:hadIncident "..."@pt.