
A true picture of how busy we are IT IS a common and justifiable complaint by police forces across the country - they only get the credit for half the work they do . Scores of incidents each day , many of them reports of anti-social behaviour , go unaccounted for because they are not classed as crime . The result is a false picture of just how busy the police service is . Now , thanks to Cambridgeshire and 10 other forces , all that could be about to change . From the start of next month ( April ) , the 11 will take part in a pilot scheme aimed ultimately at the introduction of a National Standard for Incident Recording ( NSIR ) . NSIR is widely seen as a natural progression from the controversial National Crime Recording Standard , enabling performance management to also focus on the non-crime work which occupies so much of police time . The pilot scheme , and a second pilot which is intended to include all forces from October this year , is aimed at the national adoption of NSIR in April next year . That will give the first comprehensive and accurate picture of police work at local and national levels , catering for all performance information needs . Cambridgeshire and the 11 other chosen forces ' role in the first pilot scheme will be to test and challenge the design of NSIR to assess its value , including its ability to provide a customer- focused approach . The Home Office , which is driving NSIR , has identified 57 incidents to target during the pilot . These are split into four categories - road related , anti-social behaviour , public safety and crime related . It is demanding compliance with a minimum data standard which ' does create a major impact on our current recording systems , ' says the force 's NSIR Pilot Support Officer , Sgt Gordon Lilley . His objectives include identifying all sources of information ; analysing the procedure for information capture and reviewing them for compliance with NSIR - and identifying information that is not yet captured . ' NSIR must not be viewed as yet another layer of bureaucracy , ' says Gordon . ' Our job as a force involved in the pilot scheme is to truly and thoroughly test it to ensure that it works properly and performs two vital functions - to give us the information we need to resource tasks and to demonstrate just how busy we are . ' For the first time , once NSIR is properly up and running , everyone will have a complete picture of the many and various demands on the police service . ' Just another day . . . SO JUST how busy is the force ? Our CC3 system records more than 250,000 incidents every year . Under NSIR , many of those incidents will meet the criteria for recording as anti-social behaviour - one of the main target areas identified by the Government for action . A snapshot survey in England and Wales on September 10 last year recorded 66,107 such incidents in 24 hours . In Cambridgeshire , the tally for the day was 203 , and included reports ranging from drug dealing to rubbish dumping . Top of the league in the county that day were reports of intimidation or harassment . There were 35 . 