VCT Finish Layer Count 2026
VCT Floor Finish Coat Count Optimizer — Burnishing Response, Repairability, and Slip Outcome
This repository accompanies the Binx Professional Cleaning technical guide: VCT Finish Layer Count Optimization: Burnishing Response, Repairability, and Slip Outcome
Overview
Vinyl composition tile (VCT) floor finish programs fail in two directions: too few coats and too many. Too few coats produce a floor that won't burnish to adequate gloss, wears through quickly, and can't be spot-repaired. Too many coats create adhesion failure, burnishing heat risk, and strip cycles that cost 3–4× the standard rate.
This project provides:
- Coat count optimizer — given finish type, traffic level, and current coat count, returns burnish response rating (gloss units), repairability score, COF compliance status, and action recommendation
- COF compliance checker — maps coat count to static dry/wet COF values against OSHA, NFPA 101, CSA B651, and Ontario Building Code thresholds
- Reference datasets — burnish response, COF reference, repairability scores, and standards crosswalk (101 records across 4 CSV files)
- Multi-language implementations — Python (PyPI), JavaScript (npm), Rust (crates.io), Ruby (RubyGems), Elixir (Hex.pm), Java (Maven Central), PHP (Packagist)
Developed to support floor maintenance program design for commercial facilities across North Bay and Sudbury, Ontario. More at binx.ca/floor-care.php.
Quick Start
Python
pip install vct-finish-layer-count-2026
from vct_finish_layer_count_2026 import (
FinishType, TrafficLevel, ZoneType,
assess_coat_count, assess_cof
)
result = assess_coat_count(
finish_type=FinishType.ACRYLIC_ZINC,
traffic_level=TrafficLevel.MEDIUM,
coat_count=4,
)
print(result.burnish_response.rating) # 'good'
print(result.burnish_response.gloss_3pass) # 74
print(result.repairability.score) # 8
print(result.recommendation.action) # 'maintain'
cof = assess_cof(
finish_type=FinishType.ACRYLIC_ZINC,
coat_count=4,
zone_type=ZoneType.WET_GENERAL,
)
print(cof.static_cof_wet) # 0.44
print(cof.passes_nfpa_wet) # False
print(cof.action_required) # 'anti_slip_treatment_required'
CLI
vct-assess coat-count \
--finish-type acrylic_zinc \
--traffic-level medium \
--coat-count 4
vct-assess cof \
--finish-type acrylic_zinc \
--coat-count 6 \
--zone-type wet_general
JavaScript
npm install @veronicacaledon/vct-finish-layer-count-2026
const { assessCoatCount, FinishType, TrafficLevel } = require('@veronicacaledon/vct-finish-layer-count-2026');
const result = assessCoatCount({
finishType: 'acrylic_zinc',
trafficLevel: 'medium',
coatCount: 5,
});
console.log(result.burnishResponse.rating); // 'good'
console.log(result.repairability.score); // 9
console.log(result.recommendation.action); // 'maintain'
Rust
cargo add vct-finish-layer-count-2026
use vct_finish_layer_count_2026::{assess_coat_count, FinishType, TrafficLevel};
let result = assess_coat_count(FinishType::AcrylicZinc, TrafficLevel::Medium, 5);
println!("{}", result.burnish_response.rating); // "good"
println!("{}", result.repairability.score); // 9
Ruby
gem install vct_finish_layer_count_2026
require 'vct_finish_layer_count_2026'
result = VctFinishLayerCount2026.assess_coat_count(
finish_type: :acrylic_zinc,
traffic_level: :medium,
coat_count: 5
)
puts result[:burnish_response][:rating] # "good"
puts result[:repairability][:score] # 9
Datasets
Four CSV files are included in the datasets/ directory and published to Hugging Face and Kaggle:
| File | Records | Description |
|---|---|---|
coat-count-burnish-response.csv |
32 | Gloss units (pre/1-pass/3-pass burnish) by coat count, finish type, and RPM |
vct-finish-cof-reference.csv |
26 | Static/dynamic COF dry+wet vs. OSHA/NFPA/CSA/OBC thresholds |
vct-finish-repairability.csv |
28 | Repairability score, strip difficulty, strip time, adhesion risk |
vct-finish-standards-crosswalk.csv |
15 | Regulatory requirements mapped to coat count and finish type |
Data compiled from manufacturer technical data sheets (Spartan Chemical, Diversey, SC Johnson Professional), ASTM D2047, NFPA 101 (2021), CSA B651-12, Ontario Building Code O. Reg. 332/12, and ISSA Guidelines 540 and 750.
Calculator Inputs and Outputs
assess_coat_count(finish_type, traffic_level, coat_count)
Inputs:
| Parameter | Type | Values |
|-----------|------|--------|
| finish_type | enum | acrylic_zinc, acrylic_no_metal, high_solids |
| traffic_level | enum | low, medium, high, extreme |
| coat_count | int | 1–20 |
Output fields:
| Field | Description |
|-------|-------------|
| burnish_response.gloss_initial | Gloss units (GU) before burnishing |
| burnish_response.gloss_1pass | GU after 1 burnish pass |
| burnish_response.gloss_3pass | GU after 3 burnish passes |
| burnish_response.rating | poor / fair / good / excellent |
| burnish_response.heat_risk | low / medium / high / very_high |
| repairability.score | 1–10 (10 = easiest to repair) |
| repairability.spot_repair_viable | bool |
| repairability.strip_required | bool |
| repairability.strip_difficulty | easy / moderate / hard / very_hard / extreme |
| repairability.strip_time_per_1000sqft | Minutes per 1,000 sq ft |
| recommendation.action | add_coats / maintain / plan_strip / strip_now |
| recommendation.optimal_range | Tuple of (min, max) coat count for this traffic level |
| recommendation.coats_to_strip_trigger | Coats remaining before mandatory strip |
| recommendation.notes | Plain-language advisory |
assess_cof(finish_type, coat_count, zone_type)
Inputs:
| Parameter | Type | Values |
|-----------|------|--------|
| finish_type | enum | acrylic_zinc, acrylic_no_metal, high_solids |
| coat_count | int | 0–20 |
| zone_type | enum | dry_general, wet_general, accessible_route, healthcare_wet |
Output fields:
| Field | Description |
|-------|-------------|
| static_cof_dry | Modelled static COF on dry surface |
| static_cof_wet | Modelled static COF on wet surface |
| passes_osha_dry | bool (threshold: 0.50) |
| passes_nfpa_wet | bool (threshold: 0.50) |
| passes_csa_accessible | bool (threshold: 0.60) |
| passes_obc_healthcare | bool (threshold: 0.60 wet) |
| slip_risk_rating | low / medium / medium_high / high / very_high |
| action_required | none / monitor / anti_slip_treatment_required / strip_and_retreat |
Standards Reference
| Standard | Body | Threshold | Applies To |
|---|---|---|---|
| OSHA 29 CFR 1910.22 | US Federal | 0.50 COF dry | All commercial floors |
| ASTM D2047 | ASTM | Test method | COF measurement |
| NFPA 101 Life Safety Code | NFPA | 0.50 COF wet | Wet-exposed zones |
| CSA B651-12 | CSA | 0.60 COF dry | Accessible routes (AODA) |
| Ontario Building Code | Ontario | 0.60 COF wet | Healthcare wet areas |
| ISSA Guideline 750 | ISSA | Strip at 8–10 coats | Operational standard |
Repository Structure
vct-finish-layer-count-2026/
├── datasets/ ← 4 reference CSV files
├── engines/
│ ├── python/ ← PyPI: vct-finish-layer-count-2026
│ ├── npm/ ← npm: @veronicacaledon/vct-finish-layer-count-2026
│ ├── rust/ ← crates.io: vct-finish-layer-count-2026
│ ├── ruby/ ← RubyGems: vct_finish_layer_count_2026
│ ├── elixir/ ← Hex.pm: vct_finish_layer_count
│ ├── php/ ← Packagist: veronicacaledon/vct-finish-layer-count-2026
│ └── java/ ← Maven Central
├── docs/ ← Sphinx documentation source
├── kaggle/ ← Kaggle notebook
├── notebooks/ ← Jupyter analysis notebooks
├── pdfs/ ← symlinks / metadata for PDF guides
└── README.md
Related Resources
- Companion guide (main): VCT Finish Layer Count Optimization
- Field reference card: VCT Finish Layer Count Field Guide
- Compliance crosswalk: VCT Floor Finish Compliance Standards
- Residential window cleaning (related campaign): residential-window-cleaning-2026
- Commercial floor care guide: Strip, Wax & Maintain
License
MIT. See LICENSE.
Published by Veronica Caledon in support of floor maintenance research at Binx Professional Cleaning, North Bay and Sudbury, Ontario.