Extend build docs to describe dependencies
This commit is contained in:
parent
2cebde781c
commit
4a45c90446
7 changed files with 64 additions and 13 deletions
49
README.md
49
README.md
|
@ -1,13 +1,18 @@
|
||||||
# Paychex payroll importer for Beancount
|
# Paychex payroll importer for Beancount
|
||||||
|
|
||||||
The aim of this tool is to automate the monthly task of transcribing payroll CSV
|
This tool automates the monthly task of transcribing a payroll CSV from service
|
||||||
information for Conservancy's 8 (currently) employees into ~ 300 lines of fairly
|
provider Paychex into around 300 lines of fairly intricate Beancount bookkeeping
|
||||||
intricate Beancount bookkeeping data.
|
data.
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
See a demo with:
|
The run, the program requires a Java runtime (tested with OpenJDK 17 and 21).
|
||||||
|
On Debian 12 (Bookworm):
|
||||||
|
|
||||||
|
sudo apt install openjdk-17-jre
|
||||||
|
|
||||||
|
Run a demo with two example employees, Jack and Jill Citizen:
|
||||||
|
|
||||||
java -jar import-x.x.x-standalone.jar --demo
|
java -jar import-x.x.x-standalone.jar --demo
|
||||||
|
|
||||||
|
@ -16,8 +21,8 @@ Provide your own payroll data with:
|
||||||
java -jar import-x.x.x-standalone.jar --csv resources/example-paychex-pay-item-details.csv --total-fees 206.50
|
java -jar import-x.x.x-standalone.jar --csv resources/example-paychex-pay-item-details.csv --total-fees 206.50
|
||||||
|
|
||||||
In the above, various values such as the date, time period covered and
|
In the above, various values such as the date, time period covered and
|
||||||
receipt/invoice values will be replace with "TODO" placeholders. You can
|
receipt/invoice values show "TODO" placeholders that you are expected to fill in
|
||||||
alternatively provide any/all of these explicitly:
|
later. If you prefer, you can provide any/all of these explicitly:
|
||||||
|
|
||||||
java -jar import-x.x.x-standalone.jar --csv resources/example-paychex-pay-item-details.csv --date 2023-12-29 --period 'December 2023' --total-fees 206.50 --pay-receipt-no rt:19462/674660 --pay-invoice-no rt:19403/675431 --fees-receipt-no rt:19459/675387 --fees-invoice-no rt:19459/674887 --retirement-receipt-no rt:19403/676724 --retirement-invoice-no rt:19403/675431
|
java -jar import-x.x.x-standalone.jar --csv resources/example-paychex-pay-item-details.csv --date 2023-12-29 --period 'December 2023' --total-fees 206.50 --pay-receipt-no rt:19462/674660 --pay-invoice-no rt:19403/675431 --fees-receipt-no rt:19459/675387 --fees-invoice-no rt:19459/674887 --retirement-receipt-no rt:19403/676724 --retirement-invoice-no rt:19403/675431
|
||||||
|
|
||||||
|
@ -37,6 +42,21 @@ Then run Beancount with:
|
||||||
bean-report [your file] balances
|
bean-report [your file] balances
|
||||||
|
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
To build you need a Java SDK (tested with OpenJDK 17 and 21) and Clojure. On
|
||||||
|
Debian 12 (Bookworm):
|
||||||
|
|
||||||
|
sudo apt install openjdk-17-jdk clojure
|
||||||
|
|
||||||
|
To build, run:
|
||||||
|
|
||||||
|
bin/build
|
||||||
|
|
||||||
|
This will output a JAR file like `target/import-x.x.x-standalone.jar`, where the
|
||||||
|
version number is based on the Git revision.
|
||||||
|
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
Run tests with:
|
Run tests with:
|
||||||
|
@ -51,10 +71,15 @@ The project is set up for development in Emacs and CIDER-mode. Open a source
|
||||||
file and run `cider-jack-in`.
|
file and run `cider-jack-in`.
|
||||||
|
|
||||||
|
|
||||||
## Build
|
## Why Clojure?
|
||||||
|
|
||||||
To build, run:
|
Clojure is very well-suited to this kind of data
|
||||||
|
transformation/manipulation. Even without fully understanding the implications
|
||||||
bin/build
|
of all the accounting/tax concepts I was able to parse the previous
|
||||||
|
human-generated Beancount entries into a data structure and work backwards to
|
||||||
This will output a JAR file like `target/import-x.x.x-standalone.jar`.
|
produce results that matched exactly, without worrying about exact text
|
||||||
|
formatting. Libraries like deep-diff2 and the editor-integrated REPL made it
|
||||||
|
very efficient to compare the data structures and build the program - certainly
|
||||||
|
much more efficient than developing the same program in Python. It's only just
|
||||||
|
over 500 lines of code and we've had zero bugs as of writing (one year since it
|
||||||
|
was built).
|
||||||
|
|
2
TODO.md
2
TODO.md
|
@ -1,5 +1,5 @@
|
||||||
# To-do
|
# To-do
|
||||||
|
|
||||||
* Validation/error handling on CLI arguments - required options like csv, date, period
|
* Add validation/error handling of required CLI arguments such as csv, date and period
|
||||||
* Potentially move employee-name->entity-tag into config
|
* Potentially move employee-name->entity-tag into config
|
||||||
* Potentially move cat->payroll-type into config
|
* Potentially move cat->payroll-type into config
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# Build an uberjar (a Java jar package including the program and all dependencies)
|
||||||
clojure -T:build uber
|
clojure -T:build uber
|
||||||
|
|
2
bin/dev
2
bin/dev
|
@ -1,2 +1,4 @@
|
||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# Run the program without building it
|
||||||
clojure -M -m core "$@"
|
clojure -M -m core "$@"
|
||||||
|
|
8
bin/loc
Executable file
8
bin/loc
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# Count the lines of code, excluding tests and examples
|
||||||
|
git ls-files -- \
|
||||||
|
':!:LICENSE.txt' \
|
||||||
|
':!:test/*' \
|
||||||
|
':!:resources/example-*.csv' \
|
||||||
|
| xargs cloc "$@"
|
2
bin/test
2
bin/test
|
@ -1,2 +1,4 @@
|
||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# Run the test suite
|
||||||
clojure -M:test "$@"
|
clojure -M:test "$@"
|
||||||
|
|
12
manifest.scm
Normal file
12
manifest.scm
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
;; Guix manifest
|
||||||
|
;;
|
||||||
|
;; If you're running GNU Guix, this file describes the dependencies necessary to
|
||||||
|
;; develop/build the program. Use it with `guix shell --manifest=manifest.scm`.
|
||||||
|
(specifications->manifest
|
||||||
|
(list
|
||||||
|
;; No issues running this OpenJDK 21 program on Debian Stable (OpenJDK 17).
|
||||||
|
"openjdk@21"
|
||||||
|
;; Works fine with clojure-tools from Guix.
|
||||||
|
"clojure-tools"
|
||||||
|
"beancount"
|
||||||
|
))
|
Loading…
Add table
Reference in a new issue