# 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](https://www.binx.ca/guides/vct-finish-layer-count-optimization-2026.pdf)**
---
## 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](https://www.binx.ca/floor-care.php).
---
## Quick Start
### Python
```bash
pip install vct-finish-layer-count-2026
```
```python
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
```bash
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
```bash
npm install @veronicacaledon/vct-finish-layer-count-2026
```
```javascript
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
```bash
cargo add vct-finish-layer-count-2026
```
```rust
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
```bash
gem install vct_finish_layer_count_2026
```
```ruby
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](https://www.binx.ca/guides/vct-finish-layer-count-optimization-2026.pdf)
- **Field reference card:** [VCT Finish Layer Count Field Guide](https://www.binx.ca/guides/vct-finish-layer-count-field-guide.pdf)
- **Compliance crosswalk:** [VCT Floor Finish Compliance Standards](https://www.binx.ca/guides/vct-finish-layer-count-compliance.pdf)
- **Residential window cleaning (related campaign):** [residential-window-cleaning-2026](https://github.com/veronica_caledon/residential-window-cleaning-2026)
- **Commercial floor care guide:** [Strip, Wax & Maintain](https://www.binx.ca/guides/commercial-floor-care-stripping-waxing-maintenance.pdf)
---
## License
MIT. See [LICENSE](LICENSE).
Published by [Veronica Caledon](https://github.com/veronica_caledon) in support of floor maintenance research at [Binx Professional Cleaning](https://www.binx.ca/floor-care.php), North Bay and Sudbury, Ontario.