
Most liaison psychiatry posts are now managed and administered by a mental health trust . The consultant is therefore likely to be employed by the mental health trust although many people believe this is not an optimum arrangement . There is usually a Service Level Agreement ( SLA ) between the mental health trust and the acute general hospital trust for the provision of a liaison psychiatry service . In a few hospitals the liaison psychiatry service forms part of the acute general hospital trust and is managed by that organisation . The funding arrangements should be clarified . If the liaison psychiatry service forms part of a Service Level Agreement it should be established what budget the acute trust makes for the service and what level of provision is agreed . Ideally the budget for the liaison psychiatry service should be identified and the consultant should have considerable influence in determining how this is deployed . The joint report on " The psychological care of medical patients " ( RCP and RCPsych , 1995 ) recommended that funding for a liaison psychiatry service should come from a medical and surgical budget but should be managed within a mental health service . There should be one manager who has direct responsibility for the service , who works with the liaison psychiatry consultant and who reports to the relevant Chief Executive . After you have started your post it is helpful to arrange business meetings every four to six weeks with managers from both the acute ( general medical ) and community trust ( psychiatry ) . These meetings can be extremely helpful in terms of resolving issues between the general hospital and psychiatry . They can also be helpful in terms of future expansion of the service . Facilities Accommodation is a vital component of the service and should be located in a convenient position within the main general hospital where the service is provided . A consultant 's office is essential . This should be identified and shown to the consultant before taking up the appointment . It is also essential that there is secretarial and administrative support with appropriate office accommodation and space for filing and record keeping . One secretary should be identified to provide secretarial support to the consultant . It should be explicitly stated in the job description which consultant has clinical responsibilities if a patient needs to be admitted to a psychiatric ward . Likewise , if a patient is admitted to a medical ward , the medical responsibility for that patient should be clearly stated . If the post holder is to retain medical responsibility for patients admitted to psychiatric services , the location of the beds should be identified and the number specified although it is likely that the full bed complement will not always be taken up . An acute adult psychiatry admission ward is often not ideal for the management of patients with combined medical and psychiatric problems but very few services have access to a special ward devoted to this type of patient . In many cases it is preferable to manage patients with physical and psychiatric co-morbidity on a medical ward , ideally a side room , with special psychiatric nursing ( RMN status ) provided for as long as is required . In these circumstances the funding for the RMN should be clarified . It is usual practice for this to come from the budget of the medical division from which the patient has been referred . If the liaison psychiatrist has no access to in-patient beds there must be an agreement with psychiatric colleagues to admit patients who require in-patient care to the relevant catchment area psychiatric ward . The medical responsibility of patients in the Accident & Emergency Department should be clearly established and stated in the job description . The position of patients seen by psychiatric nurses , but not by psychiatric junior staff , should be explicitly stated . 