Skip to main content

Lifecycle · Article 2.13

Zdarzenia Osi Czasu: każdy typ zdarzenia wyjaśniony

Komponent Osi Czasu na każdej stronie szczegółowej oferty rejestruje 21+ typów zdarzeń. To jest kanoniczna lista z opisami i wyzwalaczami, przydatna podczas audytowania tego, co się działo z ofertą.

Oś Czasu to Twoja ścieżka audytu. Każdy webhook, każde kliknięcie, każde wysłanie e-maila produkuje zdarzenie. Zachowujemy je przez cały czas życia oferty (10 lat dla retencji prawnej). Gdy próbujesz ustalić „poczekaj, kiedy klient faktycznie podpisał?" lub „czy faktura zaliczkowa kiedykolwiek wyszła?", Oś Czasu jest źródłem prawdy — nawet gdy odznaka UI lub potwierdzenie e-mail daje Ci inne wrażenie.

Why this works this way

Zdarzenia Osi Czasu są przechowywane w modelu ProposalTimelineEvent z polami: event_type (enum), created_by (Użytkownik lub null dla działań inicjowanych przez klienta), data (JSON: IP, kwoty, dowody podpisu itp.), created_at (znacznik czasu UTC). Są tylko do dołączania — nigdy nie edytujemy ani nie usuwamy zdarzenia. Jeśli proces jest cofnięty (np. status przywrócony), rejestrujemy nowe zdarzenie wyjaśniające cofnięcie, pozostawiając oryginał nienaruszonym.

### Odniesienie: wszystkie typy zdarzeń

ZdarzenieWyzwalaczKluczowe metadane
createdOferta pierwszy raz zapisanacreated_by user
sentFreelancer klika Wyślijto_email, sent_from_ip
viewedKlient po raz pierwszy otwiera link z prawidłowym PIN-emviewer_ip, user_agent
signedKlient klika Podpisz na stronie publicznejsigner_name, signer_ip, ua, signed_at, consent
pdf_generatedAsynchroniczne renderowanie PDF zakończonedoc_type (PRO/AGR/CON/DEP/INV/STR/DCR/CRN/REC), r2_key
deposit_paidWebhook Stripe lub ręczne oznaczeniemethod, amount, payment_intent_id
final_invoice_issuedFreelancer wystawia fakturę końcowąinvoice_number, total
payment_received (końcowe)Webhook Stripe lub ręczne oznaczeniemethod, amount
completedFreelancer oznacza jako ukończonenotes
declinedKlient odrzuca na stronie publicznejdecline_reason
expiredZadanie cron 90-dniowedays_since_sent
archivedFreelancer archiwizujereason
amendment_proposedAneks utworzonyamendment_id, delta_total
amendment_viewedKlient otwiera link do aneksuviewer_ip
amendment_signedKlient podpisuje anekssigner_name, ip, evidence_stack
amendment_declinedKlient odrzuca aneksdecline_reason
amendment_cancelledFreelancer anuluje aneks przed podpisaniemcancelled_by
amendment_expiredWygaśnięcie aneksu po 90 dniach
refund_initiatedUruchomiony przepływ zwrotucredit_note_number, amount
refund_completedWebhook Stripe lub ręczne oznaczeniemethod, completed_at

Troubleshooting

Keep reading