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)
