# Slade360° Advantage API Documentation > Full documentation content, for language models. --- ## /docs/eTIMS/Getting-Started # Getting Started # Getting started with Slade360 eTIMS APIs The Slade360 eTIMS API connects your systems to the Kenya Revenue Authority's (KRA) Electronic Tax Invoice Management System (eTIMS). These pages are written for the developers doing the integration and for the businesses that have to file through it. ## Overview The API handles the tax compliance work, which breaks down into five areas: - Authentication: OAuth 2.0 secures access to the API. - Branch management: register branches and keep them up to date if you run more than one. - Device management: initialize ETRs and other fiscal devices, and manage them afterwards. - Invoicing: create, validate, and send tax invoices as the sales happen. - Customer and supplier management: keep your records of business partners correct. ## Next steps Take them in this order: 1. [Self onboard on eTIMS](/docs/eTIMS/How-To-Guides/Self-Onboard-on-eTIMS): create the account and activate the business. Nothing below answers until this is done. 2. [Start using the eTIMS API](/docs/eTIMS/How-To-Guides/Start-Using-the-eTIMS-API): get credentials, get an access token, and see how VSCU deployment is handled. 3. [Branches](/etims-api/branches): register a branch and keep it in step with eTIMS, so transactions are tracked against the right one. 4. [Create an eTIMS invoice](/docs/eTIMS/How-To-Guides/Create-an-eTIMS-Invoice): draft, add lines, process, sign. The sidebar has the detailed guides, and [the full API reference](/etims-api) covers every module. --- ## /docs/eTIMS/How-To-Guides/Create-an-eTIMS-Invoice # Create an eTIMS Invoice This guide covers issuing a compliant tax invoice, starting from a draft and ending with a signed invoice that carries the KRA verification details (CU invoice number and QR code). > **Prerequisites** > - You've [onboarded and activated your business](/docs/eTIMS/How-To-Guides/Self-Onboard-on-eTIMS). > - You have an access token. See [Authentication API](/auth-api). Send it as `Authorization: Bearer ` on every request. > - Your branch device is active and your items and customer exist. ## Step 1: Create the invoice (draft) Create the invoice header with the customer and branch details. `POST /api/sales/salesinvoices`. See [Add Sale](/etims-api) in the API reference. Save the `id` it returns; you'll use it as `invoice_id` in the next steps. ## Step 2: Add invoice lines Add one line per product or service sold, each with quantity, unit price, and tax rate (KRA tax categories A to E). `POST /api/sales/salesinvoicelines`. Reference the `invoice_id` from Step 1. ## Step 3: Process the invoice Move the invoice through its workflow (Draft → Submit → Approve): `POST /api/sales/salesinvoices/{invoice_id}/transition/DRAFT_SUBMIT_APPROVE` ## Step 4: Sign the invoice Signing sends the invoice to KRA through the device and returns the fiscal details: `POST /api/sales/salesinvoices/{invoice_id}/sign_sales_invoice` A signed invoice includes the CU invoice number, the KRA verification code, and a QR code the customer can scan to check that the invoice is genuine. ## Step 5: Retrieve or download the signed invoice `GET /api/sales/salesinvoices/{invoice_id}/download` ## Try it interactively Open the [eTIMS API Reference](/etims-api), set your token with the **Set API Token** button in the top bar, and run each call above with **Try it**. ## Related - Credit notes follow the same flow: create, process, then sign the credit note. - [Start Using the Slade360 eTIMS API](/docs/eTIMS/How-To-Guides/Start-Using-the-eTIMS-API) covers the full integration and go-live path. --- ## /docs/eTIMS/How-To-Guides/Querying-List-Endpoints # Querying List Endpoints Every eTIMS list endpoint (`GET` collections such as `/api/etims/item_classifications/`) takes the same set of query parameters, so you can pick out the fields you need, filter, search, and paginate. Use them rather than pulling a whole collection and trimming it on the client. The examples below use the item classifications list, but the parameters are the same on every list endpoint. > **Base URLs.** Development `https://api-dev.slade360edi.com/erp`, > Production `https://api.erp.slade360.co.ke`. All examples require > `Authorization: Bearer ` (see > [Start Using the eTIMS API](/docs/eTIMS/How-To-Guides/Start-Using-the-eTIMS-API)). ## Field selection (sparse fieldsets) Pass a comma-separated `fields` parameter and each result comes back with only those fields. Payloads shrink and responses get faster. ```bash curl --request GET \ --url 'https://api-dev.slade360edi.com/erp/api/etims/item_classifications/?fields=classification_code,classification_name' \ --header 'Authorization: Bearer ' ``` Each result then contains only the requested fields: ```json { "count": 1240, "next": "...?page=2", "previous": null, "page_size": 15, "current_page": 1, "total_pages": 83, "start_index": 1, "end_index": 15, "results": [ { "classification_code": "50131600", "classification_name": "Eggs and egg substitutes" } ] } ``` Notes: - `fields` is honoured on `GET` requests only. It has no effect on writes. - List the top-level field names, comma-separated. Spaces are not required. - An unknown field name is rejected with `400 Bad Request`, and the error lists the fields you can use, so a typo shows up straight away instead of being quietly dropped: ```json { "fields": "Unknown field(s): ['classificaton_name']. Allowed fields: ['active', 'classification_code', 'classification_name', 'created', 'id', ...]." } ``` - Omit `fields` to get the full representation. ## Filtering Filter on any model field with `?=`. Text fields such as `classification_name` match on partial values and ignore case (`contains`); most other fields need an exact match. ```bash # Exact match on the KRA classification code curl --url '.../api/etims/item_classifications/?classification_code=50131600' ... # Partial, case-insensitive match on the name curl --url '.../api/etims/item_classifications/?classification_name=egg' ... ``` ## Search Use `?search=` to match a term across the endpoint's searchable fields. For item classifications those are `classification_name` and `classification_code`, and a single term matches either: ```bash curl --url '.../api/etims/item_classifications/?search=egg' ... ``` ## Pagination List responses are paginated and wrapped in an envelope with `count`, `next`, `previous`, `page_size`, `current_page`, `total_pages`, `start_index`, `end_index`, and `results`. | Parameter | Default | Notes | |-----------|---------|-------| | `page` | `1` | Page number to fetch. | | `page_size` | `15` | Results per page. Capped at 50: larger values are clamped down to 50 rather than honoured. | ```bash curl --url '.../api/etims/item_classifications/?page=2&page_size=50' ... ``` > **Why `page_size` looks broken.** Values above 50 are clamped to 50 without an > error, so a single page will never hold more than 50 records. If you are after > one specific record, filter or search for it (above) rather than paging through > the whole collection. To pull an entire collection, page through it with > `?page=N&page_size=50` until `next` is `null`. ## Combining parameters The parameters compose. This fetches page 1 of the egg-related classifications, 50 at a time, with only the code and name in each result: ```bash curl --request GET \ --url 'https://api-dev.slade360edi.com/erp/api/etims/item_classifications/?search=egg&fields=classification_code,classification_name&page=1&page_size=50' \ --header 'Authorization: Bearer ' ``` ## Related - [Item Classification (KRA)](/docs/eTIMS/References/Item/Item-Classification) lists the classification codes and the hierarchy. - [eTIMS API Reference](/etims-api) has all the endpoints, each with an interactive "Try it". --- ## /docs/eTIMS/How-To-Guides/Self-Onboard-on-eTIMS # Self Onboard on eTIMS You can create a Slade360 Advantage account and activate your business for eTIMS yourself. Nobody has to provision it for you, and the wizard walks you through each screen. Budget a few minutes. ## Step 1: Open the onboarding page Go to **[dev.advantage.slade360.com/auth/welcome](https://dev.advantage.slade360.com/auth/welcome)** and click **Get Started**. If you already have an account, choose **Sign In** instead. ![Slade360 Advantage welcome page with Sign In and Get Started buttons](/onboarding/01-welcome.png) ## Step 2: Select your account type Choose how you're setting up: | Account type | Use it for | |--------------|------------| | **Business** *(recommended)* | Clinics, facilities, or businesses operating one or more locations. | | **Individual** | Solo practitioners and independent health or wellness professionals. | Most eTIMS users want Business. You can change it later. ![Select account type screen showing Individual and Business options](/onboarding/02-select-account-type.png) ## Step 3: Verify Admin ID Step 1 of 3 in the setup wizard. Enter the administrator's professional details, then confirm the emailed link and type in the SMS code to prove the admin is who they say they are. ![Step 1 of 3, Verify Admin ID, entering professional details](/onboarding/03-verify-admin-id.png) > If a connected registry already holds your professional details, the form > fills them in for you. If not, type them in yourself. ## Step 4: Setup Business Step 2 of 3. Fill in your business name, KRA PIN, and the branch or branches you operate. This is the organisation your eTIMS transactions get reported under. ![Step 2 of 3, Setup Business](/onboarding/04-setup-business.png) ## Step 5: Activate Business Step 3 of 3. Check your details and activate. When activation finishes, your business is registered and can transact on eTIMS. ![Step 3 of 3, Activate Business](/onboarding/05-activate-business.png) ## What's next - [Create an eTIMS Invoice](/docs/eTIMS/How-To-Guides/Create-an-eTIMS-Invoice) to issue your first signed tax invoice. - [Start Using the Slade360 eTIMS API](/docs/eTIMS/How-To-Guides/Start-Using-the-eTIMS-API) to integrate programmatically and go live. --- ## /docs/eTIMS/How-To-Guides/Start-Using-the-eTIMS-API # Start Using the Slade360 eTIMS API This page covers the whole integration. You get credentials, build against the development environment, then go live, with the VSCU deployment automated by Slade360. ## 1. Get your credentials [Onboard and activate your business](/docs/eTIMS/How-To-Guides/Self-Onboard-on-eTIMS), then get a `client_id` and `client_secret` for your integration. Credentials are issued per environment, so development and production have their own pair. ## 2. Authenticate Exchange your credentials for an access token through the [Authentication API](/auth-api), using the OAuth 2.0 client credentials grant: ```bash curl --request POST \ --url 'https://identity-dev.slade360edi.com/realms/slade360/protocol/openid-connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=' \ --data-urlencode 'client_secret=' \ --data-urlencode 'grant_type=client_credentials' ``` Send the returned `access_token` as `Authorization: Bearer ` on every API call. A token lasts 30 minutes, so request a new one once it expires. ## 3. Know your environments | Environment | Authentication host | eTIMS API base URL | |-------------|--------------------|--------------------| | **Development** | `https://identity-dev.slade360edi.com` | `https://api-dev.slade360edi.com/erp` | | **Production** | `https://identity.slade360edi.com` | `https://api.erp.slade360.co.ke` | Build and test against development first. ## 4. Set up your data Before you transact, make sure these exist. The [eTIMS API Reference](/etims-api) has the endpoints for each. 1. Branches, one for every location you operate from. 2. Items and products, mapped to KRA item classifications. 3. Customers and suppliers, the business partners you trade with. 4. eTIMS codes and tax codes, synced so classification and tax come out right. ## 5. Test the whole flow Run a full transaction in development. [Create and sign an invoice](/docs/eTIMS/How-To-Guides/Create-an-eTIMS-Invoice), check that it comes back with a CU invoice number and a QR code, then confirm it shows up in eTIMS. ## 6. Go live Once your integration passes in development: 1. Switch to the production credentials and base URLs in the table above. 2. Deploy the VSCU. The Virtual Secure Computing Unit (VSCU) is the secure component that signs transactions and sends them to KRA. Slade360 automates the deployment, so you don't provision it by hand. One is set up per branch as part of going live. 3. Initialize each branch device so it can transact. You do this once per branch. 4. Run a smoke test in production: issue one live invoice and confirm it signs. > **Note:** You work through the exact go-live steps and the automated VSCU > deployment with the Slade360 team during onboarding. Confirm the production > checklist with your integration contact before you issue live invoices. ## Related - [Authentication API](/auth-api): the reference for generating tokens. - [eTIMS API Reference](/etims-api): every endpoint, each with a "Try it" button. --- ## /docs/eTIMS/Plugins/CargoWise/Invoice-Intake # CargoWise Invoice Intake # CargoWise plugin: invoice intake The invoice intake endpoint takes invoice documents out of a CargoWise logistics system and runs them through the eTIMS pipeline. The platform converts them to the VSCU format KRA requires, sends them for validation, and returns a stamped document to the system that sent them. ### What is CargoWise? CargoWise is a global logistics execution platform used for freight forwarding, customs brokerage, and supply chain management. For each invoice transaction it produces two independent XML documents: | Document | Role | |----------|------| | XUT | Invoice trigger, holding the shipment and invoice data (transaction XML) | | XUD | Invoice document, the document XML that accompanies the transaction | CargoWise transmits the two files separately and independently, and either one can arrive before the other. The intake API sorts out the ordering for you. --- ## Overview A CargoWise invoice submission runs like this: 1. CargoWise exports the XUT, the XUD, or both, for an invoice transaction. 2. Each document goes to the intake API as soon as it is available. 3. The platform checks the request (OAuth 2.0), stores the document, and holds it until the other half arrives. 4. Once both documents are in and paired, the job moves to `READY` and processing starts. 5. The platform converts the XUT data into VSCU format, the tax data structure KRA works with. 6. It sends the converted data to KRA for validation and signing. 7. KRA returns a signed response. The platform stamps the invoice and builds the final XUD output. 8. The stamped XUD goes back to the system that sent the documents. --- ## Document sequencing The XUT and the XUD are separate files that CargoWise sends independently, so either one can turn up first. What the API does next depends on which one it already has: | Scenario | Behaviour | Job Status | |----------|-----------|------------| | XUT arrives, XUD not yet received | Stored, waiting for its pair | `WAITING_FOR_XUD` | | XUD arrives, XUT not yet received | Stored, waiting for its pair | `WAITING_FOR_XUT` | | Second document arrives | Documents paired, processing starts | `READY` | | Both submitted in a single request | Paired straight away, processing starts | `READY` | > **Important:** out of order arrival is normal, but a document whose pair never follows at all is not. If a job sits in `WAITING_FOR_XUT` or `WAITING_FOR_XUD` for a long stretch, raise it with the team running the sending system. > > **Duplicate XUT submissions** > > CargoWise sometimes sends the same XUT more than once. The platform checks the invoice number on every submission so the same invoice is not processed twice. Give each transaction one invoice number and keep it the same on any resend. --- ## Invoice intake endpoint ### Endpoint details | Property | Value | |----------|-------| | Method | `POST` | | URL | `{{base_url}}/api/invoice/intake/` | | Base URL | `https://adapters.erp.release.slade360edi.com` | | Content-Type | `multipart/form-data` | | Authentication | Bearer Token (OAuth 2.0) | --- ### Headers | Header | Value | Required | Description | |--------|-------|----------|-------------| | `Authorization` | `Bearer ` | Yes | OAuth 2.0 Bearer token | | `Idempotency-Key` | `{{$guid}}` | Recommended | A fresh UUID per request, so a retry is not processed twice | > > **Idempotency keys** > > Send a fresh `Idempotency-Key` (a UUID v4 works) with every intake request. If a retry carries the same key, the server replays the original response instead of processing the document again. A dropped connection or a timeout then cannot turn into a second submission. --- ### Request body Send the body as `multipart/form-data` with these fields: | Field | Type | Required | Description | |-------|------|----------|-------------| | `xut` | File | Conditional | The XUT invoice trigger XML from CargoWise (shipment and invoice data) | | `xud` | File | Conditional | The XUD invoice document XML from CargoWise | | `source` | Text | Yes | Identifier for the originating system (e.g., `CARGOWISE`, `POSTMAN_TEST`) | > **Note:** send at least one of `xut` or `xud`. Both can go in the same request, or each can go on its own as it becomes available. #### Example file naming CargoWise-generated files follow the pattern: ``` UDM_TRX_XDC__ ``` For example: - `UDM_TRX_XDC_000000000001343490_0000000000001...` (XUT file) - `UDM_TRX_XDC_000000000001111911_0000000000001...` (XUD file) #### Example request with both documents ```bash curl --request POST \ --url https://adapters.erp.release.slade360edi.com/api/invoice/intake/ \ --header 'Authorization: Bearer ' \ --header 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \ --form 'xut=@/path/to/UDM_TRX_XDC_0000000000015826490.xml' \ --form 'xud=@/path/to/UDM_TRX_XDC_0000000000015826491.xml' \ --form 'source=CARGOWISE' ``` #### Example request with the XUT only, XUD to follow ```bash curl --request POST \ --url https://adapters.erp.release.slade360edi.com/api/invoice/intake/ \ --header 'Authorization: Bearer ' \ --header 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440001' \ --form 'xut=@/path/to/UDM_TRX_XDC_0000000000015826490.xml' \ --form 'source=CARGOWISE' ``` --- ### Responses #### 202 Accepted (document received) The API answers `202 Accepted` as soon as it has stored a document. Read the `status` field to see whether both documents are paired or the job is still waiting for its counterpart: ```json { "job_id": "31fdf049-1b29-40fa-be16-9dc5eb164d66", "correlation_id": "sha256:e6d792462237ec5f7d03e96b9b039b512546efdb95bb98d744007696014b5c5d", "status": "READY" } ``` | Field | Type | Description | |-------|------|-------------| | `job_id` | UUID | Unique identifier for this document pair's processing job. Use it to track progress. | | `correlation_id` | String | SHA-256 hash for tracing the request through the system. Include it when you contact support. | | `status` | String | Current state of the job. The status values are listed below. | #### Job status values | Status | Meaning | |--------|---------| | `WAITING_FOR_XUD` | XUT received and stored, waiting for the XUD document to arrive. | | `WAITING_FOR_XUT` | XUD received and stored, waiting for the XUT document to arrive. | | `READY` | Both documents received and paired, processing has started. | > > **Asynchronous processing** > > `202 Accepted` means the document arrived, not that the work is finished. A status of `READY` means both documents are paired and the pipeline has started. Use the `job_id` to follow progress until KRA submission is confirmed. --- #### 400 Bad Request (missing document) If neither `xut` nor `xud` is provided, the API returns: ```json { "non_field_errors": [ "Provide at least one of xut or xud." ] } ``` **Resolution:** include at least one of `xut` or `xud` in the request. --- #### Common error codes | Status Code | Error | Resolution | |-------------|-------|------------| | `400` | `Provide at least one of xut or xud.` | Include at least one file (`xut` or `xud`) in the request. | | `401` | Unauthorized | The Bearer token is invalid or has expired. Get a new one. | | `409` | Conflict (duplicate Idempotency-Key) | The key was already used, so the original response comes back. | | `422` | Unprocessable Entity | The file is malformed, or it does not match the expected XUT or XUD schema. | | `500` | Internal Server Error | Contact Slade360 support with your `correlation_id`. | --- --- ## /docs/eTIMS/Plugins/ERPNext/Getting-Started # ERPNext plugin: Kenya Compliance via Slade 360 [Kenya Compliance via Slade 360](https://github.com/navariltd/kenya-compliance-via-slade) is a [Frappe/ERPNext](https://frappeframework.com/) app that connects your ERPNext instance to the Kenya Revenue Authority (KRA) eTIMS platform. It goes through the Slade 360 Advantage middleware and the Virtual Sales Control Unit (VSCU). Once it is installed and configured, your team keeps working in ERPNext as usual and the app sends the transactions on to KRA. | Item | Value | |------|-------| | Source repository | [github.com/navariltd/kenya-compliance-via-slade](https://github.com/navariltd/kenya-compliance-via-slade) | | App name (bench) | `kenya_compliance_via_slade` | | Full guide (wiki) | [Complete Guide](https://github.com/navariltd/kenya-compliance-via-slade/wiki) | | Compliance pathway | ERPNext → Slade 360 Advantage → KRA eTIMS | --- ## How it works The app runs inside ERPNext and talks to the eTIMS servers. Data moves in one direction: ``` ERPNext → Kenya Compliance app → Slade 360 Advantage → KRA eTIMS ``` - You create business documents (invoices, items, customers, stock movements) in ERPNext as normal. - When a document is finalised, or on a schedule if you have set one, the app converts it to the VSCU format KRA expects and submits it. - KRA validates and signs the transaction. The app writes the returned SCU data back onto the ERPNext document, including the QR code on sales invoices. - Every request is logged in the Integration Request DocType, and failures land in the Error Log DocType, which is where you look when something breaks. ### What it handles | Area | What is synced | |------|----------------| | Sales invoices | Signed tax invoices + credit notes, with SCU data and QR codes | | Purchase invoices | Purchase submission and registered-purchase fetch from eTIMS | | Items | Item registration with KRA classification codes; opening stock balances | | Customers & Suppliers | Registration and updates, individually, in bulk, or automatically | | Stock | Stock Ledger Entries submitted via background jobs for real-time inventory | | BOMs | Bill of Materials submission | | Imports | Fetch and map imported-goods data from eTIMS | > Note: registration with KRA and VSCU provisioning both go through an approved third party. Get your credentials from [etims@savannahinformatics.com](mailto:etims@savannahinformatics.com) before you configure the app. --- ## Prerequisites Before installing, make sure you have: - A running ERPNext site (v14+) on a working [Frappe Bench](https://frappeframework.com/docs/user/en/installation), or a Frappe Cloud bench. - Administrator access to that site. - Your eTIMS and Slade 360 credentials, meaning Client Key, Client Secret, username, password, Branch ID, and Device Serial Number. These are issued during VSCU registration ([etims@savannahinformatics.com](mailto:etims@savannahinformatics.com)). - A Company already created in ERPNext with the correct KRA PIN. --- ## Installation Choose the path that matches your hosting setup. ### Option A: self-hosted (Frappe Bench) Run these commands in an active Bench terminal, from your `frappe-bench` directory. First, download the app into the bench: ```sh bench get-app https://github.com/navariltd/kenya-compliance-via-slade.git ``` Then install it onto your site: ```sh bench --site install-app kenya_compliance_via_slade ``` Finally, run the migrations and restart: ```sh bench --site migrate bench restart ``` > Replace `` with your actual site name (e.g. `erp.mycompany.co.ke`). To pull a specific branch or version, append `--branch ` to the `get-app` command. ### Option B: Frappe Cloud On [Frappe Cloud](https://frappecloud.com/docs/introduction) you do not run bench commands yourself. You add the app from the dashboard. 1. Open your Bench in the Frappe Cloud dashboard and go to the Apps tab. 2. Click Add App. 3. If the app appears in the marketplace search, select it. Otherwise choose Install from GitHub and point it at the repository: `https://github.com/navariltd/kenya-compliance-via-slade` 4. Add the app to the bench, wait for the build to finish, then install it on your site from the site's Apps tab. 5. Frappe Cloud runs the migration automatically after installation. --- ## Verifying the installation After the install, check that the app is on the site: ```sh bench --site list-apps ``` `kenya_compliance_via_slade` should appear in the list. In the ERPNext desk you will also see a new eTims workspace with shortcuts to the DocTypes you need. --- ## Post-install setup and configuration Configure the app from inside ERPNext. Everything lives in the eTims Settings (Environment Settings) DocType. 1. Create the eTims Settings record. Open eTims Settings → New, and fill in: - Branch ID and Device Serial Number, from your KRA VSCU registration. - Company, the ERPNext company this branch reports under. - Server URL and Auth Server URL, the eTIMS endpoints for your environment. - Client Secret, Client Key, Username and Password, from Slade 360 (Authentication Details tab). - The Sandbox checkbox: tick it for testing, untick it for production. - Is Active, to mark the record active. Only one active record is allowed per environment + company + branch combination. 2. Fetch all codes. Click Get Codes to pull the latest classification, tax, and reference codes from the eTIMS servers. 3. Sync organisation structures. Click Sync Organisation Units to synchronise your branches, company, departments, and workstations with the Slade server. 4. Submit modes of payment. Click Submit Mode of Payments to register your payment methods. 5. Submit customers and suppliers. From the Customer and Supplier list views, use Submit Customers and Submit Suppliers to register your business partners, one at a time or in bulk. 6. Classify and register items. From the Item list view, classify each item against the KRA codes and submit it to eTIMS. Items can also go automatically on create or update, once you enable that setting. The same settings document controls how often submissions run, and whether sales, purchases, and stock go automatically. --- ## Testing (self-hosted) Turn testing on for the site, then run the suite: ```sh bench --site set-config allow_tests true bench --site run-tests --app kenya_compliance_via_slade ``` --- ## Troubleshooting - If requests are not reaching KRA, check the Integration Request DocType for the outbound payload and the response, and the Error Log DocType for exceptions. - If a token has expired, you do not need to do anything. The access token regenerates on the next eTIMS request. - If background jobs are not running, check that the bench workers and the scheduler are up (`bench doctor`, `bench enable-scheduler`). --- ## Support - For registration and VSCU setup, email [etims@savannahinformatics.com](mailto:etims@savannahinformatics.com). --- ## /docs/eTIMS/References/Customers/Taxpayer-Status # Taxpayer Status The **taxpayer status code** (`taxprSttsCd`) tells you whether a taxpayer, the customer, is active. | Code | Name | Description | |------|------|-------------| | **A** | Active | Active. | | **D** | Inactive | Inactive. | *Source: KRA OSCU Specification v2.1 §4.2 (Code Classification 15, Taxpayer Status).* --- ## /docs/eTIMS/References/Imports/Import-Item-Status # Import Item Status The **import item status code** (`imptItemSttsCd`) says how far an imported item has got on its way from the customs declaration into your inventory. | Code | Status | |------|--------| | **1** | Unsent | | **2** | Waiting | | **3** | Approved | | **4** | Cancelled | *Source: KRA OSCU Specification v2.1 §4.16 (Code Classification 26, Import Item Status).* --- ## /docs/eTIMS/References/Item/Item-Classification # List KRA Item Classification KRA Item Classification is how the Kenya Revenue Authority (KRA) groups items by their tax treatment. The classification you give an item is what sets the tax rate it attracts, whether it is exempt, and what you have to report for it, and this differs across goods and services. > ### Why item classifications? > > Listing KRA item classifications from the Slade360 eTIMS APIs is how a business keeps its tax filings compliant and its records accurate. ### Classification levels The classification hierarchy uses four levels: | Level | Description | |-------|-------------| | 1 | Top-level category (e.g., VAT Act) | | 2 | Major grouping (e.g., Goods, Services) | | 3 | Sub-category (e.g., Exempt Goods, Zero Rated Goods) | | 4 | Specific item or tariff-level entry | ### Item classification codes | itemClsCd | itemClsNm | itemClsLvl | |-----------|-----------|------------| | 99000000 | VAT Act | 1 | | 99010000 | Goods | 2 | | 99011000 | Exempt Goods (Paragraph 1 - 99) | 3 | | 99011001 | Bovine Semen of tariff number 05111000 | 4 | | 99011002 | Fish eggs and roes of tariff number 0511990110 | 4 | | 99011003 | Animal semen other than of bovine of tariff number 0511999010 | 4 | | 99011004 | Soya beans whether or not broken of tariff numbers 12011000 and 12019000 | 4 | | 99011005 | Groundnuts not roasted or otherwise cooked In shell of tariff number 12024100 | 4 | | 99011006 | Groundnuts not roasted or otherwise cooked Shelled whether or not broken of tariff number 12024200 | 4 | | 99011007 | Copra of tariff number 12030000 | 4 | | 99011008 | Linseed whether or not broken of tariff number 12040000 | 4 | | 99011009 | Low erucic acid rape or colza seed of tariff number 12051000 | 4 | | 99011010 | Other rape or colza seed of tariff number 12059000 | 4 | | 99011011 | Sunflower seeds whether or not broken of tariff number 12060000 | 4 | | 99011012 | Cotton seeds whether or not broken Seed of tariff numbers 12072100 and 12072900 | 4 | | 99011013 | Sesamum seeds whether or not broken of tariff number 12074000 | 4 | | 99011014 | Mustard seeds whether or not broken of tariff number 12075000 | 4 | | 99011015 | Safflower seeds whether or not broken 12076000 | 4 | | 99011016 | Other oil seeds and oleaginous fruits whether or not broken of tariff number 12079900 | 4 | | 99011017 | Sugarcane of tariff number 1212990300; Unprocessed produce of plant species camellia sinensis | 4 | | 99011018 | Live animals of chapter 1 | 4 | | 99011019 | Meat and edible offals of chapter 2 excluding those of heading 0209 and 0210 | 4 | | 99011020 | Fish and crustaceans molluscs and other aquatic invertebrates of chapter 3 excluding those of tariff heading 0305 0306 and 0307 | 4 | | 99011021 | Unprocessed milk | 4 | | 99011022 | Fresh birds eggs in shell | 4 | | 99011023 | Edible Vegetables and certain roots and tubers of Chapter 7 excluding those of tariff heading 0711 | 4 | | 99011024 | Edible fruits and nuts peal of citrus fruits or melon of chapter 8 excluding those of tariff heading 0811 0812 0813 and 0814 | 4 | | 99011025 | Cereals of chapter 10 excluding seeds of tariff heading 1002 | 4 | | 99011032 | Syringes with or without needles of tariff no 90183100 | 4 | | 99011035 | Tubular metal needles and needles for sutures of tariff number 90183200 | 4 | | 99011036 | Catheters cannulae and the like of tariff number 90183900 | 4 | | 99011037 | Blood bags | 4 | | 99011038 | Blood and fluid infusion sets | 4 | | 99011039 | Materials articles and equipment including motor vehicles listed under the first schedule paragraph 39 of the VAT Act | 4 | | 99011040 | Madeup fishing nets of manmade textile material of tariff number 56081100 | 4 | | 99011041 | Mosquito nets of tariff No 6304990110 | 4 | | 99011043 | Materials waste residues and by products whether or not in the form of pellets and preparations of a kind used in animal feeding of tariff numbers as listed in Part 1 of the first schedule of VAT Act 2013 | 4 | | 99011044 | Unprocessed green tea | 4 | | 99011048 | Inputs or raw materials supplied to solar equipment manufacturers for manufacture of solar equipment or deep cycle sealed batteries which exclusively use or store solar power | 4 | | 99011049 | Aircraft parts of heading 8803 excluding parts of goods of heading 8801 | 4 | | 99011051 | Taxable goods imported or purchased for direct and exclusive use in the implementation of official aid funded projects upon approval by the Cabinet Secretary responsible for the National Treasury | 4 | | 99011054 | Goods imported or purchased locally for use by the local film producers and local filming agents upon recommendation by the Kenya Film Commission subject to approval by CS TNT | 4 | | 99011056 | Inputs or raw materials locally purchased or imported by manufacturers of agricultural machinery and implements upon approval by the Cabinet Secretary responsible for industrialization | 4 | | 99011057 | All goods including material supplies equipment machinery and motor vehicles for official use by the Kenya Defence Forces and the National Police Service | 4 | | 99011058 | Direction finding compasses instruments and appliances for aircraft | 4 | | 99011059 | Wheat seeds of tariff numbers 10011100 and 1001990100 | 4 | | 99011062 | Taxable goods for direct and exclusive use for the construction of tourism facilities recreational parks of fifty acres or more convention and conference facilities upon recommendation by the Cabinet Secretary responsible for matters relating to recreational parks | 4 | | 99011063 | Taxable goods equipment and apparatus for the direct and exclusive use for construction of specialized hospitals with a minimum bed capacity of fifty with accommodation facilities upon the recommendation by the Cabinet Secretary responsible for health | 4 | | 99011066 | Inputs or raw materials locally purchased or imported by manufacturers of clean cook stoves approved by the CS TNT upon recommendation by the CS responsible for energy | 4 | | 99011068 | Super absorbent polymer SAP of tariff number 39069000 | 4 | | 99011069 | Carrier tissue white 1 ply 14 point 5 GSM 47032100 | 4 | | 99011070 | IP super soft fluff pulp for fluff 310 treated pulp 488 times 125 mm cellose of tariff number 47032100 | 4 | | 99011071 | Perforated PE film 15 to 22 gsm of tariff number 3990219000 | 4 | | 99011072 | Spunbound nonwoven 15 to 25 gsm of tariff number 56031100 | 4 | | 99011073 | Airlid paper with super absorbent polymer 180gsm67 of tariff number 48030000 | 4 | | 99011074 | Airlid paper with super absorbent polymer 80gsm67 of tariff number 48030000 | 4 | | 99011077 | Pressure sensitive adhesive of tariff number 3506990100 | 4 | | 99011078 | Plain polythene film LPDE of tariff number 399021199010 | 4 | | 99011079 | Plain polythene film PE of tariff number 399021199010 | 4 | | 99011080 | PE white 25 to 40 gsm release paper of tariff number 48114900 | 4 | | 99011081 | ADL 25 to 40 gsm of tariff number 56031100 | 4 | | 99011082 | Elasticized side tape of tariff number 54024400 | 4 | | 99011083 | 12 to 16 gsm spunbound nonwoven coverstock 12gsm spunbound PP nonwoven SMS hydrophobic leg cuffs of tariff number 56031100 | 4 | | 99011084 | Polymetric elastic 2 over 3 strands of tariff number 3990199010 | 4 | | 99011089 | Any other aircraft spare parts imported by aircraft operators or persons engaged in the business of aircraft maintenance upon recommendation by the competent authority responsible for civil aviation | 4 | | 99011090 | Inputs for the manufacture of pesticides upon recommendation by the Cabinet Secretary for the time being responsible for matters relating to agriculture | 4 | | 99011091 | Locally assembled motor vehicles for transportation of tourists purchased before clearance through Customs following conditions as specified in the VAT Act 2013 1st Schedule Section A no9901 | 4 | | 99011095 | The supply of natural water excluding bottled water by a NG, CG or any political subdivision thereof or a person approved by the CS responsible for water development for domestic or for industrial use | 4 | | 99011096 | Articles of apparel clothing accessories and equipment specially designed for safety or protective purposes for use in registered hospitals and clinics or by CG or LA in firefighting | 4 | | 99011099 | Goods imported by passengers arriving from places outside Kenya as specified in the VAT Act 2013 First Schedule section A no 99 | 4 | | 99011100 | Exempt Goods (Paragraph 100 - 146) | 3 | | 99011101 | Alcoholic or non alcoholic beverages supplied to the Kenya Defence Forces Canteen Organization | 4 | | 99011103 | Hearing aids excluding parts and accessories of tariff Number 90214000 | 4 | | 99011105 | Locally manufactured motherboards | 4 | | 99011106 | Inputs for the manufacture of motherboards approved by the Cabinet Secretary responsible for information communication technology | 4 | | 99011107 | Plant machinery and equipment used in the construction of a plastics recycling plant | 4 | | 99011108 | The supply of maize corn flour cassava flour wheat or meslin flour and maize flour containing cassava flour by more than ten percent in weight | 4 | | 99011109 | Goods imported or purchased locally for the direct and exclusive use in the construction of houses under an affordable housing scheme approved by the CS on the recommendation of the CS responsible for matters relating to housing | 4 | | 99011110 | Musical instruments and other musical equipment imported or purchased locally for exclusive use by educational institutions upon recommendation by the Cabinet Secretary responsible for Education | 4 | | 99011111 | Maize corn seeds of tariff no 10051000 | 4 | | 99011112 | Taxable goods excl. motor vehicle imported or purchased for direct exclusive use in geothermal, oil, mining prospecting, exploration, product sharing as per the Energy Act 2019, Petroleum Act 2019, the Mining Act 2016 upon recommendation by the CS | 4 | | 99011113 | Specialized equipment for the development and generation of solar and wind energy upon recommendation to the commissioner by the cabinet secretary responsible for matters relating to energy | 4 | | 99011114 | Taxable goods supplied to persons that had a contract with the government prior to 25-04-2020 and contract provided for exemption from VAT provided that this exemption shall apply to the unexpired period of contract upon recommendation by CS Energy | 4 | | 99011115 | Medical ventilators and the inputs for the manufacture of medical ventilators upon recommendation by the cabinet secretary responsible for matters relating to health | 4 | | 99011116 | Physiotherapy accessories treadmills for cardiology therapy and treatment of tariff number 9506990100 for use by licensed hospitals upon approval by the cabinet secretary responsible for matters relating to health | 4 | | 99011117 | Dexpanthenol of tariff number 33049900 used for medical nappy rash treatment by licensed hospitals upon approval by the cabinet secretary responsible for matters relating to health | 4 | | 99011118 | Medicaments of tariff number 30034100 30034200 30034300 30034900 30036000 excluding goods of heading 3002 3005 or 3006 consisting of two or more constituents which have been mixed together for therapeutic or prophylactic uses | 4 | | 99011119 | Diagnostic or laboratory reagents of tariff number 38220000 on a backing prepared diagnostic or laboratory reagents whether or not on a backing other than those of heading 3002 or 3006 certified reference materials upon approval by CS Health | 4 | | 99011120 | Electrodiagnostic apparatus of tariff numbers 90181100 90181200 90181300 90181400 90181900 90182000 90189000 upon approval by the cabinet secretary responsible for matters relating to health | 4 | | 99011121 | Other instruments and appliances of tariff number 90184100 used in dental sciences dental drill engines whether or not combined on a single base with other dental equipment upon approval by CS Health | 4 | | 99011122 | Other instruments and appliances including surgical blades of tariff number 90184900 90185000 90189000 used in dental sciences dental drill engines whether or not combined on a single base with other dental equipment upon approval by CS Health | 4 | | 99011123 | Ozone therapy Oxygen therapy aerosol therapy artificial respiration or other therapeutic respiration apparatus upon approval by CS Health | 4 | | 99011124 | Other breathing appliances and gas masks excluding protective masks having neither mechanical parts nor replaceable filters upon approval by CS Health | 4 | | 99011125 | Artificial teeth and dental fittings of tariff number 90212100 90212900 and artificial parts of the body of tariff number 90213100 90213900 90215000 and 90219000 upon approval by CS Health | 4 | | 99011126 | Apparatus based on the use of x rays whether or not for medical surgical or dental of tariff numbers 90221200 90221300 90221400 and 90221900 upon approval by CS Health | 4 | | 99011127 | Apparatus based on the use of alpha beta or gamma radiations whether or not medical surgical or dental of tariff numbers 90222100 90222900 90223000 and 90229000 upon approval by CS Health | 4 | | 99011128 | Discs tape solid-state nonvolatile storage devices smart cards and other media for the recording of sound or of other phenomena whether or not recorded of tariff number 85238010 but excluding products of chapter 37 software upon approval by CS Health | 4 | | 99011129 | Weighing machinery excluding balances of a sensitivity of 5 cg or better of tariff number 84233100 including weight operated counting or checking machines weighing machine weights of all kinds upon approval by CS Health | 4 | | 99011130 | Fetal Doppler Pocket Wgd002 Pc and pulse oximeter finger held Gima band Pc of tariff number 90181900 upon approval by the cabinet secretary responsible for matters relating to health | 4 | | 99011131 | Sterilizer Dry Heat Wgd001Grx05A Pc autoclave steam tables tops of tariff number 8419902000 upon approval by the cabinet secretary responsible for matters relating to health | 4 | | 99011132 | Needle holders and urine bags of tariff heading 399026 | 4 | | 99011133 | Tourniquets of tariff number 3990269099 for use by licensed hospitals upon approval by the cabinet secretary responsible for matters relating to health | 4 | | 99011134 | Taxable supplies incl. fish feeding and handling water operations cold storage fish cages pond construction, maintenance, fish processing and handling imported or purchased for direct exclusive use on the recommendation of the relevant State Dept | 4 | | 99011135 | Pre fabricated biogas digesters | 4 | | 99011136 | Biogas | 4 | | 99011137 | Sustainable fuel briquettes and pellets for household and commercial use | 4 | | 99011138 | The supply of denatured ethanol of tariff number 22072000 | 4 | | 99011139 | Tractors other than road tractors for semitrailers | 4 | | 99011140 | Plant and machinery of chapter 84 and 85 imported by manufacturers of pharmaceutical products or investors in the manufacture of pharmaceutical products upon the recommendation of CS Health | 4 | | 99011141 | Medical oxygen supplied to registered hospitals | 4 | | 99011142 | Urine bags adult diapers artificial breasts colostomy or ileostomy bags for medical use | 4 | | 99011143 | Inputs and raw materials used in the manufacture of passenger motor vehicle | 4 | | 99011144 | Locally manufactured passenger motor vehicles: vehicles for the transportation of passengers whose ex-factory value comprises at least 30 percent of parts designed and manufactured in Kenya by an original equipment manufacturer operating in Kenya | 4 | | 99011145 | Taxable goods inputs and raw materials imported or locally purchased by company under SOFA manufacturing human vaccines with a capital investment of at least 10Bn shillings subject to approval of CS TNT upon recommendation of CS Health | 4 | | 99011146 | Such capital goods the exemption of which the Cabinet Secretary may determine to promote investment in the manufacturing sector provided that the value of such investment is not less than two billion shillings | 4 | | 99012000 | Zero Rated Goods - D2 | 3 | | 99012003 | Shipstores supplied to international sea or air carriers on international voyage or flight | 4 | | 99012004 | The supply of coffee and tea for export to coffee or tea auction centers | 4 | | 99012005 | Transportation of passengers by air carriers on international flight | 4 | | 99012009 | Goods purchased from duty free shops by passengers departing to places outside Kenya | 4 | | 99012011 | Inputs or raw materials either produced locally or imported supplied to pharmaceutical manufacturers in Kenya for manufacturing medicaments as approved from time to time by the Cabinet Secretary in consultation with CS Health | 4 | | 99012013 | The supply of ordinary bread | 4 | | 99012015 | Milk and cream not concentrated nor containing added sugar or other sweetening matter of tariff numbers 04011000 04012000 04014000 04015000 | 4 | | 99012016 | All inputs and raw materials whether produced locally or imported supplied to manufacturers of agricultural pest control products upon recommendation by CS Agriculture | 4 | | 99012019 | Agricultural pest control products | 4 | | 99012022 | The supply of maize corn flour cassava flour wheat or meslin flour and maize flour containing cassava flour by more than ten percent in weight | 4 | | 99012024 | The Fertilizers of chapter 31 | 4 | | 99012025 | Inputs of raw materials locally purchased or imported by manufacturers of fertilizer as approved from time to time by the Cabinet Secretary responsible for Agriculture | 4 | | 99013000 | Other Rate Goods (8%) | 3 | | 99013001 | Petroleum Products | 4 | | 99020000 | Services | 2 | | 99021000 | Exempt Service | 3 | | 99021001 | Financial Services | 4 | | 99021002 | Insurance and reinsurance services | 4 | | 99021003 | Education services | 4 | | 99021004 | Medical veterinary dental Ambulance and nursing services | 4 | | 99021005 | Agricultural animal husbandry and horticultural services | 4 | | 99021006 | Burial and cremation services | 4 | | 99021007 | Transportation of passengers by any means of conveyance excluding international air transport or where the means of conveyance is hired or chartered | 4 | | 10121600 | Bird and fowl food | 3 | | 10131600 | Animal containment | 3 | | 10151600 | Cereal seeds | 3 | | 10171600 | Chemical fertilizers and plant nutrients | 3 | | 11111600 | Stone | 3 | | 11121600 | Wood | 3 | | 11131600 | Other animal products | 3 | | 11141600 | Non metallic waste and scrap | 3 | | 11151600 | Threads | 3 | | 11161500 | Silk fabrics | 3 | | 11161600 | Wool fabrics | 3 | | 11171600 | Stainless steel alloys | 3 | | 12131600 | Pyrotechnics | 3 | | 12141600 | Rare earth metals | 3 | | 12171600 | Pigments | 3 | | 12181600 | Oils | 3 | | 13101600 | Processed and synthetic rubber | 3 | | 14111600 | Novelty paper | 3 | | 14121600 | Tissue papers | 3 | | 15101600 | Solid and gel fuels | 3 | | 15131600 | Fission fuel assemblies | 3 | | 20111600 | Drilling and operation machinery | 3 | | 20121600 | Drilling bits | 3 | | 21101600 | Agricultural machinery for planting and seeding | 3 | | 21111600 | Aquaculture equipment | 3 | | 22101600 | Paving equipment | 3 | | 23121600 | Textile working machinery and equipment and accessories | 3 | | 23131600 | Faceting equipment and accessories | 3 | | 23141600 | Leather preparing machinery and accessories | 3 | | 23151600 | Cement and ceramics and glass industry machinery and equipment and supplies | 3 | | 23161600 | Foundry supplies | 3 | | 23181600 | Food cutting machinery | 3 | | 24101600 | Lifting equipment and accessories | 3 | | 24131600 | Industrial freezers | 3 | | 24141600 | Cushioning supplies | 3 | | 25101600 | Product and material transport vehicles | 3 | | 25111600 | Safety and rescue water craft | 3 | | 25131600 | Civilian and commercial rotary wing aircraft | 3 | | 25171600 | Defrosting and defogging systems | 3 | | 25181600 | Automotive chassis | 3 | | 25191600 | Space transportation support systems and equipment | 3 | | 26111600 | Power generators | 3 | | 26121600 | Electrical cable and accessories | 3 | | 26131600 | Exhaust structures or screening equipment | 3 | | 26141600 | Subcritical assembly equipment | 3 | | 27111600 | Forming tools | 3 | | 30111600 | Cement and lime | 3 | | 30121600 | Asphalts | 3 | | 30131600 | Bricks | 3 | | 30151600 | Roofing accessories | 3 | | 30161600 | Ceiling materials | 3 | | 30171600 | Windows | 3 | | 30181600 | Non sanitary residential fixtures | 3 | | 30191600 | Ladders and scaffolding accessories | 3 | | 31151600 | Chains | 3 | | 31161500 | Screws | 3 | | 31161600 | Bolts | 3 | | 31171600 | Bushings | 3 | | 31191600 | Abrasive wheels | 3 | | 31201600 | Adhesives | 3 | | 31211600 | Paint additives | 3 | | 32101600 | Integrated circuits | 3 | | 39101600 | Lamps and lightbulbs | 3 | | 39111600 | Exterior lighting fixtures and accessories | 3 | | 39121600 | Circuit protection devices and accessories | 3 | | 39131600 | Wire protection devices | 3 | | 40141600 | Valves | 3 | | 40151600 | Compressors | 3 | | 40161600 | Purification | 3 | | 41111600 | Length and thickness and distance measuring instruments | 3 | | 41121600 | Pipette tips | 3 | | 41151600 | Clinical laboratory instruments | 3 | | 41171600 | Microbiology devices | 3 | | 42121600 | Veterinary products | 3 | | 42131600 | Medical staff clothing and related articles | 3 | | 42141600 | Basins and bedpans and urinals and admission kits | 3 | | 42151600 | Dental and subspecialty instruments and devices | 3 | | 42161600 | Extracorporeal hemodialysis equipment and supplies | 3 | | 42171600 | Mobile medical services extricating and immobilizing and transporting products | 3 | | 42181600 | Blood pressure units and related products | 3 | | 42191600 | Medical facility building systems | 3 | | 42201600 | Medical magnetic resonance imaging MRI products | 3 | | 42211600 | Bathroom and bathing aids for the physically challenged | 3 | | 43191600 | Personal communications device accessories or parts | 3 | | 43201600 | Chassis components | 3 | | 44101600 | Paper processing machines and accessories | 3 | | 44111600 | Cash handling supplies | 3 | | 44121600 | Desk supplies | 3 | | 45101600 | Printing machinery accessories | 3 | | 45111600 | Projectors and supplies | 3 | | 45121600 | Camera accessories | 3 | | 45131600 | Moving picture media | 3 | | 45141600 | Darkroom supplies | 3 | | 46101600 | Ammunition | 3 | | 46151600 | Security and control equipment | 3 | | 46161600 | Water safety | 3 | | 46171600 | Surveillance and detection equipment | 3 | | 46181600 | Safety footwear | 3 | | 46191600 | Fire fighting equipment | 3 | | 47101600 | Water treatment consumables | 3 | | 47111600 | Ironing equipment | 3 | | 47121600 | Floor machines and accessories | 3 | | 47131600 | Brooms and mops and brushes and accessories | 3 | | 48101600 | Food preparation equipment | 3 | | 49101600 | Collectibles | 3 | | 49121600 | Camping furniture | 3 | | 49161600 | Racquet and court sports equipment | 3 | | 49171600 | Boxing equipment | 3 | | 49201600 | Weight and resistance training equipment | 3 | | 50131600 | Eggs and egg substitutes | 3 | | 50151600 | Edible animal oils and fats | 3 | | 51101600 | Amebicides and Trichomonacides and Antiprotozoals | 3 | | 51111600 | Antimetabolites | 3 | | 51131600 | Anticoagulants | 3 | | 51151600 | Cholinergic blocking agents | 3 | | 51171600 | Laxatives | 3 | | 51181600 | Thyroid and antithyroid drugs | 3 | | 51191600 | Electrolytes | 3 | | 51201600 | Vaccines and antigens and toxoids | 3 | | 52121600 | Table and kitchen linen and accessories | 3 | | 52131600 | Blinds and shades | 3 | | 52141600 | Domestic laundry appliances and supplies | 3 | | 52151600 | Domestic kitchen tools and utensils | 3 | | 52161600 | Audio visual equipment accessories | 3 | | 53101600 | Shirts and blouses | 3 | | 53111600 | Shoes | 3 | | 53121600 | Purses and handbags and bags | 3 | | 53131600 | Bath and body | 3 | | 53141600 | Miscellaneous sewing supplies | 3 | | 54111600 | Clocks | 3 | | 55121600 | Labels | 3 | | 56101600 | Outdoor furniture | 3 | | 56111600 | Panel systems | 3 | | 60121600 | Studio aids | 3 | | 60131600 | Musical instrument sets | 3 | | 70111600 | Flowering plants | 3 | | 70121600 | Livestock industry | 3 | | 70131600 | Land and soil preparation | 3 | | 70141600 | Crop protection | 3 | | 70151600 | Forestry industry | 3 | | 70161600 | Flora | 3 | | 70171600 | Water quality management services | 3 | | 71161600 | Other oilfield support services | 3 | | 72141600 | Mass transit system construction services | 3 | | 72151600 | Specialized communication system services | 3 | | 73101600 | Chemicals and fertilizers production | 3 | | 73131600 | Meat and poultry and seafood processing | 3 | | 73141600 | Thread and yarn processing | 3 | | 73151600 | Packaging services | 3 | | 73161600 | Manufacture of transport equipment | 3 | | 73171600 | Manufacture of precision instruments | 3 | | 76101600 | Hazardous material decontamination | 3 | | 76111600 | Building component cleaning services | 3 | | 76121600 | Nonhazardous waste disposal | 3 | | 76131600 | Toxic spill cleanup | 3 | | 77101600 | Environmental planning | 3 | | 77111600 | Environmental rehabilitation | 3 | | 77121600 | Soil pollution | 3 | | 77131600 | Noise pollution | 3 | | 78101600 | Rail cargo transport | 3 | | 78111600 | Passenger railway transportation | 3 | | 78121600 | Material handling services | 3 | | 78131600 | General goods storage | 3 | | 78141600 | Inspection | 3 | | 78181600 | Panel and paint services | 3 | | 80111600 | Temporary personnel services | 3 | | 80121600 | Business law services | 3 | | 80131600 | Sale of property and building | 3 | | 80141600 | Sales and business promotion activities | 3 | | 80151600 | International trade services | 3 | | 80161500 | Management support services | 3 | | 80161600 | Business facilities oversight | 3 | | 80171600 | Publicity and marketing support services | 3 | | 81101600 | Mechanical engineering | 3 | | 81111600 | Computer programmers | 3 | | 81121600 | Monetary systems and issues | 3 | | 81141600 | Supply chain management | 3 | | 81151600 | Cartography | 3 | | 81161600 | Electronic mail and messaging services | 3 | | 81171600 | Ecological science services | 3 | | 82101600 | Broadcast advertising | 3 | | 82111600 | Non technical writing | 3 | | 82121600 | Engraving | 3 | | 82131600 | Photographers and cinematographers | 3 | | 82141600 | Graphic display services | 3 | | 83101600 | Oil and gas utilities | 3 | | 83111600 | Mobile communications services | 3 | | 83121600 | Information centers | 3 | | 84101600 | Aid financing | 3 | | 84111600 | Audit services | 3 | | 84121600 | Funds transfer and clearance and exchange services | 3 | | 84131600 | Life and health and accident insurance | 3 | | 84141600 | Personal credit agencies | 3 | | 85101600 | Healthcare provider support persons | 3 | | 85111600 | Non contagious disease prevention and control | 3 | | 85121600 | Medical doctor specialist services | 3 | | 85131600 | Medical ethics | 3 | | 85141600 | Herbal treatments | 3 | | 85151600 | Nutrition issues | 3 | | 85171600 | Hospice care | 3 | | 86101600 | Scientific vocational training services | 3 | | 86111600 | Adult education | 3 | | 86121600 | Junior colleges | 3 | | 86131600 | Music and drama | 3 | | 86141600 | Students organizations | 3 | | 90111600 | Meeting facilities | 3 | | 90121600 | Travel document assistance | 3 | | 91111600 | Household assistance and care | 3 | | 92101600 | Fire services | 3 | | 92111600 | Disarmament | 3 | | 92121600 | Detective services | 3 | | 93101600 | Political officials | 3 | | 93111600 | Political representation and participation | 3 | | 93121600 | International relations and cooperation | 3 | | 93131600 | Food and nutrition policy planning and programs | 3 | | 93141600 | Population | 3 | | 93151600 | Public finance | 3 | | 93161600 | Taxes other than income tax | 3 | | 93171600 | International trade | 3 | | 94131600 | Charity organizations | 3 | | 95101600 | Commercial land parcels | 3 | | 95111600 | Open traffic thoroughfares | 3 | | 95121600 | Transport buildings and structures | 3 | | 95131600 | Portable commercial and industrial buildings and structures | 3 | | 95141600 | Prefabricated residential buildings and structures | 3 | --- ## /docs/eTIMS/References/Item/Item-Code-Structure # Item Code Structure Every item needs an `itemCd`, and no two items can share one. The code is four classification codes followed by an incrementing sequence. ## Example ``` KE 2 NT BA 0000012 ``` | Segment | Value | Meaning | |---------|-------|---------| | `KE` | Country of origin | ISO 3166-1 alpha-2, so Kenya is `KE` | | `2` | Product type | Finished Product, see [Product Types](/docs/eTIMS/References/Item/Product-Types) | | `NT` | Packaging unit | NET, see [Packaging Units](/docs/eTIMS/References/Item/Packaging-Units) | | `BA` | Quantity unit | Barrel, see [Quantity Units](/docs/eTIMS/References/Item/Quantity-Units) | | `0000012` | Sequence | Increments from `0000001` to N | So `KE2NTBA0000012` is the 12th finished product, of Kenyan origin, packaged in a net and measured in barrels. --- ## /docs/eTIMS/References/Item/Packaging-Units # Packaging Units The **packaging unit code** (`pkgUnitCd`) says how an item is packaged. It is also part of the [item code](/docs/eTIMS/References/Item/Item-Code-Structure). | Code | Name | |------|------| | AM | Ampoule | | BA | Barrel | | BC | Bottlecrate | | BE | Bundle | | BF | Balloon, non-protected | | BG | Bag | | BJ | Bucket | | BK | Basket | | BL | Bale | | BQ | Bottle, protected cylindrical | | BR | Bar | | BV | Bottle, bulbous | | BZ | Bag | | CA | Can | | CH | Chest | | CJ | Coffin | | CL | Coil | | CR | Wooden Box, Wooden Case | | CS | Cassette | | CT | Carton | | CTN | Container | | CY | Cylinder | | DR | Drum | | GT | Extra Countable Item | | HH | Hand Baggage | | IZ | Ingots | | JR | Jar | | JU | Jug | | JY | Jerry CAN Cylindrical | | KZ | Canester | | LZ | Logs, in bundle/bunch/truss | | NT | Net | | OU | Non-Exterior Packaging Unit | | PD | Poddon | | PG | Plate | | PI | Pipe | | PO | Pilot | | PU | Traypack | | RL | Reel | | RO | Roll | | RZ | Rods, in bundle/bunch/truss | | SK | Skeletoncase | | TY | Tank, cylindrical | | VG | Bulk, gas (at 1031 mbar 15 °C) | | VL | Bulk, liquid (at normal temperature/pressure) | | VO | Bulk, solid, large particles ("nodules") | | VQ | Bulk, gas (liquefied at abnormal temperature/pressure) | | VR | Bulk, solid, granular particles ("grains") | | VT | Extra Bulk Item | | VY | Bulk, fine particles ("powder") | | ML | Mills (cigarette) | | TN | TAN (1 TAN refers to 20 bags) | --- ## /docs/eTIMS/References/Item/Product-Types # Product Types The **product type code** (`itemTyCd`) says whether an item is a raw material, a finished product or a service. It is also the second character of the [item code](/docs/eTIMS/References/Item/Item-Code-Structure). | Code | Name | Description | |------|------|-------------| | 1 | Raw Material | Goes into making something else. | | 2 | Finished Product | Sold as it is. | | 3 | Service | Sold without stock. | --- ## /docs/eTIMS/References/Item/Quantity-Units # Quantity Units The **quantity unit code** (`qtyUnitCd`) is the unit an item's quantity is measured in. It is also part of the [item code](/docs/eTIMS/References/Item/Item-Code-Structure). | Code | Name | |------|------| | 4B | Pair | | AV | Cap | | BA | Barrel | | BE | Bundle | | BG | Bag | | BL | Block | | BLL | Barrel (petroleum) (158.987 dm³) | | BX | Box | | CA | Can | | CEL | Cell | | CMT | Centimetre | | CR | Carat | | DR | Drum | | DZ | Dozen | | GLL | Gallon | | GRM | Gram | | GRO | Gross | | KG | Kilo-Gramme | | KTM | Kilometre | | KWT | Kilowatt | | L | Litre | | LBR | Pound | | LK | Link | | LTR | Litre | | M | Metre | | M2 | Square Metre | | M3 | Cubic Metre | | MGM | Milligram | | MTR | Metre | | MWT | Megawatt hour (1000 kW.h) | | NO | Number | | NX | Part per thousand | | PA | Packet | | PG | Plate | | PR | Pair | | RL | Reel | | RO | Roll | | SET | Set | | ST | Sheet | | TNE | Tonne (metric ton) | | TU | Tube | | U | Pieces/item [Number] | | YRD | Yard | --- ## /docs/eTIMS/References/Purchases/Purchase-Receipt-Types # Purchase Receipt Types The **purchase receipt type code** tells you whether a purchase document is a plain purchase or a credit note raised against one. | Code | Name | Description | |------|------|-------------| | **P** | Purchase | Purchase. | | **R** | Credit Note after Purchase | Credit note issued after a purchase. | --- ## /docs/eTIMS/References/Purchases/Registration-Types # Registration Types The **registration type code** (`regTyCd`) says whether the system created a record on its own or a person keyed it in. | Code | Name | Description | |------|------|-------------| | A | Automatic | The system created the record. | | M | Manual | A person keyed the record in. | --- ## /docs/eTIMS/References/Sales/Credit-Note-Reasons # Credit Note Reasons The **credit note reason code** (`rfdRsnCd`) tells you why a credit note was issued. | Code | Reason | |------|--------| | **01** | Missing Quantity | | **02** | Missing data | | **03** | Damaged | | **04** | Wasted | | **05** | Raw Material Shortage | | **06** | Refund | --- ## /docs/eTIMS/References/Sales/Credit-Note-Rules # Credit Note Rules A credit note reverses all or part of an invoice that has already been signed. KRA checks every credit note against the original invoice and rejects any that breaks one of the rules below. ## Rules | Rule | What it means | |------|---------------| | The original invoice number must be valid | The invoice you credit has to exist already and have been processed, and its number has to appear on the credit note. | | A partial credit note must not exceed the original invoice amount | Any credit note you issue after the first one still has to stay within the amount of the original invoice. | | A full credit note must not exceed the original invoice amount | The amount on the credit note cannot be higher than the amount on the original invoice. | | The original invoice must be less than 6 months old | You have 6 months from the date the original invoice was issued to raise a credit note against it. | | Only one partial credit note per invoice | A trader gets one partial credit note per invoice. Any credit note after that has to be a full credit note. | ## Types of credit notes ### Full credit note You issue a full credit note when the whole amount on the original invoice goes back to the buyer. For example: - You sold services and products to a patient and the payer rejected the full claim. - You sold products and the buyer returned all of them. ### Partial credit note A partial credit note credits back only part of the original invoice. Three situations call for one. #### Quantity changes The buyer returns some of the goods sold, say because they arrived damaged. The seller edits the quantity on the credit note, and the credited amount is the returned quantity multiplied by the unit price. > You sold a buyer 30 bottles at KSh 100 each, a total of KSh 3,000. The buyer > later found 10 of them damaged and returned them. The credit note carries the > 10 returned bottles, so the credited amount is 10 × KSh 100 = **KSh 1,000**, > and that is what you return to the buyer. #### Price changes The buyer was overcharged for an item. The seller edits the unit price of that item on the credit note, and the credited amount is the quantity times the new unit price. > As a provider you invoiced a patient belonging to Jubilee a total of > KSh 20,000, of which KSh 5,000 was copay that you did not collect. The payer > paid the claim minus the copay, sending only KSh 15,000. You send a credit > note of **KSh 5,000** to eTIMS to show that part of the cost was not paid. #### Removed items A buyer who bought several items wants to return one of them in full, perhaps because they no longer want it. That whole item is credited. > You sold a buyer 30 bottles, 20 boxes, and 15 laptops at KSh 20,000 each. The > buyer wants to return the laptops because they no longer have the money. The > credit note carries the laptop quantity times its unit price, so the credited > amount is 15 × KSh 20,000 = **KSh 300,000**, and that is what you return to > the buyer. ## See also - [Credit Note Reasons](/docs/eTIMS/References/Sales/Credit-Note-Reasons) for the `rfdRsnCd` codes you set on a credit note. - [Transaction Progress](/docs/eTIMS/References/Sales/Transaction-Progress), since an invoice moves to `05` (Credit Note Generated) once a credit note is raised against it. --- ## /docs/eTIMS/References/Sales/Payment-Methods # Payment Methods The **payment method code** (`pmtTyCd`) says how the customer paid. | Code | Name | Description | |------|------|-------------| | 01 | Cash | Notes and coins. | | 02 | Credit | Paid later, on account. | | 03 | Cash/Credit | Part paid now, the rest on account. | | 04 | Bank Check | Paid by bank cheque. | | 05 | Debit & Credit Card | Paid by card, debit or credit. | | 06 | Mobile Money | Paid through a mobile money service. | | 07 | Other | Anything the codes above do not cover. | --- ## /docs/eTIMS/References/Sales/Sales-Receipt-Types # Sales Receipt Types The **sales receipt type code** (`rcptTyCd`) says whether a sales document is a plain sale or a credit note raised against one. | Code | Name | Description | |------|------|-------------| | S | Sale | An ordinary sale. | | R | Credit Note after Sale | A credit note raised after a sale. | --- ## /docs/eTIMS/References/Sales/Transaction-Progress # Transaction Progress The **transaction progress code** (`salesSttsCd` / `pchsSttsCd`) tells you how far a sale or purchase has got. | Code | Name | Description | |------|------|-------------| | 01 | Wait for Approval | The document is sitting with an approver. | | 02 | Approved | An approver has signed it off. | | 03 | Cancel Requested | Someone has asked for it to be cancelled. | | 04 | Canceled | The cancellation went through. | | 05 | Credit Note Generated | A credit note has been raised against it. | | 06 | Transferred | The document has been transferred on. | --- ## /docs/eTIMS/References/Sales/Transaction-Types # Transaction Types The **transaction type code** says what kind of record a transaction is. The same four codes cover both sales and purchases. | Code | Name | Description | |------|------|-------------| | C | Copy | A copy of a transaction already recorded. | | N | Normal | An ordinary sale or purchase, the everyday case. | | P | Proforma | A proforma invoice, not a final one. | | T | Training | A record made while training, not a real transaction. | --- ## /docs/eTIMS/References/Stock/Stock-Movement-Types # Stock Movement Types The **stock movement type code** (`sarTyCd`) says why stock moved. Codes `01` to `06` are incoming, so stock in. Codes `11` to `16` are outgoing, so stock out. | Code | Name | Direction | Description | |------|------|-----------|-------------| | 01 | Import | Incoming | Stock in from an import. | | 02 | Purchase | Incoming | Stock in from a purchase. | | 03 | Return | Incoming | Stock in from a return. | | 04 | Stock Movement | Incoming | Stock in from a stock movement. | | 05 | Processing | Incoming | Stock in from processing. | | 06 | Adjustment | Incoming | Stock in from an adjustment. | | 11 | Sale | Outgoing | Stock out on a sale. | | 12 | Return | Outgoing | Stock out on a return. | | 13 | Stock Movement | Outgoing | Stock out on a stock movement. | | 14 | Processing | Outgoing | Stock out for processing. | | 15 | Discarding | Outgoing | Stock out because the goods were discarded. | | 16 | Adjustment | Outgoing | Stock out on an adjustment. | --- ## /docs/eTIMS/References/Taxes/Tax-Types # Tax Types Every item and invoice line carries a **tax type code** (`taxTyCd`) that sets how VAT is treated. KRA eTIMS uses five of them. | Code | Name | Rate | Meaning | |------|------|------|---------| | A | A-Exempt | None | An exempt supply, so no VAT is charged. | | B | B-16.00% | 16% | The standard VAT rate. | | C | C-0% | 0% | A zero-rated supply. | | D | D-Non-VAT | None | Sits outside the scope of VAT. | | E | E-Other Rate | 13% / 8% | Some other rate. See the note below. | > Code E carries two rates: > - 13%, in force from 15 April 2026 to 14 July 2026. > - 8%, in force up to 1 July 2023. When you record a sale, each line reports its `taxblAmt` (taxable amount) and `taxAmt` (tax amount) under one tax type, A to E, and the invoice totals them per type. --- ## /docs/Slade-Advantage/Getting-Started # Getting Started # Getting started with the Slade Advantage API These pages are the documentation for the Slade Advantage API, and cover what you need to integrate with it. ## Overview The Slade Advantage API is a set of tools healthcare providers and payers use to run their operations. ## API reference The [API Reference](/advantage-api) lists the endpoints you can call. --- ## /docs/Slade-Advantage/How-To-Guides/Mpesa-Paybill-Till-Setup # M-Pesa Paybill / Till Setup To accept M-Pesa payments through Slade Advantage, you need an active Safaricom Paybill or Till (Buy Goods) shortcode and Daraja API credentials from the Safaricom Developer Portal. If you already have a Paybill or Till shortcode, skip to [Step 2: Get your Daraja API credentials](#step-2-get-your-daraja-api-credentials). --- ## Step 1: Apply for a Paybill or Till ### Documents required Have all of these ready before you apply, and note that every document must be stamped. 1. Paybill Application Form (or Till Application Form) 2. Tariff Guide 3. Account Opening Form 4. Admin Account Creation Form 5. Administrator Letter 6. Bank letter or cancelled cheque (must be signed or stamped by your bank) 7. KRA PIN Certificate 8. Copy of ID or Passport of the business owner / authorized signatory ### Application methods **Option A: M-PESA Business Portal (recommended)** 1. Go to the [M-PESA Business Portal](https://business.safaricom.co.ke) and create or log in to your account. 2. Open the application section for Paybill or Till. 3. Upload all required documents as PDFs. 4. Submit the application. Safaricom usually processes an application within 72 hours. **Option B: email** 1. Compile all required documents into a single PDF. 2. Send the email to M-PESABusiness@safaricom.co.ke with a CC to paybill@safaricom.co.ke. 3. Use the subject line: `Paybill Application` or `Till Application`. 4. Include your business contact details in the email body. Once the application is approved, Safaricom issues you a shortcode, for example `123456`. Keep it somewhere safe, because you need it when you configure Slade Advantage. --- ## Step 2: Get your Daraja API credentials The credentials live on the Safaricom Developer Portal, and you can set them up as soon as the shortcode has been issued. ### 2.1 Create a developer account 1. Go to [https://developer.safaricom.co.ke](https://developer.safaricom.co.ke). 2. Register for a developer account using your business email address. 3. Verify your email and log in. ### 2.2 Create an app 1. In the portal, navigate to **My Apps** and click **Create App**. 2. Give the app a descriptive name (e.g., `Slade Advantage Production`). 3. Enable the APIs your integration requires: - **M-Pesa Express (STK Push)** starts the payment prompt. - **C2B** receives payments on your Paybill or Till. - **B2C**, which is optional, sends money out. ### 2.3 Retrieve OAuth credentials From the app details page, copy both of these and store them somewhere safe: | Credential | Description | |---|---| | **Consumer Key** | Your client ID for OAuth 2.0 authentication | | **Consumer Secret** | Your client secret. Treat it like a password | ### 2.4 Retrieve your PassKey - For sandbox, the PassKey sits in the portal under your test app credentials. - For production, Safaricom emails you the PassKey once it approves your Paybill or Till application. ### 2.5 Generate a security credential (B2C / B2B only) If your integration handles B2C or B2B transactions: 1. In **My Apps**, open the dropdown for your app and select **Test Credentials**. 2. Use the portal to generate an encrypted security credential. 3. For production, encrypt your M-Pesa API Initiator password with Safaricom's public certificate. --- ## Credentials summary By the end of both steps you should have: | Credential | Where to find it | |---|---| | **Shortcode** | Issued by Safaricom after Paybill/Till approval | | **Consumer Key** | Safaricom Developer Portal → My Apps | | **Consumer Secret** | Safaricom Developer Portal → My Apps | | **PassKey** | Portal (sandbox) / Email from Safaricom (production) | | **Security Credential** | Generated in the portal (B2C/B2B only) | --- If something goes wrong with the application or with the credentials, Safaricom support is at M-PESABusiness@safaricom.co.ke. --- **Additional references:** - [Safaricom Daraja Developer Portal](https://developer.safaricom.co.ke) --- ## /introduction # Slade360° Advantage for integrators Advantage is what a hospital system connects to in order to get paid. It resolves the patient standing at the desk to an identity the health system agrees on, tells you what their cover actually pays for, takes the consent that makes the claim defensible, prices what was done, and follows the money until it lands in the facility's account. There is a second, separate path for raising KRA-compliant tax invoices through eTIMS. Written in plain markdown on purpose. Every page on this site has a markdown twin at the same path with `.md` appended, and the index of all of them is at [`/llms.txt`](/llms.txt). ## The two paths **The rail** is the clinical and claims path: ten stops from Authenticate to Reconcile. The stops are a dependency chain, not a menu — each one uses identifiers the stop before it returned, so reading or implementing them out of order does not work. Start at [the rail, end to end](/rail/concepts/The-Eight-Steps). **The eTIMS branch** is tax invoicing. It shares only authentication with the rail: no patient, no cover, no consent. If you arrived here to raise an invoice, go straight to [Getting started with eTIMS](/docs/eTIMS/Getting-Started) and ignore the rail entirely. There are prebuilt paths for [ERPNext](/docs/eTIMS/Plugins/ERPNext/Getting-Started) and [CargoWise](/docs/eTIMS/Plugins/CargoWise/Invoice-Intake) if you are on either. Neither path is callable until a provider account exists and has been activated. That is a funnel a human walks, not an API call — see [onboarding onto Advantage](/rail/concepts/Onboarding). ## What every call needs Two things, and confusing them is the commonest way an integration goes wrong. **A bearer token.** Exchange your client id and secret at the Authentication service for an access token, cache it, and refresh it before it expires. The token is your identity as the vendor. It does not change when a user switches facility, patient or day. **The facility context.** Every v2 call on the rail carries the pair `X-Facility-Id` and `X-Facility-Id-Type`, where the type is one of `mfl`, `license-number`, `fr-code`, `registration-number` or `fid`. The token says who you are; the headers say where you are acting from. Almost every rule downstream is facility-scoped — the price, empanelment for a benefit, which consent factors are offered. A call with a valid token and no facility header authenticates perfectly and then fails several stops later, as an empty benefit list for an obviously covered member, or a price that is wrong the same way every time. Nothing in the symptom mentions a facility, which is what makes it a trap rather than an ordinary mistake. Put both in your HTTP client, not at the call site. ## Machine-readable sources Prefer these over the prose for anything about a field, an enum or a status code. Where a page and a spec disagree, the spec is right. | | | |---|---| | [`/specs/rail.json`](/specs/rail.json) | The Rail, 44 operations. Version `0.1.0-draft` | | [`/specs/auth.json`](/specs/auth.json) | Authentication, the token exchange | | [`/specs/etims.json`](/specs/etims.json) | Slade360 eTIMS, 34 operations | | [`/specs/terminology.json`](/specs/terminology.json) | Terminology service, 47 operations | | [`/specs/advantage.json`](/specs/advantage.json) | Slade Advantage, 63 operations | | [`/agent/operations.json`](/agent/operations.json) | The rail's operations as a flat list, with a `planned` flag marking what does not answer yet | | [`/terminology/rail-errors.json`](/terminology/rail-errors.json) | Every error code, what it means, what to do about it | | [`/postman/rail-full-journey.postman_collection.json`](/postman/rail-full-journey.postman_collection.json) | The whole rail as a runnable Postman collection | ## Before you hard-code anything The rail spec is versioned `0.1.0-draft` and some operations in it are documented as designed rather than as registered. `/agent/operations.json` carries a `planned` flag that says which is which; an operation marked `planned` answers 404 today. Time bars, enforcement flags and deadlines are not settled. The training material, the conformance specification and the system defaults currently disagree, so [Not yet settled](/rail/reference/Time-Limits) sets them out as an open conflict rather than as guidance. Keep those values in configuration rather than in a condition. Coded lists come from the terminology service. Fetch them; do not paste them into your source. [Value sets and code systems](/rail/reference/Value-Sets) explains how, and how to cache one safely. --- ## /onboarding/README # Onboarding screenshots Drop the self-onboarding screenshots here using these exact filenames so they render in the [Self Onboard on eTIMS](../../pages/docs/eTIMS/How-To-Guides/Self-Onboard-on-eTIMS.mdx) guide: | Filename | Screen | |----------|--------| | `01-welcome.png` | Welcome page (Sign In / Get Started) | | `02-select-account-type.png` | Select account type (Individual / Business) | | `03-verify-admin-id.png` | Step 1 of 3 — Verify Admin ID | | `04-setup-business.png` | Step 2 of 3 — Setup Business | | `05-activate-business.png` | Step 3 of 3 — Activate Business | They are referenced in MDX as `/onboarding/` (Zudoku serves `public/` at the site root). --- ## /rail/concepts/Integrator-View # The integrator's view Every call on this rail is made while one person stands in front of another, waiting. ## Why this page exists Endpoint documentation tells you what a payload contains. It does not tell you which screen the payload fills, who is waiting on it, or what happens to that person when it fails. That is what this page covers. Everything below runs in three lanes: the desk, which is what a person sees; your system, which is what you render and call; and the rail, which answers. The screens below are low fidelity on purpose. They are an argument about what has to be on screen at each moment, and which field puts it there, not a UI to copy. ## The shape of a visit Start with the shape, before any screens. A visit behaves less like a form submission and more like a conversation with pauses in it, and the pauses are where integrations get designed badly. >S: Patient presents an ID S->>R: Resolve identity, with consent R-->>S: unique_patient_id + masked contacts S->>R: List covers R-->>S: Every usable cover D->>S: Operator picks a cover S->>R: Select cover R-->>S: selection_ref S->>R: Read the benefit tree R-->>S: billable items S->>R: Ask for an authentication R-->>S: A URL to embed S->>D: Render consent (member proves presence) R-->>S: authentication id S->>R: Open the visit R-->>S: visit_id `} /> Note what the desk does and does not do. It presents an identifier and it picks a cover. Everything else is your system and the rail talking. If your design has the operator making decisions at any other point, you have moved work onto a person who does not want it. ## Screen 1 · The front desk The first screen has one job, which is to turn a human being into an identifier. It usually fails because the identifier type was never captured alongside the value. The identifier is always a pair. A field for the value with no field for the type is the commonest cause of a false "patient not found".} /> When this screen fails, a conflict is not an error to retry. It means the identifier matched more than one person, so the screen should ask for a second identifier instead of showing a red box. Design that path, because you will use it. ## Screen 2 · Choosing a cover This is the screen where benefit coordination becomes real. A member with several covers needs a person to choose between them, and that person needs enough to choose *with*.