CHECK A SEALED FILE
Got a report, a PDF or a record file from an UP↑SCALE scale? Check here that it is unchanged and which scale sealed it.
Nothing is uploaded: the check runs in your browser only. You need no account and no scale.
WHAT THE CHECK SHOWS
- Integrity code
- Every report of the ENTERPRISE & COMPLIANCE edition carries a code (SHA-256) of its content. If the code fits, the text is unchanged since the code was made. On its own it is a checksum: anybody can compute one.
- Seal of the scale
- The scale signs the SHA-256 of the file with its own key (ECDSA P-256). A valid seal names the scale (Device ID), the time, the user who was logged in and the number of the entry that the scale wrote into its hash-chained activity log for this seal. A changed file no longer fits its seal, and no app or computer can make a new seal without the key of the scale.
- Seal certificate
- UP↑SCALE certifies the key of every scale with an ENTERPRISE & COMPLIANCE licence: "this key belongs to the scale with this Device ID". The check uses only our public key, which is built into this page. "Key NOT certified" means: the seal is intact, but nobody vouches for the scale behind it.
- Signatures
- Reviewed / approved signatures that a user added with their password are sealed by the scale too, together with the name and the meaning of the signature.
WHAT IT DOES NOT SHOW
- A seal is no qualified electronic signature (eIDAS) and no official certificate. It is a technical control. It does not replace the lab's own procedures, and it says nothing about whether the measurement itself was right.
- A complete check would compare the seal with the archived activity log of the scale as well (in the app, CHECK SEALED FILES): a copied key makes seals without a fitting log entry.
- Whether the scale itself was verified or calibrated: see the report and the records of its owner.
HOW THE RECORDS ARE KEPT TAMPER-PROOF
- Audit trail: every change in the scale becomes an entry (who, when, what, why). Entries cannot be edited or deleted.
- Hash chain (SHA-256): each entry holds the fingerprint of the one before. Change, remove or insert one entry and the chain breaks - the check shows where.
- Record files: saved archives name the file before them, so a missing or changed file is found.
- Numbered sales records: every sale and booking gets a number of the scale and the fingerprint of the record before it; the weight is checked by the scale itself (a weight typed in by hand is marked as manual), and the calibration and configuration counters go into every record. The sealed report shows missing numbers, breaks and every counter change.
- Digital seal (ECDSA P-256): reports, PDF, JSON and CSV carry the signature of the scale, vouched for by our licence key.
- Not hardware WORM: tamper-evident, not write-once. Keep the record files on write-once or read-only, backed-up storage and keep the fingerprint of the newest file separately. More: manual.
FOR OFFICIALS, AUDITORS AND CUSTOMERS
What you can check on this page without an account and without a scale, and what you should ask the lab for:
- The file: a report (HTML or PDF), a record file of the activity log (JSON) or a CSV export with its
.seal.json. Choose it above: you see whether it is unchanged, which scale (Device ID) sealed it, when, and which user was logged in. - The log: record files of the activity log are chained: each file names the previous one (name and SHA-256), and the entries are hash-chained, so a missing or changed entry shows as a break. Ask for all record files of the period and check them together.
- The calculations: the reference cases below are worked out by hand from OIML R 76-1:2006 (the cases of the routine check, RT-, from USP <41> and Ph. Eur. 2.1.7). The lab's validation record shows the code fingerprint of the app version it used; a different app version has a different fingerprint.
- The scale itself: the test record (final report) lists every test with its readings, loads and limits. Whether the test weights were traceable and the procedure suits the purpose is shown by the lab's own documents - we do not vouch for it.
UP↑SCALE is not affiliated with OIML, EURAMET or any authority. Nothing on this page is an official certificate, a verification or a qualified electronic signature (eIDAS).
VALIDATION OF THE CALCULATIONS (IQ/OQ)
Laboratories and service companies have to show that the software they use calculates correctly. The ENTERPRISE & COMPLIANCE edition has a box VALIDATION OF THE CALCULATIONS (IQ/OQ) at the end of the ☑ TEST page:
- RUN VALIDATION computes the reference cases below with the code of the app - the same functions that judge your tests - and compares every result with the value worked out by hand from the standard. It takes less than a second and needs no scale (connected, the record also names the scale).
- VALIDATION RECORD (PRINT / PDF) and DOWNLOAD RECORD (HTML) make a record for your validation file: date, app version, a code fingerprint (SHA-256 of the tested functions and the cases: another app version gives another fingerprint, so you can show later which code was validated), browser and device, the scale (name, firmware, Device ID, edition), all cases with expected and calculated result, and lines for performed / reviewed / approved by. Like all reports of the edition it gets your company header, a report number of the scale and an integrity code.
- What it does not cover: the scale itself - the reading of the load cell, the filters, the rounding, the stability detection and the tare. These are tested on the scale with traceable test weights, using the test suite (repeatability, accuracy & linearity, eccentricity, tare and what your procedure asks for); attach its FINAL REPORT to the validation record. Run the validation again after every app update (the fingerprint changes) and on every device you use for tests.
- It is no certificate: it shows that the app computes the cases as expected on your device. The cases are worked out from OIML R 76-1:2006 (the routine check also from USP <41> and Ph. Eur. 2.1.7) by us; you can check every one of them with the working below. UP↑SCALE is not affiliated with OIML, USP, the EDQM or any authority.
The reference cases (loads in g, errors and limits in d = the scale interval; "checks" lists each check of a test as [error, limit or uncertainty]; status: meets / maybe = cannot be decided / inuse = within the limit for instruments in use / fails):
| Case | Clause | Input | Expected | Working |
|---|---|---|---|---|
| T3-01 | R 76-1 Table 3 | classes {"d":0.1,"e":0.1,"max":3000} | ["II"] | n = 3000 / 0.1 = 30000. I needs n >= 50000: no. II with e >= 0.1 g needs 5000 <= n <= 100000: yes. III with 0.1 <= e <= 2 g needs n <= 10000: no. IIII needs e >= 5 g: no. |
| T3-02 | R 76-1 Table 3 | classes {"d":0.01,"e":0.01,"max":300} | ["II"] | n = 300 / 0.01 = 30000. I: n < 50000. II with 0.001 <= e <= 0.05 g needs 100 <= n <= 100000: yes. III needs e >= 0.1 g: no. |
| T3-03 | R 76-1 Table 3 | classes {"d":1,"e":1,"max":3000} | ["III"] | n = 3000. II with e >= 0.1 g needs n >= 5000: no. III with 0.1 <= e <= 2 g needs 100 <= n <= 10000: yes. |
| T3-04 | R 76-1 Table 3 | classes {"d":5,"e":5,"max":3000} | ["III","IIII"] | n = 600. III with e >= 5 g needs 500 <= n <= 10000: yes. IIII with e >= 5 g needs 100 <= n <= 1000: yes. |
| T3-05 | R 76-1 Table 3 | ref {"d":5,"e":5,"max":3000} | "IIII" | Classes III and IIII fit (T3-04); without a class typed in, the loosest class that fits (IIII) is the reference. |
| T3-06 | R 76-1 Table 3 | classes {"d":5,"e":5,"max":2000} | ["IIII"] | n = 400. III with e >= 5 g needs n >= 500: no. IIII needs 100 <= n <= 1000: yes. |
| T3-07 | R 76-1 Table 3 | classes {"d":0.001,"e":0.001,"max":100} | ["I","II"] | n = 100000. I needs e >= 0.001 g and n >= 50000: yes. II with 0.001 <= e <= 0.05 g needs n <= 100000: yes (limit included). |
| T3-08 | R 76-1 Table 3 | classes {"d":0.1,"e":0.1,"max":200} | ["III"] | n = 2000. II with e >= 0.1 g needs n >= 5000: no. III with 0.1 <= e <= 2 g needs 100 <= n <= 10000: yes. |
| T3-09 | R 76-1 Table 3 | classes {"d":1,"e":1,"max":10000} | ["II","III"] | n = 10000. II with e >= 0.1 g: 5000 <= 10000 <= 100000: yes. III: n <= 10000: yes (limit included). |
| T3-16 | R 76-1 Table 3 | classes {"d":0.1,"e":0.1,"max":8000} | ["I","II"] | n = 80000. I needs e >= 0.001 g and n >= 50000: yes. II with e >= 0.1 g needs 5000 <= n <= 100000: yes. III: n > 10000. |
| T3-10 | R 76-1 Table 3, 3.4.3 | min {"d":0.001,"e":0.001,"max":100,"cls":"I"} | 0.1 | Class I: Min = 100 e, with e replaced by d (3.4.3): 100 x 0.001 g = 0.1 g. |
| T3-11 | R 76-1 Table 3, 3.4.3 | min {"d":0.01,"e":0.01,"max":300,"cls":"II"} | 0.2 | Class II with 0.001 <= e <= 0.05 g: Min = 20 d = 20 x 0.01 g = 0.2 g. |
| T3-12 | R 76-1 Table 3, 3.4.3 | min {"d":0.1,"e":0.1,"max":3000,"cls":"II"} | 5 | Class II with e >= 0.1 g: Min = 50 d = 50 x 0.1 g = 5 g. |
| T3-13 | R 76-1 Table 3, 3.4.3 | min {"d":1,"e":1,"max":3000,"cls":"III"} | 20 | Class III: Min = 20 d = 20 g. |
| T3-14 | R 76-1 Table 3, 3.4.3 | min {"d":5,"e":5,"max":3000,"cls":"IIII"} | 50 | Class IIII: Min = 10 d = 50 g. |
| T3-15 | R 76-1 Table 3, 3.4.3 | min {"d":0.1,"e":1,"max":3000,"cls":"III"} | 2 | e = 1 g, d = 0.1 g (an RS-232 adapter with e typed in). Class III: Min = 20 e, but 3.4.3 replaces e by d: 20 x 0.1 g = 2 g. |
| T6-01 | R 76-1 Table 6 | mpe {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":500} | 0.5 | m = 500 / 0.1 = 5000 e. Class II: 0 <= m <= 5000 -> 0.5 e = 0.5 d. |
| T6-02 | R 76-1 Table 6 | mpe {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":500.1} | 1 | m = 5001 e. Class II: 5000 < m <= 20000 -> 1 e = 1 d. |
| T6-03 | R 76-1 Table 6 | mpe {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2000} | 1 | m = 20000 e. Class II: 5000 < m <= 20000 -> 1 e (limit included). |
| T6-04 | R 76-1 Table 6 | mpe {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2000.1} | 1.5 | m = 20001 e. Class II: 20000 < m <= 100000 -> 1.5 e. |
| T6-05 | R 76-1 Table 6 | mpe {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2000.0000000003} | 1 | A load of 2000 g that came out of a unit conversion (e.g. typed in oz) with a rounding of 3e-10 g is still m = 20000 e -> 1 e (not 1.5 e). |
| T6-06 | R 76-1 Table 6 | mpe {"d":1,"e":1,"max":3000,"cls":"III","load":500} | 0.5 | m = 500 e. Class III: 0 <= m <= 500 -> 0.5 e. |
| T6-07 | R 76-1 Table 6 | mpe {"d":1,"e":1,"max":3000,"cls":"III","load":501} | 1 | m = 501 e. Class III: 500 < m <= 2000 -> 1 e. |
| T6-08 | R 76-1 Table 6 | mpe {"d":1,"e":1,"max":3000,"cls":"III","load":2001} | 1.5 | m = 2001 e. Class III: 2000 < m <= 10000 -> 1.5 e. |
| T6-09 | R 76-1 Table 6 | mpe {"d":0.001,"e":0.001,"max":100,"cls":"I","load":50} | 0.5 | m = 50000 e. Class I: 0 <= m <= 50000 -> 0.5 e. |
| T6-10 | R 76-1 Table 6 | mpe {"d":0.001,"e":0.001,"max":400,"cls":"I","load":200.001} | 1.5 | m = 200001 e. Class I: 200000 < m -> 1.5 e. |
| T6-11 | R 76-1 Table 6 | mpe {"d":5,"e":5,"max":3000,"cls":"IIII","load":255} | 1 | m = 51 e. Class IIII: 50 < m <= 200 -> 1 e. |
| T6-12 | R 76-1 Table 6 | mpe {"d":5,"e":5,"max":3000,"cls":"IIII","load":1005} | 1.5 | m = 201 e. Class IIII: 200 < m <= 1000 -> 1.5 e. |
| T6-13 | R 76-1 Table 6 | mpe {"d":0.1,"e":1,"max":3000,"cls":"III","load":1000} | 10 | e = 1 g, d = 0.1 g. m = 1000 e. Class III: 500 < m <= 2000 -> 1 e = 1 g = 10 d. |
| LV-01 | R 76-1 3.5.1, 3.5.2 | level {"err":0.4,"mpe":1,"u":0.5} | "ok" | Within the mpe even in the worst case: 0.4 + 0.5 = 0.9 <= 1. |
| LV-02 | R 76-1 3.5.1, 3.5.2 | level {"err":0.5,"mpe":1,"u":0.5} | "ok" | 0.5 + 0.5 = 1 <= 1 (limit included). |
| LV-03 | R 76-1 3.5.1, 3.5.2 | level {"err":1.2,"mpe":1,"u":0.5} | "maybe" | 1.2 - 0.5 = 0.7 <= 1 < 1.2 + 0.5: the uncertainty does not allow a decision. |
| LV-04 | R 76-1 3.5.1, 3.5.2 | level {"err":1.6,"mpe":1,"u":0.1} | "warn" | Surely above the mpe (1.6 - 0.1 > 1) and surely within the mpe in service = 2 mpe (3.5.2): 1.6 + 0.1 <= 2. |
| LV-05 | R 76-1 3.5.1, 3.5.2 | level {"err":2,"mpe":1,"u":0.1} | "bad" | 2.0 + 0.1 > 2 mpe: not surely within the mpe in service. The in-service tier is only given when it is sure (guard band of u). |
| LV-06 | R 76-1 3.5.1 | level {"err":0,"mpe":0.5,"u":0.5} | "ok" | A rounded reading (u = d/2) with mpe 0.5 d: only an error of 0 is surely within the mpe: 0 + 0.5 <= 0.5. |
| A44-01 | R 76-1 A.4.4.1, Table 3 | loads {"d":0.1,"e":0.1,"max":3000,"cls":"II","purpose":"verify"} | [5,300,500,2000,3000] | At least 5 loads incl. Min (5 g, T3-12, >= 100 mg), the mpe changes 5000 e = 500 g and 20000 e = 2000 g, and Max 3000 g; the fifth is filled in at 10 % of Max = 300 g. |
| A44-02 | R 76-1 A.4.4.1, Table 3 | loads {"d":0.1,"e":0.1,"max":3000,"cls":"II","purpose":"type"} | [5,300,500,600,750,1050,1500,2000,2250,3000] | 10 loads for the initial intrinsic error: Min 5 g, 500 g, 2000 g, Max 3000 g, then 10, 25, 50, 75, 20 and 35 % of Max (300, 750, 1500, 2250, 600, 1050 g), each far enough from the others. |
| A44-03 | R 76-1 A.4.4.1, Table 3 | loads {"d":1,"e":1,"max":3000,"cls":"III","purpose":"verify"} | [20,300,500,2000,3000] | Min = 20 d = 20 g, the mpe changes 500 e = 500 g and 2000 e = 2000 g, Max 3000 g, plus 10 % of Max = 300 g. |
| A410-01 | R 76-1 A.4.10 | reps {"cls":"II","purpose":"verify"} | 6 | Verification: six weighings on classes I and II. |
| A410-02 | R 76-1 A.4.10 | reps {"cls":"III","purpose":"verify"} | 3 | Verification: three weighings on classes III and IIII. |
| A410-03 | R 76-1 A.4.10 | reps {"cls":"III","purpose":"type"} | 10 | Type examination, Max < 1000 kg: 10 weighings per series. |
| A410-04 | R 76-1 A.4.10 | reploads {"max":3000,"purpose":"verify"} | [2400] | Verification: one series with about 0.8 Max = 2400 g. |
| A410-05 | R 76-1 A.4.10 | reploads {"max":3000,"purpose":"type"} | [1500,3000] | Type examination: one series with about 50 % (1500 g) and one close to 100 % of Max (3000 g). |
| A443-01 | R 76-1 A.4.4.3 | rowerr {"d":5,"e":5,"net":1000,"target":1000,"dl":1.5,"zdl":2.5} | {"err":1,"errD":0.2,"u":0} | The example of the standard: e = 5 g, L = 1000 g, I = 1000 g, dL = 1.5 g: E = I + e/2 - dL - L = 1000 + 2.5 - 1.5 - 1000 = 1 g = 0.2 d. The zero, determined the same way, shows 0 with dL0 = 2.5 g: E0 = 0 + 2.5 - 2.5 = 0, so Ec = E - E0 = 1 g; both changeover points remove the rounding (u = 0). (Corrected 2026-10-23: the input now names the zero changeover dL0; the expected values are unchanged.) |
| A443-05 | R 76-1 A.4.4.3 | rowerr {"d":5,"e":5,"net":1000,"target":1000,"dl":1.5,"zdl":2} | {"err":0.5,"errD":0.1,"u":0} | As A443-01, but the zero needs dL0 = 2 g: E0 = 0 + 2.5 - 2 = 0.5 g. Ec = E - E0 = 1 - 0.5 = 0.5 g = 0.1 d. |
| A443-06 | R 76-1 A.4.4.3, 3.5.3.2 | rowerr {"d":5,"e":5,"net":1000,"target":1000,"dl":1.5} | {"err":1,"errD":0.2,"u":0.5} | dL at the load, but no dL0 at the zero: the zero is taken as shown (E0 = 0), its rounding of up to e/2 = 2.5 g stays in the uncertainty: u = 0.5 d. |
| A443-02 | R 76-1 3.5.3.2 | rowerr {"d":0.1,"e":0.1,"net":1000.1,"target":1000,"dl":0} | {"err":0.1,"errD":1,"u":0.5} | A rounded reading without changeover: E = 1000.1 - 1000 = 0.1 g = 1 d, uncertain by half a step: u = 0.5 d. |
| A443-03 | R 76-1 A.4.1.6 | rowerr {"d":0.1,"e":0.1,"net":1000.03,"target":1000,"dl":0,"fine":true} | {"err":0.03,"errD":0.3,"u":0.1} | A reading before rounding (an interval of at most 1/5 e): E = 0.03 g = 0.3 d; u = d/10 = 0.1 d. |
| A443-04 | R 76-1 3.7.1 | rowerr {"d":0.1,"e":0.1,"net":1000.1,"target":1000,"dl":0,"tolPct":0.01} | {"err":0.1,"errD":1,"u":1.5} | A test weight with a tolerance of 0.01 %: 1000 g x 0.0001 = 0.1 g; u = d/2 + 0.1 g = 0.15 g = 1.5 d. |
| W-01 | R 76-1 A.4.4.1, 3.5.1 | weigh {"d":1,"e":1,"max":3000,"cls":"III","fine":true,"up":[[500,500.2],[2000,2000.6],[3000,3001.2]],"down":[[2000,2000.9],[500,500.3]]} | {"checks":[[0.2,0.1],[0.6,0.1],[1.2,0.1],[0.9,0.1],[0.3,0.1],[0.3,0.2],[0.1,0.2]],"status":"meets"} | Readings before rounding (u = 0.1 d each). Errors up 0.2 / 0.6 / 1.2 d against mpe 0.5 / 1 / 1.5 d (500 / 2000 / 3000 e), down 0.9 d at 2000 g (0.9 + 0.1 <= 1) and 0.3 d at 500 g; same load up and down: |0.9 - 0.6| = 0.3 d (u 0.2) and |0.3 - 0.2| = 0.1 d (u 0.2). All surely within: meets class III. |
| R-01 | R 76-1 3.6.1, A.4.10 | repeat {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2400,"nets":[2400,2400.1,2399.9,2400,2400.1,2400]} | {"checks":[[1,0.5],[2,1]],"status":"maybe"} | Rounded readings (u = 0.5 d). mpe at 2400 g (24000 e, class II) = 1.5 d. Largest error 1 d: 1 + 0.5 <= 1.5 -> within. Difference of the results (3.6.1) = 1 - (-1) = 2 d with u = 1 d: 2 - 1 <= 1.5 < 2 + 1 -> cannot be decided. |
| R-02 | R 76-1 3.6.1, A.4.10 | repeat {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2400,"fine":true,"nets":[2400.02,2400.05,2399.98,2400.03,2400,2400.04]} | {"checks":[[0.5,0.1],[0.7,0.2]],"status":"meets"} | Readings before rounding (u = 0.1 d). Errors 0.2, 0.5, -0.2, 0.3, 0, 0.4 d: largest 0.5 d <= 1.5 - 0.1. Difference 0.5 - (-0.2) = 0.7 d <= 1.5 - 0.2. |
| R-03 | R 76-1 3.6.1, 3.5.2 | repeat {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2400,"fine":true,"nets":[2400,2400.2,2399.9,2400,2400.1,2400]} | {"checks":[[2,0.1],[3,0.2]],"status":"fails"} | Largest error 2 d: above 1.5 d, within 2 x 1.5 = 3 d in service (warn). Difference 2 - (-1) = 3 d with u 0.2: 3 > 3 - 0.2 -> not surely within the in-service limit: fails. |
| C-01 | R 76-1 3.9.4.1, 3.9.4.2, A.4.11 | creep {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2900,"samples":[[0,2900],[300,2900.02],[900,2900.03],[1800,2900.04]],"zeros":[0,0.02]} | {"checks":[[0.4,0.5],[0.1,0.2],[0.2,0.5]],"status":"meets"} | Readings before rounding. Change in 30 min: 0.04 g = 0.4 d <= 0.5 e. Change 15 to 30 min: 0.01 g = 0.1 d <= 0.2 e. Zero return: 0.02 g = 0.2 d <= 0.5 e. |
| C-02 | R 76-1 3.9.4.1 | creep {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2900,"samples":[[0,2900],[900,2900.01],[1800,2900.04]],"zeros":[0,0.01]} | {"checks":[[0.4,0.5],[0.3,0.2],[0.1,0.5]],"status":"fails"} | 30 min: 0.4 d <= 0.5 e, but 15 to 30 min: 0.03 g = 0.3 d > 0.2 e -> the 30 minute test is not met (the 4 hour alternative would be next). |
| Z-01 | R 76-1 4.5.2, A.4.2.3.1 | zset {"d":0.1,"e":0.1,"max":3000,"cls":"II","fine":true,"nets":[0.01]} | {"checks":[[0.1,0.25]],"status":"meets"} | After the zero-setting the indication is 0.01 g = 0.1 d, u = 0.1 d: 0.1 + 0.1 <= 0.25 e. |
| Z-02 | R 76-1 4.5.2 | zset {"d":0.1,"e":0.1,"max":3000,"cls":"II","fine":true,"nets":[0.03]} | {"checks":[[0.3,0.25]],"status":"maybe"} | 0.3 d with u = 0.1 d against 0.25 e: 0.3 - 0.1 <= 0.25 < 0.3 + 0.1 -> cannot be decided. |
| Z-03 | R 76-1 4.5.2 | zset {"d":0.1,"e":0.1,"max":3000,"cls":"II","fine":true,"nets":[0.05]} | {"checks":[[0.5,0.25]],"status":"fails"} | 0.5 d - 0.1 > 0.25 e: the zero-setting is not accurate enough (no in-service tier for this limit). |
| S-01 | R 76-1 4.4.2, A.4.12 | stab {"d":0.1,"e":0.1,"max":3000,"cls":"II","spans":[0.1,0.2]} | {"checks":[[1,1],[2,1]],"status":"fails"} | After the stable signal the values may differ by at most 1 e (two adjacent values): a span of 0.1 g = 1 d is within, 0.2 g = 2 d is not. |
| D-01 | R 76-1 3.8.2.2, A.4.8.2 | disc {"d":0.1,"e":0.1,"max":3000,"cls":"II","rows":[[1500,1500,1500.1],[5,5,5]]} | {"checks":[[0,0.5],[1,0.5]],"status":"fails"} | After the extra 1.4 d the indication must be I + d: at 1500 g it shows 1500.1 = I + d (0 d off); at 5 g it still shows 5.0 = I (1 d off): the discrimination is not met. |
| LIN-01 | least squares (EURAMET cg-18 style, R 76 has no linearity limit) | linearity {"pts":[[500,500.05],[1000,1000.1],[2000,2000.2],[3000,3000.3]]} | {"a":1.0001,"maxDev":0} | All points lie on y = 1.0001 x: slope 1.0001 (gain error +0.01 %), no deviation from the line. |
| LIN-02 | least squares | linearity {"pts":[[1,1],[2,2],[3,4]]} | {"a":1.5,"maxDev":0.333333333} | n = 3, sum x = 6, sum y = 7, sum xy = 17, sum x2 = 14: a = (3 x 17 - 6 x 7) / (3 x 14 - 36) = 9 / 6 = 1.5, b = (7 - 1.5 x 6) / 3 = -2/3; the line gives 0.833, 2.333, 3.833: largest deviation 1/3 at x = 2. |
| ECC-01 | R 76-1 3.6.2, Table 6 (difference to the middle, EURAMET cg-18) | ecc {"d":0.1,"e":0.1,"max":3000,"cls":"II","fine":true,"rounds":[[1000,1000.05,999.97,1000.07,1000.01]]} | {"maxD":0.7,"mpe":1,"u":0.2,"level":"ok"} | 3 rounds of the same values: corner means differ from the middle by 0.5, -0.3, 0.7, 0.1 d; largest 0.7 d. mpe at 1000 g (10000 e, class II) = 1 e. Two means before rounding: u = 0.2 d. 0.7 + 0.2 <= 1. |
| ECC-02 | R 76-1 3.6.2, Table 6 | ecc {"d":0.1,"e":0.1,"max":3000,"cls":"II","fine":false,"rounds":[[1000,1000.1,1000,999.9,1000]]} | {"maxD":1,"mpe":1,"u":1,"level":"maybe"} | Rounded readings: the difference of two rounded means is uncertain by up to 1 d. Largest difference 1 d: 1 - 1 <= 1 < 1 + 1 -> cannot be decided. |
| ECC-03 | R 76-1 3.6.2, 3.5.2 | ecc {"d":0.1,"e":0.1,"max":3000,"cls":"II","fine":true,"rounds":[[1000,1000.25,1000,1000,1000]]} | {"maxD":2.5,"mpe":1,"u":0.2,"level":"bad"} | 2.5 d + 0.2 > 2 x 1 d: above even the in-service limit. |
| ECC-04 | R 76-1 3.6.2, A.4.7 (against the true mass) | ecc {"d":0.1,"e":0.1,"max":3000,"cls":"II","fine":true,"mass":999.98,"rounds":[[1000,1000.03,999.95,1000.02,1000]]} | {"absD":0.5,"absU":0.1,"absMpe":1,"absLevel":"ok"} | True mass 999.98 g. Corner means 1000.03, 999.95, 1000.02, 1000.00 g: errors +0.05, -0.03, +0.04, +0.02 g; largest 0.05 g = 0.5 d (the middle is not judged, A.4.7). Readings before rounding: u = d/10 = 0.1 d. mpe at 999.98 g (9999.8 e, class II) = 1 e. 0.5 + 0.1 <= 1. |
| ECC-05 | R 76-1 3.6.2, A.4.7, 3.7.1 | ecc {"d":0.1,"e":0.1,"max":3000,"cls":"II","fine":false,"mass":1000,"tolPct":0.005,"rounds":[[1000,1000.1,1000,1000.1,1000]]} | {"absD":1,"absU":1,"absMpe":1,"absLevel":"maybe"} | Rounded readings: u = d/2 = 0.5 d, plus the tolerance of the weight 1000 g x 0.00005 = 0.05 g = 0.5 d: u = 1 d. Largest corner error 0.1 g = 1 d against mpe 1 e: 1 - 1 <= 1 < 1 + 1 -> cannot be decided. |
| ECC-06 | R 76-1 3.6.2, 3.5.2 | ecc {"d":0.1,"e":0.1,"max":3000,"cls":"II","fine":true,"mass":1000,"rounds":[[1000,1000.12,1000,1000,1000]]} | {"absD":1.2,"absU":0.1,"absMpe":1,"absLevel":"warn"} | Largest corner error 0.12 g = 1.2 d: surely above 1 d (1.2 - 0.1 > 1), surely within the in-service limit 2 d (1.2 + 0.1 <= 2). |
| ECC-07 | R 76-1 A.4.7 | ecc {"d":0.1,"e":0.1,"max":3000,"cls":"II","fine":true,"mass":1000,"rounds":[[1000.3,1000,1000,1000,1000]]} | {"absD":0,"absLevel":"ok"} | Only the middle is off (0.3 g); A.4.7 loads only the eccentric segments, so the R 76 result looks at the corners alone: 0 d. (The difference to the middle, 3 d, is still shown for information.) |
| W111-01 | R 76-1 3.7.1 | weighttol {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2000,"tolPct":0.005} | false | mpe at 2000 g (20000 e, class II) = 1 e = 0.1 g; 1/3 of it = 0.033 g. The weight may be off by 2000 x 0.00005 = 0.1 g > 0.033 g: not allowed. |
| W111-02 | R 76-1 3.7.1 | weighttol {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2000,"tolPct":0.0015} | true | 2000 x 0.000015 = 0.03 g <= 0.033 g: allowed. |
| W111-03 | R 76-1 3.7.1 | weighttol {"d":0.1,"e":0.1,"max":3000,"cls":"II","load":2000,"tolPct":0.002} | false | 2000 x 0.00002 = 0.04 g > 0.033 g (1/3 of the mpe): not allowed, although it is below half of the mpe. |
| RT-01 | USP <41> repeatability + accuracy | routine {"d":0.1,"e":0.1,"max":3000,"p":{"crit":"lab","w1":100,"w2":0,"mSmall":100,"repPct":0.1,"accPct":0.1},"v1":[100,100.1,100,100,100.1,100,100,100.1,100,100],"v2":[]} | {"mean":100.03,"s":0.048304589,"minW":96.609178,"checks":[[0.966091783,1],[0,1]],"pass":true} | Mean 100.03 g. Deviations +0.07 g (3 x) and -0.03 g (7 x): sum of squares 3 x 0.0049 + 7 x 0.0009 = 0.021; s = sqrt(0.021 / 9) = 0.0483046 g (above 0.41 d = 0.041 g, so it is used). 2 s = 0.0966 g = 0.966 d <= 0.10 % of the smallest net weight 100 g = 0.1 g = 1 d. Minimum weight 2000 s = 96.61 g. Accuracy: the first weighing 100.0 g (no second weight) - error 0 d <= 0.10 % of 100 g = 1 d. PASS. |
| RT-02 | USP <41> repeatability (s replaced by 0.41 d) | routine {"d":0.1,"e":0.1,"max":3000,"p":{"crit":"lab","w1":50,"w2":0,"mSmall":50,"repPct":0.1,"accPct":0.1},"v1":[50,50,50,50,50,50,50,50,50,50],"v2":[]} | {"s":0,"sEff":0.041,"minW":82,"checks":[[0.82,0.5],[0,0.5]],"pass":false} | All ten readings equal: s = 0, replaced by 0.41 d = 0.041 g. 2 x 0.041 = 0.082 g = 0.82 d > 0.10 % of 50 g = 0.05 g = 0.5 d: FAIL - the smallest net weight is below the minimum weight 2000 x 0.041 = 82 g. |
| RT-03 | Ph. Eur. 2.1.7 sensitivity | routine {"d":0.1,"e":0.1,"max":3000,"p":{"crit":"lab","w1":100,"w2":1000,"mSmall":200,"repPct":0.1,"accPct":0.05},"v1":[100,100,100,100,100,100,100,100,100,100],"v2":[1000.6]} | {"checks":[[0.82,2],[6,5]],"pass":false} | Repeatability: s = 0 -> 0.041 g; 2 s = 0.082 g = 0.82 d <= 0.10 % of 200 g = 0.2 g = 2 d. Sensitivity: 1000.6 - 1000 = 0.6 g = 6 d > 0.05 % of 1000 g = 0.5 g = 5 d: FAIL. |
| RT-04 | Routine check, own tolerance (quick profile) | routine {"d":1,"e":1,"max":3000,"p":{"crit":"tol","w1":1000,"w2":0,"errPct":1,"errMinD":2},"v1":[1004,1006,1005],"v2":[]} | {"mean":1005,"checks":[[5,10]],"pass":true} | Mean 1005 g, error 5 g = 5 d. Tolerance: the larger of 1 % of 1000 g = 10 g and 2 d = 2 g: 10 g = 10 d. 5 <= 10: PASS. |
| RT-05 | Routine check, own tolerance (minimum 2 d) | routine {"d":1,"e":1,"max":3000,"p":{"crit":"tol","w1":100,"w2":0,"errPct":1,"errMinD":2},"v1":[103,103,102],"v2":[]} | {"mean":102.666667,"checks":[[2.666667,2]],"pass":false} | Mean 308 / 3 = 102.667 g, error 2.667 d. Tolerance: the larger of 1 % of 100 g = 1 g and 2 d = 2 g: 2 d. 2.667 > 2: FAIL. |
| RT-06 | R 76-1 3.5.2 (in use = 2 x mpe of Table 6) | routine {"d":1,"e":1,"max":3000,"cls":"III","p":{"crit":"mpe2","w1":1000,"w2":2500},"v1":[1001,1002,1000],"v2":[2503]} | {"checks":[[2,2],[3,3]],"pass":true} | Class III, e = 1 g: 1000 g = 1000 e (500 < m <= 2000): mpe 1 e, in use 2 e; worst value 1002 g = 2 d <= 2. 2500 g = 2500 e (> 2000): mpe 1.5 e, in use 3 e; 2503 g = 3 d <= 3. PASS (limits included). |
| DS-01 | R 76-1 Table 3; NIST HB 44 S.1.2.1 (d = 1, 2 or 5 x 10^n) | classes {"d":0.2,"e":0.2,"max":2000} | ["II","III"] | d = 0.2 g (a 2 x 10^-1 step). n = 2000 / 0.2 = 10000. I: n < 50000. II with e >= 0.1 g needs 5000 <= n <= 100000: yes. III with 0.1 <= e <= 2 g needs 100 <= n <= 10000: yes (limit included). IIII needs e >= 5 g: no. |
| DS-02 | R 76-1 Table 3, 3.4.3 | min {"d":0.2,"e":0.2,"max":2000,"cls":"II"} | 10 | Class II with e >= 0.1 g: Min = 50 d = 50 x 0.2 g = 10 g. |
| DS-03 | R 76-1 Table 3 | classes {"d":20000,"e":20000,"max":60000000} | ["III"] | A weighbridge: Max 60 t, d = e = 20 kg. n = 60000000 / 20000 = 3000. II with e >= 0.1 g needs n >= 5000: no. III with e >= 5 g needs 500 <= n <= 10000: yes. IIII needs n <= 1000: no. |
| DS-04 | R 76-1 Table 3 | classes {"d":1.0e-7,"e":1.0e-7,"max":2.1} | [] | An ultra-micro balance: Max 2.1 g, d = e = 0.1 ug = 0.0000001 g, n = 21000000. Class I needs e >= 0.001 g: no; II needs e >= 0.001 g: no; III and IIII need e >= 0.1 g: no. No class of R 76 covers it: the tests are run, the report names no class that fits. |
| DS-05 | R 76-1 Table 3 | classes {"d":1.0e-6,"e":1.0e-6,"max":6.1} | [] | A microbalance: Max 6.1 g, d = e = 1 ug = 0.000001 g, n = 6100000. All classes need e >= 0.001 g: no class fits. |
| MI-01 | R 76-1 3.3 / Table 3 for each partial range (multi-interval; our reading: a class fits when it fits every range) | classes {"d":2,"e":2,"max":15000,"ranges":[{"d":2,"max":6000},{"d":5,"max":15000}]} | ["III"] | Retail scale 6 / 15 kg, d = e = 2 / 5 g. Range 1: n1 = 6000 / 2 = 3000; range 2: n2 = 15000 / 5 = 3000. II needs n >= 5000 (e >= 0.1 g): no. III: range 1 with 0.1 <= e <= 2 g needs 100 <= n <= 10000: yes; range 2 with e >= 5 g needs 500 <= n <= 10000: yes. IIII needs e >= 5 g in range 1 (e1 = 2 g): no. |
| MI-02 | R 76-1 Table 6 (mpe in e of the partial range of the load) | mpe {"d":2,"e":2,"max":15000,"cls":"III","load":10000,"ranges":[{"d":2,"max":6000},{"d":5,"max":15000}]} | 2.5 | 10000 g is above 6000 g + 1 g (Max 1 + d1 / 2): range 2, e = 5 g. 10000 / 5 = 2000 e: 500 < m <= 2000 -> mpe 1 e = 5 g. In d of range 1 (2 g): 5 / 2 = 2.5 d. |
| MI-03 | R 76-1 Table 6 (mpe in e of the partial range of the load) | mpe {"d":2,"e":2,"max":15000,"cls":"III","load":5000,"ranges":[{"d":2,"max":6000},{"d":5,"max":15000}]} | 1.5 | 5000 g is in range 1, e = 2 g. 5000 / 2 = 2500 e: m > 2000 -> mpe 1.5 e = 3 g = 1.5 d (d of range 1 = 2 g). |
| MI-04 | R 76-1 Table 6, the boundary of a partial range | mpe {"d":2,"e":2,"max":15000,"cls":"III","load":6002,"ranges":[{"d":2,"max":6000},{"d":5,"max":15000}]} | 2.5 | 6002 g is above 6000 g + 1 g: range 2 (e = 5 g). 6002 / 5 = 1200.4 e: 500 < m <= 2000 -> mpe 1 e = 5 g = 2.5 d of range 1. (At 6000 g the load is still in range 1: 3000 e -> 1.5 e = 3 g = 1.5 d.) |
| MI-05 | R 76-1 A.4.4 (error of a reading, rounding d / 2 of the range of the load) | rowerr {"d":2,"e":2,"max":15000,"net":10005,"target":10000,"ranges":[{"d":2,"max":6000},{"d":5,"max":15000}]} | {"err":5,"errD":2.5,"u":1.25} | Error 10005 - 10000 = 5 g = 2.5 d of range 1 (2 g). The reading is rounded to d of range 2 (5 g): uncertainty 5 / 2 = 2.5 g = 1.25 d of range 1. |
More in the manual: regulated labs.