zugpferd 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/setup-schemas +176 -0
  3. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 668190b295d1286b2f8efd2f2896054e9c102c48da549d70486ef13677d042ad
4
- data.tar.gz: '0274834d75a8c12690e178b5e075a8bed9792180b627c19a1fd3313534d9914c'
3
+ metadata.gz: b9958c2c1a118694c6232c624d11e2d0d9ea07ec9908e3b7d4398c236d505343
4
+ data.tar.gz: 0d9a7e373aa70c17becd0c24c1a9ef67eaaa63d67a388b0f31d8f47f1fdb5acd
5
5
  SHA512:
6
- metadata.gz: 74be6147cd6ef40e90a23548e0e15c0b65e7c5e402535c2575f1dc41926b66b981f7c1e555d297f006ae69988ff9470c4d8b2eb2e8a4c7c83aa8791cc8bde1f5
7
- data.tar.gz: 2cb11d5ef99e1d3341006fd37d2fa8e9ba3703fbebc7c642577f269aaa9aae3ddf666c2ed892a6ca5e92df17945d1d2b916b9b542c16f283b909ec862ddd8cdd
6
+ metadata.gz: ae3c9fa8a8fd24afe433d91ec1aedd8695d8bf1b59ace7d3c81a1d9cdf91709c48a6c53910883f62273c1d7f5d16ac3b61ed009f942ed78e0f66b21cde9334bd
7
+ data.tar.gz: a2cdadd08aab4a70567629555124c22fb620441e6c05d93d6d675d6b0bdbf58c7c0e5c5d8f3b8d180fa26557ee02bc13ebafb55e541d0facf70dfcdee9ef1112
data/bin/setup-schemas ADDED
@@ -0,0 +1,176 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ VENDOR_DIR="$(cd "$(dirname "$0")/../vendor" && pwd)"
5
+ SCHEMAS_DIR="$VENDOR_DIR/schemas"
6
+ TMP_DIR=$(mktemp -d)
7
+ trap 'rm -rf "$TMP_DIR"' EXIT
8
+
9
+ # --- Saxon HE (for Schematron validation) ---
10
+
11
+ echo "==> Downloading Saxon HE..."
12
+ SAXON_DIR="$SCHEMAS_DIR/saxon"
13
+ mkdir -p "$SAXON_DIR"
14
+
15
+ SAXON_VERSION="12.5"
16
+ XMLRESOLVER_VERSION="5.2.2"
17
+ MAVEN="https://repo1.maven.org/maven2"
18
+
19
+ if [ ! -f "$SAXON_DIR/saxon-he-$SAXON_VERSION.jar" ]; then
20
+ echo " Downloading saxon-he-$SAXON_VERSION.jar..."
21
+ curl -fsSL "$MAVEN/net/sf/saxon/Saxon-HE/$SAXON_VERSION/Saxon-HE-$SAXON_VERSION.jar" \
22
+ -o "$SAXON_DIR/saxon-he-$SAXON_VERSION.jar"
23
+ else
24
+ echo " saxon-he-$SAXON_VERSION.jar already present"
25
+ fi
26
+
27
+ if [ ! -f "$SAXON_DIR/xmlresolver-$XMLRESOLVER_VERSION.jar" ]; then
28
+ echo " Downloading xmlresolver-$XMLRESOLVER_VERSION.jar..."
29
+ curl -fsSL "$MAVEN/org/xmlresolver/xmlresolver/$XMLRESOLVER_VERSION/xmlresolver-$XMLRESOLVER_VERSION.jar" \
30
+ -o "$SAXON_DIR/xmlresolver-$XMLRESOLVER_VERSION.jar"
31
+ else
32
+ echo " xmlresolver-$XMLRESOLVER_VERSION.jar already present"
33
+ fi
34
+ echo " OK"
35
+
36
+ # --- UBL 2.1 XSD ---
37
+
38
+ echo ""
39
+ echo "==> Downloading UBL 2.1 XSD schemas..."
40
+ UBL_DIR="$SCHEMAS_DIR/ubl"
41
+
42
+ if [ ! -d "$UBL_DIR/xsd/maindoc" ]; then
43
+ echo " Downloading UBL-2.1.zip..."
44
+ curl -fsSL "http://docs.oasis-open.org/ubl/os-UBL-2.1/UBL-2.1.zip" \
45
+ -o "$TMP_DIR/UBL-2.1.zip"
46
+ mkdir -p "$UBL_DIR/xsd"
47
+ unzip -qo "$TMP_DIR/UBL-2.1.zip" "os-UBL-2.1/xsd/*" -d "$TMP_DIR"
48
+ cp -r "$TMP_DIR/os-UBL-2.1/xsd/"* "$UBL_DIR/xsd/"
49
+ else
50
+ echo " UBL XSD already present"
51
+ fi
52
+ echo " OK"
53
+
54
+ # --- CII D16B XSD ---
55
+
56
+ echo ""
57
+ echo "==> Downloading CII D16B XSD schemas..."
58
+ CII_DIR="$SCHEMAS_DIR/cii"
59
+
60
+ if [ ! -f "$CII_DIR/CrossIndustryInvoice_100pD16B.xsd" ]; then
61
+ echo " Downloading D16B SCRDM (Subset) CII..."
62
+ CII_URL="https://unece.org/fileadmin/DAM/cefact/xml_schemas/D16B_SCRDM__Subset__CII.zip"
63
+ curl -fsSL "$CII_URL" -o "$TMP_DIR/cii-outer.zip" || {
64
+ echo " WARN: Could not download CII XSD from UN/CEFACT."
65
+ echo " Download manually from: $CII_URL"
66
+ echo " Extract the 'uncoupled' XSD files into $CII_DIR/"
67
+ }
68
+
69
+ if [ -f "$TMP_DIR/cii-outer.zip" ]; then
70
+ mkdir -p "$CII_DIR"
71
+ unzip -qo "$TMP_DIR/cii-outer.zip" -d "$TMP_DIR/cii-outer"
72
+ # The outer ZIP contains nested ZIPs — extract the uncoupled one
73
+ UNCOUPLED_ZIP=$(find "$TMP_DIR/cii-outer" -name "*uncoupled.zip" -type f | head -1)
74
+ if [ -n "$UNCOUPLED_ZIP" ]; then
75
+ unzip -qo "$UNCOUPLED_ZIP" -d "$CII_DIR"
76
+ else
77
+ echo " WARN: Could not find uncoupled ZIP inside CII archive"
78
+ fi
79
+ fi
80
+ else
81
+ echo " CII XSD already present"
82
+ fi
83
+ echo " OK"
84
+
85
+ # --- CEN Schematron EN16931 ---
86
+
87
+ echo ""
88
+ echo "==> Downloading CEN Schematron EN16931..."
89
+ CEN_VERSION="1.3.15"
90
+ CEN_BASE="https://github.com/ConnectingEurope/eInvoicing-EN16931/releases/download/validation-$CEN_VERSION"
91
+
92
+ CEN_UBL_DIR="$SCHEMAS_DIR/schematron/cen/ubl"
93
+ if [ ! -f "$CEN_UBL_DIR/xslt/EN16931-UBL-validation.xslt" ]; then
94
+ echo " Downloading en16931-ubl-$CEN_VERSION.zip..."
95
+ curl -fsSL "$CEN_BASE/en16931-ubl-$CEN_VERSION.zip" -o "$TMP_DIR/cen-ubl.zip"
96
+ mkdir -p "$CEN_UBL_DIR"
97
+ unzip -qo "$TMP_DIR/cen-ubl.zip" -d "$CEN_UBL_DIR"
98
+ else
99
+ echo " CEN UBL Schematron already present"
100
+ fi
101
+
102
+ CEN_CII_DIR="$SCHEMAS_DIR/schematron/cen/cii"
103
+ if [ ! -f "$CEN_CII_DIR/xslt/EN16931-CII-validation.xslt" ]; then
104
+ echo " Downloading en16931-cii-$CEN_VERSION.zip..."
105
+ curl -fsSL "$CEN_BASE/en16931-cii-$CEN_VERSION.zip" -o "$TMP_DIR/cen-cii.zip"
106
+ mkdir -p "$CEN_CII_DIR"
107
+ unzip -qo "$TMP_DIR/cen-cii.zip" -d "$CEN_CII_DIR"
108
+ else
109
+ echo " CEN CII Schematron already present"
110
+ fi
111
+ echo " OK"
112
+
113
+ # --- XRechnung Schematron ---
114
+
115
+ echo ""
116
+ echo "==> Downloading XRechnung Schematron..."
117
+ XRECHNUNG_SCHEMATRON_VERSION="2.5.0"
118
+ XRECHNUNG_SPEC_VERSION="3.0.2"
119
+ XR_DIR="$SCHEMAS_DIR/schematron/xrechnung"
120
+
121
+ if [ ! -f "$XR_DIR/schematron/ubl/XRechnung-UBL-validation.xsl" ]; then
122
+ echo " Downloading xrechnung-$XRECHNUNG_SPEC_VERSION-schematron-$XRECHNUNG_SCHEMATRON_VERSION.zip..."
123
+ curl -fsSL "https://github.com/itplr-kosit/xrechnung-schematron/releases/download/release-$XRECHNUNG_SCHEMATRON_VERSION/xrechnung-$XRECHNUNG_SPEC_VERSION-schematron-$XRECHNUNG_SCHEMATRON_VERSION.zip" \
124
+ -o "$TMP_DIR/xrechnung-schematron.zip"
125
+ mkdir -p "$XR_DIR"
126
+ unzip -qo "$TMP_DIR/xrechnung-schematron.zip" -d "$XR_DIR"
127
+ else
128
+ echo " XRechnung Schematron already present"
129
+ fi
130
+ echo " OK"
131
+
132
+ # --- XRechnung Testsuite ---
133
+
134
+ echo ""
135
+ echo "==> Downloading XRechnung test suite..."
136
+ if [ ! -d "$VENDOR_DIR/testsuite" ]; then
137
+ git clone --depth 1 \
138
+ https://github.com/itplr-kosit/xrechnung-testsuite.git \
139
+ "$VENDOR_DIR/testsuite"
140
+ else
141
+ cd "$VENDOR_DIR/testsuite" && git pull --ff-only
142
+ fi
143
+ echo " OK"
144
+
145
+ # --- ZUGFeRD PDF artifacts ---
146
+
147
+ echo ""
148
+ echo "==> Downloading ZUGFeRD PDF artifacts..."
149
+ ZUGFERD_DIR="$VENDOR_DIR/zugferd"
150
+ mkdir -p "$ZUGFERD_DIR"
151
+
152
+ GS_REF="master"
153
+ GS_RAW="https://raw.githubusercontent.com/ArtifexSoftware/ghostpdl/$GS_REF"
154
+
155
+ if [ ! -f "$ZUGFERD_DIR/zugferd.ps" ]; then
156
+ echo " Downloading zugferd.ps..."
157
+ curl -fsSL "$GS_RAW/lib/zugferd.ps" -o "$ZUGFERD_DIR/zugferd.ps"
158
+ else
159
+ echo " zugferd.ps already present"
160
+ fi
161
+
162
+ if [ ! -f "$ZUGFERD_DIR/default_rgb.icc" ]; then
163
+ echo " Downloading default_rgb.icc..."
164
+ curl -fsSL "$GS_RAW/iccprofiles/default_rgb.icc" -o "$ZUGFERD_DIR/default_rgb.icc"
165
+ else
166
+ echo " default_rgb.icc already present"
167
+ fi
168
+ echo " OK"
169
+
170
+ echo ""
171
+ echo "All artifacts ready in: $VENDOR_DIR"
172
+ echo ""
173
+ echo "Optional dependencies:"
174
+ echo " - Java (for Schematron validation with Saxon)"
175
+ echo " - Ghostscript (for PDF/A-3 embedding)"
176
+ echo " - Docker (for veraPDF / Mustangproject validation)"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zugpferd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Zeitler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-02-15 00:00:00.000000000 Z
11
+ date: 2026-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -75,6 +75,7 @@ executables: []
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
+ - bin/setup-schemas
78
79
  - lib/zugpferd.rb
79
80
  - lib/zugpferd/cii/mapping.rb
80
81
  - lib/zugpferd/cii/reader.rb