Skip to content

BlackPearl02/DokFlow

Repository files navigation

Dokflow — konwerter do Optima

Konwerter plików Excel/CSV od dostawców na gotowy CSV do importu dokumentów w Comarch Optima przez kolektor danych. Język i rynek: polski.

Licencja: Projekt objęty licencją zastrzeżoną (proprietary). Wszelkie prawa zastrzeżone — bez pisemnej zgody autora nie wolno kopiować, modyfikować ani wykorzystywać tego kodu. Szczegóły: LICENSE.

Architektura

Aplikacja jest stateless pod względem plików:

  • Plik nigdy nie jest zapisywany na dysku ani w bazie danych.
  • Parsowanie i eksport odbywają się wyłącznie w pamięci.
  • Po przesłaniu pliku tworzona jest sesja w pamięci (Map w Node.js) identyfikowana przez sessionId.
  • Po wygenerowaniu i pobraniu CSV sesja jest usuwana; dane znikają z serwera.
  • Opcjonalnie sesje starsze niż 30 minut są usuwane przez okresowe czyszczenie (TTL).

Przepływ: UploadMapowanie kolumnGeneruj i pobierz CSV. Brak rejestracji, brak kont użytkowników.

Gwarancja usuwania danych

  • Żadne pliki nie są zapisywane. Zawartość uploadu trafia tylko do bufora w pamięci, jest parsowana i przechowywana w Map<sessionId, SessionData> w procesie Node.js.
  • Dane są usuwane po wywołaniu eksportu (pobraniu CSV) lub po upływie 30 minut od utworzenia sesji.
  • Logi nie zawierają zawartości plików — w kodzie obowiązuje zasada: nie logować treści uploadów ani wygenerowanego CSV.

Uruchomienie

npm install
npm run dev

Aplikacja dostępna pod http://localhost:3000.

Deploy na Vercel

Aplikacja jest gotowa do deployu na Vercel z wbudowanym Vercel Analytics.

Wymagania

  • Konto na Vercel
  • Repozytorium Git (GitHub, GitLab, Bitbucket)

Kroki deployu

  1. Zainstaluj zależności lokalnie (aby upewnić się, że wszystko działa):

    npm install
  2. Sklonuj repozytorium na Vercel:

    • Zaloguj się do Vercel Dashboard
    • Kliknij "Add New Project"
    • Połącz repozytorium Git
    • Vercel automatycznie wykryje Next.js i skonfiguruje projekt
  3. Skonfiguruj zmienne środowiskowe (opcjonalnie):

    • W ustawieniach projektu na Vercel dodaj zmienną:
      • NEXT_PUBLIC_BASE_URL — URL aplikacji (np. https://dokflow.pl)
    • Jeśli nie ustawisz, aplikacja użyje domyślnej wartości https://dokflow.pl
  4. Deploy:

    • Vercel automatycznie zbuduje i wdroży aplikację
    • Po deployu Vercel Analytics będzie automatycznie aktywny

Vercel Analytics

Vercel Analytics jest już zintegrowany w aplikacji. Po deployu na Vercel:

  • Analytics będzie automatycznie zbierał dane o ruchu
  • Dane będą dostępne w Vercel Dashboard
  • Nie wymaga dodatkowej konfiguracji

Analytics z Supabase

Aplikacja używa Supabase do trackowania szczegółowych eventów użytkowników (upload plików, eksport CSV, błędy).

Konfiguracja Supabase

  1. Utwórz projekt na Supabase:

    • Zaloguj się do Supabase
    • Utwórz nowy projekt (lub użyj istniejącego)
  2. Utwórz tabelę analytics_events:

    • Otwórz SQL Editor w Supabase Dashboard
    • Uruchom migrację z pliku supabase-migration.sql:
      -- Skopiuj zawartość supabase-migration.sql i uruchom w SQL Editor
  3. Pobierz klucze API:

    • W ustawieniach projektu → API
    • Skopiuj:
      • Project URL (NEXT_PUBLIC_SUPABASE_URL)
      • Service Role Key (SUPABASE_SERVICE_ROLE_KEY) — UWAGA: To jest sekretny klucz, nie udostępniaj go publicznie!
  4. Skonfiguruj zmienne środowiskowe na Vercel:

    • W ustawieniach projektu na Vercel → Environment Variables
    • Dodaj:
      • NEXT_PUBLIC_SUPABASE_URL — URL projektu Supabase
      • SUPABASE_SERVICE_ROLE_KEY — Service Role Key (sekretny)
  5. Lokalnie (opcjonalnie):

    • Utwórz plik .env.local:
      NEXT_PUBLIC_SUPABASE_URL=https://twoj-projekt.supabase.co
      SUPABASE_SERVICE_ROLE_KEY=twoj-service-role-key
  6. Google Analytics (GA4) (opcjonalnie):

    • W Google Analytics utwórz właściwość GA4 i skopiuj ID pomiaru (np. G-XXXXXXXXXX).
    • Dodaj do .env.local (lub zmienne środowiskowe Vercel):
      NEXT_PUBLIC_GA_MEASUREMENT_ID=G-XXXXXXXXXX
    • Bez tego klucza skrypt GA nie jest ładowany (brak błędów w konsoli).

Trackowane eventy

Aplikacja automatycznie trackuje:

  • file_uploaded — upload pliku (typ, rozmiar, rozszerzenie)
  • csv_exported — eksport CSV (waluta, przewalutowanie, liczba wierszy)
  • header_row_changed — zmiana wiersza nagłówka
  • parse_error — błędy parsowania plików

Wyświetlanie danych

Dane są zapisywane w tabeli analytics_events w Supabase. Możesz:

  • Otworzyć Table Editor w Supabase Dashboard
  • Utworzyć własne zapytania SQL
  • Eksportować dane do CSV/Excel
  • Utworzyć dashboard w Supabase (opcjonalnie)

Wyłączenie analytics

Aby wyłączyć tracking w development:

  • Dodaj do .env.local: NEXT_PUBLIC_DISABLE_ANALYTICS=true

Build lokalny

Aby przetestować build przed deployem:

npm run build
npm run start

Lint i formatowanie

  • ESLint (Next.js + Prettier): npm run lint, npm run lint:fix
  • Prettier: npm run format (zapis), npm run format:check (kontrola)

Ograniczenia MVP

  • Brak auth — brak kont, profili, płatności.
  • Brak zapisu mapowań — mapowanie kolumn ustawiane jest przy każdej sesji (sugestie heurystyczne można potwierdzić lub zmienić).
  • Format wyjściowy CSV dla Optima — bez nagłówka, format: symbol;ilość;cena (separator średnik, UTF-8 z BOM).
  • Brak obsługi merged cells i zaawansowanego formatowania Excela — parsowana jest tylko wartość komórek.
  • Nagłówek w dowolnym wierszu — użytkownik wybiera numer wiersza nagłówka (1-based); wiersze poniżej traktowane są jako dane.

Struktura projektu

  • app/ — Next.js App Router: landing, upload, map, download, API routes.
  • lib/ — parser (Excel/CSV), heurystyki mapowania, magazyn sesji w pamięci, generator CSV.
  • components/ — komponenty UI (upload, wybór wiersza nagłówka, formularz mapowania, przycisk pobrania).

API

  • POST /api/parsemultipart/form-data: plik + headerRowIndex. Zwraca sessionId, previewRows, suggestedMappings, columnLabels.
  • GET /api/session?sessionId=... — zwraca podgląd i sugestie dla strony mapowania (404 jeśli sesja nie istnieje).
  • POST /api/export — JSON: sessionId, mappings. Zwraca { csv }. Po odpowiedzi sesja jest usuwana.

Licencja

Projekt objęty licencją proprietary (wszelkie prawa zastrzeżone). Żadna osoba ani podmiot nie ma prawa kopiować, modyfikować, rozpowszechniać ani w jakikolwiek sposób wykorzystywać tego kodu bez pisemnej zgody autora. Zobacz LICENSE.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages