Delt arrangement – arrangørveiledning
⚠️ Skjermbilder: Lokalt miljø er ikke tilgjengelig for å ta skjermbilder uten å rulle ut ekstern infrastruktur. Denne veiledningen beskriver faktisk implementert atferd. Skjermbilder legges til i en oppfølging når et staging-miljø er tilgjengelig.
Et delt arrangement lar ett arrangøreid konsert distribueres av to eller flere uavhengige organisasjoner — hver selger mot den samme virkelige forestillingen på samme sted, med delt fysisk kapasitet, mens de beholder sine egne selgere, salg, kunder og detaljerte rapporter. Du oppretter arrangementet, inviterer deltakere, styrer kapasitetspolicyen, administrerer tillatelser og ser det samlede bildet.
Din rolle
Organisasjonen din er arrangørorganisasjonen. Du (og eventuelle andre brukere du utpeker) er SharedEventOwner (eiere av delt arrangement) — navngitte brukere med full myndighet over det delte arrangementet. Denne myndigheten er uavhengig av din vanlige organisasjonsadmin-rolle: kun navngitte eiere og brukere du eksplisitt delegerer rettigheter til kan handle på selve det delte arrangementet. Det må alltid finnes minst én eier.
En plattform-superadmin kan også opprette et nøytralt delt arrangement uten arrangørorganisasjon og bli den første eieren.
Opprette et delt arrangement
Naviger til Administrasjon → Delte arrangementer → Nytt delt arrangement for å starte opprettingsformularet. Du fyller inn:
- Navn, dato og beskrivelse — den kanoniske identiteten som deles av alle deltakere.
- Forestillinger — én eller flere fremføringer, lagret som absolutte UTC-tidspunkter med venuets tidssone (slik at sommertidsendringer aldri forskyver en forestilling). Kapasitet håndheves per forestilling, ikke for hele arrangementet samlet.
- Billettypemaler — prismaler som brukes av alle deltakere. Priser er kanoniske på det delte arrangementet; ingen deltaker kan sette egne priser.
- Kapasitetspolicy — velg kvotemodus (per-organisasjons-tildelinger) eller pool-modus (én felles begrenset total, først til mølla). Se Kapasitetspolicy nedenfor.
- Samlet fysisk kapasitet — totalt antall seter per forestilling.
Arrangementet opprettes med status utkast. Du kan invitere organisasjoner og fullføre konfigurasjonen før publisering.
Invitere deltakerorganisasjoner
Du inviterer deltakerorganisasjoner via éngangs-invitasjonslenker. Generer en lenke fra detaljsiden for det delte arrangementet, del den sikkert med en admin i målorganisasjonen, og de aksepterer på vegne av én av sine egne organisasjoner. Samme organisasjon kan ikke vises mer enn én gang på listen; du kan ha to eller flere deltakere.
Plattform-superadmins kan også legge til organisasjoner ved å søke etter dem direkte etter navn. For alle andre roller er invitasjonslenker den eneste støttede invitasjonsmetoden.
Når en admin bruker lenken til å akseptere, slutter organisasjonen umiddelbart inn på listen. Du kan ikke selge mot en deltakers projeksjon før aksepten er fullført og projeksjonen er klargjort. Liststatusene du vil se er:
| Status | Betydning |
|---|---|
invited | Invitasjon sendt; venter på svar |
accepted | Admin har akseptert; projeksjon klargjøres |
active | Projeksjon klar; salg er aktivt |
declined | Organisasjonen takket nei |
left | Organisasjonen valgte å forlate |
removed | Du (eller annen eier) fjernet dem fra listen |
En deltaker med status left eller removed beholder sine bekreftede salg og historiske rapporter, men kan ikke gjøre nye salg. Før en deltaker kan forlate eller fjernes, må eventuelle eksterne kanaler de eier deaktiveres eller overdras, og eier-/tillatelsesoppføringene deres tilbakekalles (se Avlysingssatferd).
Generere en invitasjonslenke
Åpne Deltakere-panelet på detaljsiden for det delte arrangementet og velg Generer invitasjonslenke. Skjemaet inneholder:
- E-post (valgfritt) — Skriv inn en e-postadresse for å sende lenken direkte. Velg språk (norsk eller engelsk) for e-posten.
- Den genererte lenken vises med en Kopier-knapp. Kopier og del den med den tiltenkte organisasjonsadminen.
Behandle lenken som en hemmelighet. Alle som har lenken kan koble en organisasjon til dette delte arrangementet. Ikke del den offentlig eller i åpne kanaler. Dersom du deler den med feil person, tilbakekall den umiddelbart og generer en ny.
Om e-postlevering: Etter at du sender inn, returnerer plattformen en generisk bekreftelse uavhengig av om e-postadressen er gyldig, tilhører en registrert bruker eller er knyttet til en organisasjonsadmin. Dette er tilsiktet — ingen svar avslører konto- eller organisasjonsinformasjon. Lenken returneres også direkte til deg, slik at du kan kopiere og videresende den manuelt dersom e-postlevering ikke når mottakeren.
Varsling i appen (valgfri bivirkning): Dersom du oppgir en e-postadresse, kan plattformen også opprette en varsling i appen i mottakerens varslingsklokke — men kun dersom e-postadressen stemmer overens med en kjent, godkjent organisasjonsadmin på plattformen. Dette oppslaget og eventuell varsling er usynlig for deg: bekreftelsessvaret er identisk uavhengig av om en match ble funnet, og om en varsling ble opprettet, levert, lest eller reagert på. Ikke tolk den generiske bekreftelsen som en leveringsbekreftelse for verken e-post eller varsling i appen. Dersom du vil forsikre deg om at mottakeren er klar over invitasjonen, del lenken direkte via en pålitelig kanal.
Lenken er gyldig i 14 dager.
Administrere og tilbakekalle lenker
Deltakere-panelet viser en liste over dine genererte lenker med status, opprettelsesdato, utløpsdato og om e-postlevering ble forsøkt:
| Status | Betydning |
|---|---|
active | Lenken er gyldig og er ikke brukt ennå |
used | En admin aksepterte lenken; organisasjonen er på listen |
revoked | Du tilbakekalte lenken; den er permanent ubrukelig |
For å tilbakekalle en aktiv lenke, velg Tilbakekall. En tilbakekalt lenke kan ikke gjenopprettes; generer en ny lenke dersom den tiltenkte adminen fortsatt må bli med.
Kvoter etter aksept: I kvotemodus tildeles ikke kvotene for en nylig akseptert organisasjon automatisk. Etter at organisasjonens status blir active, tildel en kvote for hver forestilling i kapasitetsinnstillingene.
Kapasitetspolicy
Kvotemodus
I kvotemodus tildeler du en fast per-forestillings-kvote til hver deltakerorganisasjon. Håndhevingen skjer per organisasjon per forestilling: samtidige kjøpere innenfor én organisasjon kan aldri bekrefte mer enn sin kvote. Det finnes ingen husreserve i v1 — summen av per-forestillings-kvoter må være nøyaktig lik den samlede fysiske kapasiteten. Du kan ikke lagre en kvotekonfigurasjon som ikke summerer seg til kapasiteten.
Hva kvotemodus betyr for deg som arrangør:
- Hver deltakers gjenværende kvote er uavhengig; at én organisasjon selger ut påvirker ikke de andre.
- Du kan rebalansere kvoter (se Redigere kapasitet og kvoter).
- Dersom én organisasjon har usolgt kvote når arrangementet nærmer seg, kan du omfordele den.
- Den kombinerte gjenværende kapasiteten som vises i rapportering er summen av deltakernes gjenværende kvoter (en visningsstørrelse; selve håndhevingsgrensen er per org).
Pool-modus
I pool-modus er det én felles, begrenset total per forestilling. Enhver deltakerorganisasjon kan selge den siste plassen; salg skjer etter prinsippet «først til mølla» på tvers av organisasjoner. Poolen er begrenset — det er ikke ubegrenset lagerbeholdning. Den gjenværende kapasiteten som vises i grensesnittet er den autoritative verdien som brukes for utsolgt-beslutninger.
Slik fungerer poolen:
- En kjøpers kasse reserverer seter (holder dem mot totalen). Holdte seter teller mot gjenværende og hindrer overselging.
- Når bestillingen bekreftes, konverteres holdet til et bekreftet salg.
- Dersom en kasse forlates, utløper holdet automatisk (varighet er konfigurerbar) og setene returneres til poolen.
- Gjenforsøk med samme reservasjons-ID returnerer det eksisterende holdet uten å booke ekstra seter.
Hva pool-modus betyr for deg som arrangør:
- Ingen per-organisasjons-tak; enhver org kan selge den siste plassen.
- Ingen per-deltaker-grense betyr at én rask-selgende org kan ta det meste av gjenværende kapasitet; vurder om kvoter passer arrangementet ditt bedre.
- Gjenværende som vises er pool-gjenværende (
kapasitet − holdt − bekreftet).
Redigere kapasitet og kvoter
Du kan redigere total forestillingskapasitet og per-organisasjons-kvoter (kvotemodus) med kapasitetsredigeringskontrollene. Alle redigeringer bruker en fryse-og-anvend-vakt: mens en redigering anvendes, mottar nye kjøp et kort, prøvbart svar («kapasitet oppdateres, prøv igjen om litt»). Ingen bekreftet salg mistes eller dobbeltelles under en redigering.
Begrensninger:
- Kapasitet kan ikke reduseres under
bekreftet + holdtfor en forestilling. - I kvotemodus må kvoter fortsatt summere seg til kapasiteten, og hver kvote må minst dekke den aktuelle orgens bekreftede salg etter redigeringen.
- Å øke kapasiteten i kvotemodus krever at de ekstra setene tildeles én eller flere organisasjoner i samme redigering.
Policyoverganger
Du kan bytte mellom kvotemodus og pool-modus etter opprettingen via Administrasjon → Delte arrangementer → [arrangement] → Kapasitetspolicy → Bytt policy.
Kvote → pool:
- Alle bekreftede salg bevares.
- Poolen åpnes med gjenværende lik
kapasitet − sum(bekreftet per org). - Avvises dersom bekreftede salg allerede overstiger fysisk kapasitet (løs overbestillingen først).
Pool → kvote:
- Hver angitte kvote må dekke den aktuelle orgens bekreftede salg (
kvote ≥ bekreftet). - Kvoter må fullt ut tildele lokalet (
sum(kvoter) == kapasitet; ingen husreserve). - Overgangen venter til eventuelle aktive reservasjoner bekreftes eller utløper; ingen gyldige kjøp under behandling avbrytes.
- Avvises dersom vilkårene ikke kan oppfylles.
Enhver overgang er sikret mot samtidige endringer (to overganger kan ikke begge gjennomføres), protokollføres med fra/til-policy, og avvises — aldri tvunget — når vilkårene ikke kan oppfylles.
Tillatelser
Eiere
Eiere har full myndighet over det delte arrangementet. Du kan legge til og fjerne eiere fra Tillatelser-panelet under Eiere-seksjonen. Det må alltid finnes minst én eier; å fjerne den siste eieren avvises, og du må utpeke en erstatning først.
EierEndringer protokollføres.
Rettigheter og rollemaler
Du kan delegere detaljerte rettigheter til navngitte brukere fra enhver aktiv deltakerorganisasjon. Tilgjengelige rettigheter:
| Rettighet | Hva den tillater |
|---|---|
manageSharedDetails | Redigere delt navn, dato, beskrivelse, forestillinger |
managePricing | Redigere delte billettype-priser |
manageCapacity | Redigere kapasitet, kvoter og initiere policyoverganger |
manageParticipants | Invitere, fjerne og administrere deltakere |
manageExternalSales | Tildele og drifte eksterne salgskanaler |
viewCombinedReports | Tilgang til den kombinerte tvers-org-rapporten |
manageOwners | Legge til og fjerne eiere (kun eiere; ikke delegerbart til ikke-eiere) |
Du kan også bruke rollemaler som utvides til et forhåndsdefinert sett av rettigheter:
| Mal | Rettigheter som gis |
|---|---|
owner | Alle rettigheter |
eventManager | manageSharedDetails, managePricing, manageCapacity, manageParticipants, manageExternalSales |
reportViewer | viewCombinedReports |
Viktige regler:
- Det å være admin i en deltakerorganisasjon gir ikke automatisk myndighet over delte arrangementer.
- En tildelt bruker må tilhøre en
activedeltakerorganisasjon; tildelinger til brukere utenfor listen avvises. - Tildelinger blir inaktive når en brukers organisasjon forlater arrangementet eller fjernes; tildelingen tilbakekalles automatisk ved utgang.
- Alle endringer i tildelinger og eierskap registreres i revisjonsloggen.
Delte eksterne salgskanaler
Hver ekstern billettkilde (for eksempel en manuell Ticketmaster-inngangskanal eller en Billetto-automatiseringskanal) tildeles én ansvarlig deltakerorganisasjon per delt arrangement. Bruk Eksterne kanaler-panelet til å tildele, oppdatere eller deaktivere en kanal.
Slik fungerer kanaltildeling:
- Kun en eier eller en bruker med
manageExternalSales-rettigheten kan tildele eller overdra en kanal. - Den ansvarlige organisasjonen må være en
activedeltaker; du kan ikke tildele en kanal til en inaktiv organisasjon. - Kun den utpekte organisasjonens autoriserte brukere (pluss plattform-superadmins) kan logge eller drifte den kilden.
- Eksterne salg fra den utpekte kanalen teller mot den organisasjonens kvote (kvotemodus) eller den felles poolen (pool-modus).
- Dersom du overdrar en kanal til en annen organisasjon, gjelder endringen kun fremtidige salg; historisk attribusjon flyttes ikke uten en eksplisitt migrering.
- En deltakers utgang blokkeres mens de eier en aktiv kanal; kanalen må deaktiveres eller overdras først.
Legitimasjonslagring: Kanallegitimasjon lagres kun som Azure Key Vault-hemmelighets-URI-referanser. Rå API-nøkler, OAuth-tokens og tilkoblingsstrenger lagres aldri i applikasjonsdatabasen.
⚠️ Billetto-automatiseringsruntime er utsatt til #242. Applikasjonen registrerer kanaltildelingen og Key Vault-legitimasjonsreferansen. Billetto OAuth-flyt, webhook-mottak, deltaker-/refusjonssynkronisering og leverandørens runtime-operasjoner er ikke implementert ennå. Manuelle Ticketmaster-oppføringer er fullt funksjonelle. Se Ikke implementert ennå.
Kombinert rapportering
Åpne den kombinerte rapporten fra Administrasjon → Delte arrangementer → [arrangement] → Salgsrapport. Som arrangør (eller en bruker med viewCombinedReports-rettigheten) ser du:
- Arrangementsnivå-totaler — kapasitet, bekreftet, holdt, gjenværende, inntekter, avgifter for alle deltakere.
- Per-deltaker-fordeling — totaler per organisasjon (aldri kundespesifikke detaljer).
- Totaler per ekstern kanal — volum per kilde, aggregert.
- Per-forestilling-fordeling — kapasitet, bekreftet, gjenværende per forestilling.
I kvotemodus er den rapporterte gjenværende per deltaker den gjenværende tildelingen for den organisasjonen. I pool-modus er den rapporterte felles gjenværende den autoritative pool-verdien.
Personverngrense: Den kombinerte rapporten avslører aldri en annen organisasjons kundespesifikke detaljer eller individuelle salgsdata. Du ser kun totaler og fordelinger, ikke individuelle kjøperoppføringer fra andre organisasjoner.
Revisjonslogg
Enhver styringsrelevant endring registreres i en append-only revisjonslogg, synlig under Revisjon-fanen på detaljsiden for delt arrangement. Revisjonsloggen registrerer:
- Listeoverganger (invitasjoner, aksepter, avvisninger, utgang, fjerning)
- Eier-tillegg og -fjerning
- Utstedelse, endring og tilbakekalling av tildelinger
- Kapasitetspolicy-endringer (med fra/til-policy)
- Avlysingshendelser (startet, fullført, mislyktes)
- Ekstern kanal-tildeling, -oppdatering, -overdragelse og -deaktivering
- Kapasitets- og kvote-redigeringer
- Rekonsilierings-reparasjoner
Hver post viser handlingen, aktørens organisasjon, målorganisasjonen (der relevant) og tidsstemplet. Revisjonsloggen er append-only; ingen post redigeres eller slettes noen gang.
Avlysingssatferd
Sett arrangementstatus til Avlyses fra arrangementdetaljsiden. Avlysings-sagaen utfører disse stegene:
- En permanent kapasitetssperring etableres — ingen nye reservasjoner kan opprettes fra dette punktet.
- Det delte arrangementets rotstatus endres til
cancelling. - Alle nåværende holdte (ikke ennå bekreftede) reservasjoner tømmes; de holdte setene frigjøres.
- Alle deltaker-projeksjoner låses slik at ingen nye salg kan skje.
- Det delte arrangementet endres til
cancelled.
Hva avlysing gjør og ikke gjør:
- ✅ Stopper alle nye reservasjoner og salg umiddelbart.
- ✅ Tømmer alle aktive hold (returnerer holdte seter; det er likevel ingen seter igjen å selge).
- ✅ Låser alle deltaker-projeksjoner slik at ingen ytterligere salg kan plasseres.
- ✅ Bevarer alle bekreftede salg, tilhørende inntektsregistreringer og hele revisjonshistorikken.
- ❌ Refunderer ikke kunder. Applikasjonen har ingen kundebetalingsrefusjon-arbeidsflyt i v1. Bekreftede salg er endelige; kapasitets-regnskapspostene for et bekreftet salg reverseres ikke.
Dersom avlysings-sagaen avbrytes (for eksempel av en prosessnedstart), gjenopptas den automatisk av vedlikeholdstimeren fra siste sikre kontrollpunkt.
Ingen-refusjon-semantikk: Billettkjøp er endelige i v1. Det finnes ingen kundebetalingsrefusjon-forespørsel eller -arbeidsflyt. Kapasitet frigjøres kun via to eksepsjonelle stier: hel-arrangements-avlysing (som tømmer holdte seter, men ikke refunderer bekreftede salg) og autorisert administrativ korreksjon av en feilaktig registrering. Ingen av disse stiene er en kundeparablangrefusjon; applikasjonen støtter ikke den arbeidsflyten. Den bredere ekstern-leverandør-integrasjonen er utformet for å hente leverandørens avlysings- og refusjonsstatus når #242 implementerer det.
Feil- og gjenforsøkstilstander
Kapasitet endres (prøvbar 503): Under en kapasitetsredigering eller policyovergang mottar nye kjøp et kort, prøvbart svar («kapasitet oppdateres, prøv igjen om litt»). Dette er ikke et mislykket kjøp; kjøperen bør prøve igjen og vil lykkes når vakten er frigjort.
Utsolgt: Når gjenværende kapasitet når null (pool-modus) eller en organisasjons kvote er oppbrukt (kvotemodus), avvises videre kjøp for det aktuelle området som utsolgt. I pool-modus går samlet gjenværende aldri under null. I kvotemodus påvirkes ikke andre organisasjoners kvoter.
Kapasitetskonflikt ved sperring: Dersom en avlysing pågår og et kjøp ankommer nøyaktig samtidig, avvises kjøpet med et ikke-prøvbart konflikt-svar. Dette er forventet oppførsel under avlysing.
Vedlikeholdsrekonstruksjon: Vedlikeholdstimeren overvåker gjenstående avlysinger og utløpte kapasitetsholds. Dersom en saga ble avbrutt midtveis, gjenopptas den idempotent. Ingen manuell innblanding er nødvendig ved standard feil.
Ekstern kanal-overbestilling: Dersom en ekstern import (for eksempel en forsinket manuell Ticketmaster-oppføring) overstiger gjenværende kapasitet, aksepteres og registreres den; den resulterende overbestillingen flagges i kapasitetsvisningen og vises som negativ gjenværende. Et varsel sendes til den utpekte organisasjonen og SharedEventOwner. Dette speiler hvordan frittstående arrangementer allerede håndterer ekstern overselging.
Ikke implementert ennå
Følgende elementer er ikke implementert ennå og faller utenfor gjeldende delt-arrangement-modul. De vil bli håndtert i fremtidig arbeid.
| Element | Utsatt til |
|---|---|
| Billetto OAuth-legitimasjonsløser og token-oppdatering | #242 |
| Billetto webhook-mottak og deltaker-synkronisering | #242 |
| Billetto-drevet refusjons- og avlysingsstatus-mottak | #242 |
| Leverandørens runtime (deltakerlister, avlysings-/refusjonshendelser) | #242 |
| Kundebetalingsrefusjons-arbeidsflyt for bekreftede salg | Ikke planlagt for v1 |
| Masseimport/CSV-import av eksterne salg | Ikke planlagt for v1 |
| Retroaktiv overføring av eksisterende frittstående arrangement til delt arrangement | Ikke planlagt for v1 |
| Generelle tvers-org-varsler om salgsmilestener til andre organisasjoners admins (ikke relatert til varsler om invitasjoner, som er implementert) | Etter v1 |
| Full samtidige belastningstest på Azure (T050) | Blokkert: isolert Azure Cosmos-godkjenning |