KONTOR 2 – logiciel de gestion local pour l’impression 3D
=========================================================

Kontor fonctionne entièrement sur votre ordinateur – Mac ou PC Windows. Toutes les
données sont enregistrées dans une base SQLite dans le dossier  daten/kontor.db  –
rien ne part sur Internet.

Langue : cliquez sur le code de langue (DE/EN/FR/HU) en haut à droite de Kontor.
Voir la section LANGUES ci-dessous.


PROGRAMME D’INSTALLATION (SANS INSTALLER PYTHON)
-----------------------------------------------
Kontor existe aussi sous forme de paquet prêt à l’emploi avec son propre Python :
- Mac : ouvrez Kontor-<version>-Mac.zip, glissez «Kontor» dans le dossier
  «Applications» et double-cliquez. Fonctionne sur Apple Silicon et Intel (macOS 11 ou plus).
  À la première ouverture, macOS indique que le développeur n’est pas vérifié :
  Réglages Système › Confidentialité et sécurité › «Ouvrir quand même».
- Windows 10/11 : double-cliquez sur Kontor-<version>-Setup.exe. Si «Windows a protégé
  votre ordinateur» apparaît : «Informations complémentaires» › «Exécuter quand même».
  L’installation se fait sans droits d’administrateur dans %LOCALAPPDATA%\Programs\Kontor,
  avec un raccourci sur le bureau, dans le menu Démarrer et une entrée sous «Applications».
Les données de la version installée sont séparées du programme et sont conservées
lors des mises à jour et de la désinstallation :
  Mac :     ~/Library/Application Support/Kontor/daten
  Windows : %LOCALAPPDATA%\Kontor\daten
Mise à jour : installez simplement la nouvelle version par-dessus (quittez Kontor avant).

INSTALLATION SUR MAC (une seule fois)
-------------------------------------
1. Placez le dossier «Kontor» dans votre dossier de départ
   (Finder > Aller > Départ, ou ⇧⌘H) – p. ex. /Users/votre-nom/Kontor.
   IMPORTANT : pas dans Documents, Bureau, Téléchargements ou iCloud Drive.
   macOS bloque ces dossiers pour les applications («Operation not permitted»).
   Si le dossier s’y trouve malgré tout, l’application «Kontor» propose de le déplacer.
2. Vérifiez que Python 3 est présent :
   ouvrez Terminal (Applications > Utilitaires > Terminal) et saisissez :
       python3 --version
   Si une fenêtre «Installer les outils de développement en ligne de commande»
   apparaît, cliquez sur «Installer» et patientez. Tout est alors prêt.


WINDOWS (Windows 10 et 11)
--------------------------
1. Débloquez le fichier ZIP avant de le décompresser : clic droit > Propriétés >
   cochez «Débloquer» en bas > OK. Sinon Windows avertit à chaque démarrage.
2. Décompressez le dossier «Kontor» dans votre dossier utilisateur, c.-à-d.
   C:\Users\votre-nom\Kontor. Pas dans OneDrive, Dropbox ou un autre dossier
   synchronisé : la base de données ne supporte pas la synchronisation.
3. Double-cliquez sur «Kontor einrichten (Windows).bat».
   - Si Python manque, python.org s’ouvre. Installez Python en cochant en bas
     «Add python.exe to PATH». Puis double-cliquez à nouveau.
   - Si «Windows a protégé votre ordinateur» apparaît : «Informations
     complémentaires» > «Exécuter quand même».
   La configuration crée le raccourci «Kontor» sur le bureau et dans le menu
   Démarrer et lance Kontor.
4. Si le pare-feu Windows pose une question au sujet de «Python» : «Autoriser l’accès»
   pour les réseaux privés. Kontor est alors aussi accessible sur tablette et
   téléphone via le Wi-Fi.
Ensuite, un double-clic sur «Kontor» sur le bureau suffit (sans fenêtre noire).
«Kontor starten (Windows).bat» lance Kontor avec une fenêtre visible – pratique
si quelque chose ne fonctionne pas. Les messages figurent dans kontor.log.
Raccourcis clavier sous Windows : Ctrl au lieu de ⌘ (Ctrl+K recherche, Ctrl+S enregistrer).

Reprendre les données du Mac : quittez Kontor sur le Mac, copiez le dossier «daten»
du dossier Kontor (p. ex. sur une clé USB) et placez-le dans le dossier Kontor du
PC Windows (remplacez le dossier «daten» existant). Images, sauvegardes et catalogue
compris. Ne faites pas travailler les deux ordinateurs en même temps avec les mêmes
données – sinon des modifications sont perdues.


DÉMARRAGE (macOS)
-----------------
Double-cliquez sur l’application «Kontor» (K orange).
Kontor démarre en arrière-plan et s’ouvre dans le navigateur – sans fenêtre Terminal.
Si Kontor est déjà lancé, un nouveau clic ouvre seulement la fenêtre du navigateur.

Placer un bouton de démarrage sur le bureau :
- Glissez l’application «Kontor» du dossier Kontor sur le bureau en maintenant
  les touches Option et Commande (⌥⌘). Cela crée un alias.
- Ou glissez l’application directement sur le bureau ou dans le Dock. Elle trouve
  le dossier Kontor toute seule ; sinon, elle le demande une fois.

Au tout premier démarrage, macOS signale que l’application provient d’un
développeur non vérifié. Dans ce cas :
   clic droit (ou Ctrl-clic) sur «Kontor» > Ouvrir > Ouvrir.
Sur les versions récentes de macOS : Réglages Système >
Confidentialité et sécurité > tout en bas, à côté de «Kontor», «Ouvrir quand même».
Cela n’est nécessaire qu’une fois.

Vous pouvez aussi démarrer comme avant avec «Kontor starten.command»
(avec fenêtre Terminal) ou dans le Terminal :
       cd ~/Kontor
       python3 server.py

Adresse dans le navigateur :  http://localhost:8765


SUR IPAD ET IPHONE
------------------
Kontor est aussi accessible sur iPad et iPhone dans votre propre Wi-Fi. Vous trouverez
l’adresse et un QR code à scanner sous «Entreprise & données» › «Sur iPad et
iPhone». Dans Safari, «Partager › Sur l’écran d’accueil» crée une icône.
- L’ordinateur où tourne Kontor doit être allumé et Kontor doit fonctionner.
- Si macOS demande si «Python» peut accepter des connexions entrantes : «Autoriser».
- Tous les appareils du même Wi-Fi peuvent ouvrir Kontor. À utiliser uniquement
  dans votre propre Wi-Fi protégé. Kontor ne peut être quitté que sur l’ordinateur
  où il tourne.
- Pour le rendre accessible uniquement sur cet ordinateur : démarrer dans le Terminal avec
      KONTOR_NUR_LOKAL=1 python3 server.py

QUITTER
-------
Cliquez en haut à droite de Kontor sur le symbole marche/arrêt > «Quitter».
(Si Kontor a été lancé avec «Kontor starten.command», vous pouvez aussi fermer
la fenêtre Terminal.)
Les messages du serveur figurent dans  kontor.log  dans le dossier Kontor.


DONNÉES & SAUVEGARDE
--------------------
- Base de données : daten/kontor.db
- Sauvegardes :     daten/sicherungen/  (automatiquement une fois par jour au démarrage,
  et via «Entreprise & données > Sauvegarder maintenant». Les 30 dernières sont conservées.)
- Pour une sauvegarde externe, copiez simplement le dossier  daten
  (p. ex. sur une clé USB ou dans iCloud Drive), de préférence Kontor fermé.
  Il contient aussi l’archive des documents (daten/archiv) et les fichiers (daten/dateien).
- Avant une mise à jour avec une nouvelle structure de base de données, Kontor crée
  automatiquement une sauvegarde «…_vor-update.db».
- Restaurer : quittez Kontor, copiez la sauvegarde souhaitée vers  daten/kontor.db
  (renommez l’ancien fichier avant), lancez Kontor.

Au premier démarrage, des données d’exemple sont chargées. Sous «Entreprise & données»,
vous pouvez les supprimer et saisir les données de votre entreprise (nom, adresse,
IBAN, TVA).


UTILISATION EN BREF
-------------------
- ⌘K           recherche globale (clients, documents, commandes, matériaux …)
- ⌘S           enregistrer
- Listes : cliquer sur l’en-tête d’une colonne pour trier, champ de filtre, export CSV pour Excel
- Devis > «Convertir en facture»
- Commande > statut «Terminé» comptabilise filament, matériel et heures machine
- Commande > «Créer une facture» reprend le temps d’impression et le matériau comme positions
  (prix des articles des catégories «Druckzeit» et «Material»)
- Machine > «Maintenance effectuée» remet le compteur de maintenance à zéro
- Bobine > «Peser» / Matériel > «Mouvement de stock» pour entrées, sorties, inventaire
- Facture/devis > «PDF» ou «Envoyer par e-mail» (ouvre Apple Mail)
- Chaque modification est consignée dans l’onglet «Historique»

LANGUES (ALLEMAND, ANGLAIS, FRANÇAIS, HONGROIS)
-----------------------------------------------
- Écran : cliquez sur le code de langue (DE/EN/FR/HU) en haut à droite. Le choix vaut
  par utilisateur (avec connexion) ou pour ce Kontor (sans connexion).
- Documents et e-mails : chez le client sous «Contact» › «Langue» (ou chez le
  fournisseur pour les commandes). «Défaut de l’entreprise» utilise la «Langue des
  documents» de «Entreprise & données» › «Pays, devise & impôt».
  Devis, factures, avoirs, relances, bons de livraison, confirmations de commande
  et les textes d’e-mail proposés apparaissent alors dans cette langue. La section
  paiement QR suisse est en allemand, français ou anglais (anglais pour le hongrois),
  comme l’exige la norme.
- Vos propres textes (positions, notes, textes de relance et d’expédition modifiés)
  restent tels que vous les écrivez. Les textes standard non modifiés sont traduits
  automatiquement.
- Les factures déjà verrouillées restent dans l’archive dans leur langue d’origine
  (inaltérables).


IMPRIMANTES : INTERROGER LE FILAMENT CHARGÉ
-------------------------------------------
Kontor interroge vos imprimantes directement sur le réseau local (sans cloud) et
affiche par emplacement le matériau, la couleur, le fabricant et la quantité restante –
ainsi que le matériau de votre stock qui correspond.
Configuration avec l’assistant : Machines > ouvrir la machine > Détails >
«Imprimante sur le réseau» > «Configurer l’imprimante» (ou sur la carte de
l’imprimante, la roue dentée ou «Configurer le réseau»).
  1. Choisir le fabricant : Bambu Lab, Prusa, Creality, Anycubic, Snapmaker,
     Elegoo, Qidi, Sovol, Voron/Klipper, OctoPrint ou «Autre fabricant».
  2. Choisir le modèle. Kontor montre comment l’imprimante est connectée et d’où
     provient la consommation après l’impression.
  3. Connexion : remplissez uniquement les champs nécessaires au modèle – avec une
     indication de l’endroit où trouver la valeur sur l’imprimante. «Tester la connexion»
     interroge immédiatement l’imprimante, «Enregistrer» reprend fabricant, modèle et accès.
Ce qu’il faut selon le fabricant :
  Bambu Lab (X1, P1, P2S, A1, H2) : adresse IP, code d’accès LAN, numéro de série.
      Avec le firmware actuel, activez «LAN Only» et le «Mode développeur» sur
      l’imprimante – elle n’est alors plus connectée au cloud Bambu
      (Bambu Handy / l’accès à distance ne fonctionnent pas pendant ce temps).
  Prusa (Core One, MK4/S, MK3.9, XL, MINI+) : PrusaLink. Adresse IP et
      mot de passe (sur l’imprimante : Paramètres > Réseau > PrusaLink), utilisateur
      généralement «maker». MK3S+ avec Raspberry Pi : laisser l’utilisateur vide et
      mettre la clé API dans le champ mot de passe.
  Creality (K2, K1, Creality OS) : adresse IP uniquement.
  Anycubic (Kobra S1, S1 Max, Kobra 3) : adresse IP, mode LAN activé sur l’imprimante.
  Snapmaker U1 : adresse IP, clé API uniquement si la connexion est active.
  Klipper/Moonraker (Elegoo Neptune 4, Qidi, Sovol, Voron, Creality
      rootée) : adresse IP, le port 7125 est utilisé automatiquement.
  OctoPrint : adresse et clé API (OctoPrint > Paramètres > API).
Les secrets (code d’accès, mot de passe) restent uniquement dans la base de données locale.
Imprimantes sans interface réseau : choisir «Sans interrogation réseau» –
les impressions sont alors comptabilisées manuellement.
Dans la liste des machines, «Interroger le filament de toutes les imprimantes»
les interroge toutes en une fois.
Les emplacements trouvés sont attribués à vos bobines (même matériau, couleur
similaire). Une bobine attribuée exactement à cet emplacement via «Charger dans
l’imprimante» a toujours la priorité. S’il manque une bobine : «Créer comme bobine».
Les protocoles des imprimantes ne sont pas officiellement documentés. Si quelque chose
ne fonctionne pas, «Données brutes» montre ce que l’imprimante a envoyé – ces données
ne contiennent pas de mots de passe et aident au dépannage.

CONSOMMATION APRÈS L’IMPRESSION (Impressions & consommation)
------------------------------------------------------------
Kontor détecte les impressions terminées et propose la quantité de filament à déduire
de chaque bobine. La comptabilisation n’a lieu qu’après votre confirmation.
- Fonctionne automatiquement pour toutes les imprimantes configurées avec l’assistant
  (voir ci-dessus).
- Quand une impression est terminée, «Impression terminée» apparaît en bas à droite,
  ainsi qu’une indication dans la navigation sous «Impressions & consommation» et sur
  la carte de l’imprimante.
- «Confirmer la consommation» affiche pour chaque bobine le matériau attribué et la
  quantité en grammes. Matériau et quantité peuvent être modifiés, des lignes
  ajoutées. «Comptabiliser» déduit les quantités du stock, «Ignorer» non.
- Facultatif : attribuer à une commande. La commande reprend alors la quantité et le
  temps d’impression mesurés et ne déduit rien une seconde fois à la clôture.
- Le temps d’impression peut être crédité aux heures de fonctionnement de la machine.
- Provenance des quantités :
    Snapmaker U1 : historique d’impression et données du slicer dans le fichier
      (grammes par buse). Y compris les impressions effectuées pendant que Kontor
      était fermé.
    Creality K2 : historique d’impression (si l’imprimante le propose), sinon
      longueur de filament consommée. Kontor retient pour cela pendant l’impression
      depuis quel emplacement CFS on imprime – Kontor doit tourner pendant l’impression.
    Anycubic : longueur de filament consommée, par emplacement ACE – Kontor doit
      tourner pendant l’impression.
    Bambu Lab : fichier d’impression sur l’imprimante (grammes par filament),
      par emplacement AMS. Si cela ne fonctionne pas, saisir la quantité à la main.
    Klipper/Moonraker : comme la Snapmaker, historique et données du slicer.
    Prusa / OctoPrint : données du slicer ou longueur de filament du fichier –
      Kontor doit tourner pendant l’impression.
    Les impressions annulées sont calculées au prorata.
- Imprimantes sans réseau : ouvrir la machine > «Comptabiliser l’impression»
  ou sous «Impressions & consommation» > «Comptabiliser l’impression manuellement».
- Activation et intervalle de vérification : «Entreprise & données» > «Surveillance d’impression».
- Lors de la toute première vérification, Kontor note seulement l’état. Les impressions
  plus anciennes ne sont pas proposées a posteriori.

CLÔTURE ANNUELLE
----------------
Navigation > Finances > «Clôture annuelle» : compte des recettes et dépenses avec
situation patrimoniale pour entreprises individuelles réalisant moins de CHF 500 000
de chiffre d’affaires (art. 957 CO). Hors de Suisse, vérifiez avec votre conseiller
fiscal si cela suffit.
- Choisir l’année et le mode de comptage des recettes : «à l’encaissement» (date
  «Payé le» de la facture) ou «par date de facture».
- Recettes par catégorie d’articles, dépenses par catégorie, amortissements,
  bénéfice ou perte, évolution mensuelle.
- Amortissements : saisir dans la machine le prix d’achat, la mise en service, la
  méthode (dégressive/linéaire) et le taux (usuel : 40 % dégressif ou 20 % linéaire
  pour les machines de production). Saisir l’achat comme dépense de catégorie
  «Investissements» – il ne compte alors pas comme charge mais passe par les
  amortissements.
- Situation patrimoniale au 31.12. : Kontor calcule les factures ouvertes, le stock de
  filament et la valeur comptable des machines ; vous saisissez banque/caisse et les
  factures fournisseurs ouvertes.
- TVA (si assujetti) : valeurs par trimestre/semestre/année avec les chiffres du
  formulaire AFC suisse (méthode effective) ou avec le taux de la dette fiscale nette.
- «Comptes annuels (PDF)» pour la déclaration d’impôt (compte de résultat,
  amortissements, situation patrimoniale, TVA, journal) et «Journal (CSV)» pour Excel
  ou la fiduciaire.
- «Marquer comme payé» fixe la date «Payé le» des factures ; elle peut être modifiée
  dans la facture.
Kontor ne remplace pas une fiduciaire – en cas de doute, adressez-vous à
l’administration fiscale.

ENVOI GROUPÉ
------------
Navigation > Vente > «Envoi groupé» : un e-mail à plusieurs clients.
- Choisir les destinataires : filtres (actifs uniquement, avec factures ouvertes, actifs
  ces derniers mois, recherche) et une coche par client. Les clients sans adresse
  e-mail valide ou avec «Reçoit les envois groupés» = non sont ignorés.
- Objet et texte avec variables : {anrede}, {name}, {firma}, {ort}.
  {anrede} = «Formule d’appel» du client, sinon «Bonjour» + interlocuteur
  (dans la langue du client).
- En option une pièce jointe (jusqu’à 10 Mo) et une mention de désabonnement à la fin.
- «Envoyer» : Kontor envoie à chaque personne son propre e-mail via votre boîte mail.
  À configurer une fois sous «Entreprise & données» > «Envoi d’e-mails» (serveur, port,
  utilisateur, mot de passe – pour Gmail et iCloud un mot de passe d’application), puis
  «Envoyer un e-mail de test». Le mot de passe reste sur cet ordinateur.
- Sans configuration : «Ouvrir dans le programme de messagerie (CCI)» ou «Copier les adresses».
- «Envois groupés effectués» indique à qui l’e-mail est parti et quelles adresses
  le serveur a refusées. Il figure aussi dans l’historique du client.
Remarque : n’envoyez des e-mails publicitaires qu’aux clients qui peuvent s’y attendre,
et respectez les désabonnements (désactiver «Reçoit les envois groupés» chez le client).

CALCUL DES COÛTS ET RABAIS CLIENT
---------------------------------
Ouvrir une commande > onglet «Calcul des coûts» (ou bouton «Calcul des coûts»).
- Activer/désactiver les postes : matériau, électricité, usure, temps de travail,
  post-traitement, expédition, plus «Autres coûts» (emballage, accessoires …).
- Marge bénéficiaire en pour cent ; «Masquer la marge» la répartit sur les positions du
  devis et de la facture, sinon elle figure comme position séparée.
- Rabais : saisir un rabais standard chez le client sous «Conditions». Les nouvelles
  commandes le reprennent ; il peut être adapté dans la commande.
- À droite : prix de revient, marge, rabais, expédition, prix net, TVA, total et
  prix par pièce. «Créer un devis» / «Créer une facture» reprennent le calcul comme
  positions.
- Nécessaire : prix de revient par kg pour le matériau ; pour la machine sous
  «Calcul des coûts» : puissance absorbée (W), prix d’achat et durée de vie (h).
- Prix de l’électricité, taux horaires, marge standard, temps de travail et expédition :
  «Entreprise & données» > «Calcul des coûts».

MAINTENANCE
-----------
Sous «Maintenance» (navigation) et dans l’onglet «Maintenance» de chaque machine.
- Reprendre les plans de maintenance des fabricants : Creality K2 / K2 Pro / K2 Plus,
  Anycubic Kobra S1 / S1 Max, Snapmaker U1 et un plan FDM général.
  Chaque tâche a des intervalles en jours, heures d’impression et/ou kg de filament –
  le premier atteint la rend due. «Proposition» signifie : le fabricant n’indique pas
  d’intervalle fixe, Kontor en propose un.
- Lors de la reprise, choisir : «Aujourd’hui» (les intervalles commencent maintenant)
  ou «Inconnu» (tout est dû immédiatement).
- «Saisir la maintenance» : cocher les travaux effectués (les tâches dues sont
  présélectionnées), saisir d’autres travaux, la date, une note et les coûts. Tout est
  consigné dans le journal de maintenance.
- Les tâches peuvent être modifiées, suspendues, supprimées ou créées soi-même.
- Les heures d’impression comptent via les heures de fonctionnement de la machine, le
  filament via les impressions et commandes comptabilisées de la machine.
- Les maintenances dues apparaissent dans la navigation, sur la carte de l’imprimante et
  dans l’aperçu sous «Action requise».

IMAGES POUR MACHINES, BOBINES ET MATÉRIEL
-----------------------------------------
Ouvrir une machine, une bobine ou un matériel > Détails > zone «Image» :
- cliquer et choisir une photo, glisser une image ou coller une image copiée
  avec ⌘V (p. ex. dans le navigateur, clic droit sur une photo de produit >
  «Copier l’image»).
- Kontor réduit l’image à 1000 pixels au maximum et l’enregistre sous
  daten/bilder/. Sauvegarder le dossier «daten» sauvegarde aussi les images.
Les photos de machines apparaissent sur les cartes d’imprimantes et dans «Imprimantes en
direct», les photos de bobines dans la liste des bobines et avec les bobines chargées.

CATALOGUE DE FILAMENTS
----------------------
Sous Bobines > «Depuis le catalogue», vous trouvez les filaments de la base de données
ouverte SpoolmanDB (licence MIT, github.com/Donkie/SpoolmanDB).
- À la première ouverture, cliquez sur «Télécharger le catalogue maintenant» (Internet
  requis). Le catalogue est enregistré sous  daten/katalog/ ; la recherche fonctionne
  ensuite hors ligne. «Mettre à jour le catalogue» récupère la dernière version.
- Rechercher, p. ex. «Bambu PETG HF Black», ou filtrer par fabricant, matériau et
  diamètre. Un clic sur une ligne reprend désignation, fabricant, matériau, couleur avec
  code couleur, diamètre, contenu de la bobine, bobine vide, densité et températures.
  Les filaments déjà saisis sont marqués.
- Dans un matériau, «Reprendre du catalogue» complète les champs.
- Vous saisissez vous-même stock, stock minimum, prix et emplacement. Pour un nouveau
  matériau, le «Stock initial» est enregistré comme mouvement de stock.
- Mouvement de stock > «Inventaire avec balance» : peser les bobines, saisir poids et
  nombre – Kontor soustrait le poids des bobines vides.

IMPORT CSV
----------
Clients, articles, bobines, machines et dépenses peuvent être repris de fichiers CSV :
cliquez sur «Import CSV» dans la liste (ou sous «Entreprise & données»).
1. Choisir le fichier ou le glisser dans la fenêtre (Excel, Numbers, bexio, etc.).
   Séparateur (; , tabulation) et jeu de caractères sont détectés automatiquement.
2. Vérifier l’attribution des colonnes. Les noms de colonnes connus sont attribués
   automatiquement, le reste via un champ de sélection.
3. «Vérifier» montre combien de lignes seront créées ou mises à jour et lesquelles
   comportent des erreurs – rien n’est encore enregistré.
4. «Importer» enregistre. Une sauvegarde est créée automatiquement avant.
- Si le numéro (p. ex. K-1001) existe déjà, l’enregistrement est mis à jour ou la
  ligne ignorée – selon le réglage. Les cellules vides n’écrasent rien. Sans numéro,
  un nouveau est attribué automatiquement.
- Les nombres peuvent être au format suisse (1'250.50, 12.-, CHF 9.90),
  les dates p. ex. 31.08.2026 ou 2026-08-31, les champs oui/non ja/nein/1/0/x.
- Bobines : «Stock (g)» est enregistré comme mouvement de stock (stock initial ou
  inventaire) afin que les mouvements soient corrects.
- Dépenses : les montants négatifs des relevés bancaires sont repris comme dépenses.
- «Modèle» télécharge un fichier CSV vide avec les bonnes colonnes.
- Une liste créée avec «Export CSV» peut être réimportée.
Les devis, factures et commandes ne sont pas importés par CSV.

PAYS, DEVISE ET TVA (CH, LI, AT, DE, FR, HU)
--------------------------------------------
Système > «Entreprise & données» > «Pays, devise & impôt» :
- Pays : Suisse, Liechtenstein, Autriche, Allemagne, France ou Hongrie. Lors du
  changement, la devise, le taux standard et la mention sont proposés en conséquence.
- Devise : CHF, EUR ou HUF (forint). Les montants ne sont pas convertis – le changement
  est prévu pour débuter avec Kontor, pas pour une comptabilité existante.
- Taux disponibles : CH/LI 8.1 / 2.6 / 3.8 / 0 %, AT 20 / 10 / 13 / 0 %,
  DE 19 / 7 / 0 %, FR 20 / 10 / 5,5 / 2,1 / 0 %, HU 27 / 18 / 5 / 0 %. Le taux standard
  s’applique aux nouveaux documents ; il peut être modifié par devis, facture et dépense.
- La «Mention à 0 %» figure sur les documents sans taxe, p. ex. pour les petites
  entreprises (FR : «TVA non applicable, art. 293 B du CGI», DE : § 19 UStG,
  AT : § 6 Abs. 1 Z 27 UStG, HU : «Alanyi adómentes» – préremplie).
- Format : CH 1'234.50 CHF (arrondi à 5 centimes), AT/DE 1.234,50 €
  (arrondi au centime), FR/HU 1 234,50 (HUF : arrondi au forint entier).
  Sur les documents, la taxe s’appelle selon la langue MWST, USt., MwSt., VAT, TVA ou ÁFA.
- Paiement : CH/LI reçoivent le bulletin de versement QR (aussi possible en EUR).
  AT/DE/FR reçoivent en EUR un QR code pour les virements SEPA (GiroCode) lisible par
  les applications bancaires. Saisissez pour cela l’IBAN (et éventuellement le BIC).
  Il n’existe pas de QR code de paiement pour le HUF (la facture indique IBAN et référence).
- AT/DE/FR/HU : les factures indiquent la date de prestation (= date de facture), et en
  pied de page le numéro de TVA et – s’il est saisi – le numéro fiscal (FR : SIRET,
  HU : Adószám).
- Clôture AT/DE : TVA par mois ou trimestre avec les codes de la déclaration
  (DE UStVA 81/86/66, AT U30 022/029/006/060) ; FR/HU sans codes.
  Fichier bancaire (camt) et import boutique ne reprennent que les paiements dans la
  devise choisie. Indications sans garantie – en cas de doute, demandez à votre
  conseiller fiscal.

BULLETIN DE VERSEMENT QR (SUISSE)
---------------------------------
Chaque facture reçoit en bas du PDF la section paiement QR suisse avec récépissé
(Swiss Payment Standards, version 2.0). Conditions sous «Entreprise & données» :
- un IBAN suisse valide (CH…) ou un QR-IBAN
- nom de l’entreprise, NPA et localité
Avec un IBAN normal, une référence RF est générée à partir du numéro de facture,
avec un QR-IBAN une référence QR à 27 chiffres. Si l’adresse du client manque,
«Payable par» reste vide pour être complété. L’aperçu de la facture montre aussi la
section paiement.
Astuce : avant le premier envoi, scannez une facture avec votre propre application
bancaire et vérifiez que toutes les données sont correctes.


ACCÈS & UTILISATEURS (connexion via Wi-Fi)
------------------------------------------
«Entreprise & données» > «Accès & utilisateurs» :
1. «Créer un utilisateur» : nom d’utilisateur, mot de passe (8 caractères min.), rôle.
   Propriétaire = tout. Collaborateur = sans finances, dépenses, évaluations,
   clôture annuelle et paramètres.
2. Activer «Exiger une connexion».
Ensuite, chaque accès depuis l’iPad, l’iPhone ou un autre ordinateur exige une
connexion. Sur l’ordinateur Kontor lui-même, cela fonctionne sans tant que «Sur
l’ordinateur Kontor sans connexion» est activé. Après 5 mots de passe erronés, la
connexion depuis cet appareil est brièvement bloquée. En haut à droite : modifier le
mot de passe, se déconnecter.
Mot de passe oublié et la connexion est aussi requise sur l’ordinateur Kontor :
démarrer Kontor une fois ainsi :  KONTOR_OHNE_LOGIN=1 python3 server.py
(Windows : set KONTOR_OHNE_LOGIN=1 & py server.py), puis définir un nouveau mot de
passe sous «Accès & utilisateurs» et redémarrer Kontor normalement.

FACTURES : VERROUILLAGE, ARCHIVE, AVOIR, ANNULATION
---------------------------------------------------
Dès qu’une facture quitte l’état de brouillon (statut «Ouvert», envoyée par e-mail),
elle est verrouillée : contenu et positions ne peuvent plus être modifiés, le PDF est
classé avec une somme de contrôle dans le dossier daten/archiv et toujours restitué à
l’identique (obligation de conservation 10 ans, OelDI).
- Erreur dans une facture ouverte : «Annuler» – Kontor crée un avoir d’annulation,
  la facture reste dans l’archive.
- Réduction de prix, reprise, facture déjà payée : «Avoir» – l’avoir est créé comme
  brouillon ; adaptez les positions et passez-le à «Ouvert». Ensuite «Compenser avec
  une facture» ou, après le remboursement, «Marquer comme versé». Les avoirs réduisent
  le chiffre d’affaires et la TVA dans la clôture.
- Système > «Journal des modifications» : chaque modification avec l’heure et la
  personne. Les entrées sont chaînées par des sommes de contrôle. «Vérifier l’intégrité»
  signale les entrées ou PDF d’archive modifiés après coup.

PAIEMENTS ET FICHIER BANCAIRE (camt.054 / camt.053)
--------------------------------------------------
Ouvrir une facture > «Saisir un paiement» (paiements partiels aussi). L’onglet
«Paiements & relances» montre paiements, relances, avoirs, bons de livraison et archive.
Groupé : Factures > «Lire le fichier bancaire». Dans l’e-banking, téléchargez l’avis
de crédit camt.054 (ou le relevé camt.053) en XML ou ZIP et glissez-le. Kontor attribue
via la référence QR/RF, le numéro de facture dans le texte de paiement ou le montant.
Les correspondances sûres sont présélectionnées ; la comptabilisation n’a lieu qu’avec
«Comptabiliser la sélection». Lire deux fois le même fichier ne comptabilise rien en double.

RELANCES
--------
Vente > «Relances» liste les factures en retard avec le niveau suivant : rappel de
paiement (10 jours après l’échéance, sans frais), 1re relance (+14 jours, CHF 20),
2e relance (+14 jours, CHF 30). Niveaux, frais, délais et textes sous «Niveaux de
relance & textes». Les relances dues sont présélectionnées.
«Relances en PDF» crée un PDF groupé à imprimer, «Envoyer par e-mail» envoie chaque
relance avec PDF via votre boîte mail. Chaque relance contient un bulletin de versement
QR (montant ouvert + frais) avec la même référence – le paiement est donc à nouveau
attribué à la facture lors de la lecture du fichier bancaire.
Les clients ou factures peuvent être bloqués avec «Ne pas relancer».
Remarque : n’exigez des frais de rappel et intérêts moratoires que s’ils ont été convenus.

FICHIERS ET MODÈLES 3D
----------------------
Commande > onglet «Fichiers» : glissez des fichiers STL, 3MF, OBJ, G-code, «.gcode.3mf»
et tout autre fichier. Même nom de fichier = nouvelle version. Kontor affiche un aperçu
3D orientable (pour le 3MF aussi la vignette), les dimensions et le volume.
Depuis le G-code ou «.gcode.3mf» (Bambu Studio, OrcaSlicer, PrusaSlicer, Cura), Kontor
lit les grammes et le temps d’impression du slicer. «Reprendre les valeurs» définit le
besoin en matériau et le temps d’impression dans la commande. Fichiers aussi pour les
articles, modèles et dépenses (reçus). Enregistrés dans le dossier daten/dateien.

DEVIS DEPUIS UN FICHIER 3D
--------------------------
Devis (ou commandes) > «Depuis un fichier 3D» : choisir le client, glisser le fichier,
régler matériau, imprimante, nombre de pièces, remplissage, épaisseur de paroi et
supports. Kontor estime les grammes et le temps d’impression et affiche immédiatement
le prix et le prix de revient selon votre calcul. «Créer commande & devis» crée les deux.
L’estimation depuis STL/3MF/OBJ est généralement à ±30 %. Elle devient exacte avec un
fichier «.gcode.3mf» ou G-code créé dans le slicer. Le temps d’impression dépend de la
«Performance d’impression» de l’imprimante (Machine > Exploitation & maintenance, en
mm³/s) – à ajuster avec vos propres valeurs.

CALCUL A POSTERIORI ET ÉVALUATIONS
----------------------------------
Commande > onglet «Calcul a posteriori» : prévu contre réel pour matériau, temps
d’impression et prix de revient, chiffre d’affaires et marge contributive. Les valeurs
réelles proviennent des impressions comptabilisées de la commande (impressions ratées
comprises) ; vous saisissez le temps de travail effectif dans la commande.
Finances > «Évaluations» : toutes les commandes terminées d’une année, marge
contributive par client, matériau et imprimante, ainsi que l’analyse des rebuts.

IMPRESSIONS RATÉES ET REBUT
---------------------------
Lors de la confirmation de la consommation, cochez «Impression ratée / rebut» et
choisissez le motif (présélectionné pour les impressions annulées). Le matériau est
déduit du stock et les coûts (matériau, électricité, usure) sont calculés. Évaluations >
«Rebut» montre le taux par imprimante et matériau et les motifs les plus fréquents.

PLANIFICATION DES IMPRESSIONS
-----------------------------
Production > «Planification des impressions» : ligne du temps par imprimante avec toutes
les commandes planifiées, validées et en cours, l’une après l’autre à partir de
maintenant. Une impression en cours (Imprimantes en direct) est prise en compte. Glisser
les barres modifie l’ordre ou l’imprimante, un clic ouvre la commande. Rouge =
l’échéance ne sera pas respectée.
«Heures de travail» : quand les impressions peuvent démarrer, si elles peuvent tourner la
nuit et la pause entre deux impressions.

BOBINES ET ÉTIQUETTES QR
------------------------
Production > «Bobines» : chaque entrée est une bobine de filament (ou un flacon de
résine) avec numéro, contenu et reste. Plusieurs bobines de la même variété (fabricant,
matériau/type, couleur) sont plusieurs entrées ; «Cette variété» montre le stock total.
Le stock minimum s’applique par variété.
- «Saisir une bobine» ou «Depuis le catalogue» ; «Autres bobines» crée des copies.
- La consommation des impressions est d’abord déduite de la bobine chargée dans cette
  imprimante. Si elle ne suffit pas, le reste va sur une autre bobine de la même variété ;
  une bobine vide est déchargée automatiquement.
- «Peser» : saisir le poids brut, Kontor soustrait la bobine vide.
  «Corriger le reste», «Charger dans l’imprimante», «Épuisée».
- Liste : «Sans les vides» masque les bobines épuisées, «Uniquement les variétés presque
  épuisées» montre ce qu’il faut recommander.
«Imprimer les étiquettes» : feuille A4 3 × 8 (70 × 37 mm, p. ex. Avery Zweckform 3475)
ou étiquette continue 62 × 29 mm (Brother QL). Le QR code ouvre la bobine dans Kontor –
le scanner avec l’appareil photo de l’iPhone sur le même Wi-Fi, puis peser, charger ou
marquer comme vide. Adresse dans le QR : «Entreprise & données» > «Adresse Kontor pour
le QR» (vide = adresse Wi-Fi de cet ordinateur).

MATÉRIEL (ACHETÉ : LED, AIMANTS, INSERTS FILETÉS …)
---------------------------------------------------
Production > «Matériel» : tout ce qui, en dehors du filament, est intégré dans un
produit – p. ex. bandes LED, modules LED, aimants, vis, inserts filetés, emballage.
Par matériel : catégorie, unité (pce, m, g, paquet …), stock, stock minimum, prix de
revient, fournisseur, numéro de commande, emplacement, image.
- «Mouvement de stock» pour entrée, sortie ou inventaire ; onglet «Mouvements».
- Nomenclature : dans la commande (Détails, en bas) et dans l’article, ajouter le
  matériel et saisir la quantité. Les coûts apparaissent dans le calcul comme
  «Matériel (acheté)». À la clôture de la commande (Terminé), le matériel est sorti du
  stock ; la nomenclature est ensuite verrouillée.
- «Reproduire» reprend la nomenclature de l’article × nombre de pièces.
- Le matériel sous le stock minimum apparaît dans l’aperçu et dans les propositions de
  commande (Achats).

VERSION D’ESSAI ET CLÉ DE LICENCE
---------------------------------
La version d’essai fonctionne 30 jours. Avec une clé de licence, elle devient la version
complète – sans réinstallation ; toutes les données sont conservées.
Activer : cliquez en haut à droite sur «Version d’essai · encore … jours» (ou, après
expiration, sur la page de blocage), collez la clé, «Activer». «Entreprise & données»
affiche ensuite «Version complète · sous licence pour …». La licence est conservée même
après une réinstallation.

MODÈLES ET LICENCES
-------------------
Données de base > «Modèles & licences» : modèles avec source (Printables, MakerWorld,
Thingiverse …), designer, licence et «Vente autorisée». La liste des licences indique
pour les licences courantes si les impressions peuvent être vendues (p. ex. CC BY oui,
CC BY-NC non, Standard Digital File License seulement avec autorisation). Choisissez le
modèle dans la commande ou l’article : pour les modèles non autorisés, Kontor avertit et
demande confirmation avant de créer un devis ou une facture. Indications sans garantie –
les conditions de la plateforme ou du designer font foi.

ARTICLES EN STOCK (PIÈCES FINIES)
---------------------------------
Article > «Stock & production» > activer «Articles en stock», saisir le stock minimum,
le matériau et le temps d’impression par pièce. Le stock change par :
- le verrouillage d’une facture : les positions avec cet article sont sorties du stock
  (l’annulation les réintègre, l’import boutique sort également)
- «Reproduire» : crée une commande sans client ; à la clôture (Terminé), le nombre de
  pièces est entré en stock
- un «Mouvement de stock» manuel

ACHATS
------
Achats > Propositions de commande : filament (par variété), matériel et pièces de
rechange sous le stock minimum
(stock − réservé + déjà commandé), complétés au double.
«Créer des commandes» crée une commande par fournisseur. Dans la commande : PDF,
commander par e-mail, «Comptabiliser la réception» – le filament est créé comme
nouvelles bobines, le matériel et les pièces de rechange sont entrés, et la dépense
peut être créée en même temps. Pour les bobines et le matériel, saisissez
«Fournisseur», «Numéro de commande» et «Quantité minimale de commande». Les pièces de
rechange (buses, plateaux, courroies …) peuvent être sorties comme utilisées lors de
«Saisir la maintenance».

EXPÉDITION ET COMMANDES BOUTIQUE
--------------------------------
Facture > «Bon de livraison» ou Vente > «Expédition» > «Créer un bon de livraison».
Dans l’envoi : mode d’expédition, numéro d’envoi, PDF du bon de livraison, étiquette
d’adresse (A6 ou 62 mm) et «Informer le client» (e-mail avec suivi et bon de
livraison). Devis > «Confirmation de commande» crée le PDF correspondant.
Les étiquettes d’expédition avec code-barres de la Poste suisse nécessitent un accès
client commercial – Kontor imprime l’étiquette d’adresse, l’affranchissement s’achète à
la Poste.
Commandes boutique : Factures > «Commandes boutique». Glissez l’export CSV de Shopify
(Commandes > Exporter), Etsy (articles commandés) ou WooCommerce. Chaque commande crée
une facture payée (prix boutique TVA incl.), et si souhaité une commande. Les nouveaux
clients sont créés, SKU = numéro d’article sort les articles en stock. Les commandes
dans une autre devise que celle de l’entreprise sont ignorées. Kontor détecte les
commandes en double.

EXPORT POUR LA FIDUCIAIRE
-------------------------
Finances > Clôture annuelle > tout en bas :
- «Paquet (ZIP)» : comptes annuels (PDF), journal comptable pour Banana (TXT) et en CSV,
  toutes les factures, avoirs et relances archivés et les justificatifs joints aux
  dépenses, plus une explication.
- «Banana (TXT)» : Banana > Actions > Importer dans la comptabilité > Écritures >
  fichier texte avec en-têtes de colonnes.
- «Comptes» : numéros de compte selon le plan comptable PME suisse (banque 1020,
  débiteurs 1100, produit 3000, matériel 4000 …) et codes TVA (V81, M81, I81) – à
  comparer avec le plan comptable de votre fiduciaire.

TECHNIQUE
---------
server.py          serveur web et logique de base de données (bibliothèque standard Python)
kontor_pdf.py      création des PDF pour devis et factures
kontor_qr.py       QR code et facture QR suisse
kontor_i18n.py     langues : traduction des PDF et e-mails (dictionnaires dans app/i18n/)
kontor_land.py     pays, devise, taux de TVA (CH, LI, AT, DE, FR, HU)
app/index.html     interface utilisateur
app/kontor2.js     interface utilisateur : extensions
Changer de port :  KONTOR_PORT=9000 python3 server.py   (Windows : set KONTOR_PORT=9000 & py server.py)
