Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Εφαρμογή για στόλο ταξί: καταχώρηση βαρδιών από το κινητό, αυτόματος υπολογισμός ΦΠΑ, καθαρό ταμείο, στατιστικά απόδοσης, εξαγωγή σε Excel και ενημέρωση οδηγών μέσω WhatsApp. Βοηθητικό εργαλείο: δείχνει στον οδηγό πώς αποδίδει η δουλειά του και κρατά όλα τα οικονομικά του ταξί σε ένα μέρος. Τα ποσά είναι ενδεικτικά και δεν αντικαθιστούν τη δουλειά του λογιστή (lib/disclaimer.ts: το ίδιο κείμενο στην εφαρμογή).README 전문 보기 ↗
Εφαρμογή για στόλο ταξί: καταχώρηση βαρδιών από το κινητό, αυτόματος υπολογισμός ΦΠΑ, καθαρό ταμείο, στατιστικά απόδοσης, εξαγωγή σε Excel και ενημέρωση οδηγών μέσω WhatsApp.
Βοηθητικό εργαλείο: δείχνει στον οδηγό πώς αποδίδει η δουλειά του και κρατά όλα τα οικονομικά του ταξί σε ένα μέρος. Τα ποσά είναι ενδεικτικά και δεν αντικαθιστούν τη δουλειά του λογιστή (
lib/disclaimer.ts: το ίδιο κείμενο στην εφαρμογή).
| Admin (ιδιοκτήτης) | Οδηγός | |
|---|---|---|
| Βάρδιες | όλων των οδηγών του στόλου του | μόνο τις δικές του |
| Καταχώρηση βάρδιας | για οποιονδήποτε οδηγό του στόλου του | μόνο για τον εαυτό του |
| Διόρθωση/διαγραφή βάρδιας | πάντα | μόνο δικές του, μέσα σε 24 ώρες |
| Στατιστικά / ΦΠΑ / Ταμείο | συνολικά & ανά οδηγό | μόνο των δικών του βαρδιών |
| Υποδομή Στόλου, WhatsApp | ✔ | ✘ |
| Εξαγωγή Excel (CSV) | ✔ (τα φιλτραρισμένα) | ✔ (μόνο τα δικά του) |
| Άλλοι στόλοι | ✘ | ✘ |
Η απομόνωση των δεδομένων γίνεται μέσα στη βάση (RLS): ισχύει ακόμη κι αν κάποιος καλέσει απευθείας το API του Supabase με το δικό του λογαριασμό.
Οι ίδιοι τύποι υπάρχουν στον κώδικα (lib/accounting.ts, για τη ζωντανή προεπισκόπηση της φόρμας)
και μέσα στη βάση ως υπολογιζόμενες στήλες των πινάκων shifts, vehicle_expenses και
platform_statements — η βάση είναι η πηγή της αλήθειας και ο ΦΠΑ δεν μπορεί να γραφτεί χειροκίνητα.
| Μέγεθος | Τύπος |
|---|---|
| ΦΠΑ εσόδων 13% | round(Καθαρά × 0.129933, 2) — π.χ. 160,39 € → 20,84 € |
| Ταμείο (τζίρος) | Καθαρά + ΦΠΑ 13% + Φιλοδωρήματα/Άλλα έσοδα (χωρίς ΦΠΑ): ό,τι εισέπραξε το αυτοκίνητο, χωρίς καμία αφαίρεση |
| Σύνολο εξόδων | Καύσιμα των βαρδιών + Επισκευές / Συντήρηση (έξοδα οχήματος) + Κρατήσεις εφαρμογών του μήνα (τελικά ποσά)· τα «Άλλα έξοδα» όχι |
| ΦΠΑ εξόδων 24% (εμπεριεχόμενος) | round(ποσό / 1.24 × 0.24, 2) για καύσιμα, όλα τα έξοδα οχήματος (και τα «Άλλα έξοδα») και κρατήσεις με ΦΠΑ (π.χ. FreeNow)· οι κρατήσεις χωρίς ΦΠΑ (Uber, ενδοκοινοτικά) δεν συμψηφίζονται |
| Κράτηση εβδομάδας | Αυτόματα: ποσοστό × «Συνολικά έσοδα», + ΦΠΑ 24% όπου υπάρχει (π.χ. FreeNow 12% + ΦΠΑ, 99 € → 14,73 €)· ή η «Προμήθεια» του εγγράφου, αν γράφει άλλη. Ο ΦΠΑ 24% μέσα της βγαίνει αυτόματα — π.χ. 85,14 € → 16,48 € |
| Κράτηση εφαρμογής (μήνα) | Το μηνιαίο τιμολόγιο όταν έχει καταχωρηθεί, αλλιώς το άθροισμα των εβδομάδων |
| Προς απόδοση ΦΠΑ | ΦΠΑ 13% − ΦΠΑ εξόδων 24% → θετικό = Χρεωστικό, αρνητικό = Πιστωτικό |
| Καθαρό κέρδος | Ταμείο − ΦΠΑ 13% − καθαρή αξία εξόδων (χωρίς ΦΠΑ)· ο ΦΠΑ των εξόδων συμψηφίζεται χωριστά με τον ΦΠΑ 13% (προς απόδοση). Τα «Άλλα έξοδα» δεν αφαιρούνται· ο ΦΠΑ τους μπαίνει στον συμψηφισμό και προστίθεται στο κέρδος. Π.χ. Ζ 912: 204,85 − 23,56 − 19,35 = 161,94 €, ΦΠΑ 23,56 − 4,65 = 18,91 € προς απόδοση (στη βάση, net_cash = ταμείο − έξοδα, χωρίς τον ΦΠΑ) |
| Διαδρομές από τον δρόμο | Διαδρομές των Ζ − Διαδρομές των εφαρμογών |
| Συνολικά χλμ | Μισθωμένα + Ελεύθερα |
| Αξιοποίηση % | Μισθωμένα χλμ / Συνολικά χλμ × 100 |
| Απόδοση ανά χλμ | Καθαρά έσοδα / Συνολικά χλμ: μέσος όρος της περιόδου, στον μετρητή αξιοποίησης και στο Excel |
| Καύσιμα ανά χλμ | Καύσιμα των βαρδιών / Συνολικά χλμ: μέσο κόστος καυσίμου ανά χλμ σε € (και τα 100 χλμ στο Excel), ίδιες θέσεις |
| Μ.Ο. βάρδιας | Ταμείο / Βάρδιες (μπαλονάκι στα στατιστικά, όπως ο «Μ.Ο. ανά βάρδια» των «Αναλυτικών») |
| Μ.Ο. διαδρομής | (Καθαρά + ΦΠΑ 13%) / Διαδρομές, χωρίς φιλοδωρήματα (όπως η «Μέση αξία διαδρομής») |
| Επίπεδο αξιοποίησης | Βενζίνη, πετρέλαιο, αέριο: κάτω από 65% χαμηλή, 65–70% ικανοποιητική, από 70% πολύ ικανοποιητική· υβριδικό, ηλεκτρικό: 55% / 60%. Όλος ο στόλος: όρια ανάλογα με τα χλμ κάθε αυτοκινήτου () |
80,5) ή τελεία (80.5).vat_only_expenses της monthly_summary).
Καταχωρούν ο ιδιοκτήτης (για κάθε αυτοκίνητο) και ο οδηγός (μόνο για το δικό του)· ο οδηγός
διορθώνει/διαγράφει δικά του έξοδα μέσα σε 24 ώρες. Φαίνονται στην καρτέλα «Έξοδα» των «Καταχωρήσεων»,
στα «Συνολικά Έξοδα» («Καύσιμα · Επισκευές · Εφαρμογές», μόνο όσα υπάρχουν) και σε δική τους ενότητα στο Excel.Η σελίδα, απλή: πάνω η φόρμα («+ Νέα καταχώρηση»), μετά τα ποσά (Ταμείο, Συνολικά Έξοδα, Καθαρό Κέρδος) και από κάτω μπαλονάκια που φαίνονται χωρίς να ανοίξει τίποτα: Βάρδιες, Μ.Ο. βάρδιας, Διαδρομές, Μ.Ο. διαδρομής, Χλμ, Καθαρά χωρίς ΦΠΑ, Φιλοδωρήματα (όταν υπάρχουν). Για τον ιδιοκτήτη, με «Όλοι οι οδηγοί», και «Κέρδος ανά οδηγό»: ένα μπαλονάκι για κάθε οδηγό με το κέρδος του (ο καθένας χωριστά, με τα δικά του φορολογικά στοιχεία)· πάτημα → μόνο αυτός στο φίλτρο. Ακολουθούν ο μετρητής αξιοποίησης (με την απόδοση και τα καύσιμα ανά χλμ) και ο ΦΠΑ. Πάνελ που ανοίγουν/κλείνουν είναι πέντε (ο οδηγός έχει τα δύο πρώτα): Αναλυτικά (με τον πίνακα «Ανά οδηγό» στο τέλος), Καταχωρήσεις με καρτέλες Βάρδιες | Έξοδα | Εφαρμογές (με το πλήθος τους· η καρτέλα μένει στη συσκευή και αλλάζει μόνη της σε ό,τι μόλις καταχωρήθηκε), Υποδομή Στόλου, Πάγια έξοδα και Αντίγραφο ασφαλείας. Κλειστές, οι «Καταχωρήσεις» γράφουν «Βάρδιες 7 · Έξοδα 2 · Εφαρμογές 1» και τις σημάνσεις «λείπει 1 Ζ» / «λείπουν 2 εβδ.».
Εικονίδιο στο κινητό: «Εγκατάσταση» (Android: κουμπί στην κεντρική σελίδα και στο «Καλώς ήρθατε»·
iPhone: «Κοινοποίηση» → «Προσθήκη στην οθόνη Αφετηρίας»). Ανοίγει σε πλήρη οθόνη χωρίς τη γραμμή του
browser. Αν ανοίξει χωρίς σήμα, δείχνει τη σελίδα «Χωρίς σύνδεση» (service worker, χωρίς να κρατά
στοιχεία). Τα PNG των εικονιδίων βγαίνουν από τα SVG με node scripts/icons.mjs.
Κίνηση ανοίγματος: μία φορά σε κάθε άνοιγμα της εφαρμογής, όσο φορτώνουν τα στοιχεία· ένα πάτημα
την κλείνει. Την πρώτη φορά μόνο το λογότυπο (μετά έρχεται το «Καλώς ήρθατε»)· από εκεί και πέρα κάθε
άνοιγμα δείχνει άλλη διαδρομή στον χάρτη και μία άλλη δυνατότητα της εφαρμογής, πρώτο τον ΦΠΑ του
μήνα (components/intro/scenes.ts).
«Καλώς ήρθατε»: πέντε κάρτες με κινούμενα σχέδια: για τον οδηγό (ό,τι φαίνεται αμέσως από το Ζ), αξιοποίηση χιλιομέτρων, ΦΠΑ στο τέλος του μήνα (από Ζ, έξοδα και τιμολόγια εφαρμογών), γιατί φτιάχτηκε. Το ταμείο δεν «υπόσχεται» να φαίνεται αμέσως: βγαίνει σωστό όταν μπουν και τα τιμολόγια των εφαρμογών. Βγαίνει μόνη της την πρώτη φορά σε κάθε συσκευή και ξανά από το «Τι κάνει η εφαρμογή» (σύνδεση και κάτω κάτω στην κεντρική). Με «μείωση κίνησης» στο κινητό όλα μένουν ακίνητα.
Αναλυτικά (Πίνακας / Γράφημα): κάτω από τα στατιστικά (για τον ιδιοκτήτη, με «Όλοι οι οδηγοί», και ο πίνακας «Ανά οδηγό» στο τέλος: καθαρά, ΦΠΑ, κέρδος· πάτημα σε όνομα φιλτράρει). Ανοίγει ως πίνακας με Τζίρο (μικτή είσπραξη), Διαδρομές και ((καθαρά + ΦΠΑ 13%) ÷ διαδρομές, χωρίς φιλοδωρήματα), με σύνολο και μέσο όρο.
Αν θέλετε να κρατήσετε το παλιό project, δείτε πρώτα την ενότητα Παλιό Supabase project.
supabase/migrations, με τη σειρά, και πατήστε
Run για το καθένα (πρέπει να δείτε «Success. No rows returned»):
20260927120000_taxi_fleet.sql — πίνακες, κανόνες ασφαλείας20260927160000_shift_editing.sql — διόρθωση βαρδιών20260928090000_vehicle_expenses.sql — έξοδα οχήματος20260928140000_platform_statements.sql — εφαρμογές (Uber / FreeNow / Bolt)20260929090000_fleets.sql — χωριστοί στόλοι, προσκλήσεις οδηγών
(τα στοιχεία που υπάρχουν ήδη γίνονται ο στόλος του υπάρχοντος Admin)Δημιουργούνται οι πίνακες profiles, fleets, drivers, shifts, vehicle_expenses, platform_rates, platform_statements,
η αναφορά monthly_summary (σύνολα ανά αυτοκίνητο/μήνα, μαζί με τα έξοδα οχήματος, τις κρατήσεις
και τις διαδρομές δρόμου / εφαρμογών, για χρήση και από το Table Editor) και όλοι οι κανόνες ασφαλείας.
Εναλλακτικά με το CLI:
npx supabase login,npx supabase link --project-ref <ref>,npx supabase db push.
Authentication → URL Configuration
https://taxi-fleet.vercel.app
(για δοκιμές στον υπολογιστή: http://localhost:3000).https://taxi-fleet.vercel.app/**http://localhost:3000/**Email (σημαντικό): η δωρεάν υπηρεσία email του Supabase στέλνει email μόνο στα μέλη της ομάδας του project και ελάχιστα την ώρα. Για να κάνουν οι οδηγοί μόνοι τους εγγραφή, ρυθμίστε δικό σας SMTP στο Authentication → Emails → SMTP Settings (π.χ. Resend, Brevo ή Gmail με App Password). Αν δεν θέλετε SMTP, δείτε την «Επιλογή Β» στο βήμα 7.
Μην απενεργοποιήσετε το Confirm email: η επιβεβαίωση αποδεικνύει ότι το email ανήκει πράγματι στον οδηγό πριν δει τα στοιχεία του.
Το URL και το publishable key του project βρίσκονται ήδη μέσα στον κώδικα
(lib/supabase/config.ts): είναι δημόσιες τιμές (τις λαμβάνει ο browser
κάθε επισκέπτη) και την ασφάλεια την κάνουν οι κανόνες RLS της βάσης. Άρα δεν χρειάζονται
μεταβλητές περιβάλλοντος ούτε .env.local.
Για άλλο Supabase project (ή τοπικό Supabase), αλλάξτε τις δύο τιμές στο αρχείο αυτό ή ορίστε
και τις δύο μεταβλητές (έχουν προτεραιότητα· δείτε το .env.example):
NEXT_PUBLIC_SUPABASE_URL=https://xxxxxxxxxxxxxxxxxxxx.supabase.co
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...
Τιμές-παράδειγμα με xxxx… αγνοούνται. Σε παλαιότερα projects, αντί για publishable key μπορείτε να
βάλετε το anon key στη μεταβλητή NEXT_PUBLIC_SUPABASE_ANON_KEY. Ποτέ το secret /
service_role key — η εφαρμογή το αναγνωρίζει και αρνείται να ξεκινήσει.
Χρειάζεται Node.js 20.9+ (προτείνεται 22).
npm install
npm run dev
Ανοίξτε το http://localhost:3000. Αν κάτι λείπει (μεταβλητές, SQL), η εφαρμογή δείχνει οδηγίες αντί για σφάλμα.
ΤΑΕ-1234),
Κινητό (69XXXXXXXX) και προαιρετικά Email σύνδεσης.Ο οδηγός κάνει εγγραφή με το email που δηλώσατε ως «Email σύνδεσης» και, αφού το επιβεβαιώσει, βλέπει την πρόσκληση (ποιος στόλος, ποιο αυτοκίνητο). Μπαίνει στον στόλο μόνο όταν πατήσει «Αποδοχή»: κανένας στόλος δεν «τραβάει» λογαριασμό χωρίς τη συγκατάθεσή του. Κάθε λογαριασμός ανήκει σε έναν στόλο.
…/register, επιβεβαιώνει το email, πατά «Αποδοχή» και βλέπει τις δικές του βάρδιες.Ο ιδιοκτήτης δεν βλέπει ποιοι έκαναν εγγραφή στην εφαρμογή (μπορεί να είναι άλλων στόλων). Αν κάποιος οδηγός γραφτεί με διαφορετικό email, γράψτε αυτό το email στην Επεξεργασία του οδηγού και ο οδηγός πατά «Ανανέωση» και «Αποδοχή». Για να κόψετε την πρόσβαση ενός οδηγού: σβήστε το email του ή πατήστε Απενεργοποίηση (κρατά το ιστορικό του).
Στο κινητό: άνοιγμα της σελίδας → μενού browser → «Προσθήκη στην αρχική οθόνη» για να ανοίγει σαν εφαρμογή.
NEXT_PUBLIC_…, διαλέξτε τύπο Config (όχι Secret) και κάντε Redeploy:
ενσωματώνονται στο build.Η παλιά έκδοση αποθήκευε τα πάντα στον browser (localStorage). Ανοίξτε τη νέα εφαρμογή στον ίδιο
browser και στην ίδια διεύθυνση (π.χ. http://localhost:3000), συνδεθείτε ως Admin και πατήστε
«Μεταφορά στο Supabase». Οι οδηγοί αντιστοιχίζονται με το όνομα (οι νέοι δημιουργούνται
αυτόματα), ο ΦΠΑ υπολογίζεται ξανά από τη βάση και ένα αντίγραφο των παλιών δεδομένων μένει
στη συσκευή. Η μεταφορά μπορεί να ξανατρέξει χωρίς διπλοεγγραφές.
| Μήνυμα / πρόβλημα | Λύση |
|---|---|
| «Χρειάζεται σύνδεση με το Supabase» | Λάθος τιμή στις μεταβλητές ή στο lib/supabase/config.ts (βήμα 4). Μετά την αλλαγή: restart (npm run dev) ή Redeploy. |
| «Η βάση δεδομένων δεν έχει ρυθμιστεί» | Δεν έχει εκτελεστεί το SQL του βήματος 2. |
| «Δεν υπάρχει επικοινωνία με το Supabase» | Internet, λάθος URL ή παύση project: τα δωρεάν projects παγώνουν μετά από μέρες αδράνειας → supabase.com → Restore project. |
| Δεν έρχεται email επιβεβαίωσης | Ελέγξτε τα ανεπιθύμητα· χωρίς δικό σας SMTP το Supabase στέλνει μόνο σε μέλη της ομάδας (βήμα 3) — ή χρησιμοποιήστε την Επιλογή Β. |
| Ο σύνδεσμος του email οδηγεί σε σφάλμα | Ελέγξτε Site URL / Redirect URLs (βήμα 3). Αν ο σύνδεσμος άνοιξε σε άλλον browser, το email έχει επιβεβαιωθεί: απλώς συνδεθείτε. |
| Ο οδηγός δεν βλέπει πρόσκληση | Το email του δεν ταιριάζει με το «Email σύνδεσης» ή δεν το έχει επιβεβαιώσει. Διορθώστε το email στην «Επεξεργασία» και ο οδηγός να πατήσει «Ανανέωση». |
| «Ο λογαριασμός σας είναι ήδη οδηγός σε στόλο» | Κάθε λογαριασμός ανήκει σε έναν στόλο. Για άλλον στόλο χρειάζεται άλλο email (ή ο πρώτος ιδιοκτήτης σβήνει το email του οδηγού). |
| Ο οδηγός δεν μπορεί να διορθώσει ή να διαγράψει βάρδια | Οι οδηγοί διορθώνουν/διαγράφουν μόνο δικές τους καταχωρήσεις μέσα σε 24 ώρες· μετά μόνο ο admin. |
| Δύο ιδιοκτήτες στον ίδιο στόλο | Δεν υποστηρίζεται ακόμη: ένας ιδιοκτήτης (Admin) ανά στόλο. |
Το SQL σταματά με μήνυμα αν βρει ήδη πίνακες profiles, drivers ή shifts. Αν θέλετε να κρατήσετε
το παλιό project χωρίς να χαθεί τίποτα, μετακινήστε πρώτα τους παλιούς πίνακες σε ξεχωριστό schema
(μαζί με τα ευρετήριά τους, εκτός API) και μετά τρέξτε το SQL:
create schema if not exists old_backup;
revoke all on schema old_backup from public, anon, authenticated;
alter table if exists public.profiles set schema old_backup;
alter table if exists public.drivers set schema old_backup;
alter table if exists public.shifts set schema old_backup;
Μια απλή μετονομασία (rename) δεν αρκεί: τα ευρετήρια κρατούν τα παλιά ονόματα (π.χ. profiles_pkey)
και συγκρούονται με τα νέα.
Ελέγξτε επίσης για παλιά triggers στους λογαριασμούς (που μπορεί να γράφουν στους παλιούς πίνακες):
select tgname from pg_trigger where tgrelid = 'auth.users'::regclass and not tgisinternal;
Όσα δεν είναι on_auth_user_created / on_auth_user_updated διαγράψτε τα με
drop trigger <όνομα> on auth.users;. Οι υπάρχοντες λογαριασμοί διατηρούνται και ο ιδιοκτήτης
γίνεται Admin με το κουμπί του βήματος 6.
app/ σελίδες (App Router): /, /login, /register, /forgot-password,
/update-password, /auth/callback, /welcome· manifest, εικονίδια, intro.css
components/dashboard/ Dashboard, φόρμα βάρδιας, στατιστικά, ιστορικό, στόλος, ουρά αποστολής
components/intro/ κίνηση ανοίγματος, «Καλώς ήρθατε», εγκατάσταση στο κινητό, service worker
public/sw.js, offline.html service worker και η σελίδα «Χωρίς σύνδεση»
scripts/icons.mjs PNG εικονίδια (Android, iPhone) από τα SVG
lib/accounting.ts λογιστικοί υπολογισμοί (σε λεπτά) — ίδιοι με τη βάση
lib/chart.ts, table.ts δεδομένα γραφήματος και πίνακα «Αναλυτικά» (ανά βάρδια / μήνα / οδηγό)
lib/expenses.ts έξοδα οχήματος (είδη, φόρμα)
lib/fixed-costs.ts πάγια έξοδα ανά αυτοκίνητο (μηνιαία ποσά, μόνο πληροφοριακά)
lib/platforms.ts εφαρμογές (ποσοστό, αυτόματη προμήθεια και έλεγχος, εβδομάδες του μήνα, τιμολόγιο ή εβδομάδες, φόρμα)
lib/csv.ts, whatsapp.ts εξαγωγή Excel και μήνυμα WhatsApp
lib/backup.ts, xlsx.ts αντίγραφο ασφαλείας (Excel με όλους τους πίνακες, χωρίς βιβλιοθήκη· υπενθύμιση 30 ημερών)
lib/zgaps.ts «Λείπει Ζ»: κενά στα Ζ κάθε οδηγού
lib/supabase/ clients (browser/server) και ανανέωση συνεδρίας για τον proxy
proxy.ts ανανέωση συνεδρίας & ανακατεύθυνση στο /login (Next.js 16: πρώην middleware)
supabase/migrations/ σχήμα βάσης, υπολογιζόμενες στήλες, triggers, RLS
supabase/tests/ tests ασφαλείας/λογιστικής της βάσης (pgTAP)
e2e/ πλήρης αυτόματος έλεγχος στον browser (Playwright): run.sh, run.mjs
| Εντολή | |
|---|---|
npm run dev | εκτέλεση για ανάπτυξη |
npm test | unit tests (λογιστική, έξοδα οχήματος, πίνακας/γράφημα, CSV, WhatsApp, φόρμα, μεταφορά δεδομένων) |
npm run lint / npm run typecheck | έλεγχοι κώδικα |
npm run build | production build |
npm run db:start | τοπικό Supabase (χρειάζεται Docker) |
npm run db:reset | επαναδημιουργία τοπικής βάσης από τα migrations |
npm run db:test | tests της βάσης: ποιος βλέπει τι, ΦΠΑ, triggers |
npm run db:types | TypeScript τύποι από την τοπική βάση (lib/database.types.ts) |
bash e2e/run.sh | πλήρης αυτόματος έλεγχος στον browser (ιδιοκτήτης/οδηγοί, κινητό/υπολογιστής) σε τοπική βάση δοκιμών — χρειάζεται Docker |
Για τοπικό Supabase: npm run db:start, και στο .env.local βάλτε το API_URL και το
PUBLISHABLE_KEY που εμφανίζει η εντολή. Τα email επιβεβαίωσης φαίνονται στο Mailpit
(http://127.0.0.1:54324).
lib/utilization.tstips).platform_rates.active). Για όσες είναι «εκτός» δεν ζητούνται εβδομάδες (ούτε
μηδενικά) και δεν φαίνονται στη φόρμα· το ποσοστό τους μένει για όταν ξαναμπούν. Εφαρμογή χωρίς ποσοστό
ανοίγει τη φόρμα, που το ζητά μία φορά. Δικαιώματα όπως στα έξοδα
οχήματος· δική τους ενότητα στο Excel· κρατήσεις και διαδρομές δρόμου στον πίνακα «Δρόμος & Εφαρμογές»
της ίδιας καρτέλας.Η συσκευή θυμάται την τελευταία επιλογή (πίνακας/γράφημα, ανά βάρδια/μήνα, κουμπί γραφήματος).
Μεγάλα γράμματα: όλη η εφαρμογή έχει μεγαλύτερα, πιο ευανάγνωστα γράμματα. Με το κουμπί «Α+» (πάνω δεξιά, και στη σελίδα σύνδεσης) μεγαλώνουν ακόμη περισσότερο· η συσκευή το θυμάται.
Εξαγωγή Excel (CSV): κουμπί στην κορυφή· εξάγει ό,τι βλέπετε (περίοδος/οδηγός) σε UTF-8 με BOM,
διαχωριστικό ; και ελληνική υποδιαστολή, ώστε να ανοίγει σωστά στο ελληνικό Excel. Περιλαμβάνει
γραμμή συνόλων και σύνοψη ΦΠΑ για τον λογιστή.
Αξιοποίηση χιλιομέτρων: σκούρα κάρτα με κυκλικό μετρητή (όπως στο «Καλώς ήρθατε») μέσα στα
στατιστικά, μετά τα ποσά: μισθωμένα / συνολικά χλμ, απόδοση και καύσιμα ανά χλμ, επίπεδο με χρώμα (κόκκινο =
χαμηλή, με προτροπή για περισσότερα μισθωμένα χλμ· γαλάζιο = ικανοποιητική· πράσινο = πολύ
ικανοποιητική) και κλίμακα σύγκρισης. Τα όρια εξαρτώνται από το καύσιμο του αυτοκινήτου
(drivers.fuel): διαλέγεται στο «Έχω δικό μου ταξί» (υποχρεωτικό) και στην «Υποδομή Στόλου»· για
αυτοκίνητα χωρίς καύσιμο ο ιδιοκτήτης το διαλέγει μία φορά μέσα στην κάρτα (μέχρι τότε ισχύουν τα
όρια βενζίνης/πετρελαίου/αερίου).
Πάγια έξοδα (πάνελ, μόνο ο ιδιοκτήτης): σταθερά μηνιαία ποσά, χωριστά για κάθε αυτοκίνητο —
Κόστος άδειας και Ταμείο / ΕΦΚΑ / ΙΚΑ. Μπαίνουν μία φορά και αλλάζουν όποτε χρειαστεί
(«Συμπλήρωση» / «Αλλαγή»), με επεξήγηση κάτω από κάθε πεδίο· κενό πεδίο = δεν δηλώθηκε (το 0 είναι
δηλωμένο ποσό). Κάθε γραμμή δείχνει τα δύο ποσά και το σύνολό τους — ποτέ άθροισμα δύο αυτοκινήτων,
όπως και τα υπόλοιπα φορολογικά στοιχεία κάθε οδηγού. Μόνο φαίνονται: δεν αλλάζουν το Ταμείο, τα
Συνολικά Έξοδα, το Καθαρό Κέρδος ούτε τον ΦΠΑ (στη βάση: στήλες license_cost και efka_cost της
drivers, που δεν περνούν στη monthly_summary· μπαίνουν και στο Αντίγραφο ασφαλείας).
WhatsApp: δίπλα στην κάρτα «Προς Απόδοση ΦΠΑ» (οδηγός στο φίλτρο, ή το μόνο αυτοκίνητο του
στόλου). Στέλνει μόνο τον ΦΠΑ: εικόνα 1080×1080 στο ίδιο σκούρο στυλ (περίοδος, αυτοκίνητο, ΦΠΑ
εσόδων/εξόδων, ποσό, Χρεωστικό/Πιστωτικό, «Ενδεικτικός υπολογισμός») και σύντομο μήνυμα. Στο κινητό
ανοίγει το μενού κοινοποίησης (WhatsApp → παραλήπτης)· στον υπολογιστή ανοίγει wa.me/30… με το
μήνυμα και η εικόνα κατεβαίνει με το «Λήψη εικόνας».
Στείλτε την εφαρμογή σε φίλο (κάτω, μόνο ο ιδιοκτήτης): ανοίγει το WhatsApp με έτοιμο μήνυμα και
τον σύνδεσμο της εφαρμογής· το WhatsApp δείχνει την εικόνα προεπισκόπησης app/opengraph-image.png
(πηγή: scripts/share-image.svg, ξαναφτιάχνεται με node scripts/icons.mjs).
Χωρίς σήμα: αν πέσει το internet τη στιγμή της καταχώρησης, η βάρδια κρατιέται στη συσκευή και στέλνεται αυτόματα μόλις επανέλθει η σύνδεση (χωρίς κίνδυνο διπλοεγγραφής).
Μεταφορά από την παλιά τοπική έκδοση: αν ανοίξετε την εφαρμογή στον ίδιο browser/διεύθυνση όπου τρέχατε την offline έκδοση, ο admin βλέπει κουμπί «Μεταφορά στο Supabase».
Αντίγραφο ασφαλείας (μόνο ο admin): πάνελ στο τέλος της σελίδας· κατεβάζει όλους τους πίνακες
σε ένα αρχείο Excel taxi-fleet-antigrafo-ΕΕΕΕ-ΜΜ-ΗΗ.xlsx, μία καρτέλα για κάθε είδος (βάρδιες,
έξοδα οχήματος, εφαρμογές, ποσοστά, οδηγοί, λογαριασμοί) με ελληνικούς τίτλους, ονόματα αντί για
κωδικούς και ποσά σε ευρώ· στο τέλος κάθε καρτέλας οι στήλες της βάσης για την επαναφορά. Στο δωρεάν
πακέτο η Supabase δεν δίνει αντίγραφα για κατέβασμα, γι' αυτό η εφαρμογή το θυμίζει πάνω στη σελίδα
όταν έχουν περάσει 30 μέρες. Η ημερομηνία του τελευταίου αντιγράφου μένει στον λογαριασμό (user
metadata), ίδια σε κινητό και υπολογιστή. Το αρχείο πάει στις «Λήψεις» και στο κινητό ανοίγει με
Excel ή «Υπολογιστικά φύλλα Google» (χωρίς αυτά φαίνεται με λευκό εικονίδιο και δεν ανοίγει· γι' αυτό
το πάνελ έχει, πριν από το κατέβασμα, κουμπιά Google Play και App Store για την εφαρμογή). Γράφεται όπως τα γράφει το ίδιο το Excel (κείμενα στο sharedStrings, ιδιότητες
εγγράφου), γιατί κάποιες εφαρμογές δεν διαβάζουν κείμενα γραμμένα μέσα στο κελί.
«Λείπει Ζ» (μόνο ο admin): τα Ζ κάθε οδηγού είναι συνεχόμενα· κάθε οδηγός ελέγχεται χωριστά, και όταν μοιράζεται αυτοκίνητο (έχει δικά του φορολογικά στοιχεία). Αν λείπει Ζ ανάμεσα σε δύο καταχωρημένα (π.χ. 5, 6, 8 → λείπει το Ζ 7), οι «Καταχωρήσεις» το γράφουν στον τίτλο (με τελεία στην καρτέλα «Βάρδιες») και η καρτέλα μέσα. Όχι για Ζ πριν από το πρώτο ή μετά το τελευταίο της περιόδου· πολύ μεγάλο κενό (πάνω από 31) εμφανίζεται ως «μήπως γράφτηκε λάθος ο αριθμός».