We are requesting an enhancement to develop a Procare Extra that integrates with the ZKTeco ZKBio CVSecurity 3rd-Party API, enabling Procare users to manually (or optionally automatically) synchronize keyless entry codes with supported ZKTeco access control devices (e.g., QR502V).
This integration will support:
Syncing personnel and KES codes from Procare to ZKTeco
Assigning access permissions based on school-level access/exposure settings
Removing personnel from ZKTeco when access is no longer valid (based on account status)
A manual button to initiate the sync will be provided in the Procare Extra interface.
An optional checkbox ("Run every 15 minutes") will allow scheduling a recurring job, disabled by default.
When triggered, a stored procedure will execute and perform the following for each row in [Procare].[dbo].[G_KESPerson]
:
Fetch PersonID
Join with G_Person
to retrieve:
Name
Gender
Date of Birth
Photo (optional)
Contact Info (optional)
Determine KES Code (KESCode
)
Check active school association by identifying all SchoolIDs
the person is associated with via:
The Visible Accounts logic
Join with AR_Account
to verify account is active
The data is then mapped to ZKTeco's required format for syncing.
For every user with valid access:
Call POST /person/addPersonnelBasicInfo
pin
: PersonID
name
: From G_Person
cardNo
: KESCode
accessGroupIdList
: Mapped from list of SchoolIDs
Optional fields: gender, birthday, phone, email
If the user already exists in ZKTeco, the API will update their info.
Call DELETE /person/delete/{pin}
Removes the person from ZKTeco
Further review of the API is necessary, but transmitting someone with no active school associations may also revoke access, removing the need for an additional delete check.
This ensures that access is revoked when a user no longer has a valid, active association.
Functionality |
ZKTeco API Endpoint |
Method |
---|---|---|
Authenticate |
|
|
Add/update personnel |
|
|
Assign access groups |
|
|
Delete personnel |
|
|
Each SchoolID in Procare will map to a ZKTeco Access Group ID. A simple internal mapping table will be created (or hardcoded) for lookups:
sqlCopyEditSchoolID | AccessGroupID
---------|---------------
1001 | 3001
1002 | 3002
Stored Procedure pulls:
PersonID
KESCode
SchoolIDs
Active status from AR_Account
Person info from G_Person
.NET Core microservice or Procare Extra runner:
Authenticates to ZKTeco API
Iterates through the results:
Calls addPersonnelBasicInfo
or delete
as needed
Logs results and errors to local directory
Optionally logs results and errors to BAM..ProcareErrors
PersonID exists in ZKTeco but is no longer in G_KESPerson → Delete
PersonID has no valid SchoolID or account → Delete
PersonID is present but with modified KESCode or school list → Update
This enhancement focuses on:
One-way push sync only
No UI management inside ZKTeco (CDS will manage the ZKTeco side)
No inbound transaction/event sync
Securely extends Procare’s KES infrastructure to external devices
Reduces need for double data entry
Enforces centralized access management using existing Procare logic
Flexible and scalable: future automation and bi-directional support can be added later
Allows CDS to fully transition to Procare as an all-in-one solution
Product Area | Hardware |
Are customers at risk of leaving Procare without this item? | No |
Are customers going to competitors for this item? | Yes - Other |
How does this impact the customer's business?
CDS recently refactored all of their hardware to integrate through LineLeader, which seamlessly integrates with ZKTeco already. In order to fully transition CDS to our Engagement platform, we will need to solve for this. Replacing their door system is not an option, so they will remain on LineLeader until this is solvable. |
|
Requesting Customer | CDS - Child Development Schools (Formerly CNI) - 15297000 |