
Committee on the Elimination of Discrimination against Women Twenty-seventh session 3-21 June 2002 Item 5 of the provisional agenda* Implementation of article 21 of the Convention on the Elimination of All Forms of Discrimination against Women Report provided by specialized agencies of the United Nations on the implementation of the Convention in areas falling within the scope of their activities ** The document was submitted late to the conference services without the explanation required under paragraph 8 of General Assembly resolution 53/208 B , by which the Assembly decided that , if a report is submitted late , the reason should be included in a footnote to the document . Note by the Secretary-General** Addendum World Health Organization On behalf of the Committee on the Elimination of Discrimination against Women , on 17 April 2002 , the Secretariat invited the World Health Organization ( WHO ) to submit to the Committee a report on information provided by States to WHO on the implementation of the Convention on the Elimination of All Forms of Discrimination against Women , in areas falling within the scope of its activities , which would supplement the information contained in the reports of the States parties to the Convention to be considered at the twenty-seventh session . Other information sought by the Committee refers to activities , programmes and policy decisions undertaken by WHO to promote the implementation of the Convention . The report annexed hereto has been submitted in compliance with the Committee 's request . Annex Report of the World Health Organization to the Convention on the Elimination of All Forms of Discrimination against Women at its twenty-seventh session Comments on the health of women in States parties presenting initial reports : the Congo , Saint Kitts and Nevis , and Suriname Introduction Women 's health is an issue given some prominence both directly and indirectly in the Convention on the Elimination of All Forms of Discrimination against Women and the potential negative effects of discrimination on the health of women is a theme that appears in various places . Article 12 explicitly sets forth the obligation of States Parties to take all appropriate measures to eliminate discrimination against women in the field of health care in order to ensure , on a basis of equality of men and women , access to health-care services , including those related to family planning . Other articles strengthen and broaden this article , calling for the elimination of discrimination against women in a number of health-related fields , for example , articles 10 ( education ) , 14 ( rural women ) and 16 ( marriage and family relations ) . The General Recommendations , likewise , have expanded and specified other issues which the Committee on the Elimination of Discrimination against Women ( CEDAW ) also believes it is important to monitor for discrimination and which are related to health , for example , Nos. 12 ( 1989 ) and 19 ( 1992 ) on violence against women , No. 14 ( 1990 ) on female circumcision , No. 15 ( 1990 ) on avoidance of discrimination against women in national strategies for the prevention and control of AIDS , No. 18 ( 1991 ) on disabled women and No. 24 ( 1999 ) , the Committee 's most extensive comments on women 's health . General Recommendation No. 24 , completely related to health , is of particular importance . This recommendation places the health of women in a comprehensive framework and takes a lifespan approach , recognizing the importance of the age-specific needs of women at various points throughout life . The World Health Organization ( WHO ) is pleased to submit this report with information which may complement the reports of States parties and draw attention to some issues related to women 's health that may merit the special attention of the Committee . Information for each country is grouped under various headings — basic data , children , adolescents , women , older women and conclusions — selecting , in each case , information particularly relevant to the health of women of all ages . It is to be regretted that data on a number of issues important to the health of women , particularly poor women , tends to be inadequate or absent altogether from much of the standard published information about women in many countries . For example , • While WHO and a number of other United Nations agencies are deeply concerned about the issues of trafficking in women and children and there are suggestions it may be an important issue to some of the countries reporting to CEDAW , there is little systematic country-specific information available about either the volume or the threats to the health and well-being of women who are victims of trafficking ; • Two other important issues which are underrepresented are the overall incidence , impact and male-female distribution of child labour and occupation-related health problems of women in both formal and informal work settings ; • Data is scarce on women with disabilities and other women who live or work under circumstances that place them at particularly high risk of disease or disability , such as , inter alia , migrant workers , refugees and other socially displaced women , and sex workers . These are issues which could usefully be raised in connection with every country . Finally , it would be extremely useful if the Committee should wish to emphasize the importance of women 's health beyond the long-standing concern with reproductive health . For example , many countries have little systematic disaggregated data available on women 's health issues such as : • Communicable diseases , including malaria and tuberculosis ; • Cardiovascular diseases ( increasingly important as killers of women ) ; • Mental health problems ; • Lifestyle-related disability and death including substance abuse ( smoking and alcohol ) ; • Osteo-arthritis , auto-immune diseases and others which are particularly important as contributors to disability and death of older women . WHO , as a member of the United Nations system , takes the CEDAW reporting process seriously and considers it to be an important opportunity to strengthen work related to women 's health . With a view to strengthening this work , the Department of Gender and Women 's Health of WHO is preparing a publication intended to help staff working with counterpart Governments in the preparation of the health aspects of the country report to the Committee . The document has been developed with input from all WHO regional offices and technical departments and in collaboration with Rights and Humanity . It is hoped the members of CEDAW will also provide input to the draft during the twenty-seventh session . The Congo General The Congo ( Brazzaville ) has a total population of 3 million people1 and a population growth rate of 3.1 per cent.2 The population is almost equally divided between women and men , with the women making up 51 per cent of the total . Life expectancy at birth is comparatively low . However , as in many other countries , women have longer life expectancy ( 53 years ) than men ( only 50 years).3 The majority of the people of the Congo live in urban areas ( an estimated 65.4 per cent in 2000).4 The urban population growth rate for 2000-2005 was estimated to be 3.96 per cent per year , slightly lower than the regional ( Middle Africa ) figure of 4.40 per cent per year for the same period.5 According to World Bank figures , the Congo falls in the low income category.6 In 1999 , the gross national product per capita was US$ 670.7 Total expenditure on health in 1998 was estimated to be 3 per cent of the gross domestic product , slightly higher than in 1997.8 The overall situation of the Congo is challenging in terms of health and all aspects of human development . This fact was commented upon in some detail in the concluding observations of the Committee on Economic , Social and Cultural Rights.9 Civil war led to massive population displacement as well as the disruption of the national economy and the production and marketing of food . This had a profound , negative impact on the situation of daily life . Health and health systems , likewise , have been affected . Children Nearly half of the population of the Congo ( 46.3 per cent ) is under 15 years of age.10 Almost one quarter ( 23 per cent ) are adolescents between the ages of 10 and 19.11 The infant mortality rate ( probability of an infant dying before 1 year of age ) is 87.2 per 1,000 live births for girls and 100 for boys.12 The child mortality rate ( probability of a child dying before reaching his or her fifth birthday ) is estimated to be 122 for girls and 134 for boys.13 For children who survive , problems of health and nutrition continue and are serious . Malnutrition runs high , immunization coverage is low and the impact of AIDS is increasing . The proportion of children below 5 years of age suffering from wasting is about the same as the regional average of 10 per cent.14 However , 45 per cent suffer from moderate and severe stunting , 8 points higher than the regional levels and 13 points higher than the world levels.15 Immunization levels reach only 50 per cent or lower . Unfortunately , neither nutrition nor immunization figures offer data disaggregated by sex . Table 1 Child immunization rates in the Congo , 1995 and 200016 HIV/AIDS is having a devastating impact both directly and indirectly on the children of the Congo . At the end of 1999 , 4,000 children below 15 years of age were living with HIV and 35,103 had been orphaned by the epidemic , losing either their mother or both parents to AIDS.17 One must assume that the numbers have increased significantly since then . Comment These data have important implications for national policy as well as for the design and development of public services , particularly in fields such as education and health . With little disaggregated data available it is difficult to know whether there are problems of particular seriousness for girls as contrasted with boys . The Committee may therefore wish to emphasize to the representatives of the Congo the importance of ensuring equity and equality in the promotion of child health and the necessary infrastructure . The impact of stunting , now affecting 45 per cent of the children under 5 , is lifelong and can be irreversible . Similarly , the low immunization levels mean that the majority of Congolese children are exposed to avoidable and , in some cases , fatal disease and disability . The cost of these low immunization rates is high for both the individual and the nation in premature death and loss of dignity and productivity through lifelong disability . In view of this fact , any discussion of health should emphasize the urgency of appropriate management of health and nutrition in the early years of a child 's life , both male and female . Adolescents In the field of health , early pregnancy and HIV/AIDS are the two most conspicuous issues about which there is solid data indicating the need for attention and action . During the period 1995-2000 , there were 141 births per 1,000 females from 15 to19 years of age,18 about the same as the regional figures ( 143 per 1,000)19 but considerably higher than desirable in terms of the health and development of both the mothers and the children . Figures are not available on adolescents with HIV , but it is noteworthy that in the 15 to 24 age group , an estimated 6.5 per cent of girls/women are HIV positive , while only 3.2 per cent of boys/men are so.20 The data on teen pregnancy , HIV infection and disparity in rates of infection between boys and girls all demonstrate the urgency of action to improve the availability of and access to appropriate health information and services , particularly addressing the reproductive health needs of adolescent girls . Bearing in mind that the gross secondary school enrolment ratio of girls is only 45 per cent,21 such action would need to be focused on mapping the activity of adolescent girls to determine where and how best to reach them and help them to be empowered to take appropriate measures . The issue of the impact of civil war and its effect on many aspects of life has been highlighted in discussions of the Committee on Social , Economic and Cultural Rights . Related to this , an additional issue relevant to the health of adolescent girls in the Congo is the question of their involvement in past or present military activity as combatants or part of the support system for combatants . Unfortunately , there is little relevant hard data available . Comment Threats to the health of adolescent girls are many , but among the most serious are those related to sexual and reproductive health and behaviour . Data related to teen pregnancy and HIV infection suggests that gender-prescribed roles place girls at disproportionate risk of pregnancy and ill health and leave them little latitude to protect themselves . In this connection and in line with paragraph 18 of General Recommendation No. 24,22 the Committee may wish to pursue discussion with the representatives of the Congo , focusing on availability of gender and age-specific reproductive health information and services . Activity to promote the evolution and acceptance of more equitable and balanced relations between the sexes could contribute to the effectiveness of such programmes . In line with the stipulations of the Convention on the Rights of the Child and the healthy development of girls , all involvement of girls in military activity should be firmly discouraged . The Committee may therefore wish to explore the availability of programmes of rehabilitation and efforts to prevent the involvement of girls in military or quasi-military activity which may be damaging to their mental or physical health and development . Women Women share with the whole community the burdens resulting from life under conditions of poverty , insecurity , civil war and social disruption . Women are , in fact , disproportionately affected by all these conditions , which place their mental and physical health at great risk . Reports of both the Human Rights Commission and the Committee on Economic , Social and Cultural Rights have called attention to widespread problems of domestic violence , women 's victimization by armed men , serious disruptions of food production and the paucity of health services in both urban and rural areas . All of these must be assumed to contribute to the generally high fertility rates ( 6.3 for the Congo in 200023 as compared with a global level of 2.68)24 and low levels of health among women . However , specific data is seriously limited . Added to this already difficult situation , HIV/AIDS is moving rapidly through the population . At the end of 1999 , it was estimated that 6.43 per cent of the population was infected , 45,000 women and 37,000 men.25 Women at risk of special health problems are those among the population of concern ( refugees , asylum-seekers and returned refugees ) . As of the end of 1999 , they totalled more than 63,000 ( 53.8 per cent of the total population of concern).26 Comment Serious attention is needed to find ways progressively to address the special health risks , needs and vulnerabilities of women in the Congo , both in the general population and in refugee and other temporary living situations . Wherever they are located , the women are entitled to reasonable access to basic health information and services and adequate protection to ensure preservation of their dignity and their physical integrity . The Committee may , therefore wish to enquire about both immediate and longer-term plans to carry out programmes and build community-based infrastructure and the necessary support systems to ensure that the women of the Congo have access to increasingly effective health services in accordance with standards set forth in the General Recommendation on health . Given the extreme hardships that much of the population has undergone in recent years , it would be important to ensure inclusion of the views of the women themselves in the design , priority-setting and development of health services . Saint Kitts and Nevis Statistics on Saint Kitts and Nevis are not easy to come by and the country report had not yet been posted on the Internet at the time the present report was written . Because of this , the following analysis is limited in detail and only a few issues are raised for the consideration of the Committee . General Saint Kitts and Nevis has a total population of 38,000 people27 and , during the decade 1990-2000 , had a negative population growth rate ( -0.8).28 Sixty-six per cent of the people live in rural areas.29 Life expectancy at birth is 72 years for women and 66.1 years for men.30 The proportion of urban population to total population ( 34.1 per cent)31 is considerably lower in Saint Kitts and Nevis than in the rest of the Caribbean ( 63 per cent).32 According to the World Bank , Saint Kitts and Nevis falls in the upper middle income category with an annual GNP per capita of $6,420.33 Children and adolescents Figures on both infant and child mortality reflect the biological advantage of girls over boys . The infant mortality rate is 17 for girls and 23 for boys ; 34 the child mortality rate is 22 for girls and 25 for boys.35 Although , unfortunately , the data is not disaggregated for boys and girls , immunization rates are good : 99 to 100 per cent of the children are fully immunized by one year of age.36 However , notwithstanding the relatively good economic circumstances of the country , nutritional levels , at least during the five-year period 1995-2000 , were not good in either absolute or relative terms ; they ran the same or higher than world levels and markedly higher than regional levels . Table 2 Prevalence of child malnutrition in Saint Kitts and Nevis ( Percentage of children under five years of age)37 Such high malnutrition levels must be a matter of concern . Comment The Committee may wish to encourage the State party to investigate the causes of malnutrition , giving particular attention to establishing if and what kind of differences there may be in the nutritional status of boys and girls and whether there are any discriminatory feeding patterns which negatively influence a girl 's chances of being well nourished . Women Little data on specific health conditions of women in Saint Kitts and Nevis are generally published . There are , however , data on maternal mortality indicating the 1998 rate was 130 per 100,000 live births.38 Comment In global terms , the maternal mortality rate is comparatively high . The Committee may therefore wish to enquire what factors led to this rate and the State party may be encouraged to take action to improve available services and information , including through community-based health services , with a view to improving this situation for women . The Committee may also wish to call attention to the special needs of older women and those with disabilities . Suriname General The population of Suriname totals 417,000 people,39 almost equally divided between men and women ( women = 50.36 per cent ) . The annual population growth rate is 0.4 per cent.40 Thirty-one per cent of the population is below the age of 15 years ( 127,200 people).41 Nearly one quarter of the population ( 23 per cent ) is made up of adolescents from 10 to 19 years of age.42 There is some difference in life expectancy at birth between women and men , with women expecting longer lives ( 73.5 years ) than men ( 68 years).43 Nearly three quarters of the people of Suriname live in urban areas ( 74.2 per cent).44 According to World Bank classifications , Suriname fell in the lower middle income group of nations in 2000.45 Although there is data in the public domain about health in Suriname , including information specifically about women 's health , much of it refers to studies in a particular institution or locality . Much of it was also found to be six or more years old . For these reasons , it is hard to draw informed , overarching conclusions about the status , trends and challenges facing the people of Suriname in the field of women 's health . These notes attempt to suggest areas of interest or concern but , of necessity , are limited in scope . Children and adolescents As is true in most of the world , infant mortality rates , the proportion of children who die before they reach the age of one , are different between girls and boys , with the situation being better for girls . The rate for girls is 19 per thousand live births ; for boys , it is 27 per thousand live births.46 This is also the case for child mortality rates ( the proportion of children who die before reaching the age of 5 per thousand live births ) . The rate was 27 for girls and 29 for boys,47 an improvement over 1997 when they were considerably higher ( respectively , 39 and boys 51).48 Unfortunately , good , comprehensive , disaggregated data on child nutrition seemed unavailable for Suriname . Data on education shows equity between girls and boys , with girls making up 49.5 per cent of the primary school students ( equal to their percentage of that age population).49 General concerns about children have been well covered in the Suriname report to the Committee on the Rights of the Child and in the concluding observations of the Committee.50 Health-related issues of particular concern , which are rooted in discrimination , are violence and sexual exploitation of girls , beginning with young children and continuing into adolescence . While some variation exists among different ethnic communities , there is no question that HIV/AIDS is a serious problem that has an impact on children and older adolescents . The female-male distribution of HIV , particularly among adolescents and young adults , highlights the difficulty girls have protecting themselves . It is estimated ( 2001 ) that among the population from 15 to 24 years of age , 0.79 per cent of boys are HIV positive , while the corresponding figure for girls is 1.33 per cent , nearly twice that of boys.51 At the end of 1999 , there were also 110 children below 15 years of age living with AIDS ( sex not reported).52 Furthermore , 352 children had been orphaned by AIDS.53 Although recent figures were hard to come by , it is likely that smoking is a serious and growing problem among girls . Already in 1987-1988 , smoking prevalence among young people from 10 to 19 years of age was estimated to be 12 per cent for girls and 36 per cent for boys.54 If Suriname has followed patterns common elsewhere , the advertising industry will have actively targeted young people and those figures are likely to have grown significantly . Knowing that the process of addiction grows more quickly among young girls than boys , one must assume many of these girls will be lifelong smokers , with negative health effects accumulating throughout later years of life and , should the girls become pregnant , smoking will have a negative impact on the health of the baby they will bear . Comment Three issues of particular importance which would benefit from the Committee 's attention are domestic violence , with particular attention to abuse , including sexual abuse of girls ; information , care and service related to HIV among adolescents , particularly adolescent girls ; and smoking . Activities are needed to encourage , particularly among younger adolescents , empowerment of girls , more sexual responsibility among boys and more equitable and mutually respectful relations . Such activity would have a positive impact in both the short and long run , including a positive intergenerational impact , as children are less likely to be raised in families affected by violence or the HIV pandemic . Additionally , the Committee may wish to encourage the State party to attempt regular nationwide updates of disaggregated data on issues such as nutrition , smoking and domestic violence as the basis for gender and situation analysis leading to interventions to promote and protect the health of young people . Women Access to health-care services among minority and poor women is limited , a negative factor related to women 's health . Problems of access appear to stem from poverty , uneven distribution of service ( urban and interior areas ) and population . Gender-based violence is a serious problem , one which has been noted for at least the last decade , but progress in addressing it has been limited . A study carried out in 1990 found that 95 per cent of all sexual offences registered by the Emergency Department of the Academic Hospital were women : 20 per cent of the victims were below 10 years of age.55 While the Government has taken modest steps to improve the official response to domestic violence , including some training for police , the availability of a social worker in some places , the coverage has been limited and girls and women of all ages continue to be subject to abuse . The women 's movement has also been active and by the late 1990s some progress was reported . A police study ( 1996-1997 ) indicated some decline in violence,56 although women were still victims in 76.7 per cent of the incidents of domestic violence reported in 1997.57 Debate , nonetheless , continues about the appropriateness of public policy entering an area of private relations such as domestic violence . This may slow official action in this field and permit continuing violence against women . HIV is an increasingly serious problem in Suriname . Problems of poverty and changes in some norms and values have contributed to an increase in prostitution.58 Moreover , men 's continuing decisive power over the use of condoms has meant that activity to control and treat sexually transmitted infections , including HIV , have had limited benefits for women.59 In the late 1990s , the Dermatological Service indicated 1 in 5 street sex workers tested to be HIV positive.60 The overall infection rate of adults was 1.26 per cent in 1999,61 considerably higher than the regional ( Latin America ) rate of 0.5 per cent in 2001.62 Exhibiting a pattern common to many parts of the world , among younger people from 18 to 25 years of age , the majority of those who are HIV positive are female , while among those over 25 years of age , more males are infected.63 By the end of 1999 , women made up 33 per cent of all people aged 15 to 49 living with AIDS.64 The maternal mortality ratio for Suriname was estimated to be 230 per 100,000 live births for the early 1990s , well below the global average of 400 per 100,000 live births.65 A preliminary WHO analysis for 2000 suggests it is now much lower , around 112 per 100,000 live births . Nonetheless , given the fact that 98 per cent of deliveries are attended by trained health personnel,66 further investigation would be in order as to the distribution and causes of maternal mortality as well as options for affordable , acceptable interventions to reduce that figure . Comment The multi-ethnic make-up of Suriname and unequal distribution of population complicate the implementation of public policy and the achievement of equity among women with regard to access and utilization of public services . Inequities in power relations between men and women also make maintenance of good health difficult for some women who are in relationships which place their sexual , mental and physical health at risk and leave them little recourse . The Committee may wish , therefore , to encourage the State party to give particular attention to the development and implementation of stronger public policy in these areas as well as to issues of equity in the accessibility and utilization of public services . Data and reports on HIV infections and domestic violence indicate continuing , unresolved challenges related to gender relations . It is regrettable that no recent data has been found on smoking among adolescents or adults . This has long-term health impacts and advertisers often capitalize on and reinforce negative gender stereotypes to promote their product . The Committee may therefore wish to encourage the State party to investigate and take action to monitor and control rigorously access to and use of smoking material . Nutrition and mental health are two other fields of considerable impact related to women 's health and well-being on which little current data was found . Older women Women over 60 years of age make up 9 per cent of the female population of Suriname.67 As elsewhere in the world , they outnumber men of the same age by a considerable number — there are 127 women for every 100 men 60 years of age or older and there are 132 women for every 100 men 80 years of age or older.68 While most people have access to some form of health insurance , the elderly and the poor have suffered most from the country 's economic problems , which have eroded the availability of services . Suriname is a country which has experienced a considerable outflow of population , especially those persons of productive age , and benefits from remittances and , sometimes , medicines sent home by family members employed abroad . Older women who do not have such networks , particularly those suffering from chronic diseases who need regular medical care or treatment , are particularly disadvantaged.69 Comment The State party is to be congratulated on its efforts to have insurance coverage for its people . However , the Committee may wish to encourage special efforts in times of hardship to identify people , particularly older women and the poor , who may need priority support and attention . 