Migrering: Base44 → Billettsalg
Dette dokumentet kombinerer den opprinnelige analysen av funksjons-gap mellom dirigentens Base44-app og vår Billettsalg-app, sammen med detaljert migreringssporing etter v0.9.0.
Del 1: Analyse av funksjons-gap
Opprinnelig fra gap-analyse som sammenligner alle 13 sider i
billettsalgsskjema.base44.appmed vår implementasjon.
Sammendrag
Etter å ha analysert alle 13 sider fra dirigentens eksisterende Base44-app, har vår app sterke grunnfunksjoner (multi-organisasjon, arrangementer, salgsregistrering). Alle kritiske og mellomprioriterte gap er lukket. Det eneste gjenværende gapet er intern meldingsutveksling, som ble nedprioritert til fordel for eksterne kommunikasjonsverktøy.
Funksjonssammenligningsmatrise
| Funksjon | Dirigentens app | Vår app | Gap-nivå |
|---|---|---|---|
| Medlemsfunksjoner | |||
| Registrer salg | ✅ Fullt skjema med konsert, billetttyper, betalingsmåte | ✅ RegisterSaleView | ✅ Likeverdig |
| Bestill billetter (forespørsel) | ✅ /OrderTickets-rute | ✅ OrderTicketsView | ✅ Likeverdig |
| Mine salg – oversikt | ✅ Oppsummeringskort + fanevisning | ✅ HistoryView | ✅ Likeverdig |
| Billettansvarlig-funksjoner | |||
| Administrer bestillinger | ✅ EditorOrders – godkjenn/avslå/lever bestillinger | ✅ OrdersView (admin) | ✅ Likeverdig |
| Bestillingshistorikk | ✅ Full historikk med arkivfunksjon | ✅ OrdersView (historikkfane) | ✅ Likeverdig |
| Tildelinger | ✅ Per-medlem tildeling per konsert | ✅ AllocationsView | ✅ Likeverdig |
| Interne meldinger | ✅ Admin ↔ Billettansvarlige meldingsutveksling | ❌ Ingen meldinger | 🟢 Lav |
| Kassererfunksjoner | |||
| Rapporter | ✅ Multi-fane: Per medlem/organisasjon/konsert/type/Ticketmaster/Alle | ✅ ReportsView (6 faner) | ✅ Likeverdig |
| CSV-eksport | ✅ Eksportknapp | ✅ Excel-eksport finnes | ✅ Likeverdig |
| Adminfunksjoner | |||
| Organisasjonsadministrasjon | ✅ CRUD med medlemstall, statusmerke | ✅ OrganizationsView | ✅ Likeverdig |
| Konsertadministrasjon | ✅ Rike kort med priser, kapasitet, fremdriftsindikatorer, avgifter | ✅ EventsView/EventFormView | ✅ Likeverdig |
| Brukeradministrasjon | ✅ Full brukeradmin | ✅ UsersView | ✅ Likeverdig |
| Ticketmaster-integrasjon | ✅ Dedikert /AdminTicketmaster-side | ✅ Eksternt salg per forestilling | ✅ Likeverdig |
| Billetttyper | |||
| Voksen/Barn | ✅ | ✅ | ✅ Likeverdig |
| Student | ✅ | ✅ Forhåndsdefinert knapp | ✅ Likeverdig |
| Senior | ✅ | ✅ Forhåndsdefinert knapp | ✅ Likeverdig |
| Avtalt spesialpris | ✅ Forhandlede priser | ✅ Forhåndsdefinert knapp | ✅ Likeverdig |
| Billettavgift | ✅ Per type, per konsert | ✅ Avgiftsfelt på TicketType | ✅ Likeverdig |
| Bestillingsflyt | |||
| Bestillingsstatuser | ✅ Ventende → Godkjent → Levert / Avbrutt | ✅ Ventende/Godkjent/Levert | ✅ Likeverdig |
| Arkiver bestillinger per konsert | ✅ Massearkiveringsfunksjon | ✅ Arrangementsspesifikk massearkivering (#25) | ✅ Likeverdig |
| Multi-organisasjon | |||
| Flere organisasjoner | ✅ Filtrer etter organisasjon på tvers av sider | ✅ OrganizationSelector | ✅ Likeverdig |
| Organisasjonsmerker på konserter | ✅ Viser hvilken organisasjon per konsert | ✅ | ✅ Likeverdig |
Implementerte funksjoner
Bestillings-/forespørselsflyt for billetter ✅
Dirigentens app har et billettbestillingssystem der medlemmer ikke bare registrerer salg, men kan bestille billetter fra en billettansvarlig:
- Medlem sender bestilling via
/OrderTickets(konsert, antall per type) - Bestillingen får status «Ventende»
- Billettansvarlig ser den i
/EditorOrders, kan godkjenne/avslå - Etter godkjenning → «Godkjent»
- Ansvarlig leverer billetter → «Levert»
- Kan avbrytes → «Avbrutt»
Implementering fullført:
- Ny entitet:
TicketOrdermed statusflyt (api/src/shared/types.ts) - Ny medlemsvisning:
OrderTicketsView.vue– bestill billetter med forestillingsvalg - Ny adminvisning:
admin/OrdersView.vue– administrer bestillinger med godkjenn/lever/avbryt - API-endepunkter:
/api/orders,/api/orders/:id/approve,/api/orders/:id/deliver,/api/orders/:id/cancel - Databasecontainer:
ticketOrders(partisjonert etterorganizationId) - Ruter:
/order-ticketsfor medlemmer,/admin/ordersfor admins - i18n: Engelske og norske oversettelser
Billettavgift ✅
Hver konsert kan ha ulike avgifter per billetttype:
- Eksempel: «Voksen: 30 kr» avgift, «Barn: 25 kr» avgift
- Avgifter vises separat fra billettprisen
- Avgifter spores i rapporter («Total billettavgift: 500 kr»)
Implementering fullført:
- Avgiftsfelt lagt til på
TicketType(api/src/shared/types.ts) - Spores i registreringer, bestillinger, eksternt salg og rapporter
- Vises i konsertkort (EventsView) og arrangementsskjema (EventFormView)
- Avgiftstotaler inkludert i Excel/CSV-eksporter
Bestillingshistorikk med arkiv ✅
- ✅ Historikkfane i
admin/OrdersView.vuesom viser leverte/avbrutte bestillinger - ✅ Tabell med: Dato, Medlem, Arrangement, Billettfordeling, Total, Status
- ✅ Oppsummeringskort med totalt antall bestillinger, totalt antall billetter og total omsetning
- ✅ Støtte for arkivflagg via
archived-feltet påTicketOrderogPATCH /api/orders/:id/archive, tilgjengelig siden v0.9.0 - ✅ Likeverdig arrangementsspesifikk massearkivering levert i #25 med et endepunkt for forhåndsvisning og et avgrenset endepunkt for arkivering
Det opprinnelige arkivendepunktet håndterte én bestilling om gangen. Arkivflagget alene ga ikke samme funksjon som Dirigent-appens arkivering per arrangement. Issue #25 legger til denne separate funksjonen og beholder det individuelle endepunktet. Issue #315 strammer inn kvalifiseringen: Kansellerte bestillinger er fortsatt kvalifiserte, mens oppgjorte bestillinger krever et gyldig fakturagrunnlag som bare inneholder salg og en utstedt faktura. Samlet arkivering overstyrer aldri regelen.
Faktura- og oppgjørslivssyklus ✅
Issue #315 skiller tre begreper som eldre migreringsnotater behandlet som ett:
- Oppgjort betyr at en ansvarlig godkjente avstemmingen og låste fakturagrunnlaget for solgte billetter.
- Fakturert betyr at en faktura ble utstedt eller sendt til medlemmet.
- Innbetaling er fortsatt uavhengig av fakturaflagget.
Fakturahandlingen per medlem og arrangement dekker aktive registreringer og kvalifiserte oppgjorte trykte bestillinger. Inntekt fra trykte billetter kommer fra validert solgt antall og prisene fra bestillingstidspunktet, aldri den opprinnelige bestillingstotalen. Eksisterende oppgjorte bestillinger får ikke oppdiktede fakturatidspunkt. Eksisterende arkiverte bestillinger forblir arkivert til de gjenopprettes.
Forbedrede billetttyper ✅
- Forhåndsdefinerte knapper for Student, Senior og Spesial lagt til i
EventFormView.vue - Forhåndsinnstillinger inkluderer standardpriser og avgifter (f.eks. Student: 150 kr / 10 kr avgift)
- Duplikatnavnvalidering forhindrer at samme forhåndsinnstilling legges til to ganger
- Systemet støtter fortsatt fullt fleksible egendefinerte typer
Tildelinger ✅
Allocation-entitet iapi/src/shared/types.tsAllocationsView.vuefor administrering av tildelinger- Fullt API:
GET/POST /api/allocations,DELETE /api/allocations/:id,GET /api/my-allocations - Medlemsendepunkt for tildelingsstatus:
GET /api/allocations/members - Tildelingsoppsummeringskort for billettansvarlige på dashbordet
Forbedrede rapporter ✅
ReportsView gir alle visninger fra dirigentens app:
- ✅ Per medlem (Per medlem-fane)
- ✅ Per organisasjon (Per organisasjon-fane)
- ✅ Per konsert (Per arrangement-fane)
- ✅ Per billetttype (Per type-fane)
- ✅ Ticketmaster (eksterntsalg-fane)
- ✅ Alle salg (komplett liste-fane)
Implementering: ReportsView.vue med 6-fanesystem, datoperiodefiltrering, medlemsfilter-nedtrekksliste og CSV/Excel-eksport.
Forbedrede konsertkort ✅
- ✅ Fremdriftsindikator:
27 / 200solgt med visuell stolpe (fargekodet: grønn ≥90%, blå ≥70%, gul ≥50%, grå <50%) - ✅ «Igjen»-teller (gjenværende)
- ✅ Billettavgiftseksjon (lillafarget avgiftsvisning per type)
Utsatte funksjoner
Intern meldingsutveksling 🟢 Lav prioritet
Enkel meldingsutveksling mellom admins og billettansvarlige. Anbefaling: Utsett dette. E-postvarsler kan være tilstrekkelig.
Datamodellendringer
Nye entiteter
// Billettbestillings-/forespørselssystem
interface TicketOrder {
id: string;
organizationId: string;
eventId: string;
showtimeId?: string;
showtimeDateTime?: string;
showtimeLabel?: string;
requestedBy: string;
requestedByName: string;
requestedByEmail: string;
tickets: {
ticketTypeId: string;
ticketTypeName: string;
quantity: number;
unitPrice: number;
fee: number;
}[];
totalQuantity: number;
totalAmount: number;
totalFees: number;
status: "pending" | "approved" | "delivered" | "awaitingReconciliation" | "settled" | "cancelled";
soldQuantity?: number;
soldTypeQuantities?: SoldTypeQuantity[];
returnedQuantity?: number;
invoiceBasis?: InvoiceBasis;
invoicedAt?: string;
invoicedBy?: string;
invoicedByName?: string;
archiveOverride?: OrderArchiveOverrideEvidence;
approvedBy?: string;
approvedByName?: string;
approvedAt?: string;
deliveredBy?: string;
deliveredByName?: string;
deliveredAt?: string;
cancelledBy?: string;
cancelledByName?: string;
cancelledAt?: string;
cancelReason?: string;
createdAt: string;
updatedAt: string;
}
// Billetttildeling
interface TicketAllocation {
id: string;
organizationId: string;
eventId: string;
userId: string;
userName: string;
userEmail: string;
allocations: {
ticketTypeId: string;
ticketTypeName: string;
quantity: number;
}[];
totalAllocated: number;
createdBy: string;
createdByName: string;
createdAt: string;
updatedAt: string;
}Endrede entiteter
// Legg til avgift på TicketType
interface TicketType {
// ... eksisterende felter
fee?: number; // Avgift per billett
}Rollestruktur – sammenligning
| Rolle | Dirigentens app | Vår app |
|---|---|---|
| Medlem | Registrer salg, Bestill billetter, Mine salg | ✅ Samsvar |
| Billettansvarlig | Bestillinger, Bestillingshistorikk, Tildelinger, Meldinger | ✅ Samsvar (unntatt meldinger) |
| Kasserer | Rapporter | ✅ Admin har tilgang |
| Admin | Kor, Konserter, Brukere, Ticketmaster, osv. | ✅ Samsvar |
Del 2: Detaljert migreringssporing (etter v0.9.0)
Generert: 31. januar 2026 Sist oppdatert: Mars 2026 (gjennomgang av implementering etter v0.9.0)
Sammendrag
| Kategori | Base44-funksjoner | Vår implementering | Gap-nivå |
|---|---|---|---|
| Brukeradministrasjon | Multi-rolle per bruker (billettansvarlig, kasserer) | ✅ roles[] på OrganizationMembership | ✅ Ferdig |
| Arrangementer/Konserter | Kompleks prising (pris + avgift per type) | ✅ Avgift per billetttype (implementert i v0.9.0) | ✅ Ferdig |
| Bestillingsflyt | Full arbeidsflyt (ventende→godkjent→levert) | ✅ Implementert | ✅ Ferdig |
| Tildelinger | Auto-opprett ved levering | ✅ AllocationsView (implementert i v0.9.0) | ✅ Ferdig |
| Eksternt salg | Dedikert Ticketmaster-side | ✅ Dedikert TicketmasterView | ✅ Ferdig |
| Meldinger | E-postvarsler (via Meldinger-side) | Ikke implementert | 🔵 Lav |
| Rapporter | 6-fane rapportsystem med avgiftssporing | ✅ 6-fane ReportsView med avgifter (implementert i v0.9.0) | ✅ Ferdig |
| Brukergodkjenning | Ventende/godkjent status | ✅ Via medlemskap | ✅ Ferdig |
| Navigasjon | 4 rollebaserte seksjoner | ✅ 4 seksjoner (Medlem/Billettansv./Kasserer/Admin) | ✅ Ferdig |
Rask sammenligning
| Aspekt | Base44 | Vår | Vinner |
|---|---|---|---|
| Billettpriser | Pris + Avgift separert | ✅ Pris + Avgift separert | Likt (likeverdig) |
| Flere forestillinger | ❌ Ingen | ✅ Full støtte | Vår |
| Fleksible billetttyper | ❌ Hardkodet voksen/barn | ✅ Dynamiske typer | Vår |
| Bestillings-revisjonslogg | ❌ Minimal | ✅ Full historikk | Vår |
| Korreksjonsforespørsler | ❌ Ingen | ✅ Fullt system | Vår |
| Invitasjonslenker | ❌ Ingen | ✅ Delbare lenker | Vår |
| E-postmeldinger | ✅ Har (via Meldinger) | ❌ Ingen | Base44 (lav prio) |
| Rapportfiltre | ✅ Datoperiode, medlem | ✅ Arrangement, medlem, datoperiode | Likt (likeverdig) |
1. Brukeradministrasjon
Base44 brukermodell
{
email: string
full_name: string
first_name: string
last_name: string
phone_number: string
organization_id: string // Enkel primær organisasjon
roles: string[] // ["billettansvarlig", "kasserer"]
extended_role: "editor" | null // Admin-nivå tilgang
approval_status: "pending" | "approved"
is_verified: boolean
_app_role: "user" | "admin" // App-nivå rolle
}Vår brukermodell
// User (global identitet)
{
id: string
email: string
name: string
isSuperAdmin?: boolean
}
// OrganizationMembership (per organisasjon)
{
organizationId: string
userId: string
role: "member" | "ticketManager" | "treasurer" | "admin"
roles?: string[] // ["billettansvarlig", "kasserer"]
approved: boolean
}Gap og anbefalinger
| Funksjon | Base44 | Vår | Anbefaling |
|---|---|---|---|
| Telefonnummer | ✅ Har | ❌ Mangler | Legg til phone?: string på User |
| For-/etternavn | ✅ Separate | ❌ Enkelt name | Behold enkelt navn (enklere) |
| Flere roller | ✅ Array ["billettansvarlig", "kasserer"] | ✅ roles?: string[] (implementert i v0.9.0) | ✅ Ferdig |
| Utvidet rolle | ✅ "editor" for delvis admin | ✅ ticketManager / treasurer rollehierarki | ✅ Ekvivalent (implementert i v0.9.0) |
| Godkjenningsstatus | ✅ pending/approved | ✅ approved: boolean | ✅ Ekvivalent |
Prioritet: ✅ Ferdig – Kun telefonnummer gjenstår som et mindre gap
2. Arrangementer/Konserter (prismodell)
Base44 konsertmodell
{
name: string;
date: string; // "2026-03-09"
location: string;
description: string;
organization_id: string;
// Medlemspriser
adult_price: 350;
adult_ticket_fee: 30; // Avgift LAGT TIL prisen
child_price: 175;
child_ticket_fee: 25;
// Spesialpriser med avgifter
special_prices: [
{ name: "Student", price: 150, ticket_fee: 10 },
{ name: "Senior", price: 200, ticket_fee: 25 },
{ name: "Avtalt spesialpris", price: 85, ticket_fee: 15 },
];
// Ticketmaster-priser (eksternt salg)
ticketmaster_price: 350;
ticketmaster_adult_fee: 30;
ticketmaster_child_price: 200;
ticketmaster_child_fee: 15;
max_tickets: 200;
is_active: boolean;
}Vår Event + TicketType-modell
// Event
{
id: string
organizationId: string
name: string
date: string
location?: string
description?: string
venueCapacity: number // Per forestilling
active: boolean
salesLocked?: boolean
showtimes?: Showtime[]
}
// TicketType (separat entitet)
{
id: string
eventId: string
organizationId: string
name: string // "Adult", "Child", "Student"
price: number
fee: number // Billettavgift (implementert i v0.9.0)
ticketmasterPrice?: number // Ekstern prisoverstyrning
ticketmasterFee?: number // Ekstern avgiftsoverstyrning
sortOrder: number
}Gap og anbefalinger
| Funksjon | Base44 | Vår | Anbefaling |
|---|---|---|---|
| Billettavgifter | ✅ Separat avgift per type | ✅ fee-felt på TicketType (implementert i v0.9.0) | ✅ Ferdig |
| Voksen/Barn innebygd | ✅ Faste felter | ❌ Fleksible typer | ⚠️ Vår løsning er MER fleksibel |
| Spesialpriser | ✅ Dynamisk array | ✅ Via TicketType | ✅ Bedre – våre typer er entiteter |
| Ticketmaster-priser | ✅ Separate felter | ✅ ticketmasterPrice/ticketmasterFee (implementert i v0.9.0) | ✅ Ferdig |
| Maks billetter | ✅ Per konsert | ✅ Per forestilling | ✅ Bedre – per forestilling er mer fleksibelt |
| Flere forestillinger | ❌ Ingen | ✅ Showtimes-array | ✅ Vi er bedre |
Prioritet: ✅ Ferdig – Avgiftsfelter og Ticketmaster-priser implementert
3. Bestillingsflyt
Base44 TicketOrder-modell
{
concert_id: string;
organization_id: string;
member_email: string;
member_name: string;
adult_tickets: number; // Fast felt
child_tickets: number; // Fast felt
special_orders: [{ name: "Student", quantity: 5 }];
status: "pending" | "approved" | "delivered" | "cancelled";
notes: string; // Medlemsnotater
editor_notes: string; // Admin-notater
is_archived: boolean;
}Vår TicketOrder-modell
{
id: string
organizationId: string
eventId: string
eventName: string
showtimeId?: string
requestedBy: string
requestedByName: string
requestedByEmail: string
// Fleksible billettelementer
tickets: [
{ ticketTypeId, ticketTypeName, quantity, unitPrice }
]
totalQuantity: number
totalAmount: number
status: "pending" | "approved" | "delivered" |
"awaitingReconciliation" | "settled" | "cancelled"
soldQuantity?: number
soldTypeQuantities?: SoldTypeQuantity[]
returnedQuantity?: number
invoiceBasis?: InvoiceBasis
invoicedAt?: string
invoicedBy?: string
invoicedByName?: string
// Full revisjonslogg
approvedBy?: string
approvedByName?: string
approvedAt?: string
deliveredBy?, deliveredByName?, deliveredAt?
cancelledBy?, cancelledByName?, cancelledAt?
cancelReason?: string
note?: string
adminNote?: string // Admin-/redaktørnotater (implementert i v0.9.0)
adminNoteBy?: string
adminNoteAt?: string
archived?: boolean // Arkiver gamle bestillinger (implementert i v0.9.0)
archiveOverride?: OrderArchiveOverrideEvidence
}Sammenligning
| Funksjon | Base44 | Vår | Vinner |
|---|---|---|---|
| Statusflyt | ✅ Lik | ✅ Lik | Likt |
| Fast Voksen/Barn | ❌ Mindre fleksibelt | ✅ Dynamiske typer | Vår |
| Redaktørnotater | ✅ Har | ✅ adminNote (implementert i v0.9.0) | Likt |
| Arkivert-flagg | ✅ Har | ✅ archived (implementert i v0.9.0) | Likt |
| Fakturagrunnlag bare for salg | ❌ Nei | ✅ Låses ved oppgjør | Vår |
| Revisjon av utstedt faktura | ❌ Minimal | ✅ Status per medlem og arrangement med stabil aktør | Vår |
| Bevis for arkivoverstyring | ❌ Nei | ✅ Varig adminbevis | Vår |
| Revisjonslogg | ❌ Mindre detaljer | ✅ Full logg | Vår |
| Forestillingsstøtte | ❌ Ingen | ✅ Har | Vår |
Prioritet: ✅ Ferdig – Vår modell er nå funksjonskomplett med full likeverdighet
4. Billetttildelinger
Når en bestilling merkes som «levert», oppretter Base44 en tildelingspost. Vi har en dedikert AllocationsView (/admin/allocations) som gir forhåndstildeling av billetter til medlemmer per billetttype, med tildelingsadministrasjon per medlem. (Implementert i v0.9.0)
Prioritet: ✅ Ferdig
5. Billettsalg (direkte medlemssalg)
| Funksjon | Base44 | Vår | Anbefaling |
|---|---|---|---|
| Medlemssalg | Via TicketSale | Via Registration | ✅ Ekvivalent |
| Eksternt salg | Via TicketSale | Via ExternalSale | ✅ Renere separasjon |
| Avgiftssporing | ✅ Per salg | ✅ Via TicketType-avgift (implementert i v0.9.0) | ✅ Ferdig |
| Forestillingsstøtte | ❌ Ingen | ✅ Har | Vår er bedre |
Prioritet: ✅ Ferdig – Avgiftsberegninger utledes fra TicketType-avgiftsfeltet
6. Meldinger (e-postvarsler) 🔵 LAV PRIORITET
Dette er IKKE meldinger i appen – det ser ut til å være et e-postsendingssystem:
- Admin skriver melding med emne/innhold
- Sender e-post til enkeltmedlem eller hele organisasjonen
- Sporer om e-posten er lest (via lesebekreftelser eller lenkesporing)
Vår implementering: Ingen – Vi støtter oss på ekstern e-post foreløpig.
Anbefaling: UTSETT – Svært lav prioritet.
7. Rapporter ✅ IMPLEMENTERT
Vi har en dedikert ReportsView (/admin/reports) med 6 faner (implementert i v0.9.0):
- Per medlem (Medlemmer) – Salg gruppert per medlem med fakturasporing
- Per kor (Organisasjoner) – Fordeling på tvers av organisasjoner
- Per konsert (Arrangementer) – Salg på arrangementsnivå
- Per type (Typer) – Fordeling per billetttype
- Ticketmaster – Eksternt salg via Ticketmaster
- Alle salg (Alle) – Komplett transaksjonsliste
Prioritet: ✅ Ferdig – Fullt 6-fane rapportsystem med avgiftssporing.
8. Brukergrensesnitt/navigasjonssammenligning
Side-for-side-sammenligning
| Base44-side | Vår ekvivalent | Status | Merknader |
|---|---|---|---|
/Home | RegisterSaleView | ✅ Ekvivalent | Samme funksjonalitet |
/OrderTickets | OrderTicketsView | ✅ Implementert | Bestillingsflyt |
/MySales | HistoryView | ✅ Ekvivalent | Medlemmets salg |
/EditorOrders | admin/OrdersView | ✅ Implementert | Ventende/Godkjent-faner |
/OrderHistory | admin/OrdersView | ✅ Kombinert | Historikkfane i OrdersView |
/AdminAllocations | admin/AllocationsView | ✅ Implementert | Dedikert side (implementert i v0.9.0) |
/Messages | ❌ Ingen | 🔴 MANGLER | Må implementeres |
/AdminReports | admin/ReportsView | ✅ Implementert | 6-fane rapporter (implementert i v0.9.0) |
/AdminOrganizations | super-admin/OrganizationsView | ✅ Ekvivalent | |
/AdminConcerts | admin/EventsView | ✅ Ekvivalent | Vi kaller dem «Arrangementer» |
/AdminTicketmaster | admin/TicketmasterView | ✅ Implementert | Dedikert side (implementert i v0.9.0) |
/AdminUsers | admin/MembersView | ✅ Ekvivalent | + super-admin/UsersView |
Funksjoner vi har som de ikke har
- ✅ Korreksjonsforespørselssystem – Medlemmer kan be om endringer i salg
- ✅ Flere forestillinger per arrangement
- ✅ Invitasjonslenker – Delbare bli-med-lenker med utløpsdato
- ✅ Superadmin – Global adminrolle på tvers av organisasjoner
- ✅ Separat ExternalSale-entitet – Renere datamodell
9. Implementeringsprioritet (oppdatert)
Fase 1: Kritisk (før migrering) — Alt ferdig ✅
| # | Oppgave | Innsats | Beskrivelse |
|---|---|---|---|
| 1 | ✅ Bestillingsflyt | Ferdig | Ventende→Godkjent→Levert |
| 2 | ✅ Billettavgifter | Ferdig | fee på TicketType (implementert i v0.9.0) |
| 3 | ✅ Avgift i rapporter | Ferdig | totalFee vist i alle rapportfaner (implementert i v0.9.0) |
| 4 | ✅ Admin-notater | Ferdig | adminNote-felt på TicketOrder (implementert i v0.9.0) |
Fase 2: Viktig (for funksjonslikeverdighet) — Stort sett ferdig
| # | Oppgave | Innsats | Beskrivelse |
|---|---|---|---|
| 5 | 🟡 Telefonnummer | ~30m | Legg til phone på User-entiteten |
| 6 | ✅ Flere roller | Ferdig | roles[] på OrganizationMembership (implementert i v0.9.0) |
| 7 | ✅ Arkivflagg | Ferdig | archived boolean på bestillinger (implementert i v0.9.0) |
| 8 | ✅ Datoperiodefilter | Ferdig | Legg til datofiltre i Rapporter (implementert i v0.9.0) |
| 9 | ✅ Alle salg-liste | Ferdig | «Alle salg»-fane i ReportsView (implementert i v0.9.0) |
Fase 3: Hyggelig å ha
| # | Oppgave | Innsats | Beskrivelse |
|---|---|---|---|
| 10 | ⚪ E-postmeldinger | ~4t | E-postkomponist (SVÆRT lav prioritet, utsett) |
| 11 | ✅ Forbedrede rapporter | Ferdig | 6-fane rapportsystem (implementert i v0.9.0) |
| 12 | ✅ Rollebasert nav. | Ferdig | 4 seksjoner: Medlem/Billettansv./Kasserer/Admin (implementert i v0.9.0) |
Funksjoner vi gjør BEDRE (behold som de er)
- ✅ Flere forestillinger per arrangement (Base44 har ingen)
- ✅ Fleksible billetttyper (ikke hardkodet voksen/barn)
- ✅ Full revisjonslogg på bestillinger (hvem/når for hver statusendring)
- ✅ Separat ExternalSale-entitet (renere enn deres TicketSale)
- ✅ Korreksjonsforespørselssystem (Base44 har ikke dette!)
- ✅ Invitasjonslenker for å bli med i organisasjoner med utløpsdato
- ✅ Superadmin-rolle for organisasjonsadministrasjon på tvers
- ✅ i18n-støtte (Engelsk + Norsk)
10. Migreringssjekkliste
Datamigrering påkrevd
- [ ] Organisasjoner → Organisasjoner (1:1)
- [ ] Brukere → Users + OrganizationMembership
- [ ] Konserter → Events + TicketTypes (del opp prising)
- [ ] TicketOrders → TicketOrders (transformer struktur)
- [ ] TicketAllocations → Hopp over (bruk leverte bestillinger)
- [ ] TicketSales → Registrations + ExternalSales (del etter type)
- [ ] Messages → Hopp over eller migrer senere
Skjemaendringer (✅ Alle fullført i v0.9.0)
// 1. ✅ Avgift på TicketType (ferdig)
interface TicketType {
// ... eksisterende
fee: number; // ✅ IMPLEMENTERT
ticketmasterPrice?: number; // ✅ IMPLEMENTERT
ticketmasterFee?: number; // ✅ IMPLEMENTERT
}
// 2. Telefon på User (fortsatt ventende)
interface User {
// ... eksisterende
phone?: string; // 🟡 IKKE IMPLEMENTERT ENNÅ
}
// 3. ✅ Roller på OrganizationMembership (ferdig)
interface OrganizationMembership {
// ... eksisterende
role: "member" | "ticketManager" | "treasurer" | "admin"; // ✅ IMPLEMENTERT (rollehierarki)
roles?: string[]; // ✅ IMPLEMENTERT
}
// 4. ✅ AdminNote på TicketOrder (ferdig)
interface TicketOrder {
// ... eksisterende
adminNote?: string; // ✅ IMPLEMENTERT
adminNoteBy?: string; // ✅ IMPLEMENTERT
adminNoteAt?: string; // ✅ IMPLEMENTERT
archived?: boolean; // ✅ IMPLEMENTERT
}11. Foreslåtte neste steg
De fleste opprinnelig identifiserte gap er lukket per v0.9.0. Gjenværende punkter:
- Legg til telefonnummer — Eneste gjenværende skjema-gap (🟡 Mindre)
- Opprett migreringsskript — Transformer Base44-data til vårt skjema
- Intern meldingsutveksling — Hvis nødvendig (foreløpig utsatt)
Oppsummering av gjenværende gap
| Gap | Prioritet | Innsats |
|---|---|---|
| Telefonnummer på User | 🟡 Mindre | ~30m |
| E-postmeldinger | ⚪ Utsett | ~4t |
| Datamigreringsskript | 🟡 Middels | ~8t |