Compare commits

...

10 Commits

10 changed files with 461 additions and 181 deletions

129
package-lock.json generated
View File

@ -10,12 +10,14 @@
"dependencies": {
"@floating-ui/dom": "1.5.3",
"@fortawesome/free-solid-svg-icons": "^6.4.2",
"svelte-fa": "^3.0.4"
"svelte-fa": "^3.0.4",
"svelte-flatpickr-plus": "^1.0.5"
},
"devDependencies": {
"@skeletonlabs/skeleton": "2.4.0",
"@skeletonlabs/tw-plugin": "0.2.3",
"@sveltejs/adapter-auto": "^2.0.0",
"@sveltejs/adapter-static": "^2.0.3",
"@sveltejs/kit": "^1.20.4",
"@tailwindcss/forms": "0.5.6",
"@tailwindcss/typography": "0.5.10",
@ -63,7 +65,6 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
"integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
@ -569,7 +570,6 @@
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@ -583,7 +583,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
@ -592,7 +591,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
@ -600,14 +598,12 @@
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"dev": true
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.20",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
"integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@ -687,6 +683,15 @@
"@sveltejs/kit": "^1.0.0"
}
},
"node_modules/@sveltejs/adapter-static": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.3.tgz",
"integrity": "sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==",
"dev": true,
"peerDependencies": {
"@sveltejs/kit": "^1.5.0"
}
},
"node_modules/@sveltejs/kit": {
"version": "1.27.3",
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.27.3.tgz",
@ -794,8 +799,7 @@
"node_modules/@types/estree": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.4.tgz",
"integrity": "sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==",
"dev": true
"integrity": "sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw=="
},
"node_modules/@types/json-schema": {
"version": "7.0.14",
@ -815,8 +819,7 @@
"node_modules/@types/pug": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.8.tgz",
"integrity": "sha512-QzhsZ1dMGyJbn/D9V80zp4GIA4J4rfAjCCxc3MP+new0E8dyVdSkR735Lx+n3LIaHNFcjHL5+TbziccuT+fdoQ==",
"dev": true
"integrity": "sha512-QzhsZ1dMGyJbn/D9V80zp4GIA4J4rfAjCCxc3MP+new0E8dyVdSkR735Lx+n3LIaHNFcjHL5+TbziccuT+fdoQ=="
},
"node_modules/@types/semver": {
"version": "7.5.4",
@ -1023,7 +1026,6 @@
"version": "8.11.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
"integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
@ -1115,7 +1117,6 @@
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
"integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dev": true,
"dependencies": {
"dequal": "^2.0.3"
}
@ -1170,7 +1171,6 @@
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
"integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
"dev": true,
"dependencies": {
"dequal": "^2.0.3"
}
@ -1178,8 +1178,7 @@
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/binary-extensions": {
"version": "2.2.0",
@ -1194,7 +1193,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@ -1248,7 +1246,6 @@
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
"dev": true,
"engines": {
"node": "*"
}
@ -1350,7 +1347,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
"integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==",
"dev": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15",
"@types/estree": "^1.0.1",
@ -1389,8 +1385,7 @@
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"node_modules/cookie": {
"version": "0.5.0",
@ -1419,7 +1414,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
"dependencies": {
"mdn-data": "2.0.30",
"source-map-js": "^1.0.1"
@ -1476,7 +1470,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
"integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"dev": true,
"engines": {
"node": ">=6"
}
@ -1485,7 +1478,6 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
"integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
"dev": true,
"engines": {
"node": ">=8"
}
@ -1541,8 +1533,7 @@
"node_modules/es6-promise": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
"integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==",
"dev": true
"integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg=="
},
"node_modules/esbuild": {
"version": "0.18.20",
@ -1804,7 +1795,6 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
"integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
"dev": true,
"dependencies": {
"@types/estree": "^1.0.0"
}
@ -1927,6 +1917,11 @@
"node": ">=12.0.0"
}
},
"node_modules/flatpickr_plus": {
"version": "1.1.10",
"resolved": "https://registry.npmjs.org/flatpickr_plus/-/flatpickr_plus-1.1.10.tgz",
"integrity": "sha512-znrzlS/0v62blI4goG/1ytYL2uTrYbRqpKLeT+ZvA9uHWhjyTYhZFOVGUO24spBKuayvyNFSgqUtqHRktC/GgA=="
},
"node_modules/flatted": {
"version": "3.2.9",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
@ -1949,8 +1944,7 @@
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"node_modules/fsevents": {
"version": "2.3.3",
@ -1970,7 +1964,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@ -1979,7 +1972,6 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@ -2057,8 +2049,7 @@
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
"node_modules/graphemer": {
"version": "1.4.0",
@ -2079,7 +2070,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
"integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"
},
@ -2135,7 +2125,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@ -2144,8 +2133,7 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/is-binary-path": {
"version": "2.1.0",
@ -2163,7 +2151,6 @@
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dev": true,
"dependencies": {
"hasown": "^2.0.0"
},
@ -2214,7 +2201,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
"integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
"dev": true,
"dependencies": {
"@types/estree": "*"
}
@ -2305,7 +2291,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
"dev": true,
"devOptional": true,
"engines": {
"node": ">=10"
}
@ -2319,8 +2305,7 @@
"node_modules/locate-character": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
"integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
"dev": true
"integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="
},
"node_modules/locate-path": {
"version": "6.0.0",
@ -2371,7 +2356,6 @@
"version": "0.30.5",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
"integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
"dev": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
},
@ -2382,8 +2366,7 @@
"node_modules/mdn-data": {
"version": "2.0.30",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
"dev": true
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
},
"node_modules/merge2": {
"version": "1.4.1",
@ -2411,7 +2394,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
"integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
"dev": true,
"engines": {
"node": ">=4"
}
@ -2429,7 +2411,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
@ -2441,7 +2422,6 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@ -2450,7 +2430,6 @@
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
"dependencies": {
"minimist": "^1.2.6"
},
@ -2497,7 +2476,6 @@
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"dev": true,
"funding": [
{
"type": "github",
@ -2563,7 +2541,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"dependencies": {
"wrappy": "1"
}
@ -2640,7 +2617,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -2657,8 +2633,7 @@
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-type": {
"version": "4.0.0",
@ -2673,7 +2648,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
"integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
"dev": true,
"dependencies": {
"@types/estree": "^1.0.0",
"estree-walker": "^3.0.0",
@ -2683,8 +2657,7 @@
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
"node_modules/picomatch": {
"version": "2.3.1",
@ -2702,7 +2675,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -2720,7 +2692,6 @@
"version": "8.4.31",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
"integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
"dev": true,
"funding": [
{
"type": "opencollective",
@ -2748,7 +2719,6 @@
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.0.0",
"read-cache": "^1.0.0",
@ -2784,7 +2754,7 @@
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
"dev": true,
"devOptional": true,
"dependencies": {
"lilconfig": "^2.0.5",
"yaml": "^1.10.2"
@ -2899,8 +2869,7 @@
"node_modules/postcss-value-parser": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
"dev": true
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
"node_modules/prelude-ls": {
"version": "1.2.1",
@ -3033,7 +3002,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
"dev": true,
"dependencies": {
"pify": "^2.3.0"
}
@ -3054,7 +3022,6 @@
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
"dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@ -3156,7 +3123,6 @@
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz",
"integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==",
"dev": true,
"dependencies": {
"es6-promise": "^3.1.2",
"graceful-fs": "^4.1.3",
@ -3168,7 +3134,6 @@
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
},
@ -3245,7 +3210,6 @@
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz",
"integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==",
"dev": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.14",
"buffer-crc32": "^0.2.5",
@ -3260,7 +3224,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -3281,7 +3244,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
"integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
"dev": true,
"dependencies": {
"min-indent": "^1.0.0"
},
@ -3359,7 +3321,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
@ -3371,7 +3332,6 @@
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.2.tgz",
"integrity": "sha512-My2tytF2e2NnHSpn2M7/3VdXT4JdTglYVUuSuK/mXL2XtulPYbeBfl8Dm1QiaKRn0zoULRnL+EtfZHHP0k4H3A==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.1",
"@jridgewell/sourcemap-codec": "^1.4.15",
@ -3445,6 +3405,20 @@
"resolved": "https://registry.npmjs.org/svelte-fa/-/svelte-fa-3.0.4.tgz",
"integrity": "sha512-y04vEuAoV1wwVDItSCzPW7lzT6v1bj/y1p+W1V+NtIMpQ+8hj8MBkx7JFD7JHSnalPU1QiI8BVfguqheEA3nPg=="
},
"node_modules/svelte-flatpickr-plus": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/svelte-flatpickr-plus/-/svelte-flatpickr-plus-1.0.5.tgz",
"integrity": "sha512-GZ94ZsITFiJv7k0kC+RGci5TY12Z3RsQzD3IO2Pn5dzc+JtIEQTh6dspOqQOxD17reXZ4+pGayX8ghG387NMIA==",
"dependencies": {
"flatpickr_plus": "^1.1.10",
"postcss": "^8.4.31",
"postcss-import": "^15.1.0",
"svelte-preprocess": "^5.0.4"
},
"peerDependencies": {
"svelte": "^4.0.0"
}
},
"node_modules/svelte-hmr": {
"version": "0.15.3",
"resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz",
@ -3461,7 +3435,6 @@
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz",
"integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
"@types/pug": "^2.0.6",
@ -3523,7 +3496,6 @@
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
"integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
"dev": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.13"
},
@ -3729,7 +3701,7 @@
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
"integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
"dev": true,
"devOptional": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@ -3901,8 +3873,7 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/yallist": {
"version": "4.0.0",
@ -3914,7 +3885,7 @@
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
"dev": true,
"devOptional": true,
"engines": {
"node": ">= 6"
}

View File

@ -15,6 +15,7 @@
"@skeletonlabs/skeleton": "2.4.0",
"@skeletonlabs/tw-plugin": "0.2.3",
"@sveltejs/adapter-auto": "^2.0.0",
"@sveltejs/adapter-static": "^2.0.3",
"@sveltejs/kit": "^1.20.4",
"@tailwindcss/forms": "0.5.6",
"@tailwindcss/typography": "0.5.10",
@ -40,6 +41,7 @@
"dependencies": {
"@floating-ui/dom": "1.5.3",
"@fortawesome/free-solid-svg-icons": "^6.4.2",
"svelte-fa": "^3.0.4"
"svelte-fa": "^3.0.4",
"svelte-flatpickr-plus": "^1.0.5"
}
}

16
src/lib/truncateFloat.ts Normal file
View File

@ -0,0 +1,16 @@
/**
* Round half away from zero ('commercial' rounding)
* Uses correction to offset floating-point inaccuracies.
* Works symmetrically for positive and negative numbers.
*/
export function round(num : number, decimalPlaces : number = 0) : number {
const p = Math.pow(10, decimalPlaces);
const n = (num * p) * (1 + Number.EPSILON);
return Math.round(n) / p;
}
export function floor(num : number, decimalPlaces : number = 0) : number {
const p = Math.pow(10, decimalPlaces);
const n = (num * p) * (1 + Number.EPSILON);
return Math.floor(n) / p;
}

View File

@ -14,28 +14,19 @@
<!-- App Bar -->
<AppBar>
<svelte:fragment slot="lead">
<strong class="text-xl uppercase">Skeleton</strong>
<strong class="text-xl">Bok's utils</strong>
</svelte:fragment>
<svelte:fragment slot="trail">
<a
class="btn btn-sm variant-ghost-surface"
href="https://discord.gg/EXqV7W8MtY"
href="mailto:antoine.web@bokbox.com"
target="_blank"
rel="noreferrer"
>
Discord
Email
</a>
<a
class="btn btn-sm variant-ghost-surface"
href="https://twitter.com/SkeletonUI"
target="_blank"
rel="noreferrer"
>
Twitter
</a>
<a
class="btn btn-sm variant-ghost-surface"
href="https://github.com/skeletonlabs/skeleton"
href="https://github.com/bokounet"
target="_blank"
rel="noreferrer"
>

1
src/routes/+layout.ts Normal file
View File

@ -0,0 +1 @@
export const prerender = true;

View File

@ -1,9 +1,10 @@
<script>
import SalaireInterne from "./SalaireInterne.svelte";
<script lang="ts">
import SalaireInterne from './SalaireInterne.svelte';
</script>
<div class="container h-full mx-auto flex justify-center items-center max-w-6xl px-1 sm:px-2 md:px-5">
<div class="flex flex-col space-y-10 items-center">
<div class="container mx-auto flex justify-center items-center max-w-4xl px-1 sm:px-2 md:px-5 mt-2 sm:mt-6 md:mt-16">
<div class="space-y-10 items-center grid grid-cols-1">
<div>
<h2 class="h2">Salaire d'interne v2</h2>
</div>

View File

@ -15,7 +15,7 @@
}
</script>
<div class="flex flex-col-reverse xl:flex-row items-center justify-left gap-2">
<div class="flex flex-col-reverse items-center justify-left gap-2">
<div class="inline-flex rounded-full shadow-sm" role="group">
<button
type="button"
@ -44,5 +44,5 @@
<Fa icon={faPlus} size="sm" />
</button>
</div>
<span class="grow"><slot /></span>
<span class="grow truncate"><slot /></span>
</div>

View File

@ -1,5 +1,9 @@
<script lang="ts">
import { RadioGroup, RadioItem, SlideToggle } from '@skeletonlabs/skeleton';
import { monthPicker } from 'svelte-flatpickr-plus';
import type { Options } from 'svelte-flatpickr-plus';
import { French } from 'flatpickr_plus/dist/l10n/fr.js';
import PlusMoins from './PlusMoins.svelte';
import { recupBasesLegales } from './basesLegales';
import LigneSalaire from './LigneSalaire.svelte';
@ -13,14 +17,30 @@
let aIndemniteZipZac: boolean = false;
let estUltramarin: boolean = false;
let nbDemiGardes: number = 0;
let nbDemiGardesSem: number = 0;
let nbDemiGardesWE: number = 0;
let nbGardesSem: number = 0;
let nbGardesWE: number = 0;
let nbAstreintes: number = 0;
let nbDeplacements: number = 0;
let dateCourante: Date = new Date();
$: bases = recupBasesLegales(dateCourante);
// Options pour le monthpicker flatpicker-plus
const mp_options: Options = {
altInput: true,
altFormat: 'M Y',
defaultDate: Date.now(),
locale: French,
minDate: '2020-01-01',
maxDate: new Date(),
onChange: (dates: Date[], currentDateString: string, self: any, data?: any) => {
dateCourante = dates[0];
}
};
const annees = ['FFI', '1re', '2e', '3e', '4e', '5e', 'DJ1', 'DJ2'];
const bases = recupBasesLegales(2023, 10);
// Salaire de base et idemnités
let base: number = 0;
@ -116,7 +136,8 @@
$: tauxPrimeOutremer = estUltramarin ? parseFloat(bases.tauxPrimeOutremer) : 0;
// Gardes et astreintes
$: valDemiGarde = parseFloat(bases.demigarde);
$: valDemiGardeSem = parseFloat(bases.demigardeSem);
$: valDemiGardeWE = parseFloat(bases.demigardeWE);
$: valGardeSem = parseFloat(bases.gardeSem); // Pas de gestion des gardes au dela du service normal pour le moment
$: valGardeWE = parseFloat(bases.gardeWE); // Pas de gestion des gardes au dela du service normal pour le moment
$: valAstreinte = parseFloat(bases.astreinte);
@ -131,7 +152,8 @@
indemniteTransport +
indemniteHebergement +
(tauxPrimeOutremer * base) / 100 +
nbDemiGardes * valDemiGarde +
nbDemiGardesSem * valDemiGardeSem +
nbDemiGardesWE * valDemiGardeWE +
nbGardesSem * valGardeSem +
nbGardesWE * valGardeWE +
nbAstreintes * valAstreinte +
@ -178,27 +200,36 @@
{@debug base, totalBrut, totalNet}
<p>
Bienvenue sur le simulateur de bulletin de salaire d'interne ! Utilisez-le pour vérifier vos bulletins,
faire une prévision de vos revenus, où juste pour rêver...
</p>
<p>
Le simulateur comprend les valeurs historiques des taux et montants de base jusqu'en janvier 2020.
Pour remonter à des dates antérieures, utilisez le simulateur de salaire de doc (qui a été une grande inspiration !).
N'hésitez pas à faire remonter des difficultés ou des bugs par mail (cf. en haut à droite).
</p>
<hr />
<!-- ENTREES -->
<div class="gap-3 flex flex-wrap md:grid md:grid-cols-5 md:items-center">
<div class="gap-3 flex flex-wrap md:grid md:grid-cols-5 md:items-start">
<div>
<label class="label" for="dateSalaire"><span>Date d'effet</span></label>
<input class="input" id="dateSalaire" value="Date" disabled />
<label class="label pl-3 py-1" for="dateSalaire"><span>Date d'effet</span></label>
<input class="input cursor-pointer" id="dateSalaire" use:monthPicker={mp_options} readonly />
</div>
<div class="col-span-3 overflow-x-auto flex">
<div class="grow" />
<div class="text-center">
<label class="label text-left pl-3" for="anneeInternat"><span>Année</span></label>
<RadioGroup id="anneeInternat">
{#each annees as a}
<RadioItem bind:group={anneeInternat} name="anneeInternat" value={a}>{a}</RadioItem>
{/each}
</RadioGroup>
</div>
<div class="grow" />
<div class="col-span-3 overflow-x-auto flex flex-col text-center">
<label class="label me-80 pl-3 py-1" for="anneeInternat"><span>Année</span></label>
<RadioGroup id="anneeInternat" display="inline-flex mx-auto" padding="px-3 py-1">
{#each annees as a}
<RadioItem bind:group={anneeInternat} name="anneeInternat" value={a}>{a}</RadioItem>
{/each}
</RadioGroup>
</div>
<div class="flex flex-col gap-1">
<SlideToggle name="slider-logé" bind:checked={isLogé}>Logé</SlideToggle>
<SlideToggle name="slider-nourri" bind:checked={isNourri}>Nourri</SlideToggle>
<SlideToggle name="slider-outremer" bind:checked={estUltramarin}>Outremer</SlideToggle>
</div>
<div class="col-span-2 flex flex-col gap-1">
<div class="grow pb-2 flex justify-left">
@ -220,8 +251,8 @@
</div>
</div>
<div class="flex flex-col gap-2">
<SlideToggle name="slider-outremer" bind:checked={estUltramarin}>Outremer</SlideToggle>
<PlusMoins bind:compteur={nbDemiGardes}>Demi-gardes</PlusMoins>
<PlusMoins bind:compteur={nbDemiGardesSem}>Demi-gardes sem.</PlusMoins>
<PlusMoins bind:compteur={nbDemiGardesWE}>Demi-gardes WE</PlusMoins>
</div>
<div class="flex flex-col gap-2">
<PlusMoins bind:compteur={nbGardesSem}>Gardes semaine</PlusMoins>
@ -231,14 +262,14 @@
<PlusMoins bind:compteur={nbAstreintes}>Astreintes (12h)</PlusMoins>
<PlusMoins bind:compteur={nbDeplacements}>Déplacements</PlusMoins>
</div>
<div class="col-span-5 flex flex-col md:flex-row">
<div class="grow md:col-span-5 flex flex-col md:flex-row">
<span>Taux de prélèvement à la source : {tauxSource} %</span>
<input type="range" bind:value={tauxSource} max="20" step="0.5" />
<input class="py-1" type="range" bind:value={tauxSource} max="20" step="0.5" />
</div>
</div>
<!-- BULLETIN DE SALAIRE -->
<div class="ficheSalaire w-full flex flex-col bg-surface-700 font-mono">
<div class="ficheSalaire flex flex-col bg-surface-700 font-mono divide-y divide-gray-500">
<div class="grow flex text-center bg-surface-600 px-1 font-bold">
<div class="grow text-left">&nbsp;Description</div>
<div class="flex-none w-24">Base</div>
@ -266,10 +297,17 @@
<LigneSalaire
type="nombre"
label="Demi-garde"
label="Demi-garde semaine"
opt={true}
base={valDemiGarde}
nombre={nbDemiGardes}
base={valDemiGardeSem}
nombre={nbDemiGardesSem}
/>
<LigneSalaire
type="nombre"
label="Demi-garde WE & JF"
opt={true}
base={valDemiGardeWE}
nombre={nbDemiGardesWE}
/>
<LigneSalaire
type="nombre"
@ -332,7 +370,12 @@
/>
{#if tauxSource}
<LigneSalaire type="brut" emphase={true} label="&nbsp;TOTAL NET AVANT IMPOTS" base={totalNetAvantImpots} />
<LigneSalaire
type="brut"
emphase={true}
label="&nbsp;TOTAL NET AVANT IMPOTS"
base={totalNetAvantImpots}
/>
{/if}
<LigneSalaire
@ -347,4 +390,7 @@
</div>
<style>
.cursor-pointer {
cursor: pointer !important;
}
</style>

View File

@ -1,52 +1,296 @@
export function recupBasesLegales(annee: number, mois: number) {
const base = {
/* Salaires de bases :
A partir de juillet 2023 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000047774474
A partir de juillet 2022 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000046032166/2022-07-11
De nov 2020 à juin 2022 - https://www.legifrance.gouv.fr/loda/id/LEGIARTI000042352097/2020-11-01/#LEGIARTI000042352097
De fev 2017 à oct 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000042352732/2020-11-01
import { floor } from "$lib/truncateFloat";
Gardes > 2020 :
interface montant {
label: string,
basesDatees : montantDates,
}
type basesLegales = montant[];
type montantDates = Array<[string | null, number]>;
function montantEnVigueur(vigueur : Date, bases : montantDates) : number {
for (let b of bases) {
const [date, montant] = b;
if (date === null || vigueur >= new Date(date)) return montant;
}
return 0;
}
export function recupBasesLegales(vigueur : Date) {
let base = { /* VALEURS EN VIGUEUR (DERNIERE MAJ NOV 2023) - cf 2e partie pour valeurs historiques */
"baseDJ2": "28495.49", // juil 2023 - cf. historique
"baseDJ1": "28495.49", // juil 2023 - cf. historique
"base5e": "28448.22", // juil 2023 - cf. historique
"base4e": "28430.36", // juil 2023 - cf. historique
"base3e": "28408.30", // juil 2023 - cf. historique
"base2e": "21483.24", // juil 2023 - cf. historique
"base1ere": "19406.35", // juil 2023 - cf. historique
"baseFFI": "17745.47", // juil 2023 - cf. historique
"baseAnneeRecherche": "25931.90", // juil 2023 - cf. historique
"indemniteSujetion": "435.18", // juil 2023 - cf. historique
"primeDJ2eme": "6000", // fev 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000041582655
"primeDJ1re": "5000", // fev 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000041582655
"primeResp5eme": "4273.93", // juil 2023 - cf. historique
"primeResp4eme": "2154.10", // juil 2023 - cf. historique
"primeNonLogeNonNourri": "1010.64", // juil 2023 - cf. historique
"primeNonLogeNourri": "336.32", // juil 2023 - cf. historique
"primeLogeNonNourri": "674.31", // juil 2023 - cf. historique
"primeSASPAS": "125", // mars 2014 - https://www.legifrance.gouv.fr/loda/id/JORFTEXT000028684829
"indemniteDeplacement": "130", // mars 2014 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000028684837
"indemniteHebergement": "300", // nov 2020 - cf. historique
"tauxPrimeOutremer": "40", // harmonisation avril 2023 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000047387836
"tauxPrimeOutremerNiv1" : "40", // TODO
"tauxPrimeOutremerNiv2" : "40", // TODO
"gardeSem": "156.53", // juil 2023 - cf. historique
"gardeWE": "171.24", // juil 2023 - cf. historique
"demigardeSem": "78.26", // juil 2023 - cf. historique
"demigardeWE": "84.35", // juil 2023 - cf. historique
"astreinte": "21.26", // juil 2023 - cf. historique
"deplaAstreinte": "78.26", // juil 2023 - cf. historique
"tauxCSGDeductible": "6.8", // janvier 2019
"tauxCSGNonDeductible": "2.40", // janvier 2019
"tauxCRDS": "0.50", // février 1996
"assietteCSGCRDS": "0.9825",
// Retraite : https://www.ircantec.retraites.fr/employeur/parametres-utilises-ircantec
"IRCANTECTrA": "2.8", // jan 2017
"IRCANTECTrB": "6.95", // jan 2017
"plafondSS": "3666", // jan 2023 - cf. historique
"tauxAssuranceViellessePlafonee": "6.9", // janvier 2017 - https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000029924557
"tauxAssuranceViellesseDeplaf": "0.4", // ^ idem ^
}
// Mise à jour avec les valeurs historiques (si nécessaire) - cf. ci-dessous
basesHistoriques.forEach(bb => {
const montant = montantEnVigueur(vigueur, bb.basesDatees);
const label = bb.label as keyof typeof base;
base[label] = montant.toFixed(2);
});
return base;
}
const basesHistoriques : basesLegales = [
/* Les bases légales sont inscrites ci-dessous pour des dates à partir de janvier 2020 (sauf les DJ : fév 2020) */
/* DJ :
A partir de juillet 2023 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000047774474
De juil 2022 à juin 2023 : https://www.legifrance.gouv.fr/loda/id/LEGIARTI000046032168/2022-07-11/
De nov 2020 à juin 2022 : https://www.legifrance.gouv.fr/loda/id/LEGIARTI000042351456/2020-11-01/
De fev 2020 à oct 2020 : https://www.legifrance.gouv.fr/loda/id/LEGIARTI000041572708/2020-02-14/
*/
"baseDJ2": "28495.49",
"baseDJ1": "28495.49",
"base5e": "28448.22",
"base4e": "28430.36",
"base3e": "28408.30",
"base2e": "21483.24",
"base1ere": "19406.35",
"baseFFI": "17745.47",
"baseAnneeRecherche": "25931.90",
"indemniteSujetion": "435.18",
"primeDJ2eme": "6000",
"primeDJ1re": "5000", // https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000041582655
"primeResp5eme": "4273.93",
"primeResp4eme": "2154.10",
"primeNonLogeNonNourri": "1010.64",
"primeNonLogeNourri": "336.32",
"primeLogeNonNourri": "674.31",
"primeSASPAS": "125",
"indemniteDeplacement": "130",
"indemniteHebergement": "300",
"tauxPrimeOutremer": "40",
{ label: 'baseDJ2', basesDatees: [
[ '2023-07', 28495.49 ],
[ '2022-07', 28074.38 ],
[ '2020-11', 27015 ],
[ null, 27025 ]
]
},
{ label: 'baseDJ1', basesDatees: [
[ '2023-07', 28495.49 ],
[ '2022-07', 28074.38 ],
[ '2020-11', 27015 ],
[ null, 27025 ]
]
},
"gardeSem": "156.53",
"gardeWE": "171.24",
"demigarde": "78.26",
"astreinte": "21.26",
"deplaAstreinte": "78.26",
/* Salaires et indemnités / primes de base pour internes et FFI :
A partir de juillet 2023 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000046032166
A partir de juillet 2022 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000046147521/2022-08-06
De nov 2020 à juin 2022 - https://www.legifrance.gouv.fr/loda/id/LEGIARTI000042352097
De fev 2017 à oct 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000032841019
*/
{ label: 'base5e', basesDatees: [
[ '2023-07', 28448.22 ],
[ '2022-07', 28027.80 ],
[ '2020-11', 27080 ],
[ null, 25500.55 ]
]
},
{ label: 'base4e', basesDatees: [
[ '2023-07', 28430.36 ],
[ '2022-07', 28010.20 ],
[ '2020-11', 27063 ],
[ null, 25500.55 ]
]
},
{ label: 'base3e', basesDatees: [
[ '2023-07', 28408.30 ],
[ '2022-07', 27988.47 ],
[ '2020-11', 27042 ],
[ null, 25500.55 ]
]
},
{ label: 'base2e', basesDatees: [
[ '2023-07', 21483.24 ],
[ '2022-07', 21165.75 ],
[ '2020-11', 20450 ],
[ null, 18383.46 ]
]
},
{ label: 'base1ere', basesDatees: [
[ '2023-07', 19406.35 ],
[ '2022-07', 19119.55 ],
[ '2020-11', 18473 ],
[ null, 16605.13 ]
]
},
{ label: 'baseFFI', basesDatees: [
[ '2023-07', 17745.47 ],
[ '2022-07', 17483.22 ],
[ '2020-11', 16892 ],
[ null, 15196.51 ]
]
},
{ label: 'baseAnneeRecherche', basesDatees: [
[ '2023-07', 27596.01 ],
[ '2022-07', 27188.19 ],
[ '2020-11', 24684.71 ],
[ null, 24182.74 ]
]
},
{ label: 'indemniteSujetion', basesDatees: [
[ '2020-11', 435.18 ],
[ null, 432.58 ]
]
},
{ label: 'primeNonLogeNonNourri', basesDatees: [
[ '2020-11', 1010.64 ],
[ null, 1004.61 ]
]
},
{ label: 'primeNonLogeNourri', basesDatees: [
[ '2020-11', 336.32 ],
[ null, 334.32 ]
]
},
{ label: 'primeLogeNonNourri', basesDatees: [
[ '2020-11', 674.31 ],
[ null, 670.29 ]
]
},
{ label: 'primeResp5eme', basesDatees: [
[ '2023-07', 4273.93 ],
[ '2022-07', 4210.77 ],
[ '2020-11', 4068.38 ],
[ null, 4044.12 ]
]
},
{ label: 'primeResp4eme', basesDatees: [
[ '2023-07', 2154.10 ],
[ '2022-07', 2122.27 ],
[ '2020-11', 2050.50 ],
[ null, 2038.27 ]
]
},
"tauxCSGDeductible": "6.8", // janvier 2019
"tauxCSGNonDeductible": "2.40", // janvier 2019
"tauxCRDS": "0.50", // février 1996
"assietteCSGCRDS": "0.9825",
/* Gardes d'internes
A partir de juillet 2023 - https://www.legifrance.gouv.fr/loda/id/JORFTEXT000032575975
De juil 2022 à juil 2023 - https://www.legifrance.gouv.fr/loda/id/LEGIARTI000046209558/2022-07-01/
De nov 2020 à juil 2022 - https://www.legifrance.gouv.fr/loda/id/LEGIARTI000042485121/2020-11-01/
De mai 2016 à oct 2020 - https://www.legifrance.gouv.fr/loda/id/LEGIARTI000032582930/2016-05-01/
// Retraite : https://www.ircantec.retraites.fr/employeur/parametres-utilises-ircantec
"IRCANTECTrA": "2.8",
"IRCANTECTrB": "6.95",
"plafondSS": "3666",
"tauxAssuranceViellessePlafonee": "6.9",
"tauxAssuranceViellesseDeplaf": "0.4",
}
return base;
}
NB: les montants des gardes et demi-gardes supplémentaires sont égaux à ceux du week-end
+ revalorisation de 50 % : en continu depuis aout 2022
A partir de janvier 2024 - non publié pour le moment
De sept 2023 à dec 2023 - https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000048095628
De avr 2023 à aout 2023 - https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000047387923
De déc 2022 à mars 2023 - https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000046727758
De sept 2022 à nov 2022 - https://www.srp-img.com/wp-content/uploads/2023/01/Courrier-%EF%BF%BD-
lensemble-des-directeurs-detablissements-hospitaliers-et-aux-comptables-publics.pdf
D'aout 2022 à sept 2022 - https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000046229342
*/
{ label: 'gardeSem', basesDatees: [
[ '2023-07', floor(156.23 * 1.5, 2) ],
[ '2022-08', floor(154.22 * 1.5, 2) ],
[ '2022-07', 154.22 ],
[ '2020-11', 149 ],
[ null, 119.02 ]
]
},
{ label: 'gardeWE', basesDatees: [
[ '2023-07', floor(171.24 * 1.5, 2) ],
[ '2022-08', floor(168.71 * 1.5, 2) ],
[ '2022-07', 168.71 ],
[ '2020-11', 163 ],
[ null, 130.02 ]
]
},
{ label: 'demigardeSem', basesDatees: [
[ '2023-07', floor(78.26 * 1.5, 2) ],
[ '2022-08', floor(77.11 * 1.5, 2) ],
[ '2022-07', 77.11 ],
[ '2020-11', 74.5 ],
[ null, 59.50 ]
]
},
{ label: 'demigardeWE', basesDatees: [
[ '2023-07', floor(85.62 * 1.5, 2) ],
[ '2022-08', floor(84.35 * 1.5, 2) ],
[ '2022-07', 84.35 ],
[ '2020-11', 81.5 ],
[ null, 65.01 ]
]
},
/* Astreintes d'internes
A partir de juillet 2023 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000048244852
De juil 2022 à juil 2023 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000046209612/2022-07-01/
De nov 2020 à juil 2022 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000042485117/2020-11-01/
De nov 2015 à oct 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000031027721/2015-11-01/
*/
{ label: 'astreinte', basesDatees: [
[ '2023-07', 21.26 ],
[ '2022-07', 20.95 ],
[ null, 20 ]
]
},
{ label: 'deplaAstreinte', basesDatees: [
[ '2023-07', 78.26 ],
[ '2022-07', 77.11 ],
[ '2020-11', 74.5 ],
[ null, 59.50 ]
]
},
/* Indemnité forfaitaire d'hébergement (zones sous-denses)
A partir de novembre 2020 - https://www.legifrance.gouv.fr/loda/id/JORFTEXT000037152345
De nov 2018 à oct 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000037154721/2018-11-01
*/
{ label: 'indemniteHebergement', basesDatees: [
[ '2020-11', 300 ],
[ null, 200 ]
]
},
/* Majoration des émoluments pour les internes d'outre-mer
Harmonisation à 40 % à partir de avril 2023 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000047387836
De oct 2020 à mars 2023 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000042331244/
*/
{ label: 'tauxPrimeOutremerNiv1', basesDatees: [
[ '2023-04', 40 ],
[ '2020-10', 20 ],
[ null, 0 ]
]
},
{ label: 'tauxPrimeOutremerNiv2', basesDatees: [
[ '2020-10', 40 ],
[ null, 0 ]
]
},
/* Plafond mensuel de la sécurité sociale
https://www.ircantec.retraites.fr/employeur/parametres-utilises-ircantec
modifications en 2020, 2023 et 2024
(https://boss.gouv.fr/portail/accueil/actualites-boss/2023/octobre/le-plafond-de-securite-sociale-a.html)
*/
{ label: 'plafondSS', basesDatees: [
[ '2024-01', 3864 ],
[ '2023-01', 3666 ],
[ null, 3428 ]
]
},
]

View File

@ -1,4 +1,4 @@
import adapter from '@sveltejs/adapter-auto';
import adapter from '@sveltejs/adapter-static';
import { vitePreprocess } from '@sveltejs/kit/vite';
@ -10,10 +10,18 @@ const config = {
preprocess: [ vitePreprocess()],
kit: {
// adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
// If your environment is not supported or you settled on a specific environment, switch out the adapter.
// See https://kit.svelte.dev/docs/adapters for more information about adapters.
adapter: adapter()
adapter: adapter({
// default options are shown. On some platforms
// these options are set automatically — see below
pages: 'build',
assets: 'build',
fallback: undefined,
precompress: false,
strict: true
}),
paths: {
base: process.argv.includes('dev') ? '' : process.env.BASE_PATH
}
}
};
export default config;