 very damaged and impaired young girl', largely out of control a good part of the time," the judge said.
"Leaving to one side her own wishes and feelings, the preponderance of all the evidence is clear that it would be in her best interests to have a termination."
The judge added that, in any event, if the girl were allowed to give birth, there was "very little chance" she would be allowed to keep her child.
He said a clinical psychologist showed the girl lacked capacity to decide for herself, having had "many difficulties in her life".
The girl also had the vocabulary of a child aged six, he added.
At the time of her mental health evaluation she had "set her mind against a termination," the court heard..
The psychiatrist who evaluated her said that, although the teenager would "understand termination and its effect", she did not have a "full understanding of what the pregnancy would involve."
He added that the girl's "unambiguous" hostility towards termination made enforcement of an abortion a bad option.
But Sir James said the girl's opposition to an abortion had wavered during the hearing.
"It was clearly appropriate for me to supply the necessary consent to enable the termination to proceed," he said.
Announcing his decision weeks after it was made, Sir James confirmed that the abortion had since taken place.
Last month, a different judge at the same court ruled another 13-year-old girl did have the mental capacity to decide for herself whether she should have an abortion.﻿//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace SchedulingClients.Core.ServicingServiceReference {
    using System.Runtime.Serialization;
    using System;
    
    
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
    [System.Runtime.Serialization.DataContractAttribute(Name="ServiceStateDto", Namespace="http://schemas.datacontract.org/2004/07/Scheduling.Services.Servicing.Dtos")]
    [System.SerializableAttribute()]
    public partial class ServiceStateDto : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
        
        [System.NonSerializedAttribute()]
        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
        
        [System.Runtime.Serialization.OptionalFieldAttribute()]
        private int BeneficiaryIdField;
        
        [System.Runtime.Serialization.OptionalFieldAttribute()]
        private int ExecutorIdField;
        
        [System.Runtime.Serialization.OptionalFieldAttribute()]
        private int TaskIdField;
        
        [global::System.ComponentModel.BrowsableAttribute(false)]
        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
            get {
                return this.extensionDataField;
            }
            set {
                this.extensionDataField = value;
            }
        }
        
        [System.Runtime.Serialization.DataMemberAttribute()]
        public int BeneficiaryId {
            get {
                return this.BeneficiaryIdField;
            }
            set {
                if ((this.BeneficiaryIdField.Equals(value)!= true)) {
                    this.BeneficiaryIdField = value;
                    this.RaisePropertyChanged("BeneficiaryId");
                }
            }
        }
        
        [System.Runtime.Serialization.DataMemberAttribute()]
        public int ExecutorId {
            get {
                return this.ExecutorIdField;
            }
            set {
                if ((this.ExecutorIdField.Equals(value)!= true)) {
                    this.ExecutorIdField = value;
                    this.RaisePropertyChanged("ExecutorId");
                }
            }
        }
        
        [System.Runtime.Serialization.DataMemberAttribute()]
        public int TaskId {
            get {
                return this.TaskIdField;
            }
            set {
                if ((this.TaskIdField.Equals(value)!= true)) {
                    this.TaskIdField = value;
                    this.RaisePropertyChanged("TaskId");
                }
            }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
            if ((propertyChanged!= null)) {
                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }
    }
    
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="ServicingServiceReference.IServicingService", CallbackContract=typeof(SchedulingClients.Core.ServicingServiceReference.IServicingServiceCallback))]
    public interface IServicingService {
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService/GetAPISemVer", ReplyAction="http://tempuri.org/IService/GetAPISemVerResponse")]
        GAAPICommon.Core.Dtos.ServiceCallResultDto<GAAPICommon.Core.Dtos.SemVerDto> GetAPISemVer();
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService/GetAPISemVer", ReplyAction="http://tempuri.org/IService/GetAPISemVerResponse")]
        System.Threading.Tasks.Task<GAAPICommon.Core.Dtos.ServiceCallResultDto<GAAPICommon.Core.Dtos.SemVerDto>> GetAPISemVerAsync();
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISubscriptionService/SubscriptionHeartbeat", ReplyAction="http://tempuri.org/ISubscriptionService/SubscriptionHeartbeatResponse")]
        void SubscriptionHeartbeat(System.Guid guid);
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISubscriptionService/SubscriptionHeartbeat", ReplyAction="http://tempuri.org/ISubscriptionService/SubscriptionHeartbeatResponse")]
        System.Threading.Tasks.Task SubscriptionHeartbeatAsync(System.Guid guid);
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IServicingService/GetOutstandingServiceRequests", ReplyAction="http://tempuri.org/IServicingService/GetOutstandingServiceRequestsResponse")]
        GAAPICommon.Core.Dtos.ServiceCallResultDto<SchedulingClients.Core.ServicingServiceReference.ServiceStateDto[]> GetOutstandingServiceRequests();
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IServicingService/GetOutstandingServiceRequests", ReplyAction="http://tempuri.org/IServicingService/GetOutstandingServiceRequestsResponse")]
        System.Threading.Tasks.Task<GAAPICommon.Core.Dtos.ServiceCallResultDto<SchedulingClients.Core.ServicingServiceReference.ServiceStateDto[]>> GetOutstandingServiceRequestsAsync();
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IServicingService/SetServiceComplete", ReplyAction="http://tempuri.org/IServicingService/SetServiceCompleteResponse")]
        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(GAAPICommon.Core.Dtos.ServiceCallResultDto<SchedulingClients.Core.ServicingServiceReference.ServiceStateDto[]>))]
        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(GAAPICommon.Core.Dtos.ServiceCallResultDto<GAAPICommon.Core.Dtos.SemVerDto>))]
        GAAPICommon.Core.Dtos.ServiceCallResultDto SetServiceComplete(int taskId);
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IServicingService/SetServiceComplete", ReplyAction="http://tempuri.org/IServicingService/SetServiceCompleteResponse")]
        System.Threading.Tasks.Task<GAAPICommon.Core.Dtos.ServiceCallResultDto> SetServiceCompleteAsync(int taskId);
    }
    
