{"id":28098644,"url":"https://github.com/target/possum","last_synced_at":"2025-10-06T16:32:54.950Z","repository":{"id":183535575,"uuid":"662747173","full_name":"target/POSSUM","owner":"target","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-06T16:39:36.000Z","size":657,"stargazers_count":26,"open_issues_count":10,"forks_count":4,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-05-08T09:48:56.452Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/target.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-07-05T19:54:02.000Z","updated_at":"2025-05-06T16:39:37.000Z","dependencies_parsed_at":"2023-07-24T21:15:37.240Z","dependency_job_id":"648a01bc-943f-40d3-97e7-80e8481d4a83","html_url":"https://github.com/target/POSSUM","commit_stats":null,"previous_names":["target/possum"],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/target%2FPOSSUM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/target%2FPOSSUM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/target%2FPOSSUM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/target%2FPOSSUM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/target","download_url":"https://codeload.github.com/target/POSSUM/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253999794,"owners_count":21997335,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-13T17:58:30.803Z","updated_at":"2025-10-06T16:32:54.840Z","avatar_url":"https://github.com/target.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# POSSUM  \n  \n## Description\nPOSSUM is a Spring Boot framework Java project designed to present the functionality of all USB-connected POS peripherals that follow the JavaPOS spec (scanners, printer, lane light, line display, cash drawer, check reader, scale, etc.) as web services.  \n\nFunctionality provided by POSSUM will enable use outside of localhost for use by mobile applications, kiosks, and sharing between point of sale systems to create modern point of sale user experiences. \n\n## Team\nPOSSUM was created by Target Tech as an enterprise scale product to abstract point of sale peripheral hardware into discrete capabilities without regard to the differences between peripheral manufacturers and the implementation of their device drivers. This enables point of sale software developers to create point of sale software without hardware specific knowledge by calling simple web APIs for functions in a consistent manner.\n\nPOSSUM enables the following:\n\n:white_check_mark: \u0026nbsp;\u0026nbsp;\u0026nbsp; Creates operational efficiencies\n\n:white_check_mark: \u0026nbsp;\u0026nbsp;\u0026nbsp; Simplifies configuration management of retail peripherals\n\n:white_check_mark: \u0026nbsp;\u0026nbsp;\u0026nbsp; Increases flexibility in the hardware lifecycle events\n\n:white_check_mark: \u0026nbsp;\u0026nbsp;\u0026nbsp; Promotes competition through the commodification of peripheral devices\n\n:white_check_mark: \u0026nbsp;\u0026nbsp;\u0026nbsp; Enables software developers to create modern point of sale experiences\n\n## Code Organization\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./diagrams/CodeOrgPOSSUM.png\" alt=\"code organization information\"\u003e\n\u003c/p\u003e\n  \n## Sequence Overview\n  \n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./diagrams/SequenceCodePOSSUM.png\" alt=\"code sequence diagram\"\u003e\n\u003c/p\u003e\n  \n## Getting Started\n\n\n### To fix CORS error (To whitelist new CORS Origins in Developer box)\nAdd origins to environment `CORS_ORIGINS` variable separated by a comma (,)\n\n    `CORS_ORIGINS=http://localhost:8100,http://localhost:7777`\n    \n## Running POSSUM Locally\n- Click the “Code” dropdown\n- Copy the link to the project\n- Go to your terminal, then enter \"git clone (project link)\"\n- Enter your credentials (if prompted)\n- Once cloned, go to your development environment and click open, and navigate to the project in your finder/folder.\n- Ensure the project is configured to build using Java 17 \n- Once opened, build the project using Gradle commands\n- To run POSSUM on your local machine will require spring profile environment variable\n- ```export SPRING_PROFILES_ACTIVE=local```\n- To run simulator use ```./gradlew run -DuseSimulators=true```  \n\n## Running POSSUM on a POS Computer\nRequirements:\n  - Java 17\n  - POS Hardware drivers (provided by the manufacturer)\n  - Note: ensure all dependencies for physical POS devices are installed (i.e. libusb for Honeywell scanners)\n\nVerified Supported OS:\n  - CentOS 7 \n  - Ubuntu\n  - NOTE: this is a Java application and can run many OS.\n\n- Follow Running POSSUM Locally to ensure you are able to compile and run POSSUM (NOTE: this does not need to be done on a POS computer)\n- Install the OS on the POS computer (refer to the Supported OS list above)\n- Install Java 17 on POS computer\n- Make the following directories:\n  - `sudo mkdir /opt/target`\n  - `sudo mkdir /opt/target/possum`\n  - `sudo mkdir /opt/target/possum/externalLib`\n- Compile POSSUM to create a jar file\n- Copy jar file and following src/main/resource files from the development machine to the POS computer /opt/target/possum directory \n  - `devcon.xml`\n  - `devicestarter.sh`\n  - `ECIEncoding.csv`\n  - `IHSParser.csv`\n  - `LabelIdentifiers.csv`\n  - `PossumDeviceManager-1.0.jar`\n- Install necessary libraries and JPOS drivers for your hardware (i.e. Honeywell scanners require libusb)\n- For devices not already supported, update the devcon.xml file\n- Launch POSSUM:\n  - Navigate to /opt/target/possum\n  - To run use `sudo domenv=labs sh devicestarter.sh`\n\n## API Specs\n\u003cdetails\u003e\n\u003csummary\u003eScanner\u003c/summary\u003e\n\n| URL                                      | Description                                      | Parameters              | Response             |\n|------------------------------------------|--------------------------------------------------|-------------------------|----------------------|\n| 🟢`POST` /v1/scanner/reconnect           | Reconnects scanners                              | None                    | None                 |\n| 🔵`GET`  /v1/scanner/healthstatus        | Reports scanners status                          | None                    | DeviceHealthResponse |\n| 🔵`GET`  /v1/scanner/health              | Reports the health of both scanners              | None                    | DeviceHealthResponse |\n| 🔵`GET` /v1/scanner/health/{scannerType} | Reports the health of one scanner                | HANDHELD, FLATBED, BOTH | DeviceHealthResponse |\n| 🔵`GET` /v1/scan                         | Retrieve barcode data from connected scanner     | None                    | Barcode              |\n| 🔴`DELETE` /v1/scan                      | Cancel previously requested scan                 | None                    | None                 |\n| 🔵`GET` /v1/scan/{scannerType}           | Retrieve barcode data from one connected scanner | HANDHELD, FLATBED, BOTH | Barcode              |\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eScale\u003c/summary\u003e\n\n| URL                             | Description                                                                                    | Parameters | Response             |\n|---------------------------------|------------------------------------------------------------------------------------------------|------------|----------------------|\n| 🟢`POST` /v1/scale/reconnect    | Reconnects scale                                                                               | None       | None                 |\n| 🔵`GET`  /v1/stableweight       | Retrieves stable weight from scale. Use for selling weighted items.                            | None       | FormattedWeight      |\n| 🔵`GET`  /v1/scale/healthstatus | Reports scale status                                                                           | None       | DeviceHealthResponse |\n| 🔵`GET` /v1/scale/health        | Reports scale health                                                                           | None       | DeviceHealthResponse |\n| 🔵`GET` /v1/liveweight          | Retrieves current weight from scale. For informational purposes only - DO NOT use for selling. | None       | SseEmitter           |\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003ePrinter\u003c/summary\u003e\n\n| URL                               | Description                                                                                    | Parameters        | Response             |\n|-----------------------------------|------------------------------------------------------------------------------------------------|-------------------|----------------------|\n| 🟢`POST` /v1/printer/reconnect    | Reconnects printer                                                                             | None              | None                 |\n| 🟢`POST` /v1/print                | Sends entities to attached printer                                                             | Receipt Entities* | None                 |\n| 🔵`GET`  /v1/printer/healthstatus | Reports printer status                                                                         | None              | DeviceHealthResponse |\n| 🔵`GET` /v1/printer/health        | Reports printer health                                                                         | None              | DeviceHealthResponse |\n\n*Includes any combination of BarcodeContent, ImageContent, and TextContent\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eLine Display\u003c/summary\u003e\n\n| URL                                   | Description                                                           | Parameters      | Response             |\n|---------------------------------------|-----------------------------------------------------------------------|-----------------|----------------------|\n| 🟢`POST` /v1/linedisplay/reconnect    | Reconnects line display                                               | None            | None                 |\n| 🟢`POST` /v1/linedisplay/display      | Displays text on 2x20. To clear out a line, omit it from the request. | LineDisplayData | None                 |\n| 🔵`GET`  /v1/linedisplay/healthstatus | Reports line display status                                           | None            | DeviceHealthResponse |\n| 🔵`GET` /v1/linedisplay/health        | Reports line display health                                           | None            | DeviceHealthResponse |\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDevice Availability\u003c/summary\u003e\n\n| URL                                     | Description                          | Parameters                              | Response                   |\n|-----------------------------------------|--------------------------------------|-----------------------------------------|----------------------------|\n| 🔵`GET` /v1/peripherals                 | Reports list of attached peripherals | None                                    | DeviceAvailabilityResponse |\n| 🔵`GET` /v1/health                      | Reports health for all devices       | None                                    | DeviceHealthResponse       |\n| 🔵`GET`  /v1/deviceerror                | Reports errors for all devices       | None                                    | SseEmitter                 |\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCheck\u003c/summary\u003e\n\n| URL                              | Description                                                       | Parameters        | Response               |\n|----------------------------------|-------------------------------------------------------------------|-------------------|------------------------|\n| 🔵`GET` /v1/check                | Read data from a check or slip                                    | None              | MicrData               |\n| 🟢`POST` /v1/check               | Print data on a check or slip                                     | CheckPrintData*   | None                   |\n| 🔴`DELETE` /v1/check             | Cancel get check data call and/or eject the check from the MICR   | None              | None                   |\n| 🟢`POST` /v1/check/reconnect     | Reconnect MICR                                                    | None              | None                   |\n| 🔵`GET` /v1/check/healthstatus   | Reports MICR status                                               | None              | DeviceHealthResponse   |\n| 🔵`GET` /v1/check/health         | Reports MICR health                                               | None              | DeviceHealthResponse   |\n\n\n*Includes any combination of BarcodeContent, ImageContent, and TextContent\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCash Drawer\u003c/summary\u003e\n\n| URL                                 | Description                                                                       | Parameters | Response             |\n|-------------------------------------|-----------------------------------------------------------------------------------|------------|----------------------|\n| 🟢`POST` /v1/cashdrawer/reconnect   | Reconnect cash drawer                                                             | None       | None                 |\n| 🟢`POST` /v1/cashdrawer/open        | Opens the cash drawer and waits until the cash drawer is closed before returning  | None       | None                 |\n| 🔵`GET` /v1/cashdrawer/healthstatus | Reports cash drawer status                                                        | None       | DeviceHealthResponse |\n| 🔵`GET` /v1/cashdrawer/health       | Reports cash drawer health                                                        | None       | DeviceHealthResponse |\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eSchemas\u003c/summary\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eDeviceError\u003c/summary\u003e\n\n```\n{\n    code            string\n    description     string\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eBarcodeContent\u003c/summary\u003e\n\n```\n{\n    type\t    string (enum)\n        [ TEXT, BARCODE, IMAGE ]\n    data\t    string\n    barcodeType\t    string (enum)\n        [ UPCA, UPCE, JAN8, EAN8, JAN13, EAN13, TF, ITF, CODABAR, CODE_39, CODE_93, CODE_128, UPCA_S, UPCE_S, UPCD1, UPCD2, UPCD3, UPCD4, UPCD5, EAN8_S, EAN13_S, EAN128, OCRA, OCRB, CODE_128_PARSED, RSS14, RSS_EXPANDED, GS1DATABAR, GS1DATABAR_E, GS1DATABAR_S, GS1DATABAR_E_S, PDF417, MAXICODE, DATAMATRIX, QRCODE, UQRCODE, AZTEC, UPDF417, OTHER ]\n    barcodeAlign    string (enum)\n        [ LEFT, CENTER, RIGHT ]\n    textLocation    string\n        [ NONE, ABOVE, BELOW ]\n    height\t    integer ($int32)\n    width\t    integer ($int32)\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eImageContent\u003c/summary\u003e\n\n```\n{\n    type            string (enum)\n        [ TEXT, BARCODE, IMAGE ]\n    data                string\n    imageFormatType\tstring (enum)\n        [ BMP, JPEG, GIF ]\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003ePrinterContent\u003c/summary\u003e\n\n```\n{\n    type    string (enum)\n        [ TEXT, BARCODE, IMAGE ]\n    data    string\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eTextContent\u003c/summary\u003e\n\n```\n{\n    type    string (enum)\n        [ TEXT, BARCODE, IMAGE ]\n    data    string\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003ePrinterError\u003c/summary\u003e\n\n```\n{\n    code\t    string\n    description\t    string\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eLineDisplayData\u003c/summary\u003e\n\n```\n{\n    line1   string\n    line2   string\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCashDrawerError\u003c/summary\u003e\n\n```\n{\n    code            string\n    description\t    string\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eSseEmitter\u003c/summary\u003e\n\n```\n{\n    timeout integer ($int64)\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eScaleError\u003c/summary\u003e\n\n```\n{\n    code            string\n    description\t    string\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eFormattedWeight\u003c/summary\u003e\n\n```\n{\n    weight  string\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDeviceHealthResponse\u003c/summary\u003e\n\n```\n{\n    deviceName\t    string\n    healthStatus    string (enum)\n        [ READY, NOTREADY ]\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eBarcode\u003c/summary\u003e\n\n```\n{\n    data    string\n    type    string (enum)\n        [ UPCA, UPCA_S, UPCE, UPCE_S, UPCD1, UPCD2, UPCD3, UPCD4, UPCD5, EAN8, JAN8, EAN8_S, EAN13, JAN13, EAN13_S, EAN128, TWO_OF_FIVE, INTERLEAVED_TWO_OF_FIVE, CODABAR, CODE39, CODE93, CODE128, OCRA, OCRB, RSS14, RSS_EXPANDED, GS1DATABAR, GS1DATABAR_E, CCA, CCB, CCC, PDF417, MAXICODE, DATAMATRIX, QRCODE, UQRCODE, AZTEC, UPDF417, OTHER, UNKNOWN ]\n    source  string (enum)\n        [ HANDHELD, FLATBED, BOTH ]\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDeviceAvailabilityResponse\u003c/summary\u003e\n\n```\n{\n    possumversion    string\n    confirmversion  string\n    devicelist      DeviceConfigResponse\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDeviceConfigResponse\u003c/summary\u003e\n\n```\n{\n    devicename\t    string\n    vidpid\t    string\n    usbport\t    string\n    manufacturer    string\n    model\t    string\n    config\t    string\n    firmware\t    string\n    serialnumber    string\n    isFunctional    boolean\n    attached\t    boolean\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eMicrError\u003c/summary\u003e\n\n```\n{\n    code            string\n    description\t    string\n}\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eMicrData\u003c/summary\u003e\n\n```\n{\n    account_number      string\n    bank_number         string\n    transit_number      string\n    raw_data            string\n    sequence_number     string\n}\n```\n\u003c/details\u003e\n\u003c/details\u003e\n\n\n## Dependencies and External Links\n\nPOSSUM as a project leverages JavaPOS standards and service objects. To learn more about JavaPOS follow the links below.\n\nhttps://www.omg.org/retail/unified-pos.htm\n\nhttps://github.com/JavaPOSWorkingGroup\n\nhttps://repo1.maven.org/maven2/org/javapos/javapos/1.14.1/\n\n## Supported Devices\nFlatbed Scanner\n- Datalogic 2300 Scanner\n- Datalogic 3550 Scanner\n- Datalogic 8200 Scanner\n- Datalogic 8400 Scanner Scale\n- Datalogic 8400 Scanner\n- Datalogic 8405 Scale\n- Datalogic 9400 Scanner\n- Datalogic 9400 Scanner Scale\n- Zebra MP7000 Scanner\n- Zebra MP7001 Scanner Scale\n\nHandheld Scanner\n- Honeywell 1900/1950 Scanner\n\nMICR\n- NCR 7167 MICR\n\nLine Display\n- NCR 5975 Line Display Serial\n- NCR 5976 Line Display Serial\n- NCR 5976 Line Display USB\n- NCR 5977 Line Display USB\n\nReceipt Printer\n- NCR POS Printer F309\n- NCR POS Printer 7167\n- NCR POS Printer EPIC 7199\n- NCR POS Printer USB 7199\n\nCash Drawer\n- Cash Drawer ELO Computer\n- Cash Drawer NCR Computer\n- Cash Drawer NCR via printer port \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarget%2Fpossum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftarget%2Fpossum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarget%2Fpossum/lists"}