Expected results for asr-acd-sample-cdr.csv (18 October 2026) 1. Independent recount (python3 expected_independent.py): rows 20 legs 18 rejected [(12, 'duration or billsec not a number'), (13, 'too few columns')] TOTAL {'calls': 17, 'answered': 10, 'busy': 2, 'no_answer': 2, 'failed': 3, 'asr': 58.8, 'ner': 82.4, 'billed_s': 614, 'acd_s': 61.4, 'short_lt6': 1, 'zero_s': 1, 'time_to_answer_avg_s': 7.2} trunk PJSIP/carrier-a {'calls': 8, 'answered': 5, 'busy': 1, 'no_answer': 1, 'failed': 1, 'asr': 62.5, 'ner': 87.5, 'billed_s': 239, 'acd_s': 47.8, 'short_lt6': 1, 'zero_s': 1, 'time_to_answer_avg_s': 6.2} trunk PJSIP/carrier-b {'calls': 8, 'answered': 4, 'busy': 1, 'no_answer': 1, 'failed': 2, 'asr': 50.0, 'ner': 75.0, 'billed_s': 340, 'acd_s': 85.0, 'short_lt6': 0, 'zero_s': 0, 'time_to_answer_avg_s': 9.0} trunk PJSIP/1003 {'calls': 1, 'answered': 1, 'busy': 0, 'no_answer': 0, 'failed': 0, 'asr': 100.0, 'ner': 100.0, 'billed_s': 35, 'acd_s': 35.0, 'short_lt6': 0, 'zero_s': 0, 'time_to_answer_avg_s': 5.0} hour 10:00 {'calls': 9, 'answered': 6, 'busy': 1, 'no_answer': 1, 'failed': 1, 'asr': 66.7, 'ner': 88.9, 'billed_s': 299, 'acd_s': 49.8, 'short_lt6': 1, 'zero_s': 1, 'time_to_answer_avg_s': 7.5} hour 11:00 {'calls': 8, 'answered': 4, 'busy': 1, 'no_answer': 1, 'failed': 2, 'asr': 50.0, 'ner': 75.0, 'billed_s': 315, 'acd_s': 78.8, 'short_lt6': 0, 'zero_s': 0, 'time_to_answer_avg_s': 6.8} UNGROUPED {'calls': 18, 'answered': 10, 'busy': 2, 'no_answer': 2, 'failed': 4, 'asr': 55.6, 'ner': 77.8, 'billed_s': 614, 'acd_s': 61.4, 'short_lt6': 1, 'zero_s': 1, 'time_to_answer_avg_s': 7.2} 2. The calculator (cdr-quality-summary.js of 18 Oct 2026), shareable summary: CDR quality summary (srvscripts.com/tools/asr-and-acd-calculator/) Source: FreePBX / Asterisk CDR database export, 20 rows, 17 calls (18 legs grouped by call id), 2 row(s) rejected as malformed Calls 17 | answered 10 | busy 2 | no answer 2 | failed 3 ASR 58.8% | NER 82.4% | ACD 1:01 | billed 10 min | short (<6 s) 10% | 0 s answered 10% | avg time to answer 7.2 s INFO Only 17 calls: percentages move a lot with a few calls; use a day or more of traffic before drawing conclusions. WARN 17.6% of calls FAILED (congestion, unavailable, rejected). That is usually the trunk, the carrier, a route or a channel limit, not the people you call. WARN 10% of answered calls lasted 0 seconds. Check for calls answered and dropped at once (fax, robocall filters, answer supervision on the trunk). Per trunk: PJSIP/carrier-a: 8 calls, ASR 62.5%, NER 87.5%, ACD 0:48, failed 1 PJSIP/carrier-b: 8 calls, ASR 50%, NER 75%, ACD 1:25, failed 2 PJSIP/1003: 1 calls, ASR 100%, NER 100%, ACD 0:35, failed 0 Per hour: 10:00: 9 calls, ASR 66.7%, NER 88.9%, ACD 0:50 11:00: 8 calls, ASR 50%, NER 75%, ACD 1:19 Rejected rows: row 12 (duration "abc" is not a plausible number of seconds); row 13 (only 3 columns)