commit 004710aa05d35047369dfcbb1cbfc58395f41c9f Author: Oliver Date: Tue Mar 17 15:48:02 2026 -0300 INIT diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..90f9aa9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +FROM alpine/java:21-jre + +LABEL maintainer="ODOO4projects" \ + application="VSCU" \ + version="1.0.3" + +WORKDIR /app + +COPY vscu/vscu.jar vscu.jar + +COPY vscu/config/vscu.properties config/vscu.properties + +RUN mkdir -p /app/data +VOLUME ["/app/data"] + +EXPOSE 8088 + +ENV JAVA_OPTS="-Xms512m -Xmx4096m -XX:-LoopUnswitching" + +ENV VSCU_PORT=8088 \ + VSCU_PROFILE=sbx \ + VSCU_WORKING_DIR=/app/data \ + VSCU_NO_SCH_THREADS=3 \ + VSCU_BATCH_SIZE=30 \ + VSCU_EXEC_MODE=OFFLINE \ + VSCU_LOGGING_LEVEL=INFO \ + VSCU_PROC_CHECK=N + +ENTRYPOINT ["sh", "-c", \ + "exec java $JAVA_OPTS \ + -Dport=$VSCU_PORT \ + -Dprofile=$VSCU_PROFILE \ + -Dworking_directory=$VSCU_WORKING_DIR \ + -Dno_sch_threads=$VSCU_NO_SCH_THREADS \ + -Dbatch_size=$VSCU_BATCH_SIZE \ + -Dexec_mode=$VSCU_EXEC_MODE \ + -Dlogging_level=$VSCU_LOGGING_LEVEL \ + -Dproc_check=$VSCU_PROC_CHECK \ + -jar vscu.jar \ + --spring.config.location=file:config/vscu.properties"] diff --git a/guide.txt b/guide.txt new file mode 100644 index 0000000..b74b863 --- /dev/null +++ b/guide.txt @@ -0,0 +1,147 @@ +PUBLIC +ISO 9001:2015 CERTIFIED +Virtual Sales Control Unit +(VSCU) Version 1.0.3 +Application Installation and +Setup Guide for Windows +Operating System +August 27, 2024 +Version 1.0.3 +KENYA REVENUE AUTHORITY PUBLIC +Notice +© 2024 Kenya Revenue Authority (KRA) +This is a controlled document. Unauthorized access, copying, replication or +usage for a purpose other than for which it is intended, are prohibited. +All trademarks that appear in the document have been used for identification +purposes only and belong to their respective companies. +KENYA REVENUE AUTHORITY PUBLIC +3 +eTIMS VSCU Application Installation and Setup +Step-by-Step Guide +STEP 0: Prepare System +Make sure your system meets the following Minimum System Requirements: +1. Java JDK/JRE 21 or later is installed on your system. +2. Internet Connectivity to eTIMS server URL located at: +3. 4GB RAM +STEP 1: Transfer Application file to your System +1. Transfer the Application file (VSCU-1.0.3.zip) to the target machine where +you want to deploy it. You can use methods such as SFTP, SCP, or a file- +sharing service to transfer the JAR file from your local machine to the target +machine. +2. Unzip the file to your target directory e.g. C:\KRAVSCU +The content of the zip file is: +STEP 2: Configure Application Properties +1. From the target directory, change directory to config directory +cd C:\KRAVSCU\config +For production deployment +https://etims-api.kra.go.ke/etims-api +For sandbox deployment +https://etims-api-sbx.kra.go.ke/etims-api +. +├ config +| ├ application.properties +|vscu-1.0.3.jar +|vscu.bat +|vscu.sh +# unzip VSCU-1.0.3.zip +KENYA REVENUE AUTHORITY PUBLIC +4 +2. Edit the application.properties file using your favorite editor by updating +the following parameters: +• Update api.external.domain property based on VSCU use in production or +sandbox environments. +• Update server.port to the port you prefer VSCU to run on your target +machine. (Default 8088) +• Update property.path to a filesystem path preferable to host VSCU data. +(Default user.home) +3. Save changes +STEP 3: Update Runtime Configuration (vscu.bat) +1. From the target directory, change directory to config directory +cd C:\KRAVSCU\config +2. Edit the vscu.bat file using your favorite editor by updating the following +parameters: +• Update Java Runtime Memory allocation settings i.e. MIN_MEM (minimum) +and MAX_MEM (Maximum) properties (set in MB) +Note: +✓ MIN_MEM setting should be a minimum of ⅛ of your System +RAM. +✓ MAX_MEM setting is recommended to be a maximum of ½ of +your System RAM. +set MIN_MEM=512m +set MAX_MEM=4096m +property.path =user.home +server.port=8088 +For production deployment +api.external.domain=https://etims-api.kra.go.ke/etims-api +For sandbox deployment +api.external.domain=https://etims-api-sbx.kra.go.ke/etims-api +KENYA REVENUE AUTHORITY PUBLIC +5 +• Update ACT_PROC_COUNT property (This setting allocated CPU cores to +the application) +• Update BASE_FOLDER property (Location where VSCU files were extracted +to) +3. Save changes +STEP 4: Running VSCU as Standalone Application +1. Execute the bat file (vsdc.bat) by running the following on command prompt +from the BASE_FOLDER: +2. The VSCU application will now be accessible to the Trader Invoicing System +via the following URL: +http://: +e.g. http://localhost:8088 +STEP 5: Initialize VSCU Application Instance (Applies to +new vscu installations) +1. Invoke the VSCU initialization endpoint (/initializer/selectInitInfo) with +Taxpayer PIN, branch office ID, and serial number earlier shared to you +during eTIMS service request. +set BASE_FOLDER= C:\KRAVSCU +set ACT_PROC_COUNT =3 +vscu.bat +Request Payload +{ +"tin":"P000000000N", +"bhfId":"00", +"dvcSrlNo":"CZC000H001" +} +KENYA REVENUE AUTHORITY PUBLIC +6 +2. After successful initialization, the TIS will be able to access all other VSCU +operations. +Successful Response Payload +{ +"resultCd": "000", +"resultMsg": "Successful", +"resultDt": "20240823162330", +"data": { +"info": { +"tin": " P000000000N ", +"taxprNm": "A COMPANY LIMITED", +"bsnsActv": "8690 - Other human health activities", +"bhfId": "00", +"bhfNm": "Headquarter", +"bhfOpenDt": "20240104", +"prvncNm": "Kiambu", +"dstrtNm": "Thika West District", +"sctrNm": "Thika", +"locDesc": "eTIMS Address", +"hqYn": "Y", +"mgrNm": "A NAME ", +"mgrTelNo": "10111111100", +"mgrEmail": "EMAIL@XX.COM", +"sdcId": null, +"mrcNo": null, +"dvcId": "59397", +"intrlKey": null, +"signKey": null, +"cmcKey": null, +"lastPchsInvcNo": 0, +"lastSaleRcptNo": null, +"lastInvcNo": null, +"lastSaleInvcNo": 10022, +"lastTrainInvcNo": null, +"lastProfrmInvcNo": null, +"lastCopyInvcNo": null, +"vatTyCd": "2" +} +} +} diff --git a/vscu/config/vscu.properties b/vscu/config/vscu.properties new file mode 100644 index 0000000..9171205 --- /dev/null +++ b/vscu/config/vscu.properties @@ -0,0 +1,17 @@ + +#port +port=8088 +#dev,test,sbx,prod +profile=sbx +#working directory +working_directory=user.home +#number of threads +no_sch_threads=3 +#batch size +batch_size=30 +#ONLINE,OFFLINE +exec_mode=OFFLINE +#logging level +logging_level=INFO +#PROC_CHECK +proc_check=N diff --git a/vscu/scripts/Linux/restart.sh b/vscu/scripts/Linux/restart.sh new file mode 100644 index 0000000..5345229 --- /dev/null +++ b/vscu/scripts/Linux/restart.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +APPNAME="eTIMS VSCU" +APPJAR=vscu-v2.0.5.jar +APPOPTS="-XX:-LoopUnswitching -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled" + +PID=`ps -ef | grep $APPJAR | grep -v grep | awk '{print $2}'` + +echo "PID = $PID" + +if [ -z "${PID}" ]; then + echo "STARTING $APPNAME...." + nohup java -jar $APPJAR 2>&1 & + PID=`ps -ef | grep $APPJAR | grep -v grep | awk '{print $2}'` + echo "$APPNAME HAS BEEN STARTED SUCCESSFULLY WITH PID $PID!!!" +else + echo "$APPNAME IS STOPPING..." + echo + kill -9 $PID + echo "$APPNAME HAS STOPPED SUCCESSFULLY!!!" + echo + echo "$APPNAME STARTING...." + nohup java -jar $APPJAR 2>&1 & + PID=`ps -ef | grep $APPJAR | grep -v grep | awk '{print $2}'` + echo "$APPNAME HAS BEEN STARTED SUCCESSFULLY WITH PID $PID!!!" + echo +fi diff --git a/vscu/scripts/Linux/start.sh b/vscu/scripts/Linux/start.sh new file mode 100644 index 0000000..920b461 --- /dev/null +++ b/vscu/scripts/Linux/start.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +APPNAME="eTIMS VSCU" +APPJAR=vscu-v2.0.5.jar +APPOPTS="-XX:-LoopUnswitching -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled" + +PID=`ps -ef | grep $APPJAR | grep -v grep | awk '{print $2}'` + +echo "PID = $PID" + +if [ -z "${PID}" ]; then + echo "STARTING $APPNAME...." + nohup java -jar $APPJAR 2>&1 & + PID=`ps -ef | grep $APPJAR | grep -v grep | awk '{print $2}'` + echo "$APPNAME HAS BEEN STARTED SUCCESSFULLY WITH PID $PID!!!" +else + echo "$APPNAME IS ALREADY RUNNING WITH PID $PID" +fi diff --git a/vscu/scripts/Linux/stop.sh b/vscu/scripts/Linux/stop.sh new file mode 100644 index 0000000..800858c --- /dev/null +++ b/vscu/scripts/Linux/stop.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +APPNAME="eTIMS VSCU" +APPJAR=vscu-v2.0.5.jar +APPOPTS="-XX:-LoopUnswitching -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled" + +PID=`ps -ef | grep $APPJAR | grep -v grep | awk '{print $2}'` + +echo "PID = $PID" + +if [ -z "${PID}" ]; then + echo "$APPNAME IS ALREADY STOPPED!!!" +else + echo "STOPPING $APPNAME...." + kill -9 $PID + echo "$APPNAME HAS BEEN STOPPED SUCCESSFULLY!!!" +fi diff --git a/vscu/scripts/Windows/vscu.bat b/vscu/scripts/Windows/vscu.bat new file mode 100644 index 0000000..1dec364 --- /dev/null +++ b/vscu/scripts/Windows/vscu.bat @@ -0,0 +1,13 @@ +@echo off + +REM Set memory allocation +set JAVA_OPTS=-Xms512m -Xmx4096m + +REM Specify the JAR file +set JAR_FILE=vscu-v2.0.5.jar + +REM Run the JAR file in a new window and redirect output to the original command window +start /wait java %JAVA_OPTS% -jar "%JAR_FILE%" 2>&1 + +REM Exit the original command window +exit \ No newline at end of file diff --git a/vscu/vscu.jar b/vscu/vscu.jar new file mode 100644 index 0000000..9eebf8f Binary files /dev/null and b/vscu/vscu.jar differ