Une aide au calcul des impôts pour les PNT AF qui ne transfère aucune données sur Internet. L'app calcule notamment les frais réels à partir des EP4/EP5.
Rendez-vous sur FLYTAX pour utiliser l'app. Mais continuez à lire si vous êtes un développeur ou si vous souhaitez accèder aux données brutes.
npm ci
Pour lancer le site en mode développement
npm run dev
Pour construire le site
npm run clean
npm run build
Pour lancer les tests unitaires
npm run test
Pour les spécificités du développement avec preview sur l'iPad voir #iPad
Note: cliquer sur le badge Gitpod permet de lancer un VSCode dans le cloud, prêt-à-coder
Pour les aéroports, (conversion IATA -> PAYS)
npm run makeAirports
Pour les données fiscales, il faut obtenir un accès à l'API de la Banque de France
Ensuite il faut créer un fichier .env contenant cette clé. Pour Gitpod.io il suffit d'ajouter une variable d'environnement nommée BNF_CLIENT_ID dans les settings de Gitpod.
echo "BNF_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" > .env
Vous pouvez alors créer les data pour l'année 2021 en faisant
npm run makeData 2021
Note: La BNF a supprimé les taux de change pour VUV, BMD, BND, CVE, DJF, DZD, FJD, GMD, JOD, LYD, MUR et TWD en septembre 2021. Pour l'année fiscale 2021, les taux de change de Xe.com sont utilisés pour ces devises.
Il a été porté une attention particulière au respect de la méthodologie du SNPL. Retrouvez les tests unitaires du mémento fiscal ici.
airports.json est une base compacte de 5779 aéroports. C'est une chaine contenant le code IATA sur 3 lettres, le séparateur ':' et le code pays en 2 lettres. Les villes particulières comme Tokyo ou New-York ont leur propre code: NY et TY.
const iata2country = (iata) => {
const index = airportsData.indexOf(iata + ':');
return (index >= 0) ? airportsData.substring(index + 4, index + 6): null;
}
FLYTAX propose un export des barèmes au format csv et au format tsv.
Les fichiers .tsv peuvent être ouvert directement dans Excel ou être importé comme fichier CSV avec les options d'importation par défaut. L'app Numbers d'Apple lit aussi directement ces fichiers. Excel sur iPad ne sait pas importer les fichiers tsv. Les fichiers 2021 contiennent une colonne suplémentaire indiquant la source utilisée pour les taux de change.
Année | CSV | TSV | Aperçu |
---|---|---|---|
2023 | 2023.csv | 2023.tsv | voir |
2022 | 2022.csv | 2022.tsv | voir |
2021 | 2021.csv | 2021.tsv | voir |
2020 | 2020.csv | 2020.tsv | voir |
2019 | 2019.csv | 2019.tsv | voir |
2018 | 2018.csv | 2018.tsv | voir |
Pour le calcul du forfait Euro:
Année | CSV | TSV | Aperçu | Montant |
---|---|---|---|---|
2023 | 2023-euro.csv | 2023-euro.tsv | voir | 168 € |
2022 | 2022-euro.csv | 2022-euro.tsv | voir | 161 € |
2021 | 2021-euro.csv | 2021-euro.tsv | voir | 159 € |
2020 | 2020-euro.csv | 2020-euro.tsv | voir | 159 € |
2019 | 2019-euro.csv | 2019-euro.tsv | voir | 156 € |
La BNF de dispose plus aujourd'hui de l'historique de taux de change du Litas (LTL) pour pouvoir publier le calcul du forfait euro de 2018. Son montant était de 156 €.
data2020.json est un fichier json qui contient 6 propriétés.
{
"countries": /* ....*/,
"exr": /* ....*/,
"year": "2020", /* l'année fiscale */
"zoneForfaitEuro": ["AT","BE","BL","CY", /* ... */], /* liste des pays du forfait zoneEuro */
"maxForfait10":12652, /* plafond abattement fiscal forfait */
"urssaf":{"Paris":[68.1,19],"Province":[50.5,19],"DOM":90} /* données pour calcul du forfait Euro */
}
{
"FR":{
"n":"FRANCE",
"z":1,
"f":1
},"EE":{
"n":"ESTONIE",
"a":[["2006-11-01","EUR","129"]],
"f":1
},"EU":{
"n":"EUROPE (FORFAIT)",
"a":[["2020-01-01","EUR","156"]]
},"NY":{
"n":"NEW-YORK CITY",
"a":[["2020-09-01","USD","450"],["2020-01-01","USD","320"]]
},
/* ... */
}
Pour chaque pays, "n" désigne le nom, "z":1 (optionel défini la zone M), "f":1 (optionel défini l'usage du forfait Euro), et "a" (optionel si f est présent) est une liste des indemnités pour ce pays avec la date de début de validité, la monnaie et le montant. Le code pays "EU" contient le montant du forfait euro pour l'année en cours. Pour déterminer si on doit retirer ½ indemnité, if faut vérifier z == 1
.
Si par ailleurs vous considérerez qu'il faut retirer ½ indemnité à tous les pays de la zone euro, y compris la Lituanie, la Lettonie, l'Estonie, et depuis 2023 la Croatie, alors il faudra vérifier z == 1 || f == 1
.
{
"EUR":["1.0000","1.0000","1.0000"],
"XAF":["655.9570","655.9570","655.9570"],
"BMD":["1.2215","1.13720","1.1794",false]
/* ... */
}
contient le code monnaie, le taux au 31/12/19, le taux au 31/12/20, le taux moyen et le dernier champ optionnel indique si le taux provient de la BNF (officiel) ou a été ajouté en manuel (false = non officiel).
Pour déterminer les montants par pays vous pouvez par exemple utiliser:
const findAmount = (countryData, isoDate) => {
const iso = isoDate.substring(0,10);
for (const [date, currency, amount, official] of countryData.a) {
if (date.localeCompare(iso) <= 0) {
return [amount, currency, official!==false];
}
}
/* error handling or just return zero */
return ["0", "EUR", false];
}
Et pour avoir le montant en euros:
const findAmountEuros = (countryData, isoDate, exrData) => {
const [amount, currency] = findAmount(countryData, isoDate);
const exr = exrData[currency];
if (exr) {
const rate = parseFloat(exr[2]);
const euros = parseFloat((parseFloat(amount) / rate).toFixed(2));
return euros;
} else {
throw new Error(`Taux de change inconnu pour ${currency}`);
}
};
Pour afficher le site de dev sur l'iPad, il faut ouvrir les ports de sirv sur l'extérieur. Comme de plus nous avons besoin du https pour que le ServiceWorker puisse fonctionner, il faut:
- installer des certificats sur le Mac
# Placez vous dans le répertoire de dev
$ pwd
/Users/eric/Dev/flytax
# génération des certificats
$ openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' \
-keyout localhost-key.pem -out localhost-cert.pem
# il nous faut les utilitaires mkcert et pour Firefox nss
$ brew install mkcert
$ brew install nss
# on installe l'autorité de certification
$ mkcert -install
Sudo password:
The local CA is now installed in the system trust store! ⚡️
The local CA is already installed in the Firefox trust store! 👍
# on signe par l'autorité nos certificats
# (remplacez 192.168.1.103 par l'ip de votre ordinateur de dev)
$ mkcert -key-file localhost-key.pem -cert-file localhost-cert.pem \
localhost 127.0.0.1 0.0.0.0 192.168.1.103
- installer le certificat de l'autorité sur l'iPad:
Sur le Mac, ouvrez le trousseau d'accès Système et exportez via Airdrop le certificat nommé mkcert sur l'iPad
Sur l'iPad, accepter le certificat puis Réglages/Général/Gestion des profils: Installer le profil mkcert, puis Réglages/Informations/Réglage des certificats, activer la confiance pour mkcert
- ensuite il suffit d'utiliser les commandes
npm run start2
ounpm run dev2
.github/workflows/main.yml
publie automatiquement sur la branche gh-pages à chaque push sur la branche main.