[{"data":1,"prerenderedAt":132},["ShallowReactive",2],{"project:pabx-cdr-analysis":3,"project-index":61},{"id":4,"title":5,"aTitle":6,"body":7,"categories":41,"description":43,"extension":44,"image":45,"images":46,"link":45,"meta":47,"navigation":48,"order":49,"path":50,"role":51,"seo":53,"slug":54,"stem":55,"summary":43,"tags":56,"team":59,"thumb":45,"__hash__":60},"projects\u002Fprojects\u002F1024_pabx_cdr.md","PABX call record analysis - Imraan","PABX call record analysis",{"type":8,"value":9,"toc":37},"minimark",[10,23,26,34],[11,12,13,14,18,19,22],"p",{},"An analysis tool for call detail records coming out of ",[15,16,17],"strong",{},"Grandstream"," and ",[15,20,21],{},"Asterisk"," phone systems. The interface is Next.js; the processing side is Python, which is the right tool for pulling CDRs apart and aggregating them.",[11,24,25],{},"A PABX will happily record every call it handles and then leave you with a table nobody can read. The value is not in storing the records — the phone system already does that — it is in turning them into the questions people actually ask: how long callers wait before anyone picks up, how many calls are abandoned and at what point, which extensions carry the load, and how any of that shifts by hour and by day.",[11,27,28,29,33],{},"The awkward part of CDR work is that the raw records are per-leg, not per-call. A single conversation can appear as several rows once it has been transferred, parked, or routed through a queue — so before you can count anything you have to decide what one call ",[30,31,32],"em",{},"is",", and then reassemble it consistently. Most of the effort went there rather than into the charts.",[11,35,36],{},"This one is internal and can't be shown.",{"title":38,"searchDepth":39,"depth":39,"links":40},"",2,[],[42],"Web app","Call detail record analysis over Grandstream and Asterisk phone systems","md",null,[],{},true,1024,"\u002Fprojects\u002F1024_pabx_cdr",[52],"Fullstack developer",{"title":5,"description":43},"pabx-cdr-analysis","projects\u002F1024_pabx_cdr",[57,58,21],"Next.js","Python",[],"3IfYArw0GEtvY9qZtWGe8YRr_VDZvDNhqebdkvNQslg",[62,65,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129],{"slug":63,"aTitle":64},"wc2026-predictions","ADK Synergy World Cup 2026 predictions",{"slug":54,"aTitle":6},{"slug":67,"aTitle":68},"postgres-ha","PostgreSQL high availability platform",{"slug":70,"aTitle":71},"ai-narration","AI narration and text-to-speech platform",{"slug":73,"aTitle":74},"cloud-player","Cloud Player",{"slug":76,"aTitle":77},"brainspine-app","Maldives BrainSpine conference app",{"slug":79,"aTitle":80},"adk-token-display","ADK Hospital doctors room token display",{"slug":82,"aTitle":83},"adk-signage","ADK Hospital signage TV app",{"slug":85,"aTitle":86},"adk-qms","ADK Hospital queue management system",{"slug":88,"aTitle":89},"adk-hbot","ADK Hospital Hyperbaric Oxygen Therapy",{"slug":91,"aTitle":92},"clinical-incident-report-portal","ADK Hospital clinical incidents portal",{"slug":94,"aTitle":95},"porter-app","ADK Hospital porter app",{"slug":97,"aTitle":98},"majeedi-run","Majeedi Run portal",{"slug":100,"aTitle":101},"cmca-website","China Maldivian Cultural Association website",{"slug":103,"aTitle":104},"brainspine23","Brain & Spine conference 2023 website",{"slug":106,"aTitle":107},"sih-e-library","Shafi’a Institute of Health e-library",{"slug":109,"aTitle":110},"adk-lucky-draw","ADK Hospital lucky draw app",{"slug":112,"aTitle":113},"acc-cms","Anti-Corruption Commission Case Management System",{"slug":115,"aTitle":116},"brainspine22","Brain & Spine conference 2022 website",{"slug":118,"aTitle":119},"icom-tours","iCom Tours website and portal",{"slug":121,"aTitle":122},"dhuvaahithun-app","Dhuvaahithun app",{"slug":124,"aTitle":125},"jsc-cms","Judicial Service Commission Case Management System",{"slug":127,"aTitle":128},"motca","Ministry of Transport and Civil Aviation website",{"slug":130,"aTitle":131},"aonews","AO News",1786359403336]