Trois accès protégés par un code : le vôtre, avec tous les droits, l’accès Chauffeur, qui sert seulement à déposer des tickets, et l’accès Invité, en lecture seule.
Accès complet : ajouter, importer, modifier et supprimer vos tickets.
Votre identifiant et votre mot de passe vous sont donnés par votre employeur. Vous pouvez ajouter vos tickets à la main, importer vos PDF ou photographier vos reçus, mais vous ne pouvez ni modifier ni supprimer les tickets déjà enregistrés.
Collez ici le code que votre employeur vous a envoyé (code de l’entreprise ou code personnel). Il sert à envoyer vos tickets tout de suite, par internet.
Consultation et export de vos tickets, sans aucune modification possible.
Identifiants incorrects. Réessayez.
Votre code d’accès vous est donné par le responsable du carnet. La première connexion prépare l’application toute seule : rien à régler.
Aucun compte ne se crée depuis cette page : les trois accès existent déjà et sont protégés par un code.
Suivi TICPE professionnel
Carnet Carburant
Importez vos PDF UTA, photos de tickets, détectez les doublons et optimisez votre remboursement TICPE
🚛 Accès Chauffeur : vous pouvez ajouter vos tickets à la main, importer vos PDF ou photographier vos reçus. Les tickets déjà enregistrés ne peuvent pas être modifiés ni supprimés.
📴 Pas de réseau en ce moment — vous pouvez continuer : vos tickets sont gardés sur ce téléphone et partiront tout seuls dès que le réseau reviendra.
Bonjour — 👋
Aucun ticket pour le moment.
Vous pouvez travailler sans réseau : tout est gardé sur le téléphone. Pour donner vos tickets à votre employeur, touchez « Envoyer mes tickets ».
👁️ Accès Invité : lecture seule. Vous pouvez consulter, filtrer, imprimer et exporter, mais aucune modification n’est possible.
🔍
AdBlue visible
Local
☁️ Mon compte et synchronisation
Mode local : vos tickets sont enregistrés uniquement sur cet appareil.
Connecté avec —. Vos tickets sont enregistrés en ligne et se retrouvent automatiquement sur votre téléphone, votre tablette et votre ordinateur.
🔑 Vos codes d’entrée
Ces deux codes ne changent pas. Gardez le premier pour vous, donnez le second aux personnes qui doivent seulement consulter le carnet.
Mon compte (tous les droits) : —
Invité (lecture seule) : —
Les chauffeurs, eux, ont leur propre identifiant et leur propre code, créés avec le bouton « 🚛 Chauffeurs ».
Vous travaillez hors connexion. Connectez-vous pour partager vos tickets entre plusieurs appareils.
⚡ Liaison directe internet — les tickets arrivent tout de suite
Liaison directe : pas encore activée.
À faire une seule fois : créez un espace gratuit sur supabase.com, collez les deux informations ci-dessous, cliquez sur « Activer ». Ensuite, chaque ticket saisi par un chauffeur apparaît dans votre carnet en quelques secondes, sans rien rafraîchir.
Sur supabase.com, créez un compte gratuit puis un nouvel espace (« New project »).
Dans « Project Settings » → « API », copiez l’adresse de l’espace et la clé « anon public », puis collez-les dans les deux cases ci-dessus.
Ouvrez « SQL Editor », cliquez sur « 📋 Copier le texte à coller » ci-dessous, collez dans la fenêtre puis cliquez sur « Run ».
Revenez ici et cliquez sur « ⚡ Activer la liaison directe ». C’est fini : aucun compte e-mail à créer.
create table if not exists public.tickets_partages (
id text primary key,
equipe text not null,
data jsonb not null,
auteur text,
maj timestamptz not null default now()
);
create index if not exists tickets_partages_equipe on public.tickets_partages (equipe);
alter table public.tickets_partages enable row level security;
drop policy if exists "lecture equipe" on public.tickets_partages;
drop policy if exists "depot equipe" on public.tickets_partages;
drop policy if exists "maj equipe" on public.tickets_partages;
drop policy if exists "suppression equipe" on public.tickets_partages;
create policy "lecture equipe" on public.tickets_partages for select using (true);
create policy "depot equipe" on public.tickets_partages for insert with check (true);
create policy "maj equipe" on public.tickets_partages for update using (true);
create policy "suppression equipe" on public.tickets_partages for delete using (true);
alter publication supabase_realtime add table public.tickets_partages;
create table if not exists public.chauffeurs_equipe (
equipe text not null,
login text not null,
name text,
code_hash text not null,
active boolean not null default true,
maj timestamptz not null default now(),
primary key (equipe, login)
);
create index if not exists chauffeurs_equipe_equipe on public.chauffeurs_equipe (equipe);
alter table public.chauffeurs_equipe enable row level security;
drop policy if exists "lecture chauffeurs" on public.chauffeurs_equipe;
drop policy if exists "ajout chauffeurs" on public.chauffeurs_equipe;
drop policy if exists "maj chauffeurs" on public.chauffeurs_equipe;
drop policy if exists "suppression chauffeurs" on public.chauffeurs_equipe;
create policy "lecture chauffeurs" on public.chauffeurs_equipe for select using (true);
create policy "ajout chauffeurs" on public.chauffeurs_equipe for insert with check (true);
create policy "maj chauffeurs" on public.chauffeurs_equipe for update using (true);
create policy "suppression chauffeurs" on public.chauffeurs_equipe for delete using (true);
alter publication supabase_realtime add table public.chauffeurs_equipe;
À savoir : le code de votre entreprise sert de clé. Toute personne qui possède ce code et votre clé publique peut lire et ajouter des tickets. Ne les donnez qu’à vos chauffeurs.
⚙️ Réglage avancé : liaison avec comptes e-mail (facultatif)
Inutile si vous avez activé la liaison directe ci-dessus. Cette version demande de créer trois comptes e-mail sur le serveur.
À faire une seule fois, sur supabase.com (offre gratuite) :
Créez un compte, puis un nouveau projet.
Dans « Project Settings » → « API », copiez l’adresse du projet (Project URL) et la clé publique (anon public), puis collez-les ci-dessus.
Dans « Authentication » → « Users » → « Add user », créez trois utilisateurs seulement : un pour vous (« Mon compte »), un pour les chauffeurs (« Chauffeur ») et un pour l’accès « Invité ». Cochez « Auto Confirm User ». Reportez leurs trois e-mails dans les champs ci-dessus.
Dans « Authentication » → « Sign In / Providers » → « Email », désactivez « Allow new users to sign up » : personne ne pourra créer d’autre accès.
Ouvrez « SQL Editor », cliquez sur « 📋 Copier le texte SQL » ci-dessous (vos e-mails sont déjà mis dedans), collez et cliquez sur « Run ».
Recopiez le mot de passe du compte « Mon compte » dans le champ prévu ci-dessus : votre code habituel ouvrira alors la liaison en direct, sans rien saisir de plus.
Avec le bouton « 🚛 Chauffeurs » de la barre du haut, créez un identifiant et un code pour chaque chauffeur, puis envoyez-lui son lien personnel : son téléphone se règle tout seul et ses tickets arrivent chez vous en direct.
Pour vérifier, cliquez sur « 📡 Tester la connexion » : l’application vous dit en français ce qui manque encore, s’il manque quelque chose.
create table if not exists public.entries (
id text primary key,
user_id uuid not null default auth.uid() references auth.users(id) on delete cascade,
data jsonb not null,
updated_at timestamptz not null default now()
);
alter table public.entries enable row level security;
-- Lecture : mon compte voit ses tickets et ceux déposés par les chauffeurs,
-- l'invité voit tout en lecture seule, le chauffeur ne voit que ses propres dépôts
-- (remplacez les e-mails ci-dessous par les vôtres)
create policy "lecture" on public.entries
for select using (
auth.uid() = user_id
or auth.jwt() ->> 'email' in ('moi@exemple.fr', 'invite@exemple.fr')
);
-- Dépôt de tickets : mon compte et l'accès chauffeur
create policy "ajout de tickets" on public.entries
for insert with check (auth.uid() = user_id);
-- Modification et suppression : mon compte uniquement
-- (le chauffeur dépose mais ne peut rien changer, l'invité reste en lecture seule)
create policy "modification par mon compte" on public.entries
for update using (auth.jwt() ->> 'email' = 'moi@exemple.fr');
create policy "suppression par mon compte" on public.entries
for delete using (auth.jwt() ->> 'email' = 'moi@exemple.fr');
-- Remontée instantanée : les tickets déposés par les chauffeurs apparaissent
-- tout de suite dans votre carnet, sans rien rafraîchir
alter publication supabase_realtime add table public.entries;
🚛 Mes chauffeurs
Créez ici le compte de chaque chauffeur, puis donnez-lui son identifiant et son code d’accès. Il ouvre la même application sur son téléphone, choisit l’onglet « Chauffeur », saisit ces deux informations et peut alors seulement déposer ses tickets.
Chargement des comptes chauffeurs…
➕ Ajouter un chauffeur
👥 Chauffeurs et codes d’accès
Les codes restés visibles ci-dessous sont mémorisés uniquement sur cet appareil, pour que vous puissiez les retrouver et les renvoyer à vos chauffeurs. Si un code est perdu, créez-en simplement un nouveau.
Aucun chauffeur pour le moment.
🧾 Qui a déposé les tickets
Chaque ticket garde en mémoire le nom de la personne qui l’a déposé, avec la date. Voici le total par personne.
Aucun ticket pour le moment.
🔐 Clé de l’accès chauffeur (une seule fois)
Saisissez ici, une seule fois, le mot de passe du compte « Chauffeur » créé sur le serveur. Il est conservé uniquement sur le serveur, jamais dans les téléphones : c’est lui qui permet aux identifiants de vos chauffeurs de fonctionner.
À faire une seule fois, dans votre projet Supabase :
Ouvrez « SQL Editor », collez le texte ci-dessous et cliquez sur « Run ».
Revenez ici, saisissez le mot de passe du compte « Chauffeur » du serveur et enregistrez-le.
Créez vos chauffeurs ci-dessus, puis donnez à chacun son identifiant et son mot de passe.
-- Remplacez moi@exemple.fr par l'e-mail de votre accès « Mon compte »
create table if not exists public.drivers (
login text primary key,
name text not null default '',
pass_hash text not null,
active boolean not null default true,
created_at timestamptz not null default now()
);
alter table public.drivers enable row level security;
create policy "gestion des chauffeurs" on public.drivers
for all using (auth.jwt() ->> 'email' = 'moi@exemple.fr')
with check (auth.jwt() ->> 'email' = 'moi@exemple.fr');
create table if not exists public.driver_secret (
id int primary key default 1,
email text not null default '',
secret text not null,
constraint une_seule_ligne check (id = 1)
);
alter table public.driver_secret enable row level security;
create policy "cle de l acces chauffeur" on public.driver_secret
for all using (auth.jwt() ->> 'email' = 'moi@exemple.fr')
with check (auth.jwt() ->> 'email' = 'moi@exemple.fr');
-- Vérifie l'identifiant et le mot de passe d'un chauffeur
create or replace function public.driver_login(p_login text, p_hash text)
returns jsonb
language plpgsql
security definer
set search_path = public
as $$
declare v_name text; v_secret text; v_email text;
begin
select coalesce(nullif(d.name, ''), d.login) into v_name
from public.drivers d
where d.login = lower(btrim(p_login))
and d.pass_hash = p_hash
and d.active;
if v_name is null then
return jsonb_build_object('ok', false);
end if;
select s.secret, s.email into v_secret, v_email from public.driver_secret s where s.id = 1;
if v_secret is null then
return jsonb_build_object('ok', false, 'setup', true);
end if;
return jsonb_build_object('ok', true, 'name', v_name, 'email', v_email, 'secret', v_secret);
end;
$$;
revoke all on function public.driver_login(text, text) from public;
grant execute on function public.driver_login(text, text) to anon, authenticated;
Les tickets en vert sont conservés, ceux en rouge seront supprimés. Cliquez sur un ticket pour inverser son statut.
📥 Importer des tickets
📂
Glissez-déposez vos PDF UTA ici ou cliquez pour sélectionner
Relevés UTA, factures, tickets PDF — les PDF scannés (sans texte) sont lus automatiquement par OCR
Sélectionnez vos fichiers PDF…
📸
Glissez-déposez vos photos de tickets ou cliquez pour sélectionner
JPG, PNG, WEBP — OCR automatique via Tesseract
Ouvre directement l’appareil photo du téléphone.
Vérifie que le moteur de lecture se charge correctement.
Prenez en photo vos tickets de caisse…
📲 Installer l’application sur le téléphone
Une fois installée, l’application s’ouvre comme une vraie application, même sans réseau.
Astuce : gardez aussi une copie du fichier sur le téléphone. Même sans réseau et sans installation, il suffit d’ouvrir ce fichier pour retrouver le carnet.