version: 0.1
scope: pricing
purpose:
  summary: "Robocze zasady budowy rejestru kosztow kalkulacyjnych i cennikow przed uruchomieniem pelnej kalkulacji."

core_assumptions:
  pricing_module_boundary:
    notes:
      - "Obszar pricing jest traktowany jak zalazek przyszlego PIM, a nie czesc runtime stats."
      - "Pricing buduje i utrzymuje wlasne tabele pim_* i nie ingeruje bezposrednio w tabele sprzedazowe stats."
      - "W przyszlosci zaleznosc bedzie odwrotna: stats bedzie czytal dane z pricing."

  symbol_identity:
    notes:
      - "Podstawowym identyfikatorem kosztu kalkulacyjnego i pozycji cennika jest symbol techniczny ERP."
      - "Rejestr symboli pricing moze mapowac symbol do stats_towar, ale kalkulacja pricing nie opiera sie na historii sprzedazy."

  cost_nature:
    notes:
      - "Koszty kalkulacyjne sa statyczne, a nie okresowe."
      - "Nie budujemy dla nich rejestrow per dzien / miesiac / kwartal jak w klasycznych kosztach sprzedazowych."
      - "Koszt kalkulacyjny symbolu moze pochodzic z wielu roznych skladnikow kosztu."

price_list_rules:
  header:
    notes:
      - "Naglowek cennika definiuje rodzaj cennika, walute, VAT i flage zaokraglania brutto."
      - "Naglowek przechowuje tez liste skladnikow kosztowych uwzglednianych przy kalkulacji ceny."

  b2b_vs_retail:
    notes:
      - "Cenniki B2B opieraja sie biznesowo na cenie netto."
      - "Cenniki detaliczne opieraja sie biznesowo na cenie brutto."
      - "Dla cennikow detalicznych cena brutto moze wymagac zaokraglenia do ladnej wartosci."

  gross_rounding:
    notes:
      - "Jesli cennik wymaga zaokraglenia brutto, najpierw liczymy wartosc brutto, potem zaokraglamy ja zgodnie z regula cennika."
      - "Po zaokragleniu brutto nalezy ponownie wyliczyc cene netto tak, aby para netto/brutto byla zgodna z VAT tego cennika."
      - "Sama obecna struktura danych jest juz gotowa na te operacje, ale pelna kalkulacja nie jest jeszcze uznana za bezpieczna."

cost_component_rules:
  notes:
    - "Skladniki kosztu sa utrzymywane we wlasnym slowniku pim_dict_cost_component."
    - "Slownik ma dwa poziomy organizacji: grupa glowna i podgrupa."
    - "Grupy sluza organizacji kosztow i nie powinny byc bezposrednio przypisywane do kalkulacji symboli."

  static_components:
    notes:
      - "Czesc kosztow jest po prostu statyczna i pobierana z rejestru kosztow per symbol."

  bom_based_components:
    notes:
      - "Czesc kosztow jest obliczalna na podstawie BOM symbolu."
      - "Takie skladniki nie musza byc przechowywane jako gotowy wynik, jesli sa deterministycznie wyliczalne przy kalkulacji."

  rule_based_components:
    notes:
      - "Czesc kosztow jest obliczalna na podstawie reguly, np. koszt wysylki = liczba paczek symbolu * koszt paczki dla przewoznika."
      - "Struktura kosztow i cennikow musi dopuszczac taki sposob kalkulacji obok kosztow statycznych i BOM."

current_stage:
  notes:
    - "Aktualnie budujemy rejestr kosztow i cen, ktore istnieja juz w roznych zrodlach typu CSV / XLS / stare narzedzia."
    - "To jest etap porzadkowania i standaryzacji danych, nie etap koncowej automatycznej kalkulacji."
    - "Dopoki nie mamy kompletu danych i wszystkich regul, funkcje przeliczenia cen traktujemy jako pomocnicze, a nie w pelni bezpieczne."
    - "Widok glowny pricing nie powinien liczyc duzych agregacji na zywo; liczniki rejestrow i pozycji trzymamy w kolumnach cache i odswiezamy po imporcie, kalkulacji albo recznym checku z widoku Ustawienia."

future_integration:
  notes:
    - "Po uzupelnieniu danych pricing bedzie zrodlem odniesienia dla stats."
    - "Stats bedzie mogl porownywac na WZ i raportach: koszt kalkulacyjny, cene cennikowa, koszt BOM/PZ oraz faktyczna cene transakcyjna."
