' Copyright (C) 2025  P4pillon.org
'
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU Affero General Public License as
' published by the Free Software Foundation, either version 3 of the
' License, or (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
' GNU Affero General Public License for more details.
'
' You should have received a copy of the GNU Affero General Public License
' along with this program.  If not, see <https://www.gnu.org/licenses/>.
Imports System.Xml
Imports System.Drawing.Drawing2D
Imports System.Threading
Imports System.IO
Imports System.Globalization



Public Class COMPTOIR_MAIN

#Region "DECLARATION VARIABLES"
    Public mettre_en_Dus As Boolean
    Public ModeSecur As String 'argument pour Facturation()-->SIS_FormaterFactures()

    Private lignevente As Integer
    'Private lignevente_is_stupefiant As Boolean
    Public Nombre_de_Prestations As Integer

    Public ConfigXml As New XmlDocument
    Public ConfigXMLelementliste As XmlNodeList

    Public location_lpp_date_debut As String
    Public location_lpp_date_fin As String

    'Private Date_Droits_AMC As Date

    Public Choix_Facturation_TP_retour As Boolean
    Public FS_Papier As Boolean

    'Public ventetype_index_defaut As Integer
    Public ventetype_defaut As String

    Private TauxSNCF As Boolean
    Private Médecin_SCNCF_already_asked As Boolean

    Public STS_Affiche_sortie_result As Boolean

    Public Valide_VenteCells As Boolean

    'fiche info 118 Limitation du nombre d’enregistrements de types 4 dans une facture
    Private FI118_nombre_enregistrements_types_4 As Integer
    Private Médicaments_Détournables As Boolean

    Private Warning_Lecture_Vitale As UInt32

    Private assuré_presente_attestation_cmu_gestion_séparée As Boolean 'Si code service AMO non renseigné et zone mutuelle = 88888888-->Consultation attestation papier AMC pour voir si mode de gestion séparée possible sinon assimilation au mode de gestion unique  (annexe1A  Page 22 / 81)

    Public Hono_Disp_Codes_list As New List(Of String) From {"HD1", "HD2", "HD4", "HD7", "HG1", "HG2", "HG4", "HG7", "HC"}

    Public delivrer_produit_réservé_vente_type_defaut As String

    'DP
    Public DP_form As DP
    Public DP_list_Alrt_Prdt_deja_diffusées As New List(Of String)
    'IAM
    Public IAM_info_form As IAM_Info

    Public DP_Poso() As String
    Public DP_Rect() As String

    Public liste_du As List(Of VenteForm.du)

    Public Vente_datagridview_auto_filling As Boolean

    'reprise factures
    Public Reprise_Facture_Num As Decimal
    Public Reprise_AMO As Boolean
    Public Reprise_AMC As Boolean

    'Retrocession
    Public Retrocession_prix_non_remisé As Decimal
    Public Retrocession_remise As Decimal
    Public Retrocession_prix_remisé As Decimal

    'facilEpharm
    Public facilEpharm_Ordo_Etat As String

    '
    Public Encaissement_Note As String

    Private chargement_historique_facture_en_cours As Boolean

    Private accident_régime_agricole As String

    Private promis_drawString As String

    Private produits_string_searched As String

    Private Chronique_Période_Changement_question As Boolean

    Private Dus_Avances_Warning_hide As Boolean

    Private HonoDispGlobaux_CodeJustifExo As String
    Private HonoDispGlobaux_TauxAMO As Integer
    Private HonoDispGlobaux_TauxAMC As Integer

    Public Facturation_automatique As Boolean

#End Region

#Region "SMG"
    Private Structure SMG_struct
        Dim présence_Prestation_Remboursable_AMO As Boolean
        Dim présence_Prestation_NON_Remboursable_AMO As Boolean
        Dim Montant_PEC_SMG As Single
        Dim Montant_PEC_SMG_restant As Single
        Dim total_facture As Integer
        Dim reste_facture As Integer
        Dim montant_facturé_par_acte() As Single
        Dim part_amo_par_acte() As Single

        Public Sub Controle_présence_Prestation_Remboursable_AMO()
            If Trace_Appel_Fonctions = True Then
                Using sw As New StreamWriter(Application.StartupPath + "\appels_fonctions.txt", True)
                    sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
                End Using
            End If

            For r = 0 To COMPTOIR_MAIN.Vente.RowCount - 2
                If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                    If COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value <> "PHN" And COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value <> "SGS" Then
                        présence_Prestation_Remboursable_AMO = True
                    End If
                End If
            Next
        End Sub
        Public Sub Controle_présence_Prestation_NON_Remboursable_AMO()
            If Trace_Appel_Fonctions = True Then
                Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                    sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
                End Using
            End If

            For r = 0 To COMPTOIR_MAIN.Vente.RowCount - 2
                If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                    If COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value = "PHN" Then
                        présence_Prestation_NON_Remboursable_AMO = True
                    End If
                End If
            Next
        End Sub

        Public Sub Calcul_Montant_PEC_SMG_2()
            If Trace_Appel_Fonctions = True Then
                Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                    sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
                End Using
            End If

            Controle_présence_Prestation_Remboursable_AMO()
            Controle_présence_Prestation_NON_Remboursable_AMO()

            If COMPTOIR_MAIN.Montant_PEC_SMG_TextBox1.Text = "" Then
                For r = 0 To COMPTOIR_MAIN.Vente.RowCount - 2
                    If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                        total_facture = total_facture + (Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100))
                        montant_facturé_par_acte(r) = Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100)
                        part_amo_par_acte(r) = Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100)
                        présence_Prestation_Remboursable_AMO = False
                        présence_Prestation_NON_Remboursable_AMO = False
                    End If
                Next
                If COMPTOIR_MAIN.Hono_Disp_Complexe_is_in_facture() = True Then
                    total_facture = total_facture + 31

                End If
            Else
                Montant_PEC_SMG = Val(COMPTOIR_MAIN.Montant_PEC_SMG_TextBox1.Text)
                Montant_PEC_SMG_restant = Val(COMPTOIR_MAIN.Montant_PEC_SMG_TextBox1.Text)
                total_facture = 0
                For r = 0 To COMPTOIR_MAIN.Vente.RowCount - 2
                    If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                        total_facture = total_facture + (Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100))
                    End If
                Next

                If COMPTOIR_MAIN.Hono_Disp_Complexe_is_in_facture() = True Then
                    total_facture = total_facture + 31
                End If

                If total_facture < Montant_PEC_SMG Then
                    Montant_PEC_SMG = total_facture
                    Montant_PEC_SMG_restant = total_facture
                End If
                reste_facture = total_facture

                'calcul des montants frais PH et LPP, par lignes
                For r = 0 To COMPTOIR_MAIN.Vente.RowCount - 2
                    If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, r).Value) <> "VENTE DIRECTE" Then


                        If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value) <> "PHN" And _
                           UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value) <> "SGS" Then


                            If COMPTOIR_MAIN.Hono_Disp_Codes_list.Contains(COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value.ToString) Then 'HONO DISP
                                montant_facturé_par_acte(r) = COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100
                                part_amo_par_acte(r) = montant_facturé_par_acte(r)
                            ElseIf COMPTOIR_MAIN.CodePrestationsTableAdapter.SelectTypeNomenclatureByCodeActe(COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value.ToString) = "Frais PH" Then
                                montant_facturé_par_acte(r) = Val(COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteTFRprix.Index, r).Value) * 100 * COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteQuantité.Index, r).Value
                                part_amo_par_acte(r) = montant_facturé_par_acte(r)
                            ElseIf COMPTOIR_MAIN.CodePrestationsTableAdapter.SelectTypeNomenclatureByCodeActe(COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value.ToString) = "LPP" Then
                                Dim quantité_lpp As Integer = 1
                                quantité_lpp = COMPTOIR_MAIN.ProduitsTableAdapter.Select_LPP_Quantité(COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteCIP.Index, r).Value.ToString, _
                                COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteEAN13.Index, r).Value.ToString, COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.Ventecab.Index, r).Value.ToString, _
                                COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.Vente_produits.Index, r).Value.ToString)
                                montant_facturé_par_acte(r) = Val(COMPTOIR_MAIN.LPPTableAdapter.GetData_CodeLPP_Date(COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteLPP.Index, r).Value.ToString, _
                                Val(Format(COMPTOIR_MAIN.DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP) * (COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteQuantité.Index, r).Value) * quantité_lpp
                                part_amo_par_acte(r) = montant_facturé_par_acte(r)
                            Else
                                montant_facturé_par_acte(r) = COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100
                                part_amo_par_acte(r) = montant_facturé_par_acte(r)
                            End If
                        End If
                    End If
                Next


                'calcul des restes
                For r = 0 To COMPTOIR_MAIN.Vente.RowCount - 2
                    Montant_PEC_SMG_restant = Montant_PEC_SMG_restant - part_amo_par_acte(r)
                    reste_facture = reste_facture - montant_facturé_par_acte(r)
                Next
                If COMPTOIR_MAIN.Hono_Disp_Complexe_is_in_facture() = True Then
                    Montant_PEC_SMG_restant = Montant_PEC_SMG_restant - 31
                    reste_facture = reste_facture - 31
                End If

                'calcul SGS
                If reste_facture - Montant_PEC_SMG_restant > 0 Then
                    For r = 0 To COMPTOIR_MAIN.Vente.RowCount - 2
                        If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                            If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value) = "SGS" Then
                                If Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100) >= reste_facture - Montant_PEC_SMG_restant Then
                                    montant_facturé_par_acte(r) = reste_facture - Montant_PEC_SMG_restant
                                    reste_facture = 0
                                    Exit For
                                Else
                                    montant_facturé_par_acte(r) = Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100)
                                    reste_facture = reste_facture - Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100)
                                End If
                            End If
                        End If
                    Next
                End If
                If présence_Prestation_Remboursable_AMO = False And présence_Prestation_NON_Remboursable_AMO = False Then 'que des actes SGS
                    For r = 0 To COMPTOIR_MAIN.Vente.RowCount - 2
                        montant_facturé_par_acte(r) = Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100)
                        If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                            If Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100) >= Montant_PEC_SMG_restant Then
                                part_amo_par_acte(r) = Montant_PEC_SMG_restant
                                Montant_PEC_SMG_restant = 0
                            Else
                                part_amo_par_acte(r) = Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100)
                                Montant_PEC_SMG_restant = Montant_PEC_SMG_restant - part_amo_par_acte(r)
                            End If
                        End If
                    Next
                End If

                'calcul PHN
                If reste_facture - Montant_PEC_SMG_restant > 0 Then
                    For r = 0 To COMPTOIR_MAIN.Vente.RowCount - 2
                        If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                            If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value) = "PHN" Then
                                If Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100) >= reste_facture - Montant_PEC_SMG_restant Then
                                    montant_facturé_par_acte(r) = reste_facture - Montant_PEC_SMG_restant
                                    reste_facture = 0
                                    Exit For
                                Else
                                    montant_facturé_par_acte(r) = Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100)
                                    reste_facture = reste_facture - Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100)
                                End If
                            End If
                        End If
                    Next
                End If

                'si reste facture, augmente valeur facturée sur actes differents de PHN et SGS et n'etant pas des honoraires de dispensation
                If reste_facture - Montant_PEC_SMG_restant > 0 Then
                    For r = 0 To COMPTOIR_MAIN.Vente.RowCount - 2
                        If reste_facture > 0 Then
                            If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, r).Value) <> "VENTE DIRECTE" Then

                                If UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value) <> "PHN" And _
                                   UCase(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value) <> "SGS" And _
                                   COMPTOIR_MAIN.Hono_Disp_Codes_list.Contains(COMPTOIR_MAIN.Vente(COMPTOIR_MAIN.VenteCodeActe.Index, r).Value.ToString) = False Then
                                    If reste_facture - Montant_PEC_SMG_restant >= (Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100)) - montant_facturé_par_acte(r) Then
                                        Dim dif As Single = (Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100)) - montant_facturé_par_acte(r)
                                        montant_facturé_par_acte(r) = (Val(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteTotal.Index, r).Value * 100))
                                        reste_facture = reste_facture - dif
                                    Else
                                        montant_facturé_par_acte(r) = montant_facturé_par_acte(r) + reste_facture - Montant_PEC_SMG_restant
                                        reste_facture = 0
                                    End If

                                End If
                            End If
                        End If
                    Next
                End If


            End If ' If Val(COMPTOIR_MAIN.Montant_PEC_SMG_TextBox1.Text) = 0 Then
        End Sub

        'groupe 1610 DPS
        Public Sub groupe1610DPS(ByVal NumeroSession As UInt16, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_FSE As Double)
            If Trace_Appel_Fonctions = True Then
                Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                    sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
                End Using
            End If

            Nombre_de_Prestations = Nombre_de_Prestations + 1

            SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

            If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
                ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
            End If


            'Champ1
            Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
            SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

            'Champ2 Date d’exécution
            SGD_AjouterChamp_Tracé(NumeroSession, Format(COMPTOIR_MAIN.DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(COMPTOIR_MAIN.DateExecution.Value, "yyyyMMdd") + "0000"

            'Champ3 Lieu d’exécution 0 pharmacie | 1 domicile patient
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

            'Champ 4 Code prestation
            SGD_AjouterChamp_Tracé(NumeroSession, "DPS", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = "DPS"

            'Champ 5 CCAM : champ non renseigné
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

            'Champ6 Montant des honoraires
            SGD_AjouterChamp_Tracé(NumeroSession, Montant_PEC_SMG_restant, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = Montant_PEC_SMG_restant.ToString
            Total_des_montants_facturés = Total_des_montants_facturés + Montant_PEC_SMG_restant
            Total_FSE = Total_FSE + Montant_PEC_SMG_restant

            'Champ7 Qualificatif de la dépense
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "L"
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7, Visu_API, FichierTrace, Nombre_de_Prestations)

            'Champ8 Coefficient
            SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"

            'Champ9 Quantité
            SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"

            'Champ10 Dénombrement
            SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = "1"

            'Champ11 Prix unitaire
            SGD_AjouterChamp_Tracé(NumeroSession, Montant_PEC_SMG_restant, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = Montant_PEC_SMG_restant

            'champ 12 Base de remboursement
            SGD_AjouterChamp_Tracé(NumeroSession, Montant_PEC_SMG_restant, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = Montant_PEC_SMG_restant


            'champ13 Taux applicable à la prestation
            SGD_AjouterChamp_Tracé(NumeroSession, 100, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = 100

            'champ 14 Montant remboursable par l’AMO
            SGD_AjouterChamp_Tracé(NumeroSession, Montant_PEC_SMG_restant, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = Montant_PEC_SMG_restant
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + Montant_PEC_SMG_restant
            reste_facture = reste_facture - Montant_PEC_SMG_restant
            'champ 15
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = 0

            'champ 16
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = 0
            COMPTOIR_MAIN.FI118_nombre_enregistrements_types_4 = COMPTOIR_MAIN.FI118_nombre_enregistrements_types_4 + 3

            'Groupe 1820
            SGD_AjouterGroupe_Tracé(NumeroSession, 1820, Visu_API, FichierTrace)
            If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
                ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
            End If
            SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1820C2 = "0"

        End Sub
        'groupe 1610 SGN
        Public Sub groupe1610SGN(ByVal NumeroSession As UInt16, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_FSE As Double)
            If Trace_Appel_Fonctions = True Then
                Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                    sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
                End Using
            End If

            Nombre_de_Prestations = Nombre_de_Prestations + 1

            SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

            If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
                ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
            End If


            'Champ1
            Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
            SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

            'Champ2 Date d’exécution
            SGD_AjouterChamp_Tracé(NumeroSession, Format(COMPTOIR_MAIN.DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(COMPTOIR_MAIN.DateExecution.Value, "yyyyMMdd") + "0000"

            'Champ3 Lieu d’exécution 0 pharmacie | 1 domicile patient
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

            'Champ 4 Code prestation
            SGD_AjouterChamp_Tracé(NumeroSession, "SGN", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = "SGN"

            'Champ 5 CCAM : champ non renseigné
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

            'Champ6 Montant des honoraires
            If présence_Prestation_Remboursable_AMO = True Then
                SGD_AjouterChamp_Tracé(NumeroSession, 0, Visu_API, FichierTrace)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = 0
            Else
                SGD_AjouterChamp_Tracé(NumeroSession, Montant_PEC_SMG_restant, Visu_API, FichierTrace)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = Montant_PEC_SMG_restant.ToString
                Total_des_montants_facturés = Total_des_montants_facturés + Montant_PEC_SMG_restant
                Total_FSE = Total_FSE + Montant_PEC_SMG_restant
            End If

            'Champ7 Qualificatif de la dépense
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "L"
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7, Visu_API, FichierTrace, Nombre_de_Prestations)

            'Champ8 Coefficient
            SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"

            'Champ9 Quantité
            SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"

            'Champ10 Dénombrement
            SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = "1"

            'Champ11 Prix unitaire
            If présence_Prestation_Remboursable_AMO = True Then
                SGD_AjouterChamp_Tracé(NumeroSession, 0, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = 0
            Else
                SGD_AjouterChamp_Tracé(NumeroSession, Montant_PEC_SMG_restant, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = Montant_PEC_SMG_restant
            End If

            'champ 12 Base de remboursement
            If présence_Prestation_Remboursable_AMO = True Then
                SGD_AjouterChamp_Tracé(NumeroSession, 0, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = 0
            Else
                SGD_AjouterChamp_Tracé(NumeroSession, Montant_PEC_SMG_restant, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = Montant_PEC_SMG_restant
            End If


            'champ13 Taux applicable à la prestation
            SGD_AjouterChamp_Tracé(NumeroSession, 100, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = 100

            'champ 14 Montant remboursable par l’AMO
            If présence_Prestation_Remboursable_AMO = True Then
                SGD_AjouterChamp_Tracé(NumeroSession, 0, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = 0
            Else
                SGD_AjouterChamp_Tracé(NumeroSession, Montant_PEC_SMG_restant, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = Montant_PEC_SMG_restant
            End If
            If présence_Prestation_Remboursable_AMO = False Then
                Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + Montant_PEC_SMG_restant
            End If
            reste_facture = reste_facture - Montant_PEC_SMG_restant

            'champ 15
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = 0

            'champ 16
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = 0
            COMPTOIR_MAIN.FI118_nombre_enregistrements_types_4 = COMPTOIR_MAIN.FI118_nombre_enregistrements_types_4 + 3


            'Groupe 1820
            SGD_AjouterGroupe_Tracé(NumeroSession, 1820, Visu_API, FichierTrace)
            If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
                ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
            End If
            SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1820C2 = "0"

        End Sub

        Public Sub Clear()
            If Trace_Appel_Fonctions = True Then
                Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                    sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
                End Using
            End If

            Montant_PEC_SMG = 0
            présence_Prestation_Remboursable_AMO = False
            présence_Prestation_NON_Remboursable_AMO = False
            Montant_PEC_SMG_restant = 0
            total_facture = 0
            ReDim montant_facturé_par_acte(COMPTOIR_MAIN.Vente.RowCount)
            ReDim part_amo_par_acte(COMPTOIR_MAIN.Vente.RowCount)
        End Sub
    End Structure
    Private SMG As SMG_struct

#End Region
#Region "Groupes"

    'retourne Codesituation
    Public Function CodeSituation(ByVal Date_Droits As Date) ', ByVal Forçage_Fin_Maternité As Boolean)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If


        Dim out As String = ""
        For i = 0 To CurrentBenéficiaire.G106C4.Length - 1

            Dim datedebut = Val(CurrentBenéficiaire.G106C1(i))
            Dim datefin = Val(CurrentBenéficiaire.G106C2(i))
            Dim datedroits = Val(Format(Date_Droits, "yyyyMMdd") + "0000")
            Select Case datedebut
                Case 0
                    Select Case datefin
                        Case 0
                            If CurrentBenéficiaire.G106C4(i) <> "" Then
                                out = CurrentBenéficiaire.G106C4(i)
                            End If
                        Case Is >= datedroits
                            out = CurrentBenéficiaire.G106C4(i)
                    End Select

                Case Is <= datedroits

                    Select Case datefin
                        Case 0
                            out = CurrentBenéficiaire.G106C4(i)
                        Case Else
                            If datefin >= datedroits Then
                                out = CurrentBenéficiaire.G106C4(i)

                            End If
                    End Select
            End Select

            If (out = "0103" Or out = "0107" Or out = "0110" Or out = "0203" Or out = "0207" Or out = "0405" Or out = "1003" Or out = "9003") Then

                If NatureAssurance_Button.Text = "MATERNITE" And InStr(CurrentFactureVitale.G1440C1, "M") = 0 Then

                    If RadioButtonDateAccouchement.Checked = True And DateDiff(DateInterval.Day, NatureAssuranceDateTimePicker.Value, Date_Droits_AMO) > 12 Then
                        MyMsg_Box.Presentation("Officine !", "Droits maternité invalides (>12 jours après accouchement)" + Chr(10) + "Facturation Vitale Assurance Maladie", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        CurrentFactureVitale.G1440C1 = CurrentFactureVitale.G1440C1 + "M"
                        NatureAssurance_Button.Text = "MALADIE"
                        out = CurrentBenéficiaire.G106C4(i + 1)

                    ElseIf RadioButtonDateDébutGrossesse.Checked = True And Date_Droits_AMO() < DateAdd(DateInterval.Month, 5, NatureAssuranceDateTimePicker.Value) Then
                        'If DateDiff(DateInterval.Month, NatureAssuranceDateTimePicker.Value, Date_Droits_AMO) > 4 Then
                        MyMsg_Box.Presentation("Officine !", "Droits maternité invalides (>4 mois avant accouchement)" + Chr(10) + "Facturation Vitale Assurance Maladie", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        CurrentFactureVitale.G1440C1 = CurrentFactureVitale.G1440C1 + "M"
                        NatureAssurance_Button.Text = "MALADIE"
                        out = CurrentBenéficiaire.G106C4(i + 1)

                    End If

                ElseIf InStr(CurrentFactureVitale.G1440C1, "M") <> 0 Then
                    out = CurrentBenéficiaire.G106C4(i + 1)
                End If
            End If
        Next

        Return out
    End Function

    'retourne CodeALD
    Private Function CodeALD(ByVal Indicateur_forçage_AMO As String, ByVal Date_Droits As Date)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If


        If Indicateur_forçage_AMO = "A" Then
            Return 1
        End If
        Dim out As String = ""
        For i = 0 To CurrentBenéficiaire.G106C4.Length - 1
            Dim datedebut = Val(CurrentBenéficiaire.G106C1(i))
            Dim datefin = Val(CurrentBenéficiaire.G106C2(i))
            Dim datedroits = Val(Format(Date_Droits, "yyyyMMdd") + "0000")
            Select Case datedebut
                Case 0
                    Select Case datefin
                        Case 0
                            If CurrentBenéficiaire.G106C3(i) <> "" Then
                                out = CurrentBenéficiaire.G106C3(i)
                            End If
                        Case Is >= datedroits
                            out = CurrentBenéficiaire.G106C3(i)
                    End Select

                Case Is <= datedroits
                    Select Case datefin
                        Case 0
                            out = CurrentBenéficiaire.G106C3(i)
                        Case Else
                            If datefin > datedroits Then
                                out = CurrentBenéficiaire.G106C3(i)
                            End If
                    End Select
            End Select
        Next
       
        Return out
    End Function

    'Groupe 1110 : Identification Facture
    Public Sub groupe1110(ByVal NumeroSession As UInt16, ByVal NumFacture As String)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1110, Visu_API, FichierTrace)
        'champ 1
        SGD_AjouterChamp_Tracé(NumeroSession, NumFacture, Visu_API, FichierTrace)
        CurrentFactureVitale.G1110C1 = NumFacture
        'champ 2
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace) '1 Normale (pas d'autre valeur dans dico des données)
        CurrentFactureVitale.G1110C2 = "1"
        'champ 3
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateFacture.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace)
        CurrentFactureVitale.G1110C3 = Format(DateFacture.Value, "yyyyMMdd") + "0000"
        'champ 4
        ValeurChamp = "@"
        TailleMax = 1
        SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 1, ValeurChamp, TailleMax)
        SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)
        CurrentFactureVitale.G1110C4 = ValeurChamp
        'champ 5
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        'champ 6
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        'SGD_AjouterGroupe(NumeroSession, 1110)
        'If Visu_API = True Then Technique_MAIN.LireSession_In_VersFichier(NumeroSession, "Formater_Facture_in.txt", "", "1110")
        ''champ 1
        'SGD_AjouterChamp(NumeroSession, NumFacture)
        'CurrentFactureVitale.G1110C1 = NumFacture
        'CurrentFactureVitale.num = NumFacture
        'If Visu_API = True Then Technique_MAIN.LireSession_In_VersFichier(NumeroSession, "Formater_Facture_in.txt", "champ 1:" + NumFacture, "")
        ''champ 2
        'SGD_AjouterChamp(NumeroSession, "1") '1 Normale (pas d'autre valeur dans dico des données)
        'CurrentFactureVitale.G1110C2 = "1"
        'If Visu_API = True Then Technique_MAIN.LireSession_In_VersFichier(NumeroSession, "Formater_Facture_in.txt", "champ 2:" + "1", "")
        ''champ 3
        'SGD_AjouterChamp(NumeroSession, Format(DateFacture.Value, "yyyyMMdd") + "0000")
        'CurrentFactureVitale.G1110C3 = Format(DateFacture.Value, "yyyyMMdd") + "0000"
        'If Visu_API = True Then Technique_MAIN.LireSession_In_VersFichier(NumeroSession, "Formater_Facture_in.txt", "champ 3:" + Format(DateFacture.Value, "yyyyMMdd") + "0000", "")
        ''champ 4
        'ValeurChamp = "@"
        'TailleMax = 1
        'SGD_LireChamp(NumeroSessionCPS, 2, 1, 1, ValeurChamp, TailleMax)
        'SGD_AjouterChamp(NumeroSession, ValeurChamp)
        'CurrentFactureVitale.G1110C4 = ValeurChamp
        'If Visu_API = True Then Technique_MAIN.LireSession_In_VersFichier(NumeroSession, "Formater_Facture_in.txt", "champ 4:" + ValeurChamp, "")
        ''champ 5
        'SGD_AjouterChamp(NumeroSession, "")
        'If Visu_API = True Then Technique_MAIN.LireSession_In_VersFichier(NumeroSession, "Formater_Facture_in.txt", "champ 5:" + "", "")
        ''champ 6
        'SGD_AjouterChamp(NumeroSession, "")
        'If Visu_API = True Then Technique_MAIN.LireSession_In_VersFichier(NumeroSession, "Formater_Facture_in.txt", "champ 6:" + "", "")
       
    End Sub

    'Groupe 1120 : Identification Professionnel de Santé 
    Public Sub groupe1120(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Config.Activer_Session_Remplacement = True Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 1120, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Num_Id_Facturation, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C1 = Config.Titulaire_Num_Id_Facturation
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Cle_Num_Id_Facturation, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C2 = Config.Titulaire_Cle_Num_Id_Facturation
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Nom, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C3 = Config.Titulaire_Nom
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Prenom, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C4 = Config.Titulaire_Prenom
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Code_Conventionnel, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C5 = Config.Titulaire_Code_Conventionnel
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Code_specialite, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C6 = Config.Titulaire_Code_specialite
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Code_Zone_tarifaire, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C7 = Config.Titulaire_Code_Zone_tarifaire
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Code_Zone_IK, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C8 = Config.Titulaire_Code_Zone_IK
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Code__Agrement_1, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C9 = Config.Titulaire_Code__Agrement_1
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Code__Agrement_2, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C10 = Config.Titulaire_Code__Agrement_2
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Code__Agrement_3, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C11 = Config.Titulaire_Code__Agrement_3
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Condition_Exercice, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C12 = Config.Titulaire_Condition_Exercice
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Num_RPPS, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C13 = Config.Titulaire_Num_RPPS
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Titulaire_Cle_Num_RPPS, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C14 = Config.Titulaire_Cle_Num_RPPS

        ElseIf Config.Configuration_Desynchroniser = True Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 1120, Visu_API, FichierTrace)

            Dim ConfigXml As New XmlDocument
            ConfigXml.Load("InfoPro.xml")
            Dim XMLelementliste As XmlNodeList
            XMLelementliste = ConfigXml.GetElementsByTagName("Desync")

            'champ 1
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G2C9").InnerText, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C1 = XMLelementliste.Item(0).Item("G2C9").InnerText
            'champ 2
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G2C10").InnerText, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C2 = XMLelementliste.Item(0).Item("G2C10").InnerText
            'champ 3
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G1C6").InnerText, Visu_API, FichierTrace)
            'champ 4
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G1C7").InnerText, Visu_API, FichierTrace)
            'champ 5
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G2C13").InnerText, Visu_API, FichierTrace)
            'champ 6
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G2C14").InnerText, Visu_API, FichierTrace)
            'champ 7
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G2C15").InnerText, Visu_API, FichierTrace)
            'champ 8
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G2C16").InnerText, Visu_API, FichierTrace)
            'champ 9
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G2C17").InnerText, Visu_API, FichierTrace)
            'champ 10(champ prévu pour une utilisation future)
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            'champ 11(champ prévu pour une utilisation future)
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            'champ 12
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("ConditionDexercice").InnerText, Visu_API, FichierTrace)
            'champ 13
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G1C3").InnerText, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C13 = XMLelementliste.Item(0).Item("G1C3").InnerText
            'champ 14
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G1C4").InnerText, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C14 = XMLelementliste.Item(0).Item("G1C4").InnerText

        Else

            SGD_AjouterGroupe_Tracé(NumeroSession, 1120, Visu_API, FichierTrace)
            'champ 1
            ValeurChamp = "@@@@@@@@"
            TailleMax = 8
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 9, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C1 = ValeurChamp
            'champ 2
            ValeurChamp = "@"
            TailleMax = 1
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 10, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)
            CurrentFactureVitale.G1120C2 = ValeurChamp
            'champ 3
            ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@"
            TailleMax = 27
            SGD_LireChamp(NumeroSessionCPS, 1, 1, 6, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, Mid(ValeurChamp, 1, TailleMax), Visu_API, FichierTrace)
            'champ 4
            ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@"
            TailleMax = 27
            SGD_LireChamp(NumeroSessionCPS, 1, 1, 7, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, Mid(ValeurChamp, 1, TailleMax), Visu_API, FichierTrace)
            'champ 5
            ValeurChamp = "@"
            TailleMax = 1
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 13, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)

            'champ 6
            ValeurChamp = "@@"
            TailleMax = 2
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 14, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)

            'champ 7
            ValeurChamp = "@@"
            TailleMax = 2
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 15, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)

            'champ 8
            ValeurChamp = "@@"
            TailleMax = 2
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 16, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)

            'champ 9
            ValeurChamp = "@"
            TailleMax = 1
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 17, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)

            'champ 10(champ prévu pour une utilisation future)
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)

            'champ 11(champ prévu pour une utilisation future)
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)

            'champ 12
            Dim ModeExercice As String = "@@"
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 2, ModeExercice, TailleMax)
            ModeExercice = Mid(ModeExercice, 1, TailleMax)
            Select Case ModeExercice
                Case "00", "0" 'Libéral, exploitant, commerçant
                    SGD_AjouterChamp_Tracé(NumeroSession, "L", Visu_API, FichierTrace)
                Case "01", "1" 'Salarié
                    SGD_AjouterChamp_Tracé(NumeroSession, "S", Visu_API, FichierTrace)
                Case "04", "4" 'Remplaçant
                    SGD_AjouterChamp_Tracé(NumeroSession, "L", Visu_API, FichierTrace)
                Case "07", "7" 'Bénévole
                    SGD_AjouterChamp_Tracé(NumeroSession, "B", Visu_API, FichierTrace)
            End Select

            'champ 13, 14
            ValeurChamp = "@@"
            TailleMax = 2
            SGD_LireChamp(NumeroSessionCPS, 1, 1, 1, ValeurChamp, TailleMax)
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            If ValeurChamp = "0" Or ValeurChamp = "00" Then 'Carte du Professionnel de Santé (CPS)
                ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
                TailleMax = 30
                SGD_LireChamp(NumeroSessionCPS, 1, 1, 3, ValeurChamp, TailleMax)
                If TailleMax > 10 Then
                    ValeurChamp = Mid(ValeurChamp, 1, 10)
                Else
                    ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                    While ValeurChamp.Length < 10
                        ValeurChamp = "0" & ValeurChamp
                    End While
                End If
                If InStr(ValeurChamp, "@") = 0 Then
                    SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)
                    CurrentFactureVitale.G1120C13 = ValeurChamp
                Else
                    SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                    CurrentFactureVitale.G1120C13 = ""
                End If


                'champ 14
                ValeurChamp = "@"
                TailleMax = 1
                SGD_LireChamp(NumeroSessionCPS, 1, 1, 4, ValeurChamp, TailleMax)
                If ValeurChamp <> "@" Then
                    SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)
                    CurrentFactureVitale.G1120C14 = ValeurChamp
                Else
                    SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                    CurrentFactureVitale.G1120C14 = ""
                End If

            Else 'CPF ou CPE
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                CurrentFactureVitale.G1120C13 = ""
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                CurrentFactureVitale.G1120C14 = ""
            End If
        End If
       
    End Sub

    'Groupe 1130 : Identification du bénéficiaire 
    Public Sub groupe1130(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1130, Visu_API, FichierTrace)
        'champ 1
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentBenéficiaire.G101C7, Visu_API, FichierTrace)
        CurrentFactureVitale.G1130C1 = CurrentBenéficiaire.G101C7
        'champ 2
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentBenéficiaire.G101C8, Visu_API, FichierTrace)
        CurrentFactureVitale.G1130C2 = CurrentBenéficiaire.G101C8
        'champ 3
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentBenéficiaire.G101C9, Visu_API, FichierTrace)
        CurrentFactureVitale.G1130C3 = CurrentBenéficiaire.G101C9
        'champ 4
        If Mid(CurrentBenéficiaire.G104C12, 1, 2) <> "19" And Mid(CurrentBenéficiaire.G104C12, 1, 2) <> "20" And ComboBoxLECTURE_VITALE.Text <> "" Then
            MyMsg_Box.Presentation("Officine ?", "Année de naissance de l'assuré = " + Mid(CurrentBenéficiaire.G104C12, 1, 4).ToString + Chr(10) + "Voulez vous modifier cette valeur?", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                Dim naissance As String = ""
                MyInptBox.my_showdialog("Nommez l'inventaire.", VarType(naissance), 100, "")
                CurrentBenéficiaire.G104C12 = MyInptBox.result
            End If
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentBenéficiaire.G104C12, Visu_API, FichierTrace)
        CurrentFactureVitale.G1130C4 = CurrentBenéficiaire.G104C12
        'champ 5
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentBenéficiaire.G104C13, Visu_API, FichierTrace)
        CurrentFactureVitale.G1130C5 = CurrentBenéficiaire.G104C13
        'champ 6
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentBenéficiaire.G104C14, Visu_API, FichierTrace)
        CurrentFactureVitale.G1130C6 = CurrentBenéficiaire.G104C14
        'champ 7, 8
        If CheckBoxModeDegradé.Checked = False Then 'mode sécurisé
            CurrentFactureVitale.G1130C7 = CodeALD(CurrentFactureVitale.G1440C1, Date_Droits_AMO())
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1130C7, Visu_API, FichierTrace)
            CurrentFactureVitale.G1130C8 = CodeSituation(Date_Droits_AMO())
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1130C8, Visu_API, FichierTrace)
        Else 'mode dégradé
            If CodeALD(CurrentFactureVitale.G1440C1, Date_Droits_AMO()) <> "" And CodeSituation(Date_Droits_AMO()) <> "" Then
                CurrentFactureVitale.G1130C7 = CodeALD(CurrentFactureVitale.G1440C1, Date_Droits_AMO())
                SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1130C7, Visu_API, FichierTrace)
                CurrentFactureVitale.G1130C8 = CodeSituation(Date_Droits_AMO())
                SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1130C8, Visu_API, FichierTrace)
            Else
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                CurrentFactureVitale.G1130C7 = ""
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                CurrentFactureVitale.G1130C8 = ""
            End If
          

        End If
        'champ 9
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace) 'Code de présentation du carnet médical Inutilisé depuis la version 3.18

    End Sub

    'Groupe 1140 : Identification Structure
    Public Sub groupe1140(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Config.Configuration_Desynchroniser = True Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 1140, Visu_API, FichierTrace)

            Dim ConfigXml As New XmlDocument
            ConfigXml.Load("InfoPro.xml")
            Dim XMLelementliste As XmlNodeList
            XMLelementliste = ConfigXml.GetElementsByTagName("Desync")

            'champ 1
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G2C5").InnerText, Visu_API, FichierTrace)
            'champ 2
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G2C6").InnerText, Visu_API, FichierTrace)
            'champ 3
            SGD_AjouterChamp_Tracé(NumeroSession, XMLelementliste.Item(0).Item("G2C8").InnerText, Visu_API, FichierTrace)

        Else

            SGD_AjouterGroupe_Tracé(NumeroSession, 1140, Visu_API, FichierTrace)
            'champ 1
            ValeurChamp = "@"
            TailleMax = 1
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 5, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, Mid(ValeurChamp, 1, TailleMax), Visu_API, FichierTrace)
            'champ 2
            ValeurChamp = "@@@@@@@@@@@@@@"
            TailleMax = 14
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 6, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, Mid(ValeurChamp, 1, TailleMax), Visu_API, FichierTrace)
            'champ 3
            ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
            TailleMax = 40
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 8, ValeurChamp, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, Mid(ValeurChamp, 1, TailleMax), Visu_API, FichierTrace)
        End If
    End Sub

    'Groupe 1150 : Identification Remplaçant
    Public Function groupe1150(ByVal NumeroSession As UInt16) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Config.Activer_Session_Remplacement = True Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 1150, Visu_API, FichierTrace)
            'champ 1
            ValeurChamp = "12345678"
            TailleMax = 8
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 9, ValeurChamp, TailleMax)
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            If ValeurChamp <> Config.Remplacant_Num_Id_Facturation Then
                MyMsg_Box.Presentation("Officine !", "N° d’identification de facturation du remplaçant en carte PS ne correspond pas au N° d’identification de facturation du remplaçant déclaré", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Return False
            End If
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)

            'champ 2
            ValeurChamp = "1"
            TailleMax = 1
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 10, ValeurChamp, TailleMax)
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            If ValeurChamp <> Config.Remplacant_Cle_Num_Id_Facturation Then
                MyMsg_Box.Presentation("Officine !", "Clé du n° d’identification de facturation du remplaçant en carte PS ne correspond pas à la Clé du n° d’identification de facturation du remplaçant déclarée", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Return False
            End If
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)

            'champ 3
            ValeurChamp = "123456789012345678901234567"
            TailleMax = 27
            SGD_LireChamp(NumeroSessionCPS, 1, 1, 6, ValeurChamp, TailleMax)
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)

            'champ 4
            ValeurChamp = "123456789012345678901234567"
            TailleMax = 27
            SGD_LireChamp(NumeroSessionCPS, 1, 1, 7, ValeurChamp, TailleMax)
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            SGD_AjouterChamp_Tracé(NumeroSession, ValeurChamp, Visu_API, FichierTrace)

            'champ5
            SGD_AjouterChamp_Tracé(NumeroSession, "2", Visu_API, FichierTrace)

        End If
        Return True
    End Function

    'Groupe 1160 : Identification de l’individu
    Public Sub groupe1160(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If CurrentBenéficiaire.G104C9 <> "" Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 1160, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentBenéficiaire.G104C9, Visu_API, FichierTrace)
            CurrentFactureVitale.G1160C1 = CurrentBenéficiaire.G104C9
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentBenéficiaire.G104C10, Visu_API, FichierTrace)
            CurrentFactureVitale.G1160C2 = CurrentBenéficiaire.G104C10
        End If
    End Sub

    'Groupe 1170 : Liste d’opposition carte Vitale
    Public Sub groupe1170(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Config.LOI_Activer = True Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 1170, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, Config.LOI_Ref, Visu_API, FichierTrace)
        End If
    End Sub

    'Groupe1211-1213-1214: Prescription PS
    Public Sub groupe1211_1213_1214(ByVal NumeroSession As UInt16, ByVal IDinternePrescripteur As String, ByVal DatePrecription As Date)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If CurrentBenéficiaire.G101C8 = Config.Data_ContaceptifUrgence_NIR Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 1211, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Data_ContaceptifUrgence_NumPrecripteur, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, Config.Data_ContaceptifUrgence_CleNumPrecripteur, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, Format(DatePrecription, "yyyyMMdd") + "0000", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            Exit Sub
        End If

        CurrentFactureVitale.IDPrescripteur = IDinternePrescripteur
        Dim prescr = Me.PrescripteursTableAdapter.GetPrescripteurDataByIDinterne(IDinternePrescripteur).Item(0)
        Dim statut As String = prescr.Statut


        Select Case statut
            Case "LIBERAL"
                SGD_AjouterGroupe_Tracé(NumeroSession, 1211, Visu_API, FichierTrace)
                'N° d’identification du PS libéral
                SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.Numidentification, 1, 8), Visu_API, FichierTrace)
                CurrentFactureVitale.G1211C1 = Mid(prescr.Numidentification, 1, 8)
                'Clé du n° d’identification du PS libéral
                SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.Numidentification, 9, 1), Visu_API, FichierTrace)
                CurrentFactureVitale.G1211C2 = Mid(prescr.Numidentification, 9, 1)
                'Date de prescription du PS libéral
                SGD_AjouterChamp_Tracé(NumeroSession, Format(DatePrecription, "yyyyMMdd") + "0000", Visu_API, FichierTrace)
                CurrentFactureVitale.G1211C3 = Format(DatePrecription, "yyyyMMdd") + "0000"
                'Identification de la prescription du PS libéral
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                CurrentFactureVitale.G1211C4 = ""
                'N° RPPS 'Clé du N° RPPS 
                If prescr.NumRPPS <> "" Then
                    SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.NumRPPS, 1, 10), Visu_API, FichierTrace)
                    CurrentFactureVitale.G1211C5 = Mid(prescr.NumRPPS, 1, 10)
                    SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.NumRPPS, 11, 1), Visu_API, FichierTrace)
                    CurrentFactureVitale.G1211C6 = Mid(prescr.NumRPPS, 11, 11)
                Else
                    SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                    CurrentFactureVitale.G1211C5 = ""
                    SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                    CurrentFactureVitale.G1211C6 = ""
                End If
                'N° de la structure du PS libéral
                SGD_AjouterChamp_Tracé(NumeroSession, prescr.numStructure, Visu_API, FichierTrace)
                CurrentFactureVitale.G1211C7 = prescr.numStructure

            Case "SALARIE"
                SGD_AjouterGroupe_Tracé(NumeroSession, 1213, Visu_API, FichierTrace)
                'N° d’identification du PS salarié
                SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.Numidentification, 1, 8), Visu_API, FichierTrace)
                CurrentFactureVitale.G1213C1 = Mid(prescr.Numidentification, 1, 8)
                'Clé du n° d’identification du PS salarié
                SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.Numidentification, 9, 1), Visu_API, FichierTrace)
                CurrentFactureVitale.G1213C2 = Mid(prescr.Numidentification, 9, 1)
                'Code spécialité du PS salarié
                SGD_AjouterChamp_Tracé(NumeroSession, prescr.CodeSpécialité, Visu_API, FichierTrace)
                CurrentFactureVitale.G1213C3 = prescr.CodeSpécialité
                'Date de prescription du PS salarié
                SGD_AjouterChamp_Tracé(NumeroSession, Format(DatePrecription, "yyyyMMdd") + "0000", Visu_API, FichierTrace)
                CurrentFactureVitale.G1213C4 = Format(DatePrecription, "yyyyMMdd") + "0000"
                'Identification de la prescription du PS salarié
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                CurrentFactureVitale.G1213C5 = ""
                'N° RPPS 'Clé du N° RPPS 
                If prescr.NumRPPS <> "" Then
                    SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.NumRPPS, 1, 10), Visu_API, FichierTrace)
                    CurrentFactureVitale.G1213C6 = Mid(prescr.NumRPPS, 1, 10)

                    SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.NumRPPS, 11, 1), Visu_API, FichierTrace)
                    CurrentFactureVitale.G1213C7 = Mid(prescr.NumRPPS, 11, 11)
                Else
                    SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                    CurrentFactureVitale.G1213C6 = ""
                    SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                    CurrentFactureVitale.G1213C7 = ""
                End If
                'N° de la structure du PS salarié
                SGD_AjouterChamp_Tracé(NumeroSession, prescr.numStructure, Visu_API, FichierTrace)
                CurrentFactureVitale.G1213C8 = prescr.numStructure


            Case "BENEVOLE"
                SGD_AjouterGroupe_Tracé(NumeroSession, 1214, Visu_API, FichierTrace)
                'N° d’identification du PS bénévole
                SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.Numidentification, 1, 8), Visu_API, FichierTrace)
                CurrentFactureVitale.G1214C1 = Mid(prescr.Numidentification, 1, 8)
                'Clé du n° d’identification du PS bénévole
                SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.Numidentification, 9, 1), Visu_API, FichierTrace)
                CurrentFactureVitale.G1214C2 = Mid(prescr.Numidentification, 9, 1)
                'Code spécialité du PS bénévole
                SGD_AjouterChamp_Tracé(NumeroSession, prescr.CodeSpécialité, Visu_API, FichierTrace)
                CurrentFactureVitale.G1214C3 = prescr.CodeSpécialité
                'Date de prescription du PS bénévole
                SGD_AjouterChamp_Tracé(NumeroSession, Format(DatePrecription, "yyyyMMdd") + "0000", Visu_API, FichierTrace)
                CurrentFactureVitale.G1214C4 = Format(DatePrecription, "yyyyMMdd") + "0000"
                'Identification de la prescription du PS bénévole
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                CurrentFactureVitale.G1214C5 = ""
                'N° RPPS 'Clé du N° RPPS 
                If prescr.NumRPPS <> "" Then
                    SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.NumRPPS, 1, 10), Visu_API, FichierTrace)
                    CurrentFactureVitale.G1214C6 = Mid(prescr.NumRPPS, 1, 10)

                    SGD_AjouterChamp_Tracé(NumeroSession, Mid(prescr.NumRPPS, 11, 1), Visu_API, FichierTrace)
                    CurrentFactureVitale.G1214C7 = Mid(prescr.NumRPPS, 11, 11)
                Else
                    SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                    CurrentFactureVitale.G1214C6 = ""
                    SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                    CurrentFactureVitale.G1214C7 = ""
                End If
                'N° de la structure du PS bénévole
                SGD_AjouterChamp_Tracé(NumeroSession, prescr.numStructure, Visu_API, FichierTrace)
                CurrentFactureVitale.G1214C8 = prescr.numStructure
            Case Else
                MyMsg_Box.Presentation("Officine !", "PRESCRIPTEUR NON RENSEIGNE" + Chr(10) + "ou" + Chr(10) + " STATUT DU PRESCRIPTEUR NON RENSEIGNE", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                SGD_LibererSession(NumeroSession)
                Exit Sub
        End Select
    End Sub

    'Groupe 1230 : Origine de la prescription
    Public Sub groupe1230(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If OriginePrescriptionToolStripMenuItem.Checked = True Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 1230, Visu_API, FichierTrace)
            'champ 1
            SGD_AjouterChamp_Tracé(NumeroSession, Mid(OriginePrescriptionToolStripComboBox.SelectedItem.ToString, 1, 1), Visu_API, FichierTrace)
        End If
    End Sub

    'Groupe 1310 : Organisme AMO 
    Public Function groupe1310(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim CodeRégime, CaisseGest, CentreGest As String
        If NatureAssurance_Button.Text = "ACCIDENT DU TRAVAIL" And current_AT.CodeRégime <> "" And current_AT.CaisseGest <> "" And current_AT.CentreGest <> "" Then
            CodeRégime = current_AT.CodeRégime
            CaisseGest = current_AT.CaisseGest
            CentreGest = current_AT.CentreGest
        ElseIf NatureAssurance_Button.Text = "SMG" Then
            CodeRégime = "08"
            CaisseGest = "835"
            CentreGest = "0300"
        Else
            CodeRégime = CurrentBenéficiaire.G101C10
            CaisseGest = CurrentBenéficiaire.G101C11
            CentreGest = CurrentBenéficiaire.G101C12
        End If
        SGD_AjouterGroupe_Tracé(NumeroSession, 1310, Visu_API, FichierTrace)
        'champ 1
        SGD_AjouterChamp_Tracé(NumeroSession, CodeRégime, Visu_API, FichierTrace)
        CurrentFactureVitale.G1310C1 = CodeRégime
        'champ 2
        SGD_AjouterChamp_Tracé(NumeroSession, CaisseGest, Visu_API, FichierTrace)
        CurrentFactureVitale.G1310C2 = CaisseGest
        'champ 3
        SGD_AjouterChamp_Tracé(NumeroSession, CentreGest, Visu_API, FichierTrace)
        CurrentFactureVitale.G1310C3 = CentreGest
        'champ 4
        Select Case CurrentBenéficiaire.G101C1 'Type de carte Vitale

            Case "R" ', "T"
                Select Case CodeRégime 'Code Régime

                    Case "03", "99"
                        Select Case Me.AmoTableAdapter1.SelectCount(CodeRégime, CaisseGest, CentreGest)
                            Case 0
                                Select Case Me.AmoTableAdapter1.SelectCount(CodeRégime, CaisseGest, "0000")
                                    Case 0
                                        MyMsg_Box.Presentation("Officine !", "AUCUN ENREGISTREMENT POUR:" + Chr(10) + "Code Régime:" + CodeRégime + Chr(10) + "Caisse Gestionnaire:" + CaisseGest + Chr(10) + "Centre Gestionnaire:" + CentreGest, False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    Case 1
                                        Dim Libellé As String
                                        Libellé = Me.AmoTableAdapter1.SelectLibellé(CodeRégime, CaisseGest, "0000")
                                        CaisseTextBox.Text = Libellé + " " + CodeRégime + "  " + CaisseGest + "  " + CentreGest
                                    Case Else
                                        MyMsg_Box.Presentation("Officine !", "PLUSIEURS ENREGISTREMENTS POUR:" + Chr(10) + "Code Régime:" + CodeRégime + Chr(10) + "Caisse Gestionnaire:" + CaisseGest + Chr(10) + "Centre Gestionnaire:" + CentreGest, False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                End Select

                            Case 1
                                Dim Codeorganismedestinataire As String
                                Codeorganismedestinataire = Me.AmoTableAdapter1.SelectOrganismeDestinataire(CodeRégime, CaisseGest, CentreGest)
                                SGD_AjouterChamp_Tracé(NumeroSession, Codeorganismedestinataire, Visu_API, FichierTrace)
                                CurrentFactureVitale.G1310C4 = Codeorganismedestinataire
                            Case Else
                                MyMsg_Box.Presentation("Officine !", "PLUSIEURS ENREGISTREMENTS POUR:" + Chr(10) + "Code Régime:" + CodeRégime + Chr(10) + "Caisse Gestionnaire:" + CaisseGest + Chr(10) + "Centre Gestionnaire:" + CentreGest, False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                                Return False
                        End Select


                    Case "01", "05", "06", "07", "08", "10", "14", "15", "16", "90", "92", "95"
                        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1310C2, Visu_API, FichierTrace)
                        CurrentFactureVitale.G1310C4 = CurrentFactureVitale.G1310C2

                    Case "02"
                        If Mid(CurrentFactureVitale.G1310C2, 3, 1) = "5" Then
                            SGD_AjouterChamp_Tracé(NumeroSession, Mid(CurrentFactureVitale.G1310C2, 1, 2) & "1", Visu_API, FichierTrace)
                            CurrentFactureVitale.G1310C4 = Mid(CurrentFactureVitale.G1310C2, 1, 2) & "1"
                        Else
                            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1310C2, Visu_API, FichierTrace)
                            CurrentFactureVitale.G1310C4 = CurrentFactureVitale.G1310C2
                        End If

                    Case "04"

                        SGD_AjouterChamp_Tracé(NumeroSession, "110", Visu_API, FichierTrace)
                        CurrentFactureVitale.G1310C4 = "110"

                    Case "12"
                        SGD_AjouterChamp_Tracé(NumeroSession, "001", Visu_API, FichierTrace)
                        CurrentFactureVitale.G1310C4 = "001"

                    Case "91"
                        If CurrentFactureVitale.G1310C2 = "751" And CurrentFactureVitale.G1310C3 = "0501" Then
                            SGD_AjouterChamp_Tracé(NumeroSession, "999", Visu_API, FichierTrace)
                            CurrentFactureVitale.G1310C4 = "999"
                        Else
                            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1310C2, Visu_API, FichierTrace)
                            CurrentFactureVitale.G1310C4 = CurrentFactureVitale.G1310C2
                        End If

                    Case "93"
                        If CurrentFactureVitale.G1310C2 = "751" Or CurrentFactureVitale.G1310C2 = "781" Or CurrentFactureVitale.G1310C2 = "911" Or CurrentFactureVitale.G1310C2 = "921" Or CurrentFactureVitale.G1310C2 = "931" Or CurrentFactureVitale.G1310C2 = "941" Or CurrentFactureVitale.G1310C2 = "951" Then
                            SGD_AjouterChamp_Tracé(NumeroSession, Mid(CurrentFactureVitale.G1310C3, 2, 3), Visu_API, FichierTrace)
                            CurrentFactureVitale.G1310C4 = Mid(CurrentFactureVitale.G1310C3, 2, 3)
                        Else
                            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1310C2, Visu_API, FichierTrace)
                            CurrentFactureVitale.G1310C4 = CurrentFactureVitale.G1310C2
                        End If

                    Case "94"
                        If CurrentFactureVitale.G1310C2 = "751" Or CurrentFactureVitale.G1310C2 = "781" Or CurrentFactureVitale.G1310C2 = "911" Or CurrentFactureVitale.G1310C2 = "921" Or CurrentFactureVitale.G1310C2 = "931" Or CurrentFactureVitale.G1310C2 = "941" Or CurrentFactureVitale.G1310C2 = "951" Then
                            If CurrentFactureVitale.G1310C3 = "0511" Then
                                SGD_AjouterChamp_Tracé(NumeroSession, "514", Visu_API, FichierTrace)
                                CurrentFactureVitale.G1310C4 = "514"
                            Else
                                SGD_AjouterChamp_Tracé(NumeroSession, Mid(CurrentFactureVitale.G1310C3, 2, 3), Visu_API, FichierTrace)
                                CurrentFactureVitale.G1310C4 = Mid(CurrentFactureVitale.G1310C3, 2, 3)
                            End If
                        Else
                            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1310C2, Visu_API, FichierTrace)
                            CurrentFactureVitale.G1310C4 = CurrentFactureVitale.G1310C2
                        End If

                    Case "96"
                        If CurrentFactureVitale.G1310C2 = "751" Or CurrentFactureVitale.G1310C2 = "781" Or CurrentFactureVitale.G1310C2 = "911" Or CurrentFactureVitale.G1310C2 = "921" Or CurrentFactureVitale.G1310C2 = "931" Or CurrentFactureVitale.G1310C2 = "941" Or CurrentFactureVitale.G1310C2 = "951" Then
                            SGD_AjouterChamp_Tracé(NumeroSession, "751", Visu_API, FichierTrace)
                            CurrentFactureVitale.G1310C4 = "751"
                        Else
                            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1310C2, Visu_API, FichierTrace)
                            CurrentFactureVitale.G1310C4 = CurrentFactureVitale.G1310C2
                        End If
                End Select

                'champ 5
                SGD_AjouterChamp_Tracé(NumeroSession, "000", Visu_API, FichierTrace)
                CurrentFactureVitale.G1310C5 = "000"


            Case "T"
                'champ 4
                SGD_AjouterChamp_Tracé(NumeroSession, "349", Visu_API, FichierTrace)
                CurrentFactureVitale.G1310C4 = "349"
                'champ 5
                SGD_AjouterChamp_Tracé(NumeroSession, "000", Visu_API, FichierTrace)
                CurrentFactureVitale.G1310C5 = "000"

            Case "D"
                'champ 4
                SGD_AjouterChamp_Tracé(NumeroSession, "999", Visu_API, FichierTrace)
                CurrentFactureVitale.G1310C4 = "999"
                'champ 5
                SGD_AjouterChamp_Tracé(NumeroSession, "999", Visu_API, FichierTrace)
                CurrentFactureVitale.G1310C5 = "999"
        End Select
        Return True
    End Function

    'Groupe 1321 STS : Organisme AMC 
    Public Function groupe1321_STS(ByVal NumeroSession As UInt16) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        '____________________________________________________________________________________________________
        'En gestion unique et HTP  AMC le logiciel ne doit pas gérer la part complémentaire, pas de groupe 1321 ni 1330.
        If CurrentFactureVitale.Mode_Gestion = "RO" And CurrentFactureVitale.TP_AMC = False Then
            Return True
        End If
        '______________________________________________________________________________________________________________________
        'ControlesNécessité groupe 1321
        'pas de Num Org Complementaire(champ2)s
        If CurrentBenéficiaire.AMC_NumOrganisme = "" And CurrentBenéficiaire.AMC_NumMutuelle = "" Then
            Return False
            Exit Function
        End If
        '____________________________________________________________________________________________________
        'pour calcul "manuel"
        If CurrentFactureVitale.TOP_CMU = True Then
            'If CurrentFactureVitale.GestionUnique = True Then
            If CurrentFactureVitale.Mode_Gestion = "RO" Then
                CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord"
            Else
                CurrentBenéficiaire.AMC_TypeContrat = "CMU"
            End If
        End If

        '______________________________________________________________________________________________________________________

        SGD_AjouterGroupe_Tracé(NumeroSession, 1321, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 1 Type de contrat
        CurrentFactureVitale.G1321C1 = ""
        If Config.OCT_UtilisationOCT = True And Config.OCT_FSEenrichies = True And CurrentBenéficiaire.AMC_TypeContrat <> "CMU-TPcoord" And CurrentFactureVitale.Mode_Gestion <> "RO" Then ' And CurrentFactureVitale.Mode_Gestion <> "RO" Then
            CurrentFactureVitale.G1321C1 = "99"
        Else
            If CurrentFactureVitale.TOP_CMU = True Then
                CurrentFactureVitale.G1321C1 = "89"
            End If
            If CurrentFactureVitale.Sortant_CMU = True Or AMC_Couverture_TextBox.Text = "Sortant de CMU" Then
                CurrentFactureVitale.G1321C1 = "01"
            End If
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C1, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 2 N° organisme complémentaire
        If CurrentFactureVitale.Mode_Gestion = "RO" Then
            CurrentFactureVitale.G1321C2 = CurrentBenéficiaire.AMC_NumMutuelle
        Else
            CurrentFactureVitale.G1321C2 = CurrentBenéficiaire.AMC_NumOrganisme
        End If
        'End If
        If (CurrentFactureVitale.TOP_CMU = True And CurrentFactureVitale.Mode_Gestion = "RO" _
        And CurrentFactureVitale.Sortant_CMU = False And Config.OCT_UtilisationOCT = False) Then
            CurrentFactureVitale.G1321C2 = "         M"
        End If
        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            CurrentFactureVitale.G1321C2 = "75500017"
        End If
        If CurrentFactureVitale.Sortant_CMU = True And CurrentFactureVitale.G1321C2 = "" Then
            MyMsg_Box.Presentation("Officine !", "Sortant de CMU, veuillez indiquer le numéro d'organisme complementaire", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C2, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 3 N° adhérent(1)
        If (CurrentFactureVitale.TOP_CMU = True And CurrentFactureVitale.Mode_Gestion = "RO" And CurrentFactureVitale.Sortant_CMU = False And Config.OCT_UtilisationOCT = False) Then
            CurrentBenéficiaire.AMC_NumAdherent = ""
        End If
        CurrentFactureVitale.G1321C3 = CurrentBenéficiaire.AMC_NumAdherent
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C3, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 4 Données AMC zone 1
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        CurrentFactureVitale.G1321C4 = ""
        '----------------------------------------------------------------------------------------------------------------------
        'champ 5 Données AMC zone 2
        Dim Champ5 As String = ""
        'pos 1
        Champ5 = (AMC_Piècejustificative_ComboBox.SelectedIndex).ToString
        'pos 2
        Champ5 = Champ5 + " "
        'pos 3
        Select Case CurrentFactureVitale.TP_AMC
            Case False 'pas de TP sur part complémentaire
                Champ5 = Champ5 + "H"
            Case True 'TP sur part complémentaire
                Champ5 = Champ5 + "T"
        End Select

        'pos 4
        If CheckBox_DRE_annulation.Checked = True Then
            Champ5 = Champ5 + "2"
        ElseIf CheckBox_DRE_rectificative.Checked = True Then
            Champ5 = Champ5 + "A"

        Else
            Dim G1321C5pos4 As String = "6"
            For i = 0 To Vente.RowCount - 2
                If UCase(Vente(VenteType.Index, i).Value.ToString) <> "VENTE DIRECTE" Then
                    Dim codeprestation As DataTable = Me.CodePrestationsTableAdapter.GetDataBy_CodeActe(Vente(VenteCodeActe.Index, i).Value.ToString)
                    Dim typenomenclature As String = ""
                    For c = 0 To codeprestation.Columns.Count - 1
                        If codeprestation.Columns.Item(c).ColumnName = "TypeNomenclature" Then
                            typenomenclature = codeprestation(0).Item(c)
                            Exit For
                        End If
                    Next
                    If (Vente(VenteCodeActe.Index, i).Value.ToString) <> "PHN" And typenomenclature <> "" And NePasGénérerDeFSEToolStripMenuItem.Checked = False Then
                        G1321C5pos4 = "1"
                    End If
                End If
            Next

            If (Reprise_Facture_Num > 0 And Reprise_AMO = False And Reprise_AMC = True) Or RecycglageRCSeulementsaisieToolStripMenuItem.Checked = True Then
                G1321C5pos4 = "5"

            End If
            Champ5 = Champ5 + G1321C5pos4

        End If


        SGD_AjouterChamp_Tracé(NumeroSession, Champ5, Visu_API, FichierTrace)
        CurrentFactureVitale.G1321C5 = Champ5
        '----------------------------------------------------------------------------------------------------------------------
        'champ 6 N° organisme complémentaire EDI
        If AMC_Piècejustificative_ComboBox.SelectedIndex = 4 And CurrentBenéficiaire.G109C2 <> "" Then
            CurrentFactureVitale.G1321C6 = CurrentBenéficiaire.G109C2
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C6, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 7 Code application
        SGD_AjouterChamp_Tracé(NumeroSession, "99", Visu_API, FichierTrace)
        CurrentFactureVitale.G1321C7 = "99"
        '----------------------------------------------------------------------------------------------------------------------
        'champ 8 Code de routage flux AMC
        If (Config.OCT_UtilisationOCT = True And Config.OCT_FSEenrichies = True) Or CurrentFactureVitale.Mode_Gestion = "RO" Then
            CurrentFactureVitale.G1321C9 = ""
        ElseIf CurrentFactureVitale.TP_AMC = False Then
            If AMC_Piècejustificative_ComboBox.SelectedIndex = 4 Then
                If CurrentBenéficiaire.G109C7 <> "" And CurrentBenéficiaire.G109C8 <> "" And CurrentBenéficiaire.G109C9 <> "" Then
                    CurrentFactureVitale.G1321C8 = CurrentBenéficiaire.G109C7
                    CurrentFactureVitale.G1321C9 = CurrentBenéficiaire.G109C9
                    CurrentFactureVitale.G1321C11 = CurrentBenéficiaire.G109C8
                ElseIf CurrentConvention.selected = True And CurrentConvention.Code_routage <> "" And CurrentConvention.nom_domaine <> "" And CurrentConvention.identifiant_hôte <> "" Then
                    CurrentFactureVitale.G1321C8 = CurrentConvention.Code_routage
                    CurrentFactureVitale.G1321C9 = CurrentConvention.nom_domaine
                    CurrentFactureVitale.G1321C11 = CurrentConvention.identifiant_hôte
                End If

            ElseIf CurrentConvention.usage_attestation_papier = "0" Then
                If AMC_CodeRoutage_TextBox.Text <> "" And AMC_NomDomaine_TextBox.Text <> "" And AMC_IdHote_TextBox.Text <> "" Then
                    CurrentFactureVitale.G1321C8 = AMC_CodeRoutage_TextBox.Text
                    CurrentFactureVitale.G1321C9 = AMC_NomDomaine_TextBox.Text
                    CurrentFactureVitale.G1321C11 = AMC_IdHote_TextBox.Text
                ElseIf CurrentConvention.selected = True And CurrentConvention.Code_routage <> "" And CurrentConvention.nom_domaine <> "" And CurrentConvention.identifiant_hôte <> "" Then
                    CurrentFactureVitale.G1321C8 = CurrentConvention.Code_routage
                    CurrentFactureVitale.G1321C9 = CurrentConvention.nom_domaine
                    CurrentFactureVitale.G1321C11 = CurrentConvention.identifiant_hôte
                End If

            ElseIf CurrentConvention.usage_attestation_papier = "1" Then
                If CurrentConvention.selected = True And CurrentConvention.Code_routage <> "" And CurrentConvention.nom_domaine <> "" And CurrentConvention.identifiant_hôte <> "" Then
                    CurrentFactureVitale.G1321C8 = CurrentConvention.Code_routage
                    CurrentFactureVitale.G1321C9 = CurrentConvention.nom_domaine
                    CurrentFactureVitale.G1321C11 = CurrentConvention.identifiant_hôte
                   
                End If

            End If

        ElseIf CurrentFactureVitale.TP_AMC = True Then
            If CurrentConvention.selected = True And CurrentConvention.Code_routage <> "" And CurrentConvention.nom_domaine <> "" And CurrentConvention.identifiant_hôte <> "" Then
                CurrentFactureVitale.G1321C8 = CurrentConvention.Code_routage
                CurrentFactureVitale.G1321C9 = CurrentConvention.nom_domaine
                CurrentFactureVitale.G1321C11 = CurrentConvention.identifiant_hôte
           
            End If

        End If


        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C8, Visu_API, FichierTrace)

        '----------------------------------------------------------------------------------------------------------------------
        'champ 9 Domaine  (voire champ 8)
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C9, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 10 Indicateur de traitement AMC
        If CurrentFactureVitale.TOP_CMU = True And CurrentFactureVitale.Sortant_CMU = False And CurrentFactureVitale.Mode_Gestion = "RO" Then
            CurrentBenéficiaire.AMC_Indicateurdetrairement = "62" 'CDC 4.2.5.1.2 CMU-C
        End If
        CurrentFactureVitale.G1321C10 = CurrentBenéficiaire.AMC_Indicateurdetrairement
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C10, Visu_API, FichierTrace)
        '---------------------------------------------------------------------------------------------------------------------- 
        'champ 11 Identifiant hôte gestionnaire  (voire champ 8)
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C11, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 12 Identifiant de l’assuré AMC
        CurrentFactureVitale.G1321C12 = CurrentBenéficiaire.AMC_IdentifiantAMC
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C12, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 13 Zone supplémentaire non certifiée
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        Return True
    End Function

    'Groupe 1321 : Organisme AMC 
    Public Function groupe1321(ByVal NumeroSession As UInt16) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        '____________________________________________________________________________________________________
        'En gestion unique et HTP  AMC le logiciel ne doit pas gérer la part complémentaire, pas de groupe 1321 ni 1330.
        If CurrentFactureVitale.Mode_Gestion = "RO" And CurrentFactureVitale.TP_AMC = False And CurrentFactureVitale.TOP_CMU = False Then
            Return True
        End If
        '______________________________________________________________________________________________________________________
        'ControlesNécessité groupe 1321
        'pas de Num Org Complementaire(champ2)
        If CurrentBenéficiaire.AMC_NumOrganisme = "" And CurrentBenéficiaire.AMC_NumMutuelle = "" And CurrentFactureVitale.TOP_CMU = False Then
            Return True
        End If

        '____________________________________________________________________________________________________
        'pour calcul "manuel"
        If CurrentFactureVitale.TOP_CMU = True Then
            'If CurrentFactureVitale.GestionUnique = True Then
            If CurrentFactureVitale.Mode_Gestion = "RO" Then
                CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord"
            Else
                CurrentBenéficiaire.AMC_TypeContrat = "CMU"
            End If
        End If

        '______________________________________________________________________________________________________________________

        SGD_AjouterGroupe_Tracé(NumeroSession, 1321, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 1 Type de contrat
        CurrentFactureVitale.G1321C1 = ""
        If Config.OCT_UtilisationOCT = True And Config.OCT_FSEenrichies = True And CurrentBenéficiaire.AMC_TypeContrat <> "CMU-TPcoord" Then
            If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
                MyMsg_Box.Presentation("Officine ?", "Pas de FSE enrichie pour une facture AME," + Chr(10) + "voulez-vous facturer en mode FSE avec part complémentaire sans éclatement possible?", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog() = MsgBoxResult.Yes Then
                    CurrentBenéficiaire.AMC_NumOrganisme = "75500017"
                    CurrentFactureVitale.G1321C1 = ""
                Else
                    Return False
                End If
            ElseIf CurrentFactureVitale.Mode_Gestion = "ACS A" Then
                CurrentFactureVitale.G1321C1 = "91"
            ElseIf CurrentFactureVitale.Mode_Gestion = "ACS B" Then
                CurrentFactureVitale.G1321C1 = "92"
            ElseIf CurrentFactureVitale.Mode_Gestion = "ACS C" Then
                CurrentFactureVitale.G1321C1 = "93"
            ElseIf CurrentFactureVitale.Mode_Gestion <> "RO" Then
                CurrentFactureVitale.G1321C1 = "99"
            End If


        Else
            If CurrentFactureVitale.Mode_Gestion = "ACS A" Then
                CurrentFactureVitale.G1321C1 = "91"
            ElseIf CurrentFactureVitale.Mode_Gestion = "ACS B" Then
                CurrentFactureVitale.G1321C1 = "92"
            ElseIf CurrentFactureVitale.Mode_Gestion = "ACS C" Then
                CurrentFactureVitale.G1321C1 = "93"
            ElseIf CurrentFactureVitale.TOP_CMU = True Then
                CurrentFactureVitale.G1321C1 = "89"
            End If
            If CurrentFactureVitale.Sortant_CMU = True Or AMC_Couverture_TextBox.Text = "Sortant de CMU" Then
                CurrentFactureVitale.G1321C1 = "01"
            End If
        End If

           
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C1, Visu_API, FichierTrace)
            '----------------------------------------------------------------------------------------------------------------------
        'champ 2 N° organisme complémentaire
        If CurrentFactureVitale.Mode_Gestion = "RO" Then
            CurrentFactureVitale.G1321C2 = CurrentBenéficiaire.AMC_NumMutuelle
        Else
            CurrentFactureVitale.G1321C2 = CurrentBenéficiaire.AMC_NumOrganisme
            If CurrentConvention.selected = False Then
                Dim org = Me.AmC_OrganismesTableAdapter1.GetDataBy_Num(CurrentBenéficiaire.AMC_NumOrganisme)
                Select Case org.Rows.Count
                    Case 0
                        MyMsg_Box.Presentation("Officine !", "Aucun enregistrement pour AMC " & CurrentBenéficiaire.AMC_NumOrganisme & Chr(10) & "Enregistrez l'AMC avant de facturer", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        Return False
                    Case Else
                        If org.Item(0).Num_org_payeur <> "" Then
                            CurrentFactureVitale.G1321C2 = org.Item(0).Num_org_payeur
                        End If
                End Select

            End If
        End If
            'End If


            If (CurrentFactureVitale.TOP_CMU = True And CurrentFactureVitale.Mode_Gestion = "RO" And CurrentFactureVitale.Sortant_CMU = False And Config.OCT_UtilisationOCT = False) Then
                CurrentFactureVitale.G1321C2 = "         M"
            End If
            If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
                CurrentFactureVitale.G1321C2 = "75500017"
            End If
            If CurrentFactureVitale.Sortant_CMU = True And CurrentFactureVitale.G1321C2 = "" Then
            MyMsg_Box.Presentation("Officine !", "Sortant de CMU, veuillez indiquer le numéro d'organisme complementaire", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
                Return False
            End If
            If CurrentFactureVitale.Mode_Gestion = "ACS A" Or CurrentFactureVitale.Mode_Gestion = "ACS B" Or CurrentFactureVitale.Mode_Gestion = "ACS C" Then
                CurrentFactureVitale.G1321C2 = "         M"
            End If

            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C2, Visu_API, FichierTrace)
            '----------------------------------------------------------------------------------------------------------------------
            'champ 3 N° adhérent(1)
            If (CurrentFactureVitale.TOP_CMU = True And CurrentFactureVitale.Mode_Gestion = "RO" And CurrentFactureVitale.Sortant_CMU = False And Config.OCT_UtilisationOCT = False) Then
                CurrentBenéficiaire.AMC_NumAdherent = ""
            End If
            CurrentFactureVitale.G1321C3 = CurrentBenéficiaire.AMC_NumAdherent
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C3, Visu_API, FichierTrace)
            '----------------------------------------------------------------------------------------------------------------------
            'champ 4 Données AMC zone 1
            If RéférencedepriseenchargeToolStripMenuItem.Checked = True Then
                CurrentFactureVitale.G1321C4 = UCase(RéférencedepriseenchargeToolStripTextBox.Text)
            Else
                CurrentFactureVitale.G1321C4 = ""
            End If
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C4, Visu_API, FichierTrace)
            '----------------------------------------------------------------------------------------------------------------------
        'champ 5 Données AMC zone 2
        Dim Champ5 As String = ""
            'pos 1
        Champ5 = (AMC_Piècejustificative_ComboBox.SelectedIndex).ToString
        'pos 2
            Champ5 = Champ5 + " "
            'pos 3
            Select Case CurrentFactureVitale.TP_AMC
                Case False 'pas de TP sur part complémentaire
                    Champ5 = Champ5 + "H"
                Case True 'TP sur part complémentaire
                    Champ5 = Champ5 + "T"
            End Select
            'pos 4
        If CheckBox_DRE_annulation.Checked = True Then
            Champ5 = Champ5 + "2"
        ElseIf CheckBox_DRE_rectificative.Checked = True Then
            Champ5 = Champ5 + "A"
        Else
            Dim G1321C5pos4 As String = "6"
            For i = 0 To Vente.RowCount - 2
                If UCase(Vente(VenteType.Index, i).Value.ToString) <> "VENTE DIRECTE" Then
                    Dim codeprestation = Me.CodePrestationsTableAdapter.GetDataBy_CodeActe(Vente(VenteCodeActe.Index, i).Value.ToString)
                    Dim typenomenclature As String = codeprestation(0).TypeNomenclature
                    If (Vente(VenteCodeActe.Index, i).Value.ToString) <> "PHN" And typenomenclature <> "" _
                        And NePasGénérerDeFSEToolStripMenuItem.Checked = False Then
                        G1321C5pos4 = "1"
                    End If
                End If
            Next
            If (Reprise_Facture_Num > 0 And Reprise_AMO = False And Reprise_AMC = True) Or RecycglageRCSeulementsaisieToolStripMenuItem.Checked = True Then
                G1321C5pos4 = "5"

            End If
            Champ5 = Champ5 + G1321C5pos4

        End If
        SGD_AjouterChamp_Tracé(NumeroSession, Champ5, Visu_API, FichierTrace)
        CurrentFactureVitale.G1321C5 = Champ5
        '----------------------------------------------------------------------------------------------------------------------
        'champ 6 N° organisme complémentaire EDI
        If AMC_Piècejustificative_ComboBox.SelectedIndex = 4 And CurrentBenéficiaire.G109C2 <> "" Then
            CurrentFactureVitale.G1321C6 = CurrentBenéficiaire.G109C2
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C6, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 7 Code application
        SGD_AjouterChamp_Tracé(NumeroSession, "99", Visu_API, FichierTrace)
        CurrentFactureVitale.G1321C7 = "99"
        '----------------------------------------------------------------------------------------------------------------------
        'champ 8 Code de routage flux AMC
        If (Config.OCT_UtilisationOCT = True And Config.OCT_FSEenrichies = False) Or CurrentFactureVitale.Mode_Gestion = "RO" Or CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            CurrentFactureVitale.G1321C8 = ""
            CurrentFactureVitale.G1321C9 = ""
        ElseIf CurrentFactureVitale.TP_AMC = False Then
            If AMC_Piècejustificative_ComboBox.SelectedIndex = 4 Then
                If CurrentBenéficiaire.G109C7 <> "" And CurrentBenéficiaire.G109C8 <> "" And CurrentBenéficiaire.G109C9 <> "" Then
                    CurrentFactureVitale.G1321C8 = CurrentBenéficiaire.G109C7
                    CurrentFactureVitale.G1321C9 = CurrentBenéficiaire.G109C9
                    CurrentFactureVitale.G1321C11 = CurrentBenéficiaire.G109C8
                ElseIf CurrentConvention.selected = True And CurrentConvention.Code_routage <> "" And CurrentConvention.nom_domaine <> "" And CurrentConvention.identifiant_hôte <> "" Then
                    CurrentFactureVitale.G1321C8 = CurrentConvention.Code_routage
                    CurrentFactureVitale.G1321C9 = CurrentConvention.nom_domaine
                    CurrentFactureVitale.G1321C11 = CurrentConvention.identifiant_hôte
                Else
                    MyMsg_Box.Presentation("Officine !", "Données d'adressage incomplètes pour la DRE" + Chr(10) + "Facturation interompues", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Return False
                End If

            ElseIf CurrentConvention.usage_attestation_papier = "0" Then
                If AMC_CodeRoutage_TextBox.Text <> "" And AMC_NomDomaine_TextBox.Text <> "" And AMC_IdHote_TextBox.Text <> "" Then
                    CurrentFactureVitale.G1321C8 = AMC_CodeRoutage_TextBox.Text
                    CurrentFactureVitale.G1321C9 = AMC_NomDomaine_TextBox.Text
                    CurrentFactureVitale.G1321C11 = AMC_IdHote_TextBox.Text
                ElseIf CurrentConvention.selected = True And CurrentConvention.Code_routage <> "" And CurrentConvention.nom_domaine <> "" And CurrentConvention.identifiant_hôte <> "" Then
                    CurrentFactureVitale.G1321C8 = CurrentConvention.Code_routage
                    CurrentFactureVitale.G1321C9 = CurrentConvention.nom_domaine
                    CurrentFactureVitale.G1321C11 = CurrentConvention.identifiant_hôte
                Else
                    MyMsg_Box.Presentation("Officine !", "Données d'adressage incomplètes pour la DRE" + Chr(10) + "Facturation interompues", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Return False
                End If

            ElseIf CurrentConvention.usage_attestation_papier = "1" Then
                If CurrentConvention.selected = True And CurrentConvention.Code_routage <> "" And CurrentConvention.nom_domaine <> "" And CurrentConvention.identifiant_hôte <> "" Then
                    CurrentFactureVitale.G1321C8 = CurrentConvention.Code_routage
                    CurrentFactureVitale.G1321C9 = CurrentConvention.nom_domaine
                    CurrentFactureVitale.G1321C11 = CurrentConvention.identifiant_hôte
                Else
                    MyMsg_Box.Presentation("Officine !", "Données d'adressage incomplètes pour la DRE" + Chr(10) + "Facturation interompues", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Return False
                End If

            End If

        ElseIf CurrentFactureVitale.TP_AMC = True Then
            If CurrentConvention.selected = True And CurrentConvention.Code_routage <> "" And CurrentConvention.nom_domaine <> "" And CurrentConvention.identifiant_hôte <> "" Then
                CurrentFactureVitale.G1321C8 = CurrentConvention.Code_routage
                CurrentFactureVitale.G1321C9 = CurrentConvention.nom_domaine
                CurrentFactureVitale.G1321C11 = CurrentConvention.identifiant_hôte
            ElseIf Config.OCT_UtilisationOCT = True Then
                CurrentFactureVitale.G1321C8 = ""
                CurrentFactureVitale.G1321C9 = ""
                CurrentFactureVitale.G1321C11 = ""
            Else
                MyMsg_Box.Presentation("Officine !", "Données d'adressage incomplètes pour la DRE" + Chr(10) + "Facturation interompues", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Me.FacturesTableAdapter.DeleteByNum(CurrentFactureVitale.G1110C1)
                Return False
            End If

        End If


        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C8, Visu_API, FichierTrace)

        '----------------------------------------------------------------------------------------------------------------------
        'champ 9 Domaine  (voire champ 8)
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C9, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 10 Indicateur de traitement AMC


        If CurrentFactureVitale.TOP_CMU = True And CurrentFactureVitale.Sortant_CMU = False And CurrentFactureVitale.Mode_Gestion = "RO" Then
            CurrentBenéficiaire.AMC_Indicateurdetrairement = "62" 'CDC 4.2.5.1.2 CMU-C
        End If

        CurrentFactureVitale.G1321C10 = CurrentBenéficiaire.AMC_Indicateurdetrairement
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C10, Visu_API, FichierTrace)
        '---------------------------------------------------------------------------------------------------------------------- 
        'champ 11 Identifiant hôte gestionnaire  (voire champ 8)
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C11, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 12 Identifiant de l’assuré AMC
        CurrentFactureVitale.G1321C12 = CurrentBenéficiaire.AMC_IdentifiantAMC
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1321C12, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 13 Zone supplémentaire non certifiée
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        Return True
    End Function

    'Groupe 1330 Données Complémentaire additionnelles
    Public Sub groupe1330(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If CurrentBenéficiaire.AMC_NumOrganisme = "" And CurrentBenéficiaire.AMC_NumMutuelle = "" And CurrentFactureVitale.TOP_CMU = False Then
            Exit Sub
        End If
        If NatureAssurance_Button.Text = "SMG" Then
            Exit Sub
        End If

        '____________________________________________________________________________________________________
        'En gestion unique et HTP  AMC le logiciel ne doit pas gérer la part complémentaire, pas de groupe 1321 ni 1330.
        If CurrentFactureVitale.Mode_Gestion = "RO" And CurrentFactureVitale.TP_AMC = False Then
            Exit Sub
        End If
        '____________________________________________________________________________________________________
        If CurrentConvention.selected = False Then
            Exit Sub
        End If
        '____________________________________________________________________________________________________

        SGD_AjouterGroupe_Tracé(NumeroSession, 1330, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 1 N° opérateur de réglement AMC, Issu de la table de conventions ou N° AMC
        If CurrentFactureVitale.Mode_Gestion = "" Then
            If CurrentConvention.selected = True And CurrentConvention.Identifiant_Opérateur_règlement <> "" Then
                CurrentFactureVitale.G1330C1 = CurrentConvention.Identifiant_Opérateur_règlement
            Else
                CurrentFactureVitale.G1330C1 = CurrentBenéficiaire.AMC_NumOrganisme
            End If
        End If

        If CurrentFactureVitale.Mode_Gestion = "RO" Then

            If AMC_Piècejustificative_ComboBox.SelectedIndex = 4 Then
                If CurrentBenéficiaire.G107C5 <> "" And CurrentBenéficiaire.G107C4 <> "" Then
                    CurrentFactureVitale.G1330C1 = Mid(CurrentBenéficiaire.G107C5, 1, 10)
                    'ElseIf CurrentConvention.selected = True Then
                    '    CurrentFactureVitale.G1330C1 = CurrentConvention.Num_AMC
                    'Else
                    '    CurrentFactureVitale.G1330C1 = CurrentBenéficiaire.AMC_NumOrganisme
                End If

            Else 'pas carte vitale
                'If CurrentBenéficiaire.AMC_NumOrganisme <> "" Then 'num AMC sur attestation
                '    CurrentFactureVitale.G1330C1 = CurrentBenéficiaire.AMC_NumOrganisme
                'Else
                '    If CurrentConvention.selected = True Then 'num AMC table convention
                '        CurrentFactureVitale.G1330C1 = CurrentConvention.Num_AMC
                '    End If
                'End If
                If AMC_NumAMC_TextBox.Text <> "" Then 'num AMC associée sur attestation
                    CurrentFactureVitale.G1330C1 = AMC_NumAMC_TextBox.Text
                End If
            End If
        End If
        If CurrentFactureVitale.G1330C1 = "" Then
            If Choix_Convention_Facturation.Convention_Table_correspondanceTableAdapter1.GetDataBy_MUTNUM(MUT_NumMutuelle_TextBox.Text, CurrentFactureVitale.G1310C1 & CurrentFactureVitale.G1310C2 & CurrentFactureVitale.G1310C3).Rows.Count > 0 Then
                CurrentFactureVitale.G1330C1 = Choix_Convention_Facturation.Convention_Table_correspondanceTableAdapter1.GetDataBy_MUTNUM(MUT_NumMutuelle_TextBox.Text, CurrentFactureVitale.G1310C1 & CurrentFactureVitale.G1310C2 & CurrentFactureVitale.G1310C3)(0).Num_org_complémentaire
            End If
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1330C1, Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 2 Contexte conventionnel AMC
        If Config.Configuration_Desynchroniser = False Then
            ValeurChamp = "@@"
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 14, ValeurChamp, 2)
            CurrentFactureVitale.G1330C2 = "01" + ValeurChamp
            ValeurChamp = "@"
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 13, ValeurChamp, 1)
            CurrentFactureVitale.G1330C2 = CurrentFactureVitale.G1330C2 + ValeurChamp
        Else
            CurrentFactureVitale.G1330C2 = "01" + "50" + "1"
        End If
  
        '------------
        If CurrentConvention.selected = True Then
            Dim critère_secondaire As String = CurrentConvention.critère_secondaire
            'Dim tab_char() As Char
            'ReDim tab_char(critère_secondaire.Length)
            'For i = 1 To critère_secondaire.Length
            '    If Mid(critère_secondaire, i, 1) = "?" Then
            '        tab_char(i - 1) = "X"
            '    Else
            '        tab_char(i - 1) = Mid(critère_secondaire, i, 1)
            '    End If
            'Next
            'critère_secondaire = tab_char
            While InStr(critère_secondaire, "?") <> 0
                Dim pos As Integer = InStr(critère_secondaire, "?")
                critère_secondaire = Mid(critère_secondaire, 1, pos - 1) + "X" + Mid(critère_secondaire, pos + 1)
            End While
            CurrentFactureVitale.G1330C2 = CurrentFactureVitale.G1330C2 + CurrentConvention.type_Identifiant_org_signataire + critère_secondaire
            '------------
            'ElseIf CurrentFactureVitale.GestionUnique = True Then
            '    CurrentFactureVitale.G1330C2 = CurrentFactureVitale.G1330C2 + ValeurChamp + "RO"+
            '------------
        Else
            CurrentFactureVitale.G1330C2 = ""

        End If
        '------------
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1330C2, Visu_API, FichierTrace)
        'SGD_AjouterChamp_Tracé(NumeroSession, "01501RO01349XXXX", Visu_API, FichierTrace)
        '----------------------------------------------------------------------------------------------------------------------
        'champ 3
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)

    End Sub

    'Groupe 1410 : Cadre de remboursement
    Public Sub groupe1410(ByVal NumeroSession)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1410, Visu_API, FichierTrace)
        If CurrentFactureVitale.TP_AMO = True Then
            If CurrentFactureVitale.TP_AMC = True And CurrentConvention.selected = True And CurrentConvention.type_Identifiant_org_signataire = "RO" _
            And (Config.OCT_UtilisationOCT = False Or (Config.OCT_FSEenrichies = False And Config.OCT_FSE_FichierUnique = False)) _
             Or (CurrentFactureVitale.TOP_CMU = True And CurrentFactureVitale.Mode_Gestion = "RO" And CheckBox_Facturation_AMC.Checked = True) _
             Or (Config.OCT_UtilisationOCT = True And CurrentFactureVitale.Mode_Gestion = "RO" And CheckBox_Facturation_AMC.Checked = True And CurrentFactureVitale.TP_AMC = True) Then

                CurrentFactureVitale.G1410C1 = "3"
            Else
                CurrentFactureVitale.G1410C1 = "2"
            End If
        Else 'TP_AMO=false
            If CurrentFactureVitale.TP_AMC = True And CurrentConvention.selected = True And CurrentConvention.type_Identifiant_org_signataire = "RO" _
            And (Config.OCT_UtilisationOCT = False Or (Config.OCT_FSEenrichies = False And Config.OCT_FSE_FichierUnique = False)) _
              Or (Config.OCT_UtilisationOCT = True And CurrentFactureVitale.Mode_Gestion = "RO" And CheckBox_Facturation_AMC.Checked = True And CurrentFactureVitale.TP_AMC = True) Then
                CurrentFactureVitale.G1410C1 = "4"
            Else
                CurrentFactureVitale.G1410C1 = "1"
            End If
        End If

        If (CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl") And CurrentFactureVitale.TP_AMC = True Then
            CurrentFactureVitale.G1410C1 = "3"
        End If

        'Cadrederemboursement
        '1 Pas de tiers-payant
        '2 Tiers-payant sur la part obligatoire seulement
        '3 Tiers-payant sur la part obligatoire et la part complémentaire dans le cadre d'une convention de gestion
        '4 Tiers-payant sur la part complémentaire dans le cadre d'une convention de gestion, la part obligatoire n'étant pas à rembourser
        '5 Tiers payant intégral pour le compte des régimes SNCF, RATP ou Mines.
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1410C1, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
    End Sub

    'Groupe 1420 : Identification de pièce justificative pour l’AMO, obligatoire uniquement dans Factures non signées par carte Vitale ou SMG
    Public Sub groupe1420(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1420, Visu_API, FichierTrace)

        ''Champ1 Nature de la pièce justificative pour l’AMO
        If NatureAssurance_Button.Text = "SMG" Then
            CurrentFactureVitale.G1420C1 = "1"
        ElseIf CurrentBenéficiaire.G1420C1 = "" Then
            CurrentFactureVitale.G1420C1 = "0"
        Else
            CurrentFactureVitale.G1420C1 = CurrentBenéficiaire.G1420C1
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1420C1, Visu_API, FichierTrace)

        'Champ2 Date de validité de la pièce justificative pour l’AMO
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentBenéficiaire.G1420C2, Visu_API, FichierTrace)
        CurrentFactureVitale.G1420C2 = CurrentBenéficiaire.G1420C2

        'champ3 Origine de la pièce justificative pour l’AMO
        If CurrentBenéficiaire.G1420C1 = "2" Then
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentBenéficiaire.G1420C3, Visu_API, FichierTrace)
            CurrentFactureVitale.G1420C3 = CurrentBenéficiaire.G1420C3
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            CurrentFactureVitale.G1420C3 = ""
        End If
    End Sub

    'Groupe 1440 : Forçage niveau facture   
    Public Sub groupe1440(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If CurrentFactureVitale.G1440C1 <> "" Or CurrentFactureVitale.G1440C2 <> "" Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 1440, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1440C1, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1440C2, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1440C3, Visu_API, FichierTrace)
        End If
    End Sub

    'Groupe 1450 : Module de Tarification Complémentaire
    Public Sub groupe1450(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Config.STS_Activer = False Then
            Exit Sub
        End If

        Dim groupe_existe As Boolean = False 'pour exit si pas de groupe 1450, evite d'ajouter des champs sans groupe
        For i = 0 To Tab_Valeur_STS.Length - 1
            If Tab_Valeur_STS(i).groupe = 1450 Then
                groupe_existe = True
                SGD_AjouterGroupe_Tracé(NumeroSession, 1450, Visu_API, FichierTrace)
                Exit For
            End If
        Next
        If groupe_existe = False Then Exit Sub

        'champ 1
        Dim found As Boolean = False
        For i = 0 To Tab_Valeur_STS.Length - 1
            If Tab_Valeur_STS(i).groupe = 1450 And Tab_Valeur_STS(i).champ = 1 Then
                SGD_AjouterChamp_Tracé(NumeroSession, Tab_Valeur_STS(i).valeur, Visu_API, FichierTrace)
                found = True
                Exit For
            End If
        Next
        If found = False Then
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        End If

        'champ 2
        found = False
        For i = 0 To Tab_Valeur_STS.Length - 1
            If Tab_Valeur_STS(i).groupe = 1450 And Tab_Valeur_STS(i).champ = 2 Then
                SGD_AjouterChamp_Tracé(NumeroSession, Tab_Valeur_STS(i).valeur, Visu_API, FichierTrace)
                found = True
                Exit For
            End If
        Next
        If found = False Then
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        End If


    End Sub

    'Groupe 1511 : Nature d’assurance Maladie
    Public Sub groupe1511(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1511, Visu_API, FichierTrace)

        'champ1 Date d’accident de droit commun(renseignée sur le form Choix_Facturation)
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1511C1, Visu_API, FichierTrace)

        'champ2 Indicateur Régime Alsace - Moselle à indiquer pour le mode dégradé
        If CheckBoxModeDegradé.Checked = True Then 'And CurrentFactureVitale.G1130C8 = "" Then
            If G1511C2_CheckBox1.Checked = True Then
                SGD_AjouterChamp_Tracé(NumeroSession, "O", Visu_API, FichierTrace)
                CurrentFactureVitale.G1511C2 = "O"
            Else
                SGD_AjouterChamp_Tracé(NumeroSession, "N", Visu_API, FichierTrace)
                CurrentFactureVitale.G1511C2 = "N"
            End If
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            CurrentFactureVitale.G1511C2 = ""
        End If

    End Sub

    'Groupe 1512 : Nature d’assurance Maternité
    Public Sub groupe1512(ByVal NumeroSession As UInt16, ByVal datematernite As Date)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1512, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, Format(datematernite, "yyyyMMdd") + "0000", Visu_API, FichierTrace)
        CurrentFactureVitale.G1512C1 = Format(datematernite, "yyyyMMdd") + "0000"
    End Sub

    'Groupe 1514 : Nature d’assurance Prévention
    Public Sub groupe1514(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1514, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)

    End Sub

    'Groupe 1513 : Nature d’assurance Accident du Travail
    Public Function groupe1513(ByVal NumeroSession As UInt16, ByVal dateaccidenttravail As String, ByVal numeroaccidenttravail As String, ByVal clenumeroaccidenttravail As String)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1513, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, dateaccidenttravail, Visu_API, FichierTrace)
        CurrentFactureVitale.G1513C1 = dateaccidenttravail
        SGD_AjouterChamp_Tracé(NumeroSession, numeroaccidenttravail, Visu_API, FichierTrace)
        CurrentFactureVitale.G1513C2 = numeroaccidenttravail
        SGD_AjouterChamp_Tracé(NumeroSession, clenumeroaccidenttravail, Visu_API, FichierTrace)
        CurrentFactureVitale.G1513C3 = clenumeroaccidenttravail
        Return True

    End Function

    'Groupe 1515 : Nature d’assurance Soins Médicaux Gratuits
    Public Function groupe1515(ByVal NumeroSession As UInt16)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1515, Visu_API, FichierTrace)
        'Dim MPC As Integer
        'For r = 0 To Vente.RowCount - 1
        '    If UCase(Vente.Item(VenteType.Index, r).Value) = "ASSURANCE" Then
        '        MPC = MPC + (Vente.Item(VenteTotal.Index, r).Value * 100)
        '    End If
        'Next
        'SGD_AjouterChamp_Tracé(NumeroSession, MPC.ToString, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, Montant_PEC_SMG_TextBox1.Text, Visu_API, FichierTrace)
        CurrentFactureVitale.G1515C1 = Montant_PEC_SMG_TextBox1.Text
        Return True

    End Function

    'groupe 1610 Médicaments STS
    Public Function groupe1610Médicaments_STS(ByVal NumeroSession As UInt16, ByVal numligne As Integer, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, ByRef Total_FSE As Double) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Nombre_de_Prestations = Nombre_de_Prestations + 1

        SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

        If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
            ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
        End If

        'Champ1

        Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

        'Champ2 Date d’exécution
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(DateExecution.Value, "yyyyMMdd") + "0000"

        'Champ3 Lieu d’exécution 0 pharmacie | 1 domicile patient
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

        'Champ 4 Code prestation
        SGD_AjouterChamp_Tracé(NumeroSession, Vente(VenteCodeActe.Index, numligne).Value.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = Vente(VenteCodeActe.Index, numligne).Value.ToString

        'Champ 5 CCAM : champ non renseigné
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

        'Champ6 Montant des honoraires
        Dim MontantHonoraires As Integer = 0
        If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) And CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).DétailCodeCIP.G1740C8 = "D" Then
            'deconditionement: MontantHonoraires= hono disp * quantitée boites utilisées
            MontantHonoraires = Vente(VentePrix.Index, numligne).Value * 100 * Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).DétailCodeCIP.G1740C11)

        ElseIf tab_Lignes_Vente(numligne).deconditionement Then
            MontantHonoraires = tab_Lignes_Vente(numligne).deconditionement_prix_unitaire * tab_Lignes_Vente(numligne).deconditionement_quantité
        Else
            MontantHonoraires = Vente(VenteTotal.Index, numligne).Value * 100
        End If
        Total_FSE = Total_FSE + MontantHonoraires
        Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        SGD_AjouterChamp_Tracé(NumeroSession, MontantHonoraires, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = MontantHonoraires.ToString

        'Champ7 Qualificatif de la dépense
        If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).G1610C7
        Else
            If InStr(Vente(Vente_produits.Index, numligne).Value.ToString, "Acte de biologie avec Dépassement pour exigence") <> 0 And Vente(VenteCodeActe.Index, numligne).Value.ToString = "B" Then
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "E"
            ElseIf Me.CodePrestationsTableAdapter.GetDataBy_CodeActe(Vente(VenteCodeActe.Index, numligne).Value.ToString).Item(0).CompatibleTable1 = False And CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 <> "N" Then
                MyMsg_Box.Presentation("Officine ?", "l'acte " + Vente(VenteCodeActe.Index, numligne).Value.ToString + " est-il remboursable?", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog() = MsgBoxResult.No Then
                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
                End If
            End If
            If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 <> "N" And CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 <> "E" Then
                If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or Vente(VenteCodeActe.Index, numligne).Value.ToString = "PHN" Or CurrentFactureVitale.Non_Rembousable_CheckBox(Nombre_de_Prestations) = True Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
                ElseIf UCase(NatureAssurance_Button.Text) = "SMG" And CurrentFactureVitale.G1515C1 <> "" Then
                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "L"
                ElseIf Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6) = 0 Then
                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G"
                Else
                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = ""
                End If
            End If
            'médicaments_détournables
            If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 <> "N" Then
                If Médicaments_Détournables = True Then
                    Dim datatable As DataTable = Me.BDM_médicaments_detournablesTableAdapter.GetDataBy_CIP(Vente(VenteEAN13.Index, Nombre_de_Prestations).Value.ToString, Vente(VenteEAN13.Index, Nombre_de_Prestations).Value.ToString)
                    If datatable.Rows.Count > 0 Or Vente.Item(VenteListe.Index, Nombre_de_Prestations).Value = "Stupéfiant" Then
                        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
                    End If
                End If
            End If
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7, Visu_API, FichierTrace, Nombre_de_Prestations)

        'Champ8 Coefficient
        If Vente.Item(Vente_G1610C8.Index, numligne).Value IsNot DBNull.Value And Vente.Item(Vente_G1610C8.Index, numligne).Value IsNot Nothing And Val(Vente.Item(Vente_G1610C8.Index, numligne).Value) <> 0 Then 'Coefficient G1610C8
            SGD_AjouterChamp_Tracé(NumeroSession, Vente.Item(Vente_G1610C8.Index, numligne).Value, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = Vente.Item(Vente_G1610C8.Index, numligne).Value
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"
        End If

        'Champ9 Quantité
        If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) Then

            If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).DétailCodeCIP.G1740C8 = "D" Then
                'deconditionement: quantité hono disp=nombre de boites utilisées
                SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).DétailCodeCIP.G1740C11, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).DétailCodeCIP.G1740C11
            Else
                SGD_AjouterChamp_Tracé(NumeroSession, Vente(VenteQuantité.Index, numligne).Value.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = Vente(VenteQuantité.Index, numligne).Value.ToString
            End If

        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"
        End If

        'Champ10 Dénombrement
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = "1"

        'Champ11
        Dim PrixUnitaire As String
        Dim quantité As Integer
        If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) Then
            PrixUnitaire = (Vente(VenteTFRprix.Index, numligne).Value) * 100 '* Vente(VenteQuantité.Index, numligne).Value
        Else
            If tab_Lignes_Vente(numligne).deconditionement Then
                PrixUnitaire = tab_Lignes_Vente(numligne).deconditionement_prix_unitaire * tab_Lignes_Vente(numligne).deconditionement_quantité

                'ElseIf CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" Then
            Else
                PrixUnitaire = Vente(VenteTFRprix.Index, numligne).Value * 100 * Vente(VenteQuantité.Index, numligne).Value

                'Else
                '    Dim PUmed As Double = Vente(VentePrix.Index, numligne).Value * 100
                quantité = Vente(VenteQuantité.Index, numligne).Value
                '    PrixUnitaire = (PUmed * quantité)
                '    PUmed = Nothing
            End If
            PrixUnitaire = Val(PrixUnitaire).ToString
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitaire, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = PrixUnitaire

        'champ 12
        Dim BaseRemboursement As Integer
        If tab_Lignes_Vente(numligne).deconditionement = True Then
            BaseRemboursement = PrixUnitaire

        ElseIf CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" Then
            BaseRemboursement = (Vente(VenteTFRprix.Index, numligne).Value) * 100 * Vente(VenteQuantité.Index, numligne).Value

        ElseIf CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" And CurrentFactureVitale.Mode_Gestion <> "AME_Base" Then
            BaseRemboursement = 0

        Else
            Dim PUmedTFR As Double = (Vente(VenteTFRprix.Index, numligne).Value) * 100
            BaseRemboursement = PUmedTFR * quantité
            PUmedTFR = Nothing
            quantité = Nothing
            If BaseRemboursement = 0 And Vente(VenteCodeActe.Index, numligne).Value <> "PHN" Then
                BaseRemboursement = Vente(VenteTotal.Index, numligne).Value * 100
            End If
        End If

        If Vente.Item(Vente_G1610C8.Index, numligne).Value IsNot DBNull.Value And Vente.Item(Vente_G1610C8.Index, numligne).Value IsNot Nothing And Val(Vente.Item(Vente_G1610C8.Index, numligne).Value) <> 0 Then 'Coefficient G1610C8
            BaseRemboursement = Val(BaseRemboursement * Vente.Item(Vente_G1610C8.Index, numligne).Value / 100)
        End If

        If BaseRemboursement > Vente(VenteTotal.Index, numligne).Value * 100 And tab_Lignes_Vente(numligne).deconditionement = False And CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 <> "G" Then
            BaseRemboursement = Vente(VenteTotal.Index, numligne).Value * 100
        End If

        If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) Then
            BaseRemboursement = PrixUnitaire * Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9)
        End If

        If CurrentFactureVitale.Mode_Gestion <> "AME_Base" And Vente(VenteCodeActe.Index, numligne).Value <> "PHN" Then
            BaseRemboursement = Val(BaseRemboursement).ToString
            SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = BaseRemboursement
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, 0, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = 0
        End If

        'champ13
        Dim tauxamo As Integer
        If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" Or CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" Then 'OrCurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" 
            tauxamo = 0
        Else
            Select Case NatureAssurance_Button.Text
                Case "MATERNITE", "ACCIDENT DU TRAVAIL", "PREVENTION", "SMG"
                    tauxamo = 100
                Case Else
                    If Vente(VenteType.Index, numligne).Value.ToString = "ALD" Or Vente(VenteType.Index, numligne).Value.ToString = "PREV" Or Vente(VenteType.Index, numligne).Value.ToString = "SP" Then
                        tauxamo = 100
                    Else
                        If Val(Renouvellement_TextBox.Text) = 0 Or CurrentBenéficiaire.G101C10 = "04" Then
                            tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                        Else
                            If (CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO())) < CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(DateExecution.Value))) Then
                                CurrentFactureVitale.Renouvellement_Date_Droits_AMO_est_date_éxécution = True
                                tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(DateExecution.Value))
                            Else
                                CurrentFactureVitale.Renouvellement_Date_Droits_AMO_est_date_éxécution = False
                                tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                            End If
                        End If
                    End If
            End Select

        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        '    Vente(VenteAMO.Index, numligne).Value = tauxamo
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, tauxamo, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        Vente(VenteAMO.Index, numligne).Value = tauxamo
        'End If


        'champ 14
        Dim MontantremboursableAMO As Integer
        MontantremboursableAMO = Arrondis(Val(BaseRemboursement) * Val(tauxamo) / 100)
        For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
            If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                MontantremboursableAMO = CurrentFactureVitale.Forçage_Part_AMO(i).Montant
                Exit For
            End If
        Next
        Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Then ' Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            MontantremboursableAMO = 0
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = "0"
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMO, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = MontantremboursableAMO
        'End If
        'champ 15
        Dim champ15 As String = ""
        If MontantGlobalPriseEnchargeToolStripTextBox.Text <> "" Then
            champ15 = (MontantHonoraires - MontantremboursableAMO).ToString
            If Val(champ15) > CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS Then
                champ15 = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS.ToString
                CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS = 0
            Else
                CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS - Val(champ15)
            End If
        Else
            For i = 0 To CurrentFactureVitale.PEC.Montants_Actes.Length - 1
                If CurrentFactureVitale.PEC.Montants_Actes(i).Num_Acte = Nombre_de_Prestations Then
                    champ15 = CurrentFactureVitale.PEC.Montants_Actes(i).Montant.ToString
                End If
            Next
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, champ15, Visu_API, FichierTrace)

        'champ 16
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)

        If MontantHonoraires < MontantremboursableAMO + Val(champ15) Then
            MyMsg_Box.Presentation("Officine !", Vente(Vente_produits.Index, numligne).Value.ToString + Chr(10) + Chr(10) + "Montant du remboursement (AMO+AMC) > Montant des Honoraires" + Chr(10) + "Tarification interrompue", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If

        'Select Case CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4
        '    Case "PH1", "PH2", "PH4", "PH7", "MHU"
        '        my_Hono_Disp.exist = True
        '        my_Hono_Disp.prestation_associée = CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4
        '        'my_Hono_Disp.Grand_conditionement = False
        '        my_Hono_Disp.Qualificatif_de_la_dépense = CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7
        '        my_Hono_Disp.Quantité = Vente(VenteQuantité.Index, numligne).Value.ToString
        '        my_Hono_Disp.VenteType = Vente(VenteType.Index, numligne).Value.ToString
        '        'my_Hono_Disp.CodeJustifExo = ? est renseigné dans groupe 1820
        '    Case Else
        '        my_Hono_Disp.exist = False
        'End Select

        Return True
    End Function

    'groupe 1610 LPP STS
    Public Function groupe1610LPP_STS_regroup(ByVal NumeroSession As UInt16, ByVal numligne As Integer, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, ByRef Total_FSE As Double) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Nombre_de_Prestations = Nombre_de_Prestations + 1

        SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

        If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
            ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
        End If

        'Champ1

        Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

        'Champ2 Date d’exécution
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(DateExecution.Value, "yyyyMMdd") + "0000"

        'Champ3 Lieu d’exécution 0 pharamcie | 1 domicile patient
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

        'Champ 4 Code prestation
        Dim CodePrestation As String = Vente(VenteCodeActe.Index, numligne).Value.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, CodePrestation, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = CodePrestation

        'Champ 5 CCAM : champ non renseigné
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

        'Champ6 Montant des honoraires (p280/906) + calcul valeur champs suivant 11,12
        Dim MontantHonoraires As Integer = 0
        Dim Dénombrement As Integer = 0
        Dim PrixUnitaire As Double = 0
        Dim BaseRemboursement As Double = 0


        For i = 0 To Vente.RowCount - 2
            If Dénombrement < 10 Then

                If Vente(VenteCodeActe.Index, i).Value.ToString = CodePrestation And tab_Lignes_Vente(i).Ligne_traitée = False Then
                    If Vente(VenteLPP.Index, numligne).Value.ToString <> "" Then
                        Dim quantité_lpp As Integer = 1
                        PrixUnitaire = PrixUnitaire + Vente(VenteTotal.Index, i).Value * 100
                        quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité(Vente(VenteCIP.Index, i).Value.ToString, Vente(VenteEAN13.Index, i).Value.ToString, _
                                                                                   Vente(Ventecab.Index, i).Value.ToString, Vente(Vente_produits.Index, i).Value.ToString)
                        BaseRemboursement = BaseRemboursement + _
        (Val(LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, i).Value.ToString, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP) * (Vente(VenteQuantité.Index, i).Value) * quantité_lpp)
                    ElseIf Not Vente(VenteTFRprix.Index, i).Value Is Nothing Then 'pas de code lpp, le controle du top codage affiné est effectué dans une fction de controle
                        BaseRemboursement = BaseRemboursement + Vente(VenteTFRprix.Index, i).Value * 100 * Vente(VenteQuantité.Index, i).Value
                    Else
                        BaseRemboursement = BaseRemboursement + 0 'pas de code lpp, pas de TFR -->pas de remboursement, nah!
                    End If
                    Dénombrement = Dénombrement + 1
                    MontantHonoraires = MontantHonoraires + Vente(VenteTotal.Index, i).Value * 100
                End If
            End If
        Next
        PrixUnitaire = BaseRemboursement
        Total_FSE = Total_FSE + BaseRemboursement
        Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = BaseRemboursement.ToString

        'Champ7 Qualificatif de la dépense
        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CodePrestation = "PHN" Or CurrentFactureVitale.Non_Rembousable_CheckBox(Nombre_de_Prestations) = True Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "N", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
        ElseIf Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6) = 0 Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G"
        ElseIf UCase(NatureAssurance_Button.Text) = "SMG" And CurrentFactureVitale.G1515C1 <> "" Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "L"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = ""
        End If

        'Champ8 Coefficient
        SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"

        'Champ9 Quantité
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"

        'Champ10 Dénombrement
        SGD_AjouterChamp_Tracé(NumeroSession, Dénombrement, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = Dénombrement


        'Champ11
        SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitaire.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = PrixUnitaire

        'champ 12
        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Then 'then Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = "0"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement.ToString, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = BaseRemboursement
        End If

        'champ13
        Dim tauxamo As Integer
        If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" Or CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" Then 'or CurrentFactureVitale.Mode_Gestion = "AME_Base" Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            tauxamo = 0
        Else
            Select Case NatureAssurance_Button.Text
                Case "MATERNITE", "ACCIDENT DU TRAVAIL", "PREVENTION", "SMG"
                    tauxamo = 100
                Case Else
                    If Vente(VenteType.Index, numligne).Value.ToString = "ALD" Or Vente(VenteType.Index, numligne).Value.ToString = "PREV" Or Vente(VenteType.Index, numligne).Value.ToString = "SP" Then
                        tauxamo = 100
                    Else
                        tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                    End If
            End Select
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        '    Vente(VenteAMO.Index, numligne).Value = tauxamo
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, tauxamo.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        Vente(VenteAMO.Index, numligne).Value = tauxamo
        'End If
        'champ 14
        Dim MontantremboursableAMO As Double
        If UCase(NatureAssurance_Button.Text) <> "SMG" Then
            If MontantHonoraires < BaseRemboursement Then
                MontantremboursableAMO = Arrondis((MontantHonoraires) * Val(tauxamo) / 100)
            Else
                MontantremboursableAMO = Arrondis((BaseRemboursement) * Val(tauxamo) / 100)
            End If
            For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
                If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                    MontantremboursableAMO = CurrentFactureVitale.Forçage_Part_AMO(i).Montant
                    Exit For
                End If
            Next
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        Else
            MontantremboursableAMO = SMG.part_amo_par_acte(numligne)
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = "0"
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMO.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = MontantremboursableAMO
        'End If
        'champ 15
        Dim champ15 As String = ""
        For i = 0 To CurrentFactureVitale.PEC.Montants_Actes.Length - 1
            If CurrentFactureVitale.PEC.Montants_Actes(i).Num_Acte = Nombre_de_Prestations Then
                champ15 = CurrentFactureVitale.PEC.Montants_Actes(i).Montant.ToString
            End If
        Next
        SGD_AjouterChamp_Tracé(NumeroSession, champ15, Visu_API, FichierTrace)

        'champ 16
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)

        If MontantHonoraires < MontantremboursableAMO + Val(champ15) Then
            MyMsg_Box.Presentation("Officine !", Vente(Vente_produits.Index, numligne).Value.ToString + Chr(10) + Chr(10) + "Montant du remboursement (AMO+AMC) > Montant des Honoraires" + Chr(10) + "Tarification interrompue", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If

        Return True
    End Function
    Public Function groupe1610LPP_STS(ByVal NumeroSession As UInt16, ByVal numligne As Integer, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, ByRef Total_FSE As Double) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Nombre_de_Prestations = Nombre_de_Prestations + 1

        SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

        If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
            ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
        End If

        'Champ1

        Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

        'Champ2 Date d’exécution
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(DateExecution.Value, "yyyyMMdd") + "0000"

        'Champ3 Lieu d’exécution 0 pharamcie | 1 domicile patient
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

        'Champ 4 Code prestation
        Dim CodePrestation As String = Vente(VenteCodeActe.Index, numligne).Value.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, CodePrestation, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = CodePrestation

        'Champ 5 CCAM : champ non renseigné
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

        'Champ6 Montant des honoraires (p280/906) + calcul valeur champs suivant 11,12
        Dim MontantHonoraires As Integer = 0
        Dim PrixUnitaire As Double = 0
        Dim BaseRemboursement As Double = 0

        Dim quantité_lpp As Integer = 1
        MontantHonoraires = Vente(VenteTotal.Index, numligne).Value * 100
        'PrixUnitaire = Vente(VenteTotal.Index, numligne).Value * 100
        If Vente(VenteLPP.Index, numligne).Value.ToString <> "" Then
            quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité(Vente(VenteCIP.Index, numligne).Value.ToString, Vente(VenteEAN13.Index, numligne).Value.ToString, _
                                                                               Vente(Ventecab.Index, numligne).Value.ToString, Vente(Vente_produits.Index, numligne).Value.ToString)
            BaseRemboursement = Val(LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, numligne).Value.ToString, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP) _
                * (Vente(VenteQuantité.Index, numligne).Value) * quantité_lpp
        ElseIf Not Vente(VenteTFRprix.Index, numligne).Value Is Nothing Then 'pas de code lpp, le controle du top codage affiné est effectué dans une fction de controle
            BaseRemboursement = Vente(VenteTFRprix.Index, numligne).Value * 100 * Vente(VenteQuantité.Index, numligne).Value
        Else
            BaseRemboursement = 0 'pas de code lpp, pas de TFR -->pas de remboursement, nah!
        End If
        PrixUnitaire = BaseRemboursement
        'If Vente(VentePrix.Index, numligne).Value * 100 < BaseRemboursement Then
        'BaseRemboursement = Vente(VentePrix.Index, numligne).Value * 100
        'If MontantHonoraires < BaseRemboursement Then
        '    BaseRemboursement = MontantHonoraires
        'End If
        If UCase(NatureAssurance_Button.Text) = "SMG" Then
            MontantHonoraires = SMG.montant_facturé_par_acte(numligne)
            PrixUnitaire = BaseRemboursement
        End If
        Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        Total_FSE = Total_FSE + BaseRemboursement
        SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = BaseRemboursement.ToString

        'Champ7 Qualificatif de la dépense
        If Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6) = 0 Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G"
        ElseIf CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CodePrestation = "PHN" Or CurrentFactureVitale.Non_Rembousable_CheckBox(Nombre_de_Prestations) = True Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "N", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
        ElseIf UCase(NatureAssurance_Button.Text) = "SMG" And CurrentFactureVitale.G1515C1 <> "" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "L", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "L"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = ""
        End If

        'Champ8 Coefficient
        SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"

        'Champ9 Quantité
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"

        'Champ10 Dénombrement
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = "1"


        'Champ11
        If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" And (Not (Vente(VenteTFRprix.Index, numligne).Value Is Nothing)) Then
            PrixUnitaire = Vente(VenteTFRprix.Index, numligne).Value * 100 * Vente(VenteQuantité.Index, numligne).Value
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitaire, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = PrixUnitaire

        'champ 12
        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = "0"
        ElseIf CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" And (Not (Vente(VenteTFRprix.Index, numligne).Value Is Nothing)) Then
            BaseRemboursement = (Vente(VenteTFRprix.Index, numligne).Value) * 100 * Vente(VenteQuantité.Index, numligne).Value
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = BaseRemboursement
        End If

        'champ13
        Dim tauxamo As Integer
        If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" Or CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" Then 'or CurrentFactureVitale.Mode_Gestion = "AME_Base" Then ' Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            tauxamo = 0
        Else
            Select Case NatureAssurance_Button.Text
                Case "MATERNITE", "ACCIDENT DU TRAVAIL", "PREVENTION", "SMG"
                    tauxamo = 100
                Case Else
                    If Vente(VenteType.Index, numligne).Value.ToString = "ALD" Or Vente(VenteType.Index, numligne).Value.ToString = "PREV" Or Vente(VenteType.Index, numligne).Value.ToString = "SP" Then
                        tauxamo = 100
                    Else
                        tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                    End If
            End Select
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        '    Vente(VenteAMO.Index, numligne).Value = tauxamo
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, tauxamo, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        Vente(VenteAMO.Index, numligne).Value = tauxamo
        'End If
        'champ 14 Montant remboursable par l’AMO
        Dim MontantremboursableAMO As Double
        If UCase(NatureAssurance_Button.Text) <> "SMG" Then
            If MontantHonoraires < BaseRemboursement Then
                MontantremboursableAMO = Arrondis((MontantHonoraires) * Val(tauxamo) / 100)
            Else
                MontantremboursableAMO = Arrondis((BaseRemboursement) * Val(tauxamo) / 100)
            End If
            For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
                If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                    MontantremboursableAMO = CurrentFactureVitale.Forçage_Part_AMO(i).Montant
                    Exit For
                End If
            Next
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        Else
            MontantremboursableAMO = SMG.part_amo_par_acte(numligne)
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = "0"
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMO, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = MontantremboursableAMO
        'End If
        'champ 15
        Dim champ15 As String = ""
        If MontantGlobalPriseEnchargeToolStripTextBox.Text <> "" Then
            champ15 = (MontantHonoraires - MontantremboursableAMO).ToString
            If Val(champ15) > CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS Then
                champ15 = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS.ToString
                CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS = 0
            Else
                CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS - Val(champ15)
            End If
        Else
            For i = 0 To CurrentFactureVitale.PEC.Montants_Actes.Length - 1
                If CurrentFactureVitale.PEC.Montants_Actes(i).Num_Acte = Nombre_de_Prestations Then
                    champ15 = CurrentFactureVitale.PEC.Montants_Actes(i).Montant.ToString
                End If
            Next
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, champ15, Visu_API, FichierTrace)

        'champ 16
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)

        If MontantHonoraires < MontantremboursableAMO + Val(champ15) Then
            MyMsg_Box.Presentation("Officine !", Vente(Vente_produits.Index, numligne).Value.ToString + Chr(10) + Chr(10) + "Montant du remboursement (AMO+AMC) > Montant des Honoraires" + Chr(10) + "Tarification interrompue", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If

        Return True
    End Function
    Public Function groupe1610LPP_STS_Kits(ByVal NumeroSession As UInt16, ByVal numligne As Integer, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, _
                                       ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, _
                                       ByVal Kit As PharmaDataSet.KitsDataTable, ByVal quantité_produit As Integer, ByRef Total_FSE As Double) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Nombre_de_Prestations = Nombre_de_Prestations + 1

        SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

        If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
            ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
        End If

        'Champ1
        Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

        'Champ2 Date d’exécution
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(DateExecution.Value, "yyyyMMdd") + "0000"

        'Champ3 Lieu d’exécution 0 pharamcie | 1 domicile patient
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

        'Champ 4 Code prestation
        Dim CodePrestation As String = Me.LPPTableAdapter.GetDataBy_CodeLPP(Kit(0).Code_LPP).Item(0).Prestation
        SGD_AjouterChamp_Tracé(NumeroSession, CodePrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = CodePrestation

        'Champ 5 CCAM : champ non renseigné
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

        'Champ6 Montant des honoraires (p280/906) + calcul valeur champs suivant 11,12
        Dim MontantHonoraires As Integer = Vente(VenteTotal.Index, numligne).Value * 100
        Dim PrixUnitaire As Double = 0
        Dim BaseRemboursement As Double = 0
        For Each ligne_du_kit As PharmaDataSet.KitsRow In Kit
            BaseRemboursement = BaseRemboursement + ((Me.LPPTableAdapter.GetData_CodeLPP_Date(ligne_du_kit.Code_LPP, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP * ligne_du_kit.Quantité_LPP) * quantité_produit)
        Next
        PrixUnitaire = BaseRemboursement
        If UCase(NatureAssurance_Button.Text) = "SMG" Then
            MontantHonoraires = SMG.montant_facturé_par_acte(numligne)
            PrixUnitaire = BaseRemboursement
        End If
        Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        Total_FSE = Total_FSE + BaseRemboursement
        SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = BaseRemboursement.ToString

        'Champ7 Qualificatif de la dépense
        If Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6) = 0 Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G"
        ElseIf CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CodePrestation = "PHN" Or CurrentFactureVitale.Non_Rembousable_CheckBox(Nombre_de_Prestations) = True Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl"
            SGD_AjouterChamp_Tracé(NumeroSession, "N", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
        ElseIf UCase(NatureAssurance_Button.Text) = "SMG" And CurrentFactureVitale.G1515C1 <> "" Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "L"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = ""
        End If

        'Champ8 Coefficient
        SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"

        'Champ9 Quantité
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"

        'Champ10 Dénombrement
        SGD_AjouterChamp_Tracé(NumeroSession, Kit.Count, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = Kit.Count


        'Champ11
        SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitaire.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = PrixUnitaire

        'champ 12
        If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" Then 'or CurrentFactureVitale.Mode_Gestion = "AME_Base" Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = "0"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = BaseRemboursement
        End If
        'champ13
        Dim tauxamo As Integer
        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Then ' Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            tauxamo = 0
        Else
            Select Case NatureAssurance_Button.Text
                Case "MATERNITE", "ACCIDENT DU TRAVAIL", "PREVENTION", "SMG"
                    tauxamo = 100
                Case Else
                    If Vente(VenteType.Index, numligne).Value.ToString = "ALD" Or Vente(VenteType.Index, numligne).Value.ToString = "PREV" Or Vente(VenteType.Index, numligne).Value.ToString = "SP" Then
                        tauxamo = 100
                    Else
                        tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                    End If
            End Select
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        '    Vente(VenteAMO.Index, numligne).Value = tauxamo
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, tauxamo.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        Vente(VenteAMO.Index, numligne).Value = tauxamo
        'End If
        'champ 14 Montant remboursable par l’AMO
        Dim MontantremboursableAMO As Double
        If UCase(NatureAssurance_Button.Text) <> "SMG" Then
            If MontantHonoraires < BaseRemboursement Then
                MontantremboursableAMO = Arrondis((MontantHonoraires) * Val(tauxamo) / 100)
            Else
                MontantremboursableAMO = Arrondis((BaseRemboursement) * Val(tauxamo) / 100)
            End If
            For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
                If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                    MontantremboursableAMO = CurrentFactureVitale.Forçage_Part_AMO(i).Montant
                    Exit For
                End If
            Next
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        Else
            MontantremboursableAMO = SMG.part_amo_par_acte(numligne)
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = "0"
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMO.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = MontantremboursableAMO
        'End If
        'champ 15
        Dim champ15 As String = ""
        If MontantGlobalPriseEnchargeToolStripTextBox.Text <> "" Then
            champ15 = (MontantHonoraires - MontantremboursableAMO).ToString
            If Val(champ15) > CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS Then
                champ15 = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS.ToString
                CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS = 0
            Else
                CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS - Val(champ15)
            End If
        Else
            For i = 0 To CurrentFactureVitale.PEC.Montants_Actes.Length - 1
                If CurrentFactureVitale.PEC.Montants_Actes(i).Num_Acte = Nombre_de_Prestations Then
                    champ15 = CurrentFactureVitale.PEC.Montants_Actes(i).Montant.ToString
                End If
            Next
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, champ15, Visu_API, FichierTrace)
        'champ 16
        'Dim Reste As Integer
        'If MontantremboursableAMC > 0 Then
        '    Reste = BaseRemboursement - MontantremboursableAMO - MontantremboursableAMC
        'Else
        '    Reste = BaseRemboursement - MontantremboursableAMO
        'End If
        'If Reste < 0 Then
        '    Reste = 0
        'End If
        'SGD_AjouterChamp_Tracé(NumeroSession, Reste.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
        'CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = Reste
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = "0"

        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 3

        If MontantHonoraires < MontantremboursableAMO + CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 Then
            MyMsg_Box.Presentation("Officine !", Vente(Vente_produits.Index, numligne).Value.ToString + Chr(10) + Chr(10) + "Montant du remboursement (AMO+AMC) > Montant des Honoraires" + Chr(10) + "Tarification interrompue", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If

        Return True

    End Function
    'groupe 1610 Médicaments
    Public Function groupe1610Médicaments(ByVal NumeroSession As UInt16, ByVal numligne As Integer, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, ByRef Total_FSE As Double) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Nombre_de_Prestations = Nombre_de_Prestations + 1

        SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

        If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
            ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
        End If


        'Champ1
        Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

        'Champ2 Date d’exécution
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(DateExecution.Value, "yyyyMMdd") + "0000"

        'Champ3 Lieu d’exécution 0 pharmacie | 1 domicile patient
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

        'Champ 4 Code prestation
        SGD_AjouterChamp_Tracé(NumeroSession, Vente(VenteCodeActe.Index, numligne).Value, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = Vente(VenteCodeActe.Index, numligne).Value.ToString

        'Champ 5 CCAM : champ non renseigné
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

        'Champ6 Montant des honoraires
        Dim MontantHonoraires As Integer = 0
        If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) And CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).DétailCodeCIP.G1740C8 = "D" Then
            'deconditionement: MontantHonoraires= hono disp * quantitée boites utilisées
            MontantHonoraires = Vente(VentePrix.Index, numligne).Value * 100 * Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).DétailCodeCIP.G1740C11)

        ElseIf tab_Lignes_Vente(numligne).deconditionement Then
            MontantHonoraires = tab_Lignes_Vente(numligne).deconditionement_prix_unitaire * tab_Lignes_Vente(numligne).deconditionement_quantité

        Else
            If UCase(NatureAssurance_Button.Text) <> "SMG" Then
                MontantHonoraires = Vente(VenteTotal.Index, numligne).Value * 100
            Else
                MontantHonoraires = SMG.montant_facturé_par_acte(numligne)
            End If

        End If
        Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        Total_FSE = Total_FSE + MontantHonoraires
        SGD_AjouterChamp_Tracé(NumeroSession, MontantHonoraires, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = MontantHonoraires.ToString


        'Champ7 Qualificatif de la dépense
        If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).G1610C7
        Else

            If InStr(Vente(Vente_produits.Index, numligne).Value.ToString, "Acte de biologie avec Dépassement pour exigence") <> 0 And Vente(VenteCodeActe.Index, numligne).Value.ToString = "B" Then
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "E"
            ElseIf Me.CodePrestationsTableAdapter.GetDataBy_CodeActe(Vente(VenteCodeActe.Index, numligne).Value.ToString).Item(0).CompatibleTable1 = False And CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 <> "N" Then
                MyMsg_Box.Presentation("Officine ?", "l'acte " + Vente(VenteCodeActe.Index, numligne).Value.ToString + " est-il remboursable?", True, "Oui", True, "Non", False, "")
                If MyMsg_Box.ShowDialog() = MsgBoxResult.No Then
                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
                End If
            End If
            If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 <> "N" And CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 <> "E" Then
                If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or Vente(VenteCodeActe.Index, numligne).Value.ToString = "PHN" Or CurrentFactureVitale.Non_Rembousable_CheckBox(Nombre_de_Prestations) = True Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" _
                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
                ElseIf UCase(NatureAssurance_Button.Text) = "SMG" And CurrentFactureVitale.G1515C1 <> "" Then
                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "L"
                ElseIf Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6) = 0 Then
                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G"
                Else
                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = ""
                End If
            End If
            'médicaments_détournables
            If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 <> "N" Then
                If Médicaments_Détournables = True Then
                    Dim datatable As DataTable = Me.BDM_médicaments_detournablesTableAdapter.GetDataBy_CIP(Vente(VenteEAN13.Index, Nombre_de_Prestations - 1).Value.ToString, Vente(VenteCIP.Index, Nombre_de_Prestations - 1).Value.ToString)
                    If datatable.Rows.Count > 0 Or Vente.Item(VenteListe.Index, Nombre_de_Prestations).Value = "Stupéfiant" Then
                        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
                    End If
                End If
            End If
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7, Visu_API, FichierTrace, Nombre_de_Prestations)

        'Champ8 Coefficient
        If Vente.Item(Vente_G1610C8.Index, numligne).Value IsNot DBNull.Value And Vente.Item(Vente_G1610C8.Index, numligne).Value IsNot Nothing And Val(Vente.Item(Vente_G1610C8.Index, numligne).Value) <> 0 Then 'Coefficient G1610C8
            SGD_AjouterChamp_Tracé(NumeroSession, Vente.Item(Vente_G1610C8.Index, numligne).Value, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = Vente.Item(Vente_G1610C8.Index, numligne).Value
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"
        End If

        'Champ9 Quantité
        If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) Then

            If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).DétailCodeCIP.G1740C8 = "D" Then
                'deconditionement: quantité hono disp=nombre de boites utilisées
                SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).DétailCodeCIP.G1740C11, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations - 1).DétailCodeCIP.G1740C11
            Else
                SGD_AjouterChamp_Tracé(NumeroSession, Vente(VenteQuantité.Index, numligne).Value.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = Vente(VenteQuantité.Index, numligne).Value.ToString
            End If

        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"
        End If

        'Champ10 Dénombrement
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = "1"

        'Champ11 Prix unitaire

        Dim PrixUnitaire As String
        Dim quantité As Integer
        If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) Then
            PrixUnitaire = (Vente(VenteTFRprix.Index, numligne).Value) * 100 '* Vente(VenteQuantité.Index, numligne).Value
        Else

            If tab_Lignes_Vente(numligne).deconditionement Then
                PrixUnitaire = tab_Lignes_Vente(numligne).deconditionement_prix_unitaire * tab_Lignes_Vente(numligne).deconditionement_quantité

            ElseIf CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" Then
                PrixUnitaire = (Vente(VenteTFRprix.Index, numligne).Value) * 100 * Vente(VenteQuantité.Index, numligne).Value

            ElseIf CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" And CurrentFactureVitale.Mode_Gestion <> "AME_Base" Then 'en AME_base, le logiciel utilise la variable BaseRemboursement pour calculer le montant AMC, toutefois la base remboursement renseignée dans la facture est 0
                PrixUnitaire = (Vente(VentePrix.Index, numligne).Value) * 100 * Vente(VenteQuantité.Index, numligne).Value
            Else
                If UCase(NatureAssurance_Button.Text) <> "SMG" Then
                    quantité = Vente(VenteQuantité.Index, numligne).Value
                    PrixUnitaire = Vente(VenteTFRprix.Index, numligne).Value * 100 * quantité
                Else
                    PrixUnitaire = Vente(VenteTotal.Index, numligne).Value * 100
                End If
            End If
            PrixUnitaire = Val(PrixUnitaire).ToString
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitaire, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = PrixUnitaire

        'champ 12 Base de remboursement
        Dim BaseRemboursement As Integer
        If tab_Lignes_Vente(numligne).deconditionement = True Then
            BaseRemboursement = PrixUnitaire

        ElseIf CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" Then
            BaseRemboursement = Vente(VenteTFRprix.Index, numligne).Value * 100 * Vente(VenteQuantité.Index, numligne).Value
        ElseIf CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" And CurrentFactureVitale.Mode_Gestion <> "AME_Base" Then 'en AME_base, le logiciel utilise la variable BaseRemboursement pour calculer le montant AMC, toutefois la base remboursement renseignée dans la facture est 0
            BaseRemboursement = 0

        Else
            If UCase(NatureAssurance_Button.Text) <> "SMG" Then
                Dim PUmedTFR As Double = Vente(VenteTFRprix.Index, numligne).Value * 100
                BaseRemboursement = PUmedTFR * quantité
                PUmedTFR = Nothing
                quantité = Nothing
                If BaseRemboursement = 0 And Vente(VenteCodeActe.Index, numligne).Value <> "PHN" Then
                    BaseRemboursement = Vente(VenteTotal.Index, numligne).Value * 100
                End If
            Else
                If Me.CodePrestationsTableAdapter.SelectTypeNomenclatureByCodeActe(Vente(VenteCodeActe.Index, numligne).Value.ToString) = "Frais PH" Then
                    Dim PUmedTFR As Double = Vente(VenteTFRprix.Index, numligne).Value * 100
                    BaseRemboursement = PUmedTFR * quantité
                    PUmedTFR = Nothing
                    quantité = Nothing
                    If BaseRemboursement = 0 Then
                        BaseRemboursement = Vente(VenteTotal.Index, numligne).Value * 100
                    End If
                Else
                    BaseRemboursement = 0
                End If
            End If

        End If

        If Vente.Item(Vente_G1610C8.Index, numligne).Value IsNot DBNull.Value And Vente.Item(Vente_G1610C8.Index, numligne).Value IsNot Nothing And Val(Vente.Item(Vente_G1610C8.Index, numligne).Value) <> 0 Then 'Coefficient G1610C8
            BaseRemboursement = Val(BaseRemboursement * Vente.Item(Vente_G1610C8.Index, numligne).Value / 100)
        End If

        If BaseRemboursement > Vente(VenteTotal.Index, numligne).Value * 100 And tab_Lignes_Vente(numligne).deconditionement = False And CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 <> "G" Then
            BaseRemboursement = Vente(VenteTotal.Index, numligne).Value * 100
        End If

        'If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) Then
        '    BaseRemboursement = CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6
        'End If


        If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4) Then
            BaseRemboursement = PrixUnitaire * Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9)
        End If



        If CurrentFactureVitale.Mode_Gestion <> "AME_Base" And Vente(VenteCodeActe.Index, numligne).Value <> "PHN" Then 'en AME_base, le logiciel utilise la variable BaseRemboursement pour calculer le montant AMC, toutefois la base remboursement renseignée dans la facture est 0
            BaseRemboursement = Val(BaseRemboursement).ToString
            SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = BaseRemboursement
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, 0, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = 0
        End If

        'champ13 Taux applicable à la prestation
        Dim tauxamo As Integer
        If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" Or CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" Then
            tauxamo = 0
        Else
            Select Case NatureAssurance_Button.Text
                Case "MATERNITE", "ACCIDENT DU TRAVAIL", "PREVENTION", "SMG"
                    tauxamo = 100
                Case Else
                    If Vente(VenteType.Index, numligne).Value.ToString = "ALD" Or Vente(VenteType.Index, numligne).Value.ToString = "PREV" Or Vente(VenteType.Index, numligne).Value.ToString = "SP" Then
                        tauxamo = 100
                    Else
                        If Val(Renouvellement_TextBox.Text) = 0 Or CurrentBenéficiaire.G101C10 = "04" Then
                            tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                        Else
                            If (CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO())) < CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(DateExecution.Value))) Then
                                CurrentFactureVitale.Renouvellement_Date_Droits_AMO_est_date_éxécution = True
                                tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(DateExecution.Value))
                            Else
                                CurrentFactureVitale.Renouvellement_Date_Droits_AMO_est_date_éxécution = False
                                tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                            End If
                        End If
                    End If
            End Select
        End If

   
        SGD_AjouterChamp_Tracé(NumeroSession, tauxamo, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        Vente(VenteAMO.Index, numligne).Value = tauxamo
        If tauxamo > HonoDispGlobaux_TauxAMO And Mid(Vente.Item(VenteCodeActe.Index, numligne).Value.ToString, 1, 2) = "PH" _
                And IsNumeric(Mid(Vente.Item(VenteCodeActe.Index, numligne).Value.ToString, 3, 1)) Then
            HonoDispGlobaux_TauxAMO = tauxamo
        End If


        'champ 14 Montant remboursable par l’AMO
        Dim MontantremboursableAMO As Integer
        If UCase(NatureAssurance_Button.Text) <> "SMG" Then
            MontantremboursableAMO = Arrondis(Val(BaseRemboursement) * Val(tauxamo) / 100)
            For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
                If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                    MontantremboursableAMO = CurrentFactureVitale.Forçage_Part_AMO(i).Montant
                    Exit For
                End If
            Next
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
            'If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            '    MontantremboursableAMO = 0
            'End If
        Else
            MontantremboursableAMO = SMG.part_amo_par_acte(numligne)
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = "0"
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMO, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = MontantremboursableAMO
        'End If


        'champ 15
        Dim MontantremboursableAMC As Integer = 0
        Dim tauxAMC As Integer = 0
        If CheckBox_Facturation_AMC.Checked = True Or CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            If Hono_Disp_Codes_list.Contains(Vente(VenteCodeActe.Index, numligne).Value.ToString) Then
                tauxAMC = CalculTauxAMC("PH" & Mid(Vente(VenteCodeActe.Index, numligne).Value.ToString, 3, 1), CurrentBenéficiaire.AMC_TypeContrat)
            Else
                tauxAMC = CalculTauxAMC(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.AMC_TypeContrat)
            End If
            MontantremboursableAMC = Arrondis((BaseRemboursement * tauxAMC / 100) - MontantremboursableAMO)
            If MontantremboursableAMC > 0 Then
                If MontantremboursableAMC > BaseRemboursement - MontantremboursableAMO Then
                    MontantremboursableAMC = BaseRemboursement - MontantremboursableAMO
                End If
            Else
                MontantremboursableAMC = 0
            End If
            '-------------------------
            'PEC
            If MontantGlobalPriseEnchargeToolStripTextBox.Text <> "" Then
                MontantremboursableAMC = MontantHonoraires - MontantremboursableAMO
                If MontantremboursableAMC > CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global Then
                    MontantremboursableAMC = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global
                    CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global = 0
                Else
                    CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global - MontantremboursableAMC
                End If
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G2010C2 = "1"
            Else
                For i = 0 To CurrentFactureVitale.PEC.Montants_Actes.Length - 1
                    If CurrentFactureVitale.PEC.Montants_Actes(i).Num_Acte = Nombre_de_Prestations Then
                        MontantremboursableAMC = CurrentFactureVitale.PEC.Montants_Actes(i).Montant.ToString
                        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G2010C2 = "1"
                    End If
                Next
            End If
            '-------------------------
            SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMC, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = MontantremboursableAMC
            Total_Théorique_Remboursable_par_AMC = Total_Théorique_Remboursable_par_AMC + MontantremboursableAMC
            Total_Remboursable_par_AMC = Total_Remboursable_par_AMC + MontantremboursableAMC
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = 0
        End If
        'If tauxAMC > HonoDispGlobaux_TauxAMC Then
        '    HonoDispGlobaux_TauxAMC = tauxAMC
        'End If
        If tauxAMC > 0 Then
            HonoDispGlobaux_TauxAMC = 100
        End If

        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = "0"

        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 3

        If MontantHonoraires < MontantremboursableAMO + CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 Then
            MyMsg_Box.Presentation("Officine !", Vente(Vente_produits.Index, numligne).Value.ToString + Chr(10) + Chr(10) + "Montant du remboursement (AMO+AMC) > Montant des Honoraires" + Chr(10) + "Tarification interrompue", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If

        'Select Case CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4
        '    Case "PH1", "PH2", "PH4", "PH7", "MHU"
        '        my_Hono_Disp.exist = True
        '        my_Hono_Disp.prestation_associée = CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4
        '        'my_Hono_Disp.Grand_conditionement = False
        '        my_Hono_Disp.Qualificatif_de_la_dépense = CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7
        '        my_Hono_Disp.Quantité = Vente(VenteQuantité.Index, numligne).Value.ToString
        '        my_Hono_Disp.VenteType = Vente(VenteType.Index, numligne).Value.ToString
        '        'my_Hono_Disp.CodeJustifExo = ? est renseigné dans groupe 1820
        '    Case Else
        '        my_Hono_Disp.exist = False
        'End Select


        Return True
    End Function

    'groupe 1610 LPP
    Public Function groupe1610LPP_regroup(ByVal NumeroSession As UInt16, ByVal numligne As Integer, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, ByRef Total_FSE As Double) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Nombre_de_Prestations = Nombre_de_Prestations + 1

        SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

        If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
            ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
        End If

        'Champ1
        Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

        'Champ2 Date d’exécution
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(DateExecution.Value, "yyyyMMdd") + "0000"

        'Champ3 Lieu d’exécution 0 pharamcie | 1 domicile patient
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

        'Champ 4 Code prestation
        Dim CodePrestation As String = Vente(VenteCodeActe.Index, numligne).Value.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, CodePrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = CodePrestation

        'Champ 5 CCAM : champ non renseigné
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

        'Champ6 Montant des honoraires (p280/906) + calcul valeur champs suivant 11,12
        Dim MontantHonoraires As Integer = 0
        Dim Dénombrement As Integer = 0
        Dim PrixUnitaire As Double = 0
        Dim BaseRemboursement As Double = 0


        For i = 0 To Vente.RowCount - 2
            If Dénombrement < 10 Then

                If Vente(VenteCodeActe.Index, i).Value.ToString = CodePrestation And tab_Lignes_Vente(i).Ligne_traitée = False Then
                    If Vente(VenteLPP.Index, numligne).Value.ToString <> "" Then
                        Dim quantité_lpp As Integer = 1
                        PrixUnitaire = PrixUnitaire + Vente(VenteTotal.Index, i).Value * 100
                        quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité(Vente(VenteCIP.Index, i).Value.ToString, Vente(VenteEAN13.Index, i).Value.ToString, _
                                                                                   Vente(Ventecab.Index, i).Value.ToString, Vente(Vente_produits.Index, i).Value.ToString)
                        BaseRemboursement = BaseRemboursement + _
                            (Val(LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, i).Value.ToString, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP) * _
                                                                 (Vente(VenteQuantité.Index, i).Value) * quantité_lpp)
                    ElseIf Not Vente(VenteTFRprix.Index, i).Value Is Nothing Then 'pas de code lpp, le controle du top codage affiné est effectué dans une fction de controle
                        BaseRemboursement = BaseRemboursement + Vente(VenteTFRprix.Index, i).Value * 100 * Vente(VenteQuantité.Index, i).Value
                    Else
                        BaseRemboursement = BaseRemboursement + 0 'pas de code lpp, pas de TFR -->pas de remboursement, nah!
                    End If


                    Dénombrement = Dénombrement + 1
                    MontantHonoraires = MontantHonoraires + Vente(VenteTotal.Index, i).Value * 100
                End If
            End If
        Next
        PrixUnitaire = BaseRemboursement
        Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        Total_FSE = Total_FSE + BaseRemboursement
        SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = BaseRemboursement.ToString

        'Champ7 Qualificatif de la dépense
        If Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6) = 0 Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G"
        ElseIf CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CodePrestation = "PHN" Or CurrentFactureVitale.Non_Rembousable_CheckBox(Nombre_de_Prestations) = True Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl"
            SGD_AjouterChamp_Tracé(NumeroSession, "N", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
        ElseIf UCase(NatureAssurance_Button.Text) = "SMG" And CurrentFactureVitale.G1515C1 <> "" Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "L"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = ""
        End If

        'Champ8 Coefficient
        SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"

        'Champ9 Quantité
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"

        'Champ10 Dénombrement
        SGD_AjouterChamp_Tracé(NumeroSession, Dénombrement, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = Dénombrement


        'Champ11
        SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitaire.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = PrixUnitaire

        'champ 12
        If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" Then 'or CurrentFactureVitale.Mode_Gestion = "AME_Base" Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = "0"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = BaseRemboursement
        End If
        'champ13
        Dim tauxamo As Integer
        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Then ' Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            tauxamo = 0
        Else
            Select Case NatureAssurance_Button.Text
                Case "MATERNITE", "ACCIDENT DU TRAVAIL", "PREVENTION", "SMG"
                    tauxamo = 100
                Case Else
                    If Vente(VenteType.Index, numligne).Value.ToString = "ALD" Or Vente(VenteType.Index, numligne).Value.ToString = "PREV" Or Vente(VenteType.Index, numligne).Value.ToString = "SP" Then
                        tauxamo = 100
                    Else
                        tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                    End If
            End Select
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        '    Vente(VenteAMO.Index, numligne).Value = tauxamo
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, tauxamo.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        Vente(VenteAMO.Index, numligne).Value = tauxamo
        'End If
        'champ 14 Montant remboursable par l’AMO
        Dim MontantremboursableAMO As Double
        If UCase(NatureAssurance_Button.Text) <> "SMG" Then
            If MontantHonoraires < BaseRemboursement Then
                MontantremboursableAMO = Arrondis((MontantHonoraires) * Val(tauxamo) / 100)
            Else
                MontantremboursableAMO = Arrondis((BaseRemboursement) * Val(tauxamo) / 100)
            End If
            For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
                If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                    MontantremboursableAMO = CurrentFactureVitale.Forçage_Part_AMO(i).Montant
                    Exit For
                End If
            Next
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        Else
            MontantremboursableAMO = SMG.part_amo_par_acte(numligne)
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = "0"
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMO.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = MontantremboursableAMO
        'End If
        'champ 15
        Dim MontantremboursableAMC As Integer = 0
        'If CurrentFactureVitale.TP_AMC = True Then
        If CheckBox_Facturation_AMC.Checked = True Or CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            Dim tauxAMC As Integer = CalculTauxAMC(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.AMC_TypeContrat)
            MontantremboursableAMC = Arrondis((BaseRemboursement * tauxAMC / 100) - MontantremboursableAMO)
            If MontantremboursableAMC > 0 Then
                If MontantremboursableAMC > BaseRemboursement - MontantremboursableAMO Then
                    MontantremboursableAMC = BaseRemboursement - MontantremboursableAMO
                End If
                SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMC.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = MontantremboursableAMC
                Total_Théorique_Remboursable_par_AMC = Total_Théorique_Remboursable_par_AMC + MontantremboursableAMC
                Total_Remboursable_par_AMC = Total_Remboursable_par_AMC + MontantremboursableAMC
            Else
                MontantremboursableAMC = 0
                SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMC, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = MontantremboursableAMC
            End If
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = 0
        End If
        'champ 16
        'Dim Reste As Integer
        'If MontantremboursableAMC > 0 Then
        '    Reste = BaseRemboursement - MontantremboursableAMO - MontantremboursableAMC
        'Else
        '    Reste = BaseRemboursement - MontantremboursableAMO
        'End If
        'If Reste < 0 Then
        '    Reste = 0
        'End If
        'SGD_AjouterChamp_Tracé(NumeroSession, Reste.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
        'CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = Reste
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = "0"

        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 3

        If MontantHonoraires < MontantremboursableAMO + CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 Then
            MyMsg_Box.Presentation("Officine !", Vente(Vente_produits.Index, numligne).Value.ToString + Chr(10) + Chr(10) + "Montant du remboursement (AMO+AMC) > Montant des Honoraires" + Chr(10) + "Tarification interrompue", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If

        Return True

    End Function
    Public Function groupe1610LPP(ByVal NumeroSession As UInt16, ByVal numligne As Integer, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, ByRef Total_FSE As Double) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Nombre_de_Prestations = Nombre_de_Prestations + 1

        SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

        If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
            ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
        End If

        'Champ1
        Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

        'Champ2 Date d’exécution
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(DateExecution.Value, "yyyyMMdd") + "0000"

        'Champ3 Lieu d’exécution 0 pharamcie | 1 domicile patient
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

        'Champ 4 Code prestation
        Dim CodePrestation As String = Vente(VenteCodeActe.Index, numligne).Value.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, CodePrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = CodePrestation

        'Champ 5 CCAM : champ non renseigné
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

        'Champ6 Montant des honoraires (p280/906) + calcul valeur champs suivant 11,12
        Dim MontantHonoraires As Integer = 0
        Dim PrixUnitaire As Double = 0
        Dim BaseRemboursement As Double = 0
        Dim quantité_lpp As Integer = 1
        'PUR Dim Prix_unitaire_réglementé As Double = 0
        MontantHonoraires = Vente(VenteTotal.Index, numligne).Value * 100
        If Vente(VenteLPP.Index, numligne).Value.ToString <> "" Then
            quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité(Vente(VenteCIP.Index, numligne).Value.ToString, Vente(VenteEAN13.Index, numligne).Value.ToString, _
                                                                               Vente(Ventecab.Index, numligne).Value.ToString, Vente(Vente_produits.Index, numligne).Value.ToString)
            Dim rembs = LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, numligne).Value.ToString, Val(Format(DateExecution.Value, "yyyyMMdd")))
            If rembs.Rows.Count <> 0 Then
                BaseRemboursement = Val(rembs.Item(0).PrixLPP) * (Vente(VenteQuantité.Index, numligne).Value) * quantité_lpp
                'PUR Prix_unitaire_réglementé = Val(rembs.Item(0).Prix_unitaire_réglementé) * (Vente(VenteQuantité.Index, numligne).Value) * quantité_lpp
            Else
                MyMsg_Box.Presentation("Officine: Facturation interrompue", Vente(Vente_produits.Index, numligne).Value & vbCrLf & vbCrLf & "Il n'y a pas de tarif de réference pour le code LPP " & Vente(VenteLPP.Index, numligne).Value.ToString & " à la date d'éxecution indiquée (" & DateExecution.Value.ToShortDateString & ")", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Return False
            End If


        ElseIf Not Vente(VenteTFRprix.Index, numligne).Value Is Nothing Then 'pas de code lpp, le controle du top codage affiné est effectué dans une fction de controle
            BaseRemboursement = Vente(VenteTFRprix.Index, numligne).Value * 100 * Vente(VenteQuantité.Index, numligne).Value
        Else
            BaseRemboursement = 0 'pas de code lpp, pas de TFR -->pas de remboursement, nah!
        End If
        If UCase(NatureAssurance_Button.Text) = "SMG" Then
            MontantHonoraires = SMG.montant_facturé_par_acte(numligne)
        End If
        'PUR If Val(Prix_unitaire_réglementé) = 0 Then
        PrixUnitaire = BaseRemboursement
        Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        Total_FSE = Total_FSE + BaseRemboursement
        SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = BaseRemboursement.ToString
        'PUR Else
        'PUR PrixUnitaire = Prix_unitaire_réglementé
        'PUR Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        'PUR Total_FSE = Total_FSE + Prix_unitaire_réglementé
        'PUR SGD_AjouterChamp_Tracé(NumeroSession, Prix_unitaire_réglementé, Visu_API, FichierTrace)
        'PUR CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = Prix_unitaire_réglementé.ToString
        'PUR End If


        'Champ7 Qualificatif de la dépense
        If Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6) = 0 Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G"
        ElseIf CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CodePrestation = "PHN" Or CurrentFactureVitale.Non_Rembousable_CheckBox(Nombre_de_Prestations) = True Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl"
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
        ElseIf UCase(NatureAssurance_Button.Text) = "SMG" And CurrentFactureVitale.G1515C1 <> "" Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "L"
        Else
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = ""
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7, Visu_API, FichierTrace, Nombre_de_Prestations)

        'Champ8 Coefficient
        SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"

        'Champ9 Quantité
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"

        'Champ10 Dénombrement
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = "1"


        'Champ11 Prix unitaire
        SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitaire, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = PrixUnitaire

        'champ 12 Base de remboursement
        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = "0"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = BaseRemboursement
        End If
        'champ13 Taux applicable à la prestation
        Dim tauxamo As Integer
        If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" Or CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" Then 'or CurrentFactureVitale.Mode_Gestion = "AME_Base" Then ' Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            tauxamo = 0
        Else
            Select Case NatureAssurance_Button.Text
                Case "MATERNITE", "ACCIDENT DU TRAVAIL", "PREVENTION", "SMG"
                    tauxamo = 100
                Case Else
                    If Vente(VenteType.Index, numligne).Value.ToString = "ALD" Or Vente(VenteType.Index, numligne).Value.ToString = "PREV" Or Vente(VenteType.Index, numligne).Value.ToString = "SP" Then
                        tauxamo = 100
                    Else
                        tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                    End If
            End Select
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        '    Vente(VenteAMO.Index, numligne).Value = tauxamo
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, tauxamo, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        Vente(VenteAMO.Index, numligne).Value = tauxamo
        'End If
        'champ 14 Montant remboursable par l’AMO
        Dim MontantremboursableAMO As Double
        If UCase(NatureAssurance_Button.Text) <> "SMG" Then
            If MontantHonoraires < BaseRemboursement Then
                MontantremboursableAMO = Arrondis((MontantHonoraires) * Val(tauxamo) / 100)
            Else
                MontantremboursableAMO = Arrondis((BaseRemboursement) * Val(tauxamo) / 100)
            End If
            For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
                If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                    MontantremboursableAMO = CurrentFactureVitale.Forçage_Part_AMO(i).Montant
                    Exit For
                End If
            Next
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        Else
            MontantremboursableAMO = SMG.part_amo_par_acte(numligne)
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = "0"
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMO, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = MontantremboursableAMO
        'End If

        'champ 15 Montant théorique remboursable de la part complémentaire
        Dim MontantremboursableAMC As Integer = 0
        If CheckBox_Facturation_AMC.Checked = True Or CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            Dim tauxAMC As Integer = CalculTauxAMC(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.AMC_TypeContrat)
            MontantremboursableAMC = Arrondis((BaseRemboursement * tauxAMC / 100) - MontantremboursableAMO)
            If MontantremboursableAMC > 0 Then
                If MontantremboursableAMC > BaseRemboursement - MontantremboursableAMO Then
                    MontantremboursableAMC = BaseRemboursement - MontantremboursableAMO
                End If
            Else
                MontantremboursableAMC = 0
            End If
            '------------------------
            'PEC
            If MontantGlobalPriseEnchargeToolStripTextBox.Text <> "" Then
                MontantremboursableAMC = MontantHonoraires - MontantremboursableAMO
                If MontantremboursableAMC > CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global Then
                    MontantremboursableAMC = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global
                    CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global = 0
                Else
                    CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global - MontantremboursableAMC
                End If
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G2010C2 = "1"
            Else
                For i = 0 To CurrentFactureVitale.PEC.Montants_Actes.Length - 1
                    If CurrentFactureVitale.PEC.Montants_Actes(i).Num_Acte = Nombre_de_Prestations Then
                        MontantremboursableAMC = CurrentFactureVitale.PEC.Montants_Actes(i).Montant.ToString
                        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G2010C2 = "1"
                    End If
                Next
            End If
            '------------------------
            SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMC, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = MontantremboursableAMC
            Total_Théorique_Remboursable_par_AMC = Total_Théorique_Remboursable_par_AMC + MontantremboursableAMC
            Total_Remboursable_par_AMC = Total_Remboursable_par_AMC + MontantremboursableAMC
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = 0
        End If
        'champ 16 Montant de la majoration du Ticket Modérateur restant à la charge de l’assuré
        'Dim Reste As Integer
        'If MontantremboursableAMC > 0 Then
        '    Reste = BaseRemboursement - MontantremboursableAMO - MontantremboursableAMC
        'Else
        '    Reste = BaseRemboursement - MontantremboursableAMO
        'End If
        'If Reste < 0 Then
        '    Reste = 0
        'End If
        'SGD_AjouterChamp_Tracé(NumeroSession, Reste, Visu_API, FichierTrace, Nombre_de_Prestations)
        'CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = Reste
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = "0"

        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 3

        If MontantHonoraires < MontantremboursableAMO + CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 Then
            MyMsg_Box.Presentation("Officine !", Vente(Vente_produits.Index, numligne).Value.ToString + Chr(10) + Chr(10) + "Montant du remboursement (AMO+AMC) > Montant des Honoraires" + Chr(10) + "Tarification interrompue", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If

        Return True
    End Function
    Public Function groupe1610LPP_Kits(ByVal NumeroSession As UInt16, ByVal numligne As Integer, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, _
                                       ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, _
                                       ByVal Kit As PharmaDataSet.KitsDataTable, ByVal quantité_produit As Integer, ByRef Total_FSE As Double) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Nombre_de_Prestations = Nombre_de_Prestations + 1

        SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

        If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
            ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
        End If

        'Champ1
        Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

        'Champ2 Date d’exécution
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(DateExecution.Value, "yyyyMMdd") + "0000"

        'Champ3 Lieu d’exécution 0 pharamcie | 1 domicile patient
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

        'Champ 4 Code prestation
        Dim CodePrestation As String = Me.LPPTableAdapter.GetDataBy_CodeLPP(Kit(0).Code_LPP).Item(0).Prestation
        SGD_AjouterChamp_Tracé(NumeroSession, CodePrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = CodePrestation

        'Champ 5 CCAM : champ non renseigné
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

        'Champ6 Montant des honoraires (p280/906) + calcul valeur champs suivant 11,12
        Dim MontantHonoraires As Integer = Vente(VenteTotal.Index, numligne).Value * 100
        Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        'SGD_AjouterChamp_Tracé(NumeroSession, MontantHonoraires.ToString, Visu_API, FichierTrace)
        'CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = MontantHonoraires.ToString
        Dim PrixUnitaire As Double = 0
        Dim BaseRemboursement As Double = 0
        For Each ligne_du_kit As PharmaDataSet.KitsRow In Kit
            BaseRemboursement = BaseRemboursement + ((Me.LPPTableAdapter.GetData_CodeLPP_Date(ligne_du_kit.Code_LPP, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP * ligne_du_kit.Quantité_LPP) * quantité_produit)
        Next
        PrixUnitaire = BaseRemboursement
        If UCase(NatureAssurance_Button.Text) = "SMG" Then
            MontantHonoraires = SMG.montant_facturé_par_acte(numligne)
            PrixUnitaire = BaseRemboursement
        End If
        Total_FSE = Total_FSE + BaseRemboursement
        SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = BaseRemboursement.ToString


        'Champ7 Qualificatif de la dépense
        If Val(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6) = 0 Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G"
        ElseIf CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CodePrestation = "PHN" Or CurrentFactureVitale.Non_Rembousable_CheckBox(Nombre_de_Prestations) = True Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl"
            SGD_AjouterChamp_Tracé(NumeroSession, "N", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N"
        ElseIf UCase(NatureAssurance_Button.Text) = "SMG" And CurrentFactureVitale.G1515C1 <> "" Then
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "L"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = ""
        End If

        'Champ8 Coefficient
        SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"

        'Champ9 Quantité
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"

        'Champ10 Dénombrement
        'SGD_AjouterChamp_Tracé(NumeroSession, Kit.Count, Visu_API, FichierTrace, Nombre_de_Prestations)
        'CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = Kit.Count
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = "1"

        'Champ11
        SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitaire.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = PrixUnitaire

        'champ 12
        If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" Then 'or CurrentFactureVitale.Mode_Gestion = "AME_Base" Then 'Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = "0"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = BaseRemboursement
        End If
        'champ13
        Dim tauxamo As Integer
        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Then ' Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            tauxamo = 0
        Else
            Select Case NatureAssurance_Button.Text
                Case "MATERNITE", "ACCIDENT DU TRAVAIL", "PREVENTION", "SMG"
                    tauxamo = 100
                Case Else
                    If Vente(VenteType.Index, numligne).Value.ToString = "ALD" Or Vente(VenteType.Index, numligne).Value.ToString = "PREV" Or Vente(VenteType.Index, numligne).Value.ToString = "SP" Then
                        tauxamo = 100
                    Else
                        tauxamo = CalculTauxAMO(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                    End If
            End Select
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        '    Vente(VenteAMO.Index, numligne).Value = tauxamo
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, tauxamo.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo
        Vente(VenteAMO.Index, numligne).Value = tauxamo
        'End If
        'champ 14 Montant remboursable par l’AMO
        Dim MontantremboursableAMO As Double
        If UCase(NatureAssurance_Button.Text) <> "SMG" Then
            If MontantHonoraires < BaseRemboursement Then
                MontantremboursableAMO = Arrondis((MontantHonoraires) * Val(tauxamo) / 100)
            Else
                MontantremboursableAMO = Arrondis((BaseRemboursement) * Val(tauxamo) / 100)
            End If
            For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
                If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                    MontantremboursableAMO = CurrentFactureVitale.Forçage_Part_AMO(i).Montant
                    Exit For
                End If
            Next
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        Else
            MontantremboursableAMO = SMG.part_amo_par_acte(numligne)
            Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        End If
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        '    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = "0"
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMO.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = MontantremboursableAMO
        'End If
        'champ 15
        Dim MontantremboursableAMC As Integer = 0
        'If CurrentFactureVitale.TP_AMC = True Then
        If CheckBox_Facturation_AMC.Checked = True Or CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            Dim tauxAMC As Integer = CalculTauxAMC(Vente(VenteCodeActe.Index, numligne).Value.ToString, CurrentBenéficiaire.AMC_TypeContrat)
            MontantremboursableAMC = Arrondis((BaseRemboursement * tauxAMC / 100) - MontantremboursableAMO)
            If MontantremboursableAMC > 0 Then
                If MontantremboursableAMC > BaseRemboursement - MontantremboursableAMO Then
                    MontantremboursableAMC = BaseRemboursement - MontantremboursableAMO
                End If
                SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMC.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = MontantremboursableAMC
                Total_Théorique_Remboursable_par_AMC = Total_Théorique_Remboursable_par_AMC + MontantremboursableAMC
                Total_Remboursable_par_AMC = Total_Remboursable_par_AMC + MontantremboursableAMC
            Else
                MontantremboursableAMC = 0
                SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMC, Visu_API, FichierTrace, Nombre_de_Prestations)
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = MontantremboursableAMC
            End If
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = 0
        End If
        'champ 16
        'Dim Reste As Integer
        'If MontantremboursableAMC > 0 Then
        '    Reste = BaseRemboursement - MontantremboursableAMO - MontantremboursableAMC
        'Else
        '    Reste = BaseRemboursement - MontantremboursableAMO
        'End If
        'If Reste < 0 Then
        '    Reste = 0
        'End If
        'SGD_AjouterChamp_Tracé(NumeroSession, Reste.ToString, Visu_API, FichierTrace, Nombre_de_Prestations)
        'CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = Reste
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = "0"

        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 3

        If MontantHonoraires < MontantremboursableAMO + CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 Then
            MyMsg_Box.Presentation("Officine !", Vente(Vente_produits.Index, numligne).Value.ToString + Chr(10) + Chr(10) + "Montant du remboursement (AMO+AMC) > Montant des Honoraires" + Chr(10) + "Tarification interrompue", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If

        Return True

    End Function

    'Groupe 1730 : Prestation détaillée LPP
    Public Sub groupe1730_regroup(ByVal NumeroSession As UInt16, ByVal NuméroPrestation As String, ByVal ligne As Integer, ByRef Occurence1730 As Integer)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        'groupe 1730
        SGD_AjouterGroupe_Tracé(NumeroSession, "1730", Visu_API, FichierTrace)
        Occurence1730 = Occurence1730 + 1
        ReDim Preserve CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730)

        'champ 1
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C1 = NuméroPrestation

        'champ 2
        If IsNumeric(Vente(VenteLPP.Index, ligne).Value.ToString) And CurrentFactureVitale.TabLigneFacture(NuméroPrestation).G1610C4 <> "PA" Then
            SGD_AjouterChamp_Tracé(NumeroSession, Vente(VenteLPP.Index, ligne).Value.ToString, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C2 = Vente(VenteLPP.Index, ligne).Value.ToString
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C2 = Vente(VenteLPP.Index, ligne).Value.ToString
        End If

        'champ 3,4,5,6 type de prestation
        Dim LPP_Type_Service As String = ""
        If CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C3 = "" Then
            LPP_Type_Service = Me.ProduitsTableAdapter.Select_LPP_Type_Service(Vente(VenteCIP.Index, ligne).Value.ToString, Vente(VenteEAN13.Index, ligne).Value.ToString, _
                                                                               Vente(Ventecab.Index, ligne).Value.ToString, Vente(Vente_produits.Index, ligne).Value.ToString)
            While LPP_Type_Service <> "A" And LPP_Type_Service <> "E" And LPP_Type_Service <> "L" And LPP_Type_Service <> "P" And LPP_Type_Service <> "S" And LPP_Type_Service <> "R" And LPP_Type_Service <> "V"
                Dim var As String = ""
                MyInptBox.my_showdialog(Vente(Vente_produits.Index, ligne).Value.ToString + Chr(10) + Chr(10) + "TYPE SERVICE LPP? ( A, E, L, P, S, R ou V)", VarType(var), 1, "")
                LPP_Type_Service = UCase(MyInptBox.result)
            End While
        Else
            LPP_Type_Service = CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C3 'pour éviter réinterrogation à tous les passges STS et facturation
        End If

        Select Case LPP_Type_Service
            Case "L", "S" 'Location Service
                SGD_AjouterChamp_Tracé(NumeroSession, LPP_Type_Service, Visu_API, FichierTrace) 'champ 3
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C3 = LPP_Type_Service
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace) 'champ 4
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C4 = ""
                If Jeux_d_essai2.Visible = False Then
                    Lpp_Location_Date.ShowDialog() 'ce formulaire donne les valeurs à location_lpp_date_debut et location_lpp_date_fin
                Else
                    location_lpp_date_debut = Format(Jeux_d_essai2.JEUX_D_ESSAI_LignesTableAdapter.GetDataBy_Serie_Num(Jeux_d_essai2.Serie_ComboBox.Text, Jeux_d_essai2.Num_ComboBox.Text)(Val(NuméroPrestation) - 1).LPP_Date_Début, "yyyyMMdd") + "0000"
                    location_lpp_date_fin = Format(Jeux_d_essai2.JEUX_D_ESSAI_LignesTableAdapter.GetDataBy_Serie_Num(Jeux_d_essai2.Serie_ComboBox.Text, Jeux_d_essai2.Num_ComboBox.Text)(Val(NuméroPrestation) - 1).LPP_Date_Fin, "yyyyMMdd") + "0000"
                End If
                SGD_AjouterChamp_Tracé(NumeroSession, location_lpp_date_debut, Visu_API, FichierTrace) 'champ 5
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C5 = location_lpp_date_debut
                SGD_AjouterChamp_Tracé(NumeroSession, location_lpp_date_fin, Visu_API, FichierTrace)  'champ 6
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C6 = location_lpp_date_fin

            Case ""
                MyMsg_Box.Presentation("Officine !", "Type service LPP non renseigné, corrigez base produits.", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()


            Case Else
                SGD_AjouterChamp_Tracé(NumeroSession, LPP_Type_Service, Visu_API, FichierTrace) 'champ 3
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C3 = LPP_Type_Service
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace) 'champ 4
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C4 = ""
                SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace) 'champ 5
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C5 = Format(DateExecution.Value, "yyyyMMdd") + "0000"
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace) 'champ 6
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C6 = ""
        End Select

        'champ 7
        Dim tariflpp As String
        tariflpp = LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, ligne).Value.ToString, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP
        SGD_AjouterChamp_Tracé(NumeroSession, tariflpp, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C7 = tariflpp

        'champ 8
        Dim quantité_lpp As Integer = 1
        'If Vente(VenteCIP.Index, ligne).Value IsNot DBNull.Value And Vente(VenteCIP.Index, ligne).Value IsNot Nothing Then
        '    If Vente(VenteCIP.Index, ligne).Value.ToString <> "" Then
        '        quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité(Vente(VenteCIP.Index, ligne).Value.ToString, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
        '    End If
        'ElseIf Vente(VenteEAN13.Index, ligne).Value IsNot DBNull.Value And Vente(VenteEAN13.Index, ligne).Value IsNot Nothing Then
        '    If Vente(VenteEAN13.Index, ligne).Value.ToString <> "" Then
        '        quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", Vente(VenteEAN13.Index, ligne).Value.ToString, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
        '    End If
        'ElseIf Vente(Ventecab.Index, ligne).Value IsNot DBNull.Value And Vente(Ventecab.Index, ligne).Value IsNot Nothing Then
        '    If Vente(Ventecab.Index, ligne).Value.ToString <> "" Then
        '        quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", Vente(Ventecab.Index, ligne).Value.ToString, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
        '    End If
        'Else
        '    quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", Vente(VenteDésignation.Index, ligne).Value.ToString)
        'End If

        quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité(Vente(VenteCIP.Index, ligne).Value.ToString, Vente(VenteEAN13.Index, ligne).Value.ToString, _
                                                                   Vente(Ventecab.Index, ligne).Value.ToString, Vente(Vente_produits.Index, ligne).Value.ToString)

        Dim NombreDunités As String = (Vente(VenteQuantité.Index, ligne).Value * quantité_lpp).ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NombreDunités, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C8 = NombreDunités

        'champ 9
        'Dim PrixUnitairePublic As String
        'PrixUnitairePublic = Arrondis((Vente(VentePrix.Index, ligne).Value * 100) / CDec(NombreDunités)).ToString
        'SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitairePublic, Visu_API, FichierTrace)
        'CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C9 = PrixUnitairePublic
        'PrixUnitairePublic = Nothing
        SGD_AjouterChamp_Tracé(NumeroSession, tariflpp, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C9 = tariflpp

        'champ 10
        Dim MontantTotalLPP As String
        MontantTotalLPP = (Val(tariflpp) * Val(NombreDunités)).ToString
        SGD_AjouterChamp_Tracé(NumeroSession, MontantTotalLPP, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C10 = MontantTotalLPP
        'MontantTotalLPP = Nothing
        tariflpp = Nothing
        NombreDunités = Nothing

        'champ11
        'Dim MontantTotalFacturéTTC As String
        'MontantTotalFacturéTTC = (Vente(VenteTotal.Index, ligne).Value * 100).ToString
        'SGD_AjouterChamp_Tracé(NumeroSession, MontantTotalFacturéTTC, Visu_API, FichierTrace)
        'CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C11 = MontantTotalFacturéTTC
        'MontantTotalFacturéTTC = Nothing
        SGD_AjouterChamp_Tracé(NumeroSession, MontantTotalLPP, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C11 = MontantTotalLPP

        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 1
    End Sub
    Public Sub groupe1730(ByVal NumeroSession As UInt16, ByVal NuméroPrestation As String, ByVal ligne As Integer)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        'groupe 1730
        SGD_AjouterGroupe_Tracé(NumeroSession, "1730", Visu_API, FichierTrace)
        ReDim Preserve CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(1)

        'champ 1
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C1 = NuméroPrestation

        'champ 2
        If IsNumeric(Vente(VenteLPP.Index, ligne).Value.ToString) And CurrentFactureVitale.TabLigneFacture(NuméroPrestation).G1610C4 <> "PA" Then
            SGD_AjouterChamp_Tracé(NumeroSession, Vente(VenteLPP.Index, ligne).Value.ToString, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C2 = Vente(VenteLPP.Index, ligne).Value.ToString
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C2 = Vente(VenteLPP.Index, ligne).Value.ToString
        End If

        'champ 3,4,5,6 type de prestation
        Dim LPP_Type_Service As String = ""
        If CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C3 = "" Then
            'LPP_Type_Service = Me.ProduitsTableAdapter.Select_LPP_Type_Service(Vente(VenteCIP.Index, ligne).Value.ToString, Vente(VenteEAN13.Index, ligne).Value.ToString, _
            '                                                                   Vente(Ventecab.Index, ligne).Value.ToString, Vente(Vente_produits.Index, ligne).Value.ToString)
            LPP_Type_Service = Me.LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, ligne).Value.ToString, Format(DateExecution.Value, "yyyyMMdd")).Item(0).Type_prestation
            Dim pas_de_LPP_Type_Service As Boolean = False
            While LPP_Type_Service <> "A" And LPP_Type_Service <> "E" And LPP_Type_Service <> "L" And LPP_Type_Service <> "P" And LPP_Type_Service <> "S" And LPP_Type_Service <> "R" _
                And LPP_Type_Service <> "V" And pas_de_LPP_Type_Service = False
                Dim var As String = ""
                MyInptBox.my_showdialog(Vente(Vente_produits.Index, ligne).Value.ToString + Chr(10) + Chr(10) + "TYPE SERVICE LPP? ( A, E, L, P, S, R ou V)", VarType(var), 1, "")
                LPP_Type_Service = UCase(MyInptBox.result)
                If LPP_Type_Service = " " Then
                    MyMsg_Box.Presentation("Officine ?", "CONFIRMEZ TYPE SERVICE LPP NON RENSEIGNÉ", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                        pas_de_LPP_Type_Service = True
                    End If
                End If
            End While
        Else
            LPP_Type_Service = CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C3 'pour éviter réinterrogation à tous les passges STS et facturation
        End If

        Select Case LPP_Type_Service
            Case "L", "S" 'Location
                SGD_AjouterChamp_Tracé(NumeroSession, LPP_Type_Service, Visu_API, FichierTrace) 'champ 3
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C3 = LPP_Type_Service
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace) 'champ 4
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C4 = ""
                Dim Lpp_Location_Date As New Lpp_Location_Date
                Lpp_Location_Date.Désignation = Vente(VenteDésignation.Index, ligne).Value.ToString
                If Jeux_d_essai2.Visible = False Then
                    Lpp_Location_Date.ShowDialog() 'ce formulaire donne les valeurs à location_lpp_date_debut et location_lpp_date_fin
                Else
                    location_lpp_date_debut = Format(Jeux_d_essai2.JEUX_D_ESSAI_LignesTableAdapter.GetDataBy_Serie_Num(Jeux_d_essai2.Serie_ComboBox.Text, Jeux_d_essai2.Num_ComboBox.Text)(Val(NuméroPrestation) - 1).LPP_Date_Début, "yyyyMMdd") + "0000"
                    location_lpp_date_fin = Format(Jeux_d_essai2.JEUX_D_ESSAI_LignesTableAdapter.GetDataBy_Serie_Num(Jeux_d_essai2.Serie_ComboBox.Text, Jeux_d_essai2.Num_ComboBox.Text)(Val(NuméroPrestation) - 1).LPP_Date_Fin, "yyyyMMdd") + "0000"
                End If
                SGD_AjouterChamp_Tracé(NumeroSession, location_lpp_date_debut, Visu_API, FichierTrace) 'champ 5
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C5 = location_lpp_date_debut
                SGD_AjouterChamp_Tracé(NumeroSession, location_lpp_date_fin, Visu_API, FichierTrace)  'champ 6
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C6 = location_lpp_date_fin


            Case Else
                SGD_AjouterChamp_Tracé(NumeroSession, LPP_Type_Service, Visu_API, FichierTrace) 'champ 3
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C3 = LPP_Type_Service
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace) 'champ 4
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C4 = ""
                SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace) 'champ 5
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C5 = Format(DateExecution.Value, "yyyyMMdd") + "0000"
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace) 'champ 6
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C6 = ""
        End Select

        'champ 7
        Dim tariflpp As String
        If Vente(VenteLPP.Index, ligne).Value.ToString <> "" Then
            tariflpp = LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, ligne).Value.ToString, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP
        ElseIf Not Vente(VenteTFRprix.Index, ligne).Value Is Nothing Then 'pas de code lpp, le controle du top codage affiné est effectué dans une fction de controle
            tariflpp = Vente(VenteTFRprix.Index, ligne).Value * 100 * Vente(VenteQuantité.Index, ligne).Value
        Else
            tariflpp = 0 'pas de code lpp, pas de TFR -->pas de remboursement, nah!
        End If

        SGD_AjouterChamp_Tracé(NumeroSession, tariflpp, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C7 = tariflpp

        'champ 8
        Dim quantité_lpp As Integer = 1
        'If Vente(VenteCIP.Index, ligne).Value IsNot DBNull.Value And Vente(VenteCIP.Index, ligne).Value IsNot Nothing Then
        '    If Vente(VenteCIP.Index, ligne).Value.ToString <> "" Then
        '        quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité(Vente(VenteCIP.Index, ligne).Value.ToString, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
        '    End If
        'ElseIf Vente(VenteEAN13.Index, ligne).Value IsNot DBNull.Value And Vente(VenteEAN13.Index, ligne).Value IsNot Nothing Then
        '    If Vente(VenteEAN13.Index, ligne).Value.ToString <> "" Then
        '        quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", Vente(VenteEAN13.Index, ligne).Value.ToString, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
        '    End If
        'ElseIf Vente(Ventecab.Index, ligne).Value IsNot DBNull.Value And Vente(Ventecab.Index, ligne).Value IsNot Nothing Then
        '    If Vente(Ventecab.Index, ligne).Value.ToString <> "" Then
        '        quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", Vente(Ventecab.Index, ligne).Value.ToString, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
        '    End If
        'Else
        '    quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", Vente(VenteDésignation.Index, ligne).Value.ToString)
        'End If

        quantité_lpp = Me.ProduitsTableAdapter.Select_LPP_Quantité(Vente(VenteCIP.Index, ligne).Value.ToString, Vente(VenteEAN13.Index, ligne).Value.ToString, _
                                                                   Vente(Ventecab.Index, ligne).Value.ToString, Vente(Vente_produits.Index, ligne).Value.ToString)

        Dim NombreDunités As String = (Vente(VenteQuantité.Index, ligne).Value * quantité_lpp).ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NombreDunités, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C8 = NombreDunités

        'champ 9
        'Dim PrixUnitairePublic As String
        'PrixUnitairePublic = Arrondis((Vente(VentePrix.Index, ligne).Value * 100) / CDec(NombreDunités)).ToString
        'SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitairePublic, Visu_API, FichierTrace)
        'CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C9 = PrixUnitairePublic
        'PrixUnitairePublic = Nothing
        Dim G1730C9 As String = tariflpp
        'PUR If Vente(VenteLPP.Index, ligne).Value.ToString <> "" Then
        'PUR     If Val(LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, ligne).Value.ToString, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).Prix_unitaire_réglementé) <> 0 Then
        'PUR        G1730C9 = Val(LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, ligne).Value.ToString, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).Prix_unitaire_réglementé).ToString
        'PUR   End If
        'PUR End If

        SGD_AjouterChamp_Tracé(NumeroSession, G1730C9, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C9 = G1730C9

        'champ 10
        Dim MontantTotalLPP As String
        MontantTotalLPP = (Val(tariflpp) * Val(NombreDunités)).ToString
        SGD_AjouterChamp_Tracé(NumeroSession, MontantTotalLPP, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C10 = MontantTotalLPP
        'MontantTotalLPP = Nothing
    

        'champ11
        Dim Montant_total_facturé As String
        Montant_total_facturé = (Val(G1730C9) * Val(NombreDunités)).ToString
        SGD_AjouterChamp_Tracé(NumeroSession, Montant_total_facturé, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C11 = Montant_total_facturé
        tariflpp = Nothing
        NombreDunités = Nothing
        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 1
    End Sub
    Public Sub groupe1730_Kit(ByVal NumeroSession As UInt16, ByVal NuméroPrestation As String, ByVal ligne_du_kit As PharmaDataSet.KitsRow, ByRef Occurence1730 As Integer, ByVal quantité_produit As Integer)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        'groupe 1730
        SGD_AjouterGroupe_Tracé(NumeroSession, "1730", Visu_API, FichierTrace)
        Occurence1730 = Occurence1730 + 1
        ReDim Preserve CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730)

        'champ 1
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C1 = NuméroPrestation

        'champ 2
        If IsNumeric(ligne_du_kit.Code_LPP) And CurrentFactureVitale.TabLigneFacture(NuméroPrestation).G1610C4 <> "PA" Then
            SGD_AjouterChamp_Tracé(NumeroSession, Replace(ligne_du_kit.Code_LPP, ".", ""), Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C2 = Replace(ligne_du_kit.Code_LPP, ".", "")
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C2 = Replace(ligne_du_kit.Code_LPP, ".", "")
        End If
        'champ 3,4,5,6 type de prestation
        Dim LPP_Type_Service As String = Me.LPPTableAdapter.GetData_CodeLPP_Date(ligne_du_kit.Code_LPP, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).Type_prestation

        Select Case LPP_Type_Service
            Case "L", "S" 'Location
                SGD_AjouterChamp_Tracé(NumeroSession, LPP_Type_Service, Visu_API, FichierTrace) 'champ 3
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C3 = LPP_Type_Service
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace) 'champ 4
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C4 = ""
                Dim Lpp_Location_Date As New Lpp_Location_Date
                Lpp_Location_Date.Désignation = ligne_du_kit.Désignation_Kit
                If Jeux_d_essai2.Visible = False Then
                    Lpp_Location_Date.ShowDialog() 'ce formulaire donne les valeurs à location_lpp_date_debut et location_lpp_date_fin
                Else
                    location_lpp_date_debut = Format(Jeux_d_essai2.JEUX_D_ESSAI_LignesTableAdapter.GetDataBy_Serie_Num(Jeux_d_essai2.Serie_ComboBox.Text, Jeux_d_essai2.Num_ComboBox.Text)(Val(NuméroPrestation) - 1).LPP_Date_Début, "yyyyMMdd") + "0000"
                    location_lpp_date_fin = Format(Jeux_d_essai2.JEUX_D_ESSAI_LignesTableAdapter.GetDataBy_Serie_Num(Jeux_d_essai2.Serie_ComboBox.Text, Jeux_d_essai2.Num_ComboBox.Text)(Val(NuméroPrestation) - 1).LPP_Date_Fin, "yyyyMMdd") + "0000"
                End If
                SGD_AjouterChamp_Tracé(NumeroSession, location_lpp_date_debut, Visu_API, FichierTrace) 'champ 5
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C5 = location_lpp_date_debut
                SGD_AjouterChamp_Tracé(NumeroSession, location_lpp_date_fin, Visu_API, FichierTrace)  'champ 6
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C6 = location_lpp_date_fin



            Case Else
                SGD_AjouterChamp_Tracé(NumeroSession, LPP_Type_Service, Visu_API, FichierTrace) 'champ 3
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C3 = LPP_Type_Service
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace) 'champ 4
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C4 = ""
                SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace) 'champ 5
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C5 = Format(DateExecution.Value, "yyyyMMdd") + "0000"
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace) 'champ 6
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C6 = ""
        End Select

        'champ 7
        Dim tariflpp As String
        tariflpp = LPPTableAdapter.GetData_CodeLPP_Date(ligne_du_kit.Code_LPP, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP


        SGD_AjouterChamp_Tracé(NumeroSession, tariflpp, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C7 = tariflpp

        'champ 8

        Dim NombreDunités As String = ligne_du_kit.Quantité_LPP * quantité_produit
        SGD_AjouterChamp_Tracé(NumeroSession, NombreDunités, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C8 = NombreDunités

        'champ 9
        'Dim PrixUnitairePublic As String
        'PrixUnitairePublic = tariflpp
        'SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitairePublic, Visu_API, FichierTrace)
        'CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C9 = PrixUnitairePublic
        'PrixUnitairePublic = Nothing
        SGD_AjouterChamp_Tracé(NumeroSession, tariflpp, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C9 = tariflpp

        'champ 10
        Dim MontantTotalLPP As String
        MontantTotalLPP = (Val(tariflpp) * Val(NombreDunités)).ToString
        SGD_AjouterChamp_Tracé(NumeroSession, MontantTotalLPP, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C10 = MontantTotalLPP
        'MontantTotalLPP = Nothing
        'tariflpp = Nothing
        'NombreDunités = Nothing

        'champ11
        'Dim MontantTotalFacturéTTC As String
        'MontantTotalFacturéTTC = MontantTotalLPP
        'SGD_AjouterChamp_Tracé(NumeroSession, MontantTotalFacturéTTC, Visu_API, FichierTrace)
        'CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(Occurence1730 - 1).G1730C11 = MontantTotalFacturéTTC
        'MontantTotalFacturéTTC = Nothing
        SGD_AjouterChamp_Tracé(NumeroSession, MontantTotalLPP, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(0).G1730C11 = MontantTotalLPP

        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 1
    End Sub
    'Groupe 1740 : Prestation détaillée code CIP
    Public Sub groupe1740(ByVal NumeroSession As UInt16, ByVal NuméroPrestation As String, ByVal lignevente As Integer) ', ByVal Occurence1610 As Integer)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Vente.Item(VenteEAN13.Index, lignevente).Value Is DBNull.Value Or Vente.Item(VenteEAN13.Index, lignevente).Value Is Nothing Then
            Vente(VenteEAN13.Index, lignevente).Value = ""
        End If
        If Vente.Item(VenteCIP.Index, lignevente).Value Is DBNull.Value Or Vente.Item(VenteCIP.Index, lignevente).Value Is Nothing Then
            Vente(VenteCIP.Index, lignevente).Value = ""
        End If
        If Vente(VenteEAN13.Index, lignevente).Value.ToString = "" And Vente(VenteCIP.Index, lignevente).Value.ToString = "" Then
            Exit Sub
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, "1740", Visu_API, FichierTrace)

        'champ 1
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C1 = NuméroPrestation

        'champs 2,3
        If Vente(VenteEAN13.Index, lignevente).Value.ToString = "" Then 'type de code CIP
            'Code CIP du médicament allopathique sur 7 caractères
            If Val(Vente(VenteCIP.Index, lignevente).Value) < 2000000 Or (Val(Vente(VenteCIP.Index, lignevente).Value) >= 8000000 And Val(Vente(VenteCIP.Index, lignevente).Value) < 8500000) Then 'homéopathie
                SGD_AjouterChamp_Tracé(NumeroSession, "6", Visu_API, FichierTrace)
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C2 = "6"
                SGD_AjouterChamp_Tracé(NumeroSession, Vente(VenteCIP.Index, lignevente).Value.ToString, Visu_API, FichierTrace)
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C3 = Vente(VenteCIP.Index, lignevente).Value.ToString
            Else
                SGD_AjouterChamp_Tracé(NumeroSession, "A", Visu_API, FichierTrace)
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C2 = "A"
                SGD_AjouterChamp_Tracé(NumeroSession, Vente(VenteCIP.Index, lignevente).Value.ToString, Visu_API, FichierTrace)
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C3 = Vente(VenteCIP.Index, lignevente).Value.ToString
            End If
        Else 'type de code CIP
            'Code CIP du médicament sur 13 caractères
            SGD_AjouterChamp_Tracé(NumeroSession, "B", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C2 = "B"
            SGD_AjouterChamp_Tracé(NumeroSession, Vente(VenteEAN13.Index, lignevente).Value.ToString, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C3 = Vente(VenteEAN13.Index, lignevente).Value.ToString
        End If 'type de code CIP

        'champ4
        If tab_Lignes_Vente(lignevente).deconditionement Then
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C4 = "0"
        Else
            'Dim PUmed As String = (Vente(VentePrix.Index, lignevente).Value * 100).ToString
            Dim PUmed As String = (Vente(VenteTFRprix.Index, lignevente).Value * 100).ToString
            If InStr(PUmed, ",") <> 0 Then
                PUmed = Mid(PUmed, 1, InStr(PUmed, ",") - 1)
            End If
            If Vente(VenteCodeActe.Index, lignevente).Value = "PHN" Then
                PUmed = (Vente(VentePrix.Index, lignevente).Value * 100).ToString
            End If
            SGD_AjouterChamp_Tracé(NumeroSession, PUmed, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C4 = PUmed
            PUmed = Nothing
        End If

        'champ 5
        If tab_Lignes_Vente(lignevente).deconditionement = True Then
            SGD_AjouterChamp_Tracé(NumeroSession, tab_Lignes_Vente(lignevente).deconditionement_NmbreBoites, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C5 = tab_Lignes_Vente(lignevente).deconditionement_NmbreBoites
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, (Vente(VenteQuantité.Index, lignevente).Value).ToString, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C5 = (Vente(VenteQuantité.Index, lignevente).Value).ToString
        End If

        'champ 6
        'SGD_AjouterChamp_Tracé(NumeroSession, Vente(VenteTFRtype.Index, lignevente).Value.ToString, Visu_API, FichierTrace)
        'CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C6 = Vente(VenteTFRtype.Index, lignevente).Value.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C6 = ""

        'champ 7 Indicateur de substitution
        If CurrentFactureVitale.G1740C7.Length > NuméroPrestation Then
            If Mid(CurrentFactureVitale.G1740C7(NuméroPrestation), 1, 1) <> "M" Then
                SGD_AjouterChamp_Tracé(NumeroSession, Mid(CurrentFactureVitale.G1740C7(NuméroPrestation), 1, 1), Visu_API, FichierTrace)
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C7 = Mid(CurrentFactureVitale.G1740C7(NuméroPrestation), 1, 1)
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C12 = ""
            Else
                SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C7 = ""
                CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C12 = "M"
            End If
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C7 = ""
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C12 = ""
        End If

        'champ 8 Top déconditionnement
        If tab_Lignes_Vente(lignevente).deconditionement = True Then
            SGD_AjouterChamp_Tracé(NumeroSession, "D", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C8 = "D"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, " ", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C8 = ""
        End If

        'champ 9 Quantité d’unités délivrées dans le cadre du déconditionnement
        If tab_Lignes_Vente(lignevente).deconditionement = True Then
            SGD_AjouterChamp_Tracé(NumeroSession, tab_Lignes_Vente(lignevente).deconditionement_quantité, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C9 = tab_Lignes_Vente(lignevente).deconditionement_quantité
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C9 = ""
        End If

        'champ 10 Prix unitaire de l’unité délivrée dans le cadre du déconditionnement
        If tab_Lignes_Vente(lignevente).deconditionement = True Then
            SGD_AjouterChamp_Tracé(NumeroSession, tab_Lignes_Vente(lignevente).deconditionement_prix_unitaire, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C10 = tab_Lignes_Vente(lignevente).deconditionement_prix_unitaire
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C10 = ""
        End If

        'champ 11 Nombre de conditionnements utilisés dans le cadre du déconditionnement
        If tab_Lignes_Vente(lignevente).deconditionement = True Then
            SGD_AjouterChamp_Tracé(NumeroSession, tab_Lignes_Vente(lignevente).deconditionement_NmbreBoites, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C11 = tab_Lignes_Vente(lignevente).deconditionement_NmbreBoites.ToString
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C11 = ""
        End If

        'champ 12
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C12, Visu_API, FichierTrace)

        'champ 13
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C13 = ""

        'champ 14
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C14 = ""

        'champ15
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailCodeCIP.G1740C15 = ""
        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 1
    End Sub

    'Groupe 1741 : Prestation détaillée lot d’un code CIP
    Public Sub groupe1741(ByVal NumeroSession As UInt16, ByVal NuméroPrestation As String)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        For i = 0 To CurrentFactureVitale.G1741.Length - 1
            If CurrentFactureVitale.G1741(i).G1741C1 = NuméroPrestation Then
                'groupe 1741
                SGD_AjouterGroupe_Tracé(NumeroSession, "1741", Visu_API, FichierTrace)
                ReDim Preserve CurrentFactureVitale.TabLigneFacture(NuméroPrestation).DétailLpp(1)

                'champs
                SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1741(i).G1741C1, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1741(i).G1741C2, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1741(i).G1741C3, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1741(i).G1741C4, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1741(i).G1741C5, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1741(i).G1741C6, Visu_API, FichierTrace)

            End If
        Next
    End Sub

    'Groupe 1820 : Complément de prestation Exonération du Ticket Modérateur 'p291/906
    Public Sub groupe1820(ByVal NumeroSession As UInt16, ByVal NuméroPrestation As String, ByVal VenteType As String)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If NatureAssurance_Button.Text = "MALADIE" Then

            SGD_AjouterGroupe_Tracé(NumeroSession, 1820, Visu_API, FichierTrace)

            'champ 1
            SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)

            'champ 2
            Dim CodeJustifExo As String = "0"
            'If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = "PHN" Then 'FI(fiche information) 195
            '    CodeJustifExo = "0"

            'ElseIf VenteType = "PREV" Then
            If VenteType = "PREV" Then
                CodeJustifExo = "7"

            ElseIf VenteType = "ALD" Then
                CodeJustifExo = "4"


            ElseIf TauxSNCF = True Then
                CodeJustifExo = "6"
            Else
                Dim Code_Situation As String
                If Val(Renouvellement_TextBox.Text) <> 0 And CurrentBenéficiaire.G101C10 <> "04" And CurrentFactureVitale.Renouvellement_Date_Droits_AMO_est_date_éxécution = True Then
                    Code_Situation = CodeSituation(DateExecution.Value)
                Else
                    Code_Situation = CodeSituation(Date_Droits_AMO())
                End If
                Select Case Code_Situation
                    'pas d’exonération
                    Case "0100", "0105", "0108", "0200", "0205", "0225", "0300", "0301", "0400", "0401", "0402", "0403", "0408", "0411", "0414", "0500", "1000", "1600", "9000", "9020", "9021", "9022", "9023", "9024"
                        CodeJustifExo = "0"
                        'assuré ou bénéficiaire exonéré
                    Case "0101", "0102", "0103", "0106", "0107", "0109", "0110", "0201", "0202", "0203", "0206", "0207", "0302", "0303", "0404", "0405", "0406", "0407", "0412", "0413", "0415", "0501", "0502", "0503", "1001", "1002", "1003", "1601", "1602", "1603", "9001", "9002", "9003"
                        CodeJustifExo = "5"
                        'exonération régimes spéciaux
                    Case "0700"
                        CodeJustifExo = "6"
                        'FSV
                    Case "0104", "0204", "0304", "0409", "0410", "0504", "1004", "9004"
                        CodeJustifExo = "9"
                    Case "0226", "0227"
                        MyMsg_Box.Presentation("Officine ?", "En rapport avec un accident?", True, "OUI", True, "NON", False, "")
                        If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                            CodeJustifExo = "0"
                        Else
                            CodeJustifExo = "5"
                        End If
                End Select
            End If
            If VenteType = "SP" And CodeJustifExo <> "5" Then
                CodeJustifExo = "3"
            End If
            If CodeJustifExo <> "0" Then
                HonoDispGlobaux_CodeJustifExo = CodeJustifExo
            End If
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).G1820C2 = CodeJustifExo
            SGD_AjouterChamp_Tracé(NumeroSession, CodeJustifExo, Visu_API, FichierTrace)


        End If

    End Sub

    'Groupe 1840 : Complément de prestation Entente préalable
    Public Sub groupe1840(ByVal NumeroSession As UInt16, ByVal NuméroPrestation As String)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If GrouperLPPToolStripMenuItem.Checked = False Then
            For i = 0 To CurrentFactureVitale.G1840.Length - 1
                If Val(CurrentFactureVitale.G1840(i).G1840C1) = Val(NuméroPrestation) And CurrentFactureVitale.G1840(i).G1840C2 <> "" Then
                    SGD_AjouterGroupe_Tracé(NumeroSession, 1840, Visu_API, FichierTrace)
                    SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1840(i).G1840C1, Visu_API, FichierTrace)
                    SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1840(i).G1840C2, Visu_API, FichierTrace)
                    SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.G1840(i).G1840C3, Visu_API, FichierTrace)
                    SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace)
                    CurrentFactureVitale.TabLigneFacture(Val(CurrentFactureVitale.G1840(i).G1840C1)).G1840C2 = CurrentFactureVitale.G1840(i).G1840C2
                    CurrentFactureVitale.TabLigneFacture(Val(CurrentFactureVitale.G1840(i).G1840C1)).G1840C3 = CurrentFactureVitale.G1840(i).G1840C3
                    Exit For
                End If
            Next
        Else

        End If
    End Sub

    'Groupe 1850 : Complément de prestation Renouvellement
    Public Sub groupe1850(ByVal NumeroSession As UInt16, ByVal NuméroPrestation As String, ByVal Renouvellement As String)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1850, Visu_API, FichierTrace)

        'champ 1
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)

        'champ 2
        While Renouvellement.Length < 2
            Renouvellement = "0" & Renouvellement
        End While
        SGD_AjouterChamp_Tracé(NumeroSession, Renouvellement, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(NuméroPrestation).G1850C2 = Renouvellement

    End Sub

    'Groupe 1910 : Total Facture
    Public Sub groupe1910_STS(ByVal NumeroSession As UInt16, ByVal Nombre_de_prestations As Integer, ByVal Total_des_montants_facturés As Double, ByVal Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, ByVal Total_FSE As Double)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1910, Visu_API, FichierTrace)

        'champ 1
        SGD_AjouterChamp_Tracé(NumeroSession, Nombre_de_prestations.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.G1910C1 = Nombre_de_prestations

        'champ 2
        'SGD_AjouterChamp_Tracé(NumeroSession, Total_des_montants_facturés.ToString, Visu_API, FichierTrace)
        'CurrentFactureVitale.G1910C2 = Total_des_montants_facturés
        SGD_AjouterChamp_Tracé(NumeroSession, Total_FSE.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.G1910C2 = Total_FSE

        'champ 3
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        '    CurrentFactureVitale.G1910C3 = Total_remboursable_par_l_AMO
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, Total_remboursable_par_l_AMO.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.G1910C3 = Total_remboursable_par_l_AMO
        'End If


        'champ 4
        Dim Total_participation_assuré As Integer
        Total_participation_assuré = Total_FSE - Total_remboursable_par_l_AMO
        If Total_participation_assuré < 0 Then
            MyMsg_Box.Presentation("Officine !", "les montants remboursés sont supérieurs aux montants facturés." + Chr(10) + "le prix de vente d'un produit lpp doit être inférieur à son remboursement.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, Total_participation_assuré.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.G1910C4 = Total_participation_assuré

        'champ 5
        If CurrentFactureVitale.PEC.MontantGlobal > 0 Then
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.PEC.MontantGlobal.ToString, Visu_API, FichierTrace)
            CurrentFactureVitale.G1910C5 = CurrentFactureVitale.PEC.MontantGlobal.ToString
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, Total_Théorique_Remboursable_par_AMC, Visu_API, FichierTrace)
            CurrentFactureVitale.G1910C5 = Total_Théorique_Remboursable_par_AMC
        End If

        'champ 6
        If CurrentFactureVitale.PEC.MontantGlobal > 0 Then
            SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.PEC.MontantGlobal.ToString, Visu_API, FichierTrace)
            CurrentFactureVitale.G1910C5 = CurrentFactureVitale.PEC.MontantGlobal.ToString
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, Total_Remboursable_par_AMC, Visu_API, FichierTrace)
            CurrentFactureVitale.G1910C6 = Total_Remboursable_par_AMC
        End If

    End Sub

    Public Function groupe1910(ByVal NumeroSession As UInt16, ByVal Nombre_de_prestations As Integer, ByVal Total_des_montants_facturés As Double, ByVal Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, ByVal Total_FSE As Double) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 1910, Visu_API, FichierTrace)

        'champ 1 Nombre de prestations
        SGD_AjouterChamp_Tracé(NumeroSession, Nombre_de_prestations.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.G1910C1 = Nombre_de_prestations

        'champ 2 Total des montants facturés
        If NatureAssurance_Button.Text <> "SMG" Then
            'SGD_AjouterChamp_Tracé(NumeroSession, Total_des_montants_facturés.ToString, Visu_API, FichierTrace)
            'CurrentFactureVitale.G1910C2 = Total_des_montants_facturés
            SGD_AjouterChamp_Tracé(NumeroSession, Total_FSE.ToString, Visu_API, FichierTrace)
            CurrentFactureVitale.G1910C2 = Total_FSE
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, SMG.total_facture, Visu_API, FichierTrace)
            CurrentFactureVitale.G1910C2 = SMG.total_facture
        End If


        'champ 3 Total remboursable par l’AMO
        'If Reprise_Facture_Num > 0 And Reprise_AMO = False Then
        '    SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
        '    CurrentFactureVitale.G1910C3 = Total_remboursable_par_l_AMO
        'Else
        SGD_AjouterChamp_Tracé(NumeroSession, Total_remboursable_par_l_AMO.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.G1910C3 = Total_remboursable_par_l_AMO
        'End If

        'champ 4 Total participation assuré
        Dim Total_participation_assuré As Integer
        If NatureAssurance_Button.Text <> "SMG" Then
            Total_participation_assuré = Total_FSE - Total_remboursable_par_l_AMO
        Else
            Total_participation_assuré = SMG.total_facture - Total_remboursable_par_l_AMO
        End If
        If Total_participation_assuré < 0 Then
            MyMsg_Box.Presentation("Officine !", "les montants remboursés sont supérieurs aux montants facturés.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, Total_participation_assuré.ToString, Visu_API, FichierTrace)
        CurrentFactureVitale.G1910C4 = Total_participation_assuré

        'champ 5 Total théorique remboursable de la part complémentaire
        SGD_AjouterChamp_Tracé(NumeroSession, Total_Théorique_Remboursable_par_AMC, Visu_API, FichierTrace)
        CurrentFactureVitale.G1910C5 = Total_Théorique_Remboursable_par_AMC

        'champ 6 Total remboursable de la part complémentaire
        SGD_AjouterChamp_Tracé(NumeroSession, Total_Remboursable_par_AMC, Visu_API, FichierTrace)
        CurrentFactureVitale.G1910C6 = Total_Remboursable_par_AMC

        'verif total complémentaire
        Dim total_compl As Integer = 0
        For i = 0 To CurrentFactureVitale.TabLigneFacture.Length - 1
            total_compl = total_compl + CurrentFactureVitale.TabLigneFacture(i).G1610C15
        Next
        If total_compl <> CurrentFactureVitale.G1910C5 Then
            MyMsg_Box.Presentation("Officine ?", "La valeur pour le Total théorique remboursable de la part complémentaire est différent de la somme des montants pour chaque actes." + Chr(10) + "Continuer la facturation?", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = MsgBoxResult.No Then
                Return False
            End If
        End If
        If total_compl <> CurrentFactureVitale.G1910C6 Then
            MyMsg_Box.Presentation("Officine ?", "La valeur pour le Total remboursable de la part complémentaire est différent de la somme des montants pour chaque actes." + Chr(10) + "Continuer la facturation?", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = MsgBoxResult.No Then
                Return False
            End If
        End If
        Return True
    End Function

    'Groupe 2000 : Forçage AMO niveau acte
    Public Function groupe2000(ByVal NumeroSession As UInt16, ByVal NuméroPrestation As Integer, ByVal CodeActe As String) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        '3.3 Principes de forçage au regard de la tarification AMO (forçages niveau acte)
        Dim indicateur As String = ""
        Dim mydatatable As DataTable = Me.CodePrestationsTableAdapter.GetDataBy_CodeActe(CodeActe)
        Dim CompatiblePharmaindex, CompatibleTable1index As Integer
        For c = 0 To mydatatable.Columns.Count - 1
            Select Case mydatatable.Columns.Item(c).ColumnName
                Case "CompatiblePharma"
                    CompatiblePharmaindex = c
                Case "CompatibleTable1"
                    CompatibleTable1index = c

            End Select
        Next

        If mydatatable(0).Item(CompatibleTable1index) = False Then
            MyMsg_Box.Presentation("Officine ?", "Code Acte " + CodeActe + " non compatible Table des codes prestations, continuer la facturation?", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                indicateur = "A"
            Else
                Return False
            End If
        Else
            If mydatatable(0).Item(CompatiblePharmaindex) = False Then
                MyMsg_Box.Presentation("Officine ?", "Code Acte " + CodeActe + " non compatible pharmacien, continuer la facturation?", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                    indicateur = "C"
                Else
                    Return False
                End If
            End If
        End If

        'controle compatibilité nature assurance
        If indicateur = "" Then
            Dim datatable As DataTable = Me.Compatibilités_codes_prestation_nature_assuranceTableAdapter1.GetDataBy_CodePrestation(CodeActe)
            If datatable.Rows.Count = 0 Then
                MyMsg_Box.Presentation("Officine !", "CODE ACTE " + CodeActe + " ABSENT TABLE DES COMPATIBILITÉ NATURE ASSURRANCE." + Chr(10) + "PAS DE CONTROLE COMPATIBILIÉ POSSIBLE", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
            Else
                For c = 0 To datatable.Columns.Count - 1
                    If datatable.Columns.Item(c).ColumnName = Replace(NatureAssurance_Button.Text, " ", "") Then
                        If datatable(0).Item(c) = False Then
                            MyMsg_Box.Presentation("Officine !", "CODE ACTE " + CodeActe + " INCOMPATIBLE AVEC NATURE ASSURANCE " + NatureAssurance_Button.Text + Chr(10) + "CONTINUER LA FACTURATION?", True, "OUI", True, "NON", False, "")
                            If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                                indicateur = "C"
                            Else
                                Return False
                            End If
                        End If
                    End If
                Next
            End If
        End If


        For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
            If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                indicateur = "5"
                Exit For
            End If
        Next

        If indicateur <> "" Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 2000, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation.ToString, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NumeroSession, indicateur, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).G2000C2 = indicateur
        End If

        Return True
    End Function

    'Groupe 2010 : Forçage AMC niveau acte
    Public Sub groupe2010(ByVal NumeroSession As UInt16, ByVal num_prestation As Integer)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        'Dim ecrit_groupe As Boolean = False
        If CheckBox_Facturation_AMC.Checked = False And CurrentFactureVitale.Mode_Gestion <> "AME_Base" And CurrentFactureVitale.Mode_Gestion <> "AME_Compl" Then
            Exit Sub
        End If

        If Config.STS_Activer = False Or (CurrentConvention.selected = True And CurrentConvention.indic_desactivation_STS = "1") Then
            CurrentFactureVitale.TabLigneFacture(num_prestation).G2010C2 = "1"

        End If


        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            CurrentFactureVitale.TabLigneFacture(num_prestation).G2010C2 = "1"
        End If

        'If ecrit_groupe = True Then
        SGD_AjouterGroupe_Tracé(NumeroSession, 2010, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, num_prestation.ToString, Visu_API, FichierTrace, num_prestation)
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.TabLigneFacture(num_prestation).G2010C2, Visu_API, FichierTrace, num_prestation)
        ' End If
    End Sub

    'Groupe 2020 : Base de remboursement Conventionnée AMO
    Public Sub groupe2020(ByVal NumeroSession As UInt16, ByVal num_prestation As Integer)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 2020, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, num_prestation.ToString, Visu_API, FichierTrace, num_prestation)
        SGD_AjouterChamp_Tracé(NumeroSession, CurrentFactureVitale.TabLigneFacture(num_prestation).G1610C12, Visu_API, FichierTrace, num_prestation)
    End Sub

    'Groupe 2030 : Prévention commune AMO/AMC
    Public Sub groupe2030(ByVal NumeroSession As UInt16, ByVal NuméroPrestation As String)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If PreventioncommuneAMOAMCToolStripMenuItem.Checked = True Then
            SGD_AjouterGroupe_Tracé(NumeroSession, 2030, Visu_API, FichierTrace)
            'champ 1 N° de la prestation (de rattachement)
            SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)
            'champ 2 Top prévention commune AMO/AMC
            SGD_AjouterChamp_Tracé(NumeroSession, ToppréventioncommuneAMOAMCToolStripTextBox.Text, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).G2030C2 = ToppréventioncommuneAMOAMCToolStripTextBox.Text
            'champ 3 Qualifiant du dispositif de prévention
            SGD_AjouterChamp_Tracé(NumeroSession, QualifiantdispositifpreventionToolStripTextBox.Text, Visu_API, FichierTrace)
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).G2030C3 = QualifiantdispositifpreventionToolStripTextBox.Text
        End If
    End Sub

    'Groupe 3700 : Contexte de tarification
    Public Sub groupe3700(ByVal NumeroSession As Integer, ByVal TopMédecinRéférent As Boolean)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 3700, Visu_API, FichierTrace)

        ' SGD_AjouterChamp_Tracé(NumeroSession, Me.AMC_Contrat_TypeTableAdapter.GetDataById(CurrentBenéficiaire.AMC_TypeContrat).Item(0).Top_CMU.ToString(), Visu_API, FichierTrace)
        If CurrentFactureVitale.TOP_CMU = True And CurrentFactureVitale.Sortant_CMU = False Then
            SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace)
            CurrentFactureVitale.G3700C1 = "1"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace)
            CurrentFactureVitale.G3700C1 = "0"
        End If

        If TopMédecinRéférent = True Then
            SGD_AjouterChamp_Tracé(NumeroSession, "O", Visu_API, FichierTrace)
            CurrentFactureVitale.G3700C1 = "O"
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "N", Visu_API, FichierTrace)
            CurrentFactureVitale.G3700C1 = "N"
        End If
    End Sub

    'Groupe 3730 : Paramètres de calcul STS
    Public Sub groupe3730(ByVal NumeroSession As Integer, ByVal PMSS As String)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        SGD_AjouterGroupe_Tracé(NumeroSession, 3730, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NumeroSession, PMSS, Visu_API, FichierTrace)
        CurrentFactureVitale.G3730C1 = PMSS
    End Sub

#End Region
#Region "module STS"
    Private Function Code_STS()

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If CurrentConvention.selected = False Then
            Return AMC_Code_Aiguillage_STS_TextBox.Text
        End If

        'CurrentConvention.selected = true

        If AMC_Code_Aiguillage_STS_TextBox.Text = "" And CurrentConvention.Code_aiguillage_STS = "" Then
            Return ""
        End If

        If AMC_Code_Aiguillage_STS_TextBox.Text <> "" And CurrentConvention.Code_aiguillage_STS = "" Then
            Return AMC_Code_Aiguillage_STS_TextBox.Text
        End If

        If AMC_Code_Aiguillage_STS_TextBox.Text = "" And CurrentConvention.Code_aiguillage_STS <> "" Then
            Return CurrentConvention.Code_aiguillage_STS
        End If

        'AMC_Code_Aiguillage_STS_TextBox.Text <> "" And CurrentConvention.Code_aiguillage_STS <> "" 

        If AMC_Code_Aiguillage_STS_TextBox.Text = CurrentConvention.Code_aiguillage_STS Then
            Return AMC_Code_Aiguillage_STS_TextBox.Text
        End If

        'AMC_Code_Aiguillage_STS_TextBox.Text <> CurrentConvention.Code_aiguillage_STS
        If AMC_Piècejustificative_ComboBox.SelectedIndex = 4 Then
            MyMsg_Box.Presentation("Officine !", "Le code aiguillage du support est différent du code aiguillage de la table," + Chr(10) + "soit le Professionnel de Santé met à jour la table des conventions," + Chr(10) + "soit il abandonne l’envoi d’un flux de données complémentaires.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return "False"
        End If

        'AMC_Piècejustificative_ComboBox.SelectedIndex <> 4

        If CurrentConvention.usage_attestation_papier = "0" Then
            MyMsg_Box.Presentation("Officine !", "Le code aiguillage STS du support est différent du code aiguillage STS de la table," + Chr(10) + "soit le Professionnel de Santé met à jour la table des conventions," + Chr(10) + "soit il abandonne l’envoi d’un flux de données complémentaires.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            CurrentConvention.selected = False
            Return "False"
        End If

        If CurrentConvention.usage_attestation_papier = "1" Then
            MyMsg_Box.Presentation("Officine !", "Le code aiguillage STS du support est différent du code aiguillage STS de la table," + Chr(10) + "envoi d'une DRE avec code aiguillage " + CurrentConvention.Code_aiguillage_STS + " (issu de la table des conventions)", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = MsgBoxResult.No Then
                Return "False"
            End If
        End If

        'CurrentConvention.usage_attestation_papier = "1" 

        Return CurrentConvention.Code_aiguillage_STS

    End Function


    Private Function STS() As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If MUT_NumMutuelle_TextBox.Text = "" And AMC_NumAMC_TextBox.Text = "" Then
            Return True
        End If

        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            Return True
        End If

        Dim code_aiguillage_STS As String = Code_STS()
        If code_aiguillage_STS = "False" Then
            Return False
        End If
        'If CurrentFactureVitale.TP_AMC = True Then
        If CheckBox_Facturation_AMC.Checked = True Then
            If Groupes_STS("Tarification", code_aiguillage_STS) = False Then
                Return False
            End If

            If CurrentFactureVitale.G1910C2 = CurrentFactureVitale.G1910C3 And CurrentFactureVitale.Mode_Gestion <> "RO" Then
                MyMsg_Box.Presentation("Officine !", "Prise en charge 100% par AMO," + Chr(10) + "Aucune DRE n'est générée.", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                CheckBox_Facturation_AMC.Checked = False
                Return True
            End If

            If CurrentConvention.selected = False And CurrentFactureVitale.TOP_CMU = False And CurrentFactureVitale.Mode_Gestion = "RO" Then
                MyMsg_Box.Presentation("Officine !", "Aucune convention sélectionnée.", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Return False
            End If

            AfficheErreur(STS_Tarification_S("P", NuméroSessionSTS))
            '------------------------------------------------------------------------------------------------------------------------
            'reinitialise le tableau modifié par STS
            For j = 0 To tab_Lignes_Vente.Length - 1
                If UCase(Vente(VenteType.Index, j).Value.ToString) = "VENTE DIRECTE" Then
                    tab_Lignes_Vente(j).Ligne_traitée = True
                Else
                    tab_Lignes_Vente(j).Ligne_traitée = False
                End If
            Next
            '------------------------------------------------------------------------------------------------------------------------
            'Visu_API agrement CNDA
            If Visu_API = True Then
                Technique_MAIN.LireSession_Out_VersFichier2(NuméroSessionSTS, Application.StartupPath + "\traces\STS_Tarification_out.txt")
            End If
            Dim IdGroupeSuivant As UInt16
            Dim OccurrenceGroupeSuivant As UInt16
            Dim IdGroupeCourant As UInt16 = 0
            Dim OccurrenceGroupeCourant As UInt16 = 0

            '---------------------------------------------
            'cas de présence de code diagnostic STS (groupe 3750)
            ValeurChamp = "XXXXXX"
            TailleMax = 6
            If SGD_LireChamp(NuméroSessionSTS, 3750, 1, 1, ValeurChamp, TailleMax) = 0 Then 'présence d'au moins un groupe 3750 après la premère tarification
                Dim tab3750(3, 100) As String 'tableau pour les diagnostiques STS (valeur dans les groupes 3750)

                Dim appel_assistance_nécessaire(Nombre_de_Prestations) As Boolean
                For n = 0 To appel_assistance_nécessaire.Length - 1
                    appel_assistance_nécessaire(n) = False
                Next

                Dim Occurence_Grp3750 As Integer = 0
                ValeurChamp = "XXXXXX"
                TailleMax = 6
                While SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 1, ValeurChamp, TailleMax) = 0
                    tab3750(1, Occurence_Grp3750 + 1) = Mid(ValeurChamp, 1, TailleMax)
                    ValeurChamp = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                    TailleMax = 1000
                    SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 2, ValeurChamp, TailleMax)
                    tab3750(2, Occurence_Grp3750 + 1) = Mid(ValeurChamp, 1, TailleMax)
                    ValeurChamp = "XXXX"
                    TailleMax = 4
                    SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 3, ValeurChamp, TailleMax)
                    tab3750(3, Occurence_Grp3750 + 1) = Mid(ValeurChamp, 1, TailleMax)
                    Occurence_Grp3750 = Occurence_Grp3750 + 1
                    ValeurChamp = "XXXXXX"
                    TailleMax = 6
                End While

                ReDim Preserve tab3750(3, Occurence_Grp3750)
                Dim retour_sortie As Boolean = True

                For i = 1 To Occurence_Grp3750

                    Select Case Mid(tab3750(1, i), 3, 4) 'analyse des codes diagnostics

                        Case "0001", "0002", "0003", "0004", "0005", "0101", "0102", "0104", "0105", "0106", "0108", "0110", "0112", "0113", "0203", "0204", "0301", "0207", "0208", "0212", "0213", _
                             "0214", "0217", "0218", "0300", "0301", "0306", "0308", "0310", "0313", "0314", "0316", "0317", "0318", "0403", "0406", "0407", "0408", "0409", "0411", "0412", "0413", _
                             "0415", "0418", "0421", "0422", "0423", "0502", "0505", "0507", "0511", "0513", "0514", "0515", "0516", "0517", "0519", "0521", "0522", "0523"
                            If (Mid(tab3750(1, i), 1, 1) <> "1" Or (Config.STS_AfficheDiagNiv1 = True And Mid(tab3750(1, i), 1, 1) = "1")) And Jeux_d_essai2.Visible = False Then
                                If Val(tab3750(3, i)) <> 0 Then
                                    MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + tab3750(1, i) + Chr(10) + "Prestation " + tab3750(3, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                Else
                                    MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + tab3750(1, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                End If
                            End If
                            If Mid(tab3750(1, i), 1, 1) <> 2 And Mid(tab3750(1, i), 1, 1) <> 1 Then
                                retour_sortie = False
                            End If

                        Case "0100"
                            If (Mid(tab3750(1, i), 1, 1) <> "1" Or (Config.STS_AfficheDiagNiv1 = True And Mid(tab3750(1, i), 1, 1) = "1")) And Jeux_d_essai2.Visible = False Then
                                If Val(tab3750(3, i)) <> 0 Then
                                    MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + "Prestation " + tab3750(3, i) + Chr(10) + tab3750(1, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                Else
                                    MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + tab3750(1, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                End If
                            End If
                            'Return True

                        Case "0107", "0304", "0305", "0307", "0309", "0311", "0312", "0315", "0401", "4004", "0405", "0410", "0414", "0416", "0417", "0419", "0500", "0503", "0504", "0506", "0524"
                            If (Mid(tab3750(1, i), 1, 1) <> "1" Or (Config.STS_AfficheDiagNiv1 = True And Mid(tab3750(1, i), 1, 1) = "1")) And Jeux_d_essai2.Visible = False Then
                                If Val(tab3750(3, i)) <> 0 Then
                                    MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + "Prestation " + tab3750(3, i) + Chr(10) + tab3750(1, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                Else
                                    MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + tab3750(1, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                End If
                            End If

                        Case "0103", "0200", "0201", "0202", "0205", "0206", "0303"
                            If Jeux_d_essai2.Visible = True Then
                                If Val(tab3750(3, i)) = 0 Then
                                    For j = 0 To appel_assistance_nécessaire.Length - 1
                                        appel_assistance_nécessaire(j) = True
                                    Next
                                    Exit For ' For i = 1 To Occurence_Grp3750
                                Else
                                    appel_assistance_nécessaire(Val(tab3750(3, i))) = True
                                End If
                            Else
                                MyMsg_Box.Presentation("Officine !", tab3750(2, i) + Chr(10) + "acte " + tab3750(3, i) + Chr(10) + "Choisir une formule?", True, "OUI", True, "NON", False, "")
                                If MyMsg_Box.ShowDialog() = MsgBoxResult.Yes Then
                                    If Val(tab3750(3, i)) = 0 Then
                                        For j = 0 To appel_assistance_nécessaire.Length - 1
                                            appel_assistance_nécessaire(j) = True
                                        Next
                                        Exit For ' For i = 1 To Occurence_Grp3750
                                    Else
                                        appel_assistance_nécessaire(Val(tab3750(3, i))) = True
                                    End If
                                Else
                                    retour_sortie = False
                                End If
                            End If
                        Case "0209", "0210", "0211", "0216", "0402", "0420"
                            If (Mid(tab3750(1, i), 1, 1) <> "1" Or (Config.STS_AfficheDiagNiv1 = True And Mid(tab3750(1, i), 1, 1) = "1")) And Jeux_d_essai2.Visible = False Then
                                If Val(tab3750(3, i)) <> 0 Then
                                    MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + "Prestation " + tab3750(3, i) + Chr(10) + tab3750(1, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                Else
                                    MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + tab3750(1, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                End If
                            End If
                            If Val(tab3750(3, i)) = 0 Then
                                For j = 0 To appel_assistance_nécessaire.Length - 1
                                    appel_assistance_nécessaire(j) = True
                                Next
                                Exit For ' For i = 1 To Occurence_Grp3750
                            Else
                                appel_assistance_nécessaire(Val(tab3750(3, i))) = True
                            End If

                        Case Else
                            If Mid(tab3750(1, i), 1, 1) <> "1" Or (Config.STS_AfficheDiagNiv1 = True And Mid(tab3750(1, i), 1, 1) = "1") Then
                                If Val(tab3750(3, i)) <> 0 Then
                                    MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + "Prestation " + tab3750(3, i) + Chr(10) + tab3750(1, i) + Chr(10) + tab3750(2, i) + Chr(10) + tab3750(1, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                Else
                                    MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + tab3750(1, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                End If
                            End If

                    End Select

                    If Mid(tab3750(1, i), 1, 1) = "4" Then
                        appel_assistance_nécessaire(Val(tab3750(3, i))) = True
                    End If
                    If Mid(tab3750(1, i), 1, 1) = "3" And appel_assistance_nécessaire(Val(tab3750(3, i))) = False Then
                        retour_sortie = False
                    End If

                Next
                If SGD_LireChamp(NuméroSessionSTS, 3760, 1, 1, ValeurChamp, TailleMax) = 0 Then
                    current_formule_STS.num_prestation_de_rattachement = "1"
                    appel_assistance_nécessaire(0) = True
                    retour_sortie = True
                End If

                If retour_sortie = False Then
                    Return False
                End If

                '_____________________________________________________________________________________________________________________________
                'APPEL A L'ASSISTANCE
                For n = 0 To appel_assistance_nécessaire.Length - 1
                    If appel_assistance_nécessaire(n) = True Then
                        ReDim Tab_Valeur_STS(0)
                        ReDim tab_current_formule_STS(0)
                        Groupes_STS("Assistance", code_aiguillage_STS)
                        AfficheErreur(STS_Assistance_S("E", 0, NuméroSessionSTS))
                        '------------------------------------------------------------------------------------------------------------------------
                        'reinitialise le tableau modifié par STS
                        For j = 0 To tab_Lignes_Vente.Length - 1
                            If UCase(Vente(VenteType.Index, j).Value.ToString) = "VENTE DIRECTE" Then
                                tab_Lignes_Vente(j).Ligne_traitée = True
                            Else
                                tab_Lignes_Vente(j).Ligne_traitée = False
                            End If
                        Next
                        '------------------------------------------------------------------------------------------------------------------------
                        'Visu_API agrement CNDA
                        If Visu_API = True Then
                            Technique_MAIN.LireSession_Out_VersFichier2(NuméroSessionSTS, Application.StartupPath + "\traces\STS_Assistance_out.txt")
                        End If
                        '-----------------------------------------------------------
                        If SGD_LireChamp(NuméroSessionSTS, 3750, 1, 1, ValeurChamp, TailleMax) = 0 Then 'présence d'au moins un groupe 3750 en retour de l'assistance
                            ReDim tab3750(3, 100)  'tableau pour les diagnostiques STS (valeur dans les groupes 3750)

                            Occurence_Grp3750 = 0
                            ValeurChamp = "XXXXXX"
                            TailleMax = 6
                            While SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 1, ValeurChamp, TailleMax) = 0
                                tab3750(1, Occurence_Grp3750 + 1) = Mid(ValeurChamp, 1, TailleMax)
                                ValeurChamp = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                                TailleMax = 1000
                                SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 2, ValeurChamp, TailleMax)
                                tab3750(2, Occurence_Grp3750 + 1) = Mid(ValeurChamp, 1, TailleMax)
                                ValeurChamp = "XXXX"
                                TailleMax = 4
                                SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 3, ValeurChamp, TailleMax)
                                tab3750(3, Occurence_Grp3750 + 1) = Mid(ValeurChamp, 1, TailleMax)
                                Occurence_Grp3750 = Occurence_Grp3750 + 1
                                ValeurChamp = "XXXXXX"
                                TailleMax = 6
                            End While

                            ReDim Preserve tab3750(3, Occurence_Grp3750)
                            '-----------------------------------------------------------

                            For i = 1 To Occurence_Grp3750
                                If Mid(tab3750(1, i), 1, 1) <> "1" Or (Config.STS_AfficheDiagNiv1 = True And Mid(tab3750(1, i), 1, 1) = "1") Then 'pour ne pas afficher diag de niveau 1 en fonction de config.xml
                                    Select Case Mid(tab3750(1, i), 3, 4) 'analyse des codes diagnostics

                                        Case "0109" 'Il n'éxiste pas d'assistance
                                            If Config.STS_AfficheDiagNiv1 = True Then
                                                MyMsg_Box.Presentation("Officine !", "STS Assistance: " + Chr(10) + "Prestation " + tab3750(3, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                                MyMsg_Box.ShowDialog()
                                            End If
                                            Groupes_STS("Tarification_après_Assistance", code_aiguillage_STS)
                                            AfficheErreur(STS_Tarification_S("P", NuméroSessionSTS))
                                            GoTo FinAssistance

                                        Case "0103", "0200", "0201", "0202", "0205", "0206", "0303", "0209", "0210", "0211", "0216", "0402", "0420"
                                            current_formule_STS.num_prestation_de_rattachement = tab3750(3, i)
                                            STS_Choix_Formule_STS.ShowDialog()
                                            If current_formule_STS.selected = False Then
                                                Return False
                                            End If
                                            If current_formule_STS.pour_toutes_prestations = True Then
                                                ReDim tab_current_formule_STS(Nombre_de_Prestations)
                                                For j = 1 To Nombre_de_Prestations
                                                    tab_current_formule_STS(j) = current_formule_STS
                                                    tab_current_formule_STS(j).num_prestation_de_rattachement = j
                                                Next
                                                Exit For
                                            Else
                                                ReDim Preserve tab_current_formule_STS(i)
                                                tab_current_formule_STS(i) = current_formule_STS
                                            End If

                                        Case "0401"

                                        Case Else
                                            If Val(tab3750(3, i)) <> 0 Then
                                                MyMsg_Box.Presentation("Officine !", "STS Assistance: " + Chr(10) + "Prestation " + tab3750(3, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                                MyMsg_Box.ShowDialog()
                                            Else
                                                MyMsg_Box.Presentation("Officine !", "STS Assistance: " + tab3750(2, i), False, "", False, "", True, "OK")
                                                MyMsg_Box.ShowDialog()
                                            End If

                                    End Select
                                End If
                            Next
                        Else

                            ReDim tab_current_formule_STS(Nombre_de_Prestations)
                            Dim i = 1
                            While i <= Nombre_de_Prestations
                                If appel_assistance_nécessaire(i) = True Then
                                    current_formule_STS.num_prestation_de_rattachement = i
                                    STS_Choix_Formule_STS.ShowDialog()
                                    If current_formule_STS.selected = False Then
                                        'ReDim tab_current_formule_STS(0)
                                        'Exit Function
                                    Else
                                        tab_current_formule_STS(i) = current_formule_STS
                                    End If
                                End If
                                If current_formule_STS.pour_toutes_prestations = True Then
                                    For j = 1 To Nombre_de_Prestations
                                        If appel_assistance_nécessaire(j) = True Then
                                            tab_current_formule_STS(j) = current_formule_STS
                                            tab_current_formule_STS(j).num_prestation_de_rattachement = j
                                        End If
                                    Next
                                    i = Nombre_de_Prestations + 1
                                End If
                                i = i + 1
                            End While
                        End If
                        Groupes_STS("Tarification_après_Assistance", code_aiguillage_STS)
                        AfficheErreur(STS_Tarification_S("P", NuméroSessionSTS))
                        '------------------------------------------------------------------------------------------------------------------------
                        'Visu_API agrement CNDA
                        If Visu_API = True Then
                            Technique_MAIN.LireSession_Out_VersFichier2(NuméroSessionSTS, Application.StartupPath + "\traces\STS_Tarification_après_Assistance_out.txt")
                        End If
                        '------------------------------------------------------------------------------------------------------------------------
                        'reinitialise le tableau modifié par STS
                        For j = 0 To tab_Lignes_Vente.Length - 1
                            If UCase(Vente(VenteType.Index, j).Value.ToString) = "VENTE DIRECTE" Then
                                tab_Lignes_Vente(j).Ligne_traitée = True
                            Else
                                tab_Lignes_Vente(j).Ligne_traitée = False
                            End If
                        Next
                        '------------------------------------------------------------------------------------------------------------------------
                        ValeurChamp = "@@@@@@"
                        TailleMax = 6
                        If SGD_LireChamp(NuméroSessionSTS, 3750, 1, 1, ValeurChamp, TailleMax) = 0 Then 'présence d'au moins un groupe 3750 en retour de la tarification(apres assistance)
                            Occurence_Grp3750 = 0
                            While SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 1, ValeurChamp, TailleMax) = 0
                                If Mid(ValeurChamp, 1, 1) <> "1" Or Config.STS_AfficheDiagNiv1 = True Then 'pour ne pas afficher diag de niveau 1 en fonction de config.xml
                                    Dim libellé, num_prestation As String
                                    libellé = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
                                    TailleMax = 200
                                    SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 2, libellé, TailleMax)
                                    libellé = Mid(libellé, 1, TailleMax)
                                    num_prestation = "1234"
                                    TailleMax = 4
                                    SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 3, num_prestation, TailleMax)
                                    num_prestation = Mid(num_prestation, 1, TailleMax)
                                    If Val(num_prestation) <> 0 Then
                                        MyMsg_Box.Presentation("Officine !", "STS: " + Chr(10) + "Prestation " + num_prestation + Chr(10) + libellé, False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                    Else
                                        MyMsg_Box.Presentation("Officine !", "STS: " + libellé, False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                    End If
                                End If
                                If Mid(ValeurChamp, 1, 1) = "3" Then
                                    retour_sortie = False
                                End If

                                Occurence_Grp3750 = Occurence_Grp3750 + 1
                                ValeurChamp = "@@@@@@"
                                TailleMax = 6
                            End While

                            If retour_sortie = False Then
                                Return False
                            End If

                        End If

                        Exit For

                    End If '  If appel_assistance_nécessaire = True Then
                Next



            End If 'If SGD_LireChamp(NuméroSessionSTS, 3750, 1, 1, ValeurChamp, TailleMax) = 0 Then 'présence d'au moins un groupe 3750 après la premère tarification
            'FIN 'APPEL A L'ASSISTANCE
            '_____________________________________________________________________________________________________________________________
FinAssistance:




            IdGroupeCourant = 0
            OccurrenceGroupeCourant = 0
            Dim last_occurence As Integer = 0
            Dim last_groupe As Integer = 0

            While SGD_LireGroupeSuivant(NuméroSessionSTS, IdGroupeCourant, OccurrenceGroupeCourant, IdGroupeSuivant, OccurrenceGroupeSuivant) = 0
                IdGroupeCourant = IdGroupeSuivant

                OccurrenceGroupeCourant = OccurrenceGroupeSuivant

                Dim NumChamp As UInt16 = 1
                Dim ValeurChamp As String = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
                Dim TailleMax As Integer = 80
                Dim NumPrestation As Integer = 0
                Dim retour_Groupe_3750_Diagnostic_STS As String = ""

                While SGD_LireChamp(NuméroSessionSTS, IdGroupeCourant, OccurrenceGroupeCourant, NumChamp, ValeurChamp, TailleMax) = 0

                    ValeurChamp = Mid(ValeurChamp, 1, TailleMax).ToString

                    If NumChamp = "1" Then
                        NumPrestation = Val(ValeurChamp)
                    End If
                    If (IdGroupeCourant <= 2200 And ValeurChamp <> "") Or IdGroupeCourant = 2010 Then
                        ReDim Preserve Tab_Valeur_STS(Tab_Valeur_STS.Length)
                        Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).groupe = IdGroupeCourant
                        last_groupe = IdGroupeCourant
                        Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).occurence = OccurrenceGroupeCourant
                        last_occurence = OccurrenceGroupeCourant
                        Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).champ = NumChamp
                        Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).valeur = ValeurChamp
                        Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).NumPrestation = NumPrestation.ToString

                    ElseIf IdGroupeCourant = 3710 Then
                        If NumChamp = "1" Then
                            ReDim Preserve Tab_Valeur_STS(Tab_Valeur_STS.Length)
                            Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).groupe = IdGroupeCourant
                            Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).NumPrestation = NumPrestation.ToString
                        ElseIf NumChamp = "2" Then
                            Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).valeur = "Formule " + ValeurChamp
                        ElseIf Val(NumChamp) > 3 And Val(NumChamp) Mod 2 = 0 Then
                            Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).valeur = Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).valeur + ", P" + ValeurChamp
                        ElseIf Val(NumChamp) > 3 And Val(NumChamp) Mod 2 = 1 Then
                            Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).valeur = Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).valeur + "=" + ValeurChamp
                        End If

                    ElseIf IdGroupeCourant = 3715 And NumChamp = 2 Then
                        ReDim Preserve Tab_Valeur_STS(Tab_Valeur_STS.Length)
                        Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).groupe = IdGroupeCourant
                        Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).champ = NumChamp
                        Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).valeur = ValeurChamp
                        Tab_Valeur_STS(Tab_Valeur_STS.Length - 1).NumPrestation = NumPrestation.ToString


                    ElseIf IdGroupeCourant = 3790 Then
                        If NumChamp > 1 Then
                            For i = 0 To Tab_Valeur_STS.Length - 1
                                If Tab_Valeur_STS(i).occurence = last_occurence And Tab_Valeur_STS(i).groupe = last_groupe And Tab_Valeur_STS(i).champ = NumChamp - 1 Then
                                    Tab_Valeur_STS(i).affichage = Mid(ValeurChamp, 1, 1)
                                    Tab_Valeur_STS(i).modification = Mid(ValeurChamp, 2, 1)
                                    Exit For
                                End If

                            Next

                        End If

                    ElseIf IdGroupeCourant = 3750 Then

                        Select Case NumChamp
                            Case 1
                                retour_Groupe_3750_Diagnostic_STS = "STS: Code Diagnostic:" + ValeurChamp + Chr(10)
                            Case 2
                                retour_Groupe_3750_Diagnostic_STS = retour_Groupe_3750_Diagnostic_STS + "Libellé:" + ValeurChamp + Chr(10)
                            Case 3
                                If Val(ValeurChamp) <> 0 Then
                                    retour_Groupe_3750_Diagnostic_STS = retour_Groupe_3750_Diagnostic_STS + "N° de la prestation de rattachement: " + ValeurChamp + Chr(10)
                                End If
                                MyMsg_Box.Presentation("Officine !", retour_Groupe_3750_Diagnostic_STS, False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                        End Select

                    End If
                    ValeurChamp = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
                    TailleMax = 80
                    NumChamp = NumChamp + 1
                End While
            End While
            '_____________________________________________________________________________________________________________________________
            'reinitialise le tableau modifié par STS
            For j = 0 To tab_Lignes_Vente.Length - 1
                If UCase(Vente(VenteType.Index, j).Value.ToString) = "VENTE DIRECTE" Then
                    tab_Lignes_Vente(j).Ligne_traitée = True
                Else
                    tab_Lignes_Vente(j).Ligne_traitée = False
                End If
            Next
            STS_Affiche_sortie.ShowDialog()
            Return STS_Affiche_sortie_result

        End If



        Return True
    End Function

    Private Function Groupes_STS(ByVal mode As String, ByVal code_aiguillage_STS As String) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If


        '____________________________________________________________________________________________________
        'Trace
        Trace_Reset_compteur()

        FichierTrace = Application.StartupPath + "\traces\STS_" + mode + "_in.txt"
        '____________________________________________________________________________________________________
        STS_InitLIB2(Config.SesamIni)
        SGD_ReserverSession(20000, NuméroSessionSTS)

        'copie session CPS
        'Dim IdGroupeSuivant As UInt16
        'Dim OccurrenceGroupeSuivant As UInt16
        Dim IdGroupeCourant As UInt16 = 0
        Dim OccurrenceGroupeCourant As UInt16 = 0
        Dim CompteurChampsTotal As Integer = 0
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        If Config.Configuration_Desynchroniser = False Then
            SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 1, Visu_API, FichierTrace)
            ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
            TailleMax = 80
            Dim i As UInt16 = 1
            While SGD_LireChamp(NumeroSessionCPS, 1, 1, i, ValeurChamp, TailleMax) = 0
                CompteurChampsTotal = CompteurChampsTotal + 1
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, Mid(ValeurChamp, 1, TailleMax), Visu_API, FichierTrace)
                ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
                TailleMax = 80
                i = i + 1
            End While

            SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 2, Visu_API, FichierTrace)
            ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
            TailleMax = 80
            i = 1
            While SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, i, ValeurChamp, TailleMax) = 0
                CompteurChampsTotal = CompteurChampsTotal + 1
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, Mid(ValeurChamp, 1, TailleMax), Visu_API, FichierTrace)
                ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
                TailleMax = 80
                i = i + 1
            End While

        End If
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'copie session Vitale
        'groupe 101
        SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 101, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C1, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C2, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C3, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C4, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C5, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C6, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C7, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C8, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C9, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C10, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C11, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C12, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C13, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G101C14, Visu_API, FichierTrace)

        'groupe 102
        'If SGD_LireChamp(NumeroSessionVitale, 102, 1, 1, ValeurChamp, TailleMax) = 0 Then
        If CurrentBenéficiaire.G102C1 <> "" Then
            SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 102, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G102C1, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G102C2, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G102C3, Visu_API, FichierTrace)
        End If

        'groupe 103
        If CurrentBenéficiaire.G103C1 <> "" Then
            SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 103, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G103C1, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G103C2, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G103C3, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G103C4, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G103C5, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G103C6, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G103C7, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G103C8, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G103C9, Visu_API, FichierTrace)
        End If

        'groupe 104
        SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 104, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C1, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C2, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C3, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C4, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C5, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C6, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C7, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C8, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C9, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C10, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C11, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C12, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C13, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C14, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C15, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C16, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C17, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G104C18, Visu_API, FichierTrace)

        'groupes 106
        For i = 0 To 6
            If CurrentBenéficiaire.G106C3(i) <> "" Then
                SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 106, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G106C1(i), Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G106C2(i), Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G106C3(i), Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G106C4(i), Visu_API, FichierTrace)
            End If
        Next



        '-----------------------------------------------------------------------------------------------------------------------
        'données assurance complémentaire
        If AMC_Piècejustificative_ComboBox.SelectedIndex = 4 And CurrentConvention.selected = False Then
            'groupes 107
            If CurrentBenéficiaire.G107C1 <> "" Then
                SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 107, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G107C1, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G107C2, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G107C3, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G107C4, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G107C5, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, code_aiguillage_STS, Visu_API, FichierTrace)
            End If

            'groupes 108
            For i = 0 To 2
                If CurrentBenéficiaire.G108C1(i) <> "" Or CurrentBenéficiaire.G108C2(i) <> "" Then
                    SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 108, Visu_API, FichierTrace)
                    SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G108C1(i), Visu_API, FichierTrace)
                    SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G108C2(i), Visu_API, FichierTrace)
                End If
            Next

            'groupes 109
            If CurrentBenéficiaire.G109C1 <> "" Then
                SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 109, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C1, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C2, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C3, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C4, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C5, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C6, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C7, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C8, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C9, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, code_aiguillage_STS, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C11, Visu_API, FichierTrace)
                SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C12, Visu_API, FichierTrace)
            End If

        ElseIf CurrentConvention.selected = True And CurrentFactureVitale.Mode_Gestion = "RO" Then
            'groupes 107
            SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 107, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.AMC_NumMutuelle, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.AMC_Indicateurdetrairement, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentConvention.Num_AMC, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, code_aiguillage_STS, Visu_API, FichierTrace)

        ElseIf CurrentConvention.selected = True And CurrentFactureVitale.Mode_Gestion = "" Then
            'groupes 109
            SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 109, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.AMC_NumOrganisme, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.AMC_NumAdherent, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.AMC_Indicateurdetrairement, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentConvention.Code_routage, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentConvention.identifiant_hôte, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentConvention.nom_domaine, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, code_aiguillage_STS, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C11, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G109C12, Visu_API, FichierTrace)


        Else

            'groupes 109
            SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 109, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.AMC_NumOrganisme, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.AMC_NumAdherent, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.AMC_Indicateurdetrairement, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, AMC_CodeRoutage_TextBox.Text, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, AMC_IdHote_TextBox.Text, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, AMC_NomDomaine_TextBox.Text, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, code_aiguillage_STS, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, "", Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, "", Visu_API, FichierTrace)
        End If

        If CurrentBenéficiaire.G111C1 <> "" And CurrentFactureVitale.TP_AMC = True Then
            SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 111, Visu_API, FichierTrace)
            SGD_AjouterChamp_Tracé(NuméroSessionSTS, CurrentBenéficiaire.G111C1, Visu_API, FichierTrace)
        End If
        'FIN  données assurance complémentaire
        '-----------------------------------------------------------------------------------------------------------------------


        Dim NumFacture As Integer = 999




        'groupe 1110 à 1410
        groupe1110(NuméroSessionSTS, NumFacture.ToString)
        groupe1120(NuméroSessionSTS)
        groupe1130(NuméroSessionSTS)
        groupe1140(NuméroSessionSTS)
        groupe1160(NuméroSessionSTS)
        groupe1211_1213_1214(NuméroSessionSTS, CurrentBenéficiaire.Prescripteur_ID, DatePrecription.Value)
        groupe1230(NuméroSessionSTS)
        If groupe1310(NuméroSessionSTS) = False Then
            Me.Enabled = True
            Return False
        End If
        CurrentBenéficiaire.AMC_NumOrganisme = AMC_NumAMC_TextBox.Text
        CurrentBenéficiaire.AMC_NumAdherent = AMC_Numadhérent_TextBox.Text
        'If CurrentFactureVitale.TP_AMC = True Then
        If CheckBox_Facturation_AMC.Checked = True Then
            If groupe1321_STS(NuméroSessionSTS) = False Then
                Return False
            End If
            groupe1330(NuméroSessionSTS)
        End If
        groupe1410(NuméroSessionSTS)
        If ModeSecur = "5" Then
            groupe1420(NuméroSessionSTS)
        End If
        groupe1440(NuméroSessionSTS)
        'groupe 1511-1512-1513
        Select Case NatureAssurance_Button.Text
            Case "MALADIE"
                groupe1511(NuméroSessionSTS)
            Case "MATERNITE"
                groupe1512(NuméroSessionSTS, NatureAssuranceDateTimePicker.Value)
            Case "ACCIDENT DU TRAVAIL"
                If current_AT.selected = False Or groupe1513(NuméroSessionSTS, current_AT.DateAT, current_AT.NumAT, current_AT.CléAT) = False Then
                    Return False
                End If
            Case "PREVENTION"
                groupe1514(NumeroSessionFacture)
            Case "SMG"
                groupe1515(NumeroSessionFacture)
            Case Else
                MyMsg_Box.Presentation("Officine !", "ERREUR NATURE ASSURANCE", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                SGD_LibererSession(NuméroSessionSTS)
                Return False
        End Select

        'groupe 1610 et (1730 ou 1740)
        'Dim Occurence1610 As Integer = 0
        Nombre_de_Prestations = 0
        Dim Total_des_Montants_Facturés As Double = 0
        Dim Total_FSE As Double = 0
        Dim Total_Remboursable_par_AMO As Double = 0
        Dim Total_Théorique_Remboursable_par_AMC As Double = 0
        Dim Total_Remboursable_par_AMC As Double = 0
        For i = 0 To Vente.RowCount - 2 'parcours les lignes du tableau(graphique)vente
            If tab_Lignes_Vente(i).Ligne_traitée = False Then 'si la ligne du tableau(graphique)vente n'a pas encore étée traitée
                Select Case Vente(VenteType.Index, i).Value.ToString 'determine les lignes pour lesquelles il faut etablire une FSE
                    Case "assurance", "ALD", "PREV", "SP"
                        'groupe 1610,1730,1740,1820,1840,1850,
                        Dim TypeNomenclature As String
                        TypeNomenclature = Me.CodePrestationsTableAdapter.SelectTypeNomenclatureByCodeActe(Vente(VenteCodeActe.Index, i).Value.ToString)
                        Select Case TypeNomenclature
                            Case "LPP"
                                If Vente(Vente_LPP_Kit.Index, i).Value = False Then
                                    If GrouperLPPToolStripMenuItem.Checked = True Then
                                        If groupe1610LPP_STS_regroup(NuméroSessionSTS, i, Nombre_de_Prestations, Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, Total_FSE) = False Then
                                            Return False
                                        End If
                                    Else
                                        If groupe1610LPP_STS(NuméroSessionSTS, i, Nombre_de_Prestations, Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, Total_FSE) = False Then
                                            Return False
                                        End If
                                    End If
                                    'ReDim CurrentFactureVitale.TabLigneFacture(i).DétailLpp(0)
                                    ReDim CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).DétailLpp(10)
                                    groupe1820(NuméroSessionSTS, Nombre_de_Prestations, Vente(VenteType.Index, i).Value.ToString)
                                    groupe1840(NuméroSessionSTS, Nombre_de_Prestations)
                                    'If EntentePréalableBoolean = True Then
                                    If tab_Lignes_Vente(i).Entente_Préalable_code_accord <> "" Then
                                        groupe1840(NuméroSessionSTS, Nombre_de_Prestations) ', i)
                                    End If
                                    If Renouvellement_TextBox.Text <> "0" Then
                                        groupe1850(NuméroSessionSTS, Nombre_de_Prestations, Renouvellement_TextBox.Text)
                                    End If
                                    If groupe2000(NuméroSessionSTS, Nombre_de_Prestations, Vente(VenteCodeActe.Index, i).Value.ToString) = False Then
                                        Return False
                                    End If
                                    groupe2020(NuméroSessionSTS, Nombre_de_Prestations)
                                    groupe2030(NuméroSessionSTS, Nombre_de_Prestations)
                                    If GrouperLPPToolStripMenuItem.Checked = True Then
                                        'regroupement Même actes LPP
                                        Dim Occurence1730 = 0
                                        For j = 0 To Vente.RowCount - 2 'parcours les lignes du tableau(graphique)vente pour trouver même code acte
                                            If Occurence1730 < 10 Then
                                                If Vente(VenteCodeActe.Index, i).Value = Vente(VenteCodeActe.Index, j).Value And Vente(VenteType.Index, i).Value = Vente(VenteType.Index, j).Value _
                                                    And tab_Lignes_Vente(j).Ligne_traitée = False Then
                                                    groupe1730_regroup(NuméroSessionSTS, Nombre_de_Prestations, j, Occurence1730)
                                                    tab_Lignes_Vente(j).Ligne_traitée = True
                                                    'If Val(Occurence1730) > 10 Then
                                                    '    Return False
                                                    'End If
                                                End If
                                            End If
                                        Next 'parcours les lignes du tableau(graphique)vente pour trouver même code acte
                                    Else
                                        'If Vente(VenteLPP.Index, i).Value.ToString <> "" Then
                                        groupe1730(NuméroSessionSTS, Nombre_de_Prestations, i)
                                        'End If
                                    End If



                                Else 'Vente(Vente_LPP_Kit.Index, i).Value = False
                                    Dim kit = Me.KitsTableAdapter.GetDataBy_Désignation_Kit(Vente(Vente_produits.Index, i).Value.ToString)

                                    If groupe1610LPP_STS_Kits(NuméroSessionSTS, i, Nombre_de_Prestations, Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, _
                                                           Total_Remboursable_par_AMC, kit, CInt(Vente(VenteQuantité.Index, i).Value), Total_FSE) = False Then
                                        Return False
                                    End If
                                    ReDim CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).DétailLpp(10)
                                    groupe1820(NuméroSessionSTS, Nombre_de_Prestations, Vente(VenteType.Index, i).Value.ToString)
                                    groupe1840(NuméroSessionSTS, Nombre_de_Prestations)
                                    If Renouvellement_TextBox.Text <> "0" Then
                                        groupe1850(NuméroSessionSTS, Nombre_de_Prestations, Renouvellement_TextBox.Text)
                                    Else
                                        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1850C2 = ""

                                    End If
                                    If groupe2000(NuméroSessionSTS, Nombre_de_Prestations, Vente(VenteCodeActe.Index, i).Value.ToString) = False Then
                                        Me.Enabled = True
                                        Return False
                                    End If
                                    groupe2010(NuméroSessionSTS, Nombre_de_Prestations)
                                    groupe2020(NuméroSessionSTS, Nombre_de_Prestations)
                                    groupe2030(NuméroSessionSTS, Nombre_de_Prestations)
                                    Dim Occurence1730 = 0
                                    For Each ligne_du_kit As PharmaDataSet.KitsRow In kit 'parcours les lignes du kit
                                        If Occurence1730 < 10 Then

                                            groupe1730_Kit(NuméroSessionSTS, Nombre_de_Prestations, ligne_du_kit, Occurence1730, CInt(Vente(VenteQuantité.Index, i).Value))

                                        End If
                                    Next

                                End If
                                tab_Lignes_Vente(i).Ligne_traitée = True
                                For j = 1 To tab_current_formule_STS.Length - 1
                                    If Val(tab_current_formule_STS(j).num_prestation_de_rattachement) = Val(Nombre_de_Prestations) Then
                                        SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 3710, Visu_API, FichierTrace)
                                        SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).num_prestation_de_rattachement, Visu_API, FichierTrace)
                                        SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).Numéro, Visu_API, FichierTrace)
                                        CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710C2 = tab_current_formule_STS(j).Numéro
                                        SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).nombre_de_paramètres, Visu_API, FichierTrace)
                                        CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710C3 = tab_current_formule_STS(j).nombre_de_paramètres
                                        If Val(tab_current_formule_STS(j).nombre_de_paramètres) > 0 Then
                                            CurrentFactureVitale.TabLigneFacture(tab_current_formule_STS(j).num_prestation_de_rattachement).G3710_Paramètes = ""
                                            For p = 1 To tab_current_formule_STS(j).paramètres.Length - 1
                                                SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).paramètres(p).numéro, Visu_API, FichierTrace)


                                                ''-----------------
                                                CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes = _
                                                CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes.ToString + "\" + tab_current_formule_STS(j).paramètres(p).numéro.ToString + ":"
                                                '-----------------
                                                SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).paramètres(p).valeur_affectée, Visu_API, FichierTrace)
                                                CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes = _
                                                CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes + tab_current_formule_STS(j).paramètres(p).valeur_affectée
                                            Next
                                        End If

                                    End If
                                Next
                            Case Else 'Médicaments
                                If groupe1610Médicaments_STS(NuméroSessionSTS, i, Nombre_de_Prestations, Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE) = False Then
                                    Return False
                                End If
                                groupe1820(NuméroSessionSTS, Nombre_de_Prestations, Vente(VenteType.Index, i).Value.ToString)
                                groupe1840(NuméroSessionSTS, Nombre_de_Prestations)
                                If Renouvellement_TextBox.Text <> "0" Then
                                    groupe1850(NuméroSessionSTS, Nombre_de_Prestations, Renouvellement_TextBox.Text)
                                End If
                                If groupe2000(NuméroSessionSTS, Nombre_de_Prestations, Vente(VenteCodeActe.Index, i).Value.ToString) = False Then
                                    Return False
                                End If
                                groupe2020(NuméroSessionSTS, Nombre_de_Prestations)
                                groupe2030(NuméroSessionSTS, Nombre_de_Prestations)
                                groupe1740(NuméroSessionSTS, Nombre_de_Prestations, i)

                                If CurrentFactureVitale.TOP_CMU = True And CurrentFactureVitale.Sortant_CMU = False Then
                                    SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 3710, Visu_API, FichierTrace)
                                    SGD_AjouterChamp_Tracé(NuméroSessionSTS, Nombre_de_Prestations, Visu_API, FichierTrace)
                                    SGD_AjouterChamp_Tracé(NuméroSessionSTS, "052", Visu_API, FichierTrace)
                                    SGD_AjouterChamp_Tracé(NuméroSessionSTS, "0", Visu_API, FichierTrace)
                                Else
                                    ''''''''''''''''''''''''''''''''''''''''''''''
                                    If Hono_Disp_Codes_list.Contains(CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4.ToString) And _
                                        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4.ToString <> "HC" Then
                                        For j = 1 To tab_current_formule_STS.Length - 1
                                            If Val(tab_current_formule_STS(j).num_prestation_de_rattachement) = Val(Nombre_de_Prestations - 1) Then
                                                SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 3710, Visu_API, FichierTrace)
                                                SGD_AjouterChamp_Tracé(NuméroSessionSTS, Nombre_de_Prestations.ToString, Visu_API, FichierTrace)
                                                SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).Numéro, Visu_API, FichierTrace)
                                                CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710C2 = tab_current_formule_STS(j).Numéro '''''''
                                                SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).nombre_de_paramètres, Visu_API, FichierTrace)
                                                CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710C3 = tab_current_formule_STS(j).nombre_de_paramètres

                                                If Val(tab_current_formule_STS(j).nombre_de_paramètres) > 0 Then
                                                    CurrentFactureVitale.TabLigneFacture(tab_current_formule_STS(j).num_prestation_de_rattachement).G3710_Paramètes = ""
                                                    For p = 1 To tab_current_formule_STS(j).paramètres.Length - 1
                                                        SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).paramètres(p).numéro, Visu_API, FichierTrace)
                                                        'CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes = _
                                                        'CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes.ToString + "\" + tab_current_formule_STS(j).paramètres(p).numéro.ToString + ":"
                                                        SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).paramètres(p).valeur_affectée, Visu_API, FichierTrace)
                                                        'CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes = _
                                                        'CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes + tab_current_formule_STS(j).paramètres(p).valeur_affectée

                                                    Next
                                                End If

                                            End If
                                        Next
                                    Else
                                        ''''''''''''''''''''''''''''''''''''''''''''''
                                        For j = 1 To tab_current_formule_STS.Length - 1
                                            If Val(tab_current_formule_STS(j).num_prestation_de_rattachement) = Val(Nombre_de_Prestations) Then
                                                SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 3710, Visu_API, FichierTrace)
                                                SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).num_prestation_de_rattachement, Visu_API, FichierTrace)
                                                SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).Numéro, Visu_API, FichierTrace)
                                                CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710C2 = tab_current_formule_STS(j).Numéro '''''''
                                                SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).nombre_de_paramètres, Visu_API, FichierTrace)
                                                CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710C3 = tab_current_formule_STS(j).nombre_de_paramètres

                                                If Val(tab_current_formule_STS(j).nombre_de_paramètres) > 0 Then
                                                    CurrentFactureVitale.TabLigneFacture(tab_current_formule_STS(j).num_prestation_de_rattachement).G3710_Paramètes = ""
                                                    For p = 1 To tab_current_formule_STS(j).paramètres.Length - 1
                                                        SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).paramètres(p).numéro, Visu_API, FichierTrace)
                                                        CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes = _
                                                        CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes.ToString + "\" + tab_current_formule_STS(j).paramètres(p).numéro.ToString + ":"
                                                        SGD_AjouterChamp_Tracé(NuméroSessionSTS, tab_current_formule_STS(j).paramètres(p).valeur_affectée, Visu_API, FichierTrace)
                                                        CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes = _
                                                        CurrentFactureVitale.TabLigneFacture(Val(Nombre_de_Prestations)).G3710_Paramètes + tab_current_formule_STS(j).paramètres(p).valeur_affectée

                                                    Next
                                                End If

                                            End If
                                        Next
                                    End If
                                End If
                                '-------------------------------------------------------
                                tab_Lignes_Vente(i).Ligne_traitée = True

                                'If my_Hono_Disp.exist = True And Config.Hono_Disp_Activer = True Then
                                '    If my_Hono_Disp.G1610_G1820_Hono_Disp_simple_STS(NumeroSessionFacture, i, Nombre_de_Prestations, Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC) = False Then
                                '        Return False
                                '    End If
                                'End If

                        End Select
                End Select 'determine les lignes pour lesquelles il faut etablire une FSE
            End If
        Next 'parcours les lignes du tableau(graphique)vente
        If groupe1610_1820_hono_disp_complexe(NuméroSessionSTS, Nombre_de_Prestations, Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, Total_FSE) = False Then
            Return False
        End If
        If HonorairesDeDispensationGlobauxToolStripMenuItem.Checked = True Then
            If Hono_Disp_Rembousable_is_in_facture() Then
                If groupe1610_1820_hono_disp_Globaux(NuméroSessionSTS, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE, "HDR") = False Then
                    Return False
                End If
                If Hono_Disp_Age_is_in_facture() Then
                    If groupe1610_1820_hono_disp_Globaux(NuméroSessionSTS, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE, "HDA") = False Then
                        Return False
                    End If
                End If
                If Hono_Disp_Médicament_Spécifique_is_in_facture() Then
                    If groupe1610_1820_hono_disp_Globaux(NuméroSessionSTS, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE, "HDE") = False Then
                        Return False
                    End If
                End If
            End If
        End If
        'groupe1910
        groupe1910_STS(NuméroSessionSTS, Nombre_de_Prestations, Total_des_Montants_Facturés, Total_Remboursable_par_AMO.ToString, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, Total_FSE)

        ''groupe3720
        'If tab_current_formule_STS.Length = 1 And current_formule_STS.selected = True Then
        '    SGD_AjouterGroupe_Tracé(NuméroSessionSTS, 3720, Visu_API, FichierTrace)
        '    SGD_AjouterChamp_Tracé(NuméroSessionSTS, current_formule_STS.Numéro, Visu_API, FichierTrace)
        '    SGD_AjouterChamp_Tracé(NuméroSessionSTS, current_formule_STS.nombre_de_paramètres, Visu_API, FichierTrace)
        '    If Val(current_formule_STS.nombre_de_paramètres) > 0 Then
        '        For p = 1 To current_formule_STS.paramètres.Length - 1
        '            SGD_AjouterChamp_Tracé(NuméroSessionSTS, current_formule_STS.paramètres(p).numéro, Visu_API, FichierTrace)
        '            SGD_AjouterChamp_Tracé(NuméroSessionSTS, current_formule_STS.paramètres(p).valeur_affectée, Visu_API, FichierTrace)
        '        Next
        '    End If
        'End If

        'groupe 3700
        groupe3700(NuméroSessionSTS, False)

        'groupe 3730
        groupe3730(NuméroSessionSTS, Config.Data_PMSS)

        Return True
    End Function

    Private Sub STS_ASSISTANCEToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles STS_ASSISTANCEToolStripMenuItem.Click

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If


        If CurrentBenéficiaire.AMC_NumMutuelle = "" And CurrentBenéficiaire.AMC_NumOrganisme = "" Then
            MyMsg_Box.Presentation("Officine !", "Absence de données mutuelle et de données complémentaires", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        '____________________________________________________________________________________________________
        'verification selection prescripteur
        If CurrentBenéficiaire.Prescripteur_ID = "" And CurrentBenéficiaire.G101C8 <> Config.Data_ContaceptifUrgence_NIR Then
            MyMsg_Box.Presentation("Officine !", "PRESCRIPTEUR DOIT ETRE RENSEIGNE", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Me.Enabled = True
            Exit Sub
        End If
        '____________________________________________________________________________________________________
        ReDim tab_current_formule_STS(0)
        '____________________________________________________________________________________________________
        Mode_Gestion()
        '____________________________________________________________________________________________________
        'utilisation des conventions oui/non
        Dim ConfigXml As New XmlDocument
        ConfigXml.Load("config.xml")
        Dim XMLelementliste As XmlNodeList
        XMLelementliste = ConfigXml.GetElementsByTagName("Conventions")
        If UCase(XMLelementliste.Item(0).Item("Activer").InnerText) = "OUI" And (AMC_NumAMC_TextBox.Text <> "" Or MUT_NumMutuelle_TextBox.Text <> "") And CheckBox_Facturation_AMC.Checked = True Then 'And CheckBox_Facturation_AMC.Checked = True Then
            Choix_Convention_Facturation.ShowDialog()
            Mode_Gestion()
        End If
        '____________________________________________________________________________________________________

        '____________________________________________________________________________________________________

        CurrentFactureVitale.TP_AMO = True
        CurrentFactureVitale.TP_AMC = True
        '____________________________________________________________________________________________________
        'Trace
        Trace_Reset_compteur()
        FichierTrace = "traces\STS_in.txt"
        '____________________________________________________________________________________________________

        'boolean pour verifier si lignes déja traités
        ReDim Preserve tab_Lignes_Vente(Vente.RowCount - 2)
        For j = 0 To Vente.RowCount - 2
            tab_Lignes_Vente(j).Ligne_traitée = False
        Next
        For i = 0 To Vente.RowCount - 2 'parcours les lignes du tableau(graphique)vente
            If Vente(VenteType.Index, i).Value.ToString = "Vente Directe" Then
                tab_Lignes_Vente(i).Ligne_traitée = True
            End If
        Next

        If CheckBoxModeDegradé.Checked = True Then
            ModeSecur = "5"
        Else
            ModeSecur = "3"
        End If
        ReDim Tab_Valeur_STS(0)
        Dim code_aiguillage_STS As String = Code_STS()
        If code_aiguillage_STS = "False" Then
            MyMsg_Box.Presentation("Officine !", "Erreur determination code routage STS", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        Groupes_STS("assistance", code_aiguillage_STS)
        AfficheErreur(STS_Assistance_S("P", 0, NuméroSessionSTS))
        'Visu_API agrement CNDA
        If Visu_API = True Then
            Technique_MAIN.LireSession_Out_VersFichier2(NuméroSessionSTS, Application.StartupPath + "\traces\STS_assistance_out.txt")
        End If


        '---------------------------------------------
        'cas de présence de code diagnostic STS (groupe 3750)
        If SGD_LireChamp(NuméroSessionSTS, 3750, 1, 1, ValeurChamp, TailleMax) = 0 Then 'présence d'au moins un groupe 3750
            Dim tab3750(3, 100) As String 'tableau pour les diagnostiques STS (valeur dans les groupes 3750)

            Dim Occurence_Grp3750 As Integer = 0
            ValeurChamp = "XXXXXX"
            TailleMax = 6
            While SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 1, ValeurChamp, TailleMax) = 0
                tab3750(1, Occurence_Grp3750 + 1) = Mid(ValeurChamp, 1, TailleMax)
                ValeurChamp = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                TailleMax = 100
                SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 2, ValeurChamp, TailleMax)
                tab3750(2, Occurence_Grp3750 + 1) = Mid(ValeurChamp, 1, TailleMax)
                ValeurChamp = "XXXX"
                TailleMax = 4
                SGD_LireChamp(NuméroSessionSTS, 3750, Occurence_Grp3750 + 1, 3, ValeurChamp, TailleMax)
                tab3750(3, Occurence_Grp3750 + 1) = Mid(ValeurChamp, 1, TailleMax)
                Occurence_Grp3750 = Occurence_Grp3750 + 1
                ValeurChamp = "XXXXXX"
                TailleMax = 6
            End While

            ReDim Preserve tab3750(3, Occurence_Grp3750)


            For i = 1 To Occurence_Grp3750
                If Mid(tab3750(1, i), 1, 1) <> "1" Or Config.STS_AfficheDiagNiv1 = True Then 'pour ne pas afficher diag de niveau 1 en fonction de config.xml
                    Select Case Mid(tab3750(1, i), 3, 4) 'analyse des codes diagnostics


                        Case "0103", "0200", "0201", "0202", "0205", "0206", "0303", "0209", "0210", "0211", "0216", "0402", "0420" 'Appel à l’assistance pour obtenir la liste des formules
                            ReDim Preserve tab_current_formule_STS(Val(tab3750(3, i)))
                            If tab_current_formule_STS(Val(tab3750(3, i))).selected = False Then 'si formule pas choisie(formule précedente appliquée à tous les actes (case à cocher))


                                If Val(tab3750(3, i)) <> 0 Then
                                    MyMsg_Box.Presentation("Officine !", "STS Assistance: " + Chr(10) + "Prestation " + tab3750(3, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                Else
                                    MyMsg_Box.Presentation("Officine !", "STS Assistance: " + tab3750(2, i), False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                End If

                                current_formule_STS.num_prestation_de_rattachement = tab3750(3, i)
                                STS_Choix_Formule_STS.ShowDialog()
                                If current_formule_STS.selected = False Then
                                    'current_formule_STS.Clear()
                                End If
                                If current_formule_STS.pour_toutes_prestations = True Or Val(tab3750(3, i)) = 0 Then
                                    For j = 1 To Nombre_de_Prestations
                                        ReDim Preserve tab_current_formule_STS(j)
                                        tab_current_formule_STS(j) = current_formule_STS
                                        tab_current_formule_STS(j).num_prestation_de_rattachement = j
                                    Next

                                Else
                                    ReDim Preserve tab_current_formule_STS(Val(tab3750(3, i)))
                                    tab_current_formule_STS(Val(tab3750(3, i))) = current_formule_STS

                                End If

                            End If

                        Case Else
                            If Val(tab3750(3, i)) <> 0 Then
                                MyMsg_Box.Presentation("Officine !", "STS Assistance: " + Chr(10) + "Prestation " + tab3750(3, i) + Chr(10) + tab3750(2, i), False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                            Else
                                MyMsg_Box.Presentation("Officine !", "STS Assistance: " + tab3750(2, i), False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                            End If
                    End Select
                End If
            Next
        Else
            ReDim tab_current_formule_STS(Nombre_de_Prestations)
            Dim i = 1
            While i <= Nombre_de_Prestations
                current_formule_STS.num_prestation_de_rattachement = i
                STS_Choix_Formule_STS.ShowDialog()
                If current_formule_STS.selected = False Then
                    'ReDim tab_current_formule_STS(0)
                    'Exit Sub
                End If
                If current_formule_STS.pour_toutes_prestations = True Then
                    For j = 1 To Nombre_de_Prestations
                        tab_current_formule_STS(j) = current_formule_STS
                        tab_current_formule_STS(j).num_prestation_de_rattachement = j
                    Next
                    i = Nombre_de_Prestations + 1
                Else
                    tab_current_formule_STS(i) = current_formule_STS
                    i = i + 1
                End If

            End While

        End If
    End Sub

    Private Sub STS_TARIFICATIONToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles STS_TARIFICATIONToolStripMenuItem.Click

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If


        If CurrentBenéficiaire.AMC_NumMutuelle = "" And CurrentBenéficiaire.AMC_NumOrganisme = "" Then
            MyMsg_Box.Presentation("Officine !", "Absence de données mutuelle et de données complémentaires", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        '____________________________________________________________________________________________________
        'verification selection prescripteur
        If CurrentBenéficiaire.Prescripteur_ID = "" And CurrentBenéficiaire.G101C8 <> Config.Data_ContaceptifUrgence_NIR Then
            MyMsg_Box.Presentation("Officine !", "PRESCRIPTEUR DOIT ETRE RENSEIGNE", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Me.Enabled = True
            Exit Sub
        End If
        '____________________________________________________________________________________________________
        Choix_Convention_Facturation.ShowDialog()

        CurrentFactureVitale.TP_AMO = True
        CurrentFactureVitale.TP_AMC = True
        '____________________________________________________________________________________________________
        'Trace
        Trace_Reset_compteur()
        FichierTrace = "traces\STS_in.txt"
        '____________________________________________________________________________________________________

        'boolean pour verifier si lignes déja traités
        ReDim Preserve tab_Lignes_Vente(Vente.RowCount - 2)
        For j = 0 To Vente.RowCount - 2
            tab_Lignes_Vente(j).Ligne_traitée = False
        Next
        For i = 0 To Vente.RowCount - 2 'parcours les lignes du tableau(graphique)vente
            If Vente(VenteType.Index, i).Value.ToString = "Vente Directe" Then
                tab_Lignes_Vente(i).Ligne_traitée = True
            End If
        Next

        If CheckBoxModeDegradé.Checked = True Then
            ModeSecur = "5"
        Else
            ModeSecur = "3"
        End If
        ReDim Tab_Valeur_STS(0)
        Dim code_aiguillage_STS As String = Code_STS()
        If code_aiguillage_STS = "False" Then
            MyMsg_Box.Presentation("Officine !", "Erreur determination code routage STS", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        Groupes_STS("Tarification", code_aiguillage_STS)


        STS_Tarification_S("P", NuméroSessionSTS)
        'Visu_API agrement CNDA
        If Visu_API = True Then
            Technique_MAIN.LireSession_Out_VersFichier2(NuméroSessionSTS, Application.StartupPath + "\traces\STS_out.txt")
        End If
    End Sub
#End Region
#Region "module SRT"
    Private Sub SRT()

        'reserve une session pour SRT
        SGD_LibererSession(NuméroSessionSRT)
        SGD_ReserverSession(20000, NuméroSessionSRT)

        MyMsg_Box.Presentation("Officine !", "SRT_InitLIB:" + SRT_InitLIB().ToString, False, "", False, "", True, "OK")
        MyMsg_Box.ShowDialog()
        MyMsg_Box.Presentation("Officine !", "SRT_LireVersion_S:" + SRT_LireVersion_S(NuméroSessionSRT).ToString, False, "", False, "", True, "OK")
        MyMsg_Box.ShowDialog()
        Technique_MAIN.LireSession_Out_VersFichier2(NuméroSessionSRT, Application.StartupPath + "\traces\NuméroSessionSRT.txt")

        SGD_LibererSession(NuméroSessionSRT)
        SGD_ReserverSession(20000, NuméroSessionSRT)
        '____________________________________________________________________________________________________
        Dim NumFacture As Integer = FacturesTableAdapter.SelectMaxNum + 1
        Me.FacturesTableAdapter.Insert1(NumFacture)


        'groupe 1110 à 1450
        groupe1110(NuméroSessionSRT, NumFacture.ToString)
        groupe1120(NuméroSessionSRT)
        groupe1130(NuméroSessionSRT)
        groupe1140(NuméroSessionSRT)
        groupe1160(NuméroSessionSRT)
        groupe1211_1213_1214(NuméroSessionSRT, CurrentBenéficiaire.Prescripteur_ID, DatePrecription.Value)
        'groupe1230(NuméroSessionSRT)
        If groupe1310(NuméroSessionSRT) = False Then
            Me.Enabled = True
            Exit Sub
        End If
        CurrentBenéficiaire.AMC_NumOrganisme = AMC_NumAMC_TextBox.Text
        CurrentBenéficiaire.AMC_NumAdherent = AMC_Numadhérent_TextBox.Text

        If CurrentFactureVitale.TP_AMC = True Then
            groupe1321(NuméroSessionSRT)
            groupe1330(NuméroSessionSRT)
        End If
        groupe1410(NuméroSessionSRT)
        If ModeSecur = "5" Then
            groupe1420(NuméroSessionSRT)
        End If
        groupe1440(NuméroSessionSRT)
        groupe1450(NuméroSessionSRT)
        'groupe 1511-1512-1513
        Select Case NatureAssurance_Button.Text
            Case "MALADIE"
                groupe1511(NuméroSessionSRT)
            Case "MATERNITE"
                groupe1512(NuméroSessionSRT, NatureAssuranceDateTimePicker.Value)
            Case "ACCIDENT DU TRAVAIL"
                If current_AT.selected = False Or groupe1513(NuméroSessionSRT, current_AT.DateAT, current_AT.NumAT, current_AT.CléAT) = False Then
                    Exit Sub
                End If
            Case Else
                MyMsg_Box.Presentation("Officine !", "ERREUR NATURE ASSURANCE", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                SGD_LibererSession(NuméroSessionSRT)
                Exit Sub
        End Select

        'groupe 1610 et (1730 ou 1740)
        Dim Nombre_de_Prestations As Integer = 0
        Dim Total_des_Montants_Facturés As Double = 0
        Dim Total_FSE As Double = 0
        Dim Total_Base_Remboursement As Double = 0
        Dim Total_Remboursable_par_AMO As Double = 0
        Dim Total_Théorique_Remboursable_par_AMC As Double = 0
        Dim Total_Remboursable_par_AMC As Double = 0
        For i = 0 To Vente.RowCount - 2 'parcours les lignes du tableau(graphique)vente
            If tab_Lignes_Vente(i).Ligne_traitée = False Then 'si la ligne du tableau(graphique)vente n'a pas encore étée traitée
                Select Case Vente(VenteType.Index, i).Value.ToString 'determine les lignes pour lesquelles il faut etablire une FSE
                
                    Case "assurance", "ALD"
                        'groupe 1610,1730,1740,1820,1840,1850,
                        Dim TypeNomenclature As String
                        TypeNomenclature = Me.CodePrestationsTableAdapter.SelectTypeNomenclatureByCodeActe(Vente(VenteCodeActe.Index, i).Value.ToString)
                        Select Case TypeNomenclature
                            Case "LPP"
                                groupe1610LPP(NuméroSessionSRT, i, Nombre_de_Prestations, Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, Total_FSE)
                                ReDim CurrentFactureVitale.TabLigneFacture(i).DétailLpp(0)
                                groupe1820(NuméroSessionSRT, Nombre_de_Prestations, Vente(VenteType.Index, i).Value.ToString)
                                'If EntentePréalableBoolean = True Then
                                groupe1840(NuméroSessionSRT, Nombre_de_Prestations) ', i)
                                If Renouvellement_TextBox.Text <> "0" Then
                                    groupe1850(NuméroSessionSRT, Nombre_de_Prestations, Renouvellement_TextBox.Text)
                                End If
                                groupe1730(NuméroSessionSRT, Nombre_de_Prestations, i)
                                tab_Lignes_Vente(i).Ligne_traitée = True
                              
                            Case Else 'Médicaments
                                groupe1610Médicaments(NuméroSessionSRT, i, Nombre_de_Prestations, Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, Total_FSE)
                                groupe1820(NuméroSessionSRT, Nombre_de_Prestations, Vente(VenteType.Index, i).Value.ToString)
                                groupe1840(NuméroSessionSRT, Nombre_de_Prestations) ', i)
                                If Renouvellement_TextBox.Text <> "0" Then
                                    groupe1850(NuméroSessionSRT, Nombre_de_Prestations, Renouvellement_TextBox.Text)
                                End If
                                groupe1740(NuméroSessionSRT, Nombre_de_Prestations, i)
                                tab_Lignes_Vente(i).Ligne_traitée = True

                        End Select
                End Select 'determine les lignes pour lesquelles il faut etablire une FSE
            End If
        Next 'parcours les lignes du tableau(graphique)vente

        'groupe1910
        groupe1910(NuméroSessionSRT, Nombre_de_Prestations, Total_des_Montants_Facturés, Total_Remboursable_par_AMO.ToString, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, Total_Base_Remboursement)

        ' groupe 3500
        SGD_AjouterGroupe_Tracé(NuméroSessionSRT, 3500, Visu_API, FichierTrace)
        SGD_AjouterChamp_Tracé(NuméroSessionSRT, "000", Visu_API, FichierTrace)




        MyMsg_Box.Presentation("Officine !", "SRT_ControleComplet_S:" + SRT_ControleComplet_S(NuméroSessionSRT).ToString, False, "", False, "", True, "OK")
        MyMsg_Box.ShowDialog()

        '____________________________________________________________________________________________________
        'Visu_API agrement CNDA
        If Visu_API = True Then
            Technique_MAIN.LireSession_Out_VersFichier2(NuméroSessionSRT, Application.StartupPath + "\traces\Formater_Facture_out.txt")
        End If



        '_____________________________________________________________________________________________________________________________
        'reinitialise le tableau modifié par SRT
        For j = 0 To tab_Lignes_Vente.Length - 1
            If UCase(Vente(VenteType.Index, j).Value.ToString) = "VENTE DIRECTE" Then
                tab_Lignes_Vente(j).Ligne_traitée = True
            Else
                tab_Lignes_Vente(j).Ligne_traitée = False
            End If
        Next

    End Sub
    Private Sub Button_SRT_ConsulterDonnee_S_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        'reserve une session pour SRT
        SGD_LibererSession(NuméroSessionSRT)
        SGD_ReserverSession(20000, NuméroSessionSRT)

        SGD_AjouterGroupe(NuméroSessionSRT, 3100)
        SGD_AjouterChamp(NuméroSessionSRT, "PH4")


        MyMsg_Box.Presentation("Officine !", "SRT_InitLIB:" + SRT_InitLIB().ToString, False, "", False, "", True, "OK")
        MyMsg_Box.ShowDialog()
        MyMsg_Box.Presentation("Officine !", "SRT_ConsulterDonnee_S" + SRT_ConsulterDonnee_S("CCAM-1", "20111003", NuméroSessionSRT).ToString, False, "", False, "", True, "OK")
        MyMsg_Box.ShowDialog()
        Technique_MAIN.LireSession_Out_VersFichier2(NuméroSessionSRT, Application.StartupPath + "\traces\SRT_ConsulterDonnee_S.txt")

    End Sub
#End Region
#Region "Acquisition CPS"
    'lire CPS
    Private Sub LectureCPSToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LectureCPSToolStripMenuItem.Click

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Lire_CPS()
    End Sub
    Public Sub Lire_CPS()

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If
        Dim erreur As Integer
        CPS_Code.ShowDialog()
        Bandeau_info_bas_show("LECTURE CPS")
        erreur = SIS_LireCartePS(NomRessourcePS, NomRessourceLecteur, CodeCPS, NumeroSessionCPS)
        CodeCPS = ""
        Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
        AfficheErreur(erreur, "Erreur LireCarte PS")


        Occurence_Grp2 = 1
        While SGD_LireGroupeSuivant(NumeroSessionCPS, 2, Occurence_Grp2, 2, 1) = 0
            Occurence_Grp2 = Occurence_Grp2 + 1
        End While
        If Occurence_Grp2 > 1 Then
            ValeurChamp = "@@"
            TailleMax = 2
            While ValeurChamp <> "50" And Occurence_Grp2 <> 0
                Dim var As Integer = 0
                MyInptBox.my_showdialog("Choix situation PS 1 à " + Occurence_Grp2.ToString, VarType(var), 2, "")
                Occurence_Grp2 = MyInptBox.result
                SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 14, ValeurChamp, TailleMax)
                If ValeurChamp <> "50" Then
                    MyMsg_Box.Presentation("Officine !", "Situation Pharmacien Obligatoire", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                End If
            End While

        End If
        If Config.Activer_Session_Remplacement = True Then
            Dim Num_id As String = "123456789012345678901234567890"
            TailleMax = 30
            SGD_LireChamp(NumeroSessionCPS, 1, 1, 3, Num_id, TailleMax)
            Num_id = Mid(Num_id, 1, TailleMax)
            Dim Cle_Num_id As String = "1"
            TailleMax = 1
            SGD_LireChamp(NumeroSessionCPS, 1, 1, 4, Cle_Num_id, TailleMax)
            Cle_Num_id = Mid(Cle_Num_id, 1, TailleMax)
            If Num_id <> Config.Remplacant_Num_Id_Nat Or Cle_Num_id <> Config.Remplacant_Cle_Num_Id_Nat Then
                MyMsg_Box.Presentation("Officine !", "La carte PS n'est pas la carte déclarée pour le remplacement.", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                SGD_LibererSession(NumeroSessionCPS)
            End If

            Dim Num_id_fact_rempl = "12345678"
            TailleMax = 8
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 9, Num_id_fact_rempl, TailleMax)
            Num_id_fact_rempl = Mid(Num_id_fact_rempl, 1, TailleMax)
            Dim Cle_Num_id_fact_rempl = "@"
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 10, Cle_Num_id_fact_rempl, 1)
            If Config.Remplacant_Num_Id_Facturation <> Num_id_fact_rempl Or Config.Remplacant_Cle_Num_Id_Facturation <> Cle_Num_id_fact_rempl Then
                MyMsg_Box.Presentation("Officine !", "Le numéro de facturation inscrit sur la carte PS est différent du numéro de facturation mémorisé par le PS titulaire", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                SGD_LibererSession(NumeroSessionCPS)
            End If

            ValeurChamp = "@"
            TailleMax = 1
            SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 1, ValeurChamp, TailleMax)
            Dim array() As Byte = System.Text.Encoding.ASCII.GetBytes(ValeurChamp)
            If Val(array(0)) <> Config.Remplacant_Num_log_situ_fact Then
                MyMsg_Box.Presentation("Officine !", "La situation de facturation choisie est différente du numéro de la situation de facturation mémorisée par le PS titulaire", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                SGD_LibererSession(NumeroSessionCPS)
            End If

        Else
            'informe si une carte remplaçant est lue est que onfig.Activer_Session_Remplacement = False 
            Dim Num_id_rempl As String = "123456789012345678901234567890"
            TailleMax = 30
            If SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 11, Num_id_rempl, TailleMax) = 0 Then
                Num_id_rempl = Mid(Num_id_rempl, 1, TailleMax)
                If Num_id_rempl <> "" Then
                    MyMsg_Box.Presentation("Officine !", "CPS Remplaçant détéctée, Pas de session de remplaçant activée", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                End If
            End If
        End If



        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        TailleMax = 30
        SGD_LireChamp(NumeroSessionCPS, 1, 1, 3, ValeurChamp, TailleMax)


        'controle licence
        ValeurChamp = "@@@@@@@@"
        TailleMax = 8
        SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 9, ValeurChamp, TailleMax)
        If (Licence_Controle.Verify_licence(ValeurChamp)) = False Then
            SGD_LibererSession(NumeroSessionCPS)
        End If


    End Sub
#End Region
#Region "Acquisition Droits Vitale"
    'date à prendre en compte pour les droits AMO (dateexecution pour RSI(03), date prescription pour les autres)
    Public Function Date_Droits_AMO() As Date

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        DateExecution.Enabled = False
        DatePrecription.Enabled = False
        DateFacture.Enabled = False


        If CurrentBenéficiaire.G101C10 = "03" Then 'Or CurrentFactureVitale.TOP_CMU = True Then
            Return DateExecution.Value
        Else
            Return DatePrecription.Value
        End If
    End Function

    Private Function Date_Droits_AMC2() As Date

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        '4.2.1.3.1.3 Détermination de la date de référence pour la prise en compte de la part complémentaire(97)
        'T1 ter- Date de référence pour déterminer le taux de remboursement des frais pharmaceutiques, de la LPP et ou d’analyse de biologie médicale.(690)
        'T3.1 ter- Date à prendre en compte pour déterminer le taux de remboursement des frais pharmaceutiques, de la LPP et ou d'analyses de biologie médicale (RSI) (691)
        Dim Date_Droits_AMC As Date
        If CurrentFactureVitale.Mode_Gestion = "RO" Or CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            If CurrentBenéficiaire.G101C10 = "03" Then
                Date_Droits_AMC = DateExecution.Value
            Else
                Date_Droits_AMC = DatePrecription.Value
            End If
        Else
            Date_Droits_AMC = DateExecution.Value
        End If

        If CurrentFactureVitale.TOP_CMU = True Then
            Date_Droits_AMC = DateExecution.Value
        End If

        If Date_part_complémentaire_Menu.Checked = True Then
            If Date_part_complémentaire_Item_Date_Éxécution.Checked = True Then
                Date_Droits_AMC = DateExecution.Value
            ElseIf Date_part_complémentaire_Item_Date_Facturation.Checked = True Then
                Date_Droits_AMC = DateFacture.Value
            ElseIf Date_part_complémentaire_Item_Date_Prescription.Checked = True Then
                Date_Droits_AMC = DatePrecription.Value
            End If
        End If
        Return Date_Droits_AMC

    End Function

    'Lecture Vitale
    Private Sub LECTURE_VITALE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LECTURE_VITALE.Click
        CurrentBeneficiaireRichTextBox.Clear()
        DP_LinkLabel.Visible = True

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        ''Assuré_détail_Button.Visible = False
        'Assuré_détail_Button.BackgroundImage = My.Resources.logo_pharmacieplus_130m
        'Assuré_détail_Button.Tag = "A"
         Bandeau_info_bas_show("LECTURE CARTE VITALE")

        Label_date_droits_amo.Text = "  droit AMO:" + Format(Date_Droits_AMO(), "dd/MM/yyyy")
        Me.Enabled = False
        'DatePrecription.Enabled = False
        CurrentBeneficiaireRichTextBox.Clear()
        CurrentFactureVitale.Mode_Gestion = ""
        ComboBoxLECTURE_VITALE.Items.Clear()
        ClearGroupBox(AssuréGroupBox, True)
        ClearTabPage(Dossier_Patient_AMC_TabPage, False)
        PrescripteurMyCombobox.Text = ""
        TextBox_Prescripteur_NumID.Clear()
        TextBox_Prescripteur_NumRPPS.Clear()
        Prescripteur_Spécialité_TextBox.Clear()
        Médecin_Traitant_Label.Text = ""
        CheckBoxModeDegradé.Checked = False

        AMC_Piècejustificative_ComboBox.Items.Add("carte Vitale (4)")

        SGD_LibererSession(NumeroSessionVitale)

        If SGD_ReserverSession(0, NumeroSessionVitale) <> 0 Then
            MyMsg_Box.Presentation("Officine !", "ERREUR POUR LA RESERVATION DE SESSION VITALE", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
            Exit Sub
        End If
        Warning_Lecture_Vitale = SIS_LireDroitsVitale(NomRessourcePS, NomRessourceLecteur, "", Format(DatePrecription.Value, "yyyyMMdd"), NumeroSessionVitale)



        Label_date_Lecture_Droits_Vitale.Text = "lect Vitale:" + Format(DatePrecription.Value, "dd/MM/yyyy")

        If Warning_Lecture_Vitale <> 0 And Warning_Lecture_Vitale <> 61441 Then
            Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
            AfficheErreur(Warning_Lecture_Vitale)
            Me.Enabled = True
            Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
            Exit Sub
        ElseIf Warning_Lecture_Vitale = 61441 Then 'absence CPS
            AfficheErreur(Warning_Lecture_Vitale)
            Me.Enabled = True
        End If

        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Dim result As UInt32
        'DONNEES ASSURE
        'Type de carte Vitale

        TailleMax = 1
        ValeurChamp = "@"
        result = SGD_LireChamp(NumeroSessionVitale, 101, 1, 1, ValeurChamp, TailleMax)
        AfficheErreur(result)
        If result = 0 Then
            CurrentBenéficiaire.G101C1 = Mid(ValeurChamp, 1, TailleMax)
            Select Case ValeurChamp
                Case "D"
                    CurrentBeneficiaireRichTextBox.AppendText("Carte Vitale de démonstration" + Chr(10))
                Case "T"
                    CurrentBeneficiaireRichTextBox.AppendText("Carte Vitale de test" + Chr(10))
            End Select
        End If
        'N° de série de la carte Vitale
        TailleMax = 20
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@"
        result = SGD_LireChamp(NumeroSessionVitale, 101, 1, 2, ValeurChamp, TailleMax)
        AfficheErreur(result)
        If result = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G101C2 = Mid(ValeurChamp, 1, TailleMax)
            CurrentBeneficiaireRichTextBox.AppendText("N° série carte:" + ValeurChamp + Chr(10))
        End If

        If LOI.Carte_en_opposition(CurrentBenéficiaire.G101C2, CurrentBenéficiaire.G101C1) = True Then
            MyMsg_Box.Presentation("Officine !", "CARTE VITALE EN OPPOSITION", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Me.Enabled = True
            Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
            Exit Sub
        End If

        'Date de fin de validité carte Vitale
        TailleMax = 12
        ValeurChamp = "@@@@@@@@@@@@"
        result = SGD_LireChamp(NumeroSessionVitale, 101, 1, 3, ValeurChamp, TailleMax)
        AfficheErreur(result)
        If result = 0 And TailleMax <> 0 Then
            CurrentBenéficiaire.G101C3 = Mid(ValeurChamp, 1, TailleMax)
            If Val(ValeurChamp) < Val(Format(Now, "yyyyMMdd") + "0000") And Val(ValeurChamp) <> 0 Then
                MyMsg_Box.Presentation("Officine !", "La Date de Validité de la carte Vitale est dépassée", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
            End If
            CurrentBeneficiaireRichTextBox.AppendText("Date fin validité carte:" + Mid(ValeurChamp, 7, 2) + "/" + Mid(ValeurChamp, 5, 2) + "/" + Mid(ValeurChamp, 1, 4) + Chr(10))
        End If

        'Type d’identification du porteur de la carte
        TailleMax = 1
        ValeurChamp = "@"
        result = SGD_LireChamp(NumeroSessionVitale, 101, 1, 7, ValeurChamp, TailleMax)
        AfficheErreur(result)
        If result = 0 Then
            CurrentBenéficiaire.G101C7 = Mid(ValeurChamp, 1, TailleMax)
            Select Case ValeurChamp
                Case "A"
                    CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Le n° national d'immatriculation est celui de l'assuré" + Chr(10))
                Case "B"
                    CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Le n° national d'immatriculation est celui de l'ayant-droit" + Chr(10))
            End Select
        End If

        'NIR
        TailleMax = 13
        ValeurChamp = "@@@@@@@@@@@@@"
        result = SGD_LireChamp(NumeroSessionVitale, 101, 1, 8, ValeurChamp, TailleMax)
        AfficheErreur(result)
        If result = 0 Then
            CurrentBenéficiaire.G101C8 = Mid(ValeurChamp, 1, TailleMax)
            NirTextBox.Text = Mid(ValeurChamp, 1, TailleMax)
        End If

        TailleMax = 2
        ValeurChamp = "@@"
        result = SGD_LireChamp(NumeroSessionVitale, 101, 1, 9, ValeurChamp, TailleMax)
        AfficheErreur(result)
        If result = 0 Then
            CurrentBenéficiaire.G101C9 = Mid(ValeurChamp, 1, TailleMax)
            CléduNIRTextBox.Text = Mid(ValeurChamp, 1, TailleMax)
        End If

        'Code régime
        Dim CodeRégime As String = "@@"
        TailleMax = 2
        result = SGD_LireChamp(NumeroSessionVitale, 101, 1, 10, CodeRégime, TailleMax)
        AfficheErreur(result)
        If result = 0 Then
            If CodeRégime = "09" Then
                MyMsg_Box.Presentation("Officine !", "Les spécificités du régime 09 (Banque de France) ont disparues (bénéficiaires rattachés au régime des fonctionnaires)." + Chr(10) + "disparition de ce régime et interdiction de facturer.", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Me.Enabled = True
                Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
                Exit Sub
            ElseIf CodeRégime = "12" Then
                MyMsg_Box.Presentation("Officine !", "Suppression du régime RSAM-CCIP (12) au 01/01/2013.", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Me.Enabled = True
                Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
                Exit Sub
            End If
            CurrentBenéficiaire.G101C10 = CodeRégime
            RégimeTextBox.Text = TraductionCodeRégime(CodeRégime)
        End If





        'Caisse gestionnaire
        Dim CaisseGestionnaire As String = "@@@"
        TailleMax = 3
        result = SGD_LireChamp(NumeroSessionVitale, 101, 1, 11, CaisseGestionnaire, TailleMax)
        AfficheErreur(result)
        CurrentBenéficiaire.G101C11 = CaisseGestionnaire


        'Centre gestionnaire
        Dim CentreGestionnaire As String = "@@@@"
        TailleMax = 4
        result = SGD_LireChamp(NumeroSessionVitale, 101, 1, 12, CentreGestionnaire, TailleMax)
        AfficheErreur(result)
        CurrentBenéficiaire.G101C12 = CentreGestionnaire

        '___________________________________________________________________________________________________________________________________________
        'recherche de l'intitulé organislme destinataire dans taborgdest
        Select Case Me.AmoTableAdapter1.SelectCount(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, CurrentBenéficiaire.G101C12)
            Case 0
                Select Case Me.AmoTableAdapter1.SelectCount(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, "0000")
                    Case 0
                        MyMsg_Box.Presentation("Officine !", "AUCUN ENREGISTREMENT POUR:" + Chr(10) + "Code Régime:" + CurrentBenéficiaire.G101C10 + Chr(10) + "Caisse Gestionnaire:" + CurrentBenéficiaire.G101C11 + Chr(10) + "Centre Gestionnaire:" + CurrentBenéficiaire.G101C12, False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                    Case 1
                        Dim Libellé As String
                        Libellé = Me.AmoTableAdapter1.SelectLibellé(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, "0000")
                        CaisseTextBox.Text = Libellé + " " + CurrentBenéficiaire.G101C10 + "  " + CurrentBenéficiaire.G101C11 + "  " + CurrentBenéficiaire.G101C12
                    Case Else
                        MyMsg_Box.Presentation("Officine !", "PLUSIEURS ENREGISTREMENTS POUR:" + Chr(10) + "Code Régime:" + CurrentBenéficiaire.G101C10 + Chr(10) + "Caisse Gestionnaire:" + CurrentBenéficiaire.G101C11 + Chr(10) + "Centre Gestionnaire:" + CurrentBenéficiaire.G101C12, False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                End Select
            Case 1
                Dim Libellé As String
                Libellé = Me.AmoTableAdapter1.SelectLibellé(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, CurrentBenéficiaire.G101C12)
                CaisseTextBox.Text = Libellé + " " + CurrentBenéficiaire.G101C10 + "  " + CurrentBenéficiaire.G101C11 + "  " + CurrentBenéficiaire.G101C12
            Case Else
                MyMsg_Box.Presentation("Officine !", "PLUSIEURS ENREGISTREMENTS POUR:" + Chr(10) + "Code Régime:" + CurrentBenéficiaire.G101C10 + Chr(10) + "Caisse Gestionnaire:" + CurrentBenéficiaire.G101C11 + Chr(10) + "Centre Gestionnaire:" + CurrentBenéficiaire.G101C12, False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
        End Select
        '___________________________________________________________________________________________________________________________________________


        'Code gestion
        TailleMax = 2
        ValeurChamp = "@@"
        result = SGD_LireChamp(NumeroSessionVitale, 101, 1, 13, ValeurChamp, TailleMax)
        AfficheErreur(result)
        If result = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G101C13 = Mid(ValeurChamp, 1, TailleMax)
            ' CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + TraductionG101C13(ValeurChamp))
        End If
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        'SERVICE AMO FAMILLE
        TailleMax = 2
        ValeurChamp = "@@"
        'Code service AMO Famille
        result = SGD_LireChamp(NumeroSessionVitale, 102, 1, 1, ValeurChamp, TailleMax)
        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
        CurrentBenéficiaire.G102C1 = Mid(ValeurChamp, 1, TailleMax)
        If result = 0 And ValeurChamp <> "0" And ValeurChamp <> "00" Then
            CurrentBeneficiaireRichTextBox.AppendText("______________________________________" + Chr(10) + "Service AMO Famille" + Chr(10) + "Code service: " + ValeurChamp + Chr(10))
            'Date de début du service AMO Famille
            TailleMax = 12
            ValeurChamp = "@@@@@@@@@@@@"
            SGD_LireChamp(NumeroSessionVitale, 102, 1, 2, ValeurChamp, TailleMax)
            CurrentBenéficiaire.G102C2 = Mid(ValeurChamp, 1, TailleMax)
            If Mid(ValeurChamp, 1, TailleMax) <> "" Then
                CurrentBeneficiaireRichTextBox.AppendText("Date de début du service AMO Famille:" + Mid(ValeurChamp, 7, 2) + "/" + Mid(ValeurChamp, 5, 2) + "/" + Mid(ValeurChamp, 1, 4) + Chr(10))
            End If
            'Date de fin du service AMO Famille
            TailleMax = 12
            ValeurChamp = "@@@@@@@@@@@@"
            SGD_LireChamp(NumeroSessionVitale, 102, 1, 3, ValeurChamp, TailleMax)
            CurrentBenéficiaire.G102C3 = Mid(ValeurChamp, 1, TailleMax)
            If Mid(ValeurChamp, 1, TailleMax) <> "" Then
                CurrentBeneficiaireRichTextBox.AppendText("Date de fin du service AMO Famille:" + Mid(ValeurChamp, 7, 2) + "/" + Mid(ValeurChamp, 5, 2) + "/" + Mid(ValeurChamp, 1, 4) + Chr(10))
            End If
            CurrentBeneficiaireRichTextBox.AppendText("______________________________________" + Chr(10))
        End If

        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        'DONNEES ACCIDENT DU TRAVAIL
        TailleMax = 9
        ValeurChamp = "@@@@@@@@@"
        'Organisme gestionnaire du risque AT
        result = SGD_LireChamp(NumeroSessionVitale, 103, 1, 1, ValeurChamp, TailleMax)
        If result = 0 Then
            CurrentBenéficiaire.G103C1 = Mid(ValeurChamp, 1, TailleMax)
            CurrentBeneficiaireRichTextBox.AppendText("______________________________________" + Chr(10) + "DONNEES ACCIDENT DU TRAVAIL:" + Chr(10) + "Organisme gestionnaire du risque AT:" + ValeurChamp + "  |  ")
            'Code AT Budget Global des Hôpitaux
            TailleMax = 2
            ValeurChamp = "@@"
            SGD_LireChamp(NumeroSessionVitale, 103, 1, 2, ValeurChamp, TailleMax)
            CurrentBenéficiaire.G103C2 = Mid(ValeurChamp, 1, TailleMax)
            CurrentBeneficiaireRichTextBox.AppendText("Code AT Budget Global des Hôpitaux:" + ValeurChamp + Chr(10))
            'Identifiant AT
            TailleMax = 9
            ValeurChamp = "@@@@@@@@@"
            SGD_LireChamp(NumeroSessionVitale, 103, 1, 3, ValeurChamp, TailleMax)
            CurrentBenéficiaire.G103C3 = Mid(ValeurChamp, 1, TailleMax)
            CurrentBeneficiaireRichTextBox.AppendText("Identifiant AT:" + ValeurChamp + Chr(10))
            'Organisme gestionnaire AT1
            TailleMax = 9
            ValeurChamp = "@@@@@@@@@"
            SGD_LireChamp(NumeroSessionVitale, 103, 1, 4, ValeurChamp, TailleMax)
            CurrentBenéficiaire.G103C4 = Mid(ValeurChamp, 1, TailleMax)
            CurrentBeneficiaireRichTextBox.AppendText("Organisme gestionnaire AT1:" + ValeurChamp + Chr(10))
            'Code AT1 BGDH
            TailleMax = 2
            ValeurChamp = "@@"
            SGD_LireChamp(NumeroSessionVitale, 103, 1, 5, ValeurChamp, TailleMax)
            CurrentBenéficiaire.G103C5 = Mid(ValeurChamp, 1, TailleMax)
            CurrentBeneficiaireRichTextBox.AppendText("Code AT1 BGDH:" + ValeurChamp + Chr(10))
            'Identifiant AT1
            TailleMax = 9
            ValeurChamp = "@@@@@@@@@"
            SGD_LireChamp(NumeroSessionVitale, 103, 1, 6, ValeurChamp, TailleMax)
            CurrentBenéficiaire.G103C6 = Mid(ValeurChamp, 1, TailleMax)
            CurrentBeneficiaireRichTextBox.AppendText("Identifiant AT1:" + ValeurChamp + Chr(10))
            'Organisme gestionnaire AT2
            TailleMax = 9
            ValeurChamp = "@@@@@@@@@"
            SGD_LireChamp(NumeroSessionVitale, 103, 1, 7, ValeurChamp, TailleMax)
            CurrentBenéficiaire.G103C7 = Mid(ValeurChamp, 1, TailleMax)
            CurrentBeneficiaireRichTextBox.AppendText("Organisme gestionnaire AT2:" + ValeurChamp + Chr(10))
            'Code AT2 BGDH
            TailleMax = 2
            ValeurChamp = "@@"
            SGD_LireChamp(NumeroSessionVitale, 103, 1, 8, ValeurChamp, TailleMax)
            CurrentBenéficiaire.G103C8 = Mid(ValeurChamp, 1, TailleMax)
            CurrentBeneficiaireRichTextBox.AppendText("Code AT2 BGDH:" + ValeurChamp + Chr(10))
            'Identifiant AT2
            TailleMax = 9
            ValeurChamp = "@@@@@@@@@"
            SGD_LireChamp(NumeroSessionVitale, 103, 1, 9, ValeurChamp, TailleMax)
            CurrentBenéficiaire.G103C9 = Mid(ValeurChamp, 1, TailleMax)
            CurrentBeneficiaireRichTextBox.AppendText("Identifiant AT2:" + ValeurChamp + Chr(10))
            CurrentBeneficiaireRichTextBox.AppendText("______________________________________" + Chr(10))
        End If

        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        'DONNEES BENEFICIAIRE
        ComboBoxLECTURE_VITALE.Items.Clear()
        Dim OccurrenceGroupe = 1
        Dim comboboxitem As String = ""
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        TailleMax = 32
        While SGD_LireChamp(NumeroSessionVitale, 104, OccurrenceGroupe, 1, ValeurChamp, TailleMax) = 0

            If TailleMax <> 0 Then comboboxitem = Mid(ValeurChamp, 1, TailleMax)

            'ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
            'TailleMax = 32
            'SGD_LireChamp(NumeroSessionVitale, 104, OccurrenceGroupe, 2, ValeurChamp, TailleMax)
            'If TailleMax <> 0 Then comboboxitem = comboboxitem + " " + Mid(ValeurChamp, 1, TailleMax)

            ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
            TailleMax = 32
            SGD_LireChamp(NumeroSessionVitale, 104, OccurrenceGroupe, 3, ValeurChamp, TailleMax)
            If TailleMax <> 0 Then comboboxitem = comboboxitem + " " + Mid(ValeurChamp, 1, TailleMax)

            ComboBoxLECTURE_VITALE.Items.Add(comboboxitem)

            ValeurChamp = "@@"
            TailleMax = 2
            SGD_LireChamp(NumeroSessionVitale, 104, OccurrenceGroupe, 14, ValeurChamp, TailleMax)
            If Val(ValeurChamp) = 0 Then
                CurrentBenéficiaire.Assuré = comboboxitem
            End If

            ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
            TailleMax = 32
            OccurrenceGroupe = OccurrenceGroupe + 1

        End While

        'ComboBoxLECTURE_VITALE.SelectedIndex = 0

        ModeSecur = "3"
        'CheckBoxDRE.Enabled = True
        'CheckBoxFSE.Enabled = True
        CheckBoxModeDegradé.Enabled = True
        CheckBoxModeDegradé.Checked = False

        'ventetype_index_defaut = 0
        ventetype_defaut = "assurance"
        NatureAssurance_Button.Text = "MALADIE"
        '-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        'Lignes pour selcetion du bénéficiaire avec la combobox (old version avant la programation de Choix_bénéficiaire_CV.vb
        'ComboBoxLECTURE_VITALE.Focus()
        'ComboBoxLECTURE_VITALE.Select()
        '-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

        Vente.Visible = False
        'Choix_bénéficiaire_CV.Location = New Point(15, 15)

        Choix_bénéficiaire_CV.ShowDialog()
        Me.Enabled = True
        Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
        'Recup_Lgpi()

    End Sub
    Public Sub Recup_Lgpi()
        Dim recup_lgpi_AMC As New Recup_Lgpi_AMC
        If AMC_NumAMC_TextBox.Text = "" And MUT_NumMutuelle_TextBox.Text = "" And CurrentBenéficiaire.G101C8 <> "" Then
            If My.Computer.FileSystem.DirectoryExists(Application.StartupPath & "\lgpi data") Then
                If My.Computer.FileSystem.FileExists(Application.StartupPath & "\lgpi data\client_amc_data.csv") Then
                    recup_lgpi_AMC.ShowDialog()
                    If AMC_NumAMC_TextBox.Text <> "" Then
                        AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
                        MyMsg_Box.Presentation("Officine !", "Choisir couverture equivalente à:" & Chr(10) & AMC_Couverture_TextBox.Text, False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        Button_AMC_choix_type_contrat_Click(Nothing, Nothing)
                    End If
                End If
            End If
        End If

        If Vitale_adresse_TextBox.Text = "" Then
            If My.Computer.FileSystem.DirectoryExists(Application.StartupPath & "\lgpi data") Then
                If My.Computer.FileSystem.FileExists(Application.StartupPath & "\lgpi data\client_adresse.csv") Then
                    Dim sr As New StreamReader(Application.StartupPath & "\lgpi data\client_adresse.csv", System.Text.Encoding.UTF7)
                    Dim line = sr.ReadLine
                    While Not line Is Nothing And Vitale_adresse_TextBox.Text = ""
                        Dim nom = UCase(CSV_Champ(line, 1))
                        Dim prénom = UCase(CSV_Champ(line, 2))
                        If InStr(ComboBoxLECTURE_VITALE.Text, nom) <> 0 And InStr(ComboBoxLECTURE_VITALE.Text, prénom) <> 0 Then
                            Dim adresse = CSV_Champ(line, 3) & " " & CSV_Champ(line, 4) & " " & CSV_Champ(line, 5) & " " & CSV_Champ(line, 6)
                            MyMsg_Box.Presentation("Officine ?", "confirmez adresse:" & vbCrLf & adresse, True, "OUI", True, "NON", False, "")
                            If MyMsg_Box.ShowDialog() = MsgBoxResult.Yes Then
                                Vitale_adresse_TextBox.Text = adresse
                                If CSV_Champ(line, 7) <> "" Then
                                    Vitale_e_mail_TextBox.Text = CSV_Champ(line, 7)
                                End If
                                If CSV_Champ(line, 8) <> "" Then
                                    Vitale_téléphone_TextBox.Text = CSV_Champ(line, 8)
                                End If
                                If CSV_Champ(line, 9) <> "" Then
                                    If Vitale_téléphone_TextBox.Text = "" Then
                                        Vitale_téléphone_TextBox.Text = CSV_Champ(line, 9)
                                    Else
                                        Vitale_téléphone_TextBox.Text = Vitale_téléphone_TextBox.Text & " / " & CSV_Champ(line, 9)
                                    End If
                                End If
                                If CSV_Champ(line, 10) <> "" Then
                                    If Vitale_téléphone_TextBox.Text = "" Then
                                        Vitale_téléphone_TextBox.Text = CSV_Champ(line, 10)
                                    Else
                                        Vitale_téléphone_TextBox.Text = Vitale_téléphone_TextBox.Text & " / " & CSV_Champ(line, 10)
                                    End If
                                End If
                            End If
                        End If
                        line = sr.ReadLine
                    End While

                End If
            End If
        End If

    End Sub


    'ComboBoxLECTURE_VITALE_SelectedIndexChanged
    Public Sub ComboBoxLECTURE_VITALE_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBoxLECTURE_VITALE.SelectedIndexChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If


        DP_Création_déja_proposée = False
        If Not DP_list_Alrt_Prdt_deja_diffusées Is Nothing Then
            DP_list_Alrt_Prdt_deja_diffusées.Clear()
        End If



        CurrentBenéficiaire.CMU_justificatif_papier_droits_CMU_C_délivré_par_organisme_obligatoire = Nothing
        CurrentBenéficiaire.CMU__assimilation_mode_gestion_unique = Nothing


        ReDim tab_current_formule_STS(0)
        current_formule_STS.Clear()
        CurrentConvention.clear()


        PrescripteurMyCombobox.Text = ""
        ReDim CurrentBenéficiaire.G105C1(0)
        ReDim CurrentBenéficiaire.G105C2(0)
        ReDim CurrentBenéficiaire.G106C1(0)
        ReDim CurrentBenéficiaire.G106C2(0)
        ReDim CurrentBenéficiaire.G106C3(0)
        ReDim CurrentBenéficiaire.G106C4(0)
        CurrentBenéficiaire.G107C1 = ""
        CurrentBenéficiaire.G107C2 = ""
        CurrentBenéficiaire.G107C3 = ""
        CurrentBenéficiaire.G107C4 = ""
        CurrentBenéficiaire.G107C5 = ""
        CurrentBenéficiaire.G107C6 = ""
        ReDim CurrentBenéficiaire.G108C1(0)
        ReDim CurrentBenéficiaire.G108C2(0)
        CurrentBenéficiaire.G109C1 = ""
        CurrentBenéficiaire.G109C2 = ""
        CurrentBenéficiaire.G109C3 = ""
        CurrentBenéficiaire.G109C4 = ""
        CurrentBenéficiaire.G109C5 = ""
        CurrentBenéficiaire.G109C6 = ""
        CurrentBenéficiaire.G109C7 = ""
        CurrentBenéficiaire.G109C8 = ""
        CurrentBenéficiaire.G109C9 = ""
        CurrentBenéficiaire.G109C10 = ""
        CurrentBenéficiaire.G109C11 = ""
        CurrentBenéficiaire.G109C12 = ""
        CurrentBenéficiaire.AMC_DateDébut = ""
        AMC_DateDebut_MaskedTextBox.Clear()
        CurrentBenéficiaire.AMC_DateFin = ""
        AMC_DateFin_MaskedTextBox.Clear()
        CurrentBenéficiaire.AMC_NumAdherent = ""
        AMC_Numadhérent_TextBox.Clear()
        CurrentBenéficiaire.AMC_NumOrganisme = ""
        AMC_NumAMC_TextBox.Clear()
        CurrentBenéficiaire.AMC_NumMutuelle = ""
        MUT_NumMutuelle_TextBox.Text = ""
        CurrentBenéficiaire.AMC_Piecejustificative = ""
        AMC_Piècejustificative_ComboBox.Text = ""
        If assuré_presente_attestation_cmu_gestion_séparée = False Then
            CurrentBenéficiaire.AMC_TypeContrat = ""
            AMC_Couverture_TextBox.Text = ""
        End If
        AMC_Couverture_TextBox.Clear()
        CurrentBenéficiaire.Prescripteur_ID = ""
        CurrentBenéficiaire.Prescripteur_CodeSpécialité = ""
        AMC_Indicateurdetrairement_TextBox.Clear()
        CurrentBenéficiaire.AMC_Indicateurdetrairement = ""


        'Nom usuel du bénéficiaire
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        TailleMax = 27
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 1, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C1 = ValeurChamp
        End If
        'Nom de famille du bénéficiaire
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        TailleMax = 27
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 2, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C2 = ValeurChamp
        End If
        'Prénom du bénéficiaire
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        TailleMax = 27
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 3, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C3 = ValeurChamp
        End If
        'Adresse
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        TailleMax = 32
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 4, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C4 = ValeurChamp
            ' CurrentBeneficiaireRichTextBox.AppendText("Adresse:" + ValeurChamp + "  ")
        End If
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        TailleMax = 32
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 5, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C5 = ValeurChamp
            ' CurrentBeneficiaireRichTextBox.AppendText(ValeurChamp + "  ")
        End If
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        TailleMax = 32
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 6, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C6 = ValeurChamp
            ' CurrentBeneficiaireRichTextBox.AppendText(ValeurChamp + "  ")
        End If
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        TailleMax = 32
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 7, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C7 = ValeurChamp
            ' CurrentBeneficiaireRichTextBox.AppendText(ValeurChamp + "  ")
        End If
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        TailleMax = 32
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 8, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C8 = ValeurChamp
            ' CurrentBeneficiaireRichTextBox.AppendText(ValeurChamp)
        End If

        'NIR certifié
        ValeurChamp = "@@@@@@@@@@@@@"
        TailleMax = 13
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 9, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C9 = ValeurChamp
            ' CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "NIR certifié:" + ValeurChamp)
        End If

        'Clé du NIR certifié
        ValeurChamp = "@@"
        TailleMax = 2
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 10, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C10 = ValeurChamp
            ' CurrentBeneficiaireRichTextBox.AppendText("  " + ValeurChamp)
        End If

        'Date de certification du NIR
        TailleMax = 12
        ValeurChamp = "@@@@@@@@@@@@"
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 11, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C11 = ValeurChamp
            ' CurrentBeneficiaireRichTextBox.AppendText("  |  Date de certification du NIR:" + Mid(ValeurChamp, 7, 2) + "/" + Mid(ValeurChamp, 5, 2) + "/" + Mid(ValeurChamp, 1, 4))
        End If

        'Date de naissance du bénéficiaire
        TailleMax = 12
        ValeurChamp = "@@@@@@@@@@@@"
        SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 12, ValeurChamp, TailleMax)
        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
        CurrentBenéficiaire.G104C12 = ValeurChamp
        If Mid(CurrentBenéficiaire.G104C12, 1, 2) <> "19" And Mid(CurrentBenéficiaire.G104C12, 1, 2) <> "20" Then
            Dim sieclenaissance = InputBox("Siècle de naissance erroné" + Chr(10) + "Veuillez saisir les deux premier chiffres de l'année de naissance", "", Mid(CurrentBenéficiaire.G104C12, 1, 2), 10, 10)
            While sieclenaissance <> "19" And sieclenaissance <> "20"
                sieclenaissance = InputBox("Siècle de naissance erroné" + Chr(10) + "Veuillez saisir les deux premier chiffres de l'année de naissance", "", sieclenaissance, 10, 10)
            End While
            CurrentBenéficiaire.G104C12 = sieclenaissance + Mid(CurrentBenéficiaire.G104C12, 3)
        End If

        'Rang de naissance
        TailleMax = 1
        ValeurChamp = "@"
        SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 13, ValeurChamp, TailleMax)
        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
        CurrentBenéficiaire.G104C13 = ValeurChamp

        'Qualité
        TailleMax = 2
        ValeurChamp = "@@"
        SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 14, ValeurChamp, TailleMax)
        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
        CurrentBenéficiaire.G104C14 = ValeurChamp

        'Code service AMO bénéficiaire
        TailleMax = 2
        ValeurChamp = "@@"
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 15, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C15 = ValeurChamp
        End If

        'Date de début du service AMO bénéficiaire
        TailleMax = 12
        ValeurChamp = "@@@@@@@@@@@@"
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 16, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C16 = ValeurChamp
        End If

        'Date de fin du service AMO bénéficiaire
        TailleMax = 12
        ValeurChamp = "@@@@@@@@@@@@"
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 17, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C17 = ValeurChamp
        End If

        'Données RUF AMO bénéficiaire
        TailleMax = 30
        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
        If SGD_LireChamp(NumeroSessionVitale, 104, ComboBoxLECTURE_VITALE.SelectedIndex + 1, 18, ValeurChamp, TailleMax) = 0 Then
            ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
            CurrentBenéficiaire.G104C18 = ValeurChamp
        End If


        'Lecture des groupes suivants (105 à 111) sortie sur nouveau groupe 104 ou fin de session atteinte
        Dim IdGroupeCourant As UInt16 = 104
        Dim OccurrenceGroupeCourant As UInt16 = ComboBoxLECTURE_VITALE.SelectedIndex + 1

        Dim G105_exists As Boolean = False 'en cas de droits amo perimés en carte, la fonction "lect droits viale" ne remonte pas de groupe 105, test fonc 1.71, 1.72
        Do
            Dim IdGroupeSuivant As UInt16
            Dim OccurrenceGroupeSuivant As UInt16
            If SGD_LireGroupeSuivant(NumeroSessionVitale, IdGroupeCourant, OccurrenceGroupeCourant, IdGroupeSuivant, OccurrenceGroupeSuivant) <> 0 Then
                ReDim Preserve CurrentBenéficiaire.G105C1(3)
                ReDim Preserve CurrentBenéficiaire.G105C2(3)
                ReDim Preserve CurrentBenéficiaire.G106C1(7)
                ReDim Preserve CurrentBenéficiaire.G106C2(7)
                ReDim Preserve CurrentBenéficiaire.G106C3(7)
                ReDim Preserve CurrentBenéficiaire.G106C4(7)
                ReDim Preserve CurrentBenéficiaire.G108C1(3)
                ReDim Preserve CurrentBenéficiaire.G108C2(3)
                ' ''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''
                If G105_exists = False Then
                    MyMsg_Box.Presentation("Officine !", "MISE A JOUR CARTE VITALE REQUISE", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    For i = 0 To CurrentBenéficiaire.G105C1.Length - 1
                        CurrentBenéficiaire.G105C1(i) = "000101010000"
                        CurrentBenéficiaire.G105C2(i) = "000101010000"
                    Next
                End If
                ' ''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''
                afficheDonnéesAssuré()

                question_ALD()
                Dossier_Pharmaceutique()
                Affiche_dus()
                affiche_Avances(True)


                Dossier_Patient_Load()
                Exit Sub
            End If


            Select Case IdGroupeSuivant

                Case 104
                    ReDim Preserve CurrentBenéficiaire.G105C1(3)
                    ReDim Preserve CurrentBenéficiaire.G105C2(3)
                    ReDim Preserve CurrentBenéficiaire.G106C1(7)
                    ReDim Preserve CurrentBenéficiaire.G106C2(7)
                    ReDim Preserve CurrentBenéficiaire.G106C3(7)
                    ReDim Preserve CurrentBenéficiaire.G106C4(7)
                    ReDim Preserve CurrentBenéficiaire.G108C1(3)
                    ReDim Preserve CurrentBenéficiaire.G108C2(3)
                    ' ''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''
                    If G105_exists = False Then
                        MyMsg_Box.Presentation("Officine !", "MISE A JOUR CARTE VITALE REQUISE", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        For i = 0 To CurrentBenéficiaire.G105C1.Length - 1
                            CurrentBenéficiaire.G105C1(i) = "000101010000"
                            CurrentBenéficiaire.G105C2(i) = "000101010000"
                        Next
                    End If
                    ' ''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''
                    afficheDonnéesAssuré()
                    question_ALD()
                    Dossier_Pharmaceutique()
                    Affiche_dus()
                    affiche_Avances(True)
                    Dossier_Patient_Load()
                    Exit Sub

                Case 105 'Période de droits AMO
                    G105_exists = True
                    Dim occurence As Integer = CurrentBenéficiaire.G105C1.Length
                    ReDim Preserve CurrentBenéficiaire.G105C1(occurence)
                    ReDim Preserve CurrentBenéficiaire.G105C2(occurence)

                    'Date de début droits AMO
                    TailleMax = 12
                    ValeurChamp = "@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 105, OccurrenceGroupeSuivant, 1, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G105C1(occurence) = ValeurChamp

                    End If
                    'Date de fin droits AMO
                    TailleMax = 12
                    ValeurChamp = "@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 105, OccurrenceGroupeSuivant, 2, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G105C2(occurence) = ValeurChamp

                    End If

                Case 106 'Période de code couverture
                    Dim occurence As Integer = CurrentBenéficiaire.G106C1.Length
                    'Dim item106 As String = ""
                    ReDim Preserve CurrentBenéficiaire.G106C1(occurence)
                    ReDim Preserve CurrentBenéficiaire.G106C2(occurence)
                    ReDim Preserve CurrentBenéficiaire.G106C3(occurence)
                    ReDim Preserve CurrentBenéficiaire.G106C4(occurence)
                    'Code ALD
                    TailleMax = 1
                    ValeurChamp = "@"
                    If SGD_LireChamp(NumeroSessionVitale, 106, OccurrenceGroupeSuivant, 3, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G106C3(occurence - 1) = ValeurChamp
                        'item106 = "Code ALD:  " + ValeurChamp
                    End If

                    'Code situation
                    TailleMax = 4
                    ValeurChamp = "@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 106, OccurrenceGroupeSuivant, 4, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G106C4(occurence - 1) = ValeurChamp
                        'item106 = item106 + "  |  Code situation:  " + ValeurChamp
                    End If

                    'Date de début code couverture
                    TailleMax = 12
                    ValeurChamp = "@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 106, OccurrenceGroupeSuivant, 1, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        If ValeurChamp <> "@@@@@@@@@@@@" Then
                            CurrentBenéficiaire.G106C1(occurence - 1) = ValeurChamp
                            'item106 = item106 + "  Date de code couverture: du " + Mid(ValeurChamp, 7, 2) + "/" + Mid(ValeurChamp, 5, 2) + "/" + Mid(ValeurChamp, 1, 4)
                        End If
                    End If

                    'Date de fin code couverture
                    TailleMax = 12
                    ValeurChamp = "@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 106, OccurrenceGroupeSuivant, 2, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        If ValeurChamp <> "@@@@@@@@@@@@" Then
                            CurrentBenéficiaire.G106C2(occurence - 1) = ValeurChamp
                        End If
                    End If


                Case 107 'Données Mutuelle
                    ' CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Données Mutuelle:  ")
                    'Identification Mutuelle
                    TailleMax = 8
                    ValeurChamp = "@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 107, OccurrenceGroupeSuivant, 1, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G107C1 = ValeurChamp
                        ' CurrentBeneficiaireRichTextBox.AppendText("Identification Mutuelle:  " + ValeurChamp)
                    End If
                    'Garanties effectives
                    TailleMax = 8
                    ValeurChamp = "@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 107, OccurrenceGroupeSuivant, 2, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        If TailleMax <> 0 Then
                            CurrentBenéficiaire.G107C2 = ValeurChamp
                            ' CurrentBeneficiaireRichTextBox.AppendText("  |  Garanties effectives:  " + ValeurChamp)
                        End If
                    End If


                    'Indicateur de traitement mutuelle
                    TailleMax = 2
                    ValeurChamp = "@@"
                    If SGD_LireChamp(NumeroSessionVitale, 107, OccurrenceGroupeSuivant, 3, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        If TailleMax <> 0 Then
                            CurrentBenéficiaire.G107C3 = ValeurChamp
                            ' CurrentBeneficiaireRichTextBox.AppendText("  |  Indicateur de traitement mutuelle:  " + ValeurChamp)
                        End If
                    End If

                    'Type de services associés
                    TailleMax = 1
                    ValeurChamp = "@"
                    If SGD_LireChamp(NumeroSessionVitale, 107, OccurrenceGroupeSuivant, 4, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        If TailleMax <> 0 Then
                            CurrentBenéficiaire.G107C4 = ValeurChamp
                            ' CurrentBeneficiaireRichTextBox.AppendText("  |  Type de services associés:  " + ValeurChamp)
                        End If
                    End If

                    'Services associés au contrat
                    TailleMax = 17
                    ValeurChamp = "@@@@@@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 107, OccurrenceGroupeSuivant, 5, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        If TailleMax <> 0 Then
                            CurrentBenéficiaire.G107C5 = ValeurChamp
                            ' CurrentBeneficiaireRichTextBox.AppendText("  |  Services associés au contrat:  " + ValeurChamp)
                        End If
                    End If

                    'Code aiguillage STS
                    TailleMax = 1
                    ValeurChamp = "@"
                    If SGD_LireChamp(NumeroSessionVitale, 107, OccurrenceGroupeSuivant, 6, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        If TailleMax <> 0 Then
                            CurrentBenéficiaire.G107C6 = ValeurChamp
                            ' CurrentBeneficiaireRichTextBox.AppendText("  |  Code aiguillage STS:  " + ValeurChamp)
                        End If
                    End If


                Case 108 'Période de droits Mutuellede 0 à 3 occurences, selon le groupe 107
                    Dim occurence As Integer = CurrentBenéficiaire.G108C1.Length
                    ReDim Preserve CurrentBenéficiaire.G108C1(occurence)
                    ReDim Preserve CurrentBenéficiaire.G108C2(occurence)
                    'Date de début droits mutuelle
                    TailleMax = 12
                    ValeurChamp = "@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 108, OccurrenceGroupeSuivant, 1, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G108C1(occurence - 1) = ValeurChamp
                        ' CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Date de droits mutuelle: du " + Mid(ValeurChamp, 7, 2) + "/" + Mid(ValeurChamp, 5, 2) + "/" + Mid(ValeurChamp, 1, 4))
                    End If
                    'DDate de fin droits mutuelle
                    TailleMax = 12
                    ValeurChamp = "@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 108, OccurrenceGroupeSuivant, 2, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G108C2(occurence - 1) = ValeurChamp
                        ' CurrentBeneficiaireRichTextBox.AppendText(" au  " + Mid(ValeurChamp, 7, 2) + "/" + Mid(ValeurChamp, 5, 2) + "/" + Mid(ValeurChamp, 1, 4))
                    End If


                Case 109 'Données Complémentaire
                    'N° de complémentaire B2
                    TailleMax = 10
                    ValeurChamp = "@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 1, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C1 = ValeurChamp
                    End If
                    'N° de complémentaire EDI
                    TailleMax = 19
                    ValeurChamp = "@@@@@@@@@@@@@@@@@@@"

                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 2, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C2 = ValeurChamp
                    End If
                    'N° d’adhérent AMC
                    TailleMax = 8
                    ValeurChamp = "@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 3, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C3 = ValeurChamp
                        'If ValeurChamp <> "" Then
                        '    AMC_Numadhérent_TextBox.Text = ValeurChamp
                        'End If
                    End If
                    'Indicateur de traitement AMC
                    TailleMax = 2
                    ValeurChamp = "@@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 4, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C4 = ValeurChamp
                    End If
                    'Date de début de validité de présence des données AMC
                    TailleMax = 12
                    ValeurChamp = "@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 5, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C5 = ValeurChamp
                    End If
                    'Date de fin de validité de présence des données AMC
                    TailleMax = 12
                    ValeurChamp = "@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 6, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C6 = ValeurChamp
                        'If ValeurChamp <> "" Then
                        '    AMC_DateFin_TextBox.Text = Mid(ValeurChamp, 7, 2) + "/" + Mid(ValeurChamp, 5, 2) + "/" + Mid(ValeurChamp, 1, 4)
                        'End If
                    End If
                    'Code de routage flux AMC
                    TailleMax = 2
                    ValeurChamp = "@@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 7, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C7 = ValeurChamp
                    End If
                    'Identifiant d’hôte
                    TailleMax = 3
                    ValeurChamp = "@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 8, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C8 = ValeurChamp
                    End If
                    'Nom de domaine AMC
                    TailleMax = 20
                    ValeurChamp = "@@@@@@@@@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 9, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C9 = ValeurChamp
                    End If
                    'Code aiguillage STS
                    TailleMax = 1
                    ValeurChamp = "@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 10, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C10 = ValeurChamp
                    End If
                    'Type de services associés
                    TailleMax = 1
                    ValeurChamp = "@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 11, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C11 = ValeurChamp
                    End If
                    'Services associés au contrat
                    TailleMax = 17
                    ValeurChamp = "@@@@@@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 109, OccurrenceGroupeSuivant, 12, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G109C12 = ValeurChamp
                    End If
                    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


                Case 111
                    TailleMax = 115
                    ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
                    If SGD_LireChamp(NumeroSessionVitale, 111, OccurrenceGroupeSuivant, 1, ValeurChamp, TailleMax) = 0 Then
                        ValeurChamp = Mid(ValeurChamp, 1, TailleMax)
                        CurrentBenéficiaire.G111C1 = ValeurChamp
                    End If
            End Select
            IdGroupeCourant = IdGroupeSuivant
            OccurrenceGroupeCourant = OccurrenceGroupeSuivant
        Loop
    End Sub

    Public Sub afficheDonnéesAssuré()

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        CurrentBeneficiaireRichTextBox.Clear()

        AMC_CodeRoutage_TextBox.Text = ""
        AMC_IdHote_TextBox.Text = ""
        AMC_NomDomaine_TextBox.Text = ""
        AMC_Code_Aiguillage_STS_TextBox.Text = ""

        'affichage DONNEES ASSURE
        ' CurrentBeneficiaireRichTextBox.AppendText("DONNEES BENEFICIAIRE:" + Chr(10))
        'Type de carte Vitale
        Select Case CurrentBenéficiaire.G101C1
            Case "D"
                CurrentBeneficiaireRichTextBox.AppendText("Carte Vitale de démonstration" + "    ")
            Case "T"
                CurrentBeneficiaireRichTextBox.AppendText("Carte Vitale de test" + "    ")
        End Select
        'N° de série de la carte Vitale
        CurrentBeneficiaireRichTextBox.AppendText("N° série CV:" + CurrentBenéficiaire.G101C2 + "    ")
        'Date de fin de validité carte Vitale
        If CurrentBenéficiaire.G101C3 <> "" Then
            CurrentBeneficiaireRichTextBox.AppendText("Date fin validité CV:" + Mid(CurrentBenéficiaire.G101C3, 7, 2) + "/" + Mid(CurrentBenéficiaire.G101C3, 5, 2) + "/" + Mid(CurrentBenéficiaire.G101C3, 1, 4) + "  ")
        End If

        'Type d’identification du porteur de la carte
        Select Case CurrentBenéficiaire.G101C7
            Case "A"
                CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Le n° national d'immatriculation est celui de l'assuré" + Chr(10))
            Case "B"
                CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Le n° national d'immatriculation est celui de l'ayant-droit" + Chr(10))
        End Select

        'NIR
        NirTextBox.Text = CurrentBenéficiaire.G101C8
        CléduNIRTextBox.Text = CurrentBenéficiaire.G101C9
        'Code régime
        RégimeTextBox.Text = TraductionCodeRégime(CurrentBenéficiaire.G101C10)
        'recherche de l'intitulé organislme destinataire dans taborgdest'Caisse gestionnaire'Centre gestionnaire
        If CurrentBenéficiaire.G101C8 <> "" Then
            Select Case Me.AmoTableAdapter1.SelectCount(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, CurrentBenéficiaire.G101C12)
                Case 0
                    Select Case Me.AmoTableAdapter1.SelectCount(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, "0000")
                        Case 0
                            MyMsg_Box.Presentation("Officine !", "AUCUN ENREGISTREMENT POUR:" + Chr(10) + "Code Régime:" + CurrentBenéficiaire.G101C10 + Chr(10) + "Caisse Gestionnaire:" + CurrentBenéficiaire.G101C11 + Chr(10) + "Centre Gestionnaire:" + CurrentBenéficiaire.G101C12, False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                        Case 1
                            Dim Libellé As String
                            Libellé = Me.AmoTableAdapter1.SelectLibellé(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, "0000")
                            CaisseTextBox.Text = Libellé + " " + CurrentBenéficiaire.G101C10 + "  " + CurrentBenéficiaire.G101C11 + "  " + CurrentBenéficiaire.G101C12
                        Case Else
                            MyMsg_Box.Presentation("Officine !", "PLUSIEURS ENREGISTREMENTS POUR:" + Chr(10) + "Code Régime:" + CurrentBenéficiaire.G101C10 + Chr(10) + "Caisse Gestionnaire:" + CurrentBenéficiaire.G101C11 + Chr(10) + "Centre Gestionnaire:" + CurrentBenéficiaire.G101C12, False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                    End Select
                Case 1
                    Dim Libellé As String
                    Libellé = Me.AmoTableAdapter1.SelectLibellé(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, CurrentBenéficiaire.G101C12)
                    CaisseTextBox.Text = Libellé + " " + CurrentBenéficiaire.G101C10 + "  " + CurrentBenéficiaire.G101C11 + "  " + CurrentBenéficiaire.G101C12
                Case Else
                    MyMsg_Box.Presentation("Officine !", "PLUSIEURS ENREGISTREMENTS POUR:" + Chr(10) + "Code Régime:" + CurrentBenéficiaire.G101C10 + Chr(10) + "Caisse Gestionnaire:" + CurrentBenéficiaire.G101C11 + Chr(10) + "Centre Gestionnaire:" + CurrentBenéficiaire.G101C12, False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
            End Select
        End If
        'Code gestion
        CurrentBeneficiaireRichTextBox.AppendText(TraductionG101C13(CurrentBenéficiaire.G101C13) + Chr(10))
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'SERVICE AMO FAMILLE
        TailleMax = 2
        ValeurChamp = "12"
        'Code service AMO Famille
        If CurrentBenéficiaire.G102C1 <> "0" And CurrentBenéficiaire.G102C1 <> "00" Then
            CurrentBeneficiaireRichTextBox.AppendText("SERVICE AMO FAMILLE:" + Chr(10) + "Code service AMO Famille" + CurrentBenéficiaire.G102C1 + Chr(10))
            'Date de début du service AMO Famille
            If Val(CurrentBenéficiaire.G102C2) <> 0 Then
                CurrentBeneficiaireRichTextBox.AppendText("Date de début du service AMO Famille:" + Mid(CurrentBenéficiaire.G102C2, 7, 2) + "/" + Mid(CurrentBenéficiaire.G102C2, 5, 2) + "/" + Mid(CurrentBenéficiaire.G102C2, 1, 4) + Chr(10))
            End If
            'Date de fin du service AMO Famille
            If Val(CurrentBenéficiaire.G102C3) <> 0 Then
                CurrentBeneficiaireRichTextBox.AppendText("Date de fin du service AMO Famille:" + Mid(CurrentBenéficiaire.G102C3, 7, 2) + "/" + Mid(CurrentBenéficiaire.G102C3, 5, 2) + "/" + Mid(CurrentBenéficiaire.G102C3, 1, 4) + Chr(10))
            End If
        End If

        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'DONNEES ACCIDENT DU TRAVAIL
        'Organisme gestionnaire du risque AT
        If CurrentBenéficiaire.G103C1 <> "" Then CurrentBeneficiaireRichTextBox.AppendText("Organisme gestionnaire du risque AT:" + CurrentBenéficiaire.G103C1 + Chr(10))
        'Code AT Budget Global des Hôpitaux
        If CurrentBenéficiaire.G103C2 <> "" Then CurrentBeneficiaireRichTextBox.AppendText("Code AT Budget Global des Hôpitaux:" + CurrentBenéficiaire.G103C2 + Chr(10))
        'Identifiant AT
        If CurrentBenéficiaire.G103C3 <> "" Then CurrentBeneficiaireRichTextBox.AppendText("Identifiant AT:" + CurrentBenéficiaire.G103C3 + Chr(10))
        'Organisme gestionnaire AT1
        If CurrentBenéficiaire.G103C4 <> "" Then CurrentBeneficiaireRichTextBox.AppendText("Organisme gestionnaire AT1:" + CurrentBenéficiaire.G103C4 + Chr(10))
        'Code AT1 BGDH
        If CurrentBenéficiaire.G103C5 <> "" Then CurrentBeneficiaireRichTextBox.AppendText("Code AT1 BGDH:" + CurrentBenéficiaire.G103C5 + Chr(10))
        'Identifiant AT1
        If CurrentBenéficiaire.G103C6 <> "" Then CurrentBeneficiaireRichTextBox.AppendText("Identifiant AT1:" + CurrentBenéficiaire.G103C6 + Chr(10))
        'Organisme gestionnaire AT2
        If CurrentBenéficiaire.G103C7 <> "" Then CurrentBeneficiaireRichTextBox.AppendText("Organisme gestionnaire AT2:" + CurrentBenéficiaire.G103C7 + Chr(10))
        'Code AT2 BGDH
        If CurrentBenéficiaire.G103C8 <> "" Then CurrentBeneficiaireRichTextBox.AppendText("Code AT2 BGDH:" + CurrentBenéficiaire.G103C8 + Chr(10))
        'Identifiant AT2
        If CurrentBenéficiaire.G103C9 <> "" Then CurrentBeneficiaireRichTextBox.AppendText("Identifiant AT2:" + CurrentBenéficiaire.G103C9 + Chr(10))
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'DONNEES BENEFICIAIRE
        'COMPTOIR_MAIN.ComboBoxLECTURE_VITALE.Items.Add(CurrentBenéficiaire.G104C1 + " " + CurrentBenéficiaire.G104C2 + " " + CurrentBenéficiaire.G104C3)
        'ComboBoxLECTURE_VITALE.Text = CurrentBenéficiaire.G104C1 + " " + CurrentBenéficiaire.G104C2 + " " + CurrentBenéficiaire.G104C3
        ComboBoxLECTURE_VITALE.Text = CurrentBenéficiaire.G104C1 + " " + CurrentBenéficiaire.G104C3
        'COMPTOIR_MAIN.ComboBoxLECTURE_VITALE.SelectedIndex = 0
        'COMPTOIR_MAIN.PeriodeCodeCouverture.Items.Clear()

        'Adresse
        If CurrentBenéficiaire.G104C4 <> "" Or CurrentBenéficiaire.G104C5 <> "" Or CurrentBenéficiaire.G104C6 <> "" Or CurrentBenéficiaire.G104C7 <> "" Or CurrentBenéficiaire.G104C8 <> "" Then
            CurrentBeneficiaireRichTextBox.AppendText("Adresse:" + CurrentBenéficiaire.G104C4 + " ")
            CurrentBeneficiaireRichTextBox.AppendText(CurrentBenéficiaire.G104C5 + " ")
            CurrentBeneficiaireRichTextBox.AppendText(CurrentBenéficiaire.G104C6 + " ")
            CurrentBeneficiaireRichTextBox.AppendText(CurrentBenéficiaire.G104C7 + " ")
            CurrentBeneficiaireRichTextBox.AppendText(CurrentBenéficiaire.G104C8 + Chr(10))
        End If
        'NIR certifié
        If CurrentBenéficiaire.G104C9 <> "" Then
            CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "NIR certifié:" + CurrentBenéficiaire.G104C9)
            'Clé du NIR certifié
            CurrentBeneficiaireRichTextBox.AppendText(" " + CurrentBenéficiaire.G104C10 + Chr(10))
            'Date de certification du NIR
            If CurrentBenéficiaire.G104C11 <> "" Then
                CurrentBeneficiaireRichTextBox.AppendText("Date certification:" + Mid(CurrentBenéficiaire.G104C11, 7, 2) + "/" + Mid(CurrentBenéficiaire.G104C11, 5, 2) + "/" + Mid(CurrentBenéficiaire.G104C11, 1, 4) + Chr(10))
            End If
        End If
        'Date de naissance du bénéficiaire
        CurrentBeneficiaireRichTextBox.AppendText("Date de naissance:" + Mid(CurrentBenéficiaire.G104C12, 7, 2) + "/" + Mid(CurrentBenéficiaire.G104C12, 5, 2) + "/" + Mid(CurrentBenéficiaire.G104C12, 1, 4) + "    ")
        'Rang de naissance
        CurrentBeneficiaireRichTextBox.AppendText("Rang de naissance:" + CurrentBenéficiaire.G104C13 + "    ")
        'Qualité
        CurrentBeneficiaireRichTextBox.AppendText("Qualité: " + TraductionG104C14(CurrentBenéficiaire.G104C14) + Chr(10))
        'Code service AMO bénéficiaire
        CurrentBeneficiaireRichTextBox.AppendText("service AMO bénéficiaire: " + TraductionG104C15(CurrentBenéficiaire.G104C15) + Chr(10))
        'Date du service AMO bénéficiaire
        If Val(CurrentBenéficiaire.G104C16) <> 0 Then
            CurrentBeneficiaireRichTextBox.AppendText("début service AMO bénéficiaire:" + Mid(CurrentBenéficiaire.G104C16, 7, 2) + "/" + Mid(CurrentBenéficiaire.G104C16, 5, 2) + "/" + Mid(CurrentBenéficiaire.G104C16, 1, 4) + Chr(10))
        End If
        If Val(CurrentBenéficiaire.G104C17) <> 0 Then
            CurrentBeneficiaireRichTextBox.AppendText("fin service AMO bénéficiaire:" + Mid(CurrentBenéficiaire.G104C17, 7, 2) + "/" + Mid(CurrentBenéficiaire.G104C17, 5, 2) + "/" + Mid(CurrentBenéficiaire.G104C17, 1, 4) + Chr(10))
        End If
        'Données RUF AMO bénéficiaire
        'If CurrentBenéficiaire.G104C18 <> "" Then  CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Données RUF AMO bénéficiaire: " + CurrentBenéficiaire.G104C18)

        ''affiche medecin connu
        'If ClientConnu() = True Then
        '    CurrentBenéficiaire.IDPrescripteur = VitaleTableAdapter.SELECT_IDPrescripteur(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G101C9, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C2, CurrentBenéficiaire.G104C3, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C14)
        '    Affiche_prescripteur_By_ID(CurrentBenéficiaire.IDPrescripteur)
        'Else
        '    TextBox_Prescripteur_NumID.Text = ""
        'End If

        'affiche médecin traitant déclaré
        If CurrentBenéficiaire.G104C18 <> "" Then
            If Mid(CurrentBenéficiaire.G104C18, 1, 1) = "0" Then
                Médecin_Traitant_Label.Text = "Le bénéficiaire a déclaré un médecin traitant"

            End If
            If Mid(CurrentBenéficiaire.G104C18, 1, 1) = "1" Then
                Médecin_Traitant_Label.Text = "Le bénéficiaire n’a pas déclaré de médecin traitant ou n’est pas concerné par le médecin traitant"
            End If
        Else
            Médecin_Traitant_Label.Text = ""
        End If


        'Période de droits AMO              
        'Date de droits AMO
        For i = 1 To CurrentBenéficiaire.G105C1.Length - 1
            If (CurrentBenéficiaire.G105C1(i) <> "" And CurrentBenéficiaire.G105C1(i) <> "000101010000") Or (CurrentBenéficiaire.G105C2(i) <> "" And CurrentBenéficiaire.G105C2(i) <> "000101010000") Then
                CurrentBeneficiaireRichTextBox.AppendText("Date de droits AMO: du " + Mid(CurrentBenéficiaire.G105C1(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G105C1(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G105C1(i), 1, 4))
                CurrentBeneficiaireRichTextBox.AppendText(" au  " + Mid(CurrentBenéficiaire.G105C2(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G105C2(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G105C2(i), 1, 4) + Chr(10))
            End If
        Next

        'Données Mutuelle
        If CurrentBenéficiaire.G107C1 <> "" Then

            'Garanties effectives
            If CurrentBenéficiaire.G107C2 <> "" And Mid(CurrentBenéficiaire.G107C2, 2, 1) = "N" Then
                MyMsg_Box.Presentation("Officine !", "Données mutuelles en carte vitale:" + Chr(10) + "Pharmacie non garantie", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
            End If

            'Identification Mutuelle
            If CurrentBenéficiaire.G107C4 <> "" Then
                AMC_NumAMC_TextBox.Text = Mid(CurrentBenéficiaire.G107C5, 1, 10)
                AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
            End If
            MUT_NumMutuelle_TextBox.Text = CurrentBenéficiaire.G107C1
            'Indicateur de traitement mutuelle
            AMC_Indicateurdetrairement_TextBox.Text = CurrentBenéficiaire.G107C3
            'Type de services associés
            If CurrentBenéficiaire.G107C4 <> "" Then
                CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Données Mutuelle: Type de services associés: ")
                Select Case Trim(CurrentBenéficiaire.G107C4)
                    Case "1"
                        CurrentBeneficiaireRichTextBox.AppendText("Numéro téléphonique")
                    Case "2"
                        CurrentBeneficiaireRichTextBox.AppendText("Code Minitel")
                    Case "3"
                        CurrentBeneficiaireRichTextBox.AppendText("Adresse Transpac")
                    Case "4"
                        CurrentBeneficiaireRichTextBox.AppendText("Adresse Internet")
                    Case "5"
                        CurrentBeneficiaireRichTextBox.AppendText("Texte libre")
                    Case "6"
                        CurrentBeneficiaireRichTextBox.AppendText("Informations structurées à afficher")
                    Case "7"
                        CurrentBeneficiaireRichTextBox.AppendText("Informations structurées à traiter")
                    Case "R"
                        CurrentBeneficiaireRichTextBox.AppendText("Valeur réservée à l’usage de la carte")
                End Select
            End If
            'Services associés au contrat
            If CurrentBenéficiaire.G107C5 <> "" Then CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Données Mutuelle: Services associés au contrat: " + CurrentBenéficiaire.G107C5)
            'Code aiguillage STS
            If CurrentBenéficiaire.G107C6 <> "" Then CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Données Mutuelle: Code aiguillage STS:" + CurrentBenéficiaire.G107C6)
            'Période de droits Mutuellede 0 à 3 occurences, selon le groupe 107
            'Date de droits mutuelle
            For i = 0 To CurrentBenéficiaire.G108C1.Length - 1
                If CurrentBenéficiaire.G108C1(i) <> "" Or CurrentBenéficiaire.G108C2(i) <> "" Then
                    CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Date de droits mutuelle: du " + Mid(CurrentBenéficiaire.G108C1(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G108C1(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G108C1(i), 1, 4))
                    CurrentBeneficiaireRichTextBox.AppendText(" au  " + Mid(CurrentBenéficiaire.G108C2(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G108C2(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G108C2(i), 1, 4))
                End If
            Next
        End If
        'recupère les data amc dans la base et les compare avec données en carte
        If ClientConnu() = True Then
            GetAMCdata()
            CompareAMCdata()
        Else
            EnregistreDonnéesClientversBDD()
            If AMC_Piècejustificative_ComboBox.Items.Count < 5 Then
                AMC_Piècejustificative_ComboBox.Items.Add("carte Vitale (4)")
            End If
            AMC_Piècejustificative_ComboBox.SelectedIndex = 4
            'nouveau client affichage date AMC si en carte
            If CurrentBenéficiaire.G109C1 <> "" Then
                Affiche_Grp109()
            ElseIf CurrentBenéficiaire.G107C1 <> "" Then
                choix_période_droits_mutuelle()
            End If
        End If
        '---------------------------------------------------------------------------------------------------------------
        '---------------------------------------------------------------------------------------------------------------
        'affichage intitulé AMC
        AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
        '---------------------------------------------------------------------------------------------------------------
        'affichage intitulé AMC
        Dim mydatatable As DataTable = Me.AMC_Contrat_TypeTableAdapter.GetDataById(CurrentBenéficiaire.AMC_TypeContrat)
        If mydatatable.Rows.Count = 1 Then
            For c = 0 To mydatatable.Columns.Count - 1
                Select Case mydatatable.Columns.Item(c).ColumnName
                    Case "Intitulé"
                        If AMC_Piècejustificative_ComboBox.SelectedIndex <> 4 Or (CurrentBenéficiaire.AMC_TypeContrat <> "CMU" And CurrentBenéficiaire.AMC_TypeContrat <> "CMU-TPcoord" And CurrentBenéficiaire.AMC_TypeContrat <> "AME") Then
                            AMC_Couverture_TextBox.Text = mydatatable(0).Item(c)
                        End If
                End Select
            Next
        End If
        '---------------------------------------------------------------------------------------------------------------
        'Controle Groupe 105 : Période de droits AMO
        If Recherche_Période_AMO_2() = False Then
            If InStr(RégimeTextBox.Text, "  (DROITS FERMÉS)") = 0 Then
                RégimeTextBox.Text = RégimeTextBox.Text + "  (DROITS FERMÉS)"
            End If
            RégimeTextBox.ForeColor = Color.Red
        Else
            RégimeTextBox.ForeColor = Color.Black
        End If

        AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
        MUT_NumMutuelle_TextBox_Validated(Nothing, Nothing)
        AMC_Numadhérent_TextBox_Validated(Nothing, Nothing)
        AMC_DateDebut_MaskedTextBox_Validated(Nothing, Nothing)
        AMC_DateFin_MaskedTextBox_Validated(Nothing, Nothing)
        AMC_Code_Aiguillage_STS_TextBox_Validated(Nothing, Nothing)
        AMC_Indicateurdetrairement_TextBox_Validated(Nothing, Nothing)
        AMC_CodeRoutage_TextBox_Validated(Nothing, Nothing)
        AMC_IdHote_TextBox_Validated(Nothing, Nothing)
        AMC_NomDomaine_TextBox_Validated(Nothing, Nothing)
        AMC_Type_Convention_TextBox_Validated(Nothing, Nothing)
        AMC_Critère_secondaire_TextBox_Validated(Nothing, Nothing)


        'Fiche d’information PDT-INF-071
        Dim code_situation As String = CodeSituation(Date_Droits_AMO)
        If code_situation = "0103" Or code_situation = "0107" Or code_situation = "0110" Or code_situation = "0203" Or _
           code_situation = "0207" Or code_situation = "0405" Or code_situation = "1003" Or code_situation = "9003" Then
            NatureAssurance_Button.Text = "MATERNITE"
        End If

        'SMG en carte
        If CurrentBenéficiaire.G101C10 = "08" And CurrentBenéficiaire.G101C11 = "835" And CurrentBenéficiaire.G101C12 = "0300" Then
            NatureAssurance_Button.Text = "SMG"
            NatureAssurance_Button.Enabled = False
        Else
            NatureAssurance_Button.Enabled = True
        End If

        AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
        If MUT_NumMutuelle_TextBox.Text = "" And AMC_NumAMC_TextBox.Text = "" Then
            AMC_Piècejustificative_ComboBox.SelectedIndex = 0
        End If

        Prioux_Bénéficiaire_affichage()

 


    End Sub




    'recherche droits dans bdd
    Private Sub ComboBoxLECTURE_VITALE_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBoxLECTURE_VITALE.KeyDown
        'DP_LinkLabel.Visible = False

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim recherchebdd As Boolean = True
        If e.KeyCode = Keys.Enter Then
            For i = 0 To ComboBoxLECTURE_VITALE.Items.Count - 1
                If ComboBoxLECTURE_VITALE.Text = ComboBoxLECTURE_VITALE.Items.Item(i) Then
                    recherchebdd = False
                End If
            Next
            If recherchebdd = True Then
                LECTURE_VITALE.BackgroundImage = officine.My.Resources.carte_vitale
                DP_Carte_Vitale_lue = False
                If Not DP_list_Alrt_Prdt_deja_diffusées Is Nothing Then
                    DP_list_Alrt_Prdt_deja_diffusées.Clear()
                End If
                DP_affichage_statut("Statut DP inconnu")


                ReDim tab_current_formule_STS(0)
                current_formule_STS.Clear()
                CurrentConvention.clear()

                SGD_LibererSession(NumeroSessionVitale)
                CurrentBenéficiaire.clear()
                CurrentBeneficiaireRichTextBox.Clear()
                ClearGroupBox(AssuréGroupBox, True)
                ClearTabPage(Dossier_Patient_AMC_TabPage, False)
                PrescripteurMyCombobox.Text = ""
                TextBox_Prescripteur_NumID.Clear()
                TextBox_Prescripteur_NumRPPS.Clear()
                Prescripteur_Spécialité_TextBox.Clear()
                Médecin_Traitant_Label.Text = ""
                Choix_Bénéficiaire.ShowDialog() ' = True
                DatePrecription.Enabled = True
                AMC_Piècejustificative_ComboBox.SelectedIndex = 0

                If ComboBoxLECTURE_VITALE.Text <> "" Then
                    DP_form = New DP
                    DP_form.Affichage_histo_local()
                    Affiche_dus()
                    affiche_Avances(True)
                    Dossier_Patient_Load()
                    Prioux_Bénéficiaire_affichage()
                    'Recup_Lgpi()
                End If
            End If
        Else
        End If

    End Sub
    Private Sub Prioux_Bénéficiaire_affichage()
        Chronique_Période_Changement_question = False
        For i = 0 To Chronique_Periode_MyCombobox.Items.Count - 1
            If CurrentBenéficiaire.Chronique_Periode.ToString = Chronique_Periode_MyCombobox.Items(i).ToString Then
                Chronique_Periode_MyCombobox.SelectedIndex = i
                Exit For
            End If
        Next
        Chronique_Periode_decalage_jour_TextBox.Text = CurrentBenéficiaire.Chronique_Periode_decalage_jour.ToString
        Chronique_Période_Changement_question = True
        Delivrance_Lieu_MyCombobox.Text = CurrentBenéficiaire.Delivrance_Lieu

    End Sub
    'GtDataBénéficiaire: remplit CurrentBénéfficiaire by G101C8:NIR, G104C12:datenaissance, G104C13:Rang, G104C14:Qualité
    Public Sub GetDataBénéficiaire()
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        ReDim CurrentBenéficiaire.G105C1(3)
        ReDim CurrentBenéficiaire.G105C2(3)
        ReDim CurrentBenéficiaire.G106C1(7)
        ReDim CurrentBenéficiaire.G106C2(7)
        ReDim CurrentBenéficiaire.G106C3(7)
        ReDim CurrentBenéficiaire.G106C4(7)
        ReDim CurrentBenéficiaire.G108C1(3)
        ReDim CurrentBenéficiaire.G108C2(3)
        Dim mydatatable As officine.PharmaDataSet.VitaleDataTable
        If CurrentBenéficiaire.G101C8 <> "" Then
            mydatatable = Me.VitaleTableAdapter.GetDataBénéficiaire(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14)
        Else
            mydatatable = BDD.VitaleTableAdapter.GetData_Compte_Client_NonSV(CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3)
            Me.ComboBoxLECTURE_VITALE.Text = CurrentBenéficiaire.G104C1 + " " + CurrentBenéficiaire.G104C3
        End If
        If Not mydatatable(0).IsG101C2Null Then
            CurrentBenéficiaire.G101C2 = mydatatable(0).G101C2
        End If
        If Not mydatatable(0).IsG101C3Null Then
            CurrentBenéficiaire.G101C3 = mydatatable(0).G101C3
        End If
        If Not mydatatable(0).IsG101C7Null Then
            CurrentBenéficiaire.G101C7 = mydatatable(0).G101C7
        End If
        CurrentBenéficiaire.G101C8 = mydatatable(0).G101C8
            CurrentBenéficiaire.G101C9 = mydatatable(0).G101C9
        If Not mydatatable(0).IsG101C10Null Then
            CurrentBenéficiaire.G101C10 = mydatatable(0).G101C10
        End If
        If Not mydatatable(0).IsG101C11Null Then
            CurrentBenéficiaire.G101C11 = mydatatable(0).G101C11
        End If
        If Not mydatatable(0).IsG101C12Null Then
            CurrentBenéficiaire.G101C12 = mydatatable(0).G101C12
        End If
        If Not mydatatable(0).IsG101C13Null Then
            CurrentBenéficiaire.G101C13 = mydatatable(0).G101C13
        End If
        If Not mydatatable(0).IsG102C1Null Then
            CurrentBenéficiaire.G102C1 = mydatatable(0).G102C1
        End If
        If Not mydatatable(0).IsG102C2Null Then
            CurrentBenéficiaire.G102C2 = mydatatable(0).G102C2
        End If
        If Not mydatatable(0).IsG102C3Null Then
            CurrentBenéficiaire.G102C3 = mydatatable(0).G102C3
        End If
        If Not mydatatable(0).IsG103C1Null Then
            CurrentBenéficiaire.G103C1 = mydatatable(0).G103C1
        End If
        If Not mydatatable(0).IsG103C2Null Then
            CurrentBenéficiaire.G103C2 = mydatatable(0).G103C2
        End If
        If Not mydatatable(0).IsG103C3Null Then
            CurrentBenéficiaire.G103C3 = mydatatable(0).G103C3
        End If
        If Not mydatatable(0).IsG103C4Null Then
            CurrentBenéficiaire.G103C4 = mydatatable(0).G103C4
        End If
        If Not mydatatable(0).IsG103C5Null Then
            CurrentBenéficiaire.G103C5 = mydatatable(0).G103C5
        End If
        If Not mydatatable(0).IsG103C6Null Then
            CurrentBenéficiaire.G103C6 = mydatatable(0).G103C6
        End If
        If Not mydatatable(0).IsG103C7Null Then
            CurrentBenéficiaire.G103C7 = mydatatable(0).G103C7
        End If
        If Not mydatatable(0).IsG103C8Null Then
            CurrentBenéficiaire.G103C8 = mydatatable(0).G103C8
        End If
        If Not mydatatable(0).IsG103C9Null Then
            CurrentBenéficiaire.G103C9 = mydatatable(0).G103C9
        End If
        If Not mydatatable(0).IsG104C1Null Then
            CurrentBenéficiaire.G104C1 = mydatatable(0).G104C1
        End If
        If Not mydatatable(0).IsG104C2Null Then
            CurrentBenéficiaire.G104C2 = mydatatable(0).G104C2
        End If
        If Not mydatatable(0).IsG104C3Null Then
            CurrentBenéficiaire.G104C3 = mydatatable(0).G104C3
        End If
        If Not mydatatable(0).IsG104C4Null Then
            CurrentBenéficiaire.G104C4 = mydatatable(0).G104C4
        End If
        If Not mydatatable(0).IsG104C5Null Then
            CurrentBenéficiaire.G104C5 = mydatatable(0).G104C5
        End If
        If Not mydatatable(0).IsG104C6Null Then
            CurrentBenéficiaire.G104C6 = mydatatable(0).G104C6
        End If
        If Not mydatatable(0).IsG104C7Null Then
            CurrentBenéficiaire.G104C7 = mydatatable(0).G104C7
        End If
        If Not mydatatable(0).IsG104C8Null Then
            CurrentBenéficiaire.G104C8 = mydatatable(0).G104C8
        End If
        If Not mydatatable(0).IsG104C9Null Then
            CurrentBenéficiaire.G104C9 = mydatatable(0).G104C9
        End If
        If Not mydatatable(0).IsG104C10Null Then
            CurrentBenéficiaire.G104C10 = mydatatable(0).G104C10
        End If
        If Not mydatatable(0).IsG104C11Null Then
            CurrentBenéficiaire.G104C11 = mydatatable(0).G104C11
        End If
        If Not mydatatable(0).IsG104C15Null Then
            CurrentBenéficiaire.G104C15 = mydatatable(0).G104C15
        End If
        If Not mydatatable(0).IsG104C16Null Then
            CurrentBenéficiaire.G104C16 = mydatatable(0).G104C16
        End If
        If Not mydatatable(0).IsG104C17Null Then
            CurrentBenéficiaire.G104C17 = mydatatable(0).G104C17
        End If
        If Not mydatatable(0).IsG104C18Null Then
            CurrentBenéficiaire.G104C18 = mydatatable(0).G104C18
        End If
        If Not mydatatable(0).IsG105C1O1Null Then
            CurrentBenéficiaire.G105C1(1) = mydatatable(0).G105C1O1
        End If
        If Not mydatatable(0).IsG105C2O1Null Then
            CurrentBenéficiaire.G105C2(1) = mydatatable(0).G105C2O1
        End If
        If Not mydatatable(0).IsG105C1O2Null Then
            CurrentBenéficiaire.G105C1(2) = mydatatable(0).G105C1O2
        End If
        If Not mydatatable(0).IsG105C2O2Null Then
            CurrentBenéficiaire.G105C2(2) = mydatatable(0).G105C2O2
        End If
        If Not mydatatable(0).IsG105C1O3Null Then
            CurrentBenéficiaire.G105C1(3) = mydatatable(0).G105C1O3
        End If
        If Not mydatatable(0).IsG105C2O3Null Then
            CurrentBenéficiaire.G105C2(3) = mydatatable(0).G105C2O3
        End If
        If Not mydatatable(0).IsG106C1O1Null Then
            CurrentBenéficiaire.G106C1(0) = mydatatable(0).G106C1O1
        End If
        If Not mydatatable(0).IsG106C2O1Null Then
            CurrentBenéficiaire.G106C2(0) = mydatatable(0).G106C2O1
        End If
        If Not mydatatable(0).IsG106C3O1Null Then
            CurrentBenéficiaire.G106C3(0) = mydatatable(0).G106C3O1
        End If
        If Not mydatatable(0).IsG106C4O1Null Then
            CurrentBenéficiaire.G106C4(0) = mydatatable(0).G106C4O1
        End If
        If Not mydatatable(0).IsG106C1O2Null Then
            CurrentBenéficiaire.G106C1(1) = mydatatable(0).G106C1O2
        End If
        If Not mydatatable(0).IsG106C2O2Null Then
            CurrentBenéficiaire.G106C2(1) = mydatatable(0).G106C2O2
        End If
        If Not mydatatable(0).IsG106C3O2Null Then
            CurrentBenéficiaire.G106C3(1) = mydatatable(0).G106C3O2
        End If
        If Not mydatatable(0).IsG106C4O2Null Then
            CurrentBenéficiaire.G106C4(1) = mydatatable(0).G106C4O2
        End If
        If Not mydatatable(0).IsG106C1O3Null Then
            CurrentBenéficiaire.G106C1(2) = mydatatable(0).G106C1O3
        End If
        If Not mydatatable(0).IsG106C2O3Null Then
            CurrentBenéficiaire.G106C2(2) = mydatatable(0).G106C2O3
        End If
        If Not mydatatable(0).IsG106C3O3Null Then
            CurrentBenéficiaire.G106C3(2) = mydatatable(0).G106C3O3
        End If
        If Not mydatatable(0).IsG106C4O3Null Then
            CurrentBenéficiaire.G106C4(2) = mydatatable(0).G106C4O3
        End If
        If Not mydatatable(0).IsG106C1O4Null Then
            CurrentBenéficiaire.G106C1(3) = mydatatable(0).G106C1O4
        End If
        If Not mydatatable(0).IsG106C2O4Null Then
            CurrentBenéficiaire.G106C2(3) = mydatatable(0).G106C2O4
        End If
        If Not mydatatable(0).IsG106C3O4Null Then
            CurrentBenéficiaire.G106C3(3) = mydatatable(0).G106C3O4
        End If
        If Not mydatatable(0).IsG106C4O4Null Then
            CurrentBenéficiaire.G106C4(3) = mydatatable(0).G106C4O4
        End If
        If Not mydatatable(0).IsG106C1O5Null Then
            CurrentBenéficiaire.G106C1(4) = mydatatable(0).G106C1O5
        End If
        If Not mydatatable(0).IsG106C2O5Null Then
            CurrentBenéficiaire.G106C2(4) = mydatatable(0).G106C2O5
        End If
        If Not mydatatable(0).IsG106C3O5Null Then
            CurrentBenéficiaire.G106C3(4) = mydatatable(0).G106C3O5
        End If
        If Not mydatatable(0).IsG106C4O5Null Then
            CurrentBenéficiaire.G106C4(4) = mydatatable(0).G106C4O5
        End If
        If Not mydatatable(0).IsG106C1O6Null Then
            CurrentBenéficiaire.G106C1(5) = mydatatable(0).G106C1O6
        End If
        If Not mydatatable(0).IsG106C2O6Null Then
            CurrentBenéficiaire.G106C2(5) = mydatatable(0).G106C2O6
        End If
        If Not mydatatable(0).IsG106C3O6Null Then
            CurrentBenéficiaire.G106C3(5) = mydatatable(0).G106C3O6
        End If
        If Not mydatatable(0).IsG106C4O6Null Then
            CurrentBenéficiaire.G106C4(5) = mydatatable(0).G106C4O6
        End If
        If Not mydatatable(0).IsG106C1O7Null Then
            CurrentBenéficiaire.G106C1(6) = mydatatable(0).G106C1O7
        End If
        If Not mydatatable(0).IsG106C2O7Null Then
            CurrentBenéficiaire.G106C2(6) = mydatatable(0).G106C2O7
        End If
        If Not mydatatable(0).IsG106C3O7Null Then
            CurrentBenéficiaire.G106C3(6) = mydatatable(0).G106C3O7
        End If
        If Not mydatatable(0).IsG106C4O7Null Then
            CurrentBenéficiaire.G106C4(6) = mydatatable(0).G106C4O7
        End If
        If Not mydatatable(0).IsG107C1Null Then
            CurrentBenéficiaire.G107C1 = mydatatable(0).G107C1
        End If
        If Not mydatatable(0).IsG107C2Null Then
            CurrentBenéficiaire.G107C2 = mydatatable(0).G107C2
        End If
        If Not mydatatable(0).IsG107C3Null Then
            CurrentBenéficiaire.G107C3 = mydatatable(0).G107C3
        End If
        If Not mydatatable(0).IsG107C4Null Then
            CurrentBenéficiaire.G107C4 = mydatatable(0).G107C4
        End If
        If Not mydatatable(0).IsG107C5Null Then
            CurrentBenéficiaire.G107C5 = mydatatable(0).G107C5
        End If
        If Not mydatatable(0).IsG107C6Null Then
            CurrentBenéficiaire.G107C6 = mydatatable(0).G107C6
        End If
        If Not mydatatable(0).IsG108C1O1Null Then
            CurrentBenéficiaire.G108C1(1) = mydatatable(0).G108C1O1
        End If
        If Not mydatatable(0).IsG108C2O1Null Then
            CurrentBenéficiaire.G108C2(1) = mydatatable(0).G108C2O1
        End If
        If Not mydatatable(0).IsG108C1O2Null Then
            CurrentBenéficiaire.G108C1(2) = mydatatable(0).G108C1O2
        End If
        If Not mydatatable(0).IsG108C2O2Null Then
            CurrentBenéficiaire.G108C2(2) = mydatatable(0).G108C2O2
        End If
        If Not mydatatable(0).IsG108C1O3Null Then
            CurrentBenéficiaire.G108C1(3) = mydatatable(0).G108C1O3
        End If
        If Not mydatatable(0).IsG108C2O3Null Then
            CurrentBenéficiaire.G108C2(3) = mydatatable(0).G108C2O3
        End If
        If Not mydatatable(0).IsG109C1Null Then
            CurrentBenéficiaire.G109C1 = mydatatable(0).G109C1
        End If
        If Not mydatatable(0).IsG109C2Null Then
            CurrentBenéficiaire.G109C2 = mydatatable(0).G109C2
        End If
        If Not mydatatable(0).IsG109C3Null Then
            CurrentBenéficiaire.G109C3 = mydatatable(0).G109C3
        End If
        If Not mydatatable(0).IsG109C4Null Then
            CurrentBenéficiaire.G109C4 = mydatatable(0).G109C4
        End If
        If Not mydatatable(0).IsG109C5Null Then
            CurrentBenéficiaire.G109C5 = mydatatable(0).G109C5
        End If
        If Not mydatatable(0).IsG109C6Null Then
            CurrentBenéficiaire.G109C6 = mydatatable(0).G109C6
        End If
        If Not mydatatable(0).IsG109C7Null Then
            CurrentBenéficiaire.G109C7 = mydatatable(0).G109C7
        End If
        If Not mydatatable(0).IsG109C8Null Then
            CurrentBenéficiaire.G109C8 = mydatatable(0).G109C8
        End If
        If Not mydatatable(0).IsG109C9Null Then
            CurrentBenéficiaire.G109C9 = mydatatable(0).G109C9
        End If
        If Not mydatatable(0).IsG109C10Null Then
            CurrentBenéficiaire.G109C10 = mydatatable(0).G109C10
        End If
        If Not mydatatable(0).IsG109C11Null Then
            CurrentBenéficiaire.G109C11 = mydatatable(0).G109C11
        End If
        If Not mydatatable(0).IsG109C12Null Then
            CurrentBenéficiaire.G109C12 = mydatatable(0).G109C12
        End If
        If Not mydatatable(0).IsG111C1Null Then
            CurrentBenéficiaire.G111C1 = mydatatable(0).G111C1
        End If
        If Not mydatatable(0).IsG101C1Null Then
            CurrentBenéficiaire.G101C1 = mydatatable(0).G101C1
        End If
        If Not mydatatable(0).IsG101C14Null Then
            CurrentBenéficiaire.G101C14 = mydatatable(0).G101C14
        End If
        If Not mydatatable(0).IsG101C5Null Then
            CurrentBenéficiaire.G101C5 = mydatatable(0).G101C5
        End If
        If Not mydatatable(0).IsG101C6Null Then
            CurrentBenéficiaire.G101C6 = mydatatable(0).G101C6
        End If
        If Not mydatatable(0).IsAMC_DateDébutNull Then
            CurrentBenéficiaire.AMC_DateDébut = mydatatable(0).AMC_DateDébut
        End If
        If Not mydatatable(0).IsAMC_DateFinNull Then
            CurrentBenéficiaire.AMC_DateFin = mydatatable(0).AMC_DateFin
        End If
        If Not mydatatable(0).IsAMC_NumAdherentNull Then
            CurrentBenéficiaire.AMC_NumAdherent = mydatatable(0).AMC_NumAdherent
        End If
        If Not mydatatable(0).IsAMC_NumOrganismeNull Then
            CurrentBenéficiaire.AMC_NumOrganisme = mydatatable(0).AMC_NumOrganisme
        End If
        If Not mydatatable(0).IsAMC_PiecejustificativeNull Then
            CurrentBenéficiaire.AMC_Piecejustificative = mydatatable(0).AMC_Piecejustificative
        End If
        If Not mydatatable(0).IsAMC_IndicateurdetrairementNull Then
            CurrentBenéficiaire.AMC_Indicateurdetrairement = mydatatable(0).AMC_Indicateurdetrairement
        End If
        If Not mydatatable(0).IsAssuréNull Then
            CurrentBenéficiaire.Assuré = mydatatable(0).Assuré
        End If
        If Not mydatatable(0).IsG1420C1Null Then
            CurrentBenéficiaire.G1420C1 = mydatatable(0).G1420C1
        End If
        If Not mydatatable(0).IsG1420C2Null Then
            CurrentBenéficiaire.G1420C2 = mydatatable(0).G1420C2
        End If
        If Not mydatatable(0).IsG1420C3Null Then
            CurrentBenéficiaire.G1420C3 = mydatatable(0).G1420C3
        End If
        If Not mydatatable(0).IsG1511C2Null Then
            CurrentBenéficiaire.G1511C2 = mydatatable(0).G1511C2
        End If
        If Not mydatatable(0).IsOrganismeNull Then
            CurrentBenéficiaire.Organisme = mydatatable(0).Organisme
        End If
        If Not mydatatable(0).IsNumNull Then
            CurrentBenéficiaire.Num = mydatatable(0).Num
            Last_VitalNum = CurrentBenéficiaire.Num
        End If
        If Not mydatatable(0).IsChronique_PeriodeNull Then
            CurrentBenéficiaire.Chronique_Periode = mydatatable(0).Chronique_Periode
        End If
        If Not mydatatable(0).IsOrganisme_de_residenceNull Then
            CurrentBenéficiaire.Organisme_de_residence = mydatatable(0).Organisme_de_residence
        End If
        If Not mydatatable(0).IsChronique_Periode_decalage_jourNull Then
            CurrentBenéficiaire.Chronique_Periode_decalage_jour = mydatatable(0).Chronique_Periode_decalage_jour
        End If
        If Not mydatatable(0).IsDelivrance_LieuNull Then
            CurrentBenéficiaire.Delivrance_Lieu = mydatatable(0).Delivrance_Lieu
        Else
            CurrentBenéficiaire.Delivrance_Lieu = ""
        End If
        If Not mydatatable(0).IsDMP_StatutNull Then
            If mydatatable(0).DMP_Statut <> "" Then
                CurrentBenéficiaire.DMP_Statut = mydatatable(0).DMP_Statut
            Else
                CurrentBenéficiaire.DMP_Statut = "Pas d'information"
            End If
        Else
            CurrentBenéficiaire.DMP_Statut = "Pas d'information"
        End If

        'CurrentBenéficiaire.G101C3 = mydatatable(0).G101C3
        'CurrentBenéficiaire.G101C7 = mydatatable(0).G101C7
        'CurrentBenéficiaire.G101C8 = mydatatable(0).G101C8
        'CurrentBenéficiaire.G101C9 = mydatatable(0).G101C9
        'CurrentBenéficiaire.G101C10 = mydatatable(0).G101C10
        'CurrentBenéficiaire.G101C11 = mydatatable(0).G101C11
        'CurrentBenéficiaire.G101C12 = mydatatable(0).G101C12
        'CurrentBenéficiaire.G101C13 = mydatatable(0).G101C13
        'CurrentBenéficiaire.G102C1 = mydatatable(0).G102C1
        'CurrentBenéficiaire.G102C2 = mydatatable(0).G102C2
        'CurrentBenéficiaire.G102C3 = mydatatable(0).G102C3
        'CurrentBenéficiaire.G103C1 = mydatatable(0).G103C1
        'CurrentBenéficiaire.G103C2 = mydatatable(0).G103C2
        'CurrentBenéficiaire.G103C3 = mydatatable(0).G103C3
        'CurrentBenéficiaire.G103C4 = mydatatable(0).G103C4
        'CurrentBenéficiaire.G103C5 = mydatatable(0).G103C5
        'CurrentBenéficiaire.G103C6 = mydatatable(0).G103C6
        'CurrentBenéficiaire.G103C7 = mydatatable(0).G103C7
        'CurrentBenéficiaire.G103C8 = mydatatable(0).G103C8
        'CurrentBenéficiaire.G103C9 = mydatatable(0).G103C9
        'CurrentBenéficiaire.G104C1 = mydatatable(0).G104C1
        'CurrentBenéficiaire.G104C2 = mydatatable(0).G104C2
        'CurrentBenéficiaire.G104C3 = mydatatable(0).G104C3
        'CurrentBenéficiaire.G104C4 = mydatatable(0).G104C4
        'CurrentBenéficiaire.G104C5 = mydatatable(0).G104C5
        'CurrentBenéficiaire.G104C6 = mydatatable(0).G104C6
        'CurrentBenéficiaire.G104C7 = mydatatable(0).G104C7
        'CurrentBenéficiaire.G104C8 = mydatatable(0).G104C8
        'CurrentBenéficiaire.G104C9 = mydatatable(0).G104C9
        'CurrentBenéficiaire.G104C10 = mydatatable(0).G104C10
        'CurrentBenéficiaire.G104C11 = mydatatable(0).G104C11
        'CurrentBenéficiaire.G104C15 = mydatatable(0).G104C15
        'CurrentBenéficiaire.G104C16 = mydatatable(0).G104C16
        'CurrentBenéficiaire.G104C17 = mydatatable(0).G104C17
        'CurrentBenéficiaire.G104C18 = mydatatable(0).G104C18
        'CurrentBenéficiaire.G105C1(1) = mydatatable(0).G105C1O1
        'CurrentBenéficiaire.G105C2(1) = mydatatable(0).G105C2O1
        'CurrentBenéficiaire.G105C1(2) = mydatatable(0).G105C1O2
        'CurrentBenéficiaire.G105C2(2) = mydatatable(0).G105C2O2
        'CurrentBenéficiaire.G105C1(3) = mydatatable(0).G105C1O3
        'CurrentBenéficiaire.G105C2(3) = mydatatable(0).G105C2O3
        'CurrentBenéficiaire.G106C1(0) = mydatatable(0).G106C1O1
        'CurrentBenéficiaire.G106C2(0) = mydatatable(0).G106C2O1
        'CurrentBenéficiaire.G106C3(0) = mydatatable(0).G106C3O1
        'CurrentBenéficiaire.G106C4(0) = mydatatable(0).G106C4O1
        'CurrentBenéficiaire.G106C1(1) = mydatatable(0).G106C1O2
        'CurrentBenéficiaire.G106C2(1) = mydatatable(0).G106C2O2
        'CurrentBenéficiaire.G106C3(1) = mydatatable(0).G106C3O2
        'CurrentBenéficiaire.G106C4(1) = mydatatable(0).G106C4O2
        'CurrentBenéficiaire.G106C1(2) = mydatatable(0).G106C1O3
        'CurrentBenéficiaire.G106C2(2) = mydatatable(0).G106C2O3
        'CurrentBenéficiaire.G106C3(2) = mydatatable(0).G106C3O3
        'CurrentBenéficiaire.G106C4(2) = mydatatable(0).G106C4O3
        'CurrentBenéficiaire.G106C1(3) = mydatatable(0).G106C1O4
        'CurrentBenéficiaire.G106C2(3) = mydatatable(0).G106C2O4
        'CurrentBenéficiaire.G106C3(3) = mydatatable(0).G106C3O4
        'CurrentBenéficiaire.G106C4(3) = mydatatable(0).G106C4O4
        'CurrentBenéficiaire.G106C1(4) = mydatatable(0).G106C1O5
        'CurrentBenéficiaire.G106C2(4) = mydatatable(0).G106C2O5
        'CurrentBenéficiaire.G106C3(4) = mydatatable(0).G106C3O5
        'CurrentBenéficiaire.G106C4(4) = mydatatable(0).G106C4O5
        'CurrentBenéficiaire.G106C1(5) = mydatatable(0).G106C1O6
        'CurrentBenéficiaire.G106C2(5) = mydatatable(0).G106C2O6
        'CurrentBenéficiaire.G106C3(5) = mydatatable(0).G106C3O6
        'CurrentBenéficiaire.G106C4(5) = mydatatable(0).G106C4O6
        'CurrentBenéficiaire.G106C1(6) = mydatatable(0).G106C1O7
        'CurrentBenéficiaire.G106C2(6) = mydatatable(0).G106C2O7
        'CurrentBenéficiaire.G106C3(6) = mydatatable(0).G106C3O7
        'CurrentBenéficiaire.G106C4(6) = mydatatable(0).G106C4O7
        'CurrentBenéficiaire.G107C1 = mydatatable(0).G107C1
        'CurrentBenéficiaire.G107C2 = mydatatable(0).G107C2
        'CurrentBenéficiaire.G107C3 = mydatatable(0).G107C3
        'CurrentBenéficiaire.G107C4 = mydatatable(0).G107C4
        'CurrentBenéficiaire.G107C5 = mydatatable(0).G107C5
        'CurrentBenéficiaire.G107C6 = mydatatable(0).G107C6
        'CurrentBenéficiaire.G108C1(1) = mydatatable(0).G108C1O1
        'CurrentBenéficiaire.G108C2(1) = mydatatable(0).G108C2O1
        'CurrentBenéficiaire.G108C1(2) = mydatatable(0).G108C1O2
        'CurrentBenéficiaire.G108C2(2) = mydatatable(0).G108C2O2
        'CurrentBenéficiaire.G108C1(3) = mydatatable(0).G108C1O3
        'CurrentBenéficiaire.G108C2(3) = mydatatable(0).G108C2O3
        'CurrentBenéficiaire.G109C1 = mydatatable(0).G109C1
        'CurrentBenéficiaire.G109C2 = mydatatable(0).G109C2
        'CurrentBenéficiaire.G109C3 = mydatatable(0).G109C3
        'CurrentBenéficiaire.G109C4 = mydatatable(0).G109C4
        'CurrentBenéficiaire.G109C5 = mydatatable(0).G109C5
        'CurrentBenéficiaire.G109C6 = mydatatable(0).G109C6
        'CurrentBenéficiaire.G109C7 = mydatatable(0).G109C7
        'CurrentBenéficiaire.G109C8 = mydatatable(0).G109C8
        'CurrentBenéficiaire.G109C9 = mydatatable(0).G109C9
        'CurrentBenéficiaire.G109C10 = mydatatable(0).G109C10
        'CurrentBenéficiaire.G109C11 = mydatatable(0).G109C11
        'CurrentBenéficiaire.G109C12 = mydatatable(0).G109C12
        'CurrentBenéficiaire.G111C1 = mydatatable(0).G111C1
        'CurrentBenéficiaire.G101C1 = mydatatable(0).G101C1
        'CurrentBenéficiaire.G101C14 = mydatatable(0).G101C14
        'CurrentBenéficiaire.G101C5 = mydatatable(0).G101C5
        'CurrentBenéficiaire.G101C6 = mydatatable(0).G101C6
        'CurrentBenéficiaire.AMC_DateDébut = mydatatable(0).AMC_DateDébut
        'CurrentBenéficiaire.AMC_DateFin = mydatatable(0).AMC_DateFin
        'CurrentBenéficiaire.AMC_NumAdherent = mydatatable(0).AMC_NumAdherent
        'CurrentBenéficiaire.AMC_NumOrganisme = mydatatable(0).AMC_NumOrganisme
        'CurrentBenéficiaire.AMC_Piecejustificative = mydatatable(0).AMC_Piecejustificative
        'CurrentBenéficiaire.AMC_Indicateurdetrairement = mydatatable(0).AMC_Indicateurdetrairement
        'CurrentBenéficiaire.Assuré = mydatatable(0).Assuré
        'CurrentBenéficiaire.G1420C1 = mydatatable(0).G1420C1
        'CurrentBenéficiaire.G1420C2 = mydatatable(0).G1420C2
        'CurrentBenéficiaire.G1420C3 = mydatatable(0).G1420C3
        'CurrentBenéficiaire.G1511C2 = mydatatable(0).G1511C2
        'CurrentBenéficiaire.Organisme = mydatatable(0).Organisme
        'CurrentBenéficiaire.Num = mydatatable(0).Num
        'CurrentBenéficiaire.Chronique_Periode = mydatatable(0).Chronique_Periode
        'CurrentBenéficiaire.Organisme_de_residence = mydatatable(0).Organisme_de_residence
        'CurrentBenéficiaire.Chronique_Periode_decalage_jour = mydatatable(0).Chronique_Periode_decalage_jour

        '________________________________________________________________________________________________________________________________________________
        'affichage DONNEES ASSURE
        Me.CurrentBeneficiaireRichTextBox.Clear()
        Me.CurrentBeneficiaireRichTextBox.AppendText("DONNEES BENEFICIAIRE:" + Chr(10))
        'Type de carte Vitale
        Select Case CurrentBenéficiaire.G101C1
            Case "D"
                Me.CurrentBeneficiaireRichTextBox.AppendText("Carte Vitale de démonstration  |  ")
            Case "T"
                Me.CurrentBeneficiaireRichTextBox.AppendText("Carte Vitale de test  |  ")
        End Select
        'N° de série de la carte Vitale
        Me.CurrentBeneficiaireRichTextBox.AppendText("N° de série de la carte Vitale:" + CurrentBenéficiaire.G101C2 + "  |  ")
        'Date de fin de validité carte Vitale
        Me.CurrentBeneficiaireRichTextBox.AppendText("Date de fin de validité carte Vitale:" + Mid(CurrentBenéficiaire.G101C3, 7, 2) + "/" + Mid(CurrentBenéficiaire.G101C3, 5, 2) + "/" + Mid(CurrentBenéficiaire.G101C3, 1, 4) + "  |  ")
        If Val(CurrentBenéficiaire.G101C3) <> 0 And Val(CurrentBenéficiaire.G101C3) < Val(Format(Now, "yyyyMMdd") + "0000") Then
            MyMsg_Box.Presentation("Officine !", "ATTENTION" & vbCrLf & "La Date de Validité de la carte Vitale est dépassée", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
        End If
        'Type d’identification du porteur de la carte
        Select Case CurrentBenéficiaire.G101C7
            Case "A"
                Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Le n° national d'immatriculation est celui de l'assuré  |  ")
            Case "B"
                Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Le n° national d'immatriculation est celui de l'ayant-droit   |  ")
        End Select

        'NIR
        Me.NirTextBox.Text = CurrentBenéficiaire.G101C8
        Me.CléduNIRTextBox.Text = CurrentBenéficiaire.G101C9
        'Code régime
        Me.RégimeTextBox.Text = TraductionCodeRégime(CurrentBenéficiaire.G101C10)
        'recherche de l'intitulé organislme destinataire dans taborgdest'Caisse gestionnaire'Centre gestionnaire
        If CurrentBenéficiaire.G101C8 <> "" Then
            Select Case Me.AmoTableAdapter1.SelectCount(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, CurrentBenéficiaire.G101C12)
                Case 0
                    Select Case Me.AmoTableAdapter1.SelectCount(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, "0000")
                        Case 0
                            MyMsg_Box.Presentation("Officine !", "AUCUN ENREGISTREMENT POUR:" + Chr(10) + "Code Régime:" + CurrentBenéficiaire.G101C10 + Chr(10) + "Caisse Gestionnaire:" + CurrentBenéficiaire.G101C11 + Chr(10) + "Centre Gestionnaire:" + CurrentBenéficiaire.G101C12, False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                        Case 1
                            Dim Libellé As String
                            Libellé = Me.AmoTableAdapter1.SelectLibellé(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, "0000")
                            CaisseTextBox.Text = Libellé + " " + CurrentBenéficiaire.G101C10 + "  " + CurrentBenéficiaire.G101C11 + "  " + CurrentBenéficiaire.G101C12
                        Case Else
                            MyMsg_Box.Presentation("Officine !", "PLUSIEURS ENREGISTREMENTS POUR:" + Chr(10) + "Code Régime:" + CurrentBenéficiaire.G101C10 + Chr(10) + "Caisse Gestionnaire:" + CurrentBenéficiaire.G101C11 + Chr(10) + "Centre Gestionnaire:" + CurrentBenéficiaire.G101C12, False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                    End Select
                Case 1
                    Dim Libellé As String
                    Libellé = Me.AmoTableAdapter1.SelectLibellé(CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, CurrentBenéficiaire.G101C12)
                    CaisseTextBox.Text = Libellé + " " + CurrentBenéficiaire.G101C10 + "  " + CurrentBenéficiaire.G101C11 + "  " + CurrentBenéficiaire.G101C12
                Case Else
                    MyMsg_Box.Presentation("Officine !", "PLUSIEURS ENREGISTREMENTS POUR:" + Chr(10) + "Code Régime:" + CurrentBenéficiaire.G101C10 + Chr(10) + "Caisse Gestionnaire:" + CurrentBenéficiaire.G101C11 + Chr(10) + "Centre Gestionnaire:" + CurrentBenéficiaire.G101C12, False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
            End Select
        End If
        'Code gestion
        Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + TraductionG101C13(CurrentBenéficiaire.G101C13))
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'SERVICE AMO FAMILLE
        'Code service AMO Famille
        If CurrentBenéficiaire.G102C1 <> "0" And CurrentBenéficiaire.G102C1 <> "00" Then
            Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "SERVICE AMO FAMILLE:" + Chr(10) + "Code service AMO Famille" + CurrentBenéficiaire.G102C1 + "  |  ")
            'Date de début du service AMO Famille
            Me.CurrentBeneficiaireRichTextBox.AppendText("Date de début du service AMO Famille:" + Mid(CurrentBenéficiaire.G102C2, 7, 2) + "/" + Mid(CurrentBenéficiaire.G102C2, 5, 2) + "/" + Mid(CurrentBenéficiaire.G102C2, 1, 4) + "  |  ")
            'Date de fin du service AMO Famille
            Me.CurrentBeneficiaireRichTextBox.AppendText("Date de fin du service AMO Famille:" + Mid(CurrentBenéficiaire.G102C3, 7, 2) + "/" + Mid(CurrentBenéficiaire.G102C3, 5, 2) + "/" + Mid(CurrentBenéficiaire.G102C3, 1, 4) + "  |  ")
        End If

        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'DONNEES ACCIDENT DU TRAVAIL
        'Organisme gestionnaire du risque AT
        If CurrentBenéficiaire.G103C1 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "DONNEES ACCIDENT DU TRAVAIL:" + Chr(10) + "Organisme gestionnaire du risque AT:" + CurrentBenéficiaire.G103C1)
        'Code AT Budget Global des Hôpitaux
        If CurrentBenéficiaire.G103C2 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | Code AT Budget Global des Hôpitaux:" + CurrentBenéficiaire.G103C2)
        'Identifiant AT
        If CurrentBenéficiaire.G103C3 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | Identifiant AT:" + CurrentBenéficiaire.G103C3)
        'Organisme gestionnaire AT1
        If CurrentBenéficiaire.G103C4 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | Organisme gestionnaire AT1:" + CurrentBenéficiaire.G103C4)
        'Code AT1 BGDH
        If CurrentBenéficiaire.G103C5 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | Code AT1 BGDH:" + CurrentBenéficiaire.G103C5)
        'Identifiant AT1
        If CurrentBenéficiaire.G103C6 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | Identifiant AT1:" + CurrentBenéficiaire.G103C6)
        'Organisme gestionnaire AT2
        If CurrentBenéficiaire.G103C7 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | Organisme gestionnaire AT2:" + CurrentBenéficiaire.G103C7)
        'Code AT2 BGDH
        If CurrentBenéficiaire.G103C8 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | Code AT2 BGDH:" + CurrentBenéficiaire.G103C8)
        'Identifiant AT2
        If CurrentBenéficiaire.G103C9 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | Identifiant AT2:" + CurrentBenéficiaire.G103C9)
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'DONNEES BENEFICIAIRE
        'me.ComboBoxLECTURE_VITALE.Items.Add(CurrentBenéficiaire.G104C1 + " " + CurrentBenéficiaire.G104C2 + " " + CurrentBenéficiaire.G104C3)
        Me.ComboBoxLECTURE_VITALE.Text = CurrentBenéficiaire.G104C1 + " " + CurrentBenéficiaire.G104C3
        'me.ComboBoxLECTURE_VITALE.SelectedIndex = 0
        'me.PeriodeCodeCouverture.Items.Clear()

        'Adresse
        Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Adresse:" + CurrentBenéficiaire.G104C4 + "  ")
        Me.CurrentBeneficiaireRichTextBox.AppendText(CurrentBenéficiaire.G104C5 + "  ")
        Me.CurrentBeneficiaireRichTextBox.AppendText(CurrentBenéficiaire.G104C6 + "  ")
        Me.CurrentBeneficiaireRichTextBox.AppendText(CurrentBenéficiaire.G104C7 + "  ")
        Me.CurrentBeneficiaireRichTextBox.AppendText(CurrentBenéficiaire.G104C8)
        'NIR certifié
        If CurrentBenéficiaire.G104C9 <> "" Then
            Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "NIR certifié:" + CurrentBenéficiaire.G104C9)
            'Clé du NIR certifié
            Me.CurrentBeneficiaireRichTextBox.AppendText(" | clé:" + CurrentBenéficiaire.G104C10)
            'Date de certification du NIR
            Me.CurrentBeneficiaireRichTextBox.AppendText(" | Date certification:" + Mid(CurrentBenéficiaire.G104C11, 7, 2) + "/" + Mid(CurrentBenéficiaire.G104C11, 5, 2) + "/" + Mid(CurrentBenéficiaire.G104C11, 1, 4))
        End If
        'Date de naissance du bénéficiaire
        Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Date de naissance:" + Mid(CurrentBenéficiaire.G104C12, 7, 2) + "/" + Mid(CurrentBenéficiaire.G104C12, 5, 2) + "/" + Mid(CurrentBenéficiaire.G104C12, 1, 4) + "  |  ")
        'Rang de naissance
        Me.CurrentBeneficiaireRichTextBox.AppendText("Rang de naissance:" + CurrentBenéficiaire.G104C13)
        'Qualité
        Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Qualité: " + TraductionG104C14(CurrentBenéficiaire.G104C14))
        'Code service AMO bénéficiaire
        Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "service AMO bénéficiaire: " + TraductionG104C15(CurrentBenéficiaire.G104C15))
        'Date du service AMO bénéficiaire
        If CurrentBenéficiaire.G104C16 <> "" Or CurrentBenéficiaire.G104C17 <> "" Then
            Me.CurrentBeneficiaireRichTextBox.AppendText("   du " + Mid(CurrentBenéficiaire.G104C16, 7, 2) + "/" + Mid(CurrentBenéficiaire.G104C16, 5, 2) + "/" + Mid(CurrentBenéficiaire.G104C16, 1, 4))
            Me.CurrentBeneficiaireRichTextBox.AppendText(" au " + Mid(CurrentBenéficiaire.G104C17, 7, 2) + "/" + Mid(CurrentBenéficiaire.G104C17, 5, 2) + "/" + Mid(CurrentBenéficiaire.G104C17, 1, 4))
        End If
        'Données RUF AMO bénéficiaire
        If CurrentBenéficiaire.G104C18 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Données RUF AMO bénéficiaire: " + CurrentBenéficiaire.G104C18)



        ''affiche medecin connu
        'If ClientConnu() = True Then
        '    CurrentBenéficiaire.IDPrescripteur = VitaleTableAdapter.SELECT_IDPrescripteur(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G101C9, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C2, CurrentBenéficiaire.G104C3, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C14)
        '    Dim mydatatable3 As DataTable = Me.PrescripteursTableAdapter.GetPrescripteurDataByIDinterne(CurrentBenéficiaire.IDPrescripteur)
        '    If mydatatable3.Rows.Count <> 0 Then
        '        For i = 0 To mydatatable3.Columns.Count - 1
        '            If mydatatable3.Columns.Item(i).ColumnName = "NomPrénom" Then
        '                PrescripteurMyCombobox.Text = mydatatable3(0).Item(i).ToString
        '                Exit For
        '            End If
        '        Next
        '    End If
        'End If


        'Période de droits AMO              
        'Date de droits AMO
        For i = 1 To CurrentBenéficiaire.G105C1.Length - 1
            If CurrentBenéficiaire.G105C1(i) <> "" Or CurrentBenéficiaire.G105C2(i) <> "" Then
                Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Date de droits AMO: du " + Mid(CurrentBenéficiaire.G105C1(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G105C1(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G105C1(i), 1, 4))
                Me.CurrentBeneficiaireRichTextBox.AppendText(" au  " + Mid(CurrentBenéficiaire.G105C2(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G105C2(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G105C2(i), 1, 4))
            End If
        Next


        'Données Mutuelle
        If CurrentBenéficiaire.G107C1 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "MUTUELLE:")
        'Identification Mutuelle
        If CurrentBenéficiaire.G107C1 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText("Identification:" + CurrentBenéficiaire.G107C1)
        'Garanties effectives
        If CurrentBenéficiaire.G107C2 <> "" Then
            Select Case Mid(CurrentBenéficiaire.G107C2, 2, 1)
                Case "O"
                    Me.CurrentBeneficiaireRichTextBox.AppendText(" | Pharmacie Garantie")
                Case "N"
                    Me.CurrentBeneficiaireRichTextBox.AppendText(" | Pharmacie NON Garantie")
            End Select
        End If
        'Indicateur de traitement mutuelle
        If CurrentBenéficiaire.G107C3 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | Indic traitement:" + CurrentBenéficiaire.G107C3)
        'Type de services associés
        If CurrentBenéficiaire.G107C4 <> "" Then
            Select Case Trim(CurrentBenéficiaire.G107C4)
                Case "1"
                    Me.CurrentBeneficiaireRichTextBox.AppendText(" | Numéro téléphonique")
                Case "2"
                    Me.CurrentBeneficiaireRichTextBox.AppendText(" | Code Minitel")
                Case "3"
                    Me.CurrentBeneficiaireRichTextBox.AppendText(" | Adresse Transpac")
                Case "4"
                    Me.CurrentBeneficiaireRichTextBox.AppendText(" | Adresse Internet")
                Case "5"
                    Me.CurrentBeneficiaireRichTextBox.AppendText(" | Texte libre")
                Case "6"
                    Me.CurrentBeneficiaireRichTextBox.AppendText(" | Informations structurées à afficher")
                Case "7"
                    Me.CurrentBeneficiaireRichTextBox.AppendText(" | Informations structurées à traiter")
                Case "R"
                    Me.CurrentBeneficiaireRichTextBox.AppendText(" | Valeur réservée à l’usage de la carte")
            End Select
        End If
        'Services associés au contrat
        If CurrentBenéficiaire.G107C5 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | N°org compl:" + CurrentBenéficiaire.G107C5)
        'Code aiguillage STS
        'If CurrentBenéficiaire.G107C6 <> "" Then Me.CurrentBeneficiaireRichTextBox.AppendText(" | Code aiguillage STS:" + CurrentBenéficiaire.G107C6)

        'Période de droits Mutuellede 0 à 3 occurences, selon le groupe 107
        'Date de droits mutuelle
        For i = 0 To CurrentBenéficiaire.G108C1.Length - 1
            If CurrentBenéficiaire.G108C1(i) <> "" Or CurrentBenéficiaire.G108C2(i) <> "" Then
                Me.CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Date de droits mutuelle: du " + Mid(CurrentBenéficiaire.G108C1(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G108C1(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G108C1(i), 1, 4))
                Me.CurrentBeneficiaireRichTextBox.AppendText(" au  " + Mid(CurrentBenéficiaire.G108C2(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G108C2(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G108C2(i), 1, 4))
            End If
        Next

        'Données AMC
        Me.AMC_DateDebut_MaskedTextBox.Text = Mid(CurrentBenéficiaire.AMC_DateDébut, 7, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateDébut, 5, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateDébut, 1, 4)
        Me.AMC_DateFin_MaskedTextBox.Text = Mid(CurrentBenéficiaire.AMC_DateFin, 7, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateFin, 5, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateFin, 1, 4)
        Try
            Me.AMC_Couverture_TextBox.Text = Me.AMC_Contrat_TypeTableAdapter.GetDataBy_Id2(CurrentBenéficiaire.AMC_TypeContrat).Item(0).Intitulé  '+ " progammez la requete pour obtenir l'intitulé"
        Catch ex As Exception
        End Try

        Me.AMC_Numadhérent_TextBox.Text = CurrentBenéficiaire.AMC_NumAdherent
        Me.AMC_NumAMC_TextBox.Text = CurrentBenéficiaire.AMC_NumOrganisme
        AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
        Me.AMC_Piècejustificative_ComboBox.Text = CurrentBenéficiaire.AMC_Piecejustificative
        Me.AMC_Indicateurdetrairement_TextBox.Text = CurrentBenéficiaire.AMC_Indicateurdetrairement
        'Indicateur Régime Alsace - Moselle(
        Select Case CurrentBenéficiaire.G1511C2
            Case "O"
                G1511C2_CheckBox1.Checked = True
            Case "N"
                G1511C2_CheckBox1.Checked = False
        End Select

    End Sub

    Public Function Recherche_Période_AMO_2() As Boolean

        Dim G105_exists As Boolean = False

        For i = 0 To CurrentBenéficiaire.G105C1.Length - 1
            If CurrentBenéficiaire.G105C1(i) <> "000101010000" Or CurrentBenéficiaire.G105C2(i) <> "000101010000" Then
                G105_exists = True
            End If
        Next
        Return G105_exists
    End Function
  

#End Region
#Region "Acquisition Droits AMC"
    'recupère les data amc dans la base
    Public Sub GetAMCdata()


        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim mydatatable As DataTable = Me.VitaleTableAdapter.GetDataBénéficiaire(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14)
        For c = 0 To mydatatable.Columns.Count - 1
            Select Case mydatatable.Columns.Item(c).ColumnName
                Case "AMC_NumOrganisme"
                    CurrentBenéficiaire.AMC_NumOrganisme = mydatatable(0).Item(c)
                Case "AMC_NumMutuelle"
                    CurrentBenéficiaire.AMC_NumMutuelle = mydatatable(0).Item(c)
                Case "AMC_NumAdherent"
                    CurrentBenéficiaire.AMC_NumAdherent = mydatatable(0).Item(c)
                Case "AMC_TypeContrat"
                    CurrentBenéficiaire.AMC_TypeContrat = mydatatable(0).Item(c)
                    Try
                        Me.AMC_Couverture_TextBox.Text = Me.AMC_Contrat_TypeTableAdapter.GetDataBy_Id2(CurrentBenéficiaire.AMC_TypeContrat).Item(0).Intitulé  '+ " progammez la requete pour obtenir l'intitulé"
                    Catch ex As Exception
                    End Try
                Case "AMC_DateDébut"
                    CurrentBenéficiaire.AMC_DateDébut = mydatatable(0).Item(c)
                    Try

                        AMC_DateDebut_MaskedTextBox.Text = Mid(CurrentBenéficiaire.AMC_DateDébut, 7, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateDébut, 5, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateDébut, 1, 4)

                    Catch ex As Exception
                    End Try
                Case "AMC_DateFin"
                    CurrentBenéficiaire.AMC_DateFin = mydatatable(0).Item(c)
                    Try
                        AMC_DateFin_MaskedTextBox.Text = Mid(CurrentBenéficiaire.AMC_DateFin, 7, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateFin, 5, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateFin, 1, 4)
                    Catch ex As Exception
                    End Try
                Case "AMC_Piecejustificative"
                    CurrentBenéficiaire.AMC_Piecejustificative = mydatatable(0).Item(c)
                Case "AMC_Code_Aiguillage_STS"
                    CurrentBenéficiaire.AMC_Code_Aiguillage_STS = mydatatable(0).Item(c)
                Case "AMC_Indicateurdetrairement"
                    CurrentBenéficiaire.AMC_Indicateurdetrairement = mydatatable(0).Item(c)
                Case "AMC_CodeRoutage"
                    CurrentBenéficiaire.AMC_CodeRoutage = mydatatable(0).Item(c)
                Case "AMC_IdHote"
                    CurrentBenéficiaire.AMC_IdHote = mydatatable(0).Item(c)
                Case "AMC_NomDomaine"
                    CurrentBenéficiaire.AMC_NomDomaine = mydatatable(0).Item(c)
                Case "AMC_Type_Convention"
                    CurrentBenéficiaire.AMC_Type_Convention = mydatatable(0).Item(c)
                Case "AMC_Critère_secondaire"
                    CurrentBenéficiaire.AMC_Critère_secondaire = mydatatable(0).Item(c)
                Case "AMC_IdentifiantAMC"
                    CurrentBenéficiaire.AMC_IdentifiantAMC = mydatatable(0).Item(c)
            End Select
        Next
    End Sub

    'compare les données AMC en base avec données en carte
    Private Sub CompareAMCdata()


        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        '-----------------------------------------------------------------------------------------------------------------------------------------
        If CurrentBenéficiaire.G109C1 = "" And CurrentBenéficiaire.G107C1 = "" Then 'si pas de données AMC/mutuelle en carte
            AMC_NumAMC_TextBox.Text = CurrentBenéficiaire.AMC_NumOrganisme
            AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
            MUT_NumMutuelle_TextBox.Text = CurrentBenéficiaire.AMC_NumMutuelle
            AMC_Numadhérent_TextBox.Text = CurrentBenéficiaire.AMC_NumAdherent
            AMC_Couverture_TextBox.Text = CurrentBenéficiaire.AMC_TypeContrat
            If CurrentBenéficiaire.AMC_DateDébut <> "" Then
                AMC_DateDebut_MaskedTextBox.Text = Mid(CurrentBenéficiaire.AMC_DateDébut, 7, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateDébut, 5, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateDébut, 1, 4)
            Else
                AMC_DateDebut_MaskedTextBox.Text = ""
            End If
            If CurrentBenéficiaire.AMC_DateFin <> "" Then
                AMC_DateFin_MaskedTextBox.Text = Mid(CurrentBenéficiaire.AMC_DateFin, 7, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateFin, 5, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateFin, 1, 4)
            Else
                AMC_DateFin_MaskedTextBox.Text = ""
            End If
            AMC_Piècejustificative_ComboBox.SelectedIndex = 0 'Val(CurrentBenéficiaire.AMC_Piecejustificative)
            AMC_Code_Aiguillage_STS_TextBox.Text = CurrentBenéficiaire.AMC_Code_Aiguillage_STS
            AMC_Indicateurdetrairement_TextBox.Text = CurrentBenéficiaire.AMC_Indicateurdetrairement
            AMC_CodeRoutage_TextBox.Text = CurrentBenéficiaire.AMC_CodeRoutage
            AMC_IdHote_TextBox.Text = CurrentBenéficiaire.AMC_IdHote
            AMC_NomDomaine_TextBox.Text = CurrentBenéficiaire.AMC_NomDomaine
            AMC_Type_Convention_TextBox.Text = CurrentBenéficiaire.AMC_Type_Convention
            AMC_Critère_secondaire_TextBox.Text = CurrentBenéficiaire.AMC_Critère_secondaire
            AMC_IdentifiantAMC_TextBox.Text = CurrentBenéficiaire.AMC_IdentifiantAMC

            '-----------------------------------------------------------------------------------------------------------------------------------------
        ElseIf CurrentBenéficiaire.G109C1 <> "" And CurrentBenéficiaire.G107C1 = "" Then 'si données AMC en carte
            If (CurrentBenéficiaire.G109C1 <> CurrentBenéficiaire.AMC_NumOrganisme And CurrentBenéficiaire.AMC_NumOrganisme <> "") Or _
            (CurrentBenéficiaire.G109C3 <> CurrentBenéficiaire.AMC_NumAdherent And CurrentBenéficiaire.G109C3 <> "" And CurrentBenéficiaire.AMC_NumAdherent <> "") Or _
            CurrentBenéficiaire.AMC_Indicateurdetrairement <> CurrentBenéficiaire.G109C4 Then

     
                Dim mymsgbox As New Choix_AMC_Data
                Choix_bénéficiaire_CV.Visible = False
                If mymsgbox.ShowDialog = MsgBoxResult.Yes Then 'choix base locale
                    AMC_NumAMC_TextBox.Text = CurrentBenéficiaire.AMC_NumOrganisme
                    AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
                    MUT_NumMutuelle_TextBox.Text = CurrentBenéficiaire.AMC_NumMutuelle
                    AMC_Numadhérent_TextBox.Text = CurrentBenéficiaire.AMC_NumAdherent
                    AMC_Couverture_TextBox.Text = CurrentBenéficiaire.AMC_TypeContrat
                    If CurrentBenéficiaire.AMC_DateDébut <> "" Then
                        AMC_DateDebut_MaskedTextBox.Text = Mid(CurrentBenéficiaire.AMC_DateDébut, 7, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateDébut, 5, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateDébut, 1, 4)
                    Else
                        AMC_DateDebut_MaskedTextBox.Text = ""
                    End If
                    If CurrentBenéficiaire.AMC_DateFin <> "" Then
                        AMC_DateFin_MaskedTextBox.Text = Mid(CurrentBenéficiaire.AMC_DateFin, 7, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateFin, 5, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateFin, 1, 4)
                    Else
                        AMC_DateFin_MaskedTextBox.Text = ""
                    End If
                    AMC_Piècejustificative_ComboBox.SelectedIndex = 0 'Val(CurrentBenéficiaire.AMC_Piecejustificative)
                    AMC_Code_Aiguillage_STS_TextBox.Text = CurrentBenéficiaire.AMC_Code_Aiguillage_STS
                    AMC_Indicateurdetrairement_TextBox.Text = CurrentBenéficiaire.AMC_Indicateurdetrairement
                    AMC_CodeRoutage_TextBox.Text = CurrentBenéficiaire.AMC_CodeRoutage
                    AMC_IdHote_TextBox.Text = CurrentBenéficiaire.AMC_IdHote
                    AMC_NomDomaine_TextBox.Text = CurrentBenéficiaire.AMC_NomDomaine
                    AMC_Type_Convention_TextBox.Text = CurrentBenéficiaire.AMC_Type_Convention
                    AMC_Critère_secondaire_TextBox.Text = CurrentBenéficiaire.AMC_Critère_secondaire
                    AMC_IdentifiantAMC_TextBox.Text = CurrentBenéficiaire.AMC_IdentifiantAMC

                Else 'MsgBoxResult.No
                    CurrentBenéficiaire.AMC_TypeContrat = ""
                    Affiche_Grp109()
                End If
            Else
                Affiche_Grp109()
            End If



            '-----------------------------------------------------------------------------------------------------------------------------------------
        ElseIf CurrentBenéficiaire.G109C1 = "" And CurrentBenéficiaire.G107C1 <> "" Then 'si données Mutuelle en carte

            If (CurrentBenéficiaire.G107C1 <> CurrentBenéficiaire.AMC_NumMutuelle And CurrentBenéficiaire.AMC_NumMutuelle <> "") Or _
                (CurrentBenéficiaire.G107C1 <> CurrentBenéficiaire.AMC_NumOrganisme And CurrentBenéficiaire.AMC_NumOrganisme <> "") Or _
           CurrentBenéficiaire.AMC_Indicateurdetrairement <> CurrentBenéficiaire.G107C3 Then



                Dim mymsgbox As New Choix_AMC_Data
                If mymsgbox.ShowDialog = MsgBoxResult.Yes Then 'choix base locale
                    AMC_NumAMC_TextBox.Text = CurrentBenéficiaire.AMC_NumOrganisme
                    AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
                    MUT_NumMutuelle_TextBox.Text = CurrentBenéficiaire.AMC_NumMutuelle
                    AMC_Numadhérent_TextBox.Text = CurrentBenéficiaire.AMC_NumAdherent
                    AMC_Couverture_TextBox.Text = CurrentBenéficiaire.AMC_TypeContrat
                    If CurrentBenéficiaire.AMC_DateDébut <> "" Then
                        AMC_DateDebut_MaskedTextBox.Text = Mid(CurrentBenéficiaire.AMC_DateDébut, 7, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateDébut, 5, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateDébut, 1, 4)
                    Else
                        AMC_DateDebut_MaskedTextBox.Text = ""
                    End If
                    If CurrentBenéficiaire.AMC_DateFin <> "" Then
                        AMC_DateFin_MaskedTextBox.Text = Mid(CurrentBenéficiaire.AMC_DateFin, 7, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateFin, 5, 2) + "/" + Mid(CurrentBenéficiaire.AMC_DateFin, 1, 4)
                    Else
                        AMC_DateFin_MaskedTextBox.Text = ""
                    End If
                    AMC_Piècejustificative_ComboBox.SelectedIndex = 0 ' Val(CurrentBenéficiaire.AMC_Piecejustificative)
                    AMC_Code_Aiguillage_STS_TextBox.Text = CurrentBenéficiaire.AMC_Code_Aiguillage_STS
                    AMC_Indicateurdetrairement_TextBox.Text = CurrentBenéficiaire.AMC_Indicateurdetrairement
                    AMC_CodeRoutage_TextBox.Text = CurrentBenéficiaire.AMC_CodeRoutage
                    AMC_IdHote_TextBox.Text = CurrentBenéficiaire.AMC_IdHote
                    AMC_NomDomaine_TextBox.Text = CurrentBenéficiaire.AMC_NomDomaine
                    AMC_Type_Convention_TextBox.Text = CurrentBenéficiaire.AMC_Type_Convention
                    AMC_Critère_secondaire_TextBox.Text = CurrentBenéficiaire.AMC_Critère_secondaire
                    AMC_IdentifiantAMC_TextBox.Text = CurrentBenéficiaire.AMC_IdentifiantAMC

                Else 'MsgBoxResult.No choix données en carte
                    CurrentBenéficiaire.AMC_TypeContrat = ""
                    choix_période_droits_mutuelle()
                    If CurrentBenéficiaire.G107C4 <> "" Then
                        AMC_NumAMC_TextBox.Text = Mid(CurrentBenéficiaire.G107C5, 1, 10)
                        AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
                    End If
                    MUT_NumMutuelle_TextBox.Text = CurrentBenéficiaire.G107C1
                    AMC_Numadhérent_TextBox.Text = ""
                    If CurrentBenéficiaire.AMC_TypeContrat <> "CMU" And CurrentBenéficiaire.AMC_TypeContrat <> "CMU-TPcoord" And CurrentBenéficiaire.AMC_TypeContrat <> "AME" Then
                        AMC_Couverture_TextBox.Text = CurrentBenéficiaire.AMC_TypeContrat
                    End If
                    If AMC_Piècejustificative_ComboBox.Items.Count < 5 Then
                        AMC_Piècejustificative_ComboBox.Items.Add("carte Vitale (4)")
                    End If
                    AMC_Piècejustificative_ComboBox.SelectedIndex = 4
                    AMC_Code_Aiguillage_STS_TextBox.Text = CurrentBenéficiaire.G107C6
                    AMC_Indicateurdetrairement_TextBox.Text = CurrentBenéficiaire.G107C3
                    AMC_CodeRoutage_TextBox.Text = ""
                    AMC_IdHote_TextBox.Text = ""
                    AMC_NomDomaine_TextBox.Text = ""
                    AMC_Type_Convention_TextBox.Text = ""
                    AMC_Critère_secondaire_TextBox.Text = ""
                    AMC_IdentifiantAMC_TextBox.Text = ""
                End If

            Else 'les données en carte sont les mêmes que dan la bdd
                choix_période_droits_mutuelle()
                If CurrentBenéficiaire.G107C4 <> "" Then
                    AMC_NumAMC_TextBox.Text = Mid(CurrentBenéficiaire.G107C5, 1, 10)
                    AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
                End If

                MUT_NumMutuelle_TextBox.Text = CurrentBenéficiaire.G107C1
                AMC_Numadhérent_TextBox.Text = ""
                If CurrentBenéficiaire.AMC_TypeContrat <> "CMU" And CurrentBenéficiaire.AMC_TypeContrat <> "CMU-TPcoord" And CurrentBenéficiaire.AMC_TypeContrat <> "AME" Then
                    AMC_Couverture_TextBox.Text = CurrentBenéficiaire.AMC_TypeContrat
                End If
                If AMC_Piècejustificative_ComboBox.Items.Count < 5 Then
                    AMC_Piècejustificative_ComboBox.Items.Add("carte Vitale (4)")
                End If

                AMC_Piècejustificative_ComboBox.SelectedIndex = 4

                AMC_Code_Aiguillage_STS_TextBox.Text = CurrentBenéficiaire.G107C6
                AMC_Indicateurdetrairement_TextBox.Text = CurrentBenéficiaire.G107C3
                AMC_CodeRoutage_TextBox.Text = ""
                AMC_IdHote_TextBox.Text = ""
                AMC_NomDomaine_TextBox.Text = ""
                AMC_Type_Convention_TextBox.Text = ""
                AMC_Critère_secondaire_TextBox.Text = ""
                AMC_IdentifiantAMC_TextBox.Text = ""

            End If

        End If
        Mode_Gestion()
    End Sub

    Private Sub Affiche_Grp109()

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        AMC_NumAMC_TextBox.Text = CurrentBenéficiaire.G109C1
        AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
        If CurrentBenéficiaire.G109C2 <> "" Then
            If Mid(CurrentBenéficiaire.G109C2, 1, 1) = "1" Then
                CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "(Données Complémentaire) Type de Convention: " + Mid(CurrentBenéficiaire.G109C2, 2, 2) + ", Critère Secondaire: " + Mid(CurrentBenéficiaire.G109C2, 4, 3))
            ElseIf Mid(CurrentBenéficiaire.G109C2, 1, 1) = "2" Then
                CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "(Données Complémentaire) Types de Convention: " + Mid(CurrentBenéficiaire.G109C2, 2, 2) + ", " + Mid(CurrentBenéficiaire.G109C2, 4, 2) + _
                                                          ", Critères Secondaire: " + Mid(CurrentBenéficiaire.G109C2, 6, 3) + ", " + Mid(CurrentBenéficiaire.G109C2, 9, 3) + ", " + _
                                                          Mid(CurrentBenéficiaire.G109C2, 12, 3) + ", " + Mid(CurrentBenéficiaire.G109C2, 15, 3))
            End If
        End If


        AMC_Numadhérent_TextBox.Text = CurrentBenéficiaire.G109C3

        AMC_Indicateurdetrairement_TextBox.Text = CurrentBenéficiaire.G109C4


        If CurrentBenéficiaire.G109C5 <> "" Then
            AMC_DateDebut_MaskedTextBox.Text = Mid(CurrentBenéficiaire.G109C5, 7, 2) + "/" + Mid(CurrentBenéficiaire.G109C5, 5, 2) + "/" + Mid(CurrentBenéficiaire.G109C5, 1, 4)
        Else
            AMC_DateDebut_MaskedTextBox.Text = ""
        End If
        If CurrentBenéficiaire.G109C6 <> "" Then
            AMC_DateFin_MaskedTextBox.Text = Mid(CurrentBenéficiaire.G109C6, 7, 2) + "/" + Mid(CurrentBenéficiaire.G109C6, 5, 2) + "/" + Mid(CurrentBenéficiaire.G109C6, 1, 4)
        Else
            AMC_DateFin_MaskedTextBox.Text = ""
        End If

        If CurrentBenéficiaire.G109C7 <> "" And CurrentBenéficiaire.G109C8 <> "" And CurrentBenéficiaire.G109C9 <> "" Then
            AMC_CodeRoutage_TextBox.Text = CurrentBenéficiaire.G109C7
            AMC_IdHote_TextBox.Text = CurrentBenéficiaire.G109C8
            AMC_NomDomaine_TextBox.Text = CurrentBenéficiaire.G109C9
        Else
            CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Données Mutuelle: Données d'adressage incomplètes")
            CurrentBenéficiaire.G109C7 = ""
            CurrentBenéficiaire.G109C8 = ""
            CurrentBenéficiaire.G109C9 = ""
        End If

        AMC_Code_Aiguillage_STS_TextBox.Text = CurrentBenéficiaire.G109C10

        If CurrentBenéficiaire.G109C11 <> "" Then
            CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Données Mutuelle: Type de services associés: ")
            Select Case Trim(CurrentBenéficiaire.G109C11)
                Case "1"
                    CurrentBeneficiaireRichTextBox.AppendText("Numéro téléphonique")
                Case "2"
                    CurrentBeneficiaireRichTextBox.AppendText("Code Minitel")
                Case "3"
                    CurrentBeneficiaireRichTextBox.AppendText("Adresse Transpac")
                Case "4"
                    CurrentBeneficiaireRichTextBox.AppendText("Adresse Internet")
                Case "5"
                    CurrentBeneficiaireRichTextBox.AppendText("Texte libre")
                Case "6"
                    CurrentBeneficiaireRichTextBox.AppendText("Informations structurées à afficher")
                Case "7"
                    CurrentBeneficiaireRichTextBox.AppendText("Informations structurées à traiter")
                Case "R"
                    CurrentBeneficiaireRichTextBox.AppendText("Valeur réservée à l’usage de la carte")
            End Select
        End If

        If CurrentBenéficiaire.G109C12 <> "" Then CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Données Complémentaire: Services associés au contrat:" + CurrentBenéficiaire.G109C12)

        If AMC_Piècejustificative_ComboBox.Items.Count < 5 Then
            AMC_Piècejustificative_ComboBox.Items.Add("carte Vitale (4)")
        End If
        AMC_Piècejustificative_ComboBox.SelectedIndex = 4

        MUT_NumMutuelle_TextBox.Text = ""
        AMC_Type_Convention_TextBox.Text = ""
        AMC_Critère_secondaire_TextBox.Text = ""


        If CurrentBenéficiaire.AMC_TypeContrat <> "CMU" And CurrentBenéficiaire.AMC_TypeContrat <> "CMU-TPcoord" And CurrentBenéficiaire.AMC_TypeContrat <> "AME" Then
            AMC_Couverture_TextBox.Text = CurrentBenéficiaire.AMC_TypeContrat
        End If

    End Sub


    'affiche la période mutuelle en cours G108, la dernière période si hors droits
    Private Sub choix_période_droits_mutuelle()

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim dates_found As Boolean = False

        'parcours les occurences du groupe 108 et choisit le dernier avec un intervale qui convient
        For i = 0 To 2
            If CurrentBenéficiaire.G108C1(i) <> "" Or CurrentBenéficiaire.G108C2(i) <> "" Then
                dates_found = True
                If (CurrentBenéficiaire.G108C1(i) = "" Or Val(CurrentBenéficiaire.G108C1(i)) <= Val(Format(Date_Droits_AMC2, "yyyyMMdd") + "0000")) _
                And (CurrentBenéficiaire.G108C2(i) = "" Or Val(CurrentBenéficiaire.G108C2(i)) >= Val(Format(Date_Droits_AMC2, "yyyyMMdd") + "0000")) Then
                    If CurrentBenéficiaire.G108C1(i) <> "" Then
                        'AMC_DateDebut_TextBox.Text = Mid(CurrentBenéficiaire.G108C1(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G108C1(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G108C1(i), 1, 4)
                        AMC_DateDebut_MaskedTextBox.Text = DateVitale_To_DateString(CurrentBenéficiaire.G108C1(i))
                    End If
                    If CurrentBenéficiaire.G108C2(i) <> "" Then
                        'AMC_DateFin_TextBox.Text = Mid(CurrentBenéficiaire.G108C2(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G108C2(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G108C2(i), 1, 4)
                        AMC_DateFin_MaskedTextBox.Text = DateVitale_To_DateString(CurrentBenéficiaire.G108C2(i))
                    End If
                End If
            End If
        Next

        'si pendant parcours des occurences du groupe 108, au moins une date est trouvée mais que aucune période de droit mutuelle n'est valide par rapport à Date_Droits_AMC2,
        'alors on choisit la dernière période
        If dates_found = True And AMC_DateDebut_MaskedTextBox.Text = "  /  /" And AMC_DateFin_MaskedTextBox.Text = "  /  /" Then
            For i = 0 To 2
                If CurrentBenéficiaire.G108C1(i) <> "" Or CurrentBenéficiaire.G108C2(i) <> "" Then
                    If CurrentBenéficiaire.G108C1(i) <> "" Then
                        'AMC_DateDebut_TextBox.Text = Mid(CurrentBenéficiaire.G108C1(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G108C1(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G108C1(i), 1, 4)
                        AMC_DateDebut_MaskedTextBox.Text = DateVitale_To_DateString(CurrentBenéficiaire.G108C1(i))
                    End If
                    If CurrentBenéficiaire.G108C2(i) <> "" Then
                        'AMC_DateFin_TextBox.Text = Mid(CurrentBenéficiaire.G108C2(i), 7, 2) + "/" + Mid(CurrentBenéficiaire.G108C2(i), 5, 2) + "/" + Mid(CurrentBenéficiaire.G108C2(i), 1, 4)
                        AMC_DateFin_MaskedTextBox.Text = DateVitale_To_DateString(CurrentBenéficiaire.G108C2(i))
                    End If
                End If
            Next
        End If
    End Sub

    'validation--> affecte currentbeneficiaire
    Private Sub AMC_NumAMC_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_NumAMC_TextBox.Validated

        If AMC_NumAMC_TextBox.Text = "" Then
            Exit Sub
        End If
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If NuméroDAMCAssociéeToolStripMenuItem.Checked = False Then
            CurrentBenéficiaire.AMC_NumMutuelle = ""
            CurrentBenéficiaire.G107C1 = ""
        End If



        If CurrentBenéficiaire.AMC_NumOrganisme = AMC_NumAMC_TextBox.Text Then
            AMC_Intitule_TextBox.Text = Me.AmC_OrganismesTableAdapter1.Select_Intitulé(CurrentBenéficiaire.AMC_NumOrganisme)
            'MsgBox("Exit Sub 'no change")
            Exit Sub 'no change
        End If

        CurrentBenéficiaire.AMC_NumOrganisme = AMC_NumAMC_TextBox.Text

        AMC_Intitule_TextBox.Text = Me.AmC_OrganismesTableAdapter1.Select_Intitulé(CurrentBenéficiaire.AMC_NumOrganisme)

        Select Case CurrentBenéficiaire.AMC_NumOrganisme
            Case "99999997"
                CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord"
                AMC_Couverture_TextBox.Text = "CMU, Tiers Payant Coordonné"
            Case "88888888"
                CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord"
                AMC_Couverture_TextBox.Text = "CMU, Tiers Payant Coordonné"
            Case "55555551"
                'CurrentBenéficiaire.AMC_TypeContrat = "CMU"
                AMC_Couverture_TextBox.Text = "Sortant de CMU"
            Case "75500017"
                CurrentBenéficiaire.AMC_TypeContrat = "AME"
                AMC_Couverture_TextBox.Text = "Aide Médicale d'Etat"
        End Select


        If sender Is Nothing Then Exit Sub 'pour que la sub ne concerne que les data validés "à la main", exit sub si le AMC_NumAMC_TextBox.text est renseigné par le logiciel
        'MsgBox("b" & vbCrLf & CurrentBenéficiaire.AMC_NumMutuelle & vbCrLf & CurrentBenéficiaire.AMC_NumOrganisme)
        '---------------------------------------------------------------------------------
        'RAZ des valeurs complementaires
        CurrentBenéficiaire.G107C1 = ""
        CurrentBenéficiaire.G107C2 = ""
        CurrentBenéficiaire.G107C3 = ""
        CurrentBenéficiaire.G107C4 = ""
        CurrentBenéficiaire.G107C5 = ""
        CurrentBenéficiaire.G107C6 = ""
        CurrentBenéficiaire.G109C1 = ""
        CurrentBenéficiaire.G109C2 = ""
        CurrentBenéficiaire.G109C3 = ""
        CurrentBenéficiaire.G109C4 = ""
        CurrentBenéficiaire.G109C5 = ""
        CurrentBenéficiaire.G109C6 = ""
        CurrentBenéficiaire.G109C7 = ""
        CurrentBenéficiaire.G109C8 = ""
        CurrentBenéficiaire.G109C9 = ""
        CurrentBenéficiaire.G109C10 = ""
        CurrentBenéficiaire.G109C11 = ""
        CurrentBenéficiaire.G109C12 = ""

        CurrentBenéficiaire.AMC_Code_Aiguillage_STS = ""
        CurrentBenéficiaire.AMC_CodeRoutage = ""
        CurrentBenéficiaire.AMC_Critère_secondaire = ""
        CurrentBenéficiaire.AMC_DateDébut = ""
        CurrentBenéficiaire.AMC_DateFin = ""
        CurrentBenéficiaire.AMC_IdentifiantAMC = ""
        CurrentBenéficiaire.AMC_IdHote = ""
        CurrentBenéficiaire.AMC_Indicateurdetrairement = ""
        CurrentBenéficiaire.AMC_NomDomaine = ""
        CurrentBenéficiaire.AMC_NumAdherent = ""
        CurrentBenéficiaire.AMC_IdentifiantAMC = ""
        If NuméroDAMCAssociéeToolStripMenuItem.Checked = False Then
            CurrentBenéficiaire.AMC_NumMutuelle = ""
            CurrentBenéficiaire.G107C1 = ""
        End If
        'CurrentBenéficiaire.AMC_NumOrganisme = ""
        'CurrentBenéficiaire.AMC_Piecejustificative = ""
        CurrentBenéficiaire.AMC_Type_Convention = ""
        CurrentBenéficiaire.AMC_TypeContrat = ""
        CurrentBenéficiaire.AMC_Critère_secondaire = ""

        CurrentConvention.clear()

        AMC_Intitule_TextBox.Text = ""
        AMC_Numadhérent_TextBox.Text = ""
        AMC_IdentifiantAMC_TextBox.Text = ""
        CurrentBenéficiaire.AMC_TypeContrat = ""
        If assuré_presente_attestation_cmu_gestion_séparée = False Then
            AMC_Couverture_TextBox.Text = ""
            CurrentBenéficiaire.AMC_TypeContrat = ""
        Else
            AMC_Couverture_TextBox.Text = "CMU"
            CurrentBenéficiaire.AMC_TypeContrat = "CMU"
        End If
        AMC_DateDebut_MaskedTextBox.Text = ""
        AMC_DateFin_MaskedTextBox.Text = ""
        AMC_Indicateurdetrairement_TextBox.Text = ""
        AMC_Piècejustificative_ComboBox.Text = ""
        AMC_CodeRoutage_TextBox.Text = ""
        AMC_IdHote_TextBox.Text = ""
        AMC_NomDomaine_TextBox.Text = ""
        AMC_Code_Aiguillage_STS_TextBox.Text = ""
        AMC_Type_Convention_TextBox.Text = ""
        If NuméroDAMCAssociéeToolStripMenuItem.Checked = False Then
            MUT_NumMutuelle_TextBox.Text = ""
        End If
        AMC_Critère_secondaire_TextBox.Text = ""
        '---------------------------------------------------------------------------------

        AMC_Intitule_TextBox.Text = Me.AmC_OrganismesTableAdapter1.Select_Intitulé(CurrentBenéficiaire.AMC_NumOrganisme)

        Select Case CurrentBenéficiaire.AMC_NumOrganisme
            Case "99999997"
                CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord"
                AMC_Couverture_TextBox.Text = "CMU, Tiers Payant Coordonné"
            Case "88888888"
                CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord"
                AMC_Couverture_TextBox.Text = "CMU, Tiers Payant Coordonné"
            Case "55555551"
                'CurrentBenéficiaire.AMC_TypeContrat = "CMU"
                AMC_Couverture_TextBox.Text = "Sortant de CMU"
            Case "75500017"
                CurrentBenéficiaire.AMC_TypeContrat = "AME"
                AMC_Couverture_TextBox.Text = "Aide Médicale d'Etat"
        End Select

        'If assuré_presente_attestation_cmu_gestion_séparée = True Then
        '    AMC_Couverture_TextBox.Text = "CMU"
        '    CurrentBenéficiaire.AMC_TypeContrat = "CMU"
        'End If
        If AMC_Intitule_TextBox.Text = "" And AMC_NumAMC_TextBox.Text <> "" Then
            MyMsg_Box.Presentation("Officine ?", "Numéro Assurance complémentaire inconnu. Voulez vous créer cette assurance", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = MsgBoxResult.Yes Then
                Dim amc_edit As New AMC_edition
                amc_edit.NumTextBox.Text = AMC_NumAMC_TextBox.Text
                amc_edit.NumTextBox.Enabled = False
                amc_edit.ShowDialog()
                AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
            Else
                AMC_NumAMC_TextBox.Text = ""
                AMC_Intitule_TextBox.Text = ""
                CurrentBenéficiaire.AMC_NumOrganisme = ""
                AMC_NumAMC_TextBox.Select()
            End If
        End If
        'MsgBox("c" & vbCrLf & "AMC_NumMutuelle: " & CurrentBenéficiaire.AMC_NumMutuelle & vbCrLf & "G107C1: " & CurrentBenéficiaire.G107C1 _
        '       & " AMC_NumOrganisme: " & CurrentBenéficiaire.AMC_NumOrganisme & vbCrLf & "G109C1: " & CurrentBenéficiaire.G109C1)
    End Sub


    Private Sub MUT_NumMutuelle_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MUT_NumMutuelle_TextBox.Validated
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If
        If MUT_NumMutuelle_TextBox.Text = "" Then Exit Sub

        If jeux_d_essai_CAS_STANDARD.Visible = True Then
            Exit Sub
        End If
        If NuméroDAMCAssociéeToolStripMenuItem.Checked = False Then
            CurrentBenéficiaire.AMC_NumOrganisme = ""
            CurrentBenéficiaire.G109C1 = ""
        End If
   
        If MUT_NumMutuelle_TextBox.Text = "88888888" And InStr(AMC_Piècejustificative_ComboBox.Text, "carte Vitale") = 1 Then
            assuré_presente_attestation_cmu_gestion_séparée = False
            MyMsg_Box.Presentation("Officine ?", "L'assuré a-t-il une attestation papier AMC pour voir si mode de gestion séparée possible? (sinon assimilation au mode de gestion unique", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = MsgBoxResult.Yes Then
                '---------------------------------------------------------------------------------
                'RAZ des valeurs complementaires
                CurrentBenéficiaire.G107C1 = ""
                CurrentBenéficiaire.G107C2 = ""
                CurrentBenéficiaire.G107C3 = ""
                CurrentBenéficiaire.G107C4 = ""
                CurrentBenéficiaire.G107C5 = ""
                CurrentBenéficiaire.G107C6 = ""
                CurrentBenéficiaire.G109C1 = ""
                CurrentBenéficiaire.G109C2 = ""
                CurrentBenéficiaire.G109C3 = ""
                CurrentBenéficiaire.G109C4 = ""
                CurrentBenéficiaire.G109C5 = ""
                CurrentBenéficiaire.G109C6 = ""
                CurrentBenéficiaire.G109C7 = ""
                CurrentBenéficiaire.G109C8 = ""
                CurrentBenéficiaire.G109C9 = ""
                CurrentBenéficiaire.G109C10 = ""
                CurrentBenéficiaire.G109C11 = ""
                CurrentBenéficiaire.G109C12 = ""

                CurrentBenéficiaire.AMC_Code_Aiguillage_STS = ""
                CurrentBenéficiaire.AMC_CodeRoutage = ""
                CurrentBenéficiaire.AMC_Critère_secondaire = ""
                CurrentBenéficiaire.AMC_DateDébut = ""
                CurrentBenéficiaire.AMC_DateFin = ""
                CurrentBenéficiaire.AMC_IdentifiantAMC = ""
                CurrentBenéficiaire.AMC_IdHote = ""
                CurrentBenéficiaire.AMC_Indicateurdetrairement = ""
                CurrentBenéficiaire.AMC_NomDomaine = ""
                CurrentBenéficiaire.AMC_NumAdherent = ""
                CurrentBenéficiaire.AMC_IdentifiantAMC = ""
                CurrentBenéficiaire.AMC_NumMutuelle = ""
                CurrentBenéficiaire.AMC_Type_Convention = ""
                CurrentBenéficiaire.AMC_TypeContrat = ""
                CurrentBenéficiaire.AMC_Critère_secondaire = ""

                CurrentConvention.clear()

                AMC_Intitule_TextBox.Text = ""
                AMC_Numadhérent_TextBox.Text = ""
                AMC_IdentifiantAMC_TextBox.Text = ""
                CurrentBenéficiaire.AMC_TypeContrat = ""
                AMC_Couverture_TextBox.Text = ""
                AMC_DateDebut_MaskedTextBox.Text = ""
                AMC_DateFin_MaskedTextBox.Text = ""
                AMC_Indicateurdetrairement_TextBox.Text = ""
                AMC_Piècejustificative_ComboBox.Text = ""
                AMC_CodeRoutage_TextBox.Text = ""
                AMC_IdHote_TextBox.Text = ""
                AMC_NomDomaine_TextBox.Text = ""
                AMC_Code_Aiguillage_STS_TextBox.Text = ""
                AMC_Type_Convention_TextBox.Text = ""
                AMC_Critère_secondaire_TextBox.Text = ""
                AMC_Intitule_TextBox.Text = ""
                AMC_Piècejustificative_ComboBox.SelectedIndex = 2
                While AMC_Piècejustificative_ComboBox.Items.Count > 4
                    AMC_Piècejustificative_ComboBox.Items.RemoveAt(4)
                End While
                AMC_Couverture_TextBox.Text = "CMU"
                CurrentBenéficiaire.AMC_TypeContrat = "CMU"
                assuré_presente_attestation_cmu_gestion_séparée = True
                Exit Sub
            End If
        End If
        If CurrentBenéficiaire.AMC_NumMutuelle = MUT_NumMutuelle_TextBox.Text And _
            CurrentBenéficiaire.AMC_NumMutuelle <> "99999997" And _
             CurrentBenéficiaire.AMC_NumMutuelle <> "88888888" And _
              CurrentBenéficiaire.AMC_NumMutuelle <> "55555551" And _
              CurrentBenéficiaire.AMC_NumMutuelle <> "75500017" Then
            AMC_Intitule_TextBox.Text = Me.AmC_OrganismesTableAdapter1.Select_Intitulé(CurrentBenéficiaire.AMC_NumMutuelle)
            Exit Sub 'no change
        End If
        CurrentBenéficiaire.AMC_NumMutuelle = MUT_NumMutuelle_TextBox.Text
        AMC_Intitule_TextBox.Text = Me.AmC_OrganismesTableAdapter1.Select_Intitulé(CurrentBenéficiaire.AMC_NumMutuelle)
        'MsgBox(CurrentBenéficiaire.AMC_NumMutuelle)
        Select Case CurrentBenéficiaire.AMC_NumMutuelle
            Case "99999997"
                CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord"
                AMC_Couverture_TextBox.Text = "CMU, Tiers Payant Coordonné"
            Case "88888888"
                CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord"
                AMC_Couverture_TextBox.Text = "CMU, Tiers Payant Coordonné"
            Case "55555551"
                AMC_Couverture_TextBox.Text = "Sortant de CMU"
            Case "75500017"
                CurrentBenéficiaire.AMC_TypeContrat = "AME"
                AMC_Couverture_TextBox.Text = "Aide Médicale d'Etat"

        End Select
        If sender Is Nothing Then Exit Sub 'pour que la sub ne concerne que les data validés "à la main", exit sub si le AMC_NumAMC_TextBox.text est renseigné par le logiciel
        '---------------------------------------------------------------------------------

        'RAZ des valeurs complementaires
        If CurrentBenéficiaire.G107C1 <> "55555551" Then
            CurrentBenéficiaire.G107C1 = ""
        End If

        CurrentBenéficiaire.G107C2 = ""
        CurrentBenéficiaire.G107C3 = ""
        CurrentBenéficiaire.G107C4 = ""
        CurrentBenéficiaire.G107C5 = ""
        CurrentBenéficiaire.G107C6 = ""
        CurrentBenéficiaire.G109C1 = ""
        CurrentBenéficiaire.G109C2 = ""
        CurrentBenéficiaire.G109C3 = ""
        CurrentBenéficiaire.G109C4 = ""
        CurrentBenéficiaire.G109C5 = ""
        CurrentBenéficiaire.G109C6 = ""
        CurrentBenéficiaire.G109C7 = ""
        CurrentBenéficiaire.G109C8 = ""
        CurrentBenéficiaire.G109C9 = ""
        CurrentBenéficiaire.G109C10 = ""
        CurrentBenéficiaire.G109C11 = ""
        CurrentBenéficiaire.G109C12 = ""

        CurrentBenéficiaire.AMC_Code_Aiguillage_STS = ""
        CurrentBenéficiaire.AMC_CodeRoutage = ""
        CurrentBenéficiaire.AMC_Critère_secondaire = ""
        CurrentBenéficiaire.AMC_DateDébut = ""
        CurrentBenéficiaire.AMC_DateFin = ""
        CurrentBenéficiaire.AMC_IdentifiantAMC = ""
        CurrentBenéficiaire.AMC_IdHote = ""
        CurrentBenéficiaire.AMC_Indicateurdetrairement = ""
        CurrentBenéficiaire.AMC_NomDomaine = ""
        CurrentBenéficiaire.AMC_NumAdherent = ""
        CurrentBenéficiaire.AMC_IdentifiantAMC = ""
        CurrentBenéficiaire.AMC_NumMutuelle = ""
        If NuméroDAMCAssociéeToolStripMenuItem.Checked = False Then
            CurrentBenéficiaire.AMC_NumOrganisme = ""
            CurrentBenéficiaire.G109C1 = ""
        End If
        'CurrentBenéficiaire.AMC_Piecejustificative = ""
        CurrentBenéficiaire.AMC_Type_Convention = ""
        CurrentBenéficiaire.AMC_TypeContrat = ""
        CurrentBenéficiaire.AMC_Critère_secondaire = ""

        CurrentConvention.clear()

        AMC_Intitule_TextBox.Text = ""
        AMC_Numadhérent_TextBox.Text = ""
        AMC_IdentifiantAMC_TextBox.Text = ""
        CurrentBenéficiaire.AMC_TypeContrat = ""
        AMC_Couverture_TextBox.Text = ""
        AMC_DateDebut_MaskedTextBox.Text = ""
        AMC_DateFin_MaskedTextBox.Text = ""
        AMC_Indicateurdetrairement_TextBox.Text = ""
        AMC_Piècejustificative_ComboBox.Text = ""
        AMC_CodeRoutage_TextBox.Text = ""
        AMC_IdHote_TextBox.Text = ""
        AMC_NomDomaine_TextBox.Text = ""
        AMC_Code_Aiguillage_STS_TextBox.Text = ""
        If NuméroDAMCAssociéeToolStripMenuItem.Checked = False Then

            AMC_NumAMC_TextBox.Text = ""
            AMC_Intitule_TextBox.Text = ""
        End If
        AMC_Critère_secondaire_TextBox.Text = ""
        CurrentBenéficiaire.AMC_NumMutuelle = MUT_NumMutuelle_TextBox.Text
        '---------------------------------------------------------------------------------
        AMC_Intitule_TextBox.Text = Me.AmC_OrganismesTableAdapter1.Select_Intitulé(CurrentBenéficiaire.AMC_NumMutuelle)

        Select Case CurrentBenéficiaire.AMC_NumMutuelle
            Case "99999997"
                CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord"
                AMC_Couverture_TextBox.Text = "CMU, Tiers Payant Coordonné"
            Case "88888888"
                CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord"
                AMC_Couverture_TextBox.Text = "CMU, Tiers Payant Coordonné"
            Case "55555551"
                'CurrentBenéficiaire.AMC_TypeContrat = "CMU"
                AMC_Couverture_TextBox.Text = "Sortant de CMU"
            Case "75500017"
                CurrentBenéficiaire.AMC_TypeContrat = "AME"
                AMC_Couverture_TextBox.Text = "Aide Médicale d'Etat"

        End Select
    End Sub
    Private Sub AMC_Numadhérent_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_Numadhérent_TextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If


        AMC_Numadhérent_TextBox.Text = UCase(AMC_Numadhérent_TextBox.Text)
        CurrentBenéficiaire.AMC_NumAdherent = AMC_Numadhérent_TextBox.Text
    End Sub

    Private Sub AMC_DateDebut_MaskedTextBox_EnabledChanged(sender As Object, e As EventArgs) Handles AMC_DateDebut_MaskedTextBox.EnabledChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If


    End Sub
    Private Sub AMC_DateDebut_MaskedTextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_DateDebut_MaskedTextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If AMC_DateDebut_MaskedTextBox.Text <> "  /  /" Then
            If AMC_DateDebut_MaskedTextBox.Text.Length <> 10 Then
                 Bandeau_info_bas_show("Saisie invalide")
                AMC_DateDebut_MaskedTextBox.Text = ""
                System.Threading.Thread.Sleep(500)
                AMC_DateDebut_MaskedTextBox.Select()
                AMC_DateDebut_MaskedTextBox.Select(0, 0)
                Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
            End If
        End If
        CurrentBenéficiaire.AMC_DateDébut = DateString_To_DateVitale(AMC_DateDebut_MaskedTextBox.Text)

    End Sub
    Private Sub AMC_DateFin_MaskedTextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_DateFin_MaskedTextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If AMC_DateFin_MaskedTextBox.Text <> "  /  /" Then
            If AMC_DateFin_MaskedTextBox.Text.Length <> 10 Then
                 Bandeau_info_bas_show("Saisie invalide")
                AMC_DateFin_MaskedTextBox.Text = ""
                System.Threading.Thread.Sleep(500)
                AMC_DateFin_MaskedTextBox.Select()
                AMC_DateFin_MaskedTextBox.Select(0, 0)
                Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
            End If
        End If
        CurrentBenéficiaire.AMC_DateFin = DateString_To_DateVitale(AMC_DateFin_MaskedTextBox.Text)

    End Sub
    Private Sub AMC_Code_Aiguillage_STS_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_Code_Aiguillage_STS_TextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If AMC_Code_Aiguillage_STS_TextBox.Text <> "4" And AMC_Code_Aiguillage_STS_TextBox.Text <> "8" And _
        AMC_Code_Aiguillage_STS_TextBox.Text <> "M" And AMC_Code_Aiguillage_STS_TextBox.Text <> "R" And AMC_Code_Aiguillage_STS_TextBox.Text <> "" Then
            MyMsg_Box.Presentation("Officine !", "CODE STS INCOHERENT", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            AMC_Code_Aiguillage_STS_TextBox.Text = ""
        End If
        CurrentBenéficiaire.AMC_Code_Aiguillage_STS = AMC_Code_Aiguillage_STS_TextBox.Text
    End Sub
    Private Sub AMC_Indicateurdetrairement_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_Indicateurdetrairement_TextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        CurrentBenéficiaire.AMC_Indicateurdetrairement = AMC_Indicateurdetrairement_TextBox.Text

    End Sub

    Private Sub AMC_Piècejustificative_ComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AMC_Piècejustificative_ComboBox.SelectedIndexChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Select Case AMC_Piècejustificative_ComboBox.SelectedIndex
            Case 0 'aucune pièce justificative
                AMC_NumAMC_TextBox.ReadOnly = False
                AMC_Indicateurdetrairement_TextBox.ReadOnly = False
                AMC_Numadhérent_TextBox.ReadOnly = False
                AMC_DateDebut_MaskedTextBox.ReadOnly = False
                AMC_DateFin_MaskedTextBox.ReadOnly = False
                AMC_CodeRoutage_TextBox.ReadOnly = False
                AMC_IdHote_TextBox.ReadOnly = False
                AMC_NomDomaine_TextBox.ReadOnly = False
                AMC_Code_Aiguillage_STS_TextBox.ReadOnly = False
                CurrentBenéficiaire.G111C1 = ""

            Case 1, 2, 3 'consultation serveur de droits, autre, prise en charge de la part complémentaire
                AMC_NumAMC_TextBox.ReadOnly = False
                MUT_NumMutuelle_TextBox.ReadOnly = False
                AMC_Numadhérent_TextBox.ReadOnly = False
                AMC_DateDebut_MaskedTextBox.ReadOnly = False
                AMC_DateFin_MaskedTextBox.ReadOnly = False
                AMC_Code_Aiguillage_STS_TextBox.ReadOnly = False
                AMC_Indicateurdetrairement_TextBox.ReadOnly = False
                AMC_CodeRoutage_TextBox.ReadOnly = False
                AMC_IdHote_TextBox.ReadOnly = False
                AMC_NomDomaine_TextBox.ReadOnly = False
                AMC_Type_Convention_TextBox.ReadOnly = False
                AMC_Critère_secondaire_TextBox.ReadOnly = False
                CurrentBenéficiaire.G111C1 = ""




            Case 4 'carte Vitale
                If CurrentBenéficiaire.G107C1 <> "" Then 'Groupe 107 : Données Mutuelle en carte
                    If CurrentBenéficiaire.G107C4 <> "" Then
                        AMC_NumAMC_TextBox.Text = Mid(CurrentBenéficiaire.G107C5, 1, 10)
                        AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
                    End If
                    MUT_NumMutuelle_TextBox.Text = CurrentBenéficiaire.G107C1
                    AMC_Numadhérent_TextBox.Text = ""
                    If CurrentBenéficiaire.AMC_TypeContrat <> "CMU" And CurrentBenéficiaire.AMC_TypeContrat <> "CMU-TPcoord" And CurrentBenéficiaire.AMC_TypeContrat <> "AME" Then
                        AMC_Couverture_TextBox.Text = CurrentBenéficiaire.AMC_TypeContrat
                    End If
                    AMC_DateDebut_MaskedTextBox.Clear()
                    AMC_DateFin_MaskedTextBox.Clear()
                    choix_période_droits_mutuelle()
                    AMC_Code_Aiguillage_STS_TextBox.Text = CurrentBenéficiaire.G107C6
                    AMC_Indicateurdetrairement_TextBox.Text = CurrentBenéficiaire.G107C3
                    AMC_CodeRoutage_TextBox.Text = ""
                    AMC_IdHote_TextBox.Text = ""
                    AMC_NomDomaine_TextBox.Text = ""
                    AMC_Type_Convention_TextBox.Text = ""
                    AMC_Critère_secondaire_TextBox.Text = ""
                    If CurrentBenéficiaire.G107C2 <> "" Then
                        If Mid(CurrentBenéficiaire.G107C2, 2, 1) = "N" Then
                            MyMsg_Box.Presentation("Officine !", "ATTTENTION, PHARMACIE NON GARANTIE", False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                        End If
                    End If

                ElseIf CurrentBenéficiaire.G109C1 <> "" Then 'Groupe 109 : Données complémentaire en carte
                    AMC_NumAMC_TextBox.Text = CurrentBenéficiaire.G109C1
                    AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
                    MUT_NumMutuelle_TextBox.Text = ""
                    AMC_Numadhérent_TextBox.Text = CurrentBenéficiaire.G109C3
                    If CurrentBenéficiaire.AMC_TypeContrat <> "CMU" And CurrentBenéficiaire.AMC_TypeContrat <> "CMU-TPcoord" And CurrentBenéficiaire.AMC_TypeContrat <> "AME" Then
                        AMC_Couverture_TextBox.Text = CurrentBenéficiaire.AMC_TypeContrat
                    End If
                    If CurrentBenéficiaire.G109C5 <> "" Then
                        AMC_DateDebut_MaskedTextBox.Text = Mid(CurrentBenéficiaire.G109C5, 7, 2) + "/" + Mid(CurrentBenéficiaire.G109C5, 5, 2) + "/" + Mid(CurrentBenéficiaire.G109C5, 1, 4)
                    Else
                        AMC_DateDebut_MaskedTextBox.Text = ""
                    End If
                    If CurrentBenéficiaire.G109C6 <> "" Then
                        AMC_DateFin_MaskedTextBox.Text = Mid(CurrentBenéficiaire.G109C6, 7, 2) + "/" + Mid(CurrentBenéficiaire.G109C6, 5, 2) + "/" + Mid(CurrentBenéficiaire.G109C6, 1, 4)
                    Else
                        AMC_DateFin_MaskedTextBox.Text = ""
                    End If
                    AMC_Code_Aiguillage_STS_TextBox.Text = CurrentBenéficiaire.G109C10
                    AMC_Indicateurdetrairement_TextBox.Text = CurrentBenéficiaire.G109C4
                    If CurrentBenéficiaire.G109C7 <> "" And CurrentBenéficiaire.G109C8 <> "" And CurrentBenéficiaire.G109C9 <> "" Then
                        AMC_CodeRoutage_TextBox.Text = CurrentBenéficiaire.G109C7
                        AMC_IdHote_TextBox.Text = CurrentBenéficiaire.G109C8
                        AMC_NomDomaine_TextBox.Text = CurrentBenéficiaire.G109C9
                    Else
                        CurrentBeneficiaireRichTextBox.AppendText(Chr(10) + "Données Mutuelle: Données d'adressage incomplètes")
                        CurrentBenéficiaire.G109C7 = ""
                        CurrentBenéficiaire.G109C8 = ""
                        CurrentBenéficiaire.G109C9 = ""
                    End If
                    AMC_Type_Convention_TextBox.Text = ""
                    AMC_Critère_secondaire_TextBox.Text = ""
                End If

                AMC_NumAMC_TextBox.ReadOnly = True
                MUT_NumMutuelle_TextBox.ReadOnly = True
                AMC_Numadhérent_TextBox.ReadOnly = True
                AMC_DateDebut_MaskedTextBox.ReadOnly = True
                AMC_DateFin_MaskedTextBox.ReadOnly = True
                AMC_Code_Aiguillage_STS_TextBox.ReadOnly = True
                AMC_Indicateurdetrairement_TextBox.ReadOnly = True
                AMC_CodeRoutage_TextBox.ReadOnly = True
                AMC_IdHote_TextBox.ReadOnly = True
                AMC_NomDomaine_TextBox.ReadOnly = True
                AMC_Type_Convention_TextBox.ReadOnly = True
                AMC_Critère_secondaire_TextBox.ReadOnly = True
                AMC_NumAMC_TextBox_Validated(Nothing, Nothing)
                MUT_NumMutuelle_TextBox_Validated(Nothing, Nothing)
                AMC_Numadhérent_TextBox_Validated(Nothing, Nothing)
                AMC_DateDebut_MaskedTextBox_Validated(Nothing, Nothing)
                AMC_DateFin_MaskedTextBox_Validated(Nothing, Nothing)
                AMC_Code_Aiguillage_STS_TextBox_Validated(Nothing, Nothing)
                AMC_Indicateurdetrairement_TextBox_Validated(Nothing, Nothing)
                AMC_CodeRoutage_TextBox_Validated(Nothing, Nothing)
                AMC_IdHote_TextBox_Validated(Nothing, Nothing)
                AMC_NomDomaine_TextBox_Validated(Nothing, Nothing)
                AMC_Type_Convention_TextBox_Validated(Nothing, Nothing)
                AMC_Critère_secondaire_TextBox_Validated(Nothing, Nothing)

        End Select
        CurrentBenéficiaire.AMC_Piecejustificative = AMC_Piècejustificative_ComboBox.SelectedIndex.ToString
    End Sub
    Private Sub AMC_CodeRoutage_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_CodeRoutage_TextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        CurrentBenéficiaire.AMC_CodeRoutage = AMC_CodeRoutage_TextBox.Text
    End Sub
    Private Sub AMC_IdHote_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_IdHote_TextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        CurrentBenéficiaire.AMC_IdHote = AMC_IdHote_TextBox.Text
    End Sub
    Private Sub AMC_NomDomaine_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_NomDomaine_TextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        CurrentBenéficiaire.AMC_NomDomaine = AMC_NomDomaine_TextBox.Text
    End Sub
    Private Sub AMC_Type_Convention_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_Type_Convention_TextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        CurrentBenéficiaire.AMC_Type_Convention = AMC_Type_Convention_TextBox.Text
    End Sub
    Private Sub AMC_Critère_secondaire_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_Critère_secondaire_TextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        CurrentBenéficiaire.AMC_Critère_secondaire = AMC_Critère_secondaire_TextBox.Text
    End Sub
    Private Sub AMC_IdentifiantAMC_TextBox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_IdentifiantAMC_TextBox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        CurrentBenéficiaire.AMC_IdentifiantAMC = AMC_IdentifiantAMC_TextBox.Text
    End Sub




#End Region
#Region "Sauvegarde Facture, actes, bénéficiaire"
    'sauvegarde facture vers bdd
    Private Sub SaveFactureBdd(ByVal NumFacture As Integer)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim composite_convention As String = ""
        If CurrentConvention.selected = True Then
            composite_convention = CurrentConvention.Identifiant_org_signataire + "@@" + CurrentConvention.type_Identifiant_org_signataire + "@@" + CurrentConvention.critère_secondaire + _
                                    "@@" + CurrentConvention.Num_AMC + "@@" + CurrentConvention.type_Accord
        End If
        If CurrentBenéficiaire.G101C8 = Config.Data_ContaceptifUrgence_NIR Then
            CurrentFactureVitale.Bénéficiaire = "CONTRACEPTIF URGENCE MINEURE"
        End If

     
        Dim Part_AMO_Payée = False
        Dim Part_AMC_Payée = False
        If Reprise_Facture_Num > 0 Then
            If Reprise_AMO = False Then
                Part_AMO_Payée = True
            End If
            If Reprise_AMC = False Then
                Part_AMC_Payée = True
            End If
        End If
        Me.FacturesTableAdapter.SaveFacture(CurrentFactureVitale.G1110C1, CurrentFactureVitale.G1110C2, CurrentFactureVitale.G1110C3, CurrentFactureVitale.G1110C4, _
                                            CurrentFactureVitale.G1120C1, CurrentFactureVitale.G1120C2, CurrentFactureVitale.G1130C1, CurrentFactureVitale.G1130C2, _
                                            CurrentFactureVitale.G1130C3, CurrentFactureVitale.G1130C4, CurrentFactureVitale.G1130C5, CurrentFactureVitale.G1130C6, _
                                            CurrentFactureVitale.G1130C7, CurrentFactureVitale.G1130C8, CurrentFactureVitale.G1160C1, CurrentFactureVitale.G1160C2, _
                                            CurrentFactureVitale.G1211C1, CurrentFactureVitale.G1211C2, CurrentFactureVitale.G1211C3, CurrentFactureVitale.G1211C4, _
                                            CurrentFactureVitale.G1211C5, CurrentFactureVitale.G1211C6, CurrentFactureVitale.G1211C7, CurrentFactureVitale.G1213C1, _
                                            CurrentFactureVitale.G1213C2, CurrentFactureVitale.G1213C3, CurrentFactureVitale.G1213C4, CurrentFactureVitale.G1213C5, _
                                            CurrentFactureVitale.G1213C6, CurrentFactureVitale.G1213C7, CurrentFactureVitale.G1213C8, CurrentFactureVitale.G1214C1, _
                                            CurrentFactureVitale.G1214C2, CurrentFactureVitale.G1214C3, CurrentFactureVitale.G1214C4, CurrentFactureVitale.G1214C5, _
                                            CurrentFactureVitale.G1214C6, CurrentFactureVitale.G1214C7, CurrentFactureVitale.G1214C8, CurrentFactureVitale.G1230C1, _
                                            CurrentFactureVitale.G1310C1, CurrentFactureVitale.G1310C2, CurrentFactureVitale.G1310C3, CurrentFactureVitale.G1310C4, _
                                            CurrentFactureVitale.G1310C5, CurrentFactureVitale.G1321C1, CurrentFactureVitale.G1321C2, CurrentFactureVitale.G1321C3, _
                                            CurrentFactureVitale.G1321C4, CurrentFactureVitale.G1321C5, CurrentFactureVitale.G1321C6, CurrentFactureVitale.G1321C7, _
                                            CurrentFactureVitale.G1321C8, CurrentFactureVitale.G1321C9, CurrentFactureVitale.G1321C10, CurrentFactureVitale.G1321C11, _
                                            CurrentFactureVitale.G1321C12, CurrentFactureVitale.G1330C1, CurrentFactureVitale.G1330C2, CurrentFactureVitale.G1410C1, _
                                            CurrentFactureVitale.G1420C1, CurrentFactureVitale.G1420C2, CurrentFactureVitale.G1420C3, CurrentFactureVitale.G1440C1, _
                                            CurrentFactureVitale.G1440C2, CurrentFactureVitale.G1440C3, CurrentFactureVitale.G1511C1, CurrentFactureVitale.G1511C2, _
                                            CurrentFactureVitale.G1512C1, CurrentFactureVitale.G1513C1, CurrentFactureVitale.G1513C2, CurrentFactureVitale.G1513C3, _
                                            CurrentFactureVitale.G1514C1, CurrentFactureVitale.G1514C2, CurrentFactureVitale.G1514C3, CurrentFactureVitale.G1514C4, _
                                            CurrentFactureVitale.G1910C1, CurrentFactureVitale.G1910C2, CurrentFactureVitale.G1910C3, CurrentFactureVitale.G1910C4, _
                                            CurrentFactureVitale.G1910C5, CurrentFactureVitale.G1910C6, CurrentFactureVitale.G3700C1, CurrentFactureVitale.G3700C2, _
                                            CurrentFactureVitale.G3730C1, CurrentFactureVitale.CRLdeDRE, CurrentFactureVitale.CRLdeFSE, CurrentFactureVitale.IDPrescripteur, _
                                            CurrentFactureVitale.Bénéficiaire, CurrentFactureVitale.Assuré, CurrentFactureVitale.FactureAcree, CurrentFactureVitale.ModeSecur, _
                                           composite_convention, NatureAssurance_Button.Text, CurrentFactureVitale.TP_AMO, CurrentFactureVitale.TP_AMC, CurrentFactureVitale.G1120C13, CurrentFactureVitale.G1120C14, _
                                           CurrentFactureVitale.G1511C1, Reprise_Facture_Num, Part_AMO_Payée, Part_AMC_Payée, False, NumFacture)


        For i = 1 To CurrentFactureVitale.TabLigneFacture.Length - 1
            Me.Facture_LigneFactureTableAdapter1.Insert2(i.ToString, CurrentFactureVitale.TabLigneFacture(i).G1610C1, CurrentFactureVitale.TabLigneFacture(i).G1610C2, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G1610C3, CurrentFactureVitale.TabLigneFacture(i).G1610C4, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G1610C5, CurrentFactureVitale.TabLigneFacture(i).G1610C6, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G1610C7, CurrentFactureVitale.TabLigneFacture(i).G1610C8, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G1610C9, CurrentFactureVitale.TabLigneFacture(i).G1610C10, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G1610C11, CurrentFactureVitale.TabLigneFacture(i).G1610C12, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G1610C13, CurrentFactureVitale.TabLigneFacture(i).G1610C14, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G1610C15, CurrentFactureVitale.TabLigneFacture(i).G1610C16, _
                                                         CurrentFactureVitale.num, CurrentFactureVitale.TabLigneFacture(i).G1820C2, CurrentFactureVitale.TabLigneFacture(i).G1840C2, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G1840C3, CurrentFactureVitale.TabLigneFacture(i).G1840C4, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G1850C2, CurrentFactureVitale.TabLigneFacture(i).G2000C2, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G2010C2, CurrentFactureVitale.TabLigneFacture(i).G2030C2, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G2030C3, CurrentFactureVitale.TabLigneFacture(i).G3710C2, _
                                                         CurrentFactureVitale.TabLigneFacture(i).G3710C3, CurrentFactureVitale.TabLigneFacture(i).G3710_Paramètes)




            If Val(CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C1) <> 0 Then
                Me.Facture_DétailCodeCIPTableAdapter1.Insert(i.ToString, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C1, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C2, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C3, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C4, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C5, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C6, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C7, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C8, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C9, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C10, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C11, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C12, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C13, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C14, CurrentFactureVitale.TabLigneFacture(i).DétailCodeCIP.G1740C15, CurrentFactureVitale.G1110C1)
            ElseIf Not CurrentFactureVitale.TabLigneFacture(i).DétailLpp Is Nothing Then
                If Val(CurrentFactureVitale.TabLigneFacture(i).DétailLpp(0).G1730C1) <> 0 Then
                    For j = 0 To CurrentFactureVitale.TabLigneFacture(i).DétailLpp.Length - 2
                        Me.Facture_DétailLppTableAdapter1.Insert(i, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C1, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C2, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C3, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C4, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C5, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C6, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C7, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C8, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C9, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C10, CurrentFactureVitale.TabLigneFacture(i).DétailLpp(j).G1730C11, CurrentFactureVitale.G1110C1)
                    Next
                End If
            End If

        Next
    End Sub

    'sauvegarde facture vers fichier
    Public Sub SaveFactureFichier(ByVal NumFacture As Integer, ByVal FactureAcreer As String)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim NumFactureString As String = NumFacture.ToString
        While NumFactureString.Length < 9
            NumFactureString = "0" & NumFactureString
        End While
        ConfigXMLelementliste = ConfigXml.GetElementsByTagName("Idposte")
        Dim idposte = ConfigXMLelementliste.Item(0).InnerText


        Select Case ModeSecur

            Case "4" 'mode desynchronisé

                Select Case FactureAcreer

                    Case "1" 'la fonction génèrera une FSE
                        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@"
                        TailleMax = 22
                        SGD_LireChamp(NumeroSessionFacture, 151, 1, 1, ValeurChamp, TailleMax) 'Complément FSE désynchronisée
                        CurrentFactureVitale.CRLdeFSE = ValeurChamp
                        Dim fichierFSE As String = Config.LocalNetwork_ServerName & "\Factures\Desync\" + ValeurChamp + "@" + NumFactureString + "@" + idposte + "@" + Format(Now, "yyyyMMddHHmmss") + ".fse"
                        SGD_LireChampFichier(NumeroSessionFacture, 151, 1, 2, fichierFSE)

                    Case "2" 'la fonction génèrera une DRE
                        ValeurChamp = "@@@@@@@@@@@@@@@@@@@"
                        TailleMax = 19
                        SGD_LireChamp(NumeroSessionFacture, 161, 1, 1, ValeurChamp, TailleMax) 'Complément DRE désynchronisée
                        CurrentFactureVitale.CRLdeDRE = ValeurChamp
                        Dim fichierDRE As String = Config.LocalNetwork_ServerName & "\Factures\Desync\" + ValeurChamp + "@" + NumFactureString + "@" + idposte + "@" + Format(Now, "yyyyMMddHHmmss") + ".dre"
                        SGD_LireChampFichier(NumeroSessionFacture, 161, 1, 2, fichierDRE)

                    Case "3" 'la fonction génèrera une FSE et une DRE
                        'FSE
                        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@"
                        TailleMax = 22
                        SGD_LireChamp(NumeroSessionFacture, 151, 1, 1, ValeurChamp, TailleMax) 'Complément FSE désynchronisée
                        CurrentFactureVitale.CRLdeFSE = ValeurChamp
                        Dim fichierFSE As String = Config.LocalNetwork_ServerName & "\Factures\Desync\" + ValeurChamp + "@" + NumFactureString + "@" + idposte + "@" + Format(Now, "yyyyMMddHHmmss") + ".fse"
                        SGD_LireChampFichier(NumeroSessionFacture, 151, 1, 2, fichierFSE)
                        'DRE
                        ValeurChamp = "@@@@@@@@@@@@@@@@@@@"
                        TailleMax = 19
                        SGD_LireChamp(NumeroSessionFacture, 161, 1, 1, ValeurChamp, TailleMax) 'Complément DRE désynchronisée
                        CurrentFactureVitale.CRLdeDRE = ValeurChamp
                        Dim fichierDRE As String = Config.LocalNetwork_ServerName & "\Factures\Desync\" + ValeurChamp + "@" + NumFactureString + "@" + idposte + "@" + Format(Now, "yyyyMMddHHmmss") + ".dre"
                        SGD_LireChampFichier(NumeroSessionFacture, 161, 1, 2, fichierDRE)
                End Select

            Case Else 'tout mode sauf desynchronisé
                Select Case FactureAcreer

                    Case "1" 'la fonction génèrera une FSE
                        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
                        TailleMax = 40
                        SGD_LireChamp(NumeroSessionFacture, 150, 1, 1, ValeurChamp, TailleMax) 'ValeurChamp=CRL de FSE
                        CurrentFactureVitale.CRLdeFSE = ValeurChamp
                        'FacturesTableAdapter.Insert1(Val(NumFacture), ValeurChamp)
                        Dim fichierFSE As String = Config.LocalNetwork_ServerName & "\Factures\" + ValeurChamp + "@" + NumFactureString + "@" + idposte + "@" + Format(Now, "yyyyMMddHHmmss") + ".fse"
                        SGD_LireChampFichier(NumeroSessionFacture, 150, 1, 2, fichierFSE)

                    Case "2" 'la fonction génèrera une DRE
                        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
                        TailleMax = 71
                        SGD_LireChamp(NumeroSessionFacture, 160, 1, 1, ValeurChamp, TailleMax) 'ValeurChamp=CRL de DRE
                        CurrentFactureVitale.CRLdeDRE = ValeurChamp
                        Dim fichierDRE As String = Config.LocalNetwork_ServerName & "\Factures\" + ValeurChamp + "@" + NumFactureString + "@" + idposte + "@" + Format(Now, "yyyyMMddHHmmss") + ".dre"
                        SGD_LireChampFichier(NumeroSessionFacture, 160, 1, 2, fichierDRE)

                    Case "3" 'la fonction génèrera une FSE et une DRE
                        'FSE
                        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
                        TailleMax = 40
                        SGD_LireChamp(NumeroSessionFacture, 150, 1, 1, ValeurChamp, TailleMax) 'ValeurChamp=CRL de FSE
                        CurrentFactureVitale.CRLdeFSE = ValeurChamp
                        Dim fichierFSE As String = Config.LocalNetwork_ServerName & "\Factures\" + ValeurChamp + "@" + NumFactureString + "@" + idposte + "@" + Format(Now, "yyyyMMddHHmmss") + ".fse"
                        SGD_LireChampFichier(NumeroSessionFacture, 150, 1, 2, fichierFSE)
                        'DRE
                        ValeurChamp = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
                        TailleMax = 71
                        SGD_LireChamp(NumeroSessionFacture, 160, 1, 1, ValeurChamp, TailleMax) 'ValeurChamp=CRL de DRE
                        CurrentFactureVitale.CRLdeDRE = ValeurChamp
                        Dim fichierDRE As String = Config.LocalNetwork_ServerName & "\Factures\" + ValeurChamp + "@" + NumFactureString + "@" + idposte + "@" + Format(Now, "yyyyMMddHHmmss") + ".dre"
                        SGD_LireChampFichier(NumeroSessionFacture, 160, 1, 2, fichierDRE)
                End Select
        End Select

    End Sub

    'Sauvegarde Actes
    Public Sub SauvegardeActes(ByVal LigneVente As Integer, ByVal NumFacturesSV As String, ByVal NumFactureVenteDirecte As String)
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim NIR As String = ""
        Dim Nom As String = ""
        Dim Prénom As String = ""
        Dim DateActe As String = ""
        Dim TypeActe As String = ""
        Dim CIP As String = ""
        Dim EAN13 As String = ""
        Dim CodeActe As String = ""
        Dim Désignation As String = ""
        Dim Quantité As String = ""
        Dim Prix_Unitaire As Single = 0
        Dim Tarif_Remboursement As Single = 0
        Dim Total As String = ""
        Dim Remise As String = ""
        Dim TauxRmbrsmnt As Integer = 0
        Dim LPP_Type_prestation As String = ""
        Dim LPP_Ref As String = ""
        Dim LPP_Quantité As Integer = 0
        Dim Ligne_Facture_SV As String
        Dim TVA As Single
        Dim prix_non_remisé As Decimal = 0
        Dim CAB As String = ""
        If CurrentBenéficiaire.G104C9 <> "" Then
            NIR = CurrentBenéficiaire.G104C9
        Else
            NIR = CurrentBenéficiaire.G101C8
        End If


        Nom = CurrentBenéficiaire.G104C1
        Prénom = CurrentBenéficiaire.G104C3
        DateActe = Format(DateExecution.Value, "yyyyMMddHHmmss")


        TypeActe = Vente(VenteType.Index, LigneVente).Value
        CIP = Vente(VenteCIP.Index, LigneVente).Value
        EAN13 = Vente(VenteEAN13.Index, LigneVente).Value
        CAB = Vente(Ventecab.Index, LigneVente).Value
        CodeActe = Vente(VenteCodeActe.Index, LigneVente).Value
        Désignation = Vente(VenteDésignation.Index, LigneVente).Value
        If Désignation = "" Then
            Désignation = Vente(Vente_produits.Index, LigneVente).Value
        End If
        Quantité = Vente(VenteQuantité.Index, LigneVente).Value
        Prix_Unitaire = Vente(VentePrix.Index, LigneVente).Value
        Total = Vente(VenteTotal.Index, LigneVente).Value.ToString
        Try
            prix_non_remisé = CDec(Vente(Vente_prix_non_remisé.Index, LigneVente).Value.ToString)
        Catch ex As Exception
            prix_non_remisé = 0
        End Try

        If Me.CodePrestationsTableAdapter.SelectTypeNomenclatureByCodeActe(CodeActe) = "LPP" And TypeActe <> "Vente Directe" Then
            If Vente(Vente_LPP_Kit.Index, LigneVente).Value = False Then
                LPP_Type_prestation = Me.ProduitsTableAdapter.Select_LPP_Type_Service(Vente(VenteCIP.Index, LigneVente).Value.ToString, Vente(VenteEAN13.Index, LigneVente).Value.ToString, _
                                                                               Vente(Ventecab.Index, LigneVente).Value.ToString, Vente(Vente_produits.Index, LigneVente).Value.ToString)
                LPP_Quantité = Me.ProduitsTableAdapter.Select_LPP_Quantité(Vente(VenteCIP.Index, LigneVente).Value.ToString, Vente(VenteEAN13.Index, LigneVente).Value.ToString, _
                                                                             Vente(Ventecab.Index, LigneVente).Value.ToString, Vente(Vente_produits.Index, LigneVente).Value.ToString)
                Tarif_Remboursement = LPP_Quantité * Val(Me.LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, LigneVente).Value, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP) / 100
                LPP_Ref = Vente(VenteLPP.Index, LigneVente).Value.ToString
            Else
                Dim kit = Me.KitsTableAdapter.GetDataBy_Désignation_Kit(Vente(Vente_produits.Index, LigneVente).Value.ToString)
                For Each ligne_du_kit As PharmaDataSet.KitsRow In kit
                    Tarif_Remboursement = Tarif_Remboursement + (((Me.LPPTableAdapter.GetData_CodeLPP_Date(ligne_du_kit.Code_LPP, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP * ligne_du_kit.Quantité_LPP)) / 100)
                Next
            End If

        ElseIf Me.CodePrestationsTableAdapter.SelectTypeNomenclatureByCodeActe(CodeActe) = "Frais PH" Then
            Tarif_Remboursement = Vente(VenteTFRprix.Index, LigneVente).Value
            If Tarif_Remboursement = 0 And CodeActe <> "PHN" Then
                Tarif_Remboursement = Total
            End If
        ElseIf Vente(VenteType.Index, LigneVente).Value.ToString <> "Vente Directe" Then
            Tarif_Remboursement = CDbl(Vente(VentePrix.Index, LigneVente).Value)
        Else
            Tarif_Remboursement = 0
        End If

        Remise = Vente(Vente_Remise.Index, LigneVente).Value
        If Vente(VenteType.Index, LigneVente).Value.ToString <> "Vente Directe" Then
            TauxRmbrsmnt = Vente(VenteAMO.Index, LigneVente).Value.ToString
        Else
            TauxRmbrsmnt = 0
        End If
        Ligne_Facture_SV = Val(Vente(Vente_Ligne_Facture_SV.Index, LigneVente).Value)
        If Vente(VenteTVA.Index, LigneVente).Value <> "" Then
            TVA = Vente(VenteTVA.Index, LigneVente).Value
        Else
            TVA = 0
        End If
        Dim NumActe As Integer = Me.ActesTableAdapter.SelectMaxNumActe + 1
        Dim commander = True
        If InStr(Désignation, "Honoraire de Dispensation") = 1 Or Reprise_Facture_Num <> 0 Then
            commander = False
        End If
        If EAN13 = "" And CIP = "" And CAB <> "" Then
            EAN13 = CAB
        End If
        Me.ActesTableAdapter.Insert2(NumActe, Nom, Prénom, DateActe, TypeActe, CIP, EAN13, CodeActe, Désignation, Quantité, Prix_Unitaire, Tarif_Remboursement, Total, Remise, NumFacturesSV, NIR, NumFactureVenteDirecte, TauxRmbrsmnt, LPP_Type_prestation, LPP_Ref, LPP_Quantité, Ligne_Facture_SV, TVA, DP_Poso(LigneVente).ToString, DP_Rect(LigneVente).ToString, current_User.ID, prix_non_remisé, commander, CAB)
        Vente(Vente_NumActe.Index, LigneVente).Value = NumActe

    End Sub

    'Enregistrement Données Assuré
    Public Sub EnregistreDonnéesClientversBDD()

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If CurrentBenéficiaire.G101C8 <> "" Then
            If CurrentBenéficiaire.G101C8 <> Config.Data_ContaceptifUrgence_NIR And ComboBoxLECTURE_VITALE.Text <> "" Then

                If ClientConnu() = False Then
                    Dim periode As Integer = 0
                    Try
                        periode = Chronique_Periode_MyCombobox.SelectedIndex
                    Catch ex As Exception
                    End Try
                    Me.VitaleTableAdapter.Insert1(CurrentBenéficiaire.G101C1, CurrentBenéficiaire.G101C2, CurrentBenéficiaire.G101C3, CurrentBenéficiaire.G101C7, _
                                                  CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G101C9, CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, _
                                                  CurrentBenéficiaire.G101C12, CurrentBenéficiaire.G101C13, CurrentBenéficiaire.G102C1, CurrentBenéficiaire.G102C2, _
                                                  CurrentBenéficiaire.G102C3, CurrentBenéficiaire.G103C1, CurrentBenéficiaire.G103C2, CurrentBenéficiaire.G103C3, _
                                                  CurrentBenéficiaire.G103C4, CurrentBenéficiaire.G103C5, CurrentBenéficiaire.G103C6, CurrentBenéficiaire.G103C7, _
                                                  CurrentBenéficiaire.G103C8, CurrentBenéficiaire.G103C9, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C2, _
                                                  CurrentBenéficiaire.G104C3, CurrentBenéficiaire.G104C4, CurrentBenéficiaire.G104C5, CurrentBenéficiaire.G104C6, _
                                                  CurrentBenéficiaire.G104C7, CurrentBenéficiaire.G104C8, CurrentBenéficiaire.G104C9, CurrentBenéficiaire.G104C10, _
                                                  CurrentBenéficiaire.G104C11, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14, _
                                                  CurrentBenéficiaire.G104C15, CurrentBenéficiaire.G104C16, CurrentBenéficiaire.G104C17, CurrentBenéficiaire.G104C18, _
                                                  CurrentBenéficiaire.G105C1(1), CurrentBenéficiaire.G105C2(1), CurrentBenéficiaire.G105C1(2), CurrentBenéficiaire.G105C2(2), _
                                                  CurrentBenéficiaire.G105C1(3), CurrentBenéficiaire.G105C2(3), CurrentBenéficiaire.G106C1(0), CurrentBenéficiaire.G106C2(0), _
                                                  CurrentBenéficiaire.G106C3(0), CurrentBenéficiaire.G106C4(0), CurrentBenéficiaire.G106C1(1), CurrentBenéficiaire.G106C2(1), _
                                                  CurrentBenéficiaire.G106C3(1), CurrentBenéficiaire.G106C4(1), CurrentBenéficiaire.G106C1(2), CurrentBenéficiaire.G106C2(2), _
                                                  CurrentBenéficiaire.G106C3(2), CurrentBenéficiaire.G106C4(2), CurrentBenéficiaire.G106C1(3), CurrentBenéficiaire.G106C2(3), _
                                                  CurrentBenéficiaire.G106C3(3), CurrentBenéficiaire.G106C4(3), CurrentBenéficiaire.G106C1(4), CurrentBenéficiaire.G106C2(4), _
                                                  CurrentBenéficiaire.G106C3(4), CurrentBenéficiaire.G106C4(4), CurrentBenéficiaire.G106C1(5), CurrentBenéficiaire.G106C2(5), _
                                                  CurrentBenéficiaire.G106C3(5), CurrentBenéficiaire.G106C4(5), CurrentBenéficiaire.G106C1(6), CurrentBenéficiaire.G106C2(6), _
                                                  CurrentBenéficiaire.G106C3(6), CurrentBenéficiaire.G106C4(6), CurrentBenéficiaire.G107C1, CurrentBenéficiaire.G107C2, _
                                                  CurrentBenéficiaire.G107C3, CurrentBenéficiaire.G107C4, CurrentBenéficiaire.G107C5, CurrentBenéficiaire.G107C6, _
                                                  CurrentBenéficiaire.G108C1(0), CurrentBenéficiaire.G108C2(0), CurrentBenéficiaire.G108C1(1), _
                                                  CurrentBenéficiaire.G108C2(1), CurrentBenéficiaire.G108C1(2), CurrentBenéficiaire.G108C2(2), _
                                                  CurrentBenéficiaire.G109C1, CurrentBenéficiaire.G109C2, CurrentBenéficiaire.G109C3, CurrentBenéficiaire.G109C4, _
                                                  CurrentBenéficiaire.G109C5, CurrentBenéficiaire.G109C6, CurrentBenéficiaire.G109C7, CurrentBenéficiaire.G109C8, _
                                                  CurrentBenéficiaire.G109C9, CurrentBenéficiaire.G109C10, CurrentBenéficiaire.G109C11, CurrentBenéficiaire.G109C12, _
                                                  CurrentBenéficiaire.G111C1, CurrentBenéficiaire.Prescripteur_ID, DateString_To_DateVitale(AMC_DateDebut_MaskedTextBox.Text), _
                                                  DateString_To_DateVitale(AMC_DateFin_MaskedTextBox.Text), AMC_Numadhérent_TextBox.Text, AMC_NumAMC_TextBox.Text, _
                                                  AMC_Piècejustificative_ComboBox.SelectedIndex.ToString, CurrentBenéficiaire.AMC_TypeContrat, _
                                                  AMC_Indicateurdetrairement_TextBox.Text, MUT_NumMutuelle_TextBox.Text, AMC_Code_Aiguillage_STS_TextBox.Text, _
                                                  AMC_CodeRoutage_TextBox.Text, AMC_IdHote_TextBox.Text, AMC_NomDomaine_TextBox.Text, AMC_Type_Convention_TextBox.Text, AMC_Critère_secondaire_TextBox.Text, _
                                                  CurrentBenéficiaire.AMC_IdentifiantAMC, CurrentBenéficiaire.Assuré, _
                                                            Vitale_adresse_TextBox.Text, Vitale_téléphone_TextBox.Text, Vitale_e_mail_TextBox.Text, Vitale_Notes_perso_RichTextBox.Text, "", _
                                                            BDD.VitaleTableAdapter.SELECT_Max_Num + 1, periode, "", CurrentBenéficiaire.Delivrance_Lieu)
                Else
                    Me.VitaleTableAdapter.UpdateQuery(CurrentBenéficiaire.G101C1, CurrentBenéficiaire.G101C2, CurrentBenéficiaire.G101C3, CurrentBenéficiaire.G101C7, _
                                                      CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G101C9, CurrentBenéficiaire.G101C10, CurrentBenéficiaire.G101C11, _
                                                      CurrentBenéficiaire.G101C12, CurrentBenéficiaire.G101C13, CurrentBenéficiaire.G102C1, CurrentBenéficiaire.G102C2, _
                                                      CurrentBenéficiaire.G102C3, CurrentBenéficiaire.G103C1, CurrentBenéficiaire.G103C2, CurrentBenéficiaire.G103C3, _
                                                      CurrentBenéficiaire.G103C4, CurrentBenéficiaire.G103C5, CurrentBenéficiaire.G103C6, CurrentBenéficiaire.G103C7, _
                                                      CurrentBenéficiaire.G103C8, CurrentBenéficiaire.G103C9, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C2, _
                                                      CurrentBenéficiaire.G104C3, CurrentBenéficiaire.G104C4, CurrentBenéficiaire.G104C5, CurrentBenéficiaire.G104C6, _
                                                      CurrentBenéficiaire.G104C7, CurrentBenéficiaire.G104C8, CurrentBenéficiaire.G104C9, CurrentBenéficiaire.G104C10, _
                                                      CurrentBenéficiaire.G104C11, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14, _
                                                      CurrentBenéficiaire.G104C15, CurrentBenéficiaire.G104C16, CurrentBenéficiaire.G104C17, CurrentBenéficiaire.G104C18, _
                                                      CurrentBenéficiaire.G105C1(0), CurrentBenéficiaire.G105C2(0), CurrentBenéficiaire.G105C1(1), CurrentBenéficiaire.G105C2(1), _
                                                      CurrentBenéficiaire.G105C1(2), CurrentBenéficiaire.G105C2(2), CurrentBenéficiaire.G106C1(0), CurrentBenéficiaire.G106C2(0), _
                                                      CurrentBenéficiaire.G106C3(0), CurrentBenéficiaire.G106C4(0), CurrentBenéficiaire.G106C1(1), CurrentBenéficiaire.G106C2(1), _
                                                      CurrentBenéficiaire.G106C3(1), CurrentBenéficiaire.G106C4(1), CurrentBenéficiaire.G106C1(2), CurrentBenéficiaire.G106C2(2), _
                                                      CurrentBenéficiaire.G106C3(2), CurrentBenéficiaire.G106C4(2), CurrentBenéficiaire.G106C1(3), CurrentBenéficiaire.G106C2(3), _
                                                      CurrentBenéficiaire.G106C3(3), CurrentBenéficiaire.G106C4(3), CurrentBenéficiaire.G106C1(4), CurrentBenéficiaire.G106C2(4), _
                                                      CurrentBenéficiaire.G106C3(4), CurrentBenéficiaire.G106C4(4), CurrentBenéficiaire.G106C1(5), CurrentBenéficiaire.G106C2(5), _
                                                      CurrentBenéficiaire.G106C3(5), CurrentBenéficiaire.G106C4(5), CurrentBenéficiaire.G106C1(6), CurrentBenéficiaire.G106C2(6), _
                                                      CurrentBenéficiaire.G106C3(6), CurrentBenéficiaire.G106C4(6), CurrentBenéficiaire.G107C1, CurrentBenéficiaire.G107C2, _
                                                      CurrentBenéficiaire.G107C3, CurrentBenéficiaire.G107C4, CurrentBenéficiaire.G107C5, CurrentBenéficiaire.G107C6, _
                                                      CurrentBenéficiaire.G108C1(0), CurrentBenéficiaire.G108C2(0), CurrentBenéficiaire.G108C1(1), CurrentBenéficiaire.G108C2(1), _
                                                      CurrentBenéficiaire.G108C1(2), CurrentBenéficiaire.G108C2(2), CurrentBenéficiaire.G109C1, CurrentBenéficiaire.G109C2, _
                                                      CurrentBenéficiaire.G109C3, CurrentBenéficiaire.G109C4, CurrentBenéficiaire.G109C5, CurrentBenéficiaire.G109C6, _
                                                      CurrentBenéficiaire.G109C7, CurrentBenéficiaire.G109C8, CurrentBenéficiaire.G109C9, CurrentBenéficiaire.G109C10, _
                                                      CurrentBenéficiaire.G109C11, CurrentBenéficiaire.G109C12, CurrentBenéficiaire.G111C1, AMC_NumAMC_TextBox.Text, _
                                                      AMC_Numadhérent_TextBox.Text, CurrentBenéficiaire.AMC_TypeContrat, DateString_To_DateVitale(AMC_DateDebut_MaskedTextBox.Text), _
                                                      DateString_To_DateVitale(AMC_DateFin_MaskedTextBox.Text), AMC_Piècejustificative_ComboBox.SelectedIndex.ToString, _
                                                      AMC_Indicateurdetrairement_TextBox.Text, MUT_NumMutuelle_TextBox.Text, AMC_Code_Aiguillage_STS_TextBox.Text, _
                                                      AMC_CodeRoutage_TextBox.Text, AMC_IdHote_TextBox.Text, AMC_NomDomaine_TextBox.Text, AMC_Type_Convention_TextBox.Text, _
                                                      AMC_Critère_secondaire_TextBox.Text, CurrentBenéficiaire.Prescripteur_ID, CurrentBenéficiaire.AMC_IdentifiantAMC, CurrentBenéficiaire.Assuré, _
                                                      Vitale_adresse_TextBox.Text, Vitale_téléphone_TextBox.Text, Vitale_e_mail_TextBox.Text, Vitale_Notes_perso_RichTextBox.Text, _
                                                      CurrentBenéficiaire.Organisme, CurrentBenéficiaire.Organisme_de_residence, CurrentBenéficiaire.Delivrance_Lieu)
                End If
            End If
        Else
            If BDD.VitaleTableAdapter.GetData_Compte_Client_NonSV(CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3).Rows.Count > 0 Then
                MyMsg_Box.Presentation("Officine ?", "Remplacer les données existantes ?", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                    BDD.VitaleTableAdapter.Delete_Compte_Client_NonSV(CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3)
                    BDD.VitaleTableAdapter.Insert("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", CurrentBenéficiaire.G104C1, "", CurrentBenéficiaire.G104C3, "", "", "", "", "", "", "", "", "", "", "", "", "", _
                                                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", _
                                                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", _
                                                  Vitale_adresse_TextBox.Text, Vitale_Notes_perso_RichTextBox.Text, Vitale_téléphone_TextBox.Text, Vitale_e_mail_TextBox.Text, CurrentBenéficiaire.Organisme, _
                                                  CurrentBenéficiaire.Num, CurrentBenéficiaire.Chronique_Periode, CurrentBenéficiaire.Organisme_de_residence, CurrentBenéficiaire.Chronique_Periode_decalage_jour, CurrentBenéficiaire.Delivrance_Lieu, "")
                End If
            Else
                BDD.VitaleTableAdapter.Insert("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", CurrentBenéficiaire.G104C1, "", CurrentBenéficiaire.G104C3, "", "", "", "", "", "", "", "", "", "", "", "", "", _
                                                 "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", _
                                                 "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", _
                                                 Vitale_adresse_TextBox.Text, Vitale_Notes_perso_RichTextBox.Text, Vitale_téléphone_TextBox.Text, Vitale_e_mail_TextBox.Text, "", BDD.VitaleTableAdapter.SELECT_Max_Num + 1, 0, "", 0, CurrentBenéficiaire.Delivrance_Lieu, "")
            End If
        End If
    End Sub
    Public Sub Vitale_Save()

    End Sub
#End Region
#Region "Facturation"
#Region "Controle avant Facturation"

    Private Function CONTROLE_Num_AMC() As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If (MUT_NumMutuelle_TextBox.Text = "55555551" Or AMC_NumAMC_TextBox.Text = "55555551") And CheckBox_Facturation_AMC.Checked = True Then
            MyMsg_Box.Presentation("Officine !", "Saisire Numéro Complémentaire <> 55555551", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If
        Return True
    End Function

    'fonction CONTROLE_Date_Maternité intégrée dans codesituation()
    Private Function CONTROLE_Date_Maternité() As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        '    'testfonc 2.45(controle date maternité inferieure ou egale à date des soins facturés)
        If NatureAssurance_Button.Text = "MATERNITE" Then


            If Val(Format(NatureAssuranceDateTimePicker.Value, "yyyyMMdd")) > Val(Format(DateExecution.Value, "yyyyMMdd")) Then
                MyMsg_Box.Presentation("Officine !", "Date maternité invalide" + Chr(10) + "doit être inférieure ou égale à date droits AMO", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Return False
            End If


        End If
        Return True
    End Function

    Private Function CONTROLE_CompatibilitActes_qualité_bénéficiaire() As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        For r = 0 To Vente.RowCount - 2
            If UCase(Vente.Item(VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                Dim datatable = Me.Compatibilités__codes_prestation__qualité_bénéficiaireTableAdapter1.GetDataBy_Code_Prestation(Vente.Item(VenteCodeActe.Index, r).Value)


                If datatable.Rows.Count = 0 Then
                    MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " ABSENT TABLE DES COMPATIBILITÉ QUALITÉ DU BÉNÉFICIAIRE." + Chr(10) + "PAS DE CONTROLE COMPATIBILIÉ POSSIBLE", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Return True
                Else
                    Select Case CurrentBenéficiaire.G104C14
                        Case "00"
                            For c = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c).ColumnName = "Assuré" Then
                                    If datatable(0).Item(c) = False Then
                                        MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC QUALITÉ DU BÉNÉFICIAIRE: Assuré", False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    End If
                                End If
                            Next
                        Case "01"
                            For c = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c).ColumnName = "Ascendant" Then
                                    If datatable(0).Item(c) = False Then
                                        MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC QUALITÉ DU BÉNÉFICIAIRE: Ascendant, descendant, collatéraux ascendants", False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    End If
                                End If
                            Next
                        Case "02"
                            For c = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c).ColumnName = "Conjoint" Then
                                    If datatable(0).Item(c) = False Then
                                        MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC QUALITÉ DU BÉNÉFICIAIRE: Conjoint", False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    End If
                                End If
                            Next
                        Case "02"
                            For c = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c).ColumnName = "Conjoint" Then
                                    If datatable(0).Item(c) = False Then
                                        MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC QUALITÉ DU BÉNÉFICIAIRE: Conjoint", False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    End If
                                End If
                            Next
                        Case "03"
                            For c = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c).ColumnName = "Conjoint_Divorcé" Then
                                    If datatable(0).Item(c) = False Then
                                        MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC QUALITÉ DU BÉNÉFICIAIRE: Conjoint Divorcé", False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    End If
                                End If
                            Next
                        Case "04"
                            For c = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c).ColumnName = "Concubin" Then
                                    If datatable(0).Item(c) = False Then
                                        MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC QUALITÉ DU BÉNÉFICIAIRE: Concubin", False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    End If
                                End If
                            Next
                        Case "05"
                            For c = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c).ColumnName = "ConjointSéparé" Then
                                    If datatable(0).Item(c) = False Then
                                        MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC QUALITÉ DU BÉNÉFICIAIRE: Conjoint Séparé", False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    End If
                                End If
                            Next
                        Case "06"
                            For c = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c).ColumnName = "Enfant" Then
                                    If datatable(0).Item(c) = False Then
                                        MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC QUALITÉ DU BÉNÉFICIAIRE: Enfant", False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    End If
                                End If
                            Next
                        Case "08"
                            For c = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c).ColumnName = "ConjointVeuf" Then
                                    If datatable(0).Item(c) = False Then
                                        MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC QUALITÉ DU BÉNÉFICIAIRE: Conjoint Veuf", False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    End If
                                End If
                            Next
                        Case "09"
                            For c = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c).ColumnName = "Autre_ayant_droit" Then
                                    If datatable(0).Item(c) = False Then
                                        MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC QUALITÉ DU BÉNÉFICIAIRE: Autre ayant droit", False, "", False, "", True, "OK")
                                        MyMsg_Box.ShowDialog()
                                        Return False
                                    End If
                                End If
                            Next
                    End Select


                    'verifie age
                    If datatable(0).AgeMinAnnées <> 0 Or datatable(0).AgeMaxAnnées Or datatable(0).AgeMinMois Or datatable(0).AgeMaxMois Then
                        Try
                            Dim années = Now.Year - CInt(Mid(CurrentBenéficiaire.G104C12, 1, 4))
                            Dim mois = Now.Month - CInt(Mid(CurrentBenéficiaire.G104C12, 5, 2))
                            If mois < 0 Then
                                mois = 12 + mois
                                années = années - 1
                            End If
                            If (datatable(0).AgeMinAnnées <> 0 And années < datatable(0).AgeMinAnnées) Or _
                                (datatable(0).AgeMaxAnnées <> 0 And années >= datatable(0).AgeMaxAnnées) Or _
                                (datatable(0).AgeMinMois <> 0 And (années * 12) + mois < datatable(0).AgeMinMois) Or _
                                (datatable(0).AgeMaxMois <> 0 And (années * 12) + mois >= datatable(0).AgeMaxMois) Then
                                MyMsg_Box.Presentation("Officine !", "CODE ACTE " + Vente.Item(VenteCodeActe.Index, r).Value + " INCOMPATIBLE AVEC L'AGE DU BÉNÉFICIAIRE", False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                                Return False

                            End If

                        Catch ex As Exception

                        End Try
                    End If
                End If
            End If
        Next

        Return True
    End Function

    Private Function CONTROLE_Nécessité_Entente_Préalable_pour_LPP(ByVal DateDroit As String) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        'verification nécessité entente préalable pour LPP
        If GrouperLPPToolStripMenuItem.Checked = False Then
            For r = 0 To Vente.RowCount - 2
                If Me.LPPTableAdapter.Select_Entente_Préalable(Vente.Item(VenteLPP.Index, r).Value, Val(Format(Date_Droits_AMO(), "yyyyMMdd"))) = True Then
                    Dim EP_Saisie As Boolean = False
                    For i = 0 To CurrentFactureVitale.G1840.Length - 1
                        If CurrentFactureVitale.G1840(i).G1840C1 = r + 1 Then
                            EP_Saisie = True
                            If CurrentFactureVitale.G1840(i).G1840C2 = "" Then
                                MyMsg_Box.Presentation("Officine !", "FACTURATION INTEROMPUE" + Chr(10) + "ENTENTE PRÉALABLE OBLIGATOIRE POUR LPP " + Vente.Item(VenteLPP.Index, r).Value, False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                                Return False
                            End If
                        End If
                    Next
                    If EP_Saisie = False Then
                        MyMsg_Box.Presentation("Officine !", "FACTURATION INTEROMPUE" + Chr(10) + "ENTENTE PRÉALABLE OBLIGATOIRE POUR LPP " + Vente.Item(VenteLPP.Index, r).Value, False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        Return False
                    End If
                End If
            Next

        Else 'LPP Groupés

            Dim LigneVente_PrestationSV() As Integer 'en indice ne numéro de ligne dans le datagrid Vente, en valeur le numéro de prestation dans la facture SV
            ReDim LigneVente_PrestationSV(Vente.RowCount)
            LigneVente_PrestationSV(0) = 1
            Dim nombre_de_prestations As Integer = 1

            For r = 1 To Vente.RowCount - 2
                If Me.CodePrestationsTableAdapter.SelectTypeNomenclatureByCodeActe(Vente.Item(VenteCodeActe.Index, r).Value) = "LPP" Then
                    Dim CodeActe_groupé As Boolean = False
                    Dim numpresation_groupée As Integer
                    For rr = 0 To r - 1
                        If Vente.Item(VenteCodeActe.Index, r).Value = Vente.Item(VenteCodeActe.Index, rr).Value Then
                            CodeActe_groupé = True
                            numpresation_groupée = LigneVente_PrestationSV(rr)
                        End If
                    Next


                    If CodeActe_groupé = False Then
                        nombre_de_prestations = nombre_de_prestations + 1
                        LigneVente_PrestationSV(r) = nombre_de_prestations
                    Else
                        LigneVente_PrestationSV(r) = numpresation_groupée
                    End If
                Else
                    nombre_de_prestations = nombre_de_prestations + 1
                    LigneVente_PrestationSV(r) = nombre_de_prestations
                End If
            Next


            For r = 0 To Vente.RowCount - 2
                If Me.LPPTableAdapter.Select_Entente_Préalable(Vente.Item(VenteLPP.Index, r).Value, Val(Format(Date_Droits_AMO(), "yyyyMMdd"))) = True Then
                    Dim EP_Saisie As Boolean = False

                    For i = 0 To CurrentFactureVitale.G1840.Length - 1
                        If CurrentFactureVitale.G1840(i).G1840C1 = LigneVente_PrestationSV(r) Then
                            EP_Saisie = True
                            If CurrentFactureVitale.G1840(i).G1840C2 = "" Then
                                MyMsg_Box.Presentation("Officine !", "FACTURATION INTEROMPUE" + Chr(10) + "ENTENTE PRÉALABLE OBLIGATOIRE POUR LPP " + Vente.Item(VenteLPP.Index, r).Value, False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                                Return False
                            End If
                        End If
                    Next
                    If EP_Saisie = False Then
                        MyMsg_Box.Presentation("Officine !", "FACTURATION INTEROMPUE" + Chr(10) + "ENTENTE PRÉALABLE OBLIGATOIRE POUR LPP " + Vente.Item(VenteLPP.Index, r).Value, False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        Return False
                    End If
                End If
            Next

        End If
        Return True
    End Function

    Private Function CONTROLE_Top_Codage_Affiné() As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        For r = 0 To Vente.RowCount - 1
            Dim datatable = Me.CodePrestationsTableAdapter.GetDataBy_CodeActe(Vente.Item(VenteCodeActe.Index, r).Value)
            If datatable.Rows.Count > 0 Then
                For c = 0 To datatable.Columns.Count - 1
                    If datatable.Columns.Item(c).ColumnName = "Top_Codage_Affiné" Then
                        If datatable(0).Item(c) = True Then
                            For c2 = 0 To datatable.Columns.Count - 1
                                If datatable.Columns.Item(c2).ColumnName = "TypeNomenclature" Then
                                    Select Case datatable(0).Item(c2)
                                        Case "Frais PH"
                                            If Vente.Item(VenteCIP.Index, r).Value = "" And Vente.Item(VenteEAN13.Index, r).Value = "" Then
                                                MyMsg_Box.Presentation("Officine !", "ABSENCE DE CODE CIP POUR " + Vente.Item(VenteCodeActe.Index, r).Value + Chr(10) + "FACTURATION INTERROMPUE", False, "", False, "", True, "OK")
                                                MyMsg_Box.ShowDialog()
                                                Return False
                                            End If
                                        Case "LPP"
                                            If Vente.Item(VenteLPP.Index, r).Value = "" Then
                                                MyMsg_Box.Presentation("Officine !", "ABSENCE DE CODE LPP POUR " + Vente.Item(VenteCodeActe.Index, r).Value + Chr(10) + "FACTURATION INTERROMPUE", False, "", False, "", True, "OK")
                                                MyMsg_Box.ShowDialog()
                                                Return False
                                            End If
                                    End Select
                                End If
                            Next
                        End If
                    End If
                Next
            End If
        Next
        Return True
    End Function

    Private Function CONTROLE_CDC_Table7() As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        For r = 0 To Vente.RowCount - 2
            If UCase(Vente.Item(VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                Dim datas As DataTable
                datas = Me.CDC_Table7TableAdapter.GetDataBy_Code_Prestation(Vente.Item(VenteCodeActe.Index, r).Value.ToString)
                If datas.Rows.Count = 0 Then
                    MyMsg_Box.Presentation("Officine !", Vente.Item(VenteCodeActe.Index, r).Value.ToString + " absent table7, aucun controle.", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                Else

                    'controle acte Gratuit
                    If Val(Vente.Item(VenteTotal.Index, r).Value.ToString) = 0 Then
                        If Me.CDC_Table7TableAdapter.GetDataBy_Code_Prestation(Vente.Item(VenteCodeActe.Index, r).Value.ToString)(0).Gratuit = False Then
                            MyMsg_Box.Presentation("Officine !", Vente.Item(VenteCodeActe.Index, r).Value.ToString + ": incompatible acte gratuit", False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                            Return False
                        End If
                    End If


                End If
            End If
        Next

        Return True

    End Function

    Private Sub CONTROLE_Transmission_AMC()
        'If Config.OCT_UtilisationOCT = True Then
        Dim transmettre_amc As Boolean = False
        If CheckBox_Facturation_AMC.Checked = True Then
            If NatureAssurance_Button.Text <> "MATERNITE" And NatureAssurance_Button.Text <> "ACCIDENT DU TRAVAIL" And NatureAssurance_Button.Text <> "PREVENTION" And NatureAssurance_Button.Text <> "SMG" Then
                For r = 0 To Vente.Rows.Count - 2
                    If UCase(Vente.Item(VenteType.Index, r).Value) <> "VENTE DIRECTE" And Not Hono_Disp_Codes_list.Contains(Vente(VenteCodeActe.Index, r).Value.ToString) Then
                        If Vente(VenteType.Index, r).Value.ToString <> "ALD" And Vente(VenteType.Index, r).Value.ToString <> "PREV" And Vente(VenteType.Index, r).Value.ToString <> "SP" Then
                            If CalculTauxAMO(Vente(VenteCodeActe.Index, r).Value.ToString, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO())) <> 100 Then
                                If CalculTauxAMC(Vente(VenteCodeActe.Index, r).Value.ToString, CurrentBenéficiaire.AMC_TypeContrat) <> 0 Then
                                    transmettre_amc = True
                                    Exit For

                                End If
                            End If
                        End If
                    End If
                Next
            End If
        End If
        If transmettre_amc = False Then
            CheckBox_Facturation_AMC.Checked = False
        End If
    End Sub

#End Region
    Public Function Mode_Gestion() As Boolean
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim code_service_amo As String = ""
        '-----------------
        'CDC 2.1.3.3.4 Aide Médicale d’Etat
        If CurrentBenéficiaire.AMC_NumMutuelle = "75500017" Then
            If CurrentFactureVitale.Mode_Gestion <> "AME_Base" And CurrentFactureVitale.Mode_Gestion <> "AME_Compl" Then
                If CheckBoxModeDegradé.Checked = True Then
                    MyMsg_Box.Presentation("Officine ?", "L'assuré bénéficie-til d'une AME de base ou d'une AME complémentaire?", True, "Base", True, "Complémentaire", False, "")
                    If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                        CurrentFactureVitale.Mode_Gestion = "AME_Base"
                    Else
                        CurrentFactureVitale.Mode_Gestion = "AME_Compl"
                    End If
                Else
                    CurrentFactureVitale.Mode_Gestion = "AME_Compl"
                End If

            End If
            Return True
        End If
        '-----------------
        CurrentFactureVitale.Mode_Gestion = ""
        CurrentFactureVitale.TOP_CMU = False
        CurrentFactureVitale.Sortant_CMU = False
        If ToolStripMenuItem_Forcer_Code_Service_AMO.Checked = True Then
            code_service_amo = ToolStripTextBox__Forcer_Code_Service_AMO.Text 'forçage
        ElseIf CurrentBenéficiaire.G104C15 <> "" _
                And ((Val(Format(Date_Droits_AMO, "yyyyMMdd") + "0000") >= Val(CurrentBenéficiaire.G104C16)) Or Val(CurrentBenéficiaire.G104C16) = 0) _
                And ((Val(Format(Date_Droits_AMO, "yyyyMMdd") + "0000") <= Val(CurrentBenéficiaire.G104C17)) Or Val(CurrentBenéficiaire.G104C17) = 0) Then
            code_service_amo = CurrentBenéficiaire.G104C15 'Code service AMO bénéficiaire
        ElseIf CurrentBenéficiaire.G102C1 <> "" _
                  And ((Val(Format(Date_Droits_AMO, "yyyyMMdd") + "0000") >= Val(CurrentBenéficiaire.G102C2)) Or Val(CurrentBenéficiaire.G102C2) = 0) _
                  And ((Val(Format(Date_Droits_AMO, "yyyyMMdd") + "0000") <= Val(CurrentBenéficiaire.G102C3)) Or Val(CurrentBenéficiaire.G102C3) = 0) Then
            code_service_amo = CurrentBenéficiaire.G102C1 'Code service AMO Famille
        End If

        'pas de complémentaire
        If CurrentBenéficiaire.AMC_NumOrganisme = "" And CurrentBenéficiaire.AMC_NumMutuelle = "" Or (CurrentFactureVitale.TP_AMC = False And CheckBox_Facturation_AMC.Checked = False) Then
            Select Case code_service_amo
                Case "01", "02", "03", "1", "2", "3"
                    CurrentFactureVitale.TOP_CMU = True
                    CurrentFactureVitale.Mode_Gestion = "RO"
                Case "10"
                    CurrentFactureVitale.TOP_CMU = True
                    CurrentFactureVitale.Sortant_CMU = True
                    CurrentFactureVitale.Mode_Gestion = "RO"
                Case "12"
                    CurrentFactureVitale.Mode_Gestion = "ACS A"
                Case "13"
                    CurrentFactureVitale.Mode_Gestion = "ACS B"
                Case "14"
                    CurrentFactureVitale.Mode_Gestion = "ACS C"
            End Select
        End If
        'Mutuelle en carte ou convention "RO"
        If (CurrentConvention.selected = True And CurrentConvention.type_Identifiant_org_signataire = "RO") _
            Or (CurrentBenéficiaire.AMC_NumMutuelle = CurrentBenéficiaire.G107C1 And CurrentBenéficiaire.AMC_NumMutuelle <> "") Then
            Select Case code_service_amo
                Case "10"
                    CurrentFactureVitale.TOP_CMU = True
                    CurrentFactureVitale.Sortant_CMU = True
                    CurrentFactureVitale.Mode_Gestion = "RO"
                Case "11"
                    CurrentFactureVitale.Mode_Gestion = "RO"
                Case "12"
                    CurrentFactureVitale.Mode_Gestion = "ACS A"
                Case "13"
                    CurrentFactureVitale.Mode_Gestion = "ACS B"
                Case "14"
                    CurrentFactureVitale.Mode_Gestion = "ACS C"
                Case Else
                    Select Case CurrentBenéficiaire.AMC_NumMutuelle
                        Case "99999997"
                            CurrentFactureVitale.TOP_CMU = True
                            CurrentFactureVitale.Mode_Gestion = "RO"
                        Case "88888888"
                            CurrentFactureVitale.TOP_CMU = True
                            CurrentFactureVitale.Mode_Gestion = "RO"
                        Case "55555551"
                            'CurrentFactureVitale.TOP_CMU = True
                            CurrentFactureVitale.Sortant_CMU = True
                            CurrentFactureVitale.Mode_Gestion = "RO"
                        Case "11111119"
                            CurrentFactureVitale.Mode_Gestion = "ACS A"
                        Case "22222228"
                            CurrentFactureVitale.Mode_Gestion = "ACS B"
                        Case "33333337"
                            CurrentFactureVitale.Mode_Gestion = "ACS C"
                        Case Else
                            CurrentFactureVitale.Mode_Gestion = "RO"

                    End Select

            End Select
        End If
        'AMC en carte ou AMC "manuelle"
        If (CurrentConvention.selected = True And CurrentConvention.type_Identifiant_org_signataire <> "RO") _
            Or (CurrentBenéficiaire.AMC_NumOrganisme <> "" And (CurrentBenéficiaire.AMC_NumOrganisme = CurrentBenéficiaire.G109C1 _
            Or (CurrentBenéficiaire.AMC_NumOrganisme <> Mid(CurrentBenéficiaire.G107C5, 1, 10) And CurrentBenéficiaire.G107C5 <> ""))) Then
            Select Case code_service_amo
                Case "03", "3"
                    CurrentFactureVitale.TOP_CMU = True
                    If CurrentBenéficiaire.CMU__assimilation_mode_gestion_unique Is Nothing Then
                        MyMsg_Box.Presentation("Officine ?", "Présentation d'une attestation papier AMC permettant le mode de gestion séparée?" + Chr(10) + "(sinon assimilation au mode de gestion unique)", True, "OUI", True, "NON", False, "")
                        If MyMsg_Box.ShowDialog() = MsgBoxResult.No Then
                            CurrentFactureVitale.Mode_Gestion = "RO"
                            CurrentBenéficiaire.CMU__assimilation_mode_gestion_unique = True
                        Else
                            CurrentFactureVitale.Mode_Gestion = ""
                            CurrentBenéficiaire.CMU__assimilation_mode_gestion_unique = False
                        End If
                    ElseIf CurrentBenéficiaire.CMU__assimilation_mode_gestion_unique = True Then
                        CurrentFactureVitale.Mode_Gestion = "RO"
                    End If
                Case "10"
                    CurrentFactureVitale.TOP_CMU = True
                    CurrentFactureVitale.Sortant_CMU = True
                Case "12"
                    CurrentFactureVitale.Mode_Gestion = "ACS A"
                Case "13"
                    CurrentFactureVitale.Mode_Gestion = "ACS B"
                Case "14"
                    CurrentFactureVitale.Mode_Gestion = "ACS C"
                Case Else

            End Select
        End If
        'forçage gestion unique
        If ToolStripMenuItem_Forcer_Gestion_Unique.Checked = True Or MUT_NumMutuelle_TextBox.Text <> "" Then
            CurrentFactureVitale.Mode_Gestion = "RO"
        End If
        Select Case CurrentBenéficiaire.AMC_Indicateurdetrairement 'G109C4
            Case "60", "62", "63", "71", "72", "73" 'L’indicateur de traitement AMC ne permet pas, pour le progiciel, l’identification d’un bénéficiaire de la CMU-C. Cette identification s’effectue à partir de l’attestation CMU-C délivré par l’AMO, ou des données de la carte Vitale (code service AMO bénéficiaire ou zone mutuelle).(4.2.1.3.2.1 CMU Complémentaire)
                If CurrentBenéficiaire.CMU_justificatif_papier_droits_CMU_C_délivré_par_organisme_obligatoire Is Nothing Then
                    If CurrentFactureVitale.TOP_CMU = False And jeux_d_essai_CAS_STANDARD.Visible = False Then
                        MyMsg_Box.Presentation("Officine ?", "L'assuré a-t-il un justificatif (papier) de droits CMU.C délivré par l'organisme obligatoire ?", True, "OUI", True, "NON", False, "")
                        If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                            CurrentBenéficiaire.AMC_TypeContrat = "CMU"
                            AMC_Couverture_TextBox.Text = "CMU"
                            CurrentFactureVitale.TOP_CMU = True
                            CurrentBenéficiaire.CMU_justificatif_papier_droits_CMU_C_délivré_par_organisme_obligatoire = True
                        Else
                            CurrentBenéficiaire.AMC_TypeContrat = ""
                            AMC_Couverture_TextBox.Text = ""
                            CurrentFactureVitale.TOP_CMU = False
                            CurrentFactureVitale.Mode_Gestion = ""
                            CurrentBenéficiaire.CMU_justificatif_papier_droits_CMU_C_délivré_par_organisme_obligatoire = False
                        End If
                    End If
                ElseIf CurrentBenéficiaire.CMU_justificatif_papier_droits_CMU_C_délivré_par_organisme_obligatoire = True Then
                    CurrentBenéficiaire.AMC_TypeContrat = "CMU"
                    AMC_Couverture_TextBox.Text = "CMU"
                    CurrentFactureVitale.TOP_CMU = True
                End If
            Case Else
                'choix manuel CMU
                If CurrentBenéficiaire.AMC_TypeContrat = "CMU" Then
                    CurrentFactureVitale.TOP_CMU = True

                ElseIf CurrentBenéficiaire.AMC_TypeContrat = "CMU-TPcoord" Then
                    CurrentFactureVitale.TOP_CMU = True
                    CurrentFactureVitale.Mode_Gestion = "RO"
                End If
        End Select
        '---------------------------------------------------------------------------------------------------------
        'Sortant de CMU avec num mutuelle "55555551" (qui peut avoir été "écrasé" par une saisie)
        If CurrentBenéficiaire.G107C1 = "55555551" Then
            For i = 0 To 2
                If (CurrentBenéficiaire.G108C1(i) = "" Or Val(CurrentBenéficiaire.G108C1(i)) <= Val(Format(Date_Droits_AMC2, "yyyyMMdd") + "0000")) _
                    And (CurrentBenéficiaire.G108C2(i) = "" Or Val(CurrentBenéficiaire.G108C2(i)) >= Val(Format(Date_Droits_AMC2, "yyyyMMdd") + "0000")) Then
                    CurrentFactureVitale.Sortant_CMU = True
                End If
            Next
        End If
        '--------------------------------------------------------------------------------------------------------------
        If CheckBox_Facturation_AMC.Checked = False Then
            CurrentFactureVitale.TOP_CMU = False
        End If


        'AMC
        Select Case CurrentBenéficiaire.AMC_NumMutuelle

            Case "11111119"
                CurrentFactureVitale.Mode_Gestion = "ACS A"
            Case "22222228"
                CurrentFactureVitale.Mode_Gestion = "ACS B"
            Case "33333337"
                CurrentFactureVitale.Mode_Gestion = "ACS C"

        End Select

        Select Case CurrentBenéficiaire.AMC_NumOrganisme

            Case "11111119"
                CurrentFactureVitale.Mode_Gestion = "ACS A"
            Case "22222228"
                CurrentFactureVitale.Mode_Gestion = "ACS B"
            Case "33333337"
                CurrentFactureVitale.Mode_Gestion = "ACS C"

        End Select

        Return True
    End Function

    Public Function Forçages() As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        CodeSituation(Date_Droits_AMO())

        'FORCAGES CDC Annexe 1 - Partie A
        Dim indicateur_AMO_niveau_facture As String = ""
        Dim indicateur_AMC_niveau_facture As String = ""
        '---------------------------------------------------
        If ToolStripMenuItem_Forcer_Gestion_Unique.Checked = True Then
            CurrentFactureVitale.Mode_Gestion = "RO"
        End If
        '---------------------------------------------------
        'CDC 3.2.1.3 Annexe 1-A Forçage des zones « service AMO famille» et « service AMO bénéficiaire »
        If ToolStripMenuItem_Forcer_Code_Service_AMO.Checked = True Then
            CurrentFactureVitale.G1440C1 = CurrentFactureVitale.G1440C1 + "S"
        End If
        '---------------------------------------------------
        'CDC 3.2.1.4 Annexe 1-A Forçage des données liées à la nature d’assurance AT ou aux accidents de la vie privée
        'traité par Function groupe1513
        '---------------------------------------------------
        'CDC 3.2.1.7 Annexe 1-A Forçage de l’accès au tiers payant

        If Recherche_Période_AMO_2() = False Then

            For i = 0 To Vente.RowCount - 2

                If UCase(Vente(VenteType.Index, i).Value) = "ASSURANCE" And _
                    CurrentFactureVitale.Mode_Gestion <> "AME_Base" And CurrentFactureVitale.Mode_Gestion <> "AME_Compl" Then 'And CurrentFactureVitale.TOP_CMU = False Then
                    MyMsg_Box.Presentation("Officine ?", "DATES DROITS AMO EN CARTE VITALE DÉPASSÉES" + Chr(10) + "Voulez vous forcer les droits?" + Chr(10) + "ATTESTATION PAPIER OBLIGATOIRE", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                        CurrentFactureVitale.G1440C1 = CurrentFactureVitale.G1440C1 + "Y"
                    Else
                        Return False
                    End If

                    Exit For

                End If
            Next

        End If
        '---------------------------------------------------
        'CDC 3.2.2.1 Principes de forçage des données de la zone AMC
        'Forçage des bornes de la période de droits (hors cas particulier CMU)
        If CurrentBenéficiaire.CMU__assimilation_mode_gestion_unique Is Nothing Or CurrentBenéficiaire.CMU__assimilation_mode_gestion_unique = False Then
            If (AMC_NumAMC_TextBox.Text <> "" And AMC_NumAMC_TextBox.Text = CurrentBenéficiaire.G109C1) _
                     And AMC_Piècejustificative_ComboBox.SelectedIndex = 4 And CheckBox_Facturation_AMC.Checked = True _
                     And CurrentFactureVitale.TOP_CMU = False Then

                If (AMC_DateDebut_MaskedTextBox.Text <> "" And AMC_DateDebut_MaskedTextBox.Text <> "  /  /" And AMC_DateDebut_MaskedTextBox.Text <> "00/00/0000" And _
                    Val(Mid(AMC_DateDebut_MaskedTextBox.Text, 7, 4) & Mid(AMC_DateDebut_MaskedTextBox.Text, 4, 2) & Mid(AMC_DateDebut_MaskedTextBox.Text, 1, 2)) > Val(Format(Date_Droits_AMC2, "yyyyMMdd"))) Or _
                   (AMC_DateFin_MaskedTextBox.Text <> "" And AMC_DateFin_MaskedTextBox.Text <> "  /  /" And AMC_DateFin_MaskedTextBox.Text <> "00/00/0000" And _
                    Val(Mid(AMC_DateFin_MaskedTextBox.Text, 7, 4) & Mid(AMC_DateFin_MaskedTextBox.Text, 4, 2) & Mid(AMC_DateFin_MaskedTextBox.Text, 1, 2)) < Val(Format(Date_Droits_AMC2, "yyyyMMdd"))) Then
                    If Jeux_d_essai2.Visible = True Then
                        CurrentFactureVitale.G1440C2 = "D"
                    Else
                        MyMsg_Box.Presentation("Officine ?", "DROITS AMC FERMÉS" + Chr(10) + "Voulez vous forcer les droits?", True, "OUI", True, "NON", False, "")
                        If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                            CurrentFactureVitale.G1440C2 = "D"
                        Else
                            Return False
                        End If

                    End If
                End If

            End If
        End If

        '---------------------------------------------------
        'CDC 3.2.2.2 Annexe 1-A Principes de forçage des données de la zone mutuelle
        'Forçage de la période de droits complémentaires et garanties effectives
        If (MUT_NumMutuelle_TextBox.Text <> "" And MUT_NumMutuelle_TextBox.Text = CurrentBenéficiaire.G107C1) _
            And AMC_Piècejustificative_ComboBox.SelectedIndex = 4 And CurrentFactureVitale.TP_AMC = True _
            And CurrentFactureVitale.TOP_CMU = False Then '(forçage pour prolongement des droits pour un cmu dans Choix_Facturation_TP.vb (Private Function Forçage_Date_CMU_Contenue_en_CV() As Boolean) )

            'si on est hors période couverture
            If (AMC_DateDebut_MaskedTextBox.Text <> "" And AMC_DateDebut_MaskedTextBox.Text <> "  /  /" And _
                Val(Mid(AMC_DateDebut_MaskedTextBox.Text, 7, 4) & Mid(AMC_DateDebut_MaskedTextBox.Text, 4, 2) & Mid(AMC_DateDebut_MaskedTextBox.Text, 1, 2)) > Val(Format(Date_Droits_AMC2, "yyyyMMdd"))) Or _
               (AMC_DateFin_MaskedTextBox.Text <> "" And AMC_DateFin_MaskedTextBox.Text <> "  /  /" And _
                Val(Mid(AMC_DateFin_MaskedTextBox.Text, 7, 4) & Mid(AMC_DateFin_MaskedTextBox.Text, 4, 2) & Mid(AMC_DateFin_MaskedTextBox.Text, 1, 2)) < Val(Format(Date_Droits_AMC2, "yyyyMMdd"))) Then
                MyMsg_Box.Presentation("Officine ?", "DATE DROITS MUTUELLE DÉPASSÉES" + Chr(10) + "Voulez vous forcer les droits?", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                    CurrentFactureVitale.G1440C1 = CurrentFactureVitale.G1440C1 + "D"
                Else
                    Return False
                End If

            End If
            If CurrentBenéficiaire.G107C2 <> "" And Mid(CurrentBenéficiaire.G107C2, 2, 1) = "N" Then
                MyMsg_Box.Presentation("Officine ?", "Garanties effectives: Pas de garantie Pharmacie," + Chr(10) + "Voulez vous forcer les droits?", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                    CurrentFactureVitale.G1440C1 = CurrentFactureVitale.G1440C1 + "D"
                End If
            End If
        End If
        '---------------------------------------------------
        'Mutuelle non présente en carte ou Mutuelle différente de celle contenue dans la carte
        If CurrentFactureVitale.TP_AMC = True And AMC_Piècejustificative_ComboBox.SelectedIndex <> 4 And _
        ((AMC_DateDebut_MaskedTextBox.Text <> "" And AMC_DateDebut_MaskedTextBox.Text <> "  /  /" And _
          Val(Mid(AMC_DateDebut_MaskedTextBox.Text, 7, 4) & Mid(AMC_DateDebut_MaskedTextBox.Text, 4, 2) & Mid(AMC_DateDebut_MaskedTextBox.Text, 1, 2)) > Val(Format(Date_Droits_AMC2, "yyyyMMdd"))) Or _
        (AMC_DateFin_MaskedTextBox.Text <> "" And AMC_DateFin_MaskedTextBox.Text <> "  /  /" And _
         Val(Mid(AMC_DateFin_MaskedTextBox.Text, 7, 4) & Mid(AMC_DateFin_MaskedTextBox.Text, 4, 2) & Mid(AMC_DateFin_MaskedTextBox.Text, 1, 2)) < Val(Format(Date_Droits_AMC2, "yyyyMMdd")))) Then
            MyMsg_Box.Presentation("Officine ?", "DROITS ASSURANCE COMPLÉMENTAIRE FERMÉ" + Chr(10) + "Voulez continuer la facturation sans tiers payant sur la part complémentaire? (pas de transmission)", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                CurrentBenéficiaire.AMC_NumOrganisme = ""
                CurrentBenéficiaire.AMC_NumMutuelle = ""
                CurrentBenéficiaire.AMC_NumAdherent = ""
                CurrentFactureVitale.TP_AMC = False
                CheckBox_Facturation_AMC.Checked = False
                If Mode_Gestion() = False Then
                    Return False
                End If
            Else
                Return False
            End If

        End If

        If (MUT_NumMutuelle_TextBox.Text <> "" And MUT_NumMutuelle_TextBox.Text <> CurrentBenéficiaire.G107C1 And AMC_Piècejustificative_ComboBox.SelectedIndex <> 4 And CurrentFactureVitale.TP_AMC = True) Or _
        (MUT_NumMutuelle_TextBox.Text <> "" And MUT_NumMutuelle_TextBox.Text <> CurrentBenéficiaire.G107C1 And AMC_Piècejustificative_ComboBox.SelectedIndex <> 4 And CurrentFactureVitale.TP_AMC = True) Then
            If CurrentConvention.selected = True Or ToolStripMenuItem_Forcer_Gestion_Unique.Checked = True Then
                CurrentFactureVitale.G1440C1 = CurrentFactureVitale.G1440C1 + "N"
                CurrentFactureVitale.G1440C2 = ""
            End If
        End If
        '---------------------------------------------------
        'Forçage G1440C1=N pour AME-complémentaire non contenue en carte (attestation) test fonc 2.20.03, 2.20.04
        If (MUT_NumMutuelle_TextBox.Text = "75500017" And CurrentFactureVitale.Mode_Gestion = "AME_Compl" And MUT_NumMutuelle_TextBox.Text <> CurrentBenéficiaire.G107C1 _
            And AMC_Piècejustificative_ComboBox.SelectedIndex <> 4 And CurrentFactureVitale.TP_AMC = True) Then
            CurrentFactureVitale.G1440C1 = CurrentFactureVitale.G1440C1 + "N"
        End If

        '---------------------------------------------------
        'CDC 3.2.2.3 Annexe 1-A Principes de forçage pour des données liées à un bénéficiaire de la CMU-C à un sortant de CMU-C
        'ajout des bénéficiaires AME
        If (CurrentFactureVitale.TOP_CMU = True) And (AMC_Piècejustificative_ComboBox.SelectedIndex <> "4" Or CurrentFactureVitale.G1440C2 <> "") Then
            CurrentFactureVitale.G1440C1 = CurrentFactureVitale.G1440C1 + "N"
            CurrentFactureVitale.G1440C2 = ""
        End If


        If InStr(CurrentFactureVitale.G1440C1, "Y") <> 0 Then
            CurrentFactureVitale.G1440C1 = "Y"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "M") <> 0 And InStr(CurrentFactureVitale.G1440C1, "D") <> 0 Then
            CurrentFactureVitale.G1440C1 = "O"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "M") <> 0 And InStr(CurrentFactureVitale.G1440C1, "N") <> 0 Then
            CurrentFactureVitale.G1440C1 = "P"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "M") <> 0 And InStr(CurrentFactureVitale.G1440C1, "S") <> 0 Then
            CurrentFactureVitale.G1440C1 = "R"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "S") <> 0 And InStr(CurrentFactureVitale.G1440C1, "D") <> 0 Then
            CurrentFactureVitale.G1440C1 = "G"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "S") <> 0 And InStr(CurrentFactureVitale.G1440C1, "N") <> 0 Then
            CurrentFactureVitale.G1440C1 = "H"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "A") <> 0 And InStr(CurrentFactureVitale.G1440C1, "D") <> 0 Then
            CurrentFactureVitale.G1440C1 = "I"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "A") <> 0 And InStr(CurrentFactureVitale.G1440C1, "N") <> 0 Then
            CurrentFactureVitale.G1440C1 = "J"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "Z") <> 0 And InStr(CurrentFactureVitale.G1440C1, "Z") <> 0 Then
            CurrentFactureVitale.G1440C1 = "T"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "M") <> 0 Then
            CurrentFactureVitale.G1440C1 = "M"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "N") <> 0 Then
            CurrentFactureVitale.G1440C1 = "N"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "D") <> 0 Then
            CurrentFactureVitale.G1440C1 = "D"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "S") <> 0 Then
            CurrentFactureVitale.G1440C1 = "S"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "A") <> 0 Then
            CurrentFactureVitale.G1440C1 = "A"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "O") <> 0 Then
            CurrentFactureVitale.G1440C1 = "O"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "P") <> 0 Then
            CurrentFactureVitale.G1440C1 = "P"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "R") <> 0 Then
            CurrentFactureVitale.G1440C1 = "R"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "G") <> 0 Then
            CurrentFactureVitale.G1440C1 = "G"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "H") <> 0 Then
            CurrentFactureVitale.G1440C1 = "H"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "I") <> 0 Then
            CurrentFactureVitale.G1440C1 = "I"
        End If
        If InStr(CurrentFactureVitale.G1440C1, "J") <> 0 Then
            CurrentFactureVitale.G1440C1 = "J"
        End If

        Return True

    End Function

    'Calcul TauxAMO par CodeActe/CodeRegime/CodeSituation
    Public Function CalculTauxAMO(ByVal CodeActe As String, ByVal CodeRegime As String, ByVal CodeSituation As String)
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If
        '--------------------------------------------------------------------------------
        'Contaceptif Urgence mineure
        If CurrentBenéficiaire.G101C8 = Config.Data_ContaceptifUrgence_NIR Then
            Return 100
        End If
        '--------------------------------------------------------------------------------
        Dim Out As Integer = 0
        Dim date_pour_le_calcul As Date
        'If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Or CurrentFactureVitale.TOP_CMU = True Then
        date_pour_le_calcul = DateExecution.Value
        'Else
        'date_pour_le_calcul = Date_Droits_AMO()
        'End If
        '--------------------------------------------------------------------------------
        'FS PAPIER
        If ComboBoxLECTURE_VITALE.Text = "" Then
            Return 0
        End If

        '--------------------------------------------------------------------------------
        'AME de base
        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Then Return 0
        '--------------------------------------------------------------------------------
        'par code régime
        If Not Me.Taux_CodeRégimeTableAdapter.Taux(CodeRegime, CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd"))) Is Nothing Then
            Out = Me.Taux_CodeRégimeTableAdapter.Taux(CodeRegime, CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd")))
        ElseIf Not Me.Taux_CodeRégimeTableAdapter.Taux("**", CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd"))) Is Nothing Then
            Out = Me.Taux_CodeRégimeTableAdapter.Taux("**", CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd")))
        End If
        '--------------------------------------------------------------------------------
        'par code situation
        Select Case CodeSituation
            Case "0000", "0101", "0201", "0404", "0405", "0415", "0501", "1001", "1601", "9001", "0102", "0103", "0202", "0203", "0302", "0303", "0406", "0412", _
            "0502", "0503", "1602", "1603", "9002", "9003", "0104", "0204", "0409", "0504", "9004", "0105", "0108", "0408", "0106", "0109", "0110", "0407", "0107", _
            "0413", "0205", "0206", "0207", "0304", "0400", "0402", "0410", "0411", "0414", "0700", "1002", "1003", "1004"
                If Not Me.Taux_CodeSituationTableAdapter.Taux(CodeSituation, CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd"))) Is Nothing Then
                    Out = Me.Taux_CodeSituationTableAdapter.Taux(CodeSituation, CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd")))
                End If

            Case "0100" 'non remboursé si accident sinon pas exonération ni modulation
                If Not Me.Taux_CodeSituationTableAdapter.Taux(CodeSituation, CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd"))) Is Nothing Then
                    Out = Me.Taux_CodeSituationTableAdapter.Taux(CodeSituation, CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd")))
                End If
                If CurrentBenéficiaire.G101C10 = "02" Then
                    If accident_régime_agricole = "" Then
                        MyMsg_Box.Presentation("Officine ?", "En rapport avec un accident?", True, "OUI", True, "NON", False, "")
                        If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then ' ne sais plus pourquoi, à verifier.spécificité regime agricole???
                            accident_régime_agricole = "OUI"
                            Out = 0
                        Else
                            accident_régime_agricole = "NON"
                        End If
                    ElseIf accident_régime_agricole = "OUI" Then
                        Out = 0
                    End If
                    
                End If

            Case "0100", "0200", "0300", "0301", "0403", "0500", "1000", "1600", "9000"
                'pas de changement

            Case "0225", "0226", "0227"
                MyMsg_Box.Presentation("Officine ?", "En rapport avec un accident de la vie privée?", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog() = MsgBoxResult.Yes Then
                    MyMsg_Box.Presentation("Officine !", "non remboursé" + Chr(10) + "Si le numéro de la caisse gestionnaire maladie appartient à la table des caisses gestionnaires ne gérant pas les accidents de la vie privée alors le PS ne peut pas effectuer de feuille soins électronique" + Chr(10) + "CF Règle 35 du cahier des charges SESAM-Vitale", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Out = 0
                Else
                    If Not Me.Taux_CodeSituationTableAdapter.Taux(CodeSituation, CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd"))) Is Nothing Then
                        Out = Me.Taux_CodeSituationTableAdapter.Taux(CodeSituation, CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd")))
                    End If
                End If

            Case "0401"
                'TauxSNCF = False
                If TauxSNCF = False And Médecin_SCNCF_already_asked = False Then
                    MyMsg_Box.Presentation("Officine ?", "PRESCRIPTION ETABLIE PAR MEDECIN SNCF" + Chr(10) + " (sur imprimé 1032 ou avec mention de Médecin SNCF)?", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                        TauxSNCF = True
                        CheckBox_Facturation_AMC.Checked = False
                        Médecin_SCNCF_already_asked = True
                    End If
                End If


                If TauxSNCF = False And Médecin_SCNCF_already_asked = False Then
                    MyMsg_Box.Presentation("Officine ?", "La spécialité du prescripteur est-elle présente dans cette liste?" + Chr(10) + "Gynécologie-obstétrique" + Chr(10) + "Stomatologie" + Chr(10) + "Chirurgie dentaire" + Chr(10) + "Chirurgien dentiste spécialiste O.D.F" + Chr(10) + "Gynécologie Médicale" + Chr(10) + "Obstétrique" + Chr(10) + "Gynécologie obstétrique et gynécologie médicale", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                        TauxSNCF = True
                        CheckBox_Facturation_AMC.Checked = False
                    End If
                    Médecin_SCNCF_already_asked = True
                End If
                If TauxSNCF = True Then
                    Out = 100
                End If

            Case "9020", "9021", "9022", "9024"
                Out = 0
        End Select
        '-----------------------------------------------------------------------------
        'forçage taux alasce moselle (case à cocher formulaire)
        If G1511C2_CheckBox1.Checked = True And CodeSituation <> "0108" Then
            MyMsg_Box.Presentation("Officine ?", "CONFIRMEZ FORÇAGE TAUX ALSACE/MOSELLE?", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = MsgBoxResult.Yes Then
                If Not Me.Taux_CodeSituationTableAdapter.Taux("0108", CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd"))) Is Nothing Then
                    Out = Me.Taux_CodeSituationTableAdapter.Taux("0108", CodeActe, Val(Format(date_pour_le_calcul, "yyyyMMdd")))
                End If
            Else
                G1511C2_CheckBox1.Checked = False
            End If
        End If

        '-----------------------------------------------------------------------------
        Return Out

    End Function

    'Calcul TauxAMC par CodeACte/Id Typecontrat
    Private Function CalculTauxAMC(ByVal CodeACte As String, ByVal Id As String)
    
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            Return 100
        End If

        If Id = "" Then
            Return 0
        Else
            Dim mydatatable As DataTable
            mydatatable = Me.AMC_Contrat_TypeTableAdapter.GetDataBy_Id2(Id)
            For c = 0 To mydatatable.Columns.Count - 1
                If mydatatable.Columns.Item(c).ColumnName = CodeACte Then
                    Return Val(mydatatable(0).Item(c).ToString)
                End If
            Next
        End If
        Return 0
    End Function

    'FacturationButton_Click   
    Public Sub Button_Facturation_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Facturation.Click
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If
        Try
            For r = 0 To Vente.RowCount - 1
                If Vente.Item(Vente_produits.Index, r).Value = "" Then
                    Vente.Item(VenteType.Index, r).Value = ""
                End If
            Next
        Catch ex As Exception

        End Try
        '____________________________________________________________________________
        HonoDispGlobaux_CodeJustifExo = "0"
        HonoDispGlobaux_TauxAMO = 0
        HonoDispGlobaux_TauxAMC = 0
        '____________________________________________________________________________
        If Config.facilEpharm_Activé = True Then
            If Not facilEpharm.Ordo_row Is Nothing Then
                If facilEpharm_Ordo_Etat <> "" Then
                    Select Case facilEpharm_Ordo_Etat
                        Case "Reçue"
                            FacilEpharm_Save(facilEpharm.Ordo_row.Id_Ordo, "Confirmée")
                        Case "Confirmée"
                            FacilEpharm_Save(facilEpharm.Ordo_row.Id_Ordo, "Préparée")
                    End Select
                End If
            End If
        End If

        VenteForm.Total_des_Montants_Facturés = 0
        VenteForm.Total_FSE = 0


        TauxSNCF = False
        Médecin_SCNCF_already_asked = False
        accident_régime_agricole = ""


        'If Ventes_enchainées_Last_Bénéficiaire Is Nothing Then Ventes_enchainées_Last_Bénéficiaire = ""
        'If ComboBoxLECTURE_VITALE.Text <> "" Then
        '    Ventes_enchainées_Last_Bénéficiaire = ComboBoxLECTURE_VITALE.Text
        'End If


        For r = 0 To Vente.Rows.Count - 1
            If Val(Vente.Item(VentePrix.Index, r).Value) <> 0 And Val(Vente.Item(VenteQuantité.Index, r).Value) <> 0 And Val(Vente.Item(VenteTotal.Index, r).Value) = 0 Then
                MyMsg_Box.Presentation("Officine !", "Validez quantités", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Exit Sub
            End If



        Next
        If DP_incitation() = False Then
            Exit Sub
        End If

        If Reprise_Facture_Num > 0 Then
            Reprise_Facture_Parts_Concernées.ShowDialog()
            If Reprise_AMO = False And Reprise_AMC = False Then
                Exit Sub
            ElseIf Reprise_AMO = True And Reprise_AMC = False Then
                CheckBox_Facturation_AMC.Checked = False
            End If
        End If

        '_____________________________________________________________________________________________________________________________
        'IAM_info_form.recherche_IAM_()
        If ComboBoxLECTURE_VITALE.Text <> "" And InteractionToolStripMenuItem.Checked = True Then
            'IAM_info_form.recherche_IAM_2()
            IAM_info_form.recherche_IAM()
            IAM_info_form.Visible = False
            IAM_info_form.ShowDialog()
            If IAM_info_form.Interactions_détectées_continuer_facturation = False Then
                Exit Sub
            End If
        End If
        '_____________________________________________________________________________________________________________________________
        Commandes_Panel.Width = 0
        Button_Facturation.Focus()

        '_____________________________________________________________________________________________________________________________
        'verifier présence adresse 'verifier présence code acte
        If Facturation_automatique = False Then
            For r = 0 To Vente.Rows.Count - 2
                If UCase(Vente.Item(VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                    If Vitale_adresse_TextBox.Text = "" And ComboBoxLECTURE_VITALE.Text <> "" Then
                        MyMsg_Box.Presentation("Officine !", "Renseigner adresse patient", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        Exit Sub
                    End If
                    If Vente.Item(VenteType.Index, r).Value <> "" And Vente.Item(VenteCodeActe.Index, r).Value = "" Then
                        MyMsg_Box.Presentation("Officine !", "Renseigner Code(s) Acte manquant(s)" + Chr(10) + Vente.Item(Vente_produits.Index, r).Value.ToString, False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        Exit Sub
                    End If
                End If
            Next
        End If
      
        '________________________________________________________________________________________________________________________
        If CurrentBenéficiaire.AMC_NumMutuelle = "" And CurrentBenéficiaire.AMC_NumOrganisme = "" And _
           MUT_NumMutuelle_TextBox.Text = "" And AMC_NumAMC_TextBox.Text = "" And CurrentFactureVitale.TOP_CMU = False Then
            CheckBox_Facturation_AMC.Checked = False
        End If
        CurrentFactureVitale.Clear(False)

        '_____________________________________________________________________________________________________________________________
        'tableau vente vide
        If Vente.RowCount = 1 Then
            Me.Enabled = True
            Exit Sub
        End If
        '____________________________________________________________________________________________________
        'boolean pour verifier si lignes déja traités
        ReDim Preserve tab_Lignes_Vente(Vente.RowCount - 2)
        For j = 0 To tab_Lignes_Vente.Length - 1
            tab_Lignes_Vente(j).Ligne_traitée = False
        Next


        '_____________________________________________________________________________________________________________________________
        'retire les db null de vente(datagrid)
        For r = 0 To Vente.RowCount - 1
            For c = 0 To Vente.ColumnCount - 1
                If Vente.Item(c, r).Value Is DBNull.Value Or Vente.Item(c, r).Value Is Nothing Then
                    Vente(c, r).Value = ""
                End If
            Next
        Next
        '------------------------------------------------------------------------------
        ''initialise certaine valeur dans vente si defaut
        'For r = 0 To Vente.RowCount - 1
        '    If Val(Vente.Item(VenteTFRprix.Index, r).Value) = 0 Then
        '        Vente.Item(VenteTFRprix.Index, r).Value = Vente.Item(VentePrix.Index, r).Value
        '    End If
        'Next
        '------------------------------------------------------------------------------
        'TEST_TECH Formater_Facture 3.88 Possibilité de réaliser une facture sécurisée en mode SESAM sans Vitale lorsque le produit LPP a pour type de service "L"
        'ou pour des prestations AAR, MAD et AAD quel que soit le type de service.
        Dim possibilité As Boolean = True
        For i = 0 To tab_Lignes_Vente.Length - 1
            If Me.ProduitsTableAdapter.Select_LPP_Type_Service(Vente(VenteCIP.Index, i).Value, Vente(VenteEAN13.Index, i).Value, Vente(Ventecab.Index, i).Value, Vente(Vente_produits.Index, i).Value) <> "L" And Vente(VenteCodeActe.Index, i).Value <> "AAR" And Vente(VenteCodeActe.Index, i).Value <> "MAD" And Vente(VenteCodeActe.Index, i).Value <> "AAD" Then
                possibilité = False
            End If
        Next
        '------------------------------------------------------------------------------
        'appel facturation Vitale pour lignetraitées(i)=false
        'For i = 0 To tab_Lignes_Vente.Length - 1
        For i = 0 To Vente.RowCount - 1
            'If tab_Lignes_Vente(i).Ligne_traitée = False Then
            If UCase(Vente.Item(VenteType.Index, i).Value) <> "VENTE DIRECTE" Then
                If CheckBoxModeDegradé.Checked = True Then
                    ModeSecur = "5"
                Else
                    ModeSecur = "3"
                End If
                '------------------------------------------------------------------------------
                ''TEST_TECH Formater_Facture 3.88
                If possibilité = True And Jeux_d_essai2.Visible = False Then
                    MyMsg_Box.Presentation("Officine ?", "Voulez-vous sécuriser cette facture en mode SESAM sans Vitale?", True, "OUI", True, "NON", True, "Annuler")
                    Dim reponse = MyMsg_Box.ShowDialog
                    Select Case reponse
                        Case MsgBoxResult.Yes
                            ModeSecur = "1"
                        Case MsgBoxResult.Cancel
                            Exit Sub
                    End Select
                End If
                '------------------------------------------------------------------------------
                'desynchronisé?
                Dim ConfigXml As New XmlDocument
                ConfigXml.Load(Application.StartupPath + "\config.xml")
                Dim XMLelementliste As XmlNodeList
                XMLelementliste = ConfigXml.GetElementsByTagName("Configuration")
                If Config.Configuration_Desynchroniser = True Then
                    ModeSecur = "4"
                End If
                '------------------------------------------------------------------------------
                If FacturationVitale() = False Then
                    Button_Facturation.Visible = True
                    Me.Enabled = True
                    Exit Sub
                End If

                Exit For

            End If

        Next
        '-------------------------------------------------------------------------------------------------------------
        'Ventes Directes
        Dim VenteDirecteCréée As Boolean = False
        For i = 0 To tab_Lignes_Vente.Length - 1 '
            If UCase(Vente(VenteType.Index, i).Value.ToString) = "VENTE DIRECTE" Then
                If VenteDirecteCréée = False Then
                    CurrentFactureVenteDirecte.NumVenteDirecte = Me.Facture_VenteDirecteTableAdapter1.SelectMaxNum + 1
                    CurrentFactureVenteDirecte.Nir = CurrentBenéficiaire.G101C8
                    CurrentFactureVenteDirecte.Nom_Complet = ComboBoxLECTURE_VITALE.Text
                    CurrentFactureVenteDirecte.Date_ = Format(Now, "yyyyMMddHHmmss")
                    CurrentFactureVenteDirecte.Total = 0
                    ReDim CurrentFactureVenteDirecte.lignes(0)
                    VenteDirecteCréée = True
                    Me.ActesTableAdapter.Delete_By_NumFactureVenteDirecte(CurrentFactureVenteDirecte.NumVenteDirecte.ToString) 'supprime les actes pouvant trainer suite à plantage
                End If

                ReDim Preserve CurrentFactureVenteDirecte.lignes(CurrentFactureVenteDirecte.lignes.Length)
                CurrentFactureVenteDirecte.lignes(CurrentFactureVenteDirecte.lignes.Length - 2).CIP = Vente(VenteCIP.Index, i).Value
                CurrentFactureVenteDirecte.lignes(CurrentFactureVenteDirecte.lignes.Length - 2).EAN13 = Vente(VenteEAN13.Index, i).Value
                CurrentFactureVenteDirecte.lignes(CurrentFactureVenteDirecte.lignes.Length - 2).PrixUnitaire = Vente(VentePrix.Index, i).Value
                CurrentFactureVenteDirecte.lignes(CurrentFactureVenteDirecte.lignes.Length - 2).Quantité = Vente(VenteQuantité.Index, i).Value
                'CurrentFactureVenteDirecte.lignes(CurrentFactureVenteDirecte.lignes.Length - 2).Remise = Vente(VenteRemise.Index, i).Value
                CurrentFactureVenteDirecte.lignes(CurrentFactureVenteDirecte.lignes.Length - 2).Total = Vente(VenteTotal.Index, i).Value
                CurrentFactureVenteDirecte.Total = CurrentFactureVenteDirecte.Total + CurrentFactureVenteDirecte.lignes(CurrentFactureVenteDirecte.lignes.Length - 2).Total
                tab_Lignes_Vente(i).Ligne_traitée = True
                SauvegardeActes(i, "", CurrentFactureVenteDirecte.NumVenteDirecte.ToString) 'enregistrements actes bdd
                tab_Lignes_Vente(i).Ligne_traitée = True
            End If
        Next
        If CurrentFactureVenteDirecte.NumVenteDirecte <> 0 Then
            Me.Facture_VenteDirecteTableAdapter1.Insert(CurrentFactureVenteDirecte.NumVenteDirecte, CurrentFactureVenteDirecte.Nir, CurrentFactureVenteDirecte.Date_, CurrentFactureVenteDirecte.Total, CurrentFactureVenteDirecte.Nom_Complet, RetrocessionToolStripMenuItem.Checked)
        End If
        VenteDirecteCréée = Nothing


        '____________________________________________________________________________________________________
        'Update Stock
        If Reprise_Facture_Num = 0 Then
            For i = 0 To Vente.RowCount - 1
                Try
                    If Vente.Item(Vente_Stock_Suivi.Index, i).Value = True Then
                        If Vente.Item(VenteEAN13.Index, i).Value <> "" Then
                            Me.ProduitsTableAdapter.UpdateStock_By_CIP_CAB(Val(Vente.Item(VenteQuantité.Index, i).Value) * (-1), Vente.Item(VenteEAN13.Index, i).Value, Vente.Item(Ventecab.Index, i).Value)
                        ElseIf Vente.Item(VenteCIP.Index, i).Value <> "" Then
                            Me.ProduitsTableAdapter.UpdateStock_By_CIP_CAB(Val(Vente.Item(VenteQuantité.Index, i).Value) * (-1), Vente.Item(VenteCIP.Index, i).Value, Vente.Item(Ventecab.Index, i).Value)
                        ElseIf Vente.Item(Ventecab.Index, i).Value <> "" Then
                            Me.ProduitsTableAdapter.UpdateStock_By_CIP_CAB(Val(Vente.Item(VenteQuantité.Index, i).Value) * (-1), "", Vente.Item(Ventecab.Index, i).Value)
                        ElseIf Vente.Item(Vente_produits.Index, i).Value <> "" Then 'And Vente.Item(VenteCodeActe.Index, i).Value = "" Then
                            Me.ProduitsTableAdapter.UpdateStock_by_Designation(Val(Vente.Item(VenteQuantité.Index, i).Value) * (-1), Vente.Item(Vente_produits.Index, i).Value)
                        End If
                    End If
                Catch ex As Exception

                End Try
            Next
        End If

        '____________________________________________________________________________________________________
        'affiche vente
        Vente.Visible = False
        Button_Facturation.Visible = False
        'Dim my_VenteForm As New VenteForm
        'my_VenteForm.ShowDialog()
        Vente.CurrentCell = Vente.Item(0, 0) '<-- évite une errreur de revalidation de champs supprimmés lorsqu'on valide l'encaissement
        'VenteForm.ShowDialog()

        Me.Hide()
        VenteForm.Visible = True
        VenteForm.BringToFront()
        VenteForm.Select()
        VenteForm.Activate()
    End Sub
    'FacturationVitale
    Public Function FacturationVitale() As Boolean


        ReDim Preserve CurrentFactureVitale.Non_Rembousable_CheckBox(Vente.RowCount) 'histoire de pas planter quand on test les valeurs de ce tableau
        '_____________________________________________________________________________________________________________________________
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        'verification si facturation vitale
        Dim FactureTypeVitale As Boolean = False
        For j = 0 To Vente.RowCount - 2
            If Vente(VenteType.Index, j).Value = "assurance" Or Vente(VenteType.Index, j).Value = "ALD" Or Vente(VenteType.Index, j).Value = "PREV" Or Vente(VenteType.Index, j).Value = "SP" Then
                FactureTypeVitale = True
            End If
        Next
        If FactureTypeVitale = False Then
            FactureTypeVitale = Nothing
            Me.Enabled = True
            Return True

        End If


        '_____________________________________________________________________________________________________________________
        FI118_nombre_enregistrements_types_4 = 0

        If CONTROLE_Num_AMC() = False Then
            Return False
        End If
        If CONTROLE_Date_Maternité() = False Then
            Return False
        End If
        If CONTROLE_CompatibilitActes_qualité_bénéficiaire() = False Then
            Return False
        End If
        If CONTROLE_Nécessité_Entente_Préalable_pour_LPP(Format(Date_Droits_AMO(), "yyyyMMdd")) = False Then
            Return False
        End If
        If CONTROLE_Top_Codage_Affiné() = False Then
            Return False
        End If
        If CONTROLE_CDC_Table7() = False Then
            Return False
        End If
        CONTROLE_Transmission_AMC()

        'If NatureAssurance_Button.Text = "SMG" Then
        '    If CONTROLE_SMG_Ordre_Saisie_Actes() = False Then
        '        Return False
        '    End If
        'End If
        If Hono_Disp_Controle() = False Then
            Return False
        End If

        Me.Enabled = False
        '____________________________________________________________________________________________________

        'verif ALD
        Dim NbreLignesALD As Integer = 0
        For r = 0 To Vente.Rows.Count - 1
            If Vente(VenteType.Index, r).Value = "ALD" Then
                NbreLignesALD = NbreLignesALD + 1
            End If
        Next
        Select Case NbreLignesALD
            Case 0
                If Val(CodeALD(CurrentFactureVitale.G1440C1, Date_Droits_AMO)) <> 0 And Jeux_d_essai2.Visible = False And jeux_d_essai_CAS_STANDARD.Visible = False Then
                    MyMsg_Box.Presentation("Officine ?", "Présence d'un code ALD." + Chr(10) + "Aucune ligne n'est renseignée ALD." + Chr(10) + "Continuer?", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog() = MsgBoxResult.No Then
                        Me.Enabled = True
                        Return False
                    End If
                End If
            Case Else
                If Val(CodeALD(CurrentFactureVitale.G1440C1, Date_Droits_AMO)) = 0 Then
                    MyMsg_Box.Presentation("Officine ?", NbreLignesALD.ToString + " ligne(s) ALD." + Chr(10) + "Aucun code ALD n'est renseignée" + Chr(10) + "Continuer en forçant le code ALD?", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog() = MsgBoxResult.No Then
                        Me.Enabled = True
                        Return False
                    Else
                        CurrentFactureVitale.G1440C1 = "A"
                    End If
                End If
        End Select
        '_____________________________________________________________________________________________________________________________
        'verification specialité CPS
        ValeurChamp = "@@"
        SGD_LireChamp(NumeroSessionCPS, 2, Occurence_Grp2, 14, ValeurChamp, 2)
        Select Case ValeurChamp
            Case "@@"
                If ModeSecur <> "4" Then
                    MyMsg_Box.Presentation("Officine !", "AUCUNE CARTE PS N'A ÉTÉE LUE" + Chr(10) + "VÉRIFIEZ CARTE PS", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Me.Enabled = True
                    Return False
                End If
            Case "50"
            Case "99"
                If Config.Activer_Session_Remplacement = False Then
                    MyMsg_Box.Presentation("Officine !", "LA CARTE PS INTRODUITE N'EST PAS UNE CARTE DE PHARMACIEN" + Chr(10) + "Il n'est pas possible d'utiliser cette carte", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Me.Enabled = True
                    Return False
                End If
            Case Else
                MyMsg_Box.Presentation("Officine !", "LA CARTE PS INTRODUITE N'EST PAS UNE CARTE DE PHARMACIEN" + Chr(10) + "Il n'est pas possible d'utiliser cette carte", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Me.Enabled = True
                Return False
        End Select
        '____________________________________________________________________________________________________
        'verification selection prescripteur
        If FactureTypeVitale = True And CurrentBenéficiaire.Prescripteur_ID = "" And CurrentBenéficiaire.G101C8 <> Config.Data_ContaceptifUrgence_NIR Then
            MyMsg_Box.Presentation("Officine !", "PRESCRIPTEUR DOIT ETRE RENSEIGNE", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Me.Enabled = True
            Return False
        End If
        '___________________________________________________________________________________________________
        If CurrentBenéficiaire.G101C8 = Config.Data_ContaceptifUrgence_NIR Then
            ModeSecur = "1"
            MyMsg_Box.Presentation("Officine !", "DELIVRANCE CONTRACEPTIF URGENCE POUR MINEURE" + Chr(10) + Chr(10) + "FACTURE EN MODE SESAM SANS VITALE", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
        End If
        '____________________________________________________________________________________________________
        'Verification que lecture vitale est faite avant facturation
        If FactureTypeVitale = True Then
            ValeurChamp = "@@@@@@@@@@@@@"
            TailleMax = 13
            If SGD_LireChamp(NumeroSessionVitale, 101, 1, 8, ValeurChamp, TailleMax) <> 0 And ModeSecur = "3" And ComboBoxLECTURE_VITALE.Text <> "" Then
                MyMsg_Box.Presentation("Officine !", "ERREUR ACQUISITION DROIT VITALE", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Me.Enabled = True
                Return False
            End If
        End If
        'verif pas de warning lecture droit vitale
        If Warning_Lecture_Vitale <> 0 Then
            MyMsg_Box.Presentation("Officine !", "ERREUR ACQUISITION DROIT VITALE" + Chr(10) + Warning_Lecture_Vitale.ToString, False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Me.Enabled = True
            Return False
        End If
        '____________________________________________________________________________________________________
        'Accident du Travail
        FS_Papier = False
        If NatureAssurance_Button.Text = "ACCIDENT DU TRAVAIL" Then

            Dim Accident_Travail_form As New Accident_Travail
            Accident_Travail_form.ShowDialog()
            If current_AT.selected = False And FS_Papier = False Then
                Me.Enabled = True
                Return False
            End If
        End If


        '____________________________________________________________________________________________________
        'verification données AMC
        If AMC_NumAMC_TextBox.Text <> "" And AMC_Piècejustificative_ComboBox.SelectedIndex = -1 And CheckBox_Facturation_AMC.Checked = True _
        And CurrentFactureVitale.TP_AMC = True Then
            MyMsg_Box.Presentation("Officine !", "INDIQUEZ PIECE JUSTIFICATIVE POUR AMC", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Me.Enabled = True
            Return False
        End If
        '____________________________________________________________________________________________________

        Mode_Gestion()
        '____________________________________________________________________________________________________
        'If CheckBox_Facturation_AMC.Checked = True And Config.STS_Activer = False And Config.OCT_UtilisationOCT = False And CurrentFactureVitale.Mode_Gestion <> "RO" Then
        '    Me.Enabled = True
        '    Return False
        'End If
        '____________________________________________________________________________________________________
        'utilisation des conventions oui/non
        If CurrentConvention.selected = False Then
            Dim ConfigXml As New XmlDocument
            ConfigXml.Load(Application.StartupPath + "\config.xml")
            Dim XMLelementliste As XmlNodeList
            XMLelementliste = ConfigXml.GetElementsByTagName("Conventions")
            If UCase(XMLelementliste.Item(0).Item("Activer").InnerText) = "OUI" And (AMC_NumAMC_TextBox.Text <> "" Or MUT_NumMutuelle_TextBox.Text <> "") And CheckBox_Facturation_AMC.Checked = True And _
                ((CurrentFactureVitale.TOP_CMU = False Or CurrentFactureVitale.Sortant_CMU = True) Or CurrentFactureVitale.Mode_Gestion <> "RO") And CurrentFactureVitale.Mode_Gestion <> "AME_Base" And CurrentFactureVitale.Mode_Gestion <> "AME_Compl" Then
                Vente.Visible = False
                Détail_Bénéficiaire_Panel.Visible = False
                Button_Facturation.Visible = False
                Choix_Convention_Facturation.ShowDialog()
            End If
        End If
        '____________________________________________________________________________________________________
        'choix TP
        'FS_Papier = False 'déja initialiser dans la partie accident du travail
        Choix_Facturation_TP_retour = False
        Vente.Visible = False
        Détail_Bénéficiaire_Panel.Visible = False
        'If jeux_d_essai.Visible = True Or Jeux_d_essai2.Visible = True Then
        '    Choix_Facturation_TP.Visible = True
        'Else
        Choix_Facturation_TP.ShowDialog()
        'End If
        If Choix_Facturation_TP_retour = False Then
            Me.Enabled = True
            Return False
        End If
        'If FS_Papier = True Then
        '    Me.Enabled = True
        '    Return False
        'End If

        If FS_Papier = False Then
            'Table 11.4
            If FS_Papier = False And CurrentBenéficiaire.G101C10 = "02" And (CurrentBenéficiaire.G101C11 = "571" Or _
                                                                             CurrentBenéficiaire.G101C11 = "575" Or _
                                                                             CurrentBenéficiaire.G101C11 = "579" Or _
                                                                             CurrentBenéficiaire.G101C11 = "671" Or _
                                                                             CurrentBenéficiaire.G101C11 = "675" Or _
                                                                             CurrentBenéficiaire.G101C11 = "679" Or _
                                                                             CurrentBenéficiaire.G101C11 = "681" Or _
                                                                             CurrentBenéficiaire.G101C11 = "685" Or _
                                                                             CurrentBenéficiaire.G101C11 = "689") Then
                MyMsg_Box.Presentation("Officine ?", "FSE relative à un Accident de la Vie Privée?", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                    MyMsg_Box.Presentation("Officine !", "Caisses gestionnaires du régime agricole n’autorisant pas l’envoi de FSE relative à un Accident de la Vie Privée", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Me.Enabled = True
                    Return False
                End If
            End If 'Table 11.4
            '___________________________________________________________________________________________________
            Dim que_des_PHN As Boolean = True
            For r = 0 To Vente.RowCount - 2
                If Vente.Item(VenteCodeActe.Index, r).Value.ToString <> "PHN" Then
                    que_des_PHN = False
                    Exit For
                End If
            Next
            If que_des_PHN = True And NatureAssurance_Button.Text <> "SMG" Then
                CurrentFactureVitale.TP_AMO = False
            End If
            '____________________________________________________________________________________________________
            Mode_Gestion()
            '____________________________________________________________________________________________________
            If CurrentFactureVitale.Mode_Gestion <> "RO" And CurrentFactureVitale.Mode_Gestion <> "AME_Base" And CurrentFactureVitale.Mode_Gestion <> "AME_Compl" _
            And Config.OCT_UtilisationOCT = False And CurrentConvention.selected = False And CheckBox_Facturation_AMC.Checked = True Then
                MyMsg_Box.Presentation("Officine !", "Pas de DRE possible en gestion séparée sans convention choisie", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Me.Enabled = True
                Return False
            End If

            '____________________________________________________________________________________________________

            'CDC 4.2.1.5.2 Détermination du service ouvert pour l’assuré par la complémentaire
            'a) determination de l'indicateur de traitement

            'If AMC_Piècejustificative_ComboBox.SelectedIndex = 4 Then
            '    CurrentBenéficiaire.AMC_Indicateurdetrairement = AMC_Indicateurdetrairement_TextBox.Text
            'End If

            If CurrentFactureVitale.Mode_Gestion <> "RO" And CurrentFactureVitale.Mode_Gestion <> "AME_Base" And CurrentFactureVitale.Mode_Gestion <> "AME_Compl" Then 'Gestion séparée

                If CurrentConvention.selected = True And CurrentConvention.usage_attestation_papier = "0" And CurrentBenéficiaire.AMC_Piecejustificative <> "4" Then
                    If AMC_Indicateurdetrairement_TextBox.Text = "" Then
                        CurrentBenéficiaire.AMC_Indicateurdetrairement = "00"
                    Else
                        CurrentBenéficiaire.AMC_Indicateurdetrairement = AMC_Indicateurdetrairement_TextBox.Text
                    End If
                ElseIf CurrentConvention.selected = True And CurrentConvention.usage_attestation_papier = "1" And CurrentBenéficiaire.AMC_Piecejustificative <> "4" Then
                    CurrentBenéficiaire.AMC_Indicateurdetrairement = "32"
                End If
            Else 'Gestion unique
                If CurrentBenéficiaire.AMC_Indicateurdetrairement = "" Then
                    CurrentBenéficiaire.AMC_Indicateurdetrairement = "01"
                End If
                If CurrentFactureVitale.TOP_CMU = True And CurrentFactureVitale.Sortant_CMU = False Then
                    CurrentBenéficiaire.AMC_Indicateurdetrairement = "62"
                End If

            End If


            'b) determination du service ouvert
            If CurrentFactureVitale.Mode_Gestion <> "RO" And CurrentFactureVitale.Mode_Gestion <> "AME_Base" And CurrentFactureVitale.Mode_Gestion <> "AME_Compl" And Config.OCT_UtilisationOCT = False Then 'Gestion séparée

                Select Case Mid(CurrentBenéficiaire.AMC_Indicateurdetrairement, 1, 1)

                    Case "1" 'Hors tiers payant
                        If CurrentFactureVitale.TP_AMC = True Then
                            MyMsg_Box.Presentation("Officine ?", "L'indicateur de traitement indique que le service tiers payant pour la part complémentaire n'est pas ouvert." + Chr(10) + "Voulez vous facturer sans TP complémentaire", True, "OUI", True, "NON", False, "")
                            If MyMsg_Box.ShowDialog = MsgBoxResult.Yes Then
                                CurrentFactureVitale.TP_AMC = False
                            Else
                                Me.Enabled = True
                                Return False
                            End If


                        End If

                    Case "2", "6", "7" 'Tiers Payant
                        If CurrentFactureVitale.TP_AMC = False And CheckBox_Facturation_AMC.Checked = True Then
                            MyMsg_Box.Presentation("Officine !", "L'indicateur de traitement indique que le service hors tiers payant pour la part complémentaire n'est pas ouvert." + Chr(10) + "Vous pouvez decocher Transmettre Assurance Complémentaire", False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                            Me.Enabled = True
                            Return False
                        End If

                    Case "0"
                        If (CurrentFactureVitale.TP_AMC = True Or CheckBox_Facturation_AMC.Checked = True) _
                        And CurrentFactureVitale.Mode_Gestion <> "RO" And CurrentFactureVitale.Mode_Gestion <> "AME_Base" And CurrentFactureVitale.Mode_Gestion <> "AME_Compl" Then
                            MyMsg_Box.Presentation("Officine !", "L'indicateur de traitement indique : Pas de DRE possible." + Chr(10) + "Vous pouvez decocher transmettre Assurance Complémentaire et facturer en Hors TP part complémentaire", False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                            CurrentConvention.clear()
                            Me.Enabled = True
                            Return False
                        End If

                    Case ""
                        If (CurrentFactureVitale.TP_AMC = True Or CheckBox_Facturation_AMC.Checked = True) _
                        And CurrentFactureVitale.Mode_Gestion <> "RO" And CurrentFactureVitale.Mode_Gestion <> "AME_Base" And CurrentFactureVitale.Mode_Gestion <> "AME_Compl" Then
                            MyMsg_Box.Presentation("Officine !", "Absence d'indicateur de traitement indique : Pas de DRE possible." + Chr(10) + "Vous pouvez decocher transmettre Assurance Complémentaire et facturer en Hors TP part complémentaire", False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()

                            Me.Enabled = True
                            Return False
                        End If


                End Select


            Else 'Gestion unique
                Select Case CurrentBenéficiaire.AMC_Indicateurdetrairement
                    Case "00"
                        If CurrentFactureVitale.TP_AMC = True Or CheckBox_Facturation_AMC.Checked = True Then
                            MyMsg_Box.Presentation("Officine !", "L'indicateur de traitement indique : Pas de transmission d'information complémentaire." + Chr(10) + "Vous pouvez decocher Inclure Assurance Complémentaire et facturer en Hors TP part complémentaire", False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                            CurrentConvention.clear()
                            Me.Enabled = True
                            Return False
                        End If

                    Case ""
                        CurrentBenéficiaire.AMC_Indicateurdetrairement = "01"

                End Select

            End If
            '____________________________________________________________________________________________________
            'CDC 4.2.3.1 Cas particulier de la MFGAM, la MUTAME et la MGAT (ne pas prendre en compte la date de fin de droits mutuelle) pour les carte V1bis(CurrentBenéficiaire.G101C3 = "")

            If CurrentBenéficiaire.G101C3 = "" _
            And (CurrentBenéficiaire.G101C10.ToString = "91" Or CurrentBenéficiaire.G101C10.ToString = "92" Or CurrentBenéficiaire.G101C10.ToString = "93" Or _
            CurrentBenéficiaire.G101C10.ToString = "94" Or CurrentBenéficiaire.G101C10.ToString = "95" Or CurrentBenéficiaire.G101C10.ToString = "96" Or _
            (CurrentBenéficiaire.G101C10.ToString = "99" And (CurrentBenéficiaire.G101C12 = "0609" Or _
                                                              (CurrentBenéficiaire.G101C11 = "281" And CurrentBenéficiaire.G101C12 = "0613") Or _
                                                              (CurrentBenéficiaire.G101C11 = "441" And CurrentBenéficiaire.G101C12 = "0613")))) _
                                                              Then
                If CurrentFactureVitale.TOP_CMU = False And _
                CurrentBenéficiaire.AMC_NumOrganisme = CurrentBenéficiaire.G107C1 And AMC_Piècejustificative_ComboBox.SelectedIndex = 4 And _
                (Val(CurrentBenéficiaire.G104C14) <> 6 Or Val(Format(Date_Droits_AMC2, "yyyyMMdd")) - Val(Mid(CurrentBenéficiaire.G104C12, 1, 8)) < 160000) Then
                    AMC_DateFin_MaskedTextBox.Text = ""
                End If
            End If

            '____________________________________________________________________________________________________
            'Forçages

            If Forçages() = False Then
                Me.Enabled = True
                Return False
            End If
            '____________________________________________________________________________________________________
            'Médicaments_Détournables
            Médicaments_Détournables = False
            If MédicamentsDétournablesAutrePharmacienPréciséSurOrdonnanceToolStripMenuItem.Checked = True Then
                For r = 0 To Vente.RowCount - 1
                    If UCase(Vente.Item(VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                        Dim datatable As DataTable = Me.BDM_médicaments_detournablesTableAdapter.GetDataBy_CIP(Vente.Item(VenteEAN13.Index, r).Value, Vente.Item(VenteCIP.Index, r).Value)
                        If datatable.Rows.Count > 0 Or Vente.Item(VenteListe.Index, r).Value = "Stupéfiant" Then
                            Médicaments_Détournables = True
                            Exit For
                        End If
                    End If
                Next
            End If
            '____________________________________________________________________________________________________
            'STS
            If Config.STS_Activer = True Then
                ReDim Tab_Valeur_STS(0)
                'ReDim tab_current_formule_STS(0)
                If (CurrentFactureVitale.Mode_Gestion <> "RO" Or CurrentFactureVitale.TP_AMC = True) And _
                    (CurrentFactureVitale.Mode_Gestion <> "AME_Base" And CurrentFactureVitale.Mode_Gestion <> "AME_Compl") Then 'pas de STS en RO sans TpAMC, pas de STS pour AME
                    If Config.STS_Activer = True And (CurrentConvention.selected = False Or (CurrentConvention.selected = True And CurrentConvention.indic_desactivation_STS <> "1")) Then
                        If STS() = False Then
                            MyMsg_Box.Presentation("Officine ?", "Erreur pour les modules STS, Continuer la facturation?" + Chr(10) + "(Les montant AMC seront calculés par le progiciel en fonction de la couverture choisie.)", True, "OUI", True, "NON", False, "")
                            If MyMsg_Box.ShowDialog() = MsgBoxResult.No Then
                                CurrentConvention.selected = False
                                ReDim tab_current_formule_STS(0)
                                Me.Enabled = True
                                Return False
                            Else
                                If AMC_Couverture_TextBox.Text = "" Then
                                    MyMsg_Box.Presentation("Officine !", "Aucune couverture complémentaire renseignée: Abandon facturation", False, "", False, "", True, "OK")
                                    MyMsg_Box.ShowDialog()
                                    CurrentConvention.selected = False
                                    ReDim tab_current_formule_STS(0)
                                    Me.Enabled = True
                                    Return False
                                End If


                                'indic forçage amc
                                For j = 0 To CurrentFactureVitale.TabLigneFacture.Length - 1
                                    CurrentFactureVitale.TabLigneFacture(j).G2010C2 = "1"
                                Next

                            End If
                        End If
                    Else
                        If CurrentConvention.selected = True And CurrentConvention.indic_desactivation_STS = "1" And CurrentBenéficiaire.AMC_TypeContrat = "" Then
                            MyMsg_Box.Presentation("Officine ?", "Les services de tarification spécifiques (STS) sont desactiver pour la convention choisie," + Chr(10) + "Aucune couverture n'est renseignée," + Chr(10) + "Voulez vous continuer en hors tiers payant part complémenatire?", True, "OUI", True, "NON", False, "")
                            If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                                CurrentFactureVitale.TP_AMC = False

                                ''reinitialise le tableau modifié par STS
                                'For j = 0 To tab_Lignes_Vente.Length - 1
                                '    If UCase(Vente(VenteType.Index, j).Value.ToString) = "VENTE DIRECTE" Then
                                '        tab_Lignes_Vente(j).Ligne_traitée = True
                                '    Else
                                '        tab_Lignes_Vente(j).Ligne_traitée = False
                                '    End If
                                'Next

                            Else
                                Me.Enabled = True
                                Return False
                            End If
                        End If
                    End If
                End If
                'reinitialise le tableau modifié par STS
                For j = 0 To tab_Lignes_Vente.Length - 1
                    If UCase(Vente(VenteType.Index, j).Value.ToString) = "VENTE DIRECTE" Then
                        tab_Lignes_Vente(j).Ligne_traitée = True
                    Else
                        tab_Lignes_Vente(j).Ligne_traitée = False
                    End If
                Next
            End If 'If Config.STS_Activer = True
        End If ' If FS_Papier = False Then
        '--------------------------------------------------------------------
        'Trace
        Trace_Reset_compteur()
        FichierTrace = Application.StartupPath + "\traces\Formater_Facture_in.txt"
        '____________________________________________________________________________________________________
        'reserve une session pour la facture
        SGD_LibererSession(NumeroSessionFacture)
        SGD_ReserverSession(20000, NumeroSessionFacture)
        '____________________________________________________________________________________________________
        CurrentFactureVitale.num = FacturesTableAdapter.SelectMaxNum + 1
        Dim NumFacture_SV As Integer
        If CurrentFactureVitale.num > 999999999 Then
            NumFacture_SV = (CurrentFactureVitale.num Mod 1000000000) + 1
        Else
            NumFacture_SV = CurrentFactureVitale.num
        End If
        Me.FacturesTableAdapter.Insert1(CurrentFactureVitale.num)
        '--------------------------------------------------------------------
        'groupe 1110 à 1450
        groupe1110(NumeroSessionFacture, NumFacture_SV.ToString)
        groupe1120(NumeroSessionFacture)
        groupe1130(NumeroSessionFacture)
        groupe1140(NumeroSessionFacture)

        If groupe1150(NumeroSessionFacture) = False Then
            Return False
        End If
        groupe1160(NumeroSessionFacture)
        groupe1170(NumeroSessionFacture)
        groupe1211_1213_1214(NumeroSessionFacture, CurrentBenéficiaire.Prescripteur_ID, DatePrecription.Value)
        groupe1230(NumeroSessionFacture)
        If groupe1310(NumeroSessionFacture) = False Then
            Me.Enabled = True
            Return False
        End If
        CurrentBenéficiaire.AMC_NumOrganisme = AMC_NumAMC_TextBox.Text
        CurrentBenéficiaire.AMC_NumAdherent = AMC_Numadhérent_TextBox.Text

        'If CurrentFactureVitale.TP_AMC = True Then
        If CheckBox_Facturation_AMC.Checked = True Or CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Or (CurrentFactureVitale.TOP_CMU = True And CheckBox_Facturation_AMC.Checked = True) Then
            If groupe1321(NumeroSessionFacture) = False Then
                Me.Enabled = True
                Return False
            End If
            groupe1330(NumeroSessionFacture)
        End If
        groupe1410(NumeroSessionFacture)
        If ModeSecur = "5" Or ModeSecur = "1" Or NatureAssurance_Button.Text = "SMG" Then
            groupe1420(NumeroSessionFacture)
        End If
        groupe1440(NumeroSessionFacture)
        groupe1450(NumeroSessionFacture)
        'groupe 1511-1512-1513
        Select Case NatureAssurance_Button.Text
            Case "MALADIE"
                groupe1511(NumeroSessionFacture)
            Case "MATERNITE"
                groupe1512(NumeroSessionFacture, NatureAssuranceDateTimePicker.Value)
            Case "ACCIDENT DU TRAVAIL"
                If current_AT.selected = False Or groupe1513(NumeroSessionFacture, current_AT.DateAT, current_AT.NumAT, current_AT.CléAT) = False Then
                    Me.Enabled = True
                    Return False
                End If
            Case "PREVENTION"
                groupe1514(NumeroSessionFacture)
            Case "SMG"
                groupe1515(NumeroSessionFacture)
                SMG.Clear()
                SMG.Calcul_Montant_PEC_SMG_2()

            Case Else
                MyMsg_Box.Presentation("Officine !", "ERREUR NATURE ASSURANCE", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                SGD_LibererSession(NumeroSessionFacture)
                Me.Enabled = True
                Return False
        End Select

        'groupe 1610 et (1730 ou 1740)
        Dim Occurence1610 As Integer = 0
        Nombre_de_Prestations = 0
        Dim Total_Remboursable_par_AMO As Double = 0
        Dim Total_Théorique_Remboursable_par_AMC As Double = 0
        Dim Total_Remboursable_par_AMC As Double = 0
        For i = 0 To Vente.RowCount - 2 'parcours les lignes du tableau(graphique)vente
            If tab_Lignes_Vente(i).Ligne_traitée = False Then 'si la ligne du tableau(graphique)vente n'a pas encore étée traitée
                Select Case UCase(Vente(VenteType.Index, i).Value.ToString) 'determine les lignes pour lesquelles il faut etablire une FSE
            
                    Case "ASSURANCE", "ALD", "PREV", "SP"
                        'groupe 1610,1730,1740,1820,1840,1850,
                        Dim TypeNomenclature As String
                        TypeNomenclature = Me.CodePrestationsTableAdapter.SelectTypeNomenclatureByCodeActe(Vente(VenteCodeActe.Index, i).Value.ToString)
                        Select Case TypeNomenclature
                            Case "LPP"
                                If Vente(Vente_LPP_Kit.Index, i).Value = False Then
                                    If GrouperLPPToolStripMenuItem.Checked = True Then
                                        If groupe1610LPP_regroup(NumeroSessionFacture, i, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE) = False Then
                                            Return False
                                        End If
                                    Else
                                        If groupe1610LPP(NumeroSessionFacture, i, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE) = False Then
                                            Return False
                                        End If
                                    End If
                                    'ReDim CurrentFactureVitale.TabLigneFacture(i).DétailLpp(0)
                                    ReDim CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).DétailLpp(10)
                                    groupe1820(NumeroSessionFacture, Nombre_de_Prestations, Vente(VenteType.Index, i).Value.ToString)
                                    groupe1840(NumeroSessionFacture, Nombre_de_Prestations)
                                    If Renouvellement_TextBox.Text <> "0" Then
                                        groupe1850(NumeroSessionFacture, Nombre_de_Prestations, Renouvellement_TextBox.Text)
                                    Else
                                        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1850C2 = ""

                                    End If
                                    If groupe2000(NumeroSessionFacture, Nombre_de_Prestations, Vente(VenteCodeActe.Index, i).Value.ToString) = False Then
                                        Me.Enabled = True
                                        Return False
                                    End If
                                    groupe2010(NumeroSessionFacture, Nombre_de_Prestations)
                                    groupe2020(NumeroSessionFacture, Nombre_de_Prestations)
                                    groupe2030(NumeroSessionFacture, Nombre_de_Prestations)
                                    If GrouperLPPToolStripMenuItem.Checked = True Then 'regroupement Même actes LPP
                                        Dim Occurence1730 = 0
                                        For j = 0 To Vente.RowCount - 2 'parcours les lignes du tableau(graphique)vente pour trouver même code acte
                                            If Occurence1730 < 10 Then
                                                If Vente(VenteCodeActe.Index, i).Value = Vente(VenteCodeActe.Index, j).Value And Vente(VenteType.Index, i).Value = Vente(VenteType.Index, j).Value _
                                                    And tab_Lignes_Vente(j).Ligne_traitée = False Then
                                                    Vente(Vente_Ligne_Facture_SV.Index, j).Value = Nombre_de_Prestations
                                                    tab_Lignes_Vente(j).Ligne_traitée = True
                                                    groupe1730_regroup(NumeroSessionFacture, Nombre_de_Prestations, j, Occurence1730)
                                                    Vente(VenteAMO.Index, j).Value = CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13
                                                End If
                                            End If
                                        Next
                                    Else
                                        'If Vente(VenteLPP.Index, i).Value.ToString <> "" Then
                                        groupe1730(NumeroSessionFacture, Nombre_de_Prestations, i)
                                        'End If
                                        Vente(Vente_Ligne_Facture_SV.Index, i).Value = Nombre_de_Prestations

                                    End If

                                    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                                Else 'Vente(Vente_LPP_Kit.Index, i).Value = False
                                    Dim kit = Me.KitsTableAdapter.GetDataBy_Désignation_Kit(Vente(Vente_produits.Index, i).Value.ToString)

                                    If groupe1610LPP_Kits(NumeroSessionFacture, i, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, _
                                                           Total_Remboursable_par_AMC, kit, CInt(Vente(VenteQuantité.Index, i).Value), VenteForm.Total_FSE) = False Then
                                        Return False
                                    End If
                                    ReDim CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).DétailLpp(10)
                                    groupe1820(NumeroSessionFacture, Nombre_de_Prestations, Vente(VenteType.Index, i).Value.ToString)
                                    groupe1840(NumeroSessionFacture, Nombre_de_Prestations)
                                    If Renouvellement_TextBox.Text <> "0" Then
                                        groupe1850(NumeroSessionFacture, Nombre_de_Prestations, Renouvellement_TextBox.Text)
                                    Else
                                        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1850C2 = ""

                                    End If
                                    If groupe2000(NumeroSessionFacture, Nombre_de_Prestations, Vente(VenteCodeActe.Index, i).Value.ToString) = False Then
                                        Me.Enabled = True
                                        Return False
                                    End If
                                    groupe2010(NumeroSessionFacture, Nombre_de_Prestations)
                                    groupe2020(NumeroSessionFacture, Nombre_de_Prestations)
                                    groupe2030(NumeroSessionFacture, Nombre_de_Prestations)
                                    Dim Occurence1730 = 0
                                    For Each ligne_du_kit As PharmaDataSet.KitsRow In kit 'parcours les lignes du kit
                                        If Occurence1730 < 10 Then

                                            groupe1730_Kit(NumeroSessionFacture, Nombre_de_Prestations, ligne_du_kit, Occurence1730, CInt(Vente(VenteQuantité.Index, i).Value))

                                        End If
                                    Next
                                    Vente(Vente_Ligne_Facture_SV.Index, i).Value = Nombre_de_Prestations
                                    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                                End If
                                tab_Lignes_Vente(i).Ligne_traitée = True
                            Case Else 'Médicaments
                                If groupe1610Médicaments(NumeroSessionFacture, i, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE) = False Then
                                    Return False
                                End If
                                groupe1820(NumeroSessionFacture, Nombre_de_Prestations, Vente(VenteType.Index, i).Value.ToString)
                                groupe1840(NumeroSessionFacture, Nombre_de_Prestations)
                                If Renouvellement_TextBox.Text <> "0" Then
                                    groupe1850(NumeroSessionFacture, Nombre_de_Prestations, Renouvellement_TextBox.Text)
                                Else
                                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1850C2 = ""
                                End If
                                If groupe2000(NumeroSessionFacture, Nombre_de_Prestations, Vente(VenteCodeActe.Index, i).Value.ToString) = False Then
                                    Me.Enabled = True
                                    Return False
                                End If
                                groupe2010(NumeroSessionFacture, Nombre_de_Prestations)
                                groupe2020(NumeroSessionFacture, Nombre_de_Prestations)
                                groupe2030(NumeroSessionFacture, Nombre_de_Prestations)
                                groupe1740(NumeroSessionFacture, Nombre_de_Prestations, i)
                                groupe1741(NumeroSessionFacture, Nombre_de_Prestations)
                                Vente(Vente_Ligne_Facture_SV.Index, i).Value = Nombre_de_Prestations
                                tab_Lignes_Vente(i).Ligne_traitée = True
                        End Select 'TypeNomenclature

                End Select 'determine les lignes pour lesquelles il faut etablire une FSE
            End If
        Next 'parcours les lignes du tableau(graphique)vente

        If groupe1610_1820_hono_disp_complexe(NumeroSessionFacture, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE) = False Then
            Return False
        End If
        If HonorairesDeDispensationGlobauxToolStripMenuItem.Checked = True Then
            If Hono_Disp_Rembousable_is_in_facture() Then
                If groupe1610_1820_hono_disp_Globaux(NumeroSessionFacture, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE, "HDR") = False Then
                    Return False
                End If
                If Hono_Disp_Age_is_in_facture() Then
                    If groupe1610_1820_hono_disp_Globaux(NumeroSessionFacture, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE, "HDA") = False Then
                        Return False
                    End If
                End If
                If Hono_Disp_Médicament_Spécifique_is_in_facture() Then
                    If groupe1610_1820_hono_disp_Globaux(NumeroSessionFacture, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE, "HDE") = False Then
                        Return False
                    End If
                End If
            End If
        End If
        '____________________________________________________________________________________________________
        'SMG Droupe DPS ET SGN
        If UCase(NatureAssurance_Button.Text) = "SMG" Then
            If SMG.présence_Prestation_Remboursable_AMO = True Then
                SMG.groupe1610DPS(NumeroSessionFacture, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, VenteForm.Total_FSE)
                Me.ActesTableAdapter.Insert2(Me.ActesTableAdapter.SelectMaxNumActe + 1, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3, Format(DateExecution.Value, "yyyyMMddHHmm"), "assurance", "", "", "DPS", _
                "supplément Dérogatoire SMG sur Prestations Sanitaires remboursables", "1", SMG.Montant_PEC_SMG_restant / 100, SMG.Montant_PEC_SMG_restant / 100, SMG.Montant_PEC_SMG_restant / 100, "0", CurrentFactureVitale.G1110C1, CurrentBenéficiaire.G101C8, "", _
                100, "", "", 0, Nombre_de_Prestations, 0, "", "", current_User.ID, SMG.Montant_PEC_SMG_restant / 100, False, "")
            End If
            If SMG.présence_Prestation_NON_Remboursable_AMO = True Then
                SMG.groupe1610SGN(NumeroSessionFacture, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO, VenteForm.Total_FSE)
                If SMG.présence_Prestation_Remboursable_AMO = True Then
                    Me.ActesTableAdapter.Insert2(Me.ActesTableAdapter.SelectMaxNumActe + 1, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3, Format(DateExecution.Value, "yyyyMMddHHmm"), "assurance", "", "", "SGN", _
               "supplément Dérogatoire SMG sur Prestations Sanitaires non remboursables", "1", 0, 0, 0, "0", CurrentFactureVitale.G1110C1, CurrentBenéficiaire.G101C8, "", 100, "", "", 0, Nombre_de_Prestations, 0, "", "", current_User.ID, 0, False, "")
                Else
                    Me.ActesTableAdapter.Insert2(Me.ActesTableAdapter.SelectMaxNumActe + 1, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3, Format(DateExecution.Value, "yyyyMMddHHmm"), "assurance", "", "", "SGN", _
               "supplément Dérogatoire SMG sur Prestations Sanitaires non remboursables", "1", SMG.Montant_PEC_SMG_restant / 100, SMG.Montant_PEC_SMG_restant / 100, SMG.Montant_PEC_SMG_restant / 100, "0", CurrentFactureVitale.G1110C1, CurrentBenéficiaire.G101C8, "", _
               100, "", "", 0, Nombre_de_Prestations, 0, "", "", current_User.ID, SMG.Montant_PEC_SMG_restant / 100, False, "")
                End If
            End If
        End If

        '____________________________________________________________________________________________________
        'groupe1910
        If groupe1910(NumeroSessionFacture, Nombre_de_Prestations, VenteForm.Total_des_Montants_Facturés, Total_Remboursable_par_AMO.ToString, Total_Théorique_Remboursable_par_AMC, Total_Remboursable_par_AMC, VenteForm.Total_FSE) = False Then
            Return False
        End If
        '____________________________________________________________________________________________________
        ''groupe3700
        'If Config.STS_Activer = True Then
        '    groupe3700(NumeroSessionFacture, False)
        'End If
        '____________________________________________________________________________________________________
        'enregistrement client
        EnregistreDonnéesClientversBDD()
        '____________________________________________________________________________________________________
        Dim FactureAcreer As String = ""
        Dim erreur As Integer
        If FS_Papier = False Then
            'FI n°118 Limitation du nombre d’enregistrements de types 4 dans une facture
            If FI118_nombre_enregistrements_types_4 > 999 Then
                MyMsg_Box.Presentation("Officine !", FI118_nombre_enregistrements_types_4.ToString + " enregistrements de types 4, 999 max, la facture ne peut pas être formatée", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Return False
            End If
            '____________________________________________________________________________________________________
            'formatage facture
            If Config.OCT_UtilisationOCT = True And Config.OCT_FSEenrichies = True Or _
            CurrentFactureVitale.Mode_Gestion = "RO" Or CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Or _
            CurrentFactureVitale.G1321C2 = "" Or _
            ToolStripMenuItem_Forcer_Gestion_Unique.Checked = True Or _
            CurrentFactureVitale.Mode_Gestion = "ACS A" Or CurrentFactureVitale.Mode_Gestion = "ACS B" Or CurrentFactureVitale.Mode_Gestion = "ACS C" Then
                FactureAcreer = "1"
            ElseIf CheckBox_Facturation_AMC.Checked = True And Val(VenteForm.Total_des_Montants_Facturés) > Val(Total_Remboursable_par_AMO) Then
                If (Val(Total_Remboursable_par_AMO) > 0) And (NePasGénérerDeFSEToolStripMenuItem.Checked = False) Then
                    FactureAcreer = "3"
                Else
                    If (Val(Total_Remboursable_par_AMO) > 0) And (NePasGénérerDeFSEToolStripMenuItem.Checked = True) Then
                        MyMsg_Box.Presentation("Officine !", "MONTANT REMBOURSABLE AMO NON NUL, FSE GÉNÉRÉE", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        FactureAcreer = "3"
                    Else
                        FactureAcreer = "2"
                    End If
                End If
            Else
                FactureAcreer = "1"
            End If
            '___________________________________________________________________________________________________
            If CurrentFactureVitale.G1910C2 = CurrentFactureVitale.G1910C3 Then
                If FactureAcreer = 3 Then
                    MyMsg_Box.Presentation("Officine !", "Prise en charge 100% par AMO," + Chr(10) + "Aucune DRE n'est générée.", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    FactureAcreer = 1
                ElseIf FactureAcreer = 2 Then
                    MyMsg_Box.Presentation("Officine !", "Prise en charge 100% par AMO," + Chr(10) + "Aucune DRE n'est générée.", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Return False
                End If
            End If
            '___________________________________________________________________________________________________
            'desynchronisation
            If ModeSecur = "3" And Config.Configuration_Desynchroniser = True Then
                ModeSecur = "4"
            End If
        Else
            FactureAcreer = "FS_PAPIER"
            ModeSecur = "FS_PAPIER"
        End If ' If FS_Papier = False Then
        '___________________________________________________________________________________________________
        'Enregistrement facture dans bdd
        CurrentFactureVitale.FactureAcree = FactureAcreer
        CurrentFactureVitale.ModeSecur = ModeSecur
        CurrentFactureVitale.Bénéficiaire = ComboBoxLECTURE_VITALE.Text
        CurrentFactureVitale.Assuré = CurrentBenéficiaire.Assuré
        SaveFactureBdd(CurrentFactureVitale.num)
        '___________________________________________________________________________________________________
        'enregistrement actes(table actes)
        Dim numligne_FSV As Integer = 0

        Me.ActesTableAdapter.Delete_by_NumFacturesSV(CurrentFactureVitale.num) 'supprime les actes pouvant trainer suite à plantage
        For i = 0 To Vente.RowCount - 1
            If UCase(Vente.Item(VenteType.Index, i).Value) <> "VENTE DIRECTE" And Vente.Item(VenteType.Index, i).Value <> "" Then
                numligne_FSV = numligne_FSV + 1
                SauvegardeActes(i, CurrentFactureVitale.num, "") 'enregistrements actes bdd
            End If
        Next

        If Hono_Disp_Complexe_is_in_facture() = True Then
            numligne_FSV = numligne_FSV + 1
            Me.ActesTableAdapter.Insert(Me.ActesTableAdapter.SelectMaxNumActe + 1, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3, _
                                        Format(Now, "yyyyMMddHHmm"), "assurance", "", "", "HC", "1", "0,31", "0", CurrentFactureVitale.num, _
                                        CurrentFactureVitale.G1130C2, "", "0,31", "Honoraire dispensation complexe", CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13, 0.31, 0, "", _
                                        "", numligne_FSV, 0, 2.1, "", "", current_User.ID, CDec("0,31"), False, "")
        End If
        If HonorairesDeDispensationGlobauxToolStripMenuItem.Checked = True Then
            If Hono_Disp_Rembousable_is_in_facture() Then
                numligne_FSV = numligne_FSV + 1
                Me.ActesTableAdapter.Insert(Me.ActesTableAdapter.SelectMaxNumActe + 1, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3, _
                Format(Now, "yyyyMMddHHmm"), "assurance", "", "", "HDR", "1", (Config.Hono_Disp_HDR_tarif / 100).ToString, "0", CurrentFactureVitale.num, _
                                       CurrentFactureVitale.G1130C2, "", Config.Hono_Disp_HDR_tarif / 100, "HDR", _
                                       CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13, Config.Hono_Disp_HDR_tarif / 100, 0, "", _
                                       "", numligne_FSV, 0, 2.1, "", "", current_User.ID, Config.Hono_Disp_HDR_tarif / 100, False, "")
                If Hono_Disp_Age_is_in_facture() Then
                    numligne_FSV = numligne_FSV + 1
                    Me.ActesTableAdapter.Insert(Me.ActesTableAdapter.SelectMaxNumActe + 1, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3, _
               Format(Now, "yyyyMMddHHmm"), "assurance", "", "", "HDA", "1", (Config.Hono_Disp_HDA_tarif / 100).ToString, "0", CurrentFactureVitale.num, _
                                      CurrentFactureVitale.G1130C2, "", Config.Hono_Disp_HDA_tarif / 100, "HDA", _
                                      CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13, Config.Hono_Disp_HDA_tarif / 100, 0, "", _
                                      "", numligne_FSV, 0, 2.1, "", "", current_User.ID, Config.Hono_Disp_HDA_tarif / 100, False, "")
                End If
                If Hono_Disp_Médicament_Spécifique_is_in_facture() Then
                    numligne_FSV = numligne_FSV + 1
                    Me.ActesTableAdapter.Insert(Me.ActesTableAdapter.SelectMaxNumActe + 1, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3, _
             Format(Now, "yyyyMMddHHmm"), "assurance", "", "", "HDE", "1", (Config.Hono_Disp_HDE_tarif / 100).ToString, "0", CurrentFactureVitale.num, _
                                    CurrentFactureVitale.G1130C2, "", Config.Hono_Disp_HDE_tarif / 100, "HDE", _
                                    CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13, Config.Hono_Disp_HDE_tarif / 100, 0, "", _
                                    "", numligne_FSV, 0, 2.1, "", "", current_User.ID, Config.Hono_Disp_HDE_tarif / 100, False, "")
                End If
            End If
        End If
        '------------------------------------------------------
        If FS_Papier = False Then

            If Config.OCT_UtilisationOCT = True And Config.OCT_FSEenrichies = True Then
                FactureAcreer = "1"
            End If
            Me.Refresh()
            '___________________________________________________________________________________________________
            'R18 - Condition d’élaboration d’une Feuille de Soins Electronique en fonction de la situation du bénéficiaire
            Dim codesituationstr As String = CodeSituation(Date_Droits_AMO)
            If codesituationstr = "9020" Or codesituationstr = "9021" Or codesituationstr = "9022" Or codesituationstr = "9023" Or codesituationstr = "9024" And (FactureAcreer = "1" Or FactureAcreer = "3") Then
                MyMsg_Box.Presentation("Officine !", "Pour la CAVIMAC et pour les codes situation 9020 à 9024, il ne faut pas effectuer de Feuille de Soins électronique Sécurisée SESAM-Vitale." + Chr(10) + "CF Règle 18 du cahier des charges SESAM-Vitale", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Me.FacturesTableAdapter.DeleteByNum(CurrentFactureVitale.num)
                Me.Facture_LigneFactureTableAdapter1.Delete_By_Num_Facture(CurrentFactureVitale.num)
                Me.Facture_DétailCodeCIPTableAdapter1.Delete_By_Num_Facture(CurrentFactureVitale.num)
                Me.Facture_DétailLppTableAdapter1.Delete_By_Num_Facture(CurrentFactureVitale.num)
                Me.ActesTableAdapter.Delete_by_NumFacturesSV(CurrentFactureVitale.num)
                Me.Enabled = True
                Return False
            End If
            '___________________________________________________________________________________________________

            Bandeau_info_bas_show("FACTURATION SV")
            erreur = SIS_FormaterFactures(NomRessourcePS, NomRessourceLecteur, "", FactureAcreer, ModeSecur, NumeroSessionFacture)
            Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)


            AfficheErreur(erreur)

            If erreur <> 0 Then
                Me.FacturesTableAdapter.DeleteByNum(CurrentFactureVitale.num)
                Me.Facture_LigneFactureTableAdapter1.Delete_By_Num_Facture(CurrentFactureVitale.num)
                Me.Facture_DétailCodeCIPTableAdapter1.Delete_By_Num_Facture(CurrentFactureVitale.num)
                Me.Facture_DétailLppTableAdapter1.Delete_By_Num_Facture(CurrentFactureVitale.num)
                Me.ActesTableAdapter.Delete_by_NumFacturesSV(CurrentFactureVitale.num)
                Me.Enabled = True
                Return False
            End If
            '------------------------------------------------------
            'Visu_API agrement CNDA
            If Visu_API = True Then
                Technique_MAIN.LireSession_Out_VersFichier2(NumeroSessionFacture, Application.StartupPath + "\traces\Formater_Facture_out.txt")
            End If
            '------------------------------------------------------
            'Enregistrement des FSE et DRE (fichier)
            'CurrentFactureVitale.FactureAcree = FactureAcreer
            SaveFactureFichier(CurrentFactureVitale.num, FactureAcreer)
            'CurrentFactureVitale.Bénéficiaire = ComboBoxLECTURE_VITALE.Text
            'CurrentFactureVitale.Assuré = CurrentBenéficiaire.Assuré
            'SaveFactureBdd(NumFacture)

            '------------------------------------------------------
            'ResetForm()
        End If 'If FS_Papier = False Then
        SGD_LibererSession(NumeroSessionFacture)
        Me.Enabled = True
        Return True
        'Me.Enabled = True

    End Function

    'Test de la présence d'un client dans la bdd
    Public Function ClientConnu()

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Me.VitaleTableAdapter.selecetcountfromvitale(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G101C9, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14) = 0 Then
            CurrentBenéficiaire.Num = 0
            CurrentBenéficiaire.Chronique_Periode = 0
            CurrentBenéficiaire.DMP_Statut = "Pas d'information"
            Return False
        Else
            Try
                Dim benef As officine.PharmaDataSet.VitaleRow
                If CurrentBenéficiaire.G101C8 <> "" Then
                    benef = Me.VitaleTableAdapter.GetDataBénéficiaire(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14).Item(0)
                Else
                    benef = BDD.VitaleTableAdapter.GetData_Compte_Client_NonSV(CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3).Item(0)
                End If
                CurrentBenéficiaire.Num = benef.Num
                Last_VitalNum = CurrentBenéficiaire.Num
                CurrentBenéficiaire.Chronique_Periode = benef.Chronique_Periode
                CurrentBenéficiaire.DMP_Statut = benef.DMP_Statut
            Catch ex As Exception
            End Try
            Return True
        End If
    End Function
#End Region
#Region "Prescripteur"
    Public Sub recherche_prescripteur()
        If PrescripteurMyCombobox.Text = "" Then Exit Sub

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim mydatatable = Me.PrescripteursTableAdapter.recherche_prescripteur1(PrescripteurMyCombobox.Text)
        Select Case mydatatable.Rows.Count
            Case 0
                MyMsg_Box.Presentation("Officine ?", "Inconnu, créer prescriteur", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                    PictureBox_Edition_Prescripteur_Click(Nothing, Nothing)
                End If
            Case 1
                CurrentBenéficiaire.Prescripteur_ID = mydatatable.Item(0).IDinterne
                PrescripteurMyCombobox.Text = mydatatable.Item(0).NomPrénom
                TextBox_Prescripteur_NumID.Text = mydatatable.Item(0).Numidentification
                CurrentBenéficiaire.Prescripteur_CodeSpécialité = mydatatable.Item(0).CodeSpécialité
                Prescripteur_Spécialité_TextBox.Text = Traduction_CodeSpécialité_Prescripteur(mydatatable.Item(0).CodeSpécialité)
                TextBox_Prescripteur_NumRPPS.Text = mydatatable.Item(0).NumRPPS

            Case Else
                If mydatatable.Rows.Count < 21 Then
                    Choix_Prescripteur.ShowDialog()
                Else
                    MyMsg_Box.Presentation("Recherche de prescripteur", mydatatable.Rows.Count.ToString & " résultats pour " & PrescripteurMyCombobox.Text & vbCrLf & "Poursuivre?", True, "Oui", True, "Non", False, "")
                    If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                        Choix_Prescripteur.ShowDialog()
                    End If
                End If


        End Select
    End Sub


    Private Sub PrescripteurMyCombobox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles PrescripteurMyCombobox.KeyDown

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If e.KeyCode = Keys.Enter Then
            recherche_prescripteur()
        End If
    End Sub
    Public Sub PrescripteurMyCombobox_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles PrescripteurMyCombobox.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        recherche_prescripteur()
    End Sub

    Private Sub Affiche_prescripteur_By_ID(ByRef ID As String)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim mydatatable As DataTable = Me.PrescripteursTableAdapter.GetPrescripteurDataByIDinterne(ID)
        Select Case mydatatable.Rows.Count
            Case 1
                For i = 0 To mydatatable.Columns.Count - 1
                    Select Case mydatatable.Columns.Item(i).ColumnName
                        Case "NomPrénom"
                            PrescripteurMyCombobox.Text = mydatatable(0).Item(i).ToString
                        Case "Numidentification"
                            TextBox_Prescripteur_NumID.Text = mydatatable(0).Item(i).ToString
                    End Select
                Next
            Case Else
                ID = ""
                TextBox_Prescripteur_NumID.Text = ""
        End Select
    End Sub
#End Region

#Region "RÉÉDITION FACTURE"
    Public Sub Load_FSE(ByVal numFSE As Integer)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If


        CurrentFactureVitale.Clear(True)
        CurrentBenéficiaire.clear()
        Dim mydatatable = Me.FacturesTableAdapter.GetFactureDataByNum1(numFSE)
        Select Case mydatatable.Rows.Count
            Case 0
                MyMsg_Box.Presentation("Officine !", "Il n'y a pas de facture avec le num " + numFSE.ToString, False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Exit Sub
            Case 1
                For i = 0 To mydatatable.Columns.Count - 1
                    Select Case mydatatable.Columns.Item(i).ColumnName

                        Case "Num"
                            CurrentFactureVitale.num = mydatatable(0).Item(i)
                        Case "Bénéficiaire"
                            CurrentFactureVitale.Bénéficiaire = mydatatable(0).Item(i).ToString
                        Case "Assuré"
                            CurrentFactureVitale.Assuré = mydatatable(0).Item(i).ToString
                        Case "CRLdeFSE"
                            CurrentFactureVitale.CRLdeFSE = mydatatable(0).Item(i).ToString
                        Case "CRLdeDRE"
                            CurrentFactureVitale.CRLdeDRE = mydatatable(0).Item(i).ToString
                            'Case "Num_Lot"
                            '    CurrentFactureVitale.Num_Lot = mydatatable(0).Item(i).ToString
                            'Case "Date_Lot"
                            '    CurrentFactureVitale.Date_Lot = mydatatable(0).Item(i).ToString
                        Case "G1110C1"
                            CurrentFactureVitale.G1110C1 = mydatatable(0).Item(i).ToString
                        Case "G1110C2"
                            CurrentFactureVitale.G1110C2 = mydatatable(0).Item(i).ToString
                        Case "G1110C3"
                            DateExecution.Value = Mid(mydatatable(0).Item(i).ToString, 7, 2) + "/" + Mid(mydatatable(0).Item(i).ToString, 5, 2) + "/" + Mid(mydatatable(0).Item(i).ToString, 1, 4)
                            CurrentFactureVitale.G1110C3 = mydatatable(0).Item(i).ToString
                        Case "G1110C4"
                            CurrentFactureVitale.G1110C4 = mydatatable(0).Item(i).ToString
                        Case "G1120C1"
                            CurrentFactureVitale.G1120C1 = mydatatable(0).Item(i).ToString
                        Case "G1130C1"
                            CurrentBenéficiaire.G101C7 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1130C1 = mydatatable(0).Item(i).ToString
                        Case "G1130C2"
                            CurrentBenéficiaire.G101C8 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1130C2 = mydatatable(0).Item(i).ToString
                        Case "G1130C3"
                            CurrentBenéficiaire.G101C9 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1130C3 = mydatatable(0).Item(i).ToString
                        Case "G1130C4"
                            CurrentBenéficiaire.G104C12 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1130C4 = mydatatable(0).Item(i).ToString
                        Case "G1130C5"
                            CurrentBenéficiaire.G104C13 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1130C5 = mydatatable(0).Item(i).ToString
                        Case "G1130C6"
                            CurrentBenéficiaire.G104C14 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1130C6 = mydatatable(0).Item(i).ToString
                        Case "G1130C7"
                            CurrentBenéficiaire.G106C3(0) = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1130C7 = mydatatable(0).Item(i).ToString
                        Case "G1130C8"
                            CurrentBenéficiaire.G106C4(0) = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1130C8 = mydatatable(0).Item(i).ToString
                        Case "G1160C1"
                            CurrentBenéficiaire.G104C9 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1160C1 = mydatatable(0).Item(i).ToString
                        Case "G1160C2"
                            CurrentBenéficiaire.G104C10 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1160C2 = mydatatable(0).Item(i).ToString
                        Case "G1211C1"
                            CurrentFactureVitale.G1211C1 = mydatatable(0).Item(i).ToString
                        Case "G1211C2"
                            CurrentFactureVitale.G1211C2 = mydatatable(0).Item(i).ToString
                        Case "G1211C3"
                            CurrentFactureVitale.G1211C3 = mydatatable(0).Item(i).ToString
                        Case "G1211C4"
                            CurrentFactureVitale.G1211C4 = mydatatable(0).Item(i).ToString
                        Case "G1211C5"
                            CurrentFactureVitale.G1211C5 = mydatatable(0).Item(i).ToString
                        Case "G1211C6"
                            CurrentFactureVitale.G1211C6 = mydatatable(0).Item(i).ToString
                        Case "G1211C7"
                            CurrentFactureVitale.G1211C7 = mydatatable(0).Item(i).ToString
                        Case "G1213C1"
                            CurrentFactureVitale.G1213C1 = mydatatable(0).Item(i).ToString
                        Case "G1213C2"
                            CurrentFactureVitale.G1213C2 = mydatatable(0).Item(i).ToString
                        Case "G1213C3"
                            CurrentFactureVitale.G1213C3 = mydatatable(0).Item(i).ToString
                        Case "G1213C4"
                            CurrentFactureVitale.G1213C4 = mydatatable(0).Item(i).ToString
                        Case "G1213C5"
                            CurrentFactureVitale.G1213C5 = mydatatable(0).Item(i).ToString
                        Case "G1213C6"
                            CurrentFactureVitale.G1213C6 = mydatatable(0).Item(i).ToString
                        Case "G1213C7"
                            CurrentFactureVitale.G1213C7 = mydatatable(0).Item(i).ToString
                        Case "G1213C8"
                            CurrentFactureVitale.G1213C8 = mydatatable(0).Item(i).ToString
                        Case "G1214C1"
                            CurrentFactureVitale.G1214C1 = mydatatable(0).Item(i).ToString
                        Case "G1214C2"
                            CurrentFactureVitale.G1214C2 = mydatatable(0).Item(i).ToString
                        Case "G1214C3"
                            CurrentFactureVitale.G1214C3 = mydatatable(0).Item(i).ToString
                        Case "G1214C4"
                            CurrentFactureVitale.G1214C4 = mydatatable(0).Item(i).ToString
                        Case "G1214C5"
                            CurrentFactureVitale.G1214C5 = mydatatable(0).Item(i).ToString
                        Case "G1214C6"
                            CurrentFactureVitale.G1214C6 = mydatatable(0).Item(i).ToString
                        Case "G1214C7"
                            CurrentFactureVitale.G1214C7 = mydatatable(0).Item(i).ToString
                        Case "G1214C8"
                            CurrentFactureVitale.G1214C8 = mydatatable(0).Item(i).ToString
                        Case "G1230C1"
                            CurrentFactureVitale.G1230C1 = mydatatable(0).Item(i).ToString

                        Case "G1310C1"
                            CurrentBenéficiaire.G101C10 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1310C1 = mydatatable(0).Item(i).ToString
                        Case "G1310C2"
                            CurrentBenéficiaire.G101C11 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1310C2 = mydatatable(0).Item(i).ToString
                        Case "G1310C3"
                            CurrentBenéficiaire.G101C12 = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.G1310C3 = mydatatable(0).Item(i).ToString
                        Case "G1310C4"
                            CurrentFactureVitale.G1310C4 = mydatatable(0).Item(i).ToString
                        Case "G1310C5"
                            CurrentFactureVitale.G1310C5 = mydatatable(0).Item(i).ToString

                        Case "G1321C1"
                            CurrentFactureVitale.G1321C1 = mydatatable(0).Item(i).ToString
                        Case "G1321C2"
                            CurrentFactureVitale.G1321C2 = mydatatable(0).Item(i).ToString
                        Case "G1321C3"
                            CurrentFactureVitale.G1321C3 = mydatatable(0).Item(i).ToString
                        Case "G1321C4"
                            CurrentFactureVitale.G1321C4 = mydatatable(0).Item(i).ToString
                        Case "G1321C5"
                            CurrentFactureVitale.G1321C5 = mydatatable(0).Item(i).ToString
                        Case "G1321C6"
                            CurrentFactureVitale.G1321C6 = mydatatable(0).Item(i).ToString
                        Case "G1321C7"
                            CurrentFactureVitale.G1321C7 = mydatatable(0).Item(i).ToString
                        Case "G1321C8"
                            CurrentFactureVitale.G1321C8 = mydatatable(0).Item(i).ToString
                        Case "G1321C9"
                            CurrentFactureVitale.G1321C9 = mydatatable(0).Item(i).ToString
                        Case "G1321C10"
                            CurrentFactureVitale.G1321C10 = mydatatable(0).Item(i).ToString
                        Case "G1321C11"
                            CurrentFactureVitale.G1321C11 = mydatatable(0).Item(i).ToString
                        Case "G1321C12"
                            CurrentFactureVitale.G1321C12 = mydatatable(0).Item(i).ToString

                        Case "G1410C1"
                            CurrentFactureVitale.G1410C1 = mydatatable(0).Item(i).ToString
                            Select Case Val(CurrentFactureVitale.G1410C1)
                                Case 1
                                    CurrentFactureVitale.TP_AMC = False
                                    CurrentFactureVitale.TP_AMO = False
                                Case 2
                                    CurrentFactureVitale.TP_AMC = False
                                    CurrentFactureVitale.TP_AMO = True
                                Case 3, 5
                                    CurrentFactureVitale.TP_AMC = True
                                    CurrentFactureVitale.TP_AMO = True
                                Case 4
                                    CurrentFactureVitale.TP_AMC = True
                                    CurrentFactureVitale.TP_AMO = False
                            End Select

                        Case "G1420C1"
                            CurrentFactureVitale.G1420C1 = mydatatable(0).Item(i).ToString
                        Case "G1420C2"
                            CurrentFactureVitale.G1420C2 = mydatatable(0).Item(i).ToString
                        Case "G1420C3"
                            CurrentFactureVitale.G1420C3 = mydatatable(0).Item(i).ToString

                        Case "G1440C1"
                            CurrentFactureVitale.G1440C1 = mydatatable(0).Item(i).ToString
                        Case "G1440C2"
                            CurrentFactureVitale.G1440C2 = mydatatable(0).Item(i).ToString
                        Case "G1440C3"
                            CurrentFactureVitale.G1440C3 = mydatatable(0).Item(i).ToString

                        Case "G1511C1"
                            If mydatatable(0).Item(i).ToString <> "" Then
                                NatureAssuranceDateTimePicker.Value = Mid(mydatatable(0).Item(i).ToString, 7, 2) + "/" + Mid(mydatatable(0).Item(i).ToString, 5, 2) + "/" + Mid(mydatatable(0).Item(i).ToString, 1, 4)
                                NatureAssurance_Button.Text = "ACCIDENT DE DROIT COMMUN"
                            End If
                            CurrentFactureVitale.G1511C1 = mydatatable(0).Item(i).ToString
                        Case "G1511C2"
                            CurrentFactureVitale.G1511C2 = mydatatable(0).Item(i).ToString

                        Case "G1512C1"
                            If mydatatable(0).Item(i).ToString <> "" Then
                                NatureAssuranceDateTimePicker.Value = Mid(mydatatable(0).Item(i).ToString, 7, 2) + "/" + Mid(mydatatable(0).Item(i).ToString, 5, 2) + "/" + Mid(mydatatable(0).Item(i).ToString, 1, 4)
                                NatureAssurance_Button.Text = "MATERNITE"
                                CurrentFactureVitale.G1512C1 = mydatatable(0).Item(i).ToString
                            End If

                        Case "G1513C1"
                            If mydatatable(0).Item(i).ToString <> "" Then
                                NatureAssuranceDateTimePicker.Value = Mid(mydatatable(0).Item(i).ToString, 7, 2) + "/" + Mid(mydatatable(0).Item(i).ToString, 5, 2) + "/" + Mid(mydatatable(0).Item(i).ToString, 1, 4)
                                CurrentFactureVitale.G1513C1 = mydatatable(0).Item(i).ToString
                                NatureAssurance_Button.Text = "ACCIDENT DU TRAVAIL"
                            End If
                            'Case "G1513C2"
                            '    If mydatatable(0).Item(i).ToString <> "" Then
                            '        NumeroAccidentTravail.Text = mydatatable(0).Item(i).ToString
                            '        CurrentFactureVitale.G1513C2 = mydatatable(0).Item(i).ToString
                            '    End If
                            'Case "G1513C3"
                            '    If mydatatable(0).Item(i).ToString <> "" Then
                            '        CleaccidentTravail.Text = mydatatable(0).Item(i).ToString
                            '        CurrentFactureVitale.G1513C3 = mydatatable(0).Item(i).ToString
                            '    End If

                        Case "G1514C1"
                            CurrentFactureVitale.G1514C1 = mydatatable(0).Item(i).ToString
                        Case "G1514C2"
                            CurrentFactureVitale.G1514C2 = mydatatable(0).Item(i).ToString
                        Case "G1514C3"
                            CurrentFactureVitale.G1514C3 = mydatatable(0).Item(i).ToString
                        Case "G1514C4"
                            CurrentFactureVitale.G1514C4 = mydatatable(0).Item(i).ToString

                        Case "G1910C1"
                            CurrentFactureVitale.G1910C1 = mydatatable(0).Item(i).ToString
                        Case "G1910C2"
                            CurrentFactureVitale.G1910C2 = mydatatable(0).Item(i).ToString
                        Case "G1910C3"
                            CurrentFactureVitale.G1910C3 = mydatatable(0).Item(i).ToString
                        Case "G1910C4"
                            CurrentFactureVitale.G1910C4 = mydatatable(0).Item(i).ToString
                        Case "G1910C5"
                            CurrentFactureVitale.G1910C5 = mydatatable(0).Item(i).ToString
                        Case "G1910C6"
                            CurrentFactureVitale.G1910C6 = mydatatable(0).Item(i).ToString
                        Case "IDPrescripteur"
                            CurrentBenéficiaire.Prescripteur_ID = mydatatable(0).Item(i).ToString
                            CurrentFactureVitale.IDPrescripteur = mydatatable(0).Item(i).ToString
                        Case "FactureAcreer"
                            If mydatatable(0).Item(i).ToString <> "1" Then
                                CheckBox_DRE_annulation.Visible = True
                                CheckBox_DRE_rectificative.Visible = True
                            End If
                        Case "Nature_Assurance"
                            NatureAssurance_Button.Text = mydatatable(0).Item(i).ToString
                    End Select
                Next
                GetDataBénéficiaire()

                'recherche des lignes cip
                Dim mydatatableCIP = Me.Facture_DétailCodeCIPTableAdapter1.GetDataByNumFacture(numFSE)
                Dim numligne As Integer = 0
                For r = 0 To mydatatableCIP.Rows.Count - 1
                    Vente.Rows.Add()
                    For c = 0 To mydatatableCIP.Columns.Count - 1
                        Select Case mydatatableCIP.Columns.Item(c).ColumnName
                            Case "G1740C3"
                                '    If mydatatableCIP(r).Item(c).ToString.Length = 13 Then Vente.Item(VenteEAN13.Index, numligne).Value = mydatatableCIP(r).Item(c).ToString
                                '    If mydatatableCIP(r).Item(c).ToString.Length = 7 Then Vente.Item(VenteCIP.Index, numligne).Value = mydatatableCIP(r).Item(c).ToString
                                '    Vente.CurrentCell = Vente.Item(VenteCIP.Index, numligne)
                                '    Vente_CellValidated(Nothing, Nothing)
                                '    Vente.CurrentCell = Vente.Item(VenteEAN13.Index, numligne)
                                '    Vente_CellValidated(Nothing, Nothing)
                                Vente.Item(Vente_produits.Index, numligne).Value = mydatatableCIP(r).Item(c).ToString
                                Vente_CellValidated(Nothing, Nothing)
                            Case "G1740C5"
                                Vente.Item(VenteQuantité.Index, numligne).Value = mydatatableCIP(r).Item(c).ToString
                        End Select
                        Vente.CurrentCell = Vente.Item(VenteQuantité.Index, numligne)
                        Vente_CellValidated(Nothing, Nothing)
                    Next
                    numligne = numligne + 1
                Next

                'recherche des lignes lpp
                Vente.Rows.Clear()
                Dim mydatatableLPP = Me.Facture_DétailLppTableAdapter1.GetDataByNumFacture(numFSE)
                For r = 0 To mydatatableLPP.Rows.Count - 1
                    Vente.Rows.Add()
                    For c = 0 To mydatatableLPP.Columns.Count - 1
                        Select Case mydatatableLPP.Columns.Item(c).ColumnName
                            Case "G1730C2"
                                Vente.Item(VenteLPP.Index, numligne).Value = mydatatableLPP(r).Item(c).ToString
                            Case "G1730C8"
                                Vente.Item(VenteQuantité.Index, numligne).Value = mydatatableLPP(r).Item(c).ToString
                        End Select
                    Next
                    numligne = numligne + 1
                Next

                CheckBox_DRE_annulation.Visible = True
                CheckBox_DRE_rectificative.Visible = True

                MyMsg_Box.Presentation("Officine !", "PROGRAMMER AFFICHAGE DES DONNÉES ASSURÉ ET DÉTAIL PRODUIT", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()

            Case Else
                MyMsg_Box.Presentation("Officine !", "Il y a plusieurs factures avec le num " + numFSE.ToString, False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Exit Sub
        End Select

    End Sub



    Public Sub Facture_Reload(ByVal numFSE As Decimal, ByVal numVD As Decimal)
        If numFSE <> 0 Then
            If Me.FacturesTableAdapter.GetFactureDataByNum1(numFSE).Rows.Count > 0 Then
                Dim facture = Me.FacturesTableAdapter.GetFactureDataByNum1(numFSE).Item(0)
                If facture.G1211C1 <> "" Then
                    PrescripteurMyCombobox.Text = facture.G1211C1 & facture.G1211C2
                    DatePrecription.Value = CDate(Mid(facture.G1211C3, 7, 2) & "/" & Mid(facture.G1211C3, 5, 2) & "/" & Mid(facture.G1211C3, 1, 4))
                ElseIf facture.G1213C1 <> "" Then
                    PrescripteurMyCombobox.Text = facture.G1213C1 & facture.G1213C2
                    DatePrecription.Value = CDate(Mid(facture.G1213C4, 7, 2) & "/" & Mid(facture.G1213C4, 5, 2) & "/" & Mid(facture.G1213C4, 1, 4))
                ElseIf facture.G1214C1 <> "" Then
                    PrescripteurMyCombobox.Text = facture.G1214C1 & facture.G1214C2
                    DatePrecription.Value = CDate(Mid(facture.G1214C4, 7, 2) & "/" & Mid(facture.G1214C4, 5, 2) & "/" & Mid(facture.G1214C4, 1, 4))
                End If
                recherche_prescripteur()
                DateExecution.Value = CDate(Mid(facture.G1110C3, 7, 2) & "/" & Mid(facture.G1110C3, 5, 2) & "/" & Mid(facture.G1110C3, 1, 4))

                If facture.G1512C1 <> "" Then
                    NatureAssurance_Button.Text = "MATERNITE"
                    NatureAssuranceDateTimePicker.Value = CDate(Mid(facture.G1512C1, 7, 2) & "/" & Mid(facture.G1512C1, 5, 2) & "/" & Mid(facture.G1512C1, 1, 4))
                ElseIf facture.G1513C1 <> "" Or facture.G1513C2 <> "" Or facture.G1513C3 <> "" Then
                    NatureAssurance_Button.Text = "ACCIDENT DU TRAVAIL"
                    CheckBox_Facturation_AMC.Checked = False
                    CheckBox_Facturation_AMC.Enabled = True
                ElseIf facture.G1514C1 <> "" Or facture.G1514C2 <> "" Or facture.G1514C3 <> "" Or facture.G1514C4 <> "" Then
                    NatureAssurance_Button.Text = "PREVENTION"
                ElseIf facture.G1515C1 <> "" Then
                    NatureAssurance_Button.Text = "SMG"
                    Montant_PEC_SMG_TextBox1.Text = facture.G1515C1
                Else
                    NatureAssurance_Button.Text = "MALADIE"
                    CheckBox_Facturation_AMC.Enabled = True
                End If



            End If
        End If
    End Sub
#End Region
#Region "FORMULAIRE"



#Region "COULEURS"
    Private Sub ChangeCouleurObjetActif(ByVal sender As Object, ByVal e As System.EventArgs) Handles DateExecution.Enter, PrescripteurMyCombobox.Enter, ComboBoxLECTURE_VITALE.Enter ', NatureAssuranceComboBox.Enter
        sender.BackColor = Color.Yellow
        sender.forecolor = Color.Black
    End Sub

    Private Sub PrescripteurMyCombobox_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles DateExecution.LostFocus, PrescripteurMyCombobox.LostFocus, ComboBoxLECTURE_VITALE.LostFocus ', NatureAssuranceComboBox.LostFocus
        sender.BackColor = Color.White
        sender.forecolor = Color.Black

    End Sub
#End Region
#Region "Graphics"

    Private Sub resize_form()
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim div_height, div_width As Single
        div_height = 1000 / Screen.PrimaryScreen.Bounds.Height
        div_width = 1600 / Screen.PrimaryScreen.Bounds.Width

        If div_height > 1 And div_width > 1 Then
            Me.Height = Int(Me.Height / div_height)
            Me.Width = Int(Me.Width / div_width)

            For Each obj In Controls
                Select Case obj.GetType.FullName.ToString

                    Case "System.Windows.Forms.PictureBox"
                        Dim pict As System.Windows.Forms.PictureBox
                        pict = obj
                        pict.Width = Int(pict.Width / div_width)
                        pict.Height = Int(pict.Height / div_height)
                        pict.Location = New Point(Int(pict.Location.X / div_width), Int(pict.Location.Y / div_height))

                    Case "System.Windows.Forms.PictureBox"
                        Dim lab As System.Windows.Forms.Label
                        lab = obj
                        lab.Width = Int(lab.Width / div_width)
                        lab.Height = Int(lab.Height / div_height)
                        lab.Location = New Point(Int(lab.Location.X / div_width), Int(lab.Location.Y / div_height))

                    Case "System.Windows.Forms.DataGridView"
                        Dim dat As System.Windows.Forms.DataGridView
                        dat = obj
                        dat.Width = Int(dat.Width / div_width)
                        dat.Height = Int(dat.Height / div_height)
                        dat.Location = New Point(Int(dat.Location.X / div_width), Int(dat.Location.Y / div_height))

                    Case "System.Windows.Forms.GroupBox"
                        Dim grp As System.Windows.Forms.GroupBox
                        grp = obj
                        grp.Width = Int(grp.Width / div_width)
                        grp.Height = Int(grp.Height / div_height)
                        grp.Location = New Point(Int(grp.Location.X / div_width), Int(grp.Location.Y / div_height))

                    Case "System.Windows.Forms.Panel"
                        Dim pan As System.Windows.Forms.Panel
                        pan = obj
                        pan.Width = Int(pan.Width / div_width)
                        pan.Height = Int(pan.Height / div_height)
                        pan.Location = New Point(Int(pan.Location.X / div_width), Int(pan.Location.Y / div_height))

                    Case "System.Windows.Forms.Button"
                        Dim but As System.Windows.Forms.Button
                        but = obj
                        but.Width = Int(but.Width / div_width)
                        but.Height = Int(but.Height / div_height)
                        but.Location = New Point(Int(but.Location.X / div_width), Int(but.Location.Y / div_height))

                    Case "System.Windows.Forms.DateTimePicker"
                        Dim dtp As System.Windows.Forms.DateTimePicker
                        dtp = obj
                        dtp.Width = Int(dtp.Width / div_width)
                        dtp.Height = Int(dtp.Height / div_height)
                        dtp.Location = New Point(Int(dtp.Location.X / div_width), Int(dtp.Location.Y / div_height))

                End Select


            Next
        End If
    End Sub

   








    Private Sub Vente_CellPainting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles Vente.CellPainting
        'resize_form()

        If e.ColumnIndex = Vente_Delete.Index And e.RowIndex <> -1 Then
            e.Paint(e.CellBounds, DataGridViewPaintParts.All And Not DataGridViewPaintParts.ContentForeground)
            e.Graphics.DrawImage(officine.My.Resources.QUITTER2, e.CellBounds)
            e.Handled = True
        ElseIf e.ColumnIndex = Vente_Détail.Index And e.RowIndex <> -1 Then
            e.Paint(e.CellBounds, DataGridViewPaintParts.All And Not DataGridViewPaintParts.ContentForeground)
            e.Graphics.DrawImage(officine.My.Resources.magnifying_glass2, e.CellBounds)
            e.Handled = True
        ElseIf e.ColumnIndex = Vente_FicheProduit.Index And e.RowIndex <> -1 Then
            e.Paint(e.CellBounds, DataGridViewPaintParts.All And Not DataGridViewPaintParts.ContentForeground)
            e.Graphics.DrawImage(officine.My.Resources.PRODUITS2, e.CellBounds)
            e.Handled = True
        End If
    End Sub
#End Region

    Private Sub COMPTOIR_MAIN_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed

        DP_Affiche_Msg()

        MENU_PRINCIPAL.Visible = True

    End Sub



    

    Private Sub COMPTOIR_MAIN_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'TODO: cette ligne de code charge les données dans la table 'PharmaDataSet.Ordo'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
        Me.OrdoTableAdapter.Fill(Me.PharmaDataSet.Ordo)
        delivrer_produit_réservé_vente_type_defaut = ""

        round2(Reserver_Button)
        round2(Avances_Button)
        round2(Button_Facturation)


        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        mettre_en_Dus = True


        'Commandes_Panel
        If Screen.PrimaryScreen.Bounds.Width < 1800 Then
            Commandes_Panel.Width = 0
            Commandes_Panel.Location = New Point(Screen.PrimaryScreen.Bounds.Width, 0)
            Commandes_Panel.Height = Screen.PrimaryScreen.Bounds.Height
        Else
            Commandes_Panel.Width = 200
            Commandes_Panel.Location = New Point(Screen.PrimaryScreen.Bounds.Width - 200, 0)
            Commandes_Panel.Height = Screen.PrimaryScreen.Bounds.Height
            Commandes_Panel.BringToFront()
        End If
        Application.DoEvents()






        ResetForm()

        ConfigXml.Load(Application.StartupPath + "\config.xml")


        'Dates_Label.Text = Format(Now, "dd/MM/yyyy")

        If Config.Logiciel_ModeFonctionement = "Test" Then
            Mode_Fonctionement_Label.Text = "Mode TEST"
        ElseIf Config.Logiciel_ModeFonctionement = "Démonstration" Then
            Mode_Fonctionement_Label.Text = "Mode DEMO"
        Else
            Mode_Fonctionement_Label.Text = ""
        End If


        If Config.Windows_Mode = True Then
            Me.WindowState = FormWindowState.Normal
            Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable
        End If

        If Config.facilEpharm_Activé = True Then
            'Dim Contr As New 
            FacilEpharm_Control1.Visible = True
            FacilEpharm_Control1.Timer1.Interval = Config.facilEpharm_intervalle_Control * 1000
            facilEpharm_Ordo_Etat = ""
        End If

        Encaissement_Note = ""
        Plan_Poso_Perso_DataGridView.Columns(Date_.Index).DefaultCellStyle.Format = "dd/MM/yyyy"

        Dim période = BDD.Chronique_PériodeTableAdapter.GetData
        Chronique_Periode_MyCombobox.Items.Clear()
        Chronique_Periode_MyCombobox.Buttons_color_list = New List(Of String)
        For r = 0 To période.Rows.Count - 1
            Chronique_Periode_MyCombobox.Items.Add(période.Item(r).Id)
            Chronique_Periode_MyCombobox.Buttons_color_list.Add(période.Item(r).Color_hex)
        Next

  
        If Config.Logiciel_ModeFonctionement = "Test" Then
            DateFacture.Visible = True
            DatefactureLabel.Visible = True
            'DateFacture.Value = New Date(2019, 1, 2)
            'DateExecution.Value = New Date(2019, 1, 2)
            'DatePrecription.Value = New Date(2019, 1, 2)
        End If

    End Sub


    'Reset Formulaire ,NumeroSessionVitale, CurrentBenéficiaire, CurrentFacture
    Public Sub ResetForm()
        Facturation_automatique = False
        delivrer_produit_réservé_vente_type_defaut = ""

        Reprise_Facture_Num = 0
        Reprise_AMO = False
        Reprise_AMC = False

        affiche_user()

        ReDim DP_Poso(200)
        ReDim DP_Rect(200)
        For i = 0 To 200
            DP_Poso(i) = ""
            DP_Rect(i) = ""
        Next

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        DP_Carte_Vitale_lue = False
        DP_affichage_statut("Statut DP inconnu")


        DateFacture.Value = Now
        For i = 0 To ComboBoxLECTURE_VITALE.Items.Count - 1
            ComboBoxLECTURE_VITALE.Items.Remove(i)
        Next
        ComboBoxLECTURE_VITALE.Text = ""
        ClearGroupBox(AssuréGroupBox, True)
        ClearTabPage(Dossier_Patient_AMC_TabPage, False)
        PrescripteurMyCombobox.Text = ""
        TextBox_Prescripteur_NumID.Clear()
        TextBox_Prescripteur_NumRPPS.Clear()
        Prescripteur_Spécialité_TextBox.Clear()
        Médecin_Traitant_Label.Text = ""
        CurrentBeneficiaireRichTextBox.Clear()
        SGD_LibererSession(NumeroSessionVitale)
        If SGD_ReserverSession(0, NumeroSessionVitale) <> 0 Then
            MyMsg_Box.Presentation("Officine !", "ERREUR POUR LA RESERVATION DE SESSION VITALE", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
        End If
        PrescripteurMyCombobox.Text = ""
        Vente.Rows.Clear()

        CurrentBenéficiaire.clear()
        CurrentFactureVitale.Clear(True)
        CurrentFactureVenteDirecte.Clear()



        'CheckBoxDRE.Enabled = False
        'CheckBoxDRE.Checked = False
        'CheckBoxFSE.Enabled = False
        'CheckBoxFSE.Checked = False
        CheckBoxModeDegradé.Checked = False
        DatePrecription.Enabled = True
        DateExecution.Enabled = True
        DateFacture.Enabled = True
        CheckBox_DRE_annulation.Checked = False
        CheckBox_DRE_annulation.Visible = False
        CheckBox_DRE_rectificative.Checked = False
        CheckBox_DRE_rectificative.Visible = False

        'If OCT = True Then
        '    CheckBoxFSE.Visible = False
        '    CheckBoxDRE.Visible = False
        '    CheckBoxFSE.Checked = True
        'Else
        '    CheckBoxFSE.Visible = True
        '    CheckBoxDRE.Visible = True
        'End If

        'ventetype_index_defaut = 1
        ventetype_defaut = "Vente Directe"

        ReDim tab_current_formule_STS(0)
        current_formule_STS.Clear()
        If Config.STS_Activer = False Then
            STSToolStripMenuItem.Enabled = False
            STS_ASSISTANCEToolStripMenuItem.Enabled = False
            STS_TARIFICATIONToolStripMenuItem.Enabled = False
        End If
        CurrentConvention.clear()

        OriginePrescriptionToolStripMenuItem.Checked = False
        PreventioncommuneAMOAMCToolStripMenuItem.Checked = False

        Date_part_complémentaire_Item_Date_Éxécution.Checked = True
        Date_part_complémentaire_Item_Date_Facturation.Checked = False
        Date_part_complémentaire_Item_Date_Prescription.Checked = False


        IAM_info_form = New IAM_Info

        If Not DP_list_Alrt_Prdt_deja_diffusées Is Nothing Then
            DP_list_Alrt_Prdt_deja_diffusées.Clear()
        End If
        DP_Affiche_Msg()

        liste_du = New List(Of VenteForm.du)

        Dim nontant_en_attente As Decimal = 0
        If Not Ventes_enchainées_encaissement_en_attente Is Nothing Then
            For Each encaiss_en_attente As Vente_enchainée_encaissement_en_attente In Ventes_enchainées_encaissement_en_attente
                nontant_en_attente = nontant_en_attente + encaiss_en_attente.montant_à_encaisser
            Next
        End If
        Encaissement_attente_LinkLabel.Text = "En Attente: " & nontant_en_attente.ToString & "€"
        RecycglageRCSeulementsaisieToolStripMenuItem.Checked = False

        facilEpharm_Ordo_Etat = ""

        Encaissement_Note = ""

        Dim file = Dir(Config.LocalNetwork_ServerName & "\scor\doc\PreScan" & Config.Idposte & "*")
        While file <> ""
            Try
                My.Computer.FileSystem.DeleteFile(Config.LocalNetwork_ServerName & "\scor\doc\" & file)
            Catch ex As Exception

            End Try
            file = Dir(Config.LocalNetwork_ServerName & "\scor\doc\PreScan" & Config.Idposte & "*")
        End While

        If Now.Year >= 2019 Then
            HonorairesDeDispensationGlobauxToolStripMenuItem.Checked = True
        End If


        'Delivrance_Lieu_MyCombobox.Items.Clear()
        'Dim data = BDD.VitaleTableAdapter.SELECT_distinct_Delivrance_Lieu
        'For r = 0 To data.Rows.Count - 1
        '    Delivrance_Lieu_MyCombobox.Items.Add(data.Item(r).Delivrance_Lieu)

        'Next
    End Sub

    'fonction de transferts des data de la grille de recherche vers la grille de vente
    Public Sub transfertrechercheversvente(ByVal lignevente As Integer, ByVal lignerecherche As Integer, ByVal numLot As String)
        ReDim Preserve tab_Lignes_Vente(Vente.RowCount - 2)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If
        Vente(Ventecab.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsCAB.Index, lignerecherche).Value

        Vente(VenteDésignation.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsDesignation.Index, lignerecherche).Value
        If Vente(Vente_produits.Index, lignevente).Value <> RechercheProduits_Datagridview(RechercheProduitsDesignation.Index, lignerecherche).Value Then
            Vente(Vente_produits.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsDesignation.Index, lignerecherche).Value
        End If
        Vente(VenteCIP.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsCIP.Index, lignerecherche).Value
        Vente(VenteEAN13.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsEAN13.Index, lignerecherche).Value
        Vente(VenteLPP.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsLPP.Index, lignerecherche).Value
        Vente(VenteCodeActe.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsPrestation.Index, lignerecherche).Value
        Vente(VenteListe.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsListe.Index, lignerecherche).Value
        Vente(VenteTVA.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsTVA.Index, lignerecherche).Value

        Vente(VentePrix.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsPrixventeTTC.Index, lignerecherche).Value
        If Not Me.BdM_PrixTableAdapter1.Select_Prix_Public_TTC(RechercheProduits_Datagridview(RechercheProduitsEAN13.Index, lignerecherche).Value, RechercheProduits_Datagridview(RechercheProduitsCIP.Index, lignerecherche).Value, Format(DateExecution.Value, "yyyyMMdd")) Is Nothing _
         And Mid(Vente(VenteCodeActe.Index, lignevente).Value, 1, 2) = "PH" And Vente(VenteCodeActe.Index, lignevente).Value <> "PHN" Then
            Vente(VentePrix.Index, lignevente).Value = Me.BdM_PrixTableAdapter1.Select_Prix_Public_TTC(RechercheProduits_Datagridview(RechercheProduitsEAN13.Index, lignerecherche).Value, RechercheProduits_Datagridview(RechercheProduitsCIP.Index, lignerecherche).Value, Format(DateExecution.Value, "yyyyMMdd")) / 100

        End If

        Vente(Vente_prix_non_remisé.Index, lignevente).Value = Vente(VentePrix.Index, lignevente).Value

        Vente(VenteStock.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsStock.Index, lignerecherche).Value
        Vente(Vente_Stock_Suivi.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsStock_Suivi.Index, lignerecherche).Value
        Vente(VenteDus.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsDus.Index, lignerecherche).Value
        Vente(VenteTFRtype.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsTFRtype.Index, lignerecherche).Value

        Vente(Vente_G1610C8.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduits_G1610C8.Index, lignerecherche).Value

        If Not Me.BdM_TFRTableAdapter.Select_TFR(RechercheProduits_Datagridview(RechercheProduitsEAN13.Index, lignerecherche).Value, DateExecution.Value) Is Nothing Then
            Vente(VenteTFRprix.Index, lignevente).Value = Me.BdM_TFRTableAdapter.Select_TFR(RechercheProduits_Datagridview(RechercheProduitsEAN13.Index, lignerecherche).Value, DateExecution.Value)
        Else
            Vente(VenteTFRprix.Index, lignevente).Value = Vente(VentePrix.Index, lignevente).Value
        End If

        If Not RechercheProduits_Datagridview(RechercheProduitsTFRtype.Index, lignerecherche).Value Is DBNull.Value Then
            If RechercheProduits_Datagridview(RechercheProduitsTFRtype.Index, lignerecherche).Value = "1" Then 'TFR renseigné dans la table Produits (override BDM_TFR et BDM_Prix)
                Vente(VenteTFRprix.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsTFRprix.Index, lignerecherche).Value
            ElseIf RechercheProduits_Datagridview(RechercheProduitsTFRtype.Index, lignerecherche).Value = "2" Then 'TFR = prix de vente
                Vente(VenteTFRprix.Index, lignevente).Value = Vente(VentePrix.Index, lignevente).Value
            End If
        End If

        Vente(Vente_LPP_Kit.Index, lignevente).Value = RechercheProduits_Datagridview(LPP_Kit.Index, lignerecherche).Value

        Vente(Vente_Vidal_ProductID.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduits_vidal_productId.Index, lignerecherche).Value

        Vente(VenteQuantité.Index, lignevente).Value = "1"
        'Vente(VenteTotal.Index, lignevente).Value = Vente(VenteQuantité.Index, lignevente).Value * Vente(VentePrix.Index, lignevente).Value
        'End If

        Vente(Vente_En_Commande.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduits_en_commande.Index, lignerecherche).Value
        Vente(Vente_Code_PharmaML.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduits_Code_PharmaML.Index, lignerecherche).Value
        Vente(Vente_Contenance.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsContenance.Index, lignerecherche).Value
        Try
            Vente(Vente_Type_générique.Index, lignevente).Value = RechercheProduits_Datagridview(RechercheProduitsType_générique.Index, lignerecherche).Value
        Catch ex As Exception
        End Try


        Dim alertes = DP_Alerte.DP_ALERTE_PRODUITTableAdapter.GetDataBy_CIP_Lot(Vente(VenteCIP.Index, lignevente).Value, Vente(VenteEAN13.Index, lignevente).Value, numLot)
        If alertes.Rows.Count > 0 Then

            If Not DP_list_Alrt_Prdt_deja_diffusées.Contains(alertes.Item(0).MsgRef) Then
                DP_list_Alrt_Prdt_deja_diffusées.Add(alertes.Item(0).MsgRef)
                MyMsg_Box.Presentation("Officine !", "ATTENTION : le produit " & Vente(VenteDésignation.Index, lignevente).Value & " a fait l’objet d’une alerte produit. Veuillez prendre les dispositions appropriées en respectant les directives associées à cette alerte.", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                For r = 0 To alertes.Rows.Count - 1
                    'Dim alerte_show As New DP_Alerte
                    Dim alerte_show As New DP_Alerte2
                    alerte_show.affichage_Msg(alertes.Item(r).MsgRef)
                    If alertes.Item(r).Vue = True Then
                        alerte_show.Button1.Text = "Annuler"
                    End If
                    alerte_show.ShowDialog()
                Next

            End If
        End If

        Première_Délivrance(False, lignevente)

        If RechercheProduits_Datagridview(RechercheProduits_statutException.Index, lignerecherche).Value = True Then
            MyMsg_Box.Presentation("Officine !", "MEDICAMENT D'EXCEPTION:" & vbCrLf & vbCrLf & "Verifiez présence ordonnance d'exception.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
        End If

        '____________________________________________________________________________________________________
        'stupéfiants
        ReDim Preserve tab_Lignes_Vente(lignevente)
        If Vente.Item(VenteListe.Index, lignevente).Value = "Stupéfiant" Then

            'MyMsg_Box.Presentation("Offcine:", "Vente de Stupéfiant:" & vbCrLf & vbCrLf & "S'agit-il d'un déconditionnement?", True, "OUI", True, "NON", False, "")
            MyMsg_Box.Presentation("Offcine:", "Vente de Stupéfiant: DÉCONDITIONNENT" & vbCrLf & vbCrLf & "La quantité est en unité(s) délivrée(s).", True, "OK", False, "NON", False, "")
            If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                tab_Lignes_Vente(lignevente).deconditionement = True
            Else
                tab_Lignes_Vente(lignevente).deconditionement = False
            End If
        Else
            tab_Lignes_Vente(lignevente).deconditionement = False
        End If


        If tab_Lignes_Vente(lignevente).deconditionement = True Then
            Dim pricePerDose As Single = 0
            Try
                Dim Vidal_PackService As New Vidal_PackService.PackService
                Vidal_PackService.Timeout = 60000 '3000
                Dim Packs = Vidal_PackService.searchByProductId(Val(Vente(Vente_Vidal_ProductID.Index, lignevente).Value))
                If Not Packs Is Nothing And Packs.Count > 0 Then
                    If Not Packs.ElementAt(0).pricePerDose Is Nothing Then
                        pricePerDose = Packs.ElementAt(0).pricePerDose
                    End If
                End If
            Catch ex As Exception
                MyMsg_Box.Presentation("Officine !", "Les services VIDAL n'ont pas répondu, renseignez manuellement le prix unitaire.", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
            End Try
            'If pricePerDose <> 0 Then
            MyInptBox.my_showdialog(Vente.Item(Vente_produits.Index, lignevente).Value & vbCrLf & vbCrLf & _
                                "Prix unitaire dans le cadre du déconditionement ?", VarType(New Decimal), 10, pricePerDose)
            pricePerDose = CDec(MyInptBox.result)
            'End If
            'If pricePerDose = 0 Then
            '    pricePerDose = CSng( _
            '        Replace(InputBox(Vente(VenteDésignation.Index, lignevente).Value.ToString + Chr(10) + "Prix unitaire de l’unité délivrée dans le cadre du déconditionnement?"), ".", ","))
            'End If

            tab_Lignes_Vente(lignevente).deconditionement_prix_unitaire = pricePerDose * 100

            Vente(VentePrix.Index, lignevente).Value = pricePerDose
            Vente(VenteTFRprix.Index, lignevente).Value = Vente(VentePrix.Index, lignevente).Value
            Vente(Vente_prix_non_remisé.Index, lignevente).Value = Vente(VentePrix.Index, lignevente).Value
        End If


        If Vente(Vente_Remise.Index, lignevente).Value Is Nothing Then
            Vente(Vente_Remise.Index, lignevente).Value = 0
        End If


        Me.ProduitsTableAdapter.Update_ne_plus_proposé_jusquà_vente(False, Vente(VenteCIP.Index, lignevente).Value, Vente(VenteEAN13.Index, lignevente).Value, _
                                                                    Vente(Vente_produits.Index, lignevente).Value, Vente(Ventecab.Index, lignevente).Value)

        Vente(Vente_promo_Num.Index, lignevente).Value = 0
        If RetrocessionToolStripMenuItem.Checked = True Then
            Retrocession_prix_non_remisé = 0
            Retrocession_remise = 0
            Retrocession_prix_remisé = 0

            Dim Retrocession_Choix_Prix_form As New Retrocession_Choix_Prix
            Retrocession_Choix_Prix_form.lignevente = lignevente
            Retrocession_Choix_Prix_form.fill_datagridview()
            Retrocession_Choix_Prix_form.Produit_RichTextBox.Text = Vente(Vente_produits.Index, lignevente).Value
            Retrocession_Choix_Prix_form.ShowDialog()
            Vente(Vente_Remise.Index, lignevente).Value = Retrocession_remise
            Vente(VentePrix.Index, lignevente).Value = Retrocession_prix_remisé * (1 + (CDec(Vente(VenteTVA.Index, lignevente).Value) / 100))
            Vente(Vente_prix_non_remisé.Index, lignevente).Value = Retrocession_prix_non_remisé * (1 + (CDec(Vente(VenteTVA.Index, lignevente).Value) / 100))

        Else
            Dim promos = BDD.PromotionsTableAdapter.GetData_Prod_Date(Vente(VenteEAN13.Index, lignevente).Value, Vente(Ventecab.Index, lignevente).Value, Vente(Vente_produits.Index, lignevente).Value, Now)
            If promos.Rows.Count > 0 Then
                Dim appliquer_promo = True
                If promos(0).show_message = True Then
                    MyMsg_Box.Presentation("Appliquer Promotion?", promos(0).intitulé_produit & vbCrLf & promos(0).intitulé, True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.No Then
                        appliquer_promo = False
                    End If
                End If
                If appliquer_promo = True Then
                    Vente(Vente_Remise.Index, lignevente).Value = promos(0).Pourcentage_Promo
                    Vente(VentePrix.Index, lignevente).Value = (promos(0).PPTTTC_Promo * (100 - promos(0).Pourcentage_Promo)) / 100
                    Vente(Vente_prix_non_remisé.Index, lignevente).Value = promos(0).PPTTTC_Promo
                    Vente(Vente_promo_Num.Index, lignevente).Value = promos(0).Num
                End If

            End If
        End If
        If Not Vente(Vente_produits.Index, lignevente).Value Is Nothing Then
            If Vente(Vente_produits.Index, lignevente).Value <> "" Then
                Dus_Avances_Warning(Vente(Vente_produits.Index, lignevente).Value)
            End If
        End If

    End Sub
    Private Sub Dus_Avances_Warning(ByVal Produit_designation)
        If Dus_Avances_Warning_hide = True Then Exit Sub
        Try
            For r = 0 To Dossier_Patient_Dus_DataGridView.RowCount - 1
                If Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Soldé.Index, r).Value = False And _
                    Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Désignation.Index, r).Value = Produit_designation Then
                    MyMsg_Box.Presentation("Officine !", vbCrLf & Produit_designation & vbCrLf & vbCrLf & Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Quantité_Du.Index, r).Value.ToString & " dû(s)", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                End If
            Next
        Catch ex As Exception
        End Try
        Try
            For r = 0 To Avances_DataGridView.RowCount - 1

                If Avances_DataGridView.Item(Avances_Soldé_date.Index, r).Value Is Nothing And Avances_DataGridView.Item(Avances_Poduit_designation.Index, r).Value = Produit_designation Then
                    MyMsg_Box.Presentation("Officine !", vbCrLf & Produit_designation & vbCrLf & vbCrLf & Avances_DataGridView.Item(Avances_Quantité.Index, r).Value.ToString & " avancé(s)", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()

                End If
            Next
        Catch ex As Exception
        End Try
    End Sub

    Public Sub Première_Délivrance(ByVal All_lignes As Boolean, Optional ByVal lignevente As Integer = 999999)

        If DP_form Is Nothing Then
            Exit Sub
        End If

        If All_lignes = False Then
            Première_Délivrance_ligne(lignevente)

        Else 'All_lignes = True
            For rr = 0 To Vente.RowCount - 2
                Première_Délivrance_ligne(rr)
            Next

        End If

    End Sub
    Private Sub Première_Délivrance_ligne(ByVal lignevente As Integer)
        If InStr(Vente(Vente_produits.Index, lignevente).Value, "Honoraire de Dispensation") = 1 Then
            Vente.Item(Vente_premier.Index, lignevente).Value = ""
            Vente.Item(Vente_premier.Index, lignevente).Style.BackColor = Color.White
            Vente.Item(Vente_premier.Index, lignevente).Style.ForeColor = Color.Black
            Exit Sub
        End If

        Dim date_dernière_vente As Date


        Dim nouveau_prod As Boolean = True
        Dim nouveau_prod_local As Boolean = True
        For r = 0 To DP_form.Histo_DP_DataGridView.RowCount - 1
            If (Vente(VenteCIP.Index, lignevente).Value <> "" And DP_form.Histo_DP_DataGridView.Item(DP_form.CIP_Histo_DP.Index, r).Value = Vente(VenteCIP.Index, lignevente).Value) Or _
               (Vente(VenteEAN13.Index, lignevente).Value <> "" And DP_form.Histo_DP_DataGridView.Item(DP_form.CIP_Histo_DP.Index, r).Value = Vente(VenteEAN13.Index, lignevente).Value) Or _
               (Vente(Ventecab.Index, lignevente).Value <> "" And DP_form.Histo_DP_DataGridView.Item(DP_form.CIP_Histo_DP.Index, r).Value = Vente(Ventecab.Index, lignevente).Value) Or _
               (Vente(VenteDésignation.Index, lignevente).Value <> "" And DP_form.Histo_DP_DataGridView.Item(DP_form.DC_Histo_DP.Index, r).Value = Vente(VenteDésignation.Index, lignevente).Value) Then
                If DP_form.Histo_DP_DataGridView.Item(DP_form.DisDate_Histo_DP.Index, r).Value > date_dernière_vente Then
                    date_dernière_vente = DP_form.Histo_DP_DataGridView.Item(DP_form.DisDate_Histo_DP.Index, r).Value
                End If
                If DP_form.Histo_DP_DataGridView.Item(DP_form.Origine_Histo_DP.Index, r).Value = "local" Then
                    nouveau_prod_local = False
                    nouveau_prod = False
                Else
                    nouveau_prod = False
                End If
            End If

        Next
        If nouveau_prod = True Then
            Vente.Item(Vente_premier.Index, lignevente).Value = "premier"
            Vente.Item(Vente_premier.Index, lignevente).Style.BackColor = Color.Red
            Vente.Item(Vente_premier.Index, lignevente).Style.ForeColor = Color.Yellow

        ElseIf nouveau_prod_local = True Then
            Vente.Item(Vente_premier.Index, lignevente).Value = "présent DP"
            Vente.Item(Vente_premier.Index, lignevente).Style.BackColor = Color.Blue
            Vente.Item(Vente_premier.Index, lignevente).Style.ForeColor = Color.White
        Else
            Vente.Item(Vente_premier.Index, lignevente).Value = date_dernière_vente
            Vente.Item(Vente_premier.Index, lignevente).Style.BackColor = Color.White
            Vente.Item(Vente_premier.Index, lignevente).Style.ForeColor = Color.Black
            For r = 0 To Dossier_Patient_Chronique_DataGridView.Rows.Count - 1
                If (Vente(VenteCIP.Index, lignevente).Value <> "" And Vente(VenteCIP.Index, lignevente).Value = Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_CIP.Index, r).Value) Or _
                   (Vente(VenteEAN13.Index, lignevente).Value <> "" And Vente(VenteEAN13.Index, lignevente).Value = Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_EAN13.Index, r).Value) Or _
                   (Vente(Ventecab.Index, lignevente).Value <> "" And Vente(Ventecab.Index, lignevente).Value = Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_CAB.Index, r).Value) Or _
                    (Vente(VenteDésignation.Index, lignevente).Value <> "" And Vente(VenteDésignation.Index, lignevente).Value = Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_Désignation.Index, r).Value) Then
                    Vente.Item(Vente_premier.Index, lignevente).Style.BackColor = Color.Green
                    Vente.Item(Vente_premier.Index, lignevente).Style.ForeColor = Color.White
                    If Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Avertissement_écart.Index, r).Value = "Oui" Then
                        Dim écart_jours = DateDiff(DateInterval.Day, Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_Date_Renouvellement.Index, r).Value, DateExecution.Value)   'négatif si renouvellement avant date prévue 
                        If écart_jours > 0 Then
                            écart_jours = écart_jours + 1
                        ElseIf écart_jours < 0 Then
                            écart_jours = écart_jours - 1
                        End If
                        If (écart_jours < 0 And écart_jours < CDec(Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Avertissement_écart_jours.Index, r).Value) * (-1)) Or _
                            (écart_jours > 0 And écart_jours > CDec(Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Avertissement_écart_jours.Index, r).Value)) Then
                            Vente.Item(Vente_premier.Index, lignevente).Style.BackColor = Color.Orange
                            Vente.Item(Vente_premier.Index, lignevente).Style.ForeColor = Color.Red
                        End If


                    End If
                    Exit For
                End If
            Next
        End If

    End Sub


    'validation de data dans la grille vente
    Public Sub Vente_CellValidated(ByVal sender As System.Object, e As DataGridViewCellEventArgs) Handles Vente.CellValidated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        lignevente = Vente.CurrentCell.RowIndex
        Select Case Vente.CurrentCell.ColumnIndex

            Case Vente_produits.Index
                Dim date_peremption As New Date(3000, 1, 1)

                If Valide_VenteCells = False Then Exit Sub
                If Vente.CurrentCell.Value Is Nothing Then Exit Sub
                If Vente.CurrentCell.Value.ToString.Length < 3 Then Exit Sub
                If Vente.CurrentCell.Value.ToString <> "" Then
                    Dim is_datamatrix As Boolean = False
                    produits_string_searched = Vente.CurrentCell.Value.ToString
                    Dim num_lot As String = "*"

                    Dim date_string = ""
                    If Mid(produits_string_searched, 1, 2) = "01" And Mid(produits_string_searched, 17, 2) = "17" And Mid(produits_string_searched, 25, 2) = "10" Then
                        is_datamatrix = True
                        num_lot = Mid(produits_string_searched, 27)
                        date_string = (Mid(produits_string_searched, 23, 2) & "/" & Mid(produits_string_searched, 21, 2) & "/" & "20" & Mid(produits_string_searched, 19, 2))
                    ElseIf Mid(produits_string_searched, 1, 2) = "01" And Mid(produits_string_searched, 17, 2) = "11" And Mid(produits_string_searched, 25, 2) = "17" And Mid(produits_string_searched, 33, 2) = "10" Then
                        is_datamatrix = True
                        num_lot = Mid(produits_string_searched, 35)
                        date_string = (Mid(produits_string_searched, 31, 2) & "/" & Mid(produits_string_searched, 29, 2) & "/" & "20" & Mid(produits_string_searched, 27, 2))
                    ElseIf Mid(produits_string_searched, 1, 3) = "010" And produits_string_searched.Length >= 16 Then
                        produits_string_searched = Mid(produits_string_searched, 4, 13)
                    ElseIf IsNumeric(produits_string_searched) And produits_string_searched.Length > 13 Then
                        produits_string_searched = Mid(produits_string_searched, 1, 13)
                    End If
                    If is_datamatrix = True Then
                        Vente.Item(Vente_lot.Index, Vente.CurrentRow.Index).Value = num_lot.ToString
                        While InStr(date_string, "00/") <> 0
                            date_string = Replace(date_string, "00/", "01/")
                        End While
                        date_peremption = Convert.ToDateTime(date_string, Nothing)
                        produits_string_searched = Mid(produits_string_searched, 4, 13)
                        If date_peremption.Subtract(DateExecution.Value).TotalDays < 100 Then
                            MyMsg_Box.Presentation("Officine !", "DATE DE PEREMPTION" + Chr(10) + date_peremption.ToLongDateString, False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                        End If
                        Vente.Item(Vente_Peremption.Index, Vente.CurrentRow.Index).Value = date_peremption.ToShortDateString
                    End If

                    If InStr(produits_string_searched, "Honoraire de Dispensation ") <> 1 Then
                        Select Case Me.ProduitsTableAdapter.selectcountproduit(produits_string_searched, produits_string_searched, Replace(produits_string_searched, " ", "%"), produits_string_searched)
                            Case 1 '1 produit correspondant trouvé dans la base
                                RechercheProduits_Datagridview.DataSource = Me.PharmaDataSet.Produits
                                Me.ProduitsTableAdapter.selectproduit(Me.PharmaDataSet.Produits, produits_string_searched, produits_string_searched, Replace(produits_string_searched, " ", "%"), produits_string_searched)
                                Try
                                    If PDAROBOTToolStripMenuItem.Checked = True And RechercheProduits_Datagridview.Item(robot.Index, 0).Value = False Then
                                        MyMsg_Box.Presentation("Produit absent robot", RechercheProduits_Datagridview.Item(RechercheProduitsDesignation.Index, 0).Value & vbCrLf & vbCrLf & "Ce produit n'est pas défini ROBOT/PDA.", False, "", False, "", True, "Ok")
                                        MyMsg_Box.ShowDialog()
                                    End If
                                Catch ex As Exception
                                End Try
                                If IsDBNull(RechercheProduits_Datagridview.Item(RechercheProduitsPeremption_Date_Min.Index, 0).Value) Then
                                    RechercheProduits_Datagridview.Item(RechercheProduitsPeremption_Date_Min.Index, 0).Value = New Date(3000, 1, 1)
                                End If
                                If is_datamatrix = True Then
                                    If date_peremption <> RechercheProduits_Datagridview.Item(RechercheProduitsPeremption_Date_Min.Index, 0).Value Then
                                        If RechercheProduits_Datagridview.Item(RechercheProduitsPeremption_Date_Min.Index, 0).Value = New Date(3000, 1, 1) Then
                                            BDD.ProduitsTableAdapter.Set_Peremption_Date_Min(date_peremption.ToShortDateString, _
                                            RechercheProduits_Datagridview.Item(RechercheProduitsCIP.Index, 0).Value, _
                                            RechercheProduits_Datagridview.Item(RechercheProduitsEAN13.Index, 0).Value, _
                                            RechercheProduits_Datagridview.Item(RechercheProduitsCAB.Index, 0).Value, _
                                            RechercheProduits_Datagridview.Item(RechercheProduitsDesignation.Index, 0).Value)
                                        Else
                                            MyMsg_Box.Presentation("Date de peremption", "La date de peremption du produit scanné (" & date_peremption.ToShortDateString & _
                                                                   ")" & vbCrLf & "est différente de" & vbCrLf & "la date enregistrée pour le stock (" & RechercheProduits_Datagridview.Item(RechercheProduitsPeremption_Date_Min.Index, 0).Value.ToShortDateString & ")" & _
                                                                   vbCrLf & vbCrLf & "Voulez-vous modifier la date pour le stock ?", True, "Oui", True, "Non", False, "")
                                            If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                                                BDD.ProduitsTableAdapter.Set_Peremption_Date_Min(date_peremption.ToShortDateString, _
                                            RechercheProduits_Datagridview.Item(RechercheProduitsCIP.Index, 0).Value, _
                                            RechercheProduits_Datagridview.Item(RechercheProduitsEAN13.Index, 0).Value, _
                                            RechercheProduits_Datagridview.Item(RechercheProduitsCAB.Index, 0).Value, _
                                            RechercheProduits_Datagridview.Item(RechercheProduitsDesignation.Index, 0).Value)
                                            End If
                                        End If
                                    End If
                                End If
                                transfertrechercheversvente(lignevente, 0, num_lot)
                                Valide_VenteCells = False
                                Vente.CurrentCell = Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index)
                            Case 0 'aucun produit correspondant trouvée dans la base
                    Dim aliastable = BDD.Produits_AliasTableAdapter.GetDataBy_Alias(produits_string_searched)
                    Dim produits As New PharmaDataSet.ProduitsDataTable
                    For r = 0 To aliastable.Rows.Count - 1
                        produits.Merge(Me.ProduitsTableAdapter.GetDataProduits(aliastable.Item(r).CIP, aliastable.Item(r).CAB, aliastable.Item(r).Désignation, aliastable.Item(r).EAN13))
                    Next
                    If produits.Rows.Count = 0 Then

                        MyMsg_Box.Presentation("Officine !", "INCONNU", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value = ""

                    Else
                        RechercheProduits_Datagridview.DataSource = produits
                        RechercheProduits_Panel.Visible = True
                        Vente.Visible = False

                    End If

                            Case Else 'Plusieurs CAB correspondant trouvés dans la base
                    RechercheProduits_Datagridview.DataSource = Me.PharmaDataSet.Produits
                    If RechercheProduits_Préférés_RadioButton.Checked = True Then
                        Me.ProduitsTableAdapter.selectproduit_préférés_stock(Me.PharmaDataSet.Produits, produits_string_searched, produits_string_searched, Replace(produits_string_searched, " ", "%"), produits_string_searched)
                    ElseIf RechercheProduits_ROBOT_RadioButton.Checked = True Then
                        Me.ProduitsTableAdapter.Select_Produits_Robot(Me.PharmaDataSet.Produits, produits_string_searched, produits_string_searched, Replace(produits_string_searched, " ", "%"), produits_string_searched)
                        RechercheProduits_Datagridview.DataSource = Me.PharmaDataSet.Produits
                    Else
                        Me.ProduitsTableAdapter.selectproduit(Me.PharmaDataSet.Produits, produits_string_searched, produits_string_searched, Replace(produits_string_searched, " ", "%"), produits_string_searched)
                    End If

                    RechercheProduits_Panel.Visible = True
                    Vente.Visible = False
                        End Select
                    End If
                End If
            Case VentePrix.Index
                Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value = Replace(Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value, ".", ",")
                Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value = Replace(Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value, ".", ",")

                If Not IsNumeric(Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value) Then
                    Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value = "0"
                End If

                If Not IsNumeric(Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value) Then
                    Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value = "0"
                End If


                If Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value IsNot DBNull.Value And Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value IsNot Nothing And _
                   Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value IsNot DBNull.Value And Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value IsNot Nothing Then
                    If Vente.CurrentRow.Index + 1 < Vente.RowCount Then
                        If Vente.CurrentCell.Value.ToString <> "" And Vente(VentePrix.Index, lignevente).Value.ToString <> "" Then
                            If Vente.Item(Vente_G1610C8.Index, Vente.CurrentRow.Index).Value IsNot DBNull.Value And Vente.Item(Vente_G1610C8.Index, Vente.CurrentRow.Index).Value IsNot Nothing Then 'Coefficient G1610C8
                                Vente(VenteTotal.Index, lignevente).Value = (Vente(VentePrix.Index, lignevente).Value * Vente(VenteQuantité.Index, lignevente).Value) * (Vente.Item(Vente_G1610C8.Index, Vente.CurrentRow.Index).Value / 100)
                            Else
                                Vente(VenteTotal.Index, lignevente).Value = (Vente(VentePrix.Index, lignevente).Value * Vente(VenteQuantité.Index, lignevente).Value)
                            End If
                        End If
                    End If
                End If

                If Vente.Item(VenteTFRtype.Index, Vente.CurrentRow.Index).Value IsNot DBNull.Value Then
                    If Vente.Item(VenteTFRtype.Index, Vente.CurrentRow.Index).Value = "2" Then
                        Vente(VenteTFRprix.Index, Vente.CurrentRow.Index).Value = Vente(VentePrix.Index, Vente.CurrentRow.Index).Value
                    End If
                End If
            Case VenteQuantité.Index
                'control saisie
                If Not Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value Is Nothing Then
                    Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value = Replace(Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value, ".", ",")
                    If Not IsNumeric(Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value) Then
                        If Not Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value Is Nothing Then
                            If Not Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value = "" Then
                                Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value = "1"
                            End If
                        End If
                    ElseIf Val(Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value) = 0 Then
                        If Not Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value Is Nothing Then
                            If Not Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value = "" Then
                                Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value = "1"
                            End If
                        End If

                    End If
                    If Not Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value Is Nothing Then
                        Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value = Int(Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value)
                    End If
                    If Not Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value Is Nothing Then
                        Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value = Replace(Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value, ".", ",")
                    End If

                    'deconditionement (stupéfiants)
                    ReDim Preserve tab_Lignes_Vente(Vente.RowCount - 2)
                    If tab_Lignes_Vente.Length > Vente.CurrentRow.Index Then
                        If tab_Lignes_Vente(Vente.CurrentRow.Index).deconditionement = True Then

                            tab_Lignes_Vente(Vente.CurrentRow.Index).deconditionement_quantité = Val(Vente(VenteQuantité.Index, Vente.CurrentRow.Index).Value)


                            Dim nbr_boites As Integer = 0
                            Try
                                Dim Vidal_PackService As New Vidal_PackService.PackService
                                Vidal_PackService.Timeout = 60000 '3000
                                Dim Packs = Vidal_PackService.searchByProductId(Val(Vente(Vente_Vidal_ProductID.Index, Vente.CurrentRow.Index).Value))

                                If Not Packs Is Nothing And Packs.Count > 0 Then
                                    If Not Packs.ElementAt(0).dose Is Nothing Then
                                        If Not Val(Packs.ElementAt(0).dose) <= 0 Then
                                            If (Int(tab_Lignes_Vente(Vente.CurrentRow.Index).deconditionement_quantité) Mod (Val(Packs.ElementAt(0).dose))) = 0 Then
                                                nbr_boites = Int(tab_Lignes_Vente(Vente.CurrentRow.Index).deconditionement_quantité / Val(Packs.ElementAt(0).dose))
                                            Else
                                                nbr_boites = Int(tab_Lignes_Vente(Vente.CurrentRow.Index).deconditionement_quantité / Val(Packs.ElementAt(0).dose)) + 1
                                            End If
                                        End If
                                    End If
                                End If
                            Catch ex As Exception
                                MyMsg_Box.Presentation("Officine !", "Les services VIDAL n'ont pas répondu, renseignez manuellement le nombre de boites.", False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                            End Try

                            MyInptBox.my_showdialog(Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value & vbCrLf & vbCrLf & _
                              "Nombre de boites utilisées dans le cadre du déconditionement ?", VarType(New Integer), 10, nbr_boites)
                            nbr_boites = CInt(MyInptBox.result)
                            'If nbr_boites = 0 Then
                            '    nbr_boites = Int( _
                            '        Replace(InputBox(Vente(VenteDésignation.Index, Vente.CurrentRow.Index).Value.ToString + Chr(10) + "Nombre de conditionnements (boites) utilisés dans le cadre du déconditionnement?"), ".", ","))
                            'End If

                            tab_Lignes_Vente(Vente.CurrentRow.Index).deconditionement_NmbreBoites = nbr_boites

                        End If
                    End If

                    'dus
                    If Reprise_Facture_Num = 0 And mettre_en_Dus = True And Vente.Item(Vente_Stock_Suivi.Index, Vente.CurrentRow.Index).Value = True Then 'And InStr(Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value, "Honoraires de garde") = 0 Then

                        If Val(Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value) > Val(Vente.Item(VenteStock.Index, Vente.CurrentRow.Index).Value) And InStr(Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value, "Honoraire de Dispensation ") = 0 Then
                            Dim qtédu As Integer
                            If Val(Vente.Item(VenteStock.Index, Vente.CurrentRow.Index).Value) > 0 Then
                                qtédu = CInt(Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value) - Val(Vente.Item(VenteStock.Index, Vente.CurrentRow.Index).Value)
                            Else
                                qtédu = CInt(Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value)
                            End If

                            Dim qtédu_response As Integer
                            qtédu_response = qtédu
                            'Try
                            '    Dim message As String = ""
                            '    'If Val(Vente.Item(VenteStock.Index, Vente.CurrentRow.Index).Value) > 0 Then
                            '    MyInptBox.my_showdialog(Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value & vbCrLf & vbCrLf & _
                            '        Vente.Item(VenteStock.Index, Vente.CurrentRow.Index).Value.ToString & " en stock, facture " & (Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value).ToString & vbCrLf & vbCrLf & _
                            '        "Mettre en DU?", VarType(New Integer), 2, qtédu)
                            '    qtédu_response = CInt(MyInptBox.result)
                            '    If qtédu_response > CInt(Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value) Then
                            '        MyMsg_Box.Presentation("Officine !", "Attention," & vbCrLf & "vous delivrez  " & Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value.ToString & vbCrLf & _
                            '                               "vous avez saisi " & qtédu_response.ToString & " DU(s).", False, "", False, "", True, "OK")
                            '        MyMsg_Box.ShowDialog()
                            '    End If
                            'Catch ex As Exception

                            'End Try

                            '______________________________________________
                            If liste_du Is Nothing Then
                                liste_du = New List(Of VenteForm.du)
                            End If
                            Dim liste_du_to_remove As New List(Of VenteForm.du)
                            For Each du_ As VenteForm.du In liste_du
                                If (du_.cip7 = Vente.Item(VenteCIP.Index, Vente.CurrentRow.Index).Value And du_.cip7 <> "") Or _
                                    (du_.cip13 = Vente.Item(VenteEAN13.Index, Vente.CurrentRow.Index).Value And du_.cip13 <> "") Or _
                                    (du_.cip13 = Vente.Item(Ventecab.Index, Vente.CurrentRow.Index).Value And du_.cip13 <> "") Or _
                                     (du_.désignation = Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value And du_.désignation <> "") Then
                                    liste_du_to_remove.Add(du_)
                                End If
                            Next
                            For Each du_ In liste_du_to_remove
                                liste_du.Remove(du_)
                            Next
                            Dim du_add As VenteForm.du
                            If Vente.Item(VenteEAN13.Index, Vente.CurrentRow.Index).Value <> "" Then
                                du_add.cip13 = Vente.Item(VenteEAN13.Index, Vente.CurrentRow.Index).Value
                            Else
                                du_add.cip13 = Vente.Item(Ventecab.Index, Vente.CurrentRow.Index).Value
                            End If

                            du_add.cip7 = Vente.Item(VenteCIP.Index, Vente.CurrentRow.Index).Value
                            du_add.désignation = Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value
                            du_add.Note = ""
                            du_add.Quantité_Du = qtédu_response 'CInt(qté_du)
                            If du_add.Quantité_Du > 0 Then
                                liste_du.Add(du_add)
                            End If
                            'End If

                        End If

                    End If

                    If Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value IsNot DBNull.Value And Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value IsNot Nothing And _
                       Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value IsNot DBNull.Value And Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index).Value IsNot Nothing Then
                        If Vente.CurrentRow.Index + 1 < Vente.RowCount Then
                            If Vente.CurrentCell.Value.ToString <> "" And Vente(VentePrix.Index, lignevente).Value.ToString <> "" Then
                                If Vente.Item(Vente_G1610C8.Index, Vente.CurrentRow.Index).Value IsNot DBNull.Value And Vente.Item(Vente_G1610C8.Index, Vente.CurrentRow.Index).Value IsNot Nothing Then 'Coefficient G1610C8
                                    'If Vente.Item(Vente_G1610C8.Index, Vente.CurrentRow.Index).Value <> 100 Then
                                    Vente(VenteTotal.Index, lignevente).Value = (Vente(VentePrix.Index, lignevente).Value * Vente(VenteQuantité.Index, lignevente).Value) * (Vente.Item(Vente_G1610C8.Index, Vente.CurrentRow.Index).Value / 100)
                                    'End If
                                Else
                                    Vente(VenteTotal.Index, lignevente).Value = (Vente(VentePrix.Index, lignevente).Value * Vente(VenteQuantité.Index, lignevente).Value)
                                End If
                            End If
                        End If
                    End If
                    SendKeys.Send("{HOME}")
                    SendKeys.Send("{RIGHT}")
                End If
            Case VenteType.Index
                If Vente.CurrentCell.Value <> "" Then
                    If Vente.CurrentCell.Value = "ALD" And NatureAssurance_Button.Text <> "MALADIE" And NatureAssurance_Button.Text <> "ACCIDENT DE DROIT COMMUN" Then
                        MyMsg_Box.Presentation("Officine !", "ALD INCOMPATIBLE AVEC NATURE ASSURANCE", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        Vente.CurrentCell.Value = "assurance"
                    End If
                End If
                'If e.RowIndex = Vente.RowCount - 1 Then
                Select Case Vente.CurrentCell.Value
                    Case "assurance"
                        'ventetype_index_defaut = 0
                        ventetype_defaut = "assurance"
                    Case "Vente Directe"
                        'ventetype_index_defaut = 1
                        ventetype_defaut = "Vente Directe"
                    Case "ALD"
                        'ventetype_index_defaut = 2
                        ventetype_defaut = "ALD"
                    Case "PREV"
                        'ventetype_index_defaut = 3
                        ventetype_defaut = "PREV"
                    Case "SP"
                        'ventetype_index_defaut = 3
                        ventetype_defaut = "SP"
                End Select
                ' End If
            Case VenteCodeActe.Index
                If Vente.CurrentRow.Index + 1 < Vente.RowCount Then
                    If UCase(Vente.Item(VenteType.Index, Vente.CurrentRow.Index).Value.ToString) <> "VENTE DIRECTE" And Vente.CurrentCell.Value = "" Then
                        Choix_CodeActe.ShowDialog()
                    End If
                End If

            Case Vente_Remise.Index
                calcul_remise(Vente.CurrentRow.Index)

        End Select

        If Vente.CurrentRow.Index + 1 < Vente.RowCount Then
            'Dim CBox As DataGridViewComboBoxCell = CType(Vente.Rows(Vente.CurrentRow.Index).Cells.Item(VenteType.Index), DataGridViewComboBoxCell)
            'Dim CCol As DataGridViewComboBoxColumn = CType(Vente.Columns(VenteType.Index), DataGridViewComboBoxColumn)
            'CBox.Value = CCol.Items(ventetype_index_defaut)
            Vente.Rows(Vente.CurrentRow.Index).Cells.Item(VenteType.Index).Value = ventetype_defaut
        End If

        'Vente(VenteTotal.Index, lignevente).Value = (Vente(VentePrix.Index, lignevente).Value * Vente(VenteQuantité.Index, lignevente).Value)

        Valide_VenteCells = False

    End Sub

    Private Sub calcul_remise(ByVal r As Integer)
        If Vente(VenteType.Index, Vente.CurrentRow.Index).Value = "Vente Directe" Then
            If InStr(Vente(Vente_produits.Index, Vente.CurrentRow.Index).Value, "Honoraire de Dispensation ") <> 1 Then
                If RetrocessionToolStripMenuItem.Checked = False Then
                    If Not Me.BdM_PrixTableAdapter1.Select_Prix_Public_TTC(Vente(VenteEAN13.Index, Vente.CurrentRow.Index).Value, Vente(VenteCIP.Index, Vente.CurrentRow.Index).Value, Format(DateExecution.Value, "yyyyMMdd")) Is Nothing _
         And Mid(Vente(VenteCodeActe.Index, lignevente).Value, 1, 2) = "PH" And Vente(VenteCodeActe.Index, lignevente).Value <> "PHN" Then
                        Vente(VentePrix.Index, lignevente).Value = Me.BdM_PrixTableAdapter1.Select_Prix_Public_TTC(Vente(VenteEAN13.Index, Vente.CurrentRow.Index).Value, Vente(VenteCIP.Index, Vente.CurrentRow.Index).Value, Format(DateExecution.Value, "yyyyMMdd")) / 100
                    Else
                        Vente(VentePrix.Index, lignevente).Value = Me.ProduitsTableAdapter.GetDataByCIP_and_EAN13_and_CAB(Vente(VenteCIP.Index, Vente.CurrentRow.Index).Value, Vente(VenteEAN13.Index, Vente.CurrentRow.Index).Value, Vente(Ventecab.Index, Vente.CurrentRow.Index).Value).Item(0).PrixventeTTC
                    End If
                Else
                    Dim achats As PharmaDataSet.Produits_AchatsDataTable
                    achats = BDD.Produits_AchatsTableAdapter.GetDataBy_code_designation_ordby_date_desc(Vente(VenteEAN13.Index, lignevente).Value, Vente(Vente_produits.Index, lignevente).Value)
                    'If achats.Rows.Count = 0 Then
                    '    achats = BDD.Produits_AchatsTableAdapter.GetDataBy_code_designation_ordby_date_desc(Vente(Ventecab.Index, lignevente).Value, Vente(Vente_produits.Index, lignevente).Value)
                    'End If
                    If achats.Rows.Count > 0 Then
                        For r = 0 To achats.Rows.Count - 1
                            If achats.Item(r).Prix_achat > 0 Then
                                Vente(VentePrix.Index, lignevente).Value = CDec(achats.Item(r).Prix_achat.ToString) * (1 + (CDec(Vente(VenteTVA.Index, lignevente).Value) / 100))
                                Exit For
                            End If
                        Next
                    Else
                        MyMsg_Box.Presentation("Officine: retrocession", "Aucun prix d'achat trouvé pour:" & vbCrLf & vbCrLf & Vente(VenteDésignation.Index, lignevente).Value & vbCrLf & vbCrLf & "Le prix affiché est le prix de vente TTC (" & Vente(VentePrix.Index, lignevente).Value.ToString & " €).", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                    End If
                End If
            End If
            Dim remise As Decimal = CDec(Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value) * CDec(Vente.Item(Vente_Remise.Index, Vente.CurrentRow.Index).Value) / 100
            Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value = Arrondis((CDec(Vente.Item(VentePrix.Index, Vente.CurrentRow.Index).Value) - remise) * 100) / 100
            Vente(VenteTotal.Index, lignevente).Value = (Vente(VentePrix.Index, lignevente).Value * Vente(VenteQuantité.Index, lignevente).Value)
        Else
            Vente(Vente_Remise.Index, Vente.CurrentRow.Index).Value = "0"
        End If
    End Sub

    Private Sub Vente_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Vente.CellValueChanged
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If
        If Vente.RowCount = 0 Then Exit Sub

        If e.ColumnIndex = Vente_produits.Index Then
            Valide_VenteCells = True
        End If
        Select Case e.ColumnIndex
            Case VenteType.Index
                If Vente.Rows.Count > e.RowIndex + 1 Then
                    If InStr(Vente.Item(Vente_produits.Index, e.RowIndex + 1).Value, "Honoraire de Dispensation ") = 1 Then
                        Vente.Item(VenteType.Index, e.RowIndex + 1).Value = Vente.Item(VenteType.Index, e.RowIndex).Value
                    End If
                End If

            Case Vente_G1740C7.Index
                Try
                    Dim Numéro_Prestation_SV = 0
                    For r = 0 To Vente.CurrentRow.Index
                        If UCase(Vente.Item(VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                            Numéro_Prestation_SV = Numéro_Prestation_SV + 1
                        End If
                    Next
                    ReDim Preserve CurrentFactureVitale.G1740C7(Vente.RowCount)
                    CurrentFactureVitale.G1740C7(Numéro_Prestation_SV) = Vente.Item(Vente_G1740C7.Index, e.RowIndex).Value
                Catch ex As Exception

                End Try



        End Select


    End Sub

    'Choix d'un produit dans la grille de recherhce
    Private Sub RechercheProduits_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles RechercheProduits_Datagridview.CellClick

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If e.RowIndex = -1 Then
            Exit Sub
        End If

        transfertrechercheversvente(lignevente, RechercheProduits_Datagridview.CurrentCell.RowIndex, "*")
        Vente(VenteQuantité.Index, lignevente).Value = 1
        'Select Case ventetype_index_defaut
        '    Case 0
        '        Vente(VenteType.Index, lignevente).Value = "assurance"
        '    Case 1
        '        Vente(VenteType.Index, lignevente).Value = "Vente Directe"
        '    Case 2
        '        Vente(VenteType.Index, lignevente).Value = "ALD"
        '    Case 3
        '        Vente(VenteType.Index, lignevente).Value = "PREV"
        'End Select
        Vente(VenteType.Index, lignevente).Value = ventetype_defaut
        RechercheProduits_Panel.Visible = False
        Vente.Visible = True
        Vente.Focus()
        Vente.Enabled = True
        Vente.CurrentCell = Vente(VenteQuantité.Index, lignevente)

    End Sub

    ' Edition_Prescripteur
    Public Sub PictureBox_Edition_Prescripteur_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox_Edition_Prescripteur.Click

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim my_Edition_Prescripteurs As New Edition_Prescripteurs
        Dim prescr = Me.PrescripteursTableAdapter.GetDataBy_Numidentification_NumRPPS(TextBox_Prescripteur_NumID.Text, TextBox_Prescripteur_NumRPPS.Text)
        If prescr.Rows.Count > 0 Then

            my_Edition_Prescripteurs.IDinterneTextBox.Text = prescr.Item(0).IDinterne
            my_Edition_Prescripteurs.NumidentificationTextBox.Text = prescr.Item(0).Numidentification
            my_Edition_Prescripteurs.CodeSpécialitéTextBox.Text = prescr.Item(0).CodeSpécialité
            my_Edition_Prescripteurs.NomPrénomTextBox.Text = prescr.Item(0).NomPrénom
            my_Edition_Prescripteurs.AdresseTextBox.Text = prescr.Item(0).Adresse
            my_Edition_Prescripteurs.StatutComboBox.Text = prescr.Item(0).Statut
            my_Edition_Prescripteurs.NumRPPSTextBox.Text = prescr.Item(0).NumRPPS
            my_Edition_Prescripteurs.NumStructureTextBox.Text = prescr.Item(0).numStructure
            Try
                my_Edition_Prescripteurs.Notes_RichTextBox.Text = prescr.Item(0).Notes
            Catch ex As Exception
                my_Edition_Prescripteurs.Notes_RichTextBox.Text = ""
            End Try
        End If
        my_Edition_Prescripteurs.ShowDialog()
    End Sub
    Public Sub Edition_Prescripteur(ByVal Prescriteur_exists As Boolean, Numidentificationclé As String, NumRPPSclé As String)
        If Prescriteur_exists = True Then

        End If

    End Sub
    'mode degradé CheckedChanged
    Private Sub CheckBoxModeDegradé_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxModeDegradé.CheckedChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Select Case CheckBoxModeDegradé.Checked
            Case True
                G1511C2_CheckBox1.Visible = True
                CheckBoxModeDegradé.Enabled = False
            Case False
                G1511C2_CheckBox1.Visible = False
                G1511C2_CheckBox1.Checked = False
                CheckBoxModeDegradé.Enabled = True
        End Select
    End Sub

    'Indicateur Régime Alsace - Moselle CheckedChanged
    Private Sub G1511C2_CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles G1511C2_CheckBox1.CheckedChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Select Case G1511C2_CheckBox1.Checked
            Case True
                CurrentBenéficiaire.G1511C2 = "O"
            Case False
                CurrentBenéficiaire.G1511C2 = "N"
        End Select
    End Sub

    'CheckBox_DRE_annulation_CheckedChanged
    Private Sub CheckBox_DRE_annulation_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox_DRE_annulation.CheckedChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If CheckBox_DRE_annulation.Checked = True Then
            'CheckBoxFSE.Checked = False
            'CheckBoxFSE.Enabled = False
            'CheckBoxDRE.Checked = True
            'CheckBoxDRE.Enabled = False
            CheckBox_DRE_rectificative.Checked = False
            CheckBox_DRE_rectificative.Enabled = False
        Else
            'CheckBoxFSE.Enabled = True
            'CheckBoxDRE.Enabled = True
            CheckBox_DRE_rectificative.Enabled = True
        End If
    End Sub

    'CheckBox_DRE_rectificative_CheckedChanged
    Private Sub CheckBox_DRE_rectificative_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If CheckBox_DRE_rectificative.Checked = True Then
            'CheckBoxFSE.Checked = False
            'CheckBoxFSE.Enabled = False
            'CheckBoxDRE.Checked = True
            'CheckBoxDRE.Enabled = False
            CheckBox_DRE_annulation.Checked = False
            CheckBox_DRE_annulation.Enabled = False
        Else
            'CheckBoxFSE.Enabled = True
            'CheckBoxDRE.Enabled = True
            CheckBox_DRE_annulation.Enabled = True
        End If
    End Sub



    Private Sub AMC_Piècejustificative_ComboBox_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles AMC_Piècejustificative_ComboBox.GotFocus

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        While AMC_Piècejustificative_ComboBox.Items.Count > 4
            AMC_Piècejustificative_ComboBox.Items.RemoveAt(4)
        End While
    End Sub

    Private Sub Vente_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Vente.CellClick

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Select Case Vente.CurrentCell.ColumnIndex

            Case VenteCodeActe.Index
                Choix_CodeActe.ShowDialog()

            Case Vente_Delete.Index
                If Vente.RowCount > 1 And Vente.CurrentRow.Index <> Vente.RowCount - 1 Then
                    For Each du_ As VenteForm.du In liste_du
                        If du_.cip7 = Vente.Item(VenteCIP.Index, Vente.CurrentRow.Index).Value Or _
                            du_.cip13 = Vente.Item(VenteEAN13.Index, Vente.CurrentRow.Index).Value Or _
                             du_.désignation = Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value Then
                            liste_du.Remove(du_)
                            Exit For
                        End If
                    Next
                    Vente.Rows.Remove(Vente.CurrentRow)
                    If Hono_Disp_Codes_list.Contains(Vente.Item(VenteCodeActe.Index, Vente.CurrentRow.Index).Value) Then
                        Vente.Rows.Remove(Vente.Rows.Item(Vente.CurrentRow.Index))
                    End If
                End If
                CurrentFactureVitale.PEC.clear()
                ReDim CurrentFactureVitale.G1840(0)
                ReDim CurrentFactureVitale.G1740C7(Vente.RowCount)
                Try
                    Dim Numéro_Prestation_SV = 0
                    For r = 0 To Vente.RowCount - 1
                        If UCase(Vente.Item(VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                            Numéro_Prestation_SV = Numéro_Prestation_SV + 1
                            CurrentFactureVitale.G1740C7(Numéro_Prestation_SV) = Vente.Item(Vente_G1740C7.Index, r).Value
                        End If
                    Next

                Catch ex As Exception

                End Try
                ReDim CurrentFactureVitale.Forçage_Part_AMO(0)
                ReDim CurrentFactureVitale.G1741(0)
                ReDim CurrentFactureVitale.Non_Rembousable_CheckBox(0)
                For i = 0 To 200
                    DP_Poso(i) = ""
                    DP_Rect(i) = ""
                Next
                Première_Délivrance(True)

            Case Vente_Détail.Index
                Dim detail As New DETAIL_Ligne_Vente
                For c = 0 To Vente.ColumnCount - 1
                    detail.Mystring = detail.Mystring + Chr(10) + Vente.Columns.Item(c).Name.ToString.Replace("Vente", "") + ": "
                    If Not Vente.Item(c, Vente.CurrentRow.Index).Value Is Nothing Then
                        detail.Mystring = detail.Mystring + Vente.Item(c, Vente.CurrentRow.Index).Value.ToString
                    End If
                Next
                If Not Vente.Item(VenteTVA.Index, Vente.CurrentRow.Index).Value Is Nothing Then
                    detail.TVA_ComboBox.Text = Vente.Item(VenteTVA.Index, Vente.CurrentRow.Index).Value.ToString
                End If
                detail.Designation_Label.Text = Vente(Vente_produits.Index, Vente.CurrentRow.Index).Value.ToString
                If Vente(VenteEAN13.Index, Vente.CurrentRow.Index).Value.ToString <> "" Then
                    detail.CIP_Label.Text = Vente(VenteEAN13.Index, Vente.CurrentRow.Index).Value.ToString
                ElseIf Vente(VenteCIP.Index, Vente.CurrentRow.Index).Value.ToString <> "" Then
                    detail.CIP_Label.Text = Vente(VenteCIP.Index, Vente.CurrentRow.Index).Value.ToString
                Else
                    detail.CIP_Label.Text = "pas de codification"
                End If
                detail.Stock_Label.Text = "Stock: " & Vente(VenteStock.Index, Vente.CurrentRow.Index).Value.ToString
                detail.CommandeLinkLabel.Text = "En commande: " & Vente(Vente_En_Commande.Index, Vente.CurrentRow.Index).Value.ToString
                detail.LPP_Label.Text = ""
                If Not IsDBNull(Vente(VenteLPP.Index, Vente.CurrentRow.Index).Value) Then
                    If Vente(VenteLPP.Index, Vente.CurrentRow.Index).Value <> "" Then
                        If LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, Vente.CurrentRow.Index).Value, Val(Format(DateExecution.Value, "yyyyMMdd"))).Rows.Count > 0 Then
                            detail.LPP_Label.Text = "LPP: " & Vente(VenteLPP.Index, Vente.CurrentRow.Index).Value & " ,  tarif remb:" & _
                         (Val(LPPTableAdapter.GetData_CodeLPP_Date(Vente(VenteLPP.Index, Vente.CurrentRow.Index).Value, Val(Format(DateExecution.Value, "yyyyMMdd"))).Item(0).PrixLPP) / 100).ToString & "€"
                        Else
                            detail.LPP_Label.Text = "LPP: " & Vente(VenteLPP.Index, Vente.CurrentRow.Index).Value & " ,  tarif remb: aucun remboursement à la date d'execution"
                        End If

                    End If
                End If
                detail.ShowDialog()

            Case Vente_FicheProduit.Index
                Dim recherche As String = ""
                If Vente.Item(VenteEAN13.Index, Vente.CurrentRow.Index).Value <> "" Then
                    recherche = Vente.Item(VenteEAN13.Index, Vente.CurrentRow.Index).Value
                ElseIf Vente.Item(VenteCIP.Index, Vente.CurrentRow.Index).Value <> "" Then
                    recherche = Vente.Item(VenteCIP.Index, Vente.CurrentRow.Index).Value
                ElseIf Vente.Item(VenteDésignation.Index, Vente.CurrentRow.Index).Value <> "" Then
                    recherche = Vente.Item(VenteDésignation.Index, Vente.CurrentRow.Index).Value
                End If
                If recherche <> "" Then
                    Produits.Visible = True
                    Produits.Recherche_TextBox.Text = recherche
                    Produits.Recherche_TextBox_Validated(Nothing, Nothing)
                    Produits.BringToFront()
                    Produits.WindowState = FormWindowState.Maximized
                End If

            Case Vente_premier.Index
                If CurrentBenéficiaire.G101C8 <> "" Or CurrentBenéficiaire.Num <> 0 Then
                    MyMsg_Box.Presentation("Officine ?", Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value & vbCrLf & vbCrLf & "Voulez vous modifier le suivi de ce traitement ?", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                        'Try
                        Chronique_Periode_decalage_jour_TextBox_Validated(Nothing, Nothing)
                        'Catch ex As Exception

                        'End Try
                        If ClientConnu() = False Then
                            EnregistreDonnéesClientversBDD()
                            CurrentBenéficiaire.Num = Me.VitaleTableAdapter.GetDataBénéficiaire(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14).Item(0).Num
                            Last_VitalNum = CurrentBenéficiaire.Num
                        End If
                        Dim My_Chronique_Ligne As New Chronique_Ligne
                        My_Chronique_Ligne.Chronique_item.Vitale_Num = CurrentBenéficiaire.Num
                        My_Chronique_Ligne.Chronique_item.Produit_CAB = Vente(Ventecab.Index, Vente.CurrentRow.Index).Value
                        My_Chronique_Ligne.Chronique_item.Produit_CIP = Vente(VenteCIP.Index, Vente.CurrentRow.Index).Value
                        My_Chronique_Ligne.Chronique_item.Produit_Désignation = Vente(VenteDésignation.Index, Vente.CurrentRow.Index).Value
                        My_Chronique_Ligne.Chronique_item.Produit_EAN13 = Vente(VenteEAN13.Index, Vente.CurrentRow.Index).Value
                        My_Chronique_Ligne.Chronique_item.Vitale_Num = CurrentBenéficiaire.Num


                        Dim datas = BDD.ChroniqueTableAdapter.GetDataBy_Datas(CurrentBenéficiaire.Num, Vente(VenteDésignation.Index, Vente.CurrentRow.Index).Value, Vente(VenteCIP.Index, Vente.CurrentRow.Index).Value, Vente(VenteEAN13.Index, Vente.CurrentRow.Index).Value, Vente(Ventecab.Index, Vente.CurrentRow.Index).Value)
                        If datas.Rows.Count > 0 Then
                            My_Chronique_Ligne.Chronique_item.load_from_row(datas(0))
                            'My_Chronique_Ligne.Chronique_item.Commande_Produit = datas(0).Commande_Produit
                            'My_Chronique_Ligne.Chronique_item.Date_Commande_Produit = datas(0).Date_Commande_Produit

                            'If InStr(Vente.Item(Vente_premier.Index, Vente.CurrentRow.Index).Value, "/") = 3 And InStrRev(Vente.Item(Vente_premier.Index, Vente.CurrentRow.Index).Value, "/") = 6 Then
                            '    My_Chronique_Ligne.Chronique_item.Date_dernière_delivrance = CDate(Vente.Item(Vente_premier.Index, Vente.CurrentRow.Index).Value)
                            'Else
                            '    My_Chronique_Ligne.Chronique_item.Date_dernière_delivrance = Now
                            'End If
                            ''My_Chronique_Ligne.Chronique_item.Date_dernière_delivrance = datas(0).Date_dernière_delivrance
                            'My_Chronique_Ligne.Chronique_item.Date_Renouvellement = datas(0).Date_Renouvellement
                            'My_Chronique_Ligne.Chronique_item.Avertissement_écart = datas(0).Avertissement_écart
                            'My_Chronique_Ligne.Chronique_item.Avertissement_écart_jours = datas(0).Avertissement_écart_jours
                            'My_Chronique_Ligne.Chronique_item.Intervalle_renouvellement = datas(0).Intervalle_renouvellement
                            'My_Chronique_Ligne.Chronique_item.Intervalle_Commande_Produit = datas(0).Intervalle_Commande_Produit
                            'My_Chronique_Ligne.Chronique_item.Commande_Fournisseur = datas(0).Commande_Fournisseur
                            'My_Chronique_Ligne.Chronique_item.Commande_Quantité = datas(0).Commande_Quantité
                            'My_Chronique_Ligne.Chronique_item.Commande_Ref = datas(0).Commande_Ref
                            'My_Chronique_Ligne.Chronique_item.Renouvelable = datas(0).Renouvelable
                            'My_Chronique_Ligne.Chronique_item.Poso_MATIN = datas(0).Poso_MATIN
                            'My_Chronique_Ligne.Chronique_item.Poso_MIDI = datas(0).Poso_MIDI
                            'My_Chronique_Ligne.Chronique_item.Poso_SOIR = datas(0).Poso_SOIR
                            'My_Chronique_Ligne.Chronique_item.Poso_COUCHER = datas(0).Poso_COUCHER
                            'My_Chronique_Ligne.Chronique_item.Poso_BESOIN = datas(0).Poso_BESOIN
                            'My_Chronique_Ligne.Chronique_item.Poso_Jours_liste = datas(0).Poso_Jours_liste
                            'My_Chronique_Ligne.Chronique_item.Poso_Interval_jour = datas(0).Poso_Interval_jour
                            'My_Chronique_Ligne.Chronique_item.Poso_Interval_dénominateur = datas(0).Poso_Interval_dénominateur
                            'My_Chronique_Ligne.Chronique_item.pda = datas(0).pda
                            'My_Chronique_Ligne.Chronique_item.chronique = datas(0).chronique
                            'My_Chronique_Ligne.Chronique_item.Prescr_IDinterne = datas(0).Prescr_IDinterne
                            'My_Chronique_Ligne.Chronique_item.Notes = datas(0).Notes
                            'My_Chronique_Ligne.Chronique_item.Période_ID = datas(0).Période_ID
                            'My_Chronique_Ligne.Chronique_item.Période_récurence = datas(0).Période_récurence
                            'My_Chronique_Ligne.Chronique_item.ALD = datas(0).ALD
                            'My_Chronique_Ligne.Chronique_item.G1740C7 = datas(0).G1740C7
                            My_Chronique_Ligne.new_line = False

                        Else
                            My_Chronique_Ligne.Chronique_item.Commande_Produit = False
                            My_Chronique_Ligne.Chronique_item.Date_Commande_Produit = Now
                            My_Chronique_Ligne.Chronique_item.Date_dernière_delivrance = Now
                            My_Chronique_Ligne.Chronique_item.Date_Renouvellement = Now
                            My_Chronique_Ligne.Chronique_item.Avertissement_écart = False
                            My_Chronique_Ligne.Chronique_item.Avertissement_écart_jours = 0
                            My_Chronique_Ligne.Chronique_item.Intervalle_renouvellement = 0
                            My_Chronique_Ligne.Chronique_item.Intervalle_Commande_Produit = 0
                            My_Chronique_Ligne.Chronique_item.Commande_Fournisseur = ""
                            My_Chronique_Ligne.Chronique_item.Commande_Quantité = 0
                            My_Chronique_Ligne.Chronique_item.Commande_Ref = ""
                            My_Chronique_Ligne.Chronique_item.Renouvelable = False
                            My_Chronique_Ligne.Chronique_item.Poso_MATIN = 0
                            My_Chronique_Ligne.Chronique_item.Poso_MIDI = 0
                            My_Chronique_Ligne.Chronique_item.Poso_SOIR = 0
                            My_Chronique_Ligne.Chronique_item.Poso_COUCHER = 0
                            My_Chronique_Ligne.Chronique_item.Poso_BESOIN = 0
                            My_Chronique_Ligne.Chronique_item.Poso_Jours_liste = "1111111"
                            My_Chronique_Ligne.Chronique_item.Poso_Interval_jour = 1
                            My_Chronique_Ligne.Chronique_item.Poso_Interval_dénominateur = 1
                            My_Chronique_Ligne.Chronique_item.pda = False
                            My_Chronique_Ligne.Chronique_item.chronique = False
                            My_Chronique_Ligne.Chronique_item.Prescr_IDinterne = CurrentBenéficiaire.Prescripteur_ID
                            My_Chronique_Ligne.Chronique_item.Notes = ""
                            My_Chronique_Ligne.Chronique_item.Période_ID = 0
                            My_Chronique_Ligne.Chronique_item.Période_récurence = "1/1"
                            My_Chronique_Ligne.Chronique_item.ALD = False
                            My_Chronique_Ligne.Chronique_item.G1740C7 = ""
                            My_Chronique_Ligne.new_line = True
                        End If
                        'End If
                        My_Chronique_Ligne.ShowDialog()
                    End If
                End If
        End Select
    End Sub
    Private Sub Button_AMC_suppr_type_contrat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_AMC_suppr_type_contrat.Click

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Try
            CurrentBenéficiaire.AMC_TypeContrat = ""
            AMC_Couverture_TextBox.Text = ""
            info_Enregistrer_LinkLabel_LinkClicked(Nothing, Nothing)
        Catch ex As Exception
        End Try

    End Sub

    Private Sub Date_part_complémentaire_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Date_part_complémentaire_Item_Date_Éxécution.Click, Date_part_complémentaire_Item_Date_Facturation.Click, Date_part_complémentaire_Item_Date_Prescription.Click

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If sender.Checked = True Then
            Date_part_complémentaire_Item_Date_Éxécution.Checked = False
            Date_part_complémentaire_Item_Date_Facturation.Checked = False
            Date_part_complémentaire_Item_Date_Prescription.Checked = False
            sender.Checked = True
        End If
    End Sub

    Private Sub RadioButtonDateDébutGrossesse_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButtonDateDébutGrossesse.CheckedChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        RadioButtonDateAccouchement.Checked = Not (RadioButtonDateDébutGrossesse.Checked)
    End Sub

    Private Sub RadioButtonDateAccouchement_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButtonDateAccouchement.CheckedChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        RadioButtonDateDébutGrossesse.Checked = Not (RadioButtonDateAccouchement.Checked)
    End Sub

    Private Sub enable_Color(sender As Object, e As EventArgs) Handles MUT_NumMutuelle_TextBox.ReadOnlyChanged, AMC_NumAMC_TextBox.ReadOnlyChanged, AMC_Numadhérent_TextBox.ReadOnlyChanged, _
        AMC_DateDebut_MaskedTextBox.ReadOnlyChanged, AMC_DateFin_MaskedTextBox.ReadOnlyChanged, AMC_Code_Aiguillage_STS_TextBox.ReadOnlyChanged, AMC_Indicateurdetrairement_TextBox.ReadOnlyChanged, _
                AMC_CodeRoutage_TextBox.ReadOnlyChanged, AMC_IdHote_TextBox.ReadOnlyChanged, AMC_NomDomaine_TextBox.ReadOnlyChanged, AMC_Type_Convention_TextBox.ReadOnlyChanged, _
                        AMC_Critère_secondaire_TextBox.ReadOnlyChanged

        If sender.readonly = True Then
            sender.ForeColor = System.Drawing.Color.Black
            sender.backcolor = System.Drawing.Color.White
        Else
            sender.ForeColor = System.Drawing.Color.Black
            sender.backcolor = System.Drawing.Color.White
        End If

    End Sub

#End Region



#Region "CONTROLES COHERENCE DATA"

    Private Sub DatePrecription_EnabledChanged(sender As Object, e As EventArgs) Handles DatePrecription.EnabledChanged
        Modifier_Dates_LinkLabel.Visible = Not DatePrecription.Enabled
    End Sub

    Private Sub DatePrecription_ImeModeChanged(sender As Object, e As EventArgs) Handles DatePrecription.ImeModeChanged

    End Sub



    'DatePrecription
    Private Sub DatePrecription_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles DatePrecription.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If DatePrecription.Value > DateExecution.Value Or DateExecution.Value > DateFacture.Value Then
            MyMsg_Box.Presentation("Officine !", "LA DATE DE PRESCRIPTION DOIT ETRE < ou = A LA DATE D'EXECUTION", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            DatePrecription.Value = DateExecution.Value
        End If
    End Sub

    'DateExecution
    Private Sub DateExecution_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles DateExecution.Validated

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If DateExecution.Value < DatePrecription.Value Or DateExecution.Value > DateFacture.Value Then
            MyMsg_Box.Presentation("Officine !", "LA DATE D'EXECUTION DOIT ETRE > ou = A LA DATE DE PRESCRIPTION" + Chr(10) + "LA DATE D'EXECUTION DOIT ETRE < ou = A LA DATE DE FACTURATION", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            DateExecution.Value = DatePrecription.Value
        End If
    End Sub


#End Region

#Region "CONTRACEPTIF URGENCE"
    Private Sub ContraceptifDUrgenceToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ContraceptifDUrgenceToolStripMenuItem.Click

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If
        MyMsg_Box.Presentation("Officine ?", "DELIVRANCE CONTRACEPTIF URGENCE POUR MINEURE?", True, "OUI", True, "NON", False, "")
        If MyMsg_Box.ShowDialog() <> MsgBoxResult.Yes Then
            Exit Sub
        End If
        'contaceptif urgence

        CurrentBenéficiaire.clear()
        CurrentBenéficiaire.G101C1 = Mid(Config.Logiciel_ModeFonctionement, 1, 1)
        CurrentBenéficiaire.G101C7 = "A"
        CurrentBenéficiaire.G101C8 = Config.Data_ContaceptifUrgence_NIR
        CurrentBenéficiaire.G101C9 = Config.Data_ContaceptifUrgence_cle
        CurrentBenéficiaire.G101C10 = "01"
        CurrentBenéficiaire.G101C11 = Config.Data_ContaceptifUrgence_CaisseGest
        CurrentBenéficiaire.G101C12 = Config.Data_ContaceptifUrgence_CentreGest
        CurrentBenéficiaire.G104C12 = Config.Data_ContaceptifUrgence_datenaissance
        CurrentBenéficiaire.G104C13 = "1"
        CurrentBenéficiaire.G104C14 = "6"

        MyMsg_Box.Presentation("Officine ?", "Le patient accepte-t-il de communiquer sa date de naissance?", True, "OUI", True, "NON", False, "")
        If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
            Me.Enabled = False
            Contraceptif_Urg_saisie_date_naissance.ShowDialog()
        End If



        Vente.Rows.Clear()
        Vente.Rows.Add()
        'ventetype_index_defaut = 0
        ventetype_defaut = "PREV"
        'Vente.Item(VenteCIP.Index, 0).Value = XMLelementliste.Item(0).Item("ContraceptifCIP").InnerText
        'Vente.CurrentCell = Vente(VenteCIP.Index, 0)
        'Vente.CurrentCell = Vente(VenteCIP.Index + 1, 0)
        Vente.CurrentCell = Vente(Vente_produits.Index, 0)
        Vente.Item(Vente_produits.Index, 0).Value = Config.Data_ContaceptifUrgence_ContraceptifCIP
        Vente.CurrentCell = Vente(VenteQuantité.Index, 0)
        'Vente.CurrentCell = Vente(Vente_produits.Index + 1, 0)
        Vente.Item(VenteQuantité.Index, 0).Value = "1"
        Vente.CurrentCell = Vente(Vente_produits.Index, 0)
        ventetype_defaut = "assurance"
        'Vente.Item(VenteType.Index, 0).Value = "assurance"
        CheckBoxModeDegradé.Enabled = False
        CheckBoxModeDegradé.Checked = True
        CheckBox_Facturation_AMC.Checked = False
        NatureAssurance_Button.Text = "MALADIE"

        'Button_Facturation_Click(Nothing, Nothing)

    End Sub
#End Region

    Private Sub NatureAssurance_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NatureAssurance_Button.Click

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim affichage As Control
        affichage = Vente 'defaut
        If Détail_Bénéficiaire_Panel.Visible = True Then
            affichage = Détail_Bénéficiaire_Panel
        End If

        affichage.Visible = False
        Choix_Nature_Assurance.Location = New Point(Panel_Facturation.Location.X, Panel_Facturation.Location.Y)
        Choix_Nature_Assurance.ShowDialog()
        affichage.Visible = True
    End Sub

    Private Sub NatureAssurance_Button_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles NatureAssurance_Button.TextChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Select Case NatureAssurance_Button.Text
            Case "MALADIE", "PREVENTION"
                NatureAssuranceDateTimePickerLabel.Text = ""
                NatureAssuranceDateTimePicker.Visible = False
                CheckBox_Facturation_AMC.Enabled = True
                RadioButtonDateAccouchement.Visible = False
                RadioButtonDateDébutGrossesse.Visible = False
                CheckBox_Facturation_AMC.Enabled = True
                CheckBox_Facturation_AMC.Checked = True
                Montant_PEC_SMG_TextBox1.Visible = False
                Montant_PEC_SMG_TextBox1.Text = ""
            Case "MATERNITE"
                RadioButtonDateAccouchement.Visible = True
                RadioButtonDateDébutGrossesse.Visible = True
                RadioButtonDateAccouchement.Checked = True
                NatureAssuranceDateTimePickerLabel.Text = ""
                NatureAssuranceDateTimePicker.Visible = True
                If Vente.RowCount > 0 Then
                    For i = 0 To Vente.RowCount - 1
                        If Vente(VenteType.Index, i).Value = "ALD" Then
                            Vente(VenteType.Index, i).Value = "assurance"
                        End If
                    Next
                End If
                CheckBox_Facturation_AMC.Enabled = True
                CheckBox_Facturation_AMC.Checked = True
                Montant_PEC_SMG_TextBox1.Visible = False
                Montant_PEC_SMG_TextBox1.Text = ""
            Case "ACCIDENT DU TRAVAIL"
                NatureAssuranceDateTimePickerLabel.Text = ""
                NatureAssuranceDateTimePicker.Visible = False
                If Vente.RowCount > 0 Then
                    For i = 0 To Vente.RowCount - 1
                        If Vente(VenteType.Index, i).Value = "ALD" Then
                            Vente(VenteType.Index, i).Value = "assurance"
                        End If
                    Next
                End If
                CheckBox_Facturation_AMC.Enabled = True
                CheckBox_Facturation_AMC.Checked = True
                RadioButtonDateAccouchement.Visible = False
                RadioButtonDateDébutGrossesse.Visible = False
                Montant_PEC_SMG_TextBox1.Visible = False
                Montant_PEC_SMG_TextBox1.Text = ""
            Case "ACCIDENT DE DROIT COMMUN"
                NatureAssuranceDateTimePickerLabel.Text = "Date d’accident de droit commun"
                NatureAssuranceDateTimePicker.Visible = True
                If Vente.RowCount > 0 Then
                    For i = 0 To Vente.RowCount - 1
                        If Vente(VenteType.Index, i).Value = "ALD" Then
                            Vente(VenteType.Index, i).Value = "assurance"
                        End If
                    Next
                End If
                CheckBox_Facturation_AMC.Enabled = True
                CheckBox_Facturation_AMC.Checked = True
                RadioButtonDateAccouchement.Visible = False
                RadioButtonDateDébutGrossesse.Visible = False
                Montant_PEC_SMG_TextBox1.Visible = False
                Montant_PEC_SMG_TextBox1.Text = ""
            Case "SMG"
                NatureAssuranceDateTimePickerLabel.Text = "Montant PEC SMG (en c€nts)"
                NatureAssuranceDateTimePicker.Visible = False
                CheckBox_Facturation_AMC.Enabled = False
                CheckBox_Facturation_AMC.Checked = False
                RadioButtonDateAccouchement.Visible = False
                RadioButtonDateDébutGrossesse.Visible = False
                Montant_PEC_SMG_TextBox1.Visible = True
        End Select
    End Sub

    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles close_PictureBox.Click

        MENU_PRINCIPAL.WindowState = FormWindowState.Maximized
        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If
        If Encaissement_attente_LinkLabel.Text <> "En Attente: 0€" And InStr(Encaissement_attente_LinkLabel.Text, "Reprise Fact") = 0 Then
            MyMsg_Box.Presentation("Officine !", "encaissements en attente", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Me.BringToFront()
            Exit Sub
        End If
        If DP_Carte_Vitale_lue = True Then
            If Not IAM_info_form.interactions_détectées Is Nothing Then


                For Each inter In IAM_info_form.interactions_détectées

                    If Val(inter.IamNiv) >= Val(Config.Piam3) Then
                        Dim iam_alim_form As New IAM_alimentation_DP
                        iam_alim_form.interaction_ = inter
                        iam_alim_form.ShowDialog()
                    Else
                        Dim iam_alim_form As New IAM_alimentation_DP
                        iam_alim_form.interaction_ = inter
                        iam_alim_form.RadioButton1.Checked = False
                        iam_alim_form.WindowState = FormWindowState.Minimized
                        iam_alim_form.Visible = True
                        iam_alim_form.Button1.PerformClick()
                    End If
                Next
            End If
        End If


        MENU_PRINCIPAL.COMPTOIR_MAIN_ResetForm(False)


        'Me.Close()



    End Sub


    Private Sub question_ALD()

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        'If Trace_Appel_Fonctions = True Then
        '    Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
        '        sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
        '    End Using
        'End If

        'If Trace_Appel_Fonctions = True Then
        '    Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
        '        sw.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
        '    End Using
        'End If

        If Val(CodeALD("", Date_Droits_AMO())) > 0 And Jeux_d_essai2.Visible = False And jeux_d_essai_CAS_STANDARD.Visible = False Then
            MyMsg_Box.Presentation("Officine ?", "les soins sont-ils en rapport avec le protocole ALD?", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                'ventetype_index_defaut = 2
                ventetype_defaut = "ALD"
            End If
        End If
    End Sub

#Region "PEC"
    Private Sub MontantGlobalPriseEnchargeToolStripTextBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MontantGlobalPriseEnchargeToolStripTextBox.TextChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        '______________________________________
        If MontantGlobalPriseEnchargeToolStripTextBox.Text = "" Then
            CurrentFactureVitale.PEC.MontantGlobal = Nothing
            CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global = Nothing
            CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS = Nothing
            '_______________________
        ElseIf Not IsNumeric(MontantGlobalPriseEnchargeToolStripTextBox.Text) Then
            MontantGlobalPriseEnchargeToolStripTextBox.Text = ""
            Beep()
            Exit Sub
            '______________________________________
        Else
            ReDim CurrentFactureVitale.PEC.Montants_Actes(-1)
            CurrentFactureVitale.PEC.MontantGlobal = Val(MontantGlobalPriseEnchargeToolStripTextBox.Text)
            CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global = Val(MontantGlobalPriseEnchargeToolStripTextBox.Text)
            CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global_STS = Val(MontantGlobalPriseEnchargeToolStripTextBox.Text)
        End If
    End Sub
#End Region

    Private Sub Montant_PEC_SMG_TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Montant_PEC_SMG_TextBox1.TextChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Not IsNumeric(Montant_PEC_SMG_TextBox1.Text) Then
            Beep()
            Montant_PEC_SMG_TextBox1.Text = ""
        End If

    End Sub


    Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Reset_PictureBox.Click

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If
        If Encaissement_attente_LinkLabel.Text <> "En Attente: 0€" And InStr(Encaissement_attente_LinkLabel.Text, "Reprise Fact") = 0 Then
            MyMsg_Box.Presentation("Officine !", "encaissements en attente", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Me.BringToFront()
            Exit Sub
        End If

        If DP_Carte_Vitale_lue = True Then
            If Not IAM_info_form.interactions_détectées Is Nothing Then
                For Each inter In IAM_info_form.interactions_détectées

                    If Val(inter.IamNiv) >= Val(Config.Piam3) Then
                        Dim iam_alim_form As New IAM_alimentation_DP
                        iam_alim_form.interaction_ = inter
                        iam_alim_form.ShowDialog()
                    Else
                        Dim iam_alim_form As New IAM_alimentation_DP
                        iam_alim_form.interaction_ = inter
                        iam_alim_form.RadioButton1.Checked = False
                        iam_alim_form.WindowState = FormWindowState.Minimized
                        iam_alim_form.Visible = True
                        iam_alim_form.Button1.PerformClick()
                    End If
                Next
            End If
        End If

        MENU_PRINCIPAL.COMPTOIR_MAIN_ResetForm(True)



    End Sub



    Private Sub COMPTOIR_MAIN_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        If e.X > Screen.PrimaryScreen.Bounds.Width - 50 Then
            'While Commandes_Panel.Width < 200
            '    Commandes_Panel.Location = New Point(Screen.PrimaryScreen.Bounds.Width - Commandes_Panel.Width - 1, 0)
            '    Commandes_Panel.Width = Commandes_Panel.Width + 10
            'End While
            Commandes_Panel.BringToFront()
            If Commandes_Panel.Width < 200 Then
                Commandes_Panel.Location = New Point(Screen.PrimaryScreen.Bounds.Width - 200, 0)
                Commandes_Panel.Width = 200
            End If
        End If
    End Sub

    Private Sub Commandes_Panel_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Commandes_Panel.MouseLeave
        If Screen.PrimaryScreen.Bounds.Width < 1800 Then
            If MousePosition.X < Screen.PrimaryScreen.Bounds.Width - 200 Then
                'While Commandes_Panel.Width > 0
                '    Commandes_Panel.Width = Commandes_Panel.Width - 10
                '    Commandes_Panel.Location = New Point(Commandes_Panel.Location.X + 1, 0)
                'End While
                If Commandes_Panel.Width > 0 Then
                    'Commandes_Panel.Location = New Point(Screen.PrimaryScreen.Bounds.Width, 0)
                    Commandes_Panel.Width = 0

                End If
            End If
        End If
    End Sub

    Private Sub NuméroDAMCAssociéeToolStripMenuItem_CheckedChanged(sender As Object, e As EventArgs) Handles NuméroDAMCAssociéeToolStripMenuItem.CheckedChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If NuméroDAMCAssociéeToolStripMenuItem.Checked = False Then
            AMC_NumAMC_TextBox.Text = ""
            AMC_Intitule_TextBox.Text = ""
            CurrentBenéficiaire.AMC_NumOrganisme = ""
        End If
    End Sub

    Private Sub GrouperLPPToolStripMenuItem_CheckedChanged(sender As Object, e As EventArgs) Handles GrouperLPPToolStripMenuItem.CheckedChanged
        ReDim CurrentFactureVitale.G1840(0)
        CurrentFactureVitale.PEC.clear()
        ReDim CurrentFactureVitale.G1740C7(0)
        ReDim CurrentFactureVitale.Forçage_Part_AMO(0)
        ReDim CurrentFactureVitale.G1741(0)
    End Sub

    Private Sub Renouvellement_TextBox_Enter(sender As Object, e As EventArgs) Handles Renouvellement_TextBox.Enter
        If Renouvellement_TextBox.Text = "0" Then
            Renouvellement_TextBox.Text = ""
        End If
    End Sub

    Private Sub Renouvellement_TextBox_TextChanged(sender As Object, e As EventArgs) Handles Renouvellement_TextBox.TextChanged

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        If Not IsNumeric(Renouvellement_TextBox.Text) Then
            Renouvellement_TextBox.Text = ""
        End If
        CurrentFactureVitale.Renouvellement_Date_Droits_AMO_est_date_éxécution = False
    End Sub

    Private Sub Renouvellement_TextBox_Validated(sender As Object, e As EventArgs) Handles Renouvellement_TextBox.Validated
        If Renouvellement_TextBox.Text = "" Then
            Renouvellement_TextBox.Text = "0"
        End If
    End Sub

    Private Sub COMPTOIR_MAIN_Shown(sender As Object, e As EventArgs) Handles Me.Shown

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        VenteListe.DropDownWidth = 200
        'Affiche_dus()
        Honoraires_garde_add_toolstripmenuitem()
        Honoraires_garde_apply()

  


    End Sub

    Private Sub Assuré_détail_Button_Click(sender As Object, e As EventArgs) Handles Assuré_détail_Button.Click
        Dim Open_Existing As Boolean = True

        If Not CurrentBenéficiaire.G101C8 Is Nothing Then
            If CurrentBenéficiaire.G101C8 = "" And CurrentBenéficiaire.G104C1 = "" And CurrentBenéficiaire.G104C3 = "" Then
                Open_Existing = False
            End If
        Else
            Open_Existing = False
        End If


        If Open_Existing = True Then
            Dim my_compte_client As New Comptes_Clients
            my_compte_client.MaximizeBox = False
            my_compte_client.MinimizeBox = False
            'my_compte_client.Visible = True
            my_compte_client.affiche_compte_from_another_form(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3, DateVitale_To_DateString(CurrentBenéficiaire.G104C12))
            my_compte_client.ShowDialog()
        ElseIf Open_Existing = False Then
            Dim my_compte_client As New Comptes_Clients
            my_compte_client.MaximizeBox = False
            my_compte_client.MinimizeBox = False
            my_compte_client.ShowDialog()
        End If

    End Sub



    Private Sub TECHNIQUE_Click(sender As Object, e As EventArgs) Handles TECHNIQUE.Click
        If Technique_MAIN.Visible = False Then
            Technique_MAIN.Visible = True
        Else
            Technique_MAIN.Select()
        End If
    End Sub



#Region "DP"

    Private Sub Proposition_création_DP()

        If DP_Création_déja_proposée = False Then
            DP_Création_déja_proposée = True
        Else
            Exit Sub
        End If


        'If (DP_form.Consultation_CodeErreur = "DP_REFUSE" And DateDiff(DateInterval.Year, Now, DP_form.RefDate) >= 1) Or _
        '           (DP_form.Consultation_CodeErreur = "DP_REFUSE" And DateDiff(DateInterval.Year, Now, DP_form.RefDate) < 1 And DP_form.RefNbr < 3) Or _
        '           (DP_form.Consultation_CodeErreur = "DP_SUPPRIME" And DateDiff(DateInterval.Year, Now, DP_form.SupprDate) >= 1) Or _
        '           (DP_form.Consultation_CodeErreur <> "DP_REFUSE" And DP_form.Consultation_CodeErreur <> "DP_SUPPRIME") Then

        If (DP_LinkLabel.Text = "DP refusé" And DateDiff(DateInterval.Year, Now, DP_form.RefDate) >= 1) Or _
                   (DP_LinkLabel.Text = "DP refusé" And DateDiff(DateInterval.Year, Now, DP_form.RefDate) < 1 And DP_form.RefNbr < 3) Or _
                   (DP_LinkLabel.Text = "DP supprimé" And DateDiff(DateInterval.Year, Now, DP_form.SupprDate) >= 1) Or _
                   (DP_LinkLabel.Text <> "DP refusé" And DP_LinkLabel.Text <> "DP supprimé") Then

            Dim mymsgbox As New Dp_recueil_consentement
            Select Case mymsgbox.ShowDialog
                Case MsgBoxResult.Yes
                    'DP_form.Visible = True
                    If Config.DP_is_local_client = True Then
                        DP_form.Création_Client()
                    Else
                        DP_form.Création()
                    End If
                    If DP_form.Visible = False Then
                        DP_form.ShowDialog()
                    End If

                Case MsgBoxResult.No
                    DP_form.Visible = True
                    If Config.DP_is_local_client = True Then
                        DP_form.Refus_Création_Client()
                    Else
                        DP_form.Refus_Création()
                    End If
                    DP_form.Visible = False
            End Select
        Else


            DP_form.Visible = False
        End If
    End Sub


    Private Sub DP_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles DP_LinkLabel.LinkClicked



        If DP_LinkLabel.Text = "Statut DP inconnu" Then
            MyMsg_Box.Presentation("Officine ?", "Introduisez la carte Vitale du patient pour les accès DP", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                LECTURE_VITALE.PerformClick()
                If CurrentBenéficiaire.G101C2 = "" Then
                    Exit Sub
                End If
            Else
                If ComboBoxLECTURE_VITALE.Text <> "" Then
                    MyMsg_Box.Presentation("Officine !", "Affichage Historique local", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                End If
                'Exit Sub
            End If
        End If
        If Not DP_form Is Nothing Then
            DP_form.Text = DP_LinkLabel.Text & ". " & DP_ToolTip.GetToolTip(DP_LinkLabel)
            DP_form.ShowDialog()
        End If




    End Sub

    Private Sub Dossier_Pharmaceutique()

        'DP_form.Histo_DP_DataGridView.Rows.Clear()
        Bandeau_info_bas_show("Accès au DP en cours...")
        Try

            DP_form = New DP
            If UtiliserHistoriqueLocalToolStripMenuItem.Checked = True Then
                DP_form.Affichage_histo_local()
            End If

            If Config.DP_Activer = False Then
                DP_affichage_statut("DP désactivé")
                Exit Sub
            End If
            If DP_connection_établie = False Then
                DP_affichage_statut("Pas de connexion DP")
                Exit Sub
            End If
            DP_affichage_statut("Accès au DP en cours")



            If LePatientSopposeÀLaConsultationDeSonDPToolStripMenuItem.Checked = True Then
                DP_form.DP_ConTyp = "REFUS_CONSULTATION"
                Bandeau_info_bas_change_text("Dossier Pharmaceutique: Impression et remise de l’attestation de refus de consultation")
                DP_form.DP_drawstring = DP_form.DP_drawstring_Refus_consultations
                DP_form.PrintDialog1.Document = DP_form.PrintDocument1
impression_obligatoire:
                If DP_form.PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                    Dim attestation_ref As String = "refus_consult_" + DP_form.Identifiant_patient_function + "_" + Format(Now, "yyyyMMddHHmmss")
                    My.Computer.FileSystem.WriteAllText(Config.LocalNetwork_ServerName & "\DP\attestations\" & attestation_ref, DP_form.DP_drawstring, False)
                    DP_form.PrintDocument1.Print()
                    'DP_form.Histo_DP_DataGridView.Rows.Clear()

                    DP_form.Write_Trace_Fonc("Impression et remise de l’attestation de refus de consultation", attestation_ref, "", DP_form.Identifiant_patient_function)
                Else
                    MyMsg_Box.Presentation("Officine !", "impression obligatoire", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    GoTo impression_obligatoire
                End If
            Else
                If UtiliserHistoriqueLocalToolStripMenuItem.Checked = True Then
                    DP_form.DP_ConTyp = "CONSULTATION"
                Else
                    DP_form.DP_ConTyp = "CONSULTATION_TOUT"
                End If
            End If
            If Config.DP_is_local_client = False Then
                DP_form.Affichage_serveur(DP_form.DP_ConTyp)
            Else
                DP_form.Affichage_client(DP_form.DP_ConTyp)
            End If
            Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
        Catch ex As Exception
            Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
            DP_affichage_statut("Erreur technique")
        End Try

    End Sub

    Public Sub DP_affichage_statut(ByVal statut As String)
        DP_on_PictureBox.Visible = False
        DP_off_PictureBox.Visible = False
        DP_gris_PictureBox.Visible = False
        DP_orange_PictureBox.Visible = False
        DP_alimentation_PictureBox.Visible = False
        ÉDITERDpToolStripMenuItem.Visible = False
        CréerDPToolStripMenuItem.Visible = False
        SupprimerDPToolStripMenuItem.Visible = False

        DP_LinkLabel.Text = statut

        Dim TooltipText As String = ""
        Select Case statut
            Case "Statut DP inconnu"
                'DP_LinkLabel.LinkColor = Color.Gray
                DP_gris_PictureBox.Visible = True
                TooltipText = "Carte Vitale requise pour l’accès au DP"
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
            Case "Accès au DP en cours"
                'DP_LinkLabel.LinkColor = Color.Gray
                DP_gris_PictureBox.Visible = True
                TooltipText = "Recherche du DP en cours"
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
            Case "Pas de connexion DP"
                'DP_LinkLabel.LinkColor = Color.Red
                DP_off_PictureBox.Visible = True
                TooltipText = "Connexion au DP provisionnement indisponible. Si le problème persiste vous pouvez contacter votre centre de support."
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
            Case "Erreur technique"
                'DP_LinkLabel.LinkColor = Color.Red
                DP_off_PictureBox.Visible = True
                TooltipText = "Erreur technique survenue pendant l’accès au DP. Si le problème persiste vous pouvez contacter votre centre de support."
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
            Case "DP inexistant"
                'DP_LinkLabel.LinkColor = Color.Gray
                DP_gris_PictureBox.Visible = True
                TooltipText = "Ce patient n’a pas de DP"
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
                CréerDPToolStripMenuItem.Visible = True
                Proposition_création_DP()

            Case "DP refusé"
                'DP_LinkLabel.LinkColor = Color.Gray
                DP_gris_PictureBox.Visible = True
                TooltipText = "DP refusé " & DP_form.RefNbr.ToString & " fois. Dernier refus le " & DP_form.RefDate.ToShortDateString
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
                CréerDPToolStripMenuItem.Visible = True
                Proposition_création_DP()

            Case "DP supprimé"
                'DP_LinkLabel.LinkColor = Color.Gray
                DP_gris_PictureBox.Visible = True
                TooltipText = "DP supprimé le " & DP_form.SupprDate.ToShortDateString
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
                CréerDPToolStripMenuItem.Visible = True
                Proposition_création_DP()

            Case "DP existant"
                'DP_LinkLabel.LinkColor = Color.Green
                DP_on_PictureBox.Visible = True
                TooltipText = "Ce patient a un DP"
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
                ÉDITERDpToolStripMenuItem.Visible = True
                SupprimerDPToolStripMenuItem.Visible = True
            Case "DP incomplet"
                'DP_LinkLabel.LinkColor = Color.Green
                DP_orange_PictureBox.Visible = True
                TooltipText = "Ce patient a refusé l’inscription de certains produits dans son DP"
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
                ÉDITERDpToolStripMenuItem.Visible = True
                SupprimerDPToolStripMenuItem.Visible = True
            Case "DP en alimentation"
                'DP_LinkLabel.LinkColor = Color.Green
                DP_alimentation_PictureBox.Visible = True
                TooltipText = "Patient opposé à la consultation de son DP. Il sera néanmoins alimenté"
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
                ÉDITERDpToolStripMenuItem.Visible = True
                SupprimerDPToolStripMenuItem.Visible = True
            Case "DP désactivé"
                'DP_LinkLabel.LinkColor = Color.Red
                DP_off_PictureBox.Visible = True
                TooltipText = "Accés au DP desactivé par l'utilisateur"
                DP_ToolTip.SetToolTip(DP_LinkLabel, TooltipText)
        End Select





        Application.DoEvents()

    End Sub

    Private Sub Traces_DP_ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles Traces_DP_ToolStripMenuItem.Click
        DP_Traces_Patient.ShowDialog()
    End Sub

    Private Sub ÉDITERDpToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ÉDITERDpToolStripMenuItem.Click
        DP_form.impr_DP()

    End Sub

    Private Sub SupprimerDPToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SupprimerDPToolStripMenuItem.Click
        Dim answer As DialogResult
        Dim confirmation As New DP_Confirmation
        confirmation.label_text = "Confirmez-vous la demande de SUPPRESSION de son DP par le patient ?"
        answer = confirmation.ShowDialog
        If answer = Windows.Forms.DialogResult.Yes Then
            Me.DialogResult = Windows.Forms.DialogResult.Yes
            If Config.DP_is_local_client = True Then
                DP_form.Suppression_client()
            Else
                DP_form.Suppression()
            End If

        End If

    End Sub

    Private Sub AttestationsDPToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AttestationsDPToolStripMenuItem.Click
        DP_Attestations.ShowDialog()
    End Sub

    Private Sub CréerDPToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CréerDPToolStripMenuItem.Click
        Dim mymsgbox As New Dp_recueil_consentement
        Select Case mymsgbox.ShowDialog
            Case MsgBoxResult.Yes
                If Config.DP_is_local_client = True Then
                    DP_form.Création_Client()
                Else
                    DP_form.Création()
                End If

            Case MsgBoxResult.No
                If Config.DP_is_local_client = True Then
                    DP_form.Refus_Création_Client()
                Else
                    DP_form.Refus_Création()
                End If



        End Select
    End Sub

    Public Sub DP_Affiche_Msg()
        If Vente.Visible = True Then Exit Sub

        Dim alertes = DP_Alerte.DP_MsgTableAdapter.GetData_currentalerte(current_User.ID, Format(Now, "yyyy-MM-dd"))
        If alertes.Rows.Count > 0 Then
            For r = 0 To alertes.Rows.Count - 1
                If alertes.Item(r).MsgTyp = "INFORMATION" Then
                    MyMsg_Box.Presentation("Officine ?", "Nouveau message d'information DP." & vbCrLf & "Voulez vous lire ce message?", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog() = MsgBoxResult.Yes Then
                        'Dim DP_Alerte_ As New DP_Alerte
                        Dim DP_Alerte_ As New DP_Alerte2
                        DP_Alerte_.affichage_Msg(alertes.Item(r).MsgRef)
                        DP_Alerte_.ShowDialog()
                    End If
                Else
                    'Dim DP_Alerte_ As New DP_Alerte
                    Dim DP_Alerte_ As New DP_Alerte2
                    DP_Alerte_.affichage_Msg(alertes.Item(r).MsgRef)
                    DP_Alerte_.ShowDialog()
                End If

            Next
        End If
    End Sub

    Private Sub HistoriqueMessageAlerteToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HistoriqueMessageAlerteToolStripMenuItem.Click
        DP_Alerte_Historique.ShowDialog()
    End Sub

    Private Function DP_incitation() As Boolean
        'incitation DP     "Pincitation_cv" 



        If Config.DP_Activer = False Or Config.DP_Inciter = False Or DP_Carte_Vitale_lue = True Then
            Return True
        End If


        If Config.DP_Activer = True And Config.DP_Inciter = True And DP_Carte_Vitale_lue = False Then 'And produit_pour_inciter = True Then
            MyMsg_Box.Presentation("Officine ?", "Insérez la carte Vitale pour utiliser et alimenter le DP ?", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                LECTURE_VITALE.PerformClick()
                Return False
            End If
        End If

        Return True

    End Function
#End Region

#Region "HONO DISPENSATION"





    Private Sub Vente_RowEnter(sender As Object, e As DataGridViewCellEventArgs) Handles Vente.RowEnter

     

        Try



            Select Case Vente.Item(VenteType.Index, e.RowIndex).Value
                Case "assurance"
                    'ventetype_index_defaut = 0
                    ventetype_defaut = "assurance"
                Case "Vente Directe"
                    'ventetype_index_defaut = 1
                    ventetype_defaut = "Vente Directe"
                Case "ALD"
                    'ventetype_index_defaut = 2
                    ventetype_defaut = "ALD"
                Case "PREV"
                    'ventetype_index_defaut = 3
                    ventetype_defaut = "PREV"
                Case "SP"
                    'ventetype_index_defaut = 3
                    ventetype_defaut = "SP"
            End Select

        Catch ex As Exception

        End Try

        If Vente.CurrentCell Is Nothing Then
            Exit Sub
        End If
        If Config.Hono_Disp_Activer = False Then
            Exit Sub
        End If

        If Config.Hono_Disp_Activer = True And RetrocessionToolStripMenuItem.Checked = False Then
            If e.RowIndex > 0 Then
                'If UCase(Vente.Item(VenteType.Index, e.RowIndex - 1).Value) <> "VENTE DIRECTE" Then
                Select Case Vente.Item(VenteCodeActe.Index, e.RowIndex - 1).Value

                    Case "PH1"
                        Dim CIP As String = ""
                        Dim EAN13 As String = ""
                        If Vente.Item(VenteCIP.Index, e.RowIndex - 1).Value IsNot DBNull.Value Then
                            CIP = Vente.Item(VenteCIP.Index, e.RowIndex - 1).Value.ToString
                        End If
                        If Vente.Item(VenteEAN13.Index, e.RowIndex - 1).Value IsNot DBNull.Value Then
                            EAN13 = Vente.Item(VenteEAN13.Index, e.RowIndex - 1).Value.ToString
                        End If
                        Dim conditionnement_trimestriel As Boolean
                        If EAN13 <> "" Then
                            conditionnement_trimestriel = Me.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(EAN13).Item(0).conditionnement_trimestriel
                        ElseIf CIP <> "" Then
                            conditionnement_trimestriel = Me.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(CIP).Item(0).conditionnement_trimestriel
                        End If

                        If CIP <> "" Or EAN13 <> "" Then
                            If conditionnement_trimestriel = False Then
                                Vente.Item(Vente_produits.Index, e.RowIndex).Value = "Honoraire de Dispensation niveau 1"
                                Vente.Item(VenteCodeActe.Index, e.RowIndex).Value = "HD1"
                                If Vente.Item(VentePrix.Index, e.RowIndex - 1).Value <> 0 Then
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "1,02"
                                Else
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "0"
                                End If
                                Vente(VenteTFRprix.Index, e.RowIndex).Value = "1,02"

                            Else
                                Vente.Item(Vente_produits.Index, e.RowIndex).Value = "Honoraire de Dispensation Grand conditionnement niveau 1"
                                Vente.Item(VenteCodeActe.Index, e.RowIndex).Value = "HG1"
                                If Vente.Item(VentePrix.Index, e.RowIndex - 1).Value <> 0 Then
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "2,76"
                                Else
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "0"
                                End If
                                Vente(VenteTFRprix.Index, e.RowIndex).Value = "2,76"

                            End If
                            Vente(VenteEAN13.Index, e.RowIndex).Value = ""
                            Vente(VenteCIP.Index, e.RowIndex).Value = ""
                            Vente(VenteTVA.Index, e.RowIndex).Value = "2,1"
                            Vente(Vente_G1610C8.Index, e.RowIndex).Value = "100"
                            Vente(Vente_prix_non_remisé.Index, e.RowIndex).Value = Vente.Item(VentePrix.Index, e.RowIndex).Value
                            Vente(VenteStock.Index, e.RowIndex).Value = "0"
                            Vente(Vente_Stock_Suivi.Index, e.RowIndex).Value = False

                            SendKeys.Send("{HOME}")
                            For r = 1 To VenteQuantité.Index
                                SendKeys.Send("{RIGHT}")
                            Next
                            capslock_off()
                            Vente.BeginEdit(True)
                            If tab_Lignes_Vente(e.RowIndex - 1).deconditionement = True Then
                                SendKeys.Send(tab_Lignes_Vente(e.RowIndex - 1).deconditionement_NmbreBoites.ToString)
                            Else
                                SendKeys.Send((Vente.Item(VenteQuantité.Index, e.RowIndex - 1).Value).ToString)
                            End If
                            SendKeys.Send("{ENTER}")
                            SendKeys.Send("{HOME}")
                            SendKeys.Send("{RIGHT}")
                        End If


                    Case "PH2"
                        Dim CIP As String = ""
                        Dim EAN13 As String = ""
                        If Vente.Item(VenteCIP.Index, e.RowIndex - 1).Value IsNot DBNull.Value Then
                            CIP = Vente.Item(VenteCIP.Index, e.RowIndex - 1).Value.ToString
                        End If
                        If Vente.Item(VenteEAN13.Index, e.RowIndex - 1).Value IsNot DBNull.Value Then
                            EAN13 = Vente.Item(VenteEAN13.Index, e.RowIndex - 1).Value.ToString
                        End If
                        Dim conditionnement_trimestriel As Boolean
                        If EAN13 <> "" Then
                            conditionnement_trimestriel = Me.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(EAN13).Item(0).conditionnement_trimestriel
                        ElseIf CIP <> "" Then
                            conditionnement_trimestriel = Me.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(CIP).Item(0).conditionnement_trimestriel
                        End If

                        If CIP <> "" Or EAN13 <> "" Then
                            If conditionnement_trimestriel = False Then
                                Vente.Item(Vente_produits.Index, e.RowIndex).Value = "Honoraire de Dispensation niveau 2"
                                Vente.Item(VenteCodeActe.Index, e.RowIndex).Value = "HD2"
                                If Vente.Item(VentePrix.Index, e.RowIndex - 1).Value <> 0 Then
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "1,02"
                                Else
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "0"
                                End If
                                Vente(VenteTFRprix.Index, e.RowIndex).Value = "1,02"

                            Else
                                Vente.Item(Vente_produits.Index, e.RowIndex).Value = "Honoraire de Dispensation Grand conditionnement niveau 2"
                                Vente.Item(VenteCodeActe.Index, e.RowIndex).Value = "HG2"
                                If Vente.Item(VentePrix.Index, e.RowIndex - 1).Value <> 0 Then
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "2,76"
                                Else
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "0"
                                End If
                                Vente(VenteTFRprix.Index, e.RowIndex).Value = "2,76"
                            End If
                            Vente(VenteEAN13.Index, e.RowIndex).Value = ""
                            Vente(VenteCIP.Index, e.RowIndex).Value = ""
                            Vente(VenteTVA.Index, e.RowIndex).Value = "2,1"
                            Vente(Vente_G1610C8.Index, e.RowIndex).Value = "100"
                            Vente(Vente_prix_non_remisé.Index, e.RowIndex).Value = Vente.Item(VentePrix.Index, e.RowIndex).Value
                            Vente(VenteStock.Index, e.RowIndex).Value = "0"
                            Vente(Vente_Stock_Suivi.Index, e.RowIndex).Value = False

                            SendKeys.Send("{HOME}")
                            For r = 1 To VenteQuantité.Index
                                SendKeys.Send("{RIGHT}")
                            Next
                            capslock_off()
                            Vente.BeginEdit(True)
                            If tab_Lignes_Vente(e.RowIndex - 1).deconditionement = True Then
                                SendKeys.Send(tab_Lignes_Vente(e.RowIndex - 1).deconditionement_NmbreBoites.ToString)
                            Else
                                SendKeys.Send((Vente.Item(VenteQuantité.Index, e.RowIndex - 1).Value).ToString)
                            End If
                            SendKeys.Send("{ENTER}")
                            SendKeys.Send("{HOME}")
                            SendKeys.Send("{RIGHT}")
                        End If

                    Case "PH4", "MHU"
                        Dim CIP As String = ""
                        Dim EAN13 As String = ""
                        If Vente.Item(VenteCIP.Index, e.RowIndex - 1).Value IsNot DBNull.Value Then
                            CIP = Vente.Item(VenteCIP.Index, e.RowIndex - 1).Value.ToString
                        End If
                        If Vente.Item(VenteEAN13.Index, e.RowIndex - 1).Value IsNot DBNull.Value Then
                            EAN13 = Vente.Item(VenteEAN13.Index, e.RowIndex - 1).Value.ToString
                        End If
                        Dim conditionnement_trimestriel As Boolean
                        If EAN13 <> "" Then
                            conditionnement_trimestriel = Me.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(EAN13).Item(0).conditionnement_trimestriel
                        ElseIf CIP <> "" Then
                            conditionnement_trimestriel = Me.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(CIP).Item(0).conditionnement_trimestriel
                        End If

                        If CIP <> "" Or EAN13 <> "" Then
                            If conditionnement_trimestriel = False Then
                                Vente.Item(Vente_produits.Index, e.RowIndex).Value = "Honoraire de Dispensation niveau 4"
                                Vente.Item(VenteCodeActe.Index, e.RowIndex).Value = "HD4"
                                If Vente.Item(VentePrix.Index, e.RowIndex - 1).Value <> 0 Then
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "1,02"
                                Else
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "0"
                                End If
                                Vente(VenteTFRprix.Index, e.RowIndex).Value = "1,02"

                            Else
                                Vente.Item(Vente_produits.Index, e.RowIndex).Value = "Honoraire de Dispensation Grand conditionnement niveau 4"
                                Vente.Item(VenteCodeActe.Index, e.RowIndex).Value = "HG4"
                                If Vente.Item(VentePrix.Index, e.RowIndex - 1).Value <> 0 Then
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "2,76"
                                Else
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "0"
                                End If
                                Vente(VenteTFRprix.Index, e.RowIndex).Value = "2,76"

                            End If
                            Vente(VenteEAN13.Index, e.RowIndex).Value = ""
                            Vente(VenteCIP.Index, e.RowIndex).Value = ""
                            Vente(VenteTVA.Index, e.RowIndex).Value = "2,1"
                            Vente(Vente_G1610C8.Index, e.RowIndex).Value = "100"
                            Vente(Vente_prix_non_remisé.Index, e.RowIndex).Value = Vente.Item(VentePrix.Index, e.RowIndex).Value
                            Vente(VenteStock.Index, e.RowIndex).Value = "0"
                            Vente(Vente_Stock_Suivi.Index, e.RowIndex).Value = False

                            SendKeys.Send("{HOME}")
                            For r = 1 To VenteQuantité.Index
                                SendKeys.Send("{RIGHT}")
                            Next
                            capslock_off()
                            Vente.BeginEdit(True)
                            If tab_Lignes_Vente(e.RowIndex - 1).deconditionement = True Then
                                SendKeys.Send(tab_Lignes_Vente(e.RowIndex - 1).deconditionement_NmbreBoites.ToString)
                            Else
                                SendKeys.Send((Vente.Item(VenteQuantité.Index, e.RowIndex - 1).Value).ToString)
                            End If
                            SendKeys.Send("{ENTER}")
                            SendKeys.Send("{HOME}")
                            SendKeys.Send("{RIGHT}")
                        End If

                    Case "PH7"
                        Dim CIP As String = ""
                        Dim EAN13 As String = ""
                        If Vente.Item(VenteCIP.Index, e.RowIndex - 1).Value IsNot DBNull.Value Then
                            CIP = Vente.Item(VenteCIP.Index, e.RowIndex - 1).Value.ToString
                        End If
                        If Vente.Item(VenteEAN13.Index, e.RowIndex - 1).Value IsNot DBNull.Value Then
                            EAN13 = Vente.Item(VenteEAN13.Index, e.RowIndex - 1).Value.ToString
                        End If
                        Dim conditionnement_trimestriel As Boolean
                        If EAN13 <> "" Then
                            conditionnement_trimestriel = Me.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(EAN13).Item(0).conditionnement_trimestriel
                        ElseIf CIP <> "" Then
                            conditionnement_trimestriel = Me.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(CIP).Item(0).conditionnement_trimestriel
                        End If

                        If CIP <> "" Or EAN13 <> "" Then
                            If conditionnement_trimestriel = False Then
                                Vente.Item(Vente_produits.Index, e.RowIndex).Value = "Honoraire de Dispensation niveau 7"
                                Vente.Item(VenteCodeActe.Index, e.RowIndex).Value = "HD7"
                                If Vente.Item(VentePrix.Index, e.RowIndex - 1).Value <> 0 Then
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "1,02"
                                Else
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "0"
                                End If
                                Vente(VenteTFRprix.Index, e.RowIndex).Value = "1,02"

                            Else
                                Vente.Item(Vente_produits.Index, e.RowIndex).Value = "Honoraire de Dispensation Grand conditionnement niveau 7"
                                Vente.Item(VenteCodeActe.Index, e.RowIndex).Value = "HG7"
                                If Vente.Item(VentePrix.Index, e.RowIndex - 1).Value <> 0 Then
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "2,76"
                                Else
                                    Vente.Item(VentePrix.Index, e.RowIndex).Value = "0"
                                End If
                                Vente(VenteTFRprix.Index, e.RowIndex).Value = "2,76"
                            End If
                            Vente(VenteEAN13.Index, e.RowIndex).Value = ""
                            Vente(VenteCIP.Index, e.RowIndex).Value = ""
                            Vente(VenteTVA.Index, e.RowIndex).Value = "2,1"
                            Vente(Vente_G1610C8.Index, e.RowIndex).Value = "100"
                            Vente(Vente_prix_non_remisé.Index, e.RowIndex).Value = Vente.Item(VentePrix.Index, e.RowIndex).Value
                            Vente(VenteStock.Index, e.RowIndex).Value = "0"
                            Vente(Vente_Stock_Suivi.Index, e.RowIndex).Value = False

                            SendKeys.Send("{HOME}")
                            For r = 1 To VenteQuantité.Index
                                SendKeys.Send("{RIGHT}")
                            Next
                            capslock_off()
                            Vente.BeginEdit(True)

                            If tab_Lignes_Vente(e.RowIndex - 1).deconditionement = True Then
                                SendKeys.Send(tab_Lignes_Vente(e.RowIndex - 1).deconditionement_NmbreBoites.ToString)
                            Else
                                SendKeys.Send((Vente.Item(VenteQuantité.Index, e.RowIndex - 1).Value).ToString)
                            End If
                            SendKeys.Send("{ENTER}")
                            SendKeys.Send("{HOME}")
                            SendKeys.Send("{RIGHT}")
                        End If



                End Select
                'End If
            End If
        End If


    End Sub
    Public Sub capslock_off()
        If My.Computer.Keyboard.CapsLock Then
            ' Toggle CapsLock
            ' Simulate the Key Press
            keybd_event(VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0)
            ' Simulate the Key Release
            keybd_event(VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
        End If
    End Sub

    Private Declare Sub keybd_event Lib "user32" ( _
       ByVal bVk As Byte, _
       ByVal bScan As Byte, _
        ByVal dwFlags As Integer, _
       ByVal dwExtraInfo As Integer _
  )

    Private Const VK_CAPITAL As Integer = &H14
    Private Const KEYEVENTF_EXTENDEDKEY As Integer = &H1
    Private Const KEYEVENTF_KEYUP As Integer = &H2

    Private Sub Button1_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs _
  )

    End Sub




    Private Function Hono_Disp_Controle() As Boolean
        For r = 0 To Vente.RowCount - 1
            If Hono_Disp_Codes_list.Contains(Vente.Item(VenteCodeActe.Index, r).Value.ToString) Then

                If r = 0 Then
                    MyMsg_Box.Presentation("Officine !", "Erreur d'attribution des honoraires de dispensation." + Chr(10) + "ligne " + (r + 1).ToString, False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Return False
                End If

                'If UCase(Vente.Item(VenteType.Index, r - 1).Value.ToString) = "VENTE DIRECTE" Or UCase(Vente.Item(VenteType.Index, r).Value.ToString) = "VENTE DIRECTE" Then
                '    Return False
                'End If

                If (Vente.Item(VenteType.Index, r - 1).Value.ToString) <> (Vente.Item(VenteType.Index, r).Value.ToString) Then
                    MyMsg_Box.Presentation("Officine !", "Erreur d'attribution des honoraires de dispensation." + Chr(10) + "ligne " + (r + 1).ToString, False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Return False
                End If

                Select Case Vente.Item(VenteCodeActe.Index, r).Value.ToString
                    Case "HD1", "HG1"
                        If tab_Lignes_Vente(r - 1).deconditionement = False Then
                            If Vente.Item(VenteCodeActe.Index, r - 1).Value.ToString <> "PH1" Or _
                                (Vente.Item(VenteCIP.Index, r - 1).Value.ToString = "" And Vente.Item(VenteEAN13.Index, r - 1).Value.ToString = "") _
                                Or (Vente.Item(VenteQuantité.Index, r - 1).Value <> Vente.Item(VenteQuantité.Index, r).Value) Then
                                MyMsg_Box.Presentation("Officine !", "Erreur d'attribution des honoraires de dispensation." + Chr(10) + "ligne " + (r + 1).ToString, False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                                Return False
                            End If
                        End If
                    Case "HD2", "HG2"
                        If tab_Lignes_Vente(r - 1).deconditionement = False Then
                            If Vente.Item(VenteCodeActe.Index, r - 1).Value.ToString <> "PH2" Or _
                                (Vente.Item(VenteCIP.Index, r - 1).Value.ToString = "" And Vente.Item(VenteEAN13.Index, r - 1).Value.ToString = "") _
                                Or (Vente.Item(VenteQuantité.Index, r - 1).Value <> Vente.Item(VenteQuantité.Index, r).Value) Then
                                MyMsg_Box.Presentation("Officine !", "Erreur d'attribution des honoraires de dispensation." + Chr(10) + "ligne " + (r + 1).ToString, False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                                Return False
                            End If
                        End If
                    Case "HD4", "HG4"
                        If tab_Lignes_Vente(r - 1).deconditionement = False Then
                            If (Vente.Item(VenteCodeActe.Index, r - 1).Value.ToString <> "PH4" And Vente.Item(VenteCodeActe.Index, r - 1).Value.ToString <> "MHU") Or _
                                (Vente.Item(VenteCIP.Index, r - 1).Value.ToString = "" And Vente.Item(VenteEAN13.Index, r - 1).Value.ToString = "") _
                                Or (Vente.Item(VenteQuantité.Index, r - 1).Value <> Vente.Item(VenteQuantité.Index, r).Value) Then
                                MyMsg_Box.Presentation("Officine !", "Erreur d'attribution des honoraires de dispensation." + Chr(10) + "ligne " + (r + 1).ToString, False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                                Return False
                            End If
                        End If
                    Case "HD7", "HG7"
                        If tab_Lignes_Vente(r - 1).deconditionement = False Then
                            If Vente.Item(VenteCodeActe.Index, r - 1).Value.ToString <> "PH7" Or _
                                (Vente.Item(VenteCIP.Index, r - 1).Value.ToString = "" And Vente.Item(VenteEAN13.Index, r - 1).Value.ToString = "") _
                                Or (Vente.Item(VenteQuantité.Index, r - 1).Value <> Vente.Item(VenteQuantité.Index, r).Value) Then
                                MyMsg_Box.Presentation("Officine !", "Erreur d'attribution des honoraires de dispensation." + Chr(10) + "ligne " + (r + 1).ToString, False, "", False, "", True, "OK")
                                MyMsg_Box.ShowDialog()
                                Return False
                            End If
                        End If
                End Select
            End If
        Next
        Return True
    End Function

    Public Function Hono_Disp_Complexe_is_in_facture() As Boolean
        Dim cip_honoraires_simples As New List(Of String)
        For r = 0 To Vente.RowCount - 1
            If Hono_Disp_Codes_list.Contains(Vente.Item(VenteCodeActe.Index, r).Value.ToString) And UCase(Vente.Item(VenteType.Index, r).Value) <> "VENTE DIRECTE" Then
                If Not cip_honoraires_simples.Contains(Vente.Item(VenteEAN13.Index, r - 1).Value.ToString) Then
                    cip_honoraires_simples.Add(Vente.Item(VenteEAN13.Index, r - 1).Value.ToString)
                End If
            End If
        Next
        If cip_honoraires_simples.Count < 5 Then
            Return False
        Else
            Return True
        End If
    End Function

    Public Function groupe1610_1820_hono_disp_complexe(ByVal NumeroSession As UInt16, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, ByRef Total_FSE As Double) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If


        'Dim cip_honoraires_simples As New List(Of String)
        'For r = 0 To Vente.RowCount - 1
        '    If Hono_Disp_Codes_list.Contains(Vente.Item(VenteCodeActe.Index, r).Value.ToString) Then
        '        If Not cip_honoraires_simples.Contains(Vente.Item(VenteEAN13.Index, r - 1).Value.ToString) Then
        '            cip_honoraires_simples.Add(Vente.Item(VenteEAN13.Index, r - 1).Value.ToString)
        '        End If
        '    End If
        'Next
        'If cip_honoraires_simples.Count < 5 Then
        '    Hono_Disp_Complexe_is_in_facture = False
        '    Return True
        'End If
        If Hono_Disp_Complexe_is_in_facture() = False Then
            Return True
        End If

        Nombre_de_Prestations = Nombre_de_Prestations + 1

        SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

        If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
            ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
        End If


        'Champ1
        Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

        'Champ2 Date d’exécution
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(DateExecution.Value, "yyyyMMdd") + "0000"

        'Champ3 Lieu d’exécution 0 pharmacie | 1 domicile patient
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

        'Champ 4 Code prestation
        SGD_AjouterChamp_Tracé(NumeroSession, "HC", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = "HC"

        'Champ 5 CCAM : champ non renseigné
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

        'Champ6 Montant des honoraires
        Dim MontantHonoraires As Integer = 31
        Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        Total_FSE = Total_FSE + MontantHonoraires
        SGD_AjouterChamp_Tracé(NumeroSession, MontantHonoraires, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = MontantHonoraires.ToString


        'Champ7 Qualificatif de la dépense
        If UCase(NatureAssurance_Button.Text) = "SMG" And CurrentFactureVitale.G1515C1 <> "" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "L", Visu_API, FichierTrace, Nombre_de_Prestations)
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
        End If

        'Champ8 Coefficient
        SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"

        'Champ9 Quantité
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"

        'Champ10 Dénombrement
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = "1"

        'Champ11 Prix unitaire

        Dim PrixUnitaire As String = "31"
        SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitaire, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = PrixUnitaire

        'champ 12 Base de remboursement
        Dim BaseRemboursement As Integer = 31
        SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = BaseRemboursement


        'champ13 Taux applicable à la prestation
        Dim tauxamo As Integer
        If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "N" Or CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C7 = "G" Then
            tauxamo = 0
        Else
            Select Case NatureAssurance_Button.Text
                Case "MATERNITE", "ACCIDENT DU TRAVAIL", "PREVENTION", "SMG"
                    tauxamo = 100
                Case Else
                    If Val(Renouvellement_TextBox.Text) = 0 Or CurrentBenéficiaire.G101C10 = "04" Then
                        tauxamo = CalculTauxAMO("HC", CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                    Else
                        If CalculTauxAMO("HC", CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO())) < CalculTauxAMO("HC", CurrentBenéficiaire.G101C10, CodeSituation(DateExecution.Value)) Then
                            CurrentFactureVitale.Renouvellement_Date_Droits_AMO_est_date_éxécution = True
                            tauxamo = CalculTauxAMO("HC", CurrentBenéficiaire.G101C10, CodeSituation(DateExecution.Value))
                        Else
                            CurrentFactureVitale.Renouvellement_Date_Droits_AMO_est_date_éxécution = False
                            tauxamo = CalculTauxAMO("HC", CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO()))
                        End If
                    End If

            End Select
        End If
        SGD_AjouterChamp_Tracé(NumeroSession, tauxamo, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = tauxamo

        'champ 14 Montant remboursable par l’AMO
        Dim MontantremboursableAMO As Integer
        MontantremboursableAMO = Arrondis(Val(BaseRemboursement) * Val(tauxamo) / 100)
        For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
            If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                MontantremboursableAMO = CurrentFactureVitale.Forçage_Part_AMO(i).Montant
                Exit For
            End If
        Next
        Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        'If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
        '    MontantremboursableAMO = 0
        'End If

        SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMO, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = MontantremboursableAMO

        'champ 15
        Dim MontantremboursableAMC As Integer = 0
        Dim tauxAMC As Integer = 0
        If CheckBox_Facturation_AMC.Checked = True Or CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            tauxAMC = CalculTauxAMC("HC", CurrentBenéficiaire.AMC_TypeContrat)
            MontantremboursableAMC = Arrondis((BaseRemboursement * tauxAMC / 100) - MontantremboursableAMO)
            If MontantremboursableAMC > 0 Then
                If MontantremboursableAMC > BaseRemboursement - MontantremboursableAMO Then
                    MontantremboursableAMC = BaseRemboursement - MontantremboursableAMO
                End If
            Else
                MontantremboursableAMC = 0
            End If
            '-------------------------
            'PEC
            If MontantGlobalPriseEnchargeToolStripTextBox.Text <> "" Then
                MontantremboursableAMC = MontantHonoraires - MontantremboursableAMO
                If MontantremboursableAMC > CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global Then
                    MontantremboursableAMC = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global
                    CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global = 0
                Else
                    CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global - MontantremboursableAMC
                End If
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G2010C2 = "1"
            Else
                For i = 0 To CurrentFactureVitale.PEC.Montants_Actes.Length - 1
                    If CurrentFactureVitale.PEC.Montants_Actes(i).Num_Acte = Nombre_de_Prestations Then
                        MontantremboursableAMC = CurrentFactureVitale.PEC.Montants_Actes(i).Montant.ToString
                        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G2010C2 = "1"
                    End If
                Next
            End If
            '-------------------------
            SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMC, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = MontantremboursableAMC
            Total_Théorique_Remboursable_par_AMC = Total_Théorique_Remboursable_par_AMC + MontantremboursableAMC
            Total_Remboursable_par_AMC = Total_Remboursable_par_AMC + MontantremboursableAMC
        Else
            'SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations) 'en réponse à compte rendu CNDA: La base de remboursement théorique de l'acte HC n'est pas renseignée.
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = 0
        End If


        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = "0"

        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 3

        If MontantHonoraires < MontantremboursableAMO + CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 Then
            MyMsg_Box.Presentation("Officine !", "Montant du remboursement (AMO+AMC) > Montant des Honoraires" + Chr(10) + "Tarification interrompue", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If

        If NatureAssurance_Button.Text = "MALADIE" Then

            SGD_AjouterGroupe_Tracé(NumeroSession, 1820, Visu_API, FichierTrace)

            'champ 1
            SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)

            'champ 2
            Dim CodeJustifExo As String = "0"
            'If CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = "PHN" Then 'FI(fiche information) 195
            '    CodeJustifExo = "0"

            'ElseIf VenteType = "PREV" Then
            If TauxSNCF = True Then
                CodeJustifExo = "6"

            Else
                Dim Code_Situation As String
                If Val(Renouvellement_TextBox.Text) <> 0 And CurrentBenéficiaire.G101C10 <> "04" And CurrentFactureVitale.Renouvellement_Date_Droits_AMO_est_date_éxécution = True Then
                    Code_Situation = CodeSituation(DateExecution.Value)
                Else
                    Code_Situation = CodeSituation(Date_Droits_AMO())
                End If
                Select Case Code_Situation
                    'pas d’exonération
                    Case "0100", "0105", "0108", "0200", "0205", "0225", "0300", "0301", "0400", "0401", "0402", "0403", "0408", "0411", "0414", "0500", "1000", "1600", "9000", "9020", "9021", "9022", "9023", "9024"
                        CodeJustifExo = "0"
                        'assuré ou bénéficiaire exonéré
                    Case "0101", "0102", "0103", "0106", "0107", "0109", "0110", "0201", "0202", "0203", "0206", "0207", "0302", "0303", "0404", "0405", "0406", "0407", "0412", "0413", "0415", "0501", "0502", "0503", "1001", "1002", "1003", "1601", "1602", "1603", "9001", "9002", "9003"
                        CodeJustifExo = "5"
                        'exonération régimes spéciaux
                    Case "0700"
                        CodeJustifExo = "6"
                        'FSV
                    Case "0104", "0204", "0304", "0409", "0410", "0504", "1004", "9004"
                        CodeJustifExo = "9"
                    Case "0226", "0227"
                        MyMsg_Box.Presentation("Officine ?", "En rapport avec un accident?", True, "OUI", True, "NON", False, "")
                        If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                            CodeJustifExo = "0"
                        Else
                            CodeJustifExo = "5"
                        End If
                End Select
            End If


            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).G1820C2 = CodeJustifExo
            SGD_AjouterChamp_Tracé(NumeroSession, CodeJustifExo, Visu_API, FichierTrace)
        End If
        'Hono_Disp_Complexe_is_in_facture = True
        Return True
    End Function

    Public Function Hono_Disp_Rembousable_is_in_facture() As Boolean 'HDR
        For r = 0 To Vente.RowCount - 1
            If UCase(Vente.Item(VenteType.Index, r).Value) <> "VENTE DIRECTE" _
                And Mid(Vente.Item(VenteCodeActe.Index, r).Value.ToString, 1, 2) = "PH" _
                And IsNumeric(Mid(Vente.Item(VenteCodeActe.Index, r).Value.ToString, 3, 1)) Then
                Return True
            End If
        Next
        Return False
    End Function

    Public Function groupe1610_1820_hono_disp_Globaux(ByVal NumeroSession As UInt16, ByRef Nombre_de_Prestations As Integer, ByRef Total_des_montants_facturés As Double, ByRef Total_remboursable_par_l_AMO As Double, ByRef Total_Théorique_Remboursable_par_AMC As Double, ByRef Total_Remboursable_par_AMC As Double, ByRef Total_FSE As Double, ByVal CodeActe As String) As Boolean

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Select Case CodeActe
            Case "HDR"
                If Hono_Disp_Rembousable_is_in_facture() = False Then
                    Return True
                End If
            Case "HDA"
                If Hono_Disp_Age_is_in_facture() = False Then
                    Return True
                End If
            Case "HDE"
                If Hono_Disp_Médicament_Spécifique_is_in_facture() = False Then
                    Return True
                End If
            Case Else
                Return False
        End Select


        Nombre_de_Prestations = Nombre_de_Prestations + 1

        SGD_AjouterGroupe_Tracé(NumeroSession, 1610, Visu_API, FichierTrace)

        If CurrentFactureVitale.TabLigneFacture.Length - 1 < Nombre_de_Prestations Then
            ReDim Preserve CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations)
        End If


        'Champ1
        Dim NuméroPrestation As String = Nombre_de_Prestations.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C1 = NuméroPrestation

        'Champ2 Date d’exécution
        SGD_AjouterChamp_Tracé(NumeroSession, Format(DateExecution.Value, "yyyyMMdd") + "0000", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C2 = Format(DateExecution.Value, "yyyyMMdd") + "0000"

        'Champ3 Lieu d’exécution 0 pharmacie | 1 domicile patient
        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C3 = "0"

        'Champ 4 Code prestation
        SGD_AjouterChamp_Tracé(NumeroSession, CodeActe, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C4 = CodeActe

        'Champ 5 CCAM : champ non renseigné
        SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C5 = ""

        'Champ6 Montant des honoraires
        Dim MontantHonoraires As Integer = 0
        Select Case CodeActe
            Case "HDR"
                MontantHonoraires = Config.Hono_Disp_HDR_tarif
            Case "HDA"
                MontantHonoraires = Config.Hono_Disp_HDA_tarif
            Case "HDE"
                MontantHonoraires = Config.Hono_Disp_HDE_tarif
        End Select
        Total_des_montants_facturés = Total_des_montants_facturés + MontantHonoraires
        Total_FSE = Total_FSE + MontantHonoraires
        SGD_AjouterChamp_Tracé(NumeroSession, MontantHonoraires, Visu_API, FichierTrace)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C6 = MontantHonoraires.ToString


        'Champ7 Qualificatif de la dépense
        If UCase(NatureAssurance_Button.Text) = "SMG" And CurrentFactureVitale.G1515C1 <> "" Then
            SGD_AjouterChamp_Tracé(NumeroSession, "L", Visu_API, FichierTrace, Nombre_de_Prestations)
        Else
            SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
        End If

        'Champ8 Coefficient
        SGD_AjouterChamp_Tracé(NumeroSession, "100", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C8 = "100"

        'Champ9 Quantité
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C9 = "1"

        'Champ10 Dénombrement
        SGD_AjouterChamp_Tracé(NumeroSession, "1", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C10 = "1"

        'Champ11 Prix unitaire

        Dim PrixUnitaire As String = MontantHonoraires.ToString
        SGD_AjouterChamp_Tracé(NumeroSession, PrixUnitaire, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C11 = PrixUnitaire

        'champ 12 Base de remboursement
        Dim BaseRemboursement As Integer = MontantHonoraires
        SGD_AjouterChamp_Tracé(NumeroSession, BaseRemboursement, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C12 = BaseRemboursement



        ''''''

        'champ13 Taux applicable à la prestation
        'Dim tauxamo As Integer
        'If CurrentBenéficiaire.G101C10 = "10" Then
        '    tauxamo = 85
        'Else
        '    tauxamo = 70
        'End If
        'Select Case NatureAssurance_Button.Text
        '    Case "MATERNITE", "ACCIDENT DU TRAVAIL", "PREVENTION", "SMG"
        '        tauxamo = 100
        'End Select
        ' ''''''
        'If tauxamo <> 100 Then
        '    For r = 0 To CurrentFactureVitale.TabLigneFacture.Length - 1
        '        If Mid(CurrentFactureVitale.TabLigneFacture(r).G1610C4, 1, 2) = "PH" And IsNumeric(Mid(CurrentFactureVitale.TabLigneFacture(r).G1610C4, 3, 1)) Then
        '            tauxamo = Math.Max(tauxamo, CalculTauxAMO(CurrentFactureVitale.TabLigneFacture(r).G1610C4, CurrentBenéficiaire.G101C10, CodeSituation(Date_Droits_AMO())))
        '            If tauxamo = 100 Then Exit For
        '        End If
        '    Next
        'End If

        If CurrentBenéficiaire.G101C10 = "10" Then
            HonoDispGlobaux_TauxAMO = Math.Max(85, HonoDispGlobaux_TauxAMO)
        Else
            HonoDispGlobaux_TauxAMO = Math.Max(65, HonoDispGlobaux_TauxAMO)
        End If

        SGD_AjouterChamp_Tracé(NumeroSession, HonoDispGlobaux_TauxAMO, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C13 = HonoDispGlobaux_TauxAMO

        'champ 14 Montant remboursable par l’AMO
        Dim MontantremboursableAMO As Integer
        MontantremboursableAMO = Arrondis(Val(BaseRemboursement) * Val(HonoDispGlobaux_TauxAMO) / 100)
        For i = 0 To CurrentFactureVitale.Forçage_Part_AMO.Length - 1
            If CurrentFactureVitale.Forçage_Part_AMO(i).Num_Acte = Nombre_de_Prestations Then
                MontantremboursableAMO = CurrentFactureVitale.Forçage_Part_AMO(i).Montant
                Exit For
            End If
        Next
        Total_remboursable_par_l_AMO = Total_remboursable_par_l_AMO + MontantremboursableAMO
        'If CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
        '    MontantremboursableAMO = 0
        'End If

        SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMO, Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C14 = MontantremboursableAMO

        'champ 15
        Dim MontantremboursableAMC As Integer = 0
        'Dim tauxAMC As Integer = 0
        If CheckBox_Facturation_AMC.Checked = True Or CurrentFactureVitale.Mode_Gestion = "AME_Base" Or CurrentFactureVitale.Mode_Gestion = "AME_Compl" Then
            'For r = 0 To CurrentFactureVitale.TabLigneFacture.Length - 1
            '    If Mid(CurrentFactureVitale.TabLigneFacture(r).G1610C4, 1, 2) = "PH" And IsNumeric(Mid(CurrentFactureVitale.TabLigneFacture(r).G1610C4, 3, 1)) Then
            '        tauxAMC = Math.Max(tauxAMC, CalculTauxAMC(CurrentFactureVitale.TabLigneFacture(r).G1610C4, CurrentBenéficiaire.AMC_TypeContrat))
            '        If tauxAMC = 100 Then Exit For
            '    End If
            'Next
            MontantremboursableAMC = Arrondis((BaseRemboursement * HonoDispGlobaux_TauxAMC / 100) - MontantremboursableAMO)
            If MontantremboursableAMC > 0 Then
                If MontantremboursableAMC > BaseRemboursement - MontantremboursableAMO Then
                    MontantremboursableAMC = BaseRemboursement - MontantremboursableAMO
                End If
            Else
                MontantremboursableAMC = 0
            End If
            '-------------------------
            'PEC
            If MontantGlobalPriseEnchargeToolStripTextBox.Text <> "" Then
                MontantremboursableAMC = MontantHonoraires - MontantremboursableAMO
                If MontantremboursableAMC > CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global Then
                    MontantremboursableAMC = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global
                    CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global = 0
                Else
                    CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global = CurrentFactureVitale.PEC.Reste_Ventilation_Montant_Global - MontantremboursableAMC
                End If
                CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G2010C2 = "1"
            Else
                For i = 0 To CurrentFactureVitale.PEC.Montants_Actes.Length - 1
                    If CurrentFactureVitale.PEC.Montants_Actes(i).Num_Acte = Nombre_de_Prestations Then
                        MontantremboursableAMC = CurrentFactureVitale.PEC.Montants_Actes(i).Montant.ToString
                        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G2010C2 = "1"
                    End If
                Next
            End If
            '-------------------------
            SGD_AjouterChamp_Tracé(NumeroSession, MontantremboursableAMC, Visu_API, FichierTrace, Nombre_de_Prestations)
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = MontantremboursableAMC
            Total_Théorique_Remboursable_par_AMC = Total_Théorique_Remboursable_par_AMC + MontantremboursableAMC
            Total_Remboursable_par_AMC = Total_Remboursable_par_AMC + MontantremboursableAMC
        Else
            'SGD_AjouterChamp_Tracé(NumeroSession, "", Visu_API, FichierTrace, Nombre_de_Prestations)
            SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations) 'en réponse à compte rendu CNDA: La base de remboursement théorique de l'acte HC n'est pas renseignée.
            CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 = 0
        End If


        SGD_AjouterChamp_Tracé(NumeroSession, "0", Visu_API, FichierTrace, Nombre_de_Prestations)
        CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C16 = "0"

        FI118_nombre_enregistrements_types_4 = FI118_nombre_enregistrements_types_4 + 3

        If MontantHonoraires < MontantremboursableAMO + CurrentFactureVitale.TabLigneFacture(Nombre_de_Prestations).G1610C15 Then
            MyMsg_Box.Presentation("Officine !", "Montant du remboursement (AMO+AMC) > Montant des Honoraires" + Chr(10) + "Tarification interrompue", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Return False
        End If

        If NatureAssurance_Button.Text = "MALADIE" Then

            SGD_AjouterGroupe_Tracé(NumeroSession, 1820, Visu_API, FichierTrace)

            'champ 1
            SGD_AjouterChamp_Tracé(NumeroSession, NuméroPrestation, Visu_API, FichierTrace)

            'champ 2
            CurrentFactureVitale.TabLigneFacture(NuméroPrestation).G1820C2 = HonoDispGlobaux_CodeJustifExo
            SGD_AjouterChamp_Tracé(NumeroSession, HonoDispGlobaux_CodeJustifExo, Visu_API, FichierTrace)
        End If
        'Hono_Disp_Complexe_is_in_facture = True
        Return True
    End Function

    Public Function Hono_Disp_Age_is_in_facture() As Boolean 'HDA
        'If Hono_Disp_Rembousable_is_in_facture() = False Then
        '    Return False
        'End If
        Dim années = Now.Year - CInt(Mid(CurrentBenéficiaire.G104C12, 1, 4))
        Dim mois = Now.Month - CInt(Mid(CurrentBenéficiaire.G104C12, 1, 4))
        If mois < 0 Then
            mois = 12 + mois
            années = années - 1
        End If
        If années < 3 Or années >= 70 Then
            Return 3
        Else
            Return False
        End If
    End Function

    Public Function Hono_Disp_Médicament_Spécifique_is_in_facture() As Boolean 'HDE
        For r = 0 To Vente.RowCount - 1
            Dim cip As String = ""
            If Vente.Item(VenteEAN13.Index, r).Value <> "" Then
                cip = Vente.Item(VenteEAN13.Index, r).Value
            ElseIf Vente.Item(VenteCIP.Index, r).Value <> "" Then
                cip = Vente.Item(VenteEAN13.Index, r).Value
            End If
            If cip <> "" Then
                Dim data = BDD.Produits_Médicaments_SpécifiqueTableAdapter.GetDataBy_CIP(cip)
                If data.Rows.Count > 0 Then
                    If Val(data.Item(0).Code_Médicament_Spécifique) > 0 Then
                        Return True
                    End If
                End If
            End If
        Next
        Return False
    End Function
#End Region


    Private Sub PictureBoxScanOrdo_Click(sender As Object, e As EventArgs) Handles PictureBoxScanOrdo.Click
        ScanOrdo.ShowDialog()
        Scor_Label_refresh()
    End Sub



#Region "IMAGE"

    Private Sub PictureBox1_MouseHover(sender As Object, e As EventArgs) Handles close_PictureBox.MouseHover
        ToolTip1.SetToolTip(close_PictureBox, "QUITTE LE FORMULAUIRE DE VENTE")
    End Sub











    Private Sub PictureBoxScanOrdo_MouseHover(sender As Object, e As EventArgs) Handles PictureBoxScanOrdo.MouseHover
        ToolTip1.SetToolTip(PictureBoxScanOrdo, "SCANERISATION DE DOCUMENTS")
        PictureBoxScanOrdo.BackgroundImage = officine.My.Resources.SCANORDO2
    End Sub

    Private Sub PictureBoxScanOrdo_MouseLeave(sender As Object, e As EventArgs) Handles PictureBoxScanOrdo.MouseLeave
        PictureBoxScanOrdo.BackgroundImage = officine.My.Resources.SCANORDO
    End Sub

    Private Sub PictureBox2_MouseHover(sender As Object, e As EventArgs) Handles Reset_PictureBox.MouseHover
        ToolTip1.SetToolTip(Reset_PictureBox, "ANNULE TOUTES LES INFORMATIONS SAISIES")
    End Sub


    Private Sub Button_Facturation_MouseHover(sender As Object, e As EventArgs) Handles Button_Facturation.MouseHover
        ToolTip1.SetToolTip(Button_Facturation, "VALIDER FACTURE")
    End Sub



    Private Sub LECTURE_VITALE_MouseHover(sender As Object, e As EventArgs) Handles LECTURE_VITALE.MouseHover
        ToolTip1.SetToolTip(LECTURE_VITALE, "Lecture Carte Vitale")

    End Sub



#End Region

    Private Sub PictureBox_Edition_Prescripteur_MouseHover(sender As Object, e As EventArgs) Handles PictureBox_Edition_Prescripteur.MouseHover
        ToolTip1.SetToolTip(PictureBox_Edition_Prescripteur, "Détails Prescripteurs")
    End Sub


    Private Sub Assuré_détail_Button_MouseHover(sender As Object, e As EventArgs) Handles Assuré_détail_Button.MouseHover
        ToolTip1.SetToolTip(Assuré_détail_Button, "Détails Bénéficiaire")
        Assuré_détail_Button.BackgroundImage = officine.My.Resources.magnifying_glass2
    End Sub

    Private Sub Assuré_détail_Button_MouseLeave(sender As Object, e As EventArgs) Handles Assuré_détail_Button.MouseLeave
        Assuré_détail_Button.BackgroundImage = officine.My.Resources.magnifying_glass
    End Sub

    Private Sub reduce_PictureBox_Click(sender As Object, e As EventArgs) Handles reduce_PictureBox.Click
        MENU_PRINCIPAL.WindowState = FormWindowState.Maximized
        Me.WindowState = FormWindowState.Minimized
    End Sub

#Region "DOSSIER PATIENT"
    Public Sub Dossier_Patient_Load()
        Me.Vitale_adresse_TextBox.Text = ""
        Me.Vitale_téléphone_TextBox.Text = ""
        Me.Vitale_e_mail_TextBox.Text = ""
        Me.Vitale_Notes_perso_RichTextBox.Text = ""
        Dossier_Patient_Documents_affiche_documents()
        Dossier_Patient_Ordos_affiche_documents()
        If CurrentBenéficiaire.G101C8 <> "" Then

            affiche_histo_facture()
            Dim benef = Me.VitaleTableAdapter.GetDataBénéficiaire(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14)
            If benef.Rows.Count > 0 Then
                Me.Vitale_adresse_TextBox.Text = benef.Item(0).Adresse
                Me.Vitale_téléphone_TextBox.Text = benef.Item(0).Téléphone
                Me.Vitale_e_mail_TextBox.Text = benef.Item(0).e_mail
                Me.Vitale_Notes_perso_RichTextBox.Text = benef.Item(0).Notes_perso

            End If
            If Me.Vitale_adresse_TextBox.Text = "" And (CurrentBenéficiaire.G104C4 <> "" Or CurrentBenéficiaire.G104C5 <> "" Or CurrentBenéficiaire.G104C6 <> "" Or CurrentBenéficiaire.G104C7 <> "" Or CurrentBenéficiaire.G104C8 <> "") Then
                Me.Vitale_adresse_TextBox.Text = CurrentBenéficiaire.G104C4 & " " & CurrentBenéficiaire.G104C5 & " " & CurrentBenéficiaire.G104C6 & " " & CurrentBenéficiaire.G104C7 & " " & CurrentBenéficiaire.G104C8
            End If
        Else
            Dim compte_NonSV = BDD.VitaleTableAdapter.GetData_Compte_Client_NonSV(CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3)
            If compte_NonSV.Rows.Count > 0 Then
                Me.Vitale_adresse_TextBox.Text = compte_NonSV.Item(0).Adresse
                Me.Vitale_téléphone_TextBox.Text = compte_NonSV.Item(0).Téléphone
                Me.Vitale_e_mail_TextBox.Text = compte_NonSV.Item(0).e_mail
                Me.Vitale_Notes_perso_RichTextBox.Text = compte_NonSV.Item(0).Notes_perso
                affiche_histo_facture_NonSV()
            End If
        End If
        If Vitale_Notes_perso_RichTextBox.Text <> "" Then
            MyMsg_Box.Presentation("Info Patient:", Vitale_Notes_perso_RichTextBox.Text, False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
        End If
        Chronique_Affichage()
        Produits_Reservés_affichage()
        Age_Patient_Label.Visible = False
        Try
            Dim années = Now.Year - CInt(Mid(CurrentBenéficiaire.G104C12, 1, 4))
            Dim mois = Now.Month - CInt(Mid(CurrentBenéficiaire.G104C12, 5, 2))
            If mois < 0 Then
                mois = 12 + mois
                années = années - 1
            End If
            Age_Patient_Label.Text = CInt(années).ToString & " ans " & CInt(mois).ToString & " mois"
            Age_Patient_Label.Visible = True
        Catch ex As Exception

        End Try

        DMP_Statut_MyCombobox.Items.Clear()
        DMP_Statut_MyCombobox.Items.Add("Créé")
        DMP_Statut_MyCombobox.Items.Add("Refus")
        DMP_Statut_MyCombobox.Items.Add("Pas d'information")
        DMP_Statut_MyCombobox.Buttons_color_list = New List(Of String)
        DMP_Statut_MyCombobox.Buttons_color_list.Add("008000") 'green
        DMP_Statut_MyCombobox.Buttons_color_list.Add("FFA500") 'orange
        DMP_Statut_MyCombobox.Buttons_color_list.Add("FF0000") 'red
        For i = 0 To DMP_Statut_MyCombobox.Items.Count - 1
            If CurrentBenéficiaire.DMP_Statut.ToString = DMP_Statut_MyCombobox.Items(i).ToString Then
                DMP_Statut_MyCombobox.SelectedIndex = i
                Exit For
            End If
        Next
    End Sub
    Private Sub Dossier_Patient_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Dossier_Patient_LinkLabel.LinkClicked
        If Détail_Bénéficiaire_Panel.Visible = False Then
            Détail_Bénéficiaire_Panel.Visible = True
            Détail_Bénéficiaire_Panel.BringToFront()
            Dossier_Patient_LinkLabel.Text = "Fermer dossier patient"
        Else
            Détail_Bénéficiaire_Panel.Visible = False
            Dossier_Patient_LinkLabel.Text = "Ouvrir dossier patient"
            Vente.Visible = True
            Vente.BringToFront()
        End If
    End Sub


#Region "DOSSIER PATIENT DOCUMENTS"
    Private Sub Dossier_Patient_Documents_affiche_documents()
        Dossier_Patient_Documents_ListBox.Items.Clear()
        Dim Nom_dossier As String = NirTextBox.Text & CléduNIRTextBox.Text
        If Nom_dossier = "" And Not ComboBoxLECTURE_VITALE.Text = "" Then
            Nom_dossier = ComboBoxLECTURE_VITALE.Text
            Nom_dossier = Replace(Nom_dossier, "*", "")
            Nom_dossier = Replace(Nom_dossier, "|", "")
            Nom_dossier = Replace(Nom_dossier, "\", "")
            Nom_dossier = Replace(Nom_dossier, ":", "")
            Nom_dossier = Replace(Nom_dossier, Chr(34), "")
            Nom_dossier = Replace(Nom_dossier, "<", "")
            Nom_dossier = Replace(Nom_dossier, ">", "")
            Nom_dossier = Replace(Nom_dossier, "?", "")
            Nom_dossier = Replace(Nom_dossier, "/", "")
        End If
        Dim file = Dir(Config.LocalNetwork_ServerName & "\Dossiers_Clients\" & Nom_dossier & "\*.*")
        While file <> ""
            Dossier_Patient_Documents_ListBox.Items.Add(file)
            file = Dir()
        End While
    End Sub

    Private Sub Dossier_Patient_Documents_ListBox_Click(sender As Object, e As EventArgs) Handles Dossier_Patient_Documents_ListBox.Click
        If Dossier_Patient_Documents_ListBox.SelectedItem Is Nothing Then Exit Sub
        Dim Nom_dossier As String = NirTextBox.Text & CléduNIRTextBox.Text
        If Nom_dossier = "" And Not ComboBoxLECTURE_VITALE.Text = "" Then
            Nom_dossier = ComboBoxLECTURE_VITALE.Text
            Nom_dossier = Replace(Nom_dossier, "*", "")
            Nom_dossier = Replace(Nom_dossier, "|", "")
            Nom_dossier = Replace(Nom_dossier, "\", "")
            Nom_dossier = Replace(Nom_dossier, ":", "")
            Nom_dossier = Replace(Nom_dossier, Chr(34), "")
            Nom_dossier = Replace(Nom_dossier, "<", "")
            Nom_dossier = Replace(Nom_dossier, ">", "")
            Nom_dossier = Replace(Nom_dossier, "?", "")
            Nom_dossier = Replace(Nom_dossier, "/", "")
        End If
        Process.Start(Config.LocalNetwork_ServerName & "\Dossiers_Clients\" & Nom_dossier & "\" & Dossier_Patient_Documents_ListBox.SelectedItem.ToString)
    End Sub




    Private Sub Dossier_Patient_Documents_SCAN_Button_Click(sender As Object, e As EventArgs) Handles Dossier_Patient_Documents_SCAN_Button.Click
     
        If Config.typedriverscan = "TWAIN" Then
            If options_scanner.Checked = True Then
                scan(1)
            Else
                scan(0)
            End If
        Else

            If WIA_GetDevices() Is Nothing Then
                Exit Sub
            End If
            If options_scanner.Checked = True Then
                Dossier_Patient_Documents_PictureBox.Image = WIA_scan(WIA_GetDevices(0), True)
            Else
                Dossier_Patient_Documents_PictureBox.Image = WIA_scan(WIA_GetDevices(0), False)
            End If
        End If

    End Sub
    Private Sub scan(ByVal TWAIN_SetHideUI As Long)
        'TWAIN_SetHideUI=1 to hide 0 to show
        Dim r As Long
        'r = ScanOrdo.TWAIN_LoadSourceManager
        'r = ScanOrdo.TWAIN_OpenSourceManager(Me.Handle.ToInt32)
        r = ScanOrdo.TWAIN_OpenDefaultSource(Me.Handle.ToInt32)
        r = ScanOrdo.TWAIN_SetHideUI(TWAIN_SetHideUI)

        'r = ScanOrdo.TWAIN_SelectImageSource(Me.Handle.ToInt32)
        'r = ScanOrdo.TWAIN_SetBitDepth(1)
        'Dim res = CDbl(300)
        'r = ScanOrdo.TWAIN_SetCurrentResolution(CDbl(res))
        'r = ScanOrdo.TWAIN_SetCurrentResolution(res)
        'Dim TypDoc As Long = 1
        'TypDoc = 0  'Noir et Blanc
        'TypDoc = 1  'Nuance de gris
        'TypDoc = 2  'Couleur
        'r = ScanOrdo.TWAIN_SetCurrentPixelType(CLng(TypDoc))
        r = ScanOrdo.TWAIN_AcquireToClipboard(Me.Handle.ToInt32, 0)
        Dossier_Patient_Documents_PictureBox.Image = Clipboard.GetDataObject.GetData(DataFormats.Bitmap)
        Dossier_Patient_Documents_PictureBox.SizeMode = PictureBoxSizeMode.StretchImage
    End Sub

    Private Sub Dossier_Patient_Documents_Save_Button_Click(sender As Object, e As EventArgs) Handles Dossier_Patient_Documents_Save_Button.Click
        Dim Nom_dossier As String = NirTextBox.Text & CléduNIRTextBox.Text
        If Nom_dossier = "" And Not ComboBoxLECTURE_VITALE.Text = "" Then
            Nom_dossier = ComboBoxLECTURE_VITALE.Text
            Nom_dossier = Replace(Nom_dossier, "*", "")
            Nom_dossier = Replace(Nom_dossier, "|", "")
            Nom_dossier = Replace(Nom_dossier, "\", "")
            Nom_dossier = Replace(Nom_dossier, ":", "")
            Nom_dossier = Replace(Nom_dossier, Chr(34), "")
            Nom_dossier = Replace(Nom_dossier, "<", "")
            Nom_dossier = Replace(Nom_dossier, ">", "")
            Nom_dossier = Replace(Nom_dossier, "?", "")
            Nom_dossier = Replace(Nom_dossier, "/", "")
        End If
        If Nom_dossier = "" Then
            MyMsg_Box.Presentation("Officine !", "Ouvrir un dossier client avant d'y enregistrer une pièce", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If

        If Not My.Computer.FileSystem.DirectoryExists(Config.LocalNetwork_ServerName & "\Dossiers_Clients\" & Nom_dossier) Then
            My.Computer.FileSystem.CreateDirectory(Config.LocalNetwork_ServerName & "\Dossiers_Clients\" & Nom_dossier)
        End If
        'PostScript file
        PrintDocument_Bitmap.PrinterSettings.PrinterName = "Postscript"
        If My.Computer.FileSystem.FileExists(Application.StartupPath + "\GS\scantemp.ps") Then
            My.Computer.FileSystem.DeleteFile(Application.StartupPath + "\GS\scantemp.ps")
        End If
        PrintDocument_Bitmap.PrinterSettings.PrintFileName = Application.StartupPath + "\GS\scantemp.ps"
        PrintDocument_Bitmap.PrinterSettings.PrintToFile = True
        PrintDocument_Bitmap.Print()
        '--------------------------------------------------
        Dim FileName As String = ""
        While FileName = ""
            FileName = (InputBox("Nommer le document"))
            FileName = Replace(FileName, "*", "")
            FileName = Replace(FileName, "|", "")
            FileName = Replace(FileName, "\", "")
            FileName = Replace(FileName, ":", "")
            FileName = Replace(FileName, Chr(34), "")
            FileName = Replace(FileName, "<", "")
            FileName = Replace(FileName, ">", "")
            FileName = Replace(FileName, "?", "")
            FileName = Replace(FileName, "/", "")
            FileName = Replace(FileName, " ", "")
            If My.Computer.FileSystem.FileExists(Config.LocalNetwork_ServerName & "\Dossiers_Clients\" & Nom_dossier & "\" + FileName + ".pdf") Then
                MyMsg_Box.Presentation("Officine !", "Il existe déja un document nommé " & FileName & Chr(10) & "Voulez vous le remplacer?", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog() = MsgBoxResult.No Then
                    FileName = ""
                Else
                    My.Computer.FileSystem.DeleteFile(Config.LocalNetwork_ServerName & "\Dossiers_Clients\" & Nom_dossier & "\" + FileName + ".pdf")
                End If
            End If
        End While
        '--------------------------------------------------
        'convert Postscript to pdf
        FileName = FileName + ".pdf"
        'convert PostScript to PDF
        Teletransmission_MAIN.ShellandWait(Application.StartupPath + "\GS", "gswin32c.exe", "-sPAPERSIZE=a4 -sDEVICE=pdfwrite -r150 -o " + FileName + " scantemp.ps") '-sPAPERSIZE=a4
        My.Computer.FileSystem.MoveFile(Application.StartupPath + "\GS\" + FileName, Config.LocalNetwork_ServerName & "\Dossiers_Clients\" & Nom_dossier & "\" + FileName, True)
        Dossier_Patient_Documents_affiche_documents()
    End Sub
    Private Sub PrintDocument_Bitmap_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument_Bitmap.PrintPage
        If Not Dossier_Patient_Documents_PictureBox.Image Is Nothing Then

            Dim i = Dossier_Patient_Documents_PictureBox.Image

            'i.HorizontalResolution = pixels per inch of the image 
            'i.VerticalResoulutin = ppi of image again 
            'e.MarginBounds.Width = printable width in 100 ppi 
            'e.MarginBounds.Height = printable height in 100 ppi 

            Dim newWidth As Decimal = i.Width * 100 / i.HorizontalResolution 'Convert to same units (100 ppi) as e.MarginBounds.Width 
            Dim newHeight As Decimal = i.Height * 100 / i.VerticalResolution 'Convert to same units (100 ppi) as e.MarginBounds.Height 
            Dim widthFactor As Decimal = newWidth / e.MarginBounds.Width
            Dim heightFactor As Decimal = newHeight / e.MarginBounds.Height


            If (widthFactor > 1 Or heightFactor > 1) Then ' if the image is wider or taller than the printable area then adjust... 
                If (widthFactor > heightFactor) Then
                    newWidth = newWidth / widthFactor
                    newHeight = newHeight / widthFactor
                Else
                    newWidth = newWidth / heightFactor
                    newHeight = newHeight / heightFactor

                End If
                e.Graphics.DrawImage(i, 0, 0, Int(newWidth), Int(newHeight))
            Else
                e.Graphics.DrawImage(Dossier_Patient_Documents_PictureBox.Image, 0, 0)
            End If





        End If
    End Sub

    Private Sub Dossier_Patient_Documents_Suppr_Button_Click(sender As Object, e As EventArgs) Handles Dossier_Patient_Documents_Suppr_Button.Click
        Dim Nom_dossier As String = NirTextBox.Text & CléduNIRTextBox.Text
        If Nom_dossier = "" And Not ComboBoxLECTURE_VITALE.Text = "" Then
            Nom_dossier = ComboBoxLECTURE_VITALE.Text
            Nom_dossier = Replace(Nom_dossier, "*", "")
            Nom_dossier = Replace(Nom_dossier, "|", "")
            Nom_dossier = Replace(Nom_dossier, "\", "")
            Nom_dossier = Replace(Nom_dossier, ":", "")
            Nom_dossier = Replace(Nom_dossier, Chr(34), "")
            Nom_dossier = Replace(Nom_dossier, "<", "")
            Nom_dossier = Replace(Nom_dossier, ">", "")
            Nom_dossier = Replace(Nom_dossier, "?", "")
            Nom_dossier = Replace(Nom_dossier, "/", "")
        End If
        If My.Computer.FileSystem.FileExists(Config.LocalNetwork_ServerName & "\Dossiers_Clients\" & Nom_dossier & "\" & Dossier_Patient_Documents_ListBox.SelectedItem.ToString) Then
            MyMsg_Box.Presentation("Officine ?", "Supprimer définitivement ce document?", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                My.Computer.FileSystem.DeleteFile(Config.LocalNetwork_ServerName & "\Dossiers_Clients\" & Nom_dossier & "\" & Dossier_Patient_Documents_ListBox.SelectedItem.ToString)
            End If
        End If
        Dossier_Patient_Documents_affiche_documents()
    End Sub


    Private Sub Dossier_Patient_Ordos_affiche_documents()
        Ordos_DataGridView.DataSource= BDD.OrdoTableAdapter.GetDataBy_VitaleNum(CurrentBenéficiaire.Num)

    End Sub



#End Region

#Region "DOSSIER PATIENTS HISTORIQUE"

    Public Sub affiche_histo_facture()
        chargement_historique_facture_en_cours = True
        Dossier_patient_Factures_DataGridView.Rows.Clear()
        If CInt(Histo_Nbre_mois_TextBox.Text) = 0 Then
            chargement_historique_facture_en_cours = False
            Exit Sub
        End If


        Bandeau_info_bas_show("Chargement historique factures...")
        'Dim FV = Me.FacturesTableAdapter.GetDataBy_Bénéficiaire(ComboBoxLECTURE_VITALE.Text, NirTextBox.Text)
        Dim date_min = CDec(Format(DateAdd(DateInterval.Month, CInt(Histo_Nbre_mois_TextBox.Text) * (-1), Now), "yyyyMMdd"))
        Dim FV = Me.FacturesTableAdapter.GetDataBy_Bénéficiaire_Date(ComboBoxLECTURE_VITALE.Text, NirTextBox.Text, date_min)
        'Dim VD = Me.Facture_VenteDirecteTableAdapter1.GetDataBy_bénéficiaire(ComboBoxLECTURE_VITALE.Text, NirTextBox.Text)
        Dim VD = Me.Facture_VenteDirecteTableAdapter1.GetDataBy_Bénéficiaire_Date(ComboBoxLECTURE_VITALE.Text, NirTextBox.Text, date_min)

        For r = 0 To FV.Rows.Count - 1
            If Histo_Afficher__reprise_CheckBox.Checked = True Or FV(r).Reprise_Facture_Num = 0 Then
                Dossier_patient_Factures_DataGridView.Rows.Add()
            End If
        Next

        For r = 0 To VD.Rows.Count - 1
            Dossier_patient_Factures_DataGridView.Rows.Add()
        Next


        Dossier_patient_Factures_Column_Date.DefaultCellStyle.Format = "dd/MM/yyyy"
        Dossier_patient_Factures_Column_Date_presc.DefaultCellStyle.Format = "dd/MM/yyyy"

        Dim nombre_de_fv_affichées = 0

        Dim list_prescr As New List(Of String) 'affichage dans PrescripteurMycombobox

        For r = 0 To FV.Rows.Count - 1

            Dim encaissements = BDD.EncaissementsTableAdapter.GetDataBy_NumFactureSV(FV(r).Num)
            For rr = 0 To encaissements.Rows.Count - 1
                If encaissements(rr).Note_rappel = True Then
                    MyMsg_Box.Presentation("Officine !", "Rappel de note:" & vbCrLf & "FSE " & FV(r).Num.ToString & vbCrLf & vbCrLf & encaissements(rr).Note & vbCrLf & vbCrLf & "Continuer de le rappeller?", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.No Then
                        BDD.EncaissementsTableAdapter.Update_Note(encaissements(rr).Note, False, encaissements(rr).Num)
                    End If
                End If
            Next

            If Histo_Afficher__reprise_CheckBox.Checked = True Or FV(r).Reprise_Facture_Num = 0 Then

                Dim parsedDate As Date
                DateTime.TryParseExact(Mid(FV(r).G1110C3, 1, 8), "yyyyMMdd", Nothing, DateTimeStyles.None, parsedDate)
                Dossier_patient_Factures_DataGridView.Rows.Item(nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Date.Index).Value = parsedDate
                Dossier_patient_Factures_DataGridView.Rows.Item(nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Type.Index).Value = "SV"
                Dossier_patient_Factures_DataGridView.Rows.Item(nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Num.Index).Value = FV(r).G1110C1




                If Teletransmission_MAIN.RSP_LIGNE_REJETTableAdapter.GetDataBy_numfactureAsInt_acquittement(Val(FV(r).G1110C1), False).Rows.Count > 0 Then
                    Dossier_patient_Factures_DataGridView.Rows.Item(nombre_de_fv_affichées).DefaultCellStyle.ForeColor = Color.Red
                    If FV(r).Reprise_Facture_Num > 0 Then
                        MyMsg_Box.Presentation("Officine !", "Rejet sur facture " & FV(r).G1110C1 & vbCrLf & "(reprise de la facture " & FV(r).Reprise_Facture_Num.ToString & ")", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                    Else
                        MyMsg_Box.Presentation("Officine !", "Rejet sur facture " & FV(r).G1110C1, False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                    End If
                ElseIf FV(r).Reprise_Facture_Num <> 0 Then
                    Dossier_patient_Factures_DataGridView.Rows.Item(nombre_de_fv_affichées).DefaultCellStyle.ForeColor = Color.Blue
                Else
                    If (FV(r).TP_AMO = False Or (FV(r).TP_AMO = True And FV(r).Part_AMO_payée = True)) And (FV(r).TP_AMC = False Or (FV(r).TP_AMC = True And FV(r).Part_AMC_payée = True)) _
                        Or FV(r).Recyclée = True Then
                        Dossier_patient_Factures_DataGridView.Rows.Item(nombre_de_fv_affichées).DefaultCellStyle.ForeColor = Color.Black
                    Else
                        Dossier_patient_Factures_DataGridView.Rows.Item(nombre_de_fv_affichées).DefaultCellStyle.ForeColor = Color.DarkOrange
                    End If

                End If






                Dim num_prescr_finess As String = ""
                Dim num_prescr_rpps As String = ""
                Dim date_prescr As New Date

                If FV(r).G1211C1 <> "" Then
                    num_prescr_finess = FV(r).G1211C1 & FV(r).G1211C2
                    num_prescr_rpps = FV(r).G1211C5 & FV(r).G1211C6
                    DateTime.TryParseExact(Mid(FV(r).G1211C3, 1, 8), "yyyyMMdd", Nothing, DateTimeStyles.None, date_prescr)
                ElseIf FV(r).G1213C1 <> "" Then
                    num_prescr_finess = FV(r).G1213C1 & FV(r).G1213C2
                    num_prescr_rpps = FV(r).G1213C6 & FV(r).G1213C7
                    DateTime.TryParseExact(Mid(FV(r).G1213C4, 1, 8), "yyyyMMdd", Nothing, DateTimeStyles.None, date_prescr)
                ElseIf FV(r).G1214C1 <> "" Then
                    num_prescr_finess = FV(r).G1214C1 & FV(r).G1214C2
                    num_prescr_rpps = FV(r).G1214C6 & FV(r).G1214C7
                    DateTime.TryParseExact(Mid(FV(r).G1214C4, 1, 8), "yyyyMMdd", Nothing, DateTimeStyles.None, date_prescr)
                End If
                If num_prescr_finess <> "" Then

                    Dim prescripeur = Me.PrescripteursTableAdapter.GetDataBy_Numidentification_NumRPPS(num_prescr_finess, num_prescr_rpps)
                    If prescripeur.Rows.Count > 0 Then
                        Dossier_patient_Factures_DataGridView.Rows.Item(nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Prescripteur.Index).Value = _
                            prescripeur.Item(0).NomPrénom '& " " & Traduction_CodeSpécialité_Prescripteur(prescripeur.Item(0).CodeSpécialité) & " " & prescripeur.Item(0).NumRPPS
                        If Not list_prescr.Contains(prescripeur.Item(0).NomPrénom) Then
                            list_prescr.Add(prescripeur.Item(0).NomPrénom)
                        End If
                    End If

                    Dossier_patient_Factures_DataGridView.Rows.Item(nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Date_presc.Index).Value = date_prescr
                End If
                PrescripteurMyCombobox.Items.Clear()
                list_prescr.Sort()
                For Each item In list_prescr
                    PrescripteurMyCombobox.Items.Add(item)
                Next

                If Me.ActesTableAdapter.GetDataByNumFacturesSV(FV(r).G1110C1).Rows.Count > 0 Then
                    Dossier_patient_Factures_DataGridView.Rows.Item(nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Opérateur.Index).Value = Me.ActesTableAdapter.GetDataByNumFacturesSV(FV(r).G1110C1).Item(0).ID_user
                End If
                nombre_de_fv_affichées = nombre_de_fv_affichées + 1
            Else
                If Teletransmission_MAIN.RSP_LIGNE_REJETTableAdapter.GetDataBy_numfactureAsInt_acquittement(Val(FV(r).G1110C1), False).Rows.Count > 0 Then
                    If FV(r).Reprise_Facture_Num > 0 Then
                        MyMsg_Box.Presentation("Officine !", "Rejet sur facture " & FV(r).G1110C1 & vbCrLf & "(reprise de la facture " & FV(r).Reprise_Facture_Num.ToString & ")", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                    Else
                        MyMsg_Box.Presentation("Officine !", "Rejet sur facture " & FV(r).G1110C1, False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                    End If
                End If

            End If

        Next

        For r = 0 To VD.Rows.Count - 1
            Dim encaissements = BDD.EncaissementsTableAdapter.GetDataBy_NumFactureVenteDirecte(VD(r).Num)
            For rr = 0 To encaissements.Rows.Count - 1
                If encaissements(rr).Note_rappel = True Then
                    MyMsg_Box.Presentation("Officine !", "Rappel de note:" & vbCrLf & "Vende Directe " & VD(r).Num.ToString & vbCrLf & vbCrLf & encaissements(rr).Note & vbCrLf & vbCrLf & "Continuer de le rappeller?", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.No Then
                        BDD.EncaissementsTableAdapter.Update_Note(encaissements(rr).Note, False, encaissements(rr).Num)
                    End If
                End If
            Next
            Dim parsedDate As Date
            DateTime.TryParseExact(Mid(VD(r).Date_, 1, 8), "yyyyMMdd", Nothing, DateTimeStyles.None, parsedDate)
            Dossier_patient_Factures_DataGridView.Rows.Item(r + nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Date.Index).Value = parsedDate
            Dossier_patient_Factures_DataGridView.Rows.Item(r + nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Type.Index).Value = "VD"
            Dossier_patient_Factures_DataGridView.Rows.Item(r + nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Num.Index).Value = VD(r).Num.ToString
            Dossier_patient_Factures_DataGridView.Rows.Item(r + nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Total.Index).Value = VD(r).Total.ToString
            If Me.ActesTableAdapter.GetDataBy_NumFactureVenteDirecte(VD(r).Num.ToString).Rows.Count > 0 Then
                Dossier_patient_Factures_DataGridView.Rows.Item(r + nombre_de_fv_affichées).Cells(Dossier_patient_Factures_Column_Opérateur.Index).Value = Me.ActesTableAdapter.GetDataBy_NumFactureVenteDirecte(VD(r).Num.ToString).Item(0).ID_user
            End If


        Next
        Dossier_patient_Factures_DataGridView.Sort(Dossier_patient_Factures_Column_Date, System.ComponentModel.ListSortDirection.Descending)

        If Dossier_patient_Factures_DataGridView.RowCount > 0 Then
            Dossier_patient_Factures_DataGridView.Select()
        End If

        'crédits
        CurrentBenéficiaire.Crédits_en_Cours.Clear()
        Crédits_ListBox.Items.Clear()
        Dim FV_nir = Me.FacturesTableAdapter.GetDataBy_NIR(CurrentBenéficiaire.G101C8)
        For r = 0 To FV_nir.Rows.Count - 1
            Dim crédit_en_cours_row = VenteForm.EncaissementsTableAdapter.Get_Crédit_en_cours_by_NumFactureSV(Val(FV_nir(r).G1110C1))

            If crédit_en_cours_row.Rows.Count > 0 Then
                Dim crédit_déja_inséré As Boolean = False
                For Each crédit In CurrentBenéficiaire.Crédits_en_Cours
                    If crédit.Num = crédit_en_cours_row.Item(0).Num Then
                        crédit_déja_inséré = True
                    End If
                Next
                If crédit_déja_inséré = False Then
                    CurrentBenéficiaire.Crédits_en_Cours.Add(crédit_en_cours_row.Item(0))
                End If
            End If
        Next
        Dim VD_nir = Me.Facture_VenteDirecteTableAdapter1.GetDataBy_NIR(CurrentBenéficiaire.G101C8)
        For r = 0 To VD_nir.Rows.Count - 1
            Dim crédit_en_cours_row = VenteForm.EncaissementsTableAdapter.Get_Crédit_en_cours_by_NumFactureVenteDirecte(Val(VD_nir(r).Num))
            If crédit_en_cours_row.Rows.Count > 0 Then
                Dim crédit_déja_inséré As Boolean = False
                For Each crédit In CurrentBenéficiaire.Crédits_en_Cours
                    If crédit.Num = crédit_en_cours_row.Item(0).Num Then
                        crédit_déja_inséré = True
                    End If
                Next
                If crédit_déja_inséré = False Then
                    CurrentBenéficiaire.Crédits_en_Cours.Add(crédit_en_cours_row.Item(0))
                End If
            End If
        Next

        For r = 0 To CurrentBenéficiaire.Crédits_en_Cours.Count - 1
            Dim item = CurrentBenéficiaire.Crédits_en_Cours.Item(r).Num & ":   " & CurrentBenéficiaire.Crédits_en_Cours.Item(r)._Date.ToShortDateString & " " & CurrentBenéficiaire.Crédits_en_Cours.Item(r)._Date.ToShortTimeString & "    " & CurrentBenéficiaire.Crédits_en_Cours.Item(r).Nom_Complet & "    " & CurrentBenéficiaire.Crédits_en_Cours.Item(r).Valeur.ToString & "€"
            If CurrentBenéficiaire.Crédits_en_Cours.Item(r).NumFactureSV > 0 Then
                item = item & "    (FSE " & CurrentBenéficiaire.Crédits_en_Cours.Item(r).NumFactureSV.ToString & ")"
            End If
            If CurrentBenéficiaire.Crédits_en_Cours.Item(r).NumFactureVenteDirecte > 0 Then
                item = item & "    (VD " & CurrentBenéficiaire.Crédits_en_Cours.Item(r).NumFactureVenteDirecte.ToString & ")"
            End If
            Crédits_ListBox.Items.Add(item)
        Next

        Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
        chargement_historique_facture_en_cours = False
    End Sub

    Private Sub affiche_histo_facture_NonSV()

        chargement_historique_facture_en_cours = True
        Bandeau_info_bas_show("Chargement historique factures...")
        'Dim VD = Me.Facture_VenteDirecteTableAdapter1.GetData_By_NomComplet_NonSV(ComboBoxLECTURE_VITALE.Text)
        Dim date_min = CDec(Format(DateAdd(DateInterval.Month, CInt(Histo_Nbre_mois_TextBox.Text) * (-1), Now), "yyyyMMdd"))
        Dim VD = Me.Facture_VenteDirecteTableAdapter1.GetData_By_NomComplet_NonSV_Date(ComboBoxLECTURE_VITALE.Text, date_min)

        Dossier_patient_Factures_DataGridView.Rows.Clear()

        For r = 0 To VD.Rows.Count - 1
            Dossier_patient_Factures_DataGridView.Rows.Add()
        Next


        Dossier_patient_Factures_Column_Date.DefaultCellStyle.Format = "dd/MM/yyyy"
        Dossier_patient_Factures_Column_Date_presc.DefaultCellStyle.Format = "dd/MM/yyyy"



        For r = 0 To VD.Rows.Count - 1

            Dim encaissements = BDD.EncaissementsTableAdapter.GetDataBy_NumFactureVenteDirecte(VD(r).Num)
            For rr = 0 To encaissements.Rows.Count - 1
                If encaissements(rr).Note_rappel = True Then
                    MyMsg_Box.Presentation("Officine !", "Rappel de note:" & vbCrLf & "Vende Directe " & VD(r).Num.ToString & vbCrLf & vbCrLf & encaissements(rr).Note & vbCrLf & vbCrLf & "Continuer de le rappeller?", True, "OUI", True, "NON", False, "")
                    If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.No Then
                        BDD.EncaissementsTableAdapter.Update_Note(encaissements(rr).Note, False, encaissements(rr).Num)
                    End If
                End If
            Next

            Dim parsedDate As Date
            DateTime.TryParseExact(Mid(VD(r).Date_, 1, 8), "yyyyMMdd", Nothing, DateTimeStyles.None, parsedDate)
            Dossier_patient_Factures_DataGridView.Rows.Item(r).Cells(Dossier_patient_Factures_Column_Date.Index).Value = parsedDate
            Dossier_patient_Factures_DataGridView.Rows.Item(r).Cells(Dossier_patient_Factures_Column_Type.Index).Value = "VD"
            Dossier_patient_Factures_DataGridView.Rows.Item(r).Cells(Dossier_patient_Factures_Column_Num.Index).Value = VD(r).Num.ToString
            Dossier_patient_Factures_DataGridView.Rows.Item(r).Cells(Dossier_patient_Factures_Column_Total.Index).Value = VD(r).Total.ToString
            If Me.ActesTableAdapter.GetDataBy_NumFactureVenteDirecte(VD(r).Num.ToString).Rows.Count > 0 Then
                Dossier_patient_Factures_DataGridView.Rows.Item(r).Cells(Dossier_patient_Factures_Column_Opérateur.Index).Value = Me.ActesTableAdapter.GetDataBy_NumFactureVenteDirecte(VD(r).Num.ToString).Item(0).ID_user
            End If

        Next

        'crédits
        CurrentBenéficiaire.Crédits_en_Cours.Clear()
        Crédits_ListBox.Items.Clear()
        For r = 0 To VD.Rows.Count - 1
            Dim crédit_en_cours_row = VenteForm.EncaissementsTableAdapter.Get_Crédit_en_cours_by_NumFactureVenteDirecte(Val(VD(r).Num))
            If crédit_en_cours_row.Rows.Count > 0 Then
                Dim crédit_déja_inséré As Boolean = False
                For Each crédit In CurrentBenéficiaire.Crédits_en_Cours
                    If crédit.Num = crédit_en_cours_row.Item(0).Num Then
                        crédit_déja_inséré = True
                    End If
                Next
                If crédit_déja_inséré = False Then
                    CurrentBenéficiaire.Crédits_en_Cours.Add(crédit_en_cours_row.Item(0))
                End If
            End If
        Next
        For r = 0 To CurrentBenéficiaire.Crédits_en_Cours.Count - 1
            Dim item = CurrentBenéficiaire.Crédits_en_Cours.Item(r).Num & ":   " & CurrentBenéficiaire.Crédits_en_Cours.Item(r)._Date.ToShortDateString & " " & CurrentBenéficiaire.Crédits_en_Cours.Item(r)._Date.ToShortTimeString & "    " & CurrentBenéficiaire.Crédits_en_Cours.Item(r).Nom_Complet & "    " & CurrentBenéficiaire.Crédits_en_Cours.Item(r).Valeur.ToString & "€"
            If CurrentBenéficiaire.Crédits_en_Cours.Item(r).NumFactureSV > 0 Then
                item = item & "    (FSE " & CurrentBenéficiaire.Crédits_en_Cours.Item(r).NumFactureSV.ToString & ")"
            End If
            If CurrentBenéficiaire.Crédits_en_Cours.Item(r).NumFactureVenteDirecte > 0 Then
                item = item & "    (VD " & CurrentBenéficiaire.Crédits_en_Cours.Item(r).NumFactureVenteDirecte.ToString & ")"
            End If
            Crédits_ListBox.Items.Add(item)
        Next

        Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
        chargement_historique_facture_en_cours = False
    End Sub

    Private Sub Histo_Afficher__reprise_CheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles Histo_Afficher__reprise_CheckBox.CheckedChanged
        If CurrentBenéficiaire.G101C8 <> "" Then
            affiche_histo_facture()
        End If
    End Sub


    Private Sub affiche_détail_facture(ByVal Dossier_patient_Factures_DataGridView_CurrentRow_Index As Integer)
        If Dossier_patient_Factures_DataGridView.Rows.Count = 0 Then
            Exit Sub
        End If
        Dossier_patient_Factures_Détails_DataGridView.Rows.Clear()
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentRow.Index).Value = "SV" Then
            Dim actes_fact = Me.ActesTableAdapter.GetDataByNumFacturesSV(Val(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView_CurrentRow_Index).Value).ToString)
            For r = 0 To actes_fact.Rows.Count - 1
                Dossier_patient_Factures_Détails_DataGridView.Rows.Add()
            Next
            For r = 0 To actes_fact.Rows.Count - 1
                Dossier_patient_Factures_Détails_DataGridView.Item(Dossier_patient_Factures_DataGridView_Désignation.Index, r).Value = actes_fact.Item(r).Désignation
                Dossier_patient_Factures_Détails_DataGridView.Item(Dossier_patient_Factures_DataGridView_Quantité.Index, r).Value = actes_fact.Item(r).Quantité
                Dossier_patient_Factures_Détails_DataGridView.Item(Dossier_patient_Factures_DataGridView_total.Index, r).Value = actes_fact.Item(r).Total
                Dossier_patient_Factures_Détails_DataGridView.Item(Dossier_patient_Factures_DataGridView_NumLigne.Index, r).Value = actes_fact.Item(r).Ligne_Facture_SV
            Next
        Else
            Dim actes_fact = Me.ActesTableAdapter.GetDataBy_NumFactureVenteDirecte(Val(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView_CurrentRow_Index).Value).ToString)
            For r = 0 To actes_fact.Rows.Count - 1
                Dossier_patient_Factures_Détails_DataGridView.Rows.Add()
            Next
            For r = 0 To actes_fact.Rows.Count - 1
                Dossier_patient_Factures_Détails_DataGridView.Item(Dossier_patient_Factures_DataGridView_Désignation.Index, r).Value = actes_fact.Item(r).Désignation
                Dossier_patient_Factures_Détails_DataGridView.Item(Dossier_patient_Factures_DataGridView_Quantité.Index, r).Value = actes_fact.Item(r).Quantité
                Dossier_patient_Factures_Détails_DataGridView.Item(Dossier_patient_Factures_DataGridView_total.Index, r).Value = actes_fact.Item(r).Total
                Dossier_patient_Factures_Détails_DataGridView.Item(Dossier_patient_Factures_DataGridView_NumLigne.Index, r).Value = actes_fact.Item(r).Ligne_Facture_SV
            Next
        End If

        Dossier_patient_Factures_Détails_FlowLayoutPanel.Controls.Clear()
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView_CurrentRow_Index).Value = "SV" Then


            Dim file As String = ""
            file = Dir(Config.LocalNetwork_ServerName & "\scor\doc\" & Val(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView_CurrentRow_Index).Value).ToString & "_*_*.pdf")
            Dim i = 0
            While file <> ""
                Dim Newlinklabel As New LinkLabel
                Newlinklabel.Text = file
                Newlinklabel.Name = "linklabel" & i.ToString
                Newlinklabel.LinkColor = System.Drawing.Color.Blue
                Newlinklabel.ActiveLinkColor = Color.Blue
                Newlinklabel.Width = 150

                AddHandler Newlinklabel.Click, AddressOf show_doc

                Dossier_patient_Factures_Détails_FlowLayoutPanel.Controls.Add(Newlinklabel)

                'Dossier_patient_Factures_Détails_FlowLayoutPanel.Controls.Add(Newlinklabel)


                file = Dir()
            End While
        End If
    End Sub

    Private Sub show_doc(ByVal sender As Object, ByVal e As System.EventArgs)
        Process.Start(Config.LocalNetwork_ServerName & "\scor\doc\" & sender.text)

    End Sub


    Private Sub affiche_données_facturation(ByVal num_facture As Double)


        Dim fact = Me.FacturesTableAdapter.GetFactureDataByNum1(num_facture).Item(0)
        Dim lignes_fact = Me.Facture_LigneFactureTableAdapter1.GetDataByNumFacture(num_facture.ToString)
        With Dossier_patient_Factures_Détails2_RichTextBox
            .Clear()
            If fact.Reprise_Facture_Num > 0 Then
                .AppendText("FACTURE DE REPRISE (facture initiale " & fact.Reprise_Facture_Num.ToString & ")" & vbCrLf)
            End If
            .AppendText("N° de facture: " & num_facture)
            .AppendText("   Date d’élaboration: " & Mid(fact.G1110C3, 7, 2) & "/" & Mid(fact.G1110C3, 5, 2) & "/" & Mid(fact.G1110C3, 1, 4))
            .AppendText(Chr(10) & Chr(10) & "Code régime " & fact.G1310C1 & Chr(10) & "Caisse gestionnaire " & fact.G1310C2 & Chr(10) & "Centre gestionnaire " & fact.G1310C3)
            If fact.G1321C2 <> "" Then
                .AppendText(Chr(10) & "Organisme Complémentaire " & fact.G1321C2)
            End If
            Select Case fact.G1410C1
                Case "1"
                    .AppendText(Chr(10) & Chr(10) & "paiement à l’assuré")
                Case "3"
                    .AppendText(Chr(10) & Chr(10) & "tiers payant sur les parts obligatoire et complémentaire")
                Case "2", "5"
                    .AppendText(Chr(10) & Chr(10) & "tiers payant sur la part obligatoire seule")
                Case "4"
                    .AppendText(Chr(10) & Chr(10) & "tiers payant sur la part complémentaire seule")
            End Select
            .AppendText(Chr(10))
            If fact.G1511C1 <> "" Then
                .AppendText(Chr(10) & "Date d’accident de droit commun: " & Mid(fact.G1511C1, 7, 2) & "/" & Mid(fact.G1511C1, 5, 2) & "/" & Mid(fact.G1511C1, 1, 4))
            End If
            If fact.G1512C1 <> "" Then
                .AppendText(Chr(10) & "Date de maternité: " & Mid(fact.G1512C1, 7, 2) & "/" & Mid(fact.G1512C1, 5, 2) & "/" & Mid(fact.G1512C1, 1, 4))
            End If
            If fact.G1513C1 <> "" Then
                .AppendText(Chr(10) & "Date d’accident du travail: " & Mid(fact.G1513C1, 7, 2) & "/" & Mid(fact.G1513C1, 5, 2) & "/" & Mid(fact.G1513C1, 1, 4))
            End If
            If fact.G1513C2 <> "" Then
                .AppendText(Chr(10) & "N° d’accident du travail: " & fact.G1513C2 & " " & fact.G1513C3)
            End If
            If fact.G1515C1 <> "" Then
                .AppendText(Chr(10) & "Montant de la prise en charge pour Soins Medicaux Gratuits: " & (Val(fact.G1515C1) / 100).ToString & "€")
            End If
            .AppendText(Chr(10) & "Nombre de prestations " & fact.G1910C1.ToString)
            .AppendText(Chr(10) & "Total des montants facturés " & (Val(fact.G1910C2) / 100).ToString & "€")
            .AppendText(Chr(10) & "Total remboursable par l’AMO " & (Val(fact.G1910C3) / 100).ToString & "€")
            .AppendText(Chr(10) & "Total participation assuré " & (Val(fact.G1910C4) / 100).ToString & "€")
            If fact.G1910C5 <> 0 Then
                .AppendText(Chr(10) & "Total théorique remboursable de la part complémentaire" & (Val(fact.G1910C5) / 100).ToString & "€")
            End If
            If fact.G1910C6 <> 0 Then
                .AppendText(Chr(10) & "Total remboursable de la part complémentaire" & (Val(fact.G1910C6) / 100).ToString & "€")
            End If
            Select Case fact.ModeSecur
                Case "1"
                    .AppendText(Chr(10) & Chr(10) & "Mode de sécurisation: SESAM sans Vitale")
                Case "2"
                    .AppendText(Chr(10) & Chr(10) & "Mode de sécurisation: TLA")
                Case "3"
                    .AppendText(Chr(10) & Chr(10) & "Mode de sécurisation: SESAM-Vitale")
                Case "4"
                    .AppendText(Chr(10) & Chr(10) & "Mode de sécurisation: désynchronisée")
                Case "5"
                    .AppendText(Chr(10) & Chr(10) & "Mode de sécurisation: dégradée")
            End Select
            If fact.Num_Lot_FSE <> "" Then
                .AppendText(Chr(10) & "Lot " & fact.Num_Lot_FSE & ", " & Mid(fact.Date_Lot_FSE, 7, 2) & "/" & Mid(fact.Date_Lot_FSE, 5, 2) & "/" & Mid(fact.Date_Lot_FSE, 1, 4) & ", ")
                .AppendText(Teletransmission_MAIN.LotsTableAdapter.GetDataByRéférence(Val(fact.Num_Lot_FSE), "@@@@@@").Item(0).Etat)
            End If

            If fact.Num_Lot_DRE <> "" Then
                .AppendText(Chr(10) & "Lot " & fact.Num_Lot_DRE & ", " & Mid(fact.Date_Lot_DRE, 7, 2) & "/" & Mid(fact.Date_Lot_DRE, 5, 2) & "/" & Mid(fact.Date_Lot_DRE, 1, 4) & ", ")
                .AppendText(Teletransmission_MAIN.LotsTableAdapter.GetDataByRéférence(99999, fact.Num_Lot_DRE).Item(0).Etat)
            End If
            Dim retourAMO = False
            Dim retourAMC = False
            For Each rejet As PharmaDataSet.RSP_LIGNE_REJETRow In Teletransmission_MAIN.RSP_LIGNE_REJETTableAdapter.GetDataBy_numfactureAsInt_acquittement(num_facture, False)
                .AppendText(Chr(10) & Chr(10) & "Rejet part " & rejet.PART_CONCERNE & " codif:" & rejet.CODIFICATION & " " & rejet.LIBELLE)
                If rejet.PART_CONCERNE = "AMO" Then
                    retourAMO = True
                ElseIf rejet.PART_CONCERNE = "AMC" Then
                    retourAMC = True
                End If
            Next
            For Each rejet As PharmaDataSet.RSP_LIGNE_REJETRow In Teletransmission_MAIN.RSP_LIGNE_REJETTableAdapter.GetDataBy_numfactureAsInt_acquittement(num_facture, True)
                .AppendText(Chr(10) & Chr(10) & "Rejet acquitté part " & rejet.PART_CONCERNE & " codif:" & rejet.CODIFICATION & " " & rejet.LIBELLE)
                If rejet.PART_CONCERNE = "AMO" Then
                    retourAMO = True
                ElseIf rejet.PART_CONCERNE = "AMC" Then
                    retourAMC = True
                End If
            Next
            Dim numfacture_String = num_facture.ToString
            While numfacture_String.Length < 9
                numfacture_String = "0" & numfacture_String
            End While
            For Each paiement As PharmaDataSet.RSP_PaiementsRow In Teletransmission_MAIN.RSP_PaiementsTableAdapter.GetDataBy_NumFacture(numfacture_String)
                .AppendText(Chr(10) & Chr(10) & "Paiement part " & paiement.Part & " demandé:" & (CDec(paiement.Montant_Demandé) / 100).ToString & "€" _
                            & " payé:" & (CDec(paiement.Montant_Payé) / 100).ToString & "€")
                If paiement.Part = "AMO" Then
                    retourAMO = True
                ElseIf paiement.Part = "AMC" Then
                    retourAMC = True
                End If
            Next
            If retourAMO = False Then
                .AppendText(Chr(10) & Chr(10) & "AMO: pas de retour de transmission")
            End If
            If retourAMC = False Then
                .AppendText(Chr(10) & Chr(10) & "AMC: pas de retour de transmission")
            End If

        End With


    End Sub

    Private Sub affiche_détail_ligne(ByVal numFacture As Integer, ByVal numLigne As Integer)
        Dim ligne = Me.Facture_LigneFactureTableAdapter1.GetDataBy_NumFacture_NumLigne(numFacture.ToString, numLigne).Item(0)
        With Dossier_patient_Factures_Détails1_RichTextBox
            .Clear()
            .AppendText("Détail ligne:" & Chr(10) & "N° de la prestation: " & ligne.G1610C1 & "  " & "Date d’exécution: " & Mid(ligne.G1610C2, 7, 2) & "/" & Mid(ligne.G1610C2, 5, 2) & "/" & Mid(ligne.G1610C2, 1, 4))
            .AppendText(Chr(10) & "Code prestation: " & ligne.G1610C4)
            .AppendText(Chr(10) & "Montant des honoraires: " & (Val(ligne.G1610C6) / 100).ToString)

            Select Case ligne.G1610C7
                Case "D"
                    .AppendText(Chr(10) & "Qualificatif de la dépense: entente directe")
                Case "E"
                    .AppendText(Chr(10) & "Qualificatif de la dépense: exigence particulière")
                Case "F"
                    .AppendText(Chr(10) & "Qualificatif de la dépense: déplacement non prescrit")
                Case "G"
                    .AppendText(Chr(10) & "Qualificatif de la dépense: acte gratuit")
                Case "N"
                    .AppendText(Chr(10) & "Qualificatif de la dépense: acte non remboursable")
                Case "A"
                    .AppendText(Chr(10) & "Qualificatif de la dépense: dépassement autorisé")
                Case "M"
                    .AppendText(Chr(10) & "Qualificatif de la dépense: dépassement maîtrisé")
                Case "B"
                    .AppendText(Chr(10) & "Qualificatif de la dépense: dépassement autorisé et entente directe")
                Case "C"
                    .AppendText(Chr(10) & "Qualificatif de la dépense: dépassement maîtrisé et exigence particulière")
                Case "L"
                    .AppendText(Chr(10) & "Qualificatif de la dépense: prestation soumise à un accord de prise en charge SMG")
            End Select

            If ligne.G1610C9 <> "" Then
                .AppendText(Chr(10) & "Quantité: " & ligne.G1610C9)
            End If
            If ligne.G1610C10 <> "" Then
                .AppendText(Chr(10) & "Dénombrement: " & ligne.G1610C10)
            End If
            .AppendText(Chr(10) & "Prix unitaire: " & (Val(ligne.G1610C11) / 100).ToString)
            .AppendText(Chr(10) & "Base de remboursement: " & (Val(ligne.G1610C12) / 100).ToString)
            .AppendText(Chr(10) & "Taux applicable à la prestation: " & ligne.G1610C13)
            .AppendText(Chr(10) & "Montant remboursable par l’AMO: " & (Val(ligne.G1610C14) / 100).ToString)
            If Val(ligne.G1610C15) <> 0 Then
                .AppendText(Chr(10) & "Montant remboursable part AMC: " & (Val(ligne.G1610C15) / 100).ToString)
            End If
            If Val(ligne.G1610C16) <> 0 Then
                .AppendText(Chr(10) & "Montant de la majoration du Ticket Modérateur restant à la charge de l’assuré: " & (Val(ligne.G1610C16) / 100).ToString)
            End If
        End With


    End Sub


    Private Sub Dossier_patient_Factures_DataGridView_SelectionChanged(sender As Object, e As EventArgs) Handles Dossier_patient_Factures_DataGridView.SelectionChanged, Dossier_patient_Factures_DataGridView.CellClick
        If chargement_historique_facture_en_cours = True Then Exit Sub
        If Dossier_patient_Factures_DataGridView.CurrentCell Is Nothing Then Exit Sub
        If Dossier_patient_Factures_DataGridView.CurrentRow.Index < 0 Then Exit Sub
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value = "SV" Then
            Try
                affiche_détail_facture(Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex)
            Catch ex As Exception
            End Try
            Try
                affiche_données_facturation(Val(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value))
            Catch ex As Exception
            End Try
            Try
                affiche_détail_encaissement(Val(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value), 0)
            Catch ex As Exception
            End Try

        Else
            Dossier_patient_Factures_Détails2_RichTextBox.Clear()
            Try
                affiche_détail_facture(Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex)
            Catch ex As Exception
            End Try
            Try
                affiche_détail_encaissement(0, Val(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value))
            Catch ex As Exception
            End Try
        End If


    End Sub

    Private Sub affiche_détail_encaissement(ByVal numFSE As Decimal, ByVal numVD As Decimal)
        Dossier_patient_Factures_Détails_Encaissement_RichTextBox.Clear()
        Dossier_patient_Factures_Détails_Encaissement_Note_RichTextBox.Clear()

        Dim encaissements As PharmaDataSet.EncaissementsDataTable
        If numFSE <> 0 Then
            encaissements = BDD.EncaissementsTableAdapter.GetDataBy_NumFactureSV(numFSE)
        Else
            encaissements = BDD.EncaissementsTableAdapter.GetDataBy_NumFactureVenteDirecte(numVD)
        End If
        For r = 0 To encaissements.Rows.Count - 1
            If encaissements(r).Encaissement_sur_Crédit_Type = "" Then
                Dossier_patient_Factures_Détails_Encaissement_RichTextBox.AppendText(encaissements(r).Type & " " & encaissements(r).Valeur.ToString & "€" & vbCrLf)
            Else
                Dossier_patient_Factures_Détails_Encaissement_RichTextBox.AppendText(encaissements(r).Encaissement_sur_Crédit_Type & " " & encaissements(r).Encaissement_sur_Crédit_Valeur.ToString & "€ (regul crédit)" & vbCrLf)
            End If
            Dossier_patient_Factures_Détails_Encaissement_Note_RichTextBox.AppendText(encaissements(r).Note & vbCrLf)
            Dossier_patient_Factures_Détails_Encaissement_Note_CheckBox.Checked = encaissements(r).Note_rappel
        Next


    End Sub




    Private Sub Dossier_patient_Factures_Détails_DataGridView_SelectionChanged(sender As Object, e As EventArgs) Handles Dossier_patient_Factures_Détails_DataGridView.SelectionChanged, Dossier_patient_Factures_Détails_DataGridView.CellClick
        If Dossier_patient_Factures_Détails_DataGridView.CurrentRow Is Nothing Then Exit Sub
        If Val(Dossier_patient_Factures_Détails_DataGridView.Item(Dossier_patient_Factures_DataGridView_NumLigne.Index, Dossier_patient_Factures_Détails_DataGridView.CurrentRow.Index).Value) _
            = 0 Then Exit Sub

        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value = "SV" Then
            affiche_détail_ligne(Val(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value), _
                     Val(Dossier_patient_Factures_Détails_DataGridView.Item(Dossier_patient_Factures_DataGridView_NumLigne.Index, Dossier_patient_Factures_Détails_DataGridView.CurrentRow.Index).Value))

        End If

    End Sub
#End Region

#Region "DOSSIER PATIENT DU"

    Public Sub Affiche_dus()
        Dossier_Patient_Dus_DataGridView.Rows.Clear()
        Dim dus As officine.PharmaDataSet.DusDataTable
        If ComboBoxLECTURE_VITALE.Text <> "" Then
            dus = Me.DusTableAdapter.GetDataBy_Bénéficiaire(ComboBoxLECTURE_VITALE.Text, NirTextBox.Text)
            If dus.Rows.Count > 0 Then
                Dim présence_du_non_soldé As Boolean = False
                For r = 0 To dus.Rows.Count - 1
                    If dus.Item(r).Soldé = False Then
                        présence_du_non_soldé = True
                        Exit For
                    End If
                Next
                If présence_du_non_soldé = True Then
                    MyMsg_Box.Presentation("Officine !", "Produit(s) du(s) à ce patient", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                End If
            End If
        Else
            dus = Me.DusTableAdapter.GetData_top200
        End If

        For r = 0 To dus.Rows.Count - 1
            If Dossier_Patient_Dus_Affiche_soldés_CheckBox1.Checked = False Or dus(r).Soldé = False Then
                Dossier_Patient_Dus_DataGridView.Rows.Add()
            End If
        Next
        Dim index_datagrdview = 0
        For r = 0 To dus.Rows.Count - 1
            If Dossier_Patient_Dus_Affiche_soldés_CheckBox1.Checked = False Or dus(r).Soldé = False Then
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_CIP7.Index, index_datagrdview).Value = dus(r).CIP7
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Code.Index, index_datagrdview).Value = dus(r).CIP7
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_EAN13.Index, index_datagrdview).Value = dus(r).EAN13
                If dus(r).EAN13 <> "" Then
                    Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Code.Index, index_datagrdview).Value = dus(r).EAN13
                End If
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Désignation.Index, index_datagrdview).Value = dus(r).Désignation_Du
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Quantité_Du.Index, index_datagrdview).Value = dus(r).Quantité_Du
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Date_création.Index, index_datagrdview).Value = dus(r).Date_Création_Du
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Date_Délivrance.Index, index_datagrdview).Value = dus(r).Date_Délivrance_Du
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Code_Délivré.Index, index_datagrdview).Value = dus(r).EAN13_Délivré
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Désignation_Délivré.Index, index_datagrdview).Value = dus(r).Désignation_Délivré
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_qtité_Délivré.Index, index_datagrdview).Value = dus(r).Quantité_Déllivré
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_num_FSE.Index, index_datagrdview).Value = dus(r).Num_FSE
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_NumVD.Index, index_datagrdview).Value = dus(r).Num_Vente_Directe
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Note.Index, index_datagrdview).Value = dus(r).Note
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Soldé.Index, index_datagrdview).Value = dus(r).Soldé
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Bénéficiare.Index, index_datagrdview).Value = dus(r).Bénéficiaire
                Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_NIR.Index, index_datagrdview).Value = dus(r).NIR
                index_datagrdview = index_datagrdview + 1
            End If
        Next
    End Sub

    Private Sub Dossier_Patient_Dus_DataGridView_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles Dossier_Patient_Dus_DataGridView.CellDoubleClick
        Dim gestion_du_ As New gestion_du
        gestion_du_.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Bénéficiare.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value & "   " & Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_NIR.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
        gestion_du_.Code_Label.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Code.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
        gestion_du_.Designation_Label.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Désignation.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
        gestion_du_.Quantité_Label1.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Quantité_Du.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
        gestion_du_.Date_Label1.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Date_création.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value

        If Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Code_Délivré.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value <> "" Then 'du déja délivré
            gestion_du_.code_TextBox1.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Code_Délivré.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
            gestion_du_.Designation_TextBox2.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Désignation_Délivré.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
            gestion_du_.Quantité_TextBox.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_qtité_Délivré.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
        Else
            gestion_du_.code_TextBox1.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Code.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
            gestion_du_.Designation_TextBox2.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Désignation.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
            gestion_du_.Quantité_TextBox.Text = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Quantité_Du.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
        End If
        'If Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value Then


        If Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Date_création.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value <> Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Date_Délivrance.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value Then
            gestion_du_.DateTimePicker1.Value = Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Date_Délivrance.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value
        End If
        If Dossier_Patient_Dus_DataGridView.Item(Dossier_Patient_Dus_Soldé.Index, Dossier_Patient_Dus_DataGridView.CurrentRow.Index).Value = True Then
            gestion_du_.Solder_CheckBox1.Checked = True
        End If
        gestion_du_.ShowDialog()
    End Sub




    Private Sub Dossier_Patient_Dus_Affiche_soldés_CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles Dossier_Patient_Dus_Affiche_soldés_CheckBox1.Click
        Affiche_dus()
    End Sub
#End Region


#End Region









    Private Sub AMC_DateDebut_MaskedTextBox_Enter(sender As Object, e As EventArgs) Handles AMC_DateDebut_MaskedTextBox.Enter, AMC_DateDebut_MaskedTextBox.Click
        AMC_DateDebut_MaskedTextBox.SelectAll()

    End Sub
    Private Sub AMC_DateFin_MaskedTextBox_Enter(sender As Object, e As EventArgs) Handles AMC_DateFin_MaskedTextBox.Enter, AMC_DateFin_MaskedTextBox.Click
        AMC_DateFin_MaskedTextBox.SelectAll()

    End Sub


    Private Sub ImporterProduitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ImporterProduitToolStripMenuItem.Click
        Import_Produit_From_Vidal.ShowDialog()
    End Sub

    Public Sub affiche_user()
        user_Button.Text = current_User.ID
        If Not current_User.image Is Nothing Then
            user_Button.BackgroundImage = current_User.image
            user_Button.Font = New Font("Century Gothic", 10)
            user_Button.TextAlign = ContentAlignment.BottomRight
            user_Button.ForeColor = Color.Black
        Else
            user_Button.BackgroundImage = Nothing
            user_Button.Font = New Font("Century Gothic", 15)
            user_Button.TextAlign = ContentAlignment.MiddleCenter
            user_Button.ForeColor = Color.White

        End If
    End Sub

    Private Sub user_Button_Click(sender As Object, e As EventArgs) Handles user_Button.Click
        Dim my_USERS_Select As New USERS_Select
        my_USERS_Select.Location = New Point(Commandes_Panel.Location.X - 220, user_Button.Location.Y)
        my_USERS_Select.ShowDialog()
        affiche_user()

    End Sub

    Private Sub Vente_Scroll(sender As Object, e As ScrollEventArgs) Handles Vente.Scroll
        Première_Délivrance(True)
    End Sub


#Region "Pause"



    Private Sub Pause_Button_Click(sender As Object, e As EventArgs) Handles Pause_Button.Click

        Pauses.ShowDialog()
        Dim fichierPause As String = Config.LocalNetwork_ServerName & "\Factures\Pauses\" & ComboBoxLECTURE_VITALE.Text & " " & _
            Now.Day.ToString & " " & Now.Month.ToString & " " & Now.Year.ToString & " " & Now.Hour.ToString & "h" & Now.Minute.ToString & "m" & Now.Second.ToString
        If ComboBoxLECTURE_VITALE.Text = "" Then
            MyMsg_Box.Presentation("Officine !", "Veuillez renseigner béneficiaire.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        If My.Computer.FileSystem.FileExists(fichierPause) Then
            Exit Sub
        End If
        For Each contro As Control In Controls
            If contro.GetType Is GetType(GroupBox) Or contro.GetType Is GetType(Panel) Then
                For Each contr As Control In contro.Controls
                    If contr.GetType Is GetType(TextBox) Then ' Or contr.GetType Is GetType(ComboBox) Or contr.GetType Is GetType(MaskedTextBox) Then
                        Dim contr_ = CType(contr, TextBox)
                        My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Text & ";" & contr_.ReadOnly & Chr(10), True)
                    ElseIf contr.GetType Is GetType(Button) Then
                        Dim contr_ = CType(contr, Button)
                        My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Text & ";" & contr_.Enabled & Chr(10), True)
                    ElseIf contr.GetType Is GetType(ComboBox) Then
                        Dim contr_ = CType(contr, ComboBox)
                        My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Text & ";" & contr_.Enabled & Chr(10), True)
                    ElseIf contr.GetType Is GetType(MaskedTextBox) Then
                        Dim contr_ = CType(contr, MaskedTextBox)
                        My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Text & ";" & contr_.ReadOnly & Chr(10), True)
                    ElseIf contr.GetType Is GetType(CheckBox) Then
                        Dim contr_ = CType(contr, CheckBox)
                        My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Checked & ";" & contr_.Enabled & Chr(10), True)
                    ElseIf contr.GetType Is GetType(RadioButton) Then
                        Dim contr_ = CType(contr, RadioButton)
                        My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Checked & ";" & contr_.Enabled & Chr(10), True)
                    ElseIf contr.GetType Is GetType(DateTimePicker) Then
                        Dim contr_ = CType(contr, DateTimePicker)
                        My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Value.ToString & ";" & contr_.Enabled & Chr(10), True)
                    End If
                Next

            Else
                If contro.GetType Is GetType(TextBox) Then ' Or contr.GetType Is GetType(ComboBox) Or contr.GetType Is GetType(MaskedTextBox) Then
                    Dim contr_ = CType(contro, TextBox)
                    My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Text & ";" & contr_.ReadOnly & Chr(10), True)
                ElseIf contro.GetType Is GetType(Button) Then
                    Dim contr_ = CType(contro, Button)
                    My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Text & ";" & contr_.Enabled & Chr(10), True)
                ElseIf contro.GetType Is GetType(ComboBox) Then
                    Dim contr_ = CType(contro, ComboBox)
                    My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Text & ";" & contr_.Enabled & Chr(10), True)
                ElseIf contro.GetType Is GetType(MaskedTextBox) Then
                    Dim contr_ = CType(contro, MaskedTextBox)
                    My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Text & ";" & contr_.ReadOnly & Chr(10), True)
                ElseIf contro.GetType Is GetType(CheckBox) Then
                    Dim contr_ = CType(contro, CheckBox)
                    My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Checked & ";" & contr_.Enabled & Chr(10), True)
                ElseIf contro.GetType Is GetType(RadioButton) Then
                    Dim contr_ = CType(contro, RadioButton)
                    My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Checked & ";" & contr_.Enabled & Chr(10), True)
                ElseIf contro.GetType Is GetType(DateTimePicker) Then
                    Dim contr_ = CType(contro, DateTimePicker)
                    My.Computer.FileSystem.WriteAllText(fichierPause, contr_.Name & ";" & contr_.Value.ToString & ";" & contr_.Enabled & Chr(10), True)
                End If

            End If
        Next

        My.Computer.FileSystem.WriteAllText(fichierPause, Renouvellement_TextBox.Name & ";" & Renouvellement_TextBox.Text & ";True" & Chr(10), True)
        My.Computer.FileSystem.WriteAllText(fichierPause, RéférencedepriseenchargeToolStripTextBox.Name & ";" & RéférencedepriseenchargeToolStripTextBox.Text & ";True" & Chr(10), True)
        My.Computer.FileSystem.WriteAllText(fichierPause, MontantGlobalPriseEnchargeToolStripTextBox.Name & ";" & MontantGlobalPriseEnchargeToolStripTextBox.Text & ";True" & Chr(10), True)
        My.Computer.FileSystem.WriteAllText(fichierPause, "DATENAISSANCE" & CurrentBenéficiaire.G104C12 & Chr(10), True)
        My.Computer.FileSystem.WriteAllText(fichierPause, "RANGNAISSANCE" & CurrentBenéficiaire.G104C13 & Chr(10), True)
        My.Computer.FileSystem.WriteAllText(fichierPause, "QUALITE" & CurrentBenéficiaire.G104C14 & Chr(10), True)
        For Each row As DataGridViewRow In Vente.Rows
            For Each col As DataGridViewColumn In Vente.Columns
                Try
                    My.Computer.FileSystem.WriteAllText(fichierPause, "Vente:" & row.Index.ToString & ";" & col.Index.ToString & ";" & Vente.Item(col.Index, row.Index).Value.ToString & Chr(10), True)
                Catch ex As Exception
                End Try
            Next
        Next
        '____________________________________________________________________________________________________
        'Update Stock
        For i = 0 To Vente.RowCount - 1
            If Vente.Item(Vente_Stock_Suivi.Index, i).Value = True Then
                If Vente.Item(Vente_Stock_Suivi.Index, i).Value = True Then
                    If Vente.Item(VenteEAN13.Index, i).Value <> "" Then
                        Me.ProduitsTableAdapter.UpdateStock_By_CIP_CAB(Val(Vente.Item(VenteQuantité.Index, i).Value) * (-1), Vente.Item(VenteEAN13.Index, i).Value, Vente.Item(Ventecab.Index, i).Value)
                    ElseIf Vente.Item(VenteCIP.Index, i).Value <> "" Then
                        Me.ProduitsTableAdapter.UpdateStock_By_CIP_CAB(Val(Vente.Item(VenteQuantité.Index, i).Value) * (-1), Vente.Item(VenteCIP.Index, i).Value, Vente.Item(Ventecab.Index, i).Value)
                    ElseIf Vente.Item(Vente_produits.Index, i).Value <> "" And Vente.Item(VenteCodeActe.Index, i).Value = "" Then
                        Me.ProduitsTableAdapter.UpdateStock_by_Designation(Val(Vente.Item(VenteQuantité.Index, i).Value) * (-1), Vente.Item(Vente_produits.Index, i).Value)
                    End If
                End If
            End If
        Next
        '____________________________________________________________________________________________________
        ResetForm()

    End Sub

    Private Sub facture_load_pause(ByVal fichierPause As String)
        Try


            ReDim DP_Poso(200)
            ReDim DP_Rect(200)
            For i = 0 To 200
                DP_Poso(i) = ""
                DP_Rect(i) = ""
            Next
            DP_Carte_Vitale_lue = False
            DP_affichage_statut("Statut DP inconnu")
            DateFacture.Value = Now
            For i = 0 To ComboBoxLECTURE_VITALE.Items.Count - 1
                ComboBoxLECTURE_VITALE.Items.Remove(i)
            Next
            ComboBoxLECTURE_VITALE.Text = ""
            ClearGroupBox(AssuréGroupBox, True)
            ClearTabPage(Dossier_Patient_AMC_TabPage, False)
            PrescripteurMyCombobox.Text = ""
            TextBox_Prescripteur_NumID.Clear()
            TextBox_Prescripteur_NumRPPS.Clear()
            Prescripteur_Spécialité_TextBox.Clear()
            Médecin_Traitant_Label.Text = ""
            CurrentBeneficiaireRichTextBox.Clear()
            SGD_LibererSession(NumeroSessionVitale)
            If SGD_ReserverSession(0, NumeroSessionVitale) <> 0 Then
                MyMsg_Box.Presentation("Officine !", "ERREUR POUR LA RESERVATION DE SESSION VITALE", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
            End If
            PrescripteurMyCombobox.Text = ""
            While Vente.Rows.Count > 1
                Vente.Rows.RemoveAt(0)
            End While


            CurrentBenéficiaire.clear()
            CurrentFactureVitale.Clear(True)
            CurrentFactureVenteDirecte.Clear()

            ReDim tab_current_formule_STS(0)
            current_formule_STS.Clear()
            If Config.STS_Activer = False Then
                STSToolStripMenuItem.Enabled = False
                STS_ASSISTANCEToolStripMenuItem.Enabled = False
                STS_TARIFICATIONToolStripMenuItem.Enabled = False
            End If
            CurrentConvention.clear()

            OriginePrescriptionToolStripMenuItem.Checked = False
            PreventioncommuneAMOAMCToolStripMenuItem.Checked = False

            Date_part_complémentaire_Item_Date_Éxécution.Checked = True
            Date_part_complémentaire_Item_Date_Facturation.Checked = False
            Date_part_complémentaire_Item_Date_Prescription.Checked = False

            IAM_info_form = New IAM_Info

            If Not DP_list_Alrt_Prdt_deja_diffusées Is Nothing Then
                DP_list_Alrt_Prdt_deja_diffusées.Clear()
            End If
            DP_Affiche_Msg()

            Dim DATENAISSANCE As String = ""
            Dim RANGNAISSANCE As String = ""
            Dim QUALITE As String = ""
            Dim rd As New StreamReader(fichierPause)
            Dim line As String = rd.ReadLine
            While InStr(line, "Vente:") <> 1
                If InStr(line, "DATENAISSANCE") = 1 Then
                    DATENAISSANCE = Mid(line, "DATENAISSANCE".Length + 1)
                ElseIf InStr(line, "RANGNAISSANCE") = 1 Then
                    RANGNAISSANCE = Mid(line, "RANGNAISSANCE".Length + 1)
                ElseIf InStr(line, "QUALITE") = 1 Then
                    QUALITE = Mid(line, "QUALITE".Length + 1)
                Else

                    Dim control_name As String = Mid(line, 1, InStr(line, ";") - 1)
                    line = Mid(line, InStr(line, ";") + 1)
                    Dim control_value As String = Mid(line, 1, InStr(line, ";") - 1)
                    line = Mid(line, InStr(line, ";") + 1)
                    Dim enabled As Boolean = True
                    If line = "False" Then
                        enabled = False
                    End If

                    For Each contro As Control In Controls
                        If contro.GetType Is GetType(GroupBox) Or contro.GetType Is GetType(Panel) Then
                            For Each contr As Control In contro.Controls
                                If contr.Name = control_name Then
                                    If contr.GetType Is GetType(TextBox) Then ' contr.GetType Is GetType(ComboBox)  Then
                                        Dim contr_ = CType(contr, TextBox)
                                        contr_.Text = control_value
                                        contr_.ReadOnly = enabled
                                    ElseIf contr.GetType Is GetType(MaskedTextBox) Then
                                        Dim contr_ = CType(contr, MaskedTextBox)
                                        contr_.Text = control_value
                                        contr_.ReadOnly = enabled
                                    ElseIf contr.GetType Is GetType(Button) Then
                                        Dim contr_ = CType(contr, Button)
                                        contr_.Text = control_value
                                        contr_.Enabled = enabled
                                    ElseIf contr.GetType Is GetType(ComboBox) Then
                                        Dim contr_ = CType(contr, ComboBox)
                                        contr_.Text = control_value
                                        contr_.Enabled = enabled
                                    ElseIf contr.GetType Is GetType(CheckBox) Then
                                        Dim contr_ = CType(contr, CheckBox)
                                        If control_value = "True" Then
                                            contr_.Checked = True
                                        Else
                                            contr_.Checked = False
                                        End If
                                        contr_.Enabled = enabled
                                    ElseIf contr.GetType Is GetType(RadioButton) Then
                                        Dim contr_ = CType(contr, RadioButton)
                                        If control_value = "True" Then
                                            contr_.Checked = True
                                        Else
                                            contr_.Checked = False
                                        End If
                                        contr_.Enabled = enabled
                                    ElseIf contr.GetType Is GetType(DateTimePicker) Then
                                        Dim contr_ = CType(contr, DateTimePicker)
                                        contr_.Value = CDate(control_value)
                                        contr_.Enabled = enabled
                                    End If
                                End If
                            Next

                        Else
                            If contro.Name = control_name Then
                                If contro.GetType Is GetType(TextBox) Then ' contr.GetType Is GetType(ComboBox)  Then
                                    Dim contr_ = CType(contro, TextBox)
                                    contr_.Text = control_value
                                    contr_.ReadOnly = enabled
                                ElseIf contro.GetType Is GetType(MaskedTextBox) Then
                                    Dim contr_ = CType(contro, MaskedTextBox)
                                    contr_.Text = control_value
                                    contr_.ReadOnly = enabled
                                ElseIf contro.GetType Is GetType(Button) Then
                                    Dim contr_ = CType(contro, Button)
                                    contr_.Text = control_value
                                    contr_.Enabled = enabled
                                ElseIf contro.GetType Is GetType(ComboBox) Then
                                    Dim contr_ = CType(contro, ComboBox)
                                    contr_.Text = control_value
                                    contr_.Enabled = enabled
                                ElseIf contro.GetType Is GetType(CheckBox) Then
                                    Dim contr_ = CType(contro, CheckBox)
                                    If control_value = "True" Then
                                        contr_.Checked = True
                                    Else
                                        contr_.Checked = False
                                    End If
                                    contr_.Enabled = enabled
                                ElseIf contro.GetType Is GetType(RadioButton) Then
                                    Dim contr_ = CType(contro, RadioButton)
                                    If control_value = "True" Then
                                        contr_.Checked = True
                                    Else
                                        contr_.Checked = False
                                    End If
                                    contr_.Enabled = enabled
                                ElseIf contro.GetType Is GetType(DateTimePicker) Then
                                    Dim contr_ = CType(contro, DateTimePicker)
                                    contr_.Value = CDate(control_value)
                                    contr_.Enabled = enabled
                                End If
                            End If
                        End If
                    Next
                End If
                line = rd.ReadLine
            End While

            Dim lines As New List(Of String)
            While Not line Is Nothing
                'Vente:0;0;assurance
                'Vente:0;1;2,1
                'Vente:0;2;PSYLIA Pdr eff susp buv adulte 20Sach/6,9g
                If line <> "" Then
                    line = Mid(line, 7)
                    lines.Add(line)
                    line = rd.ReadLine
                End If
            End While

            Dim nmbre_de_lignes As Integer = 0

            For Each line_ In lines
                If CInt(Mid(line_, 1, InStr(line_, ";") - 1)) > nmbre_de_lignes Then
                    nmbre_de_lignes = CInt(Mid(line_, 1, InStr(line_, ";") - 1))
                End If
            Next
            For r = 1 To nmbre_de_lignes
                Vente.Rows.Add()
            Next
            For Each line_ In lines
                Dim num_row = CInt(Mid(line_, 1, InStr(line_, ";") - 1))
                line_ = Mid(line_, InStr(line_, ";") + 1)
                Dim num_col = CInt(Mid(line_, 1, InStr(line_, ";") - 1))
                line_ = Mid(line_, InStr(line_, ";") + 1)
                Dim value = line_
                Vente.Item(num_col, num_row).Value = value
            Next



            rd.Close()


            DatePrecription.Enabled = True
            DateExecution.Enabled = True
            recherche_prescripteur()

            CurrentBenéficiaire.G101C8 = NirTextBox.Text
            CurrentBenéficiaire.G104C12 = DATENAISSANCE
            CurrentBenéficiaire.G104C13 = RANGNAISSANCE
            CurrentBenéficiaire.G104C14 = QUALITE
            GetDataBénéficiaire()
            ModeSecur = "5"
            CheckBoxModeDegradé.Enabled = True
            CheckBoxModeDegradé.Checked = True
            ventetype_defaut = "assurance"
            'COMPTOIR_MAIN.Détail_Bénéficiaire_Button.Text = Choix_BénéficiaireDataGridView.Item(Nom.Index, Choix_BénéficiaireDataGridView.CurrentRow.Index).Value + " " + Choix_BénéficiaireDataGridView.Item(Prénom.Index, Choix_BénéficiaireDataGridView.CurrentRow.Index).Value
            afficheDonnéesAssuré()
            AMC_Piècejustificative_ComboBox.SelectedIndex = 0


            ''Assuré_détail_Button.Visible = True
            'Assuré_détail_Button.BackgroundImage = My.Resources.magnifying_glass2
            'Assuré_détail_Button.Tag = "D"
            DP_form = New DP
            DP_form.Affichage_histo_local()
            '____________________________________________________________________________________________________
            'Update Stock
            For i = 0 To Vente.RowCount - 1
                If Vente.Item(Vente_Stock_Suivi.Index, i).Value = True Then
                    If Vente.Item(VenteEAN13.Index, i).Value <> "" Then
                        Me.ProduitsTableAdapter.UpdateStock_By_CIP_CAB(Val(Vente.Item(VenteQuantité.Index, i).Value), Vente.Item(VenteEAN13.Index, i).Value, Vente.Item(Ventecab.Index, i).Value)
                    ElseIf Vente.Item(VenteCIP.Index, i).Value <> "" Then
                        Me.ProduitsTableAdapter.UpdateStock_By_CIP_CAB(Val(Vente.Item(VenteQuantité.Index, i).Value), Vente.Item(VenteCIP.Index, i).Value, Vente.Item(Ventecab.Index, i).Value)
                    ElseIf Vente.Item(Vente_produits.Index, i).Value <> "" And Vente.Item(VenteCodeActe.Index, i).Value = "" Then
                        Me.ProduitsTableAdapter.UpdateStock_by_Designation(Val(Vente.Item(VenteQuantité.Index, i).Value), Vente.Item(Vente_produits.Index, i).Value)
                    End If
                End If
            Next
            '____________________________________________________________________________________________________
            MyMsg_Box.Presentation("Officine !", fichierPause, False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            My.Computer.FileSystem.DeleteFile(fichierPause)
            Play_Button.PerformClick()
        Catch ex As Exception
            MyMsg_Box.Presentation("Officine !", ex.Message, False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
        End Try
    End Sub


    Private Sub Play_Button_Click(sender As Object, e As EventArgs) Handles Play_Button.Click
        Pauses_ListBox.Items.Clear()
        Dim files = My.Computer.FileSystem.GetFiles(Config.LocalNetwork_ServerName & "\Factures\Pauses\")
        For Each fil In files
            Pauses_ListBox.Items.Add(Mid(fil, InStrRev(fil, "\") + 1))
        Next
        Pauses_ListBox.Visible = True
    End Sub

    Private Sub Pauses_ListBox_Click(sender As Object, e As EventArgs) Handles Pauses_ListBox.Click
        If Not Pauses_ListBox.SelectedItem Is Nothing Then
            facture_load_pause(Config.LocalNetwork_ServerName & "\Factures\Pauses\" & Pauses_ListBox.SelectedItem)
        End If
        Pauses_ListBox.Visible = False
    End Sub


    Private Sub Pauses_ListBox_MouseLeave(sender As Object, e As EventArgs) Handles Pauses_ListBox.MouseLeave
        Pauses_ListBox.Visible = False
    End Sub



#End Region




    Private Sub CréerAyantDroitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CréerAyantDroitToolStripMenuItem.Click
        If CurrentBenéficiaire.G104C14 <> "00" And CurrentBenéficiaire.G104C14 <> "0" Then
            MyMsg_Box.Presentation("Officine !", "L'assuré " & ComboBoxLECTURE_VITALE.Text & " est un ayant droit", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        Dim CréerAyantDroit_form As New CréerAyantDroit
        CréerAyantDroit_form.Text = "Ayant droit pour " & ComboBoxLECTURE_VITALE.Text & "  " & NirTextBox.Text & " " & CléduNIRTextBox.Text
        CréerAyantDroit_form.ShowDialog()


    End Sub


    'Private Sub Vitale_Notes_perso_RichTextBox_TextChanged(sender As Object, e As EventArgs) Handles Vitale_Notes_perso_RichTextBox.TextChanged
    '    CurrentBenéficiaire.Notes_perso = Vitale_Notes_perso_RichTextBox.Text
    'End Sub


    'Private Sub Vitale_e_mail_TextBox_TextChanged(sender As Object, e As EventArgs) Handles Vitale_e_mail_TextBox.TextChanged
    '    CurrentBenéficiaire.e_mail = Vitale_e_mail_TextBox.Text
    'End Sub



    'Private Sub Vitale_adresse_TextBox_TextChanged(sender As Object, e As EventArgs) Handles Vitale_adresse_TextBox.TextChanged
    '    CurrentBenéficiaire.Adresse = Vitale_adresse_TextBox.Text
    'End Sub





    'Private Sub Vitale_téléphone_TextBox_TextChanged(sender As Object, e As EventArgs) Handles Vitale_téléphone_TextBox.TextChanged
    '    CurrentBenéficiaire.Téléphone = Vitale_téléphone_TextBox.Text
    'End Sub





    Private Sub Dossier_patient_Factures_Détails_DataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Dossier_patient_Factures_Détails_DataGridView.CellContentClick

    End Sub

    Private Sub Dossier_patient_Factures_Renouvellement_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Dossier_patient_Factures_Renouvellement_LinkLabel.LinkClicked

        'renouvellemnt de facture SV seulement
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value <> "SV" Then
            Try
                Dim NumFactureVD = CInt(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value)
                If BDD.EncaissementsTableAdapter.GetDataBy_NumFactureVenteDirecte(NumFactureVD).Item(0).Type = "Devis" Then
                    Reprise_Devis(NumFactureVD)

                End If
            Catch ex As Exception

            End Try
            Exit Sub
        End If


        Dossier_Patient_LinkLabel_LinkClicked(Nothing, Nothing)
        Application.DoEvents()

        'While Vente.Rows.Count > 0
        '    Vente.Rows.RemoveAt(0)
        'End While
        'Vente.Rows.Add()

        Dim num_facture = Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value

        If Me.FacturesTableAdapter.GetFactureDataByNum1(Val(num_facture)).Rows.Count = 0 Then
            MyMsg_Box.Presentation("Officine !", "Cette facture n'est plus dans la base de données.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        Dim facture = Me.FacturesTableAdapter.GetFactureDataByNum1(Val(num_facture)).Item(0)
        Dim lignes_facture = Me.Facture_LigneFactureTableAdapter1.GetDataByNumFacture(num_facture)
        Dim actes = Me.ActesTableAdapter.GetDataByNumFacturesSV(num_facture)

        'prescripteur
        Dim num_prescr As String = ""
        Dim date_prescr As String = ""
        If facture.G1211C1 <> "" Then
            num_prescr = facture.G1211C1 & facture.G1211C2
            date_prescr = facture.G1211C3
        ElseIf facture.G1213C1 <> "" Then
            num_prescr = facture.G1213C1 & facture.G1213C2
            date_prescr = facture.G1213C4
        ElseIf facture.G1214C1 <> "" Then
            num_prescr = facture.G1214C1 & facture.G1214C2
            date_prescr = facture.G1214C4
        End If
        PrescripteurMyCombobox.Text = num_prescr
        PrescripteurMyCombobox_Validated(Nothing, Nothing)
        Dim parsedDate As Date
        DateTime.TryParseExact(Mid(date_prescr, 1, 8), "yyyyMMdd", Nothing, DateTimeStyles.None, parsedDate)
        DatePrecription.Value = parsedDate

        Dim message_produits As String = ""

        If lignes_facture.Item(0).G1850C2 = "" Then
            Renouvellement_TextBox.Text = "1"
        Else
            Renouvellement_TextBox.Text = (Val(lignes_facture.Item(0).G1850C2) + 1).ToString
        End If
        Renouvellement_TextBox_Validated(Nothing, Nothing)

        'apiBlockInput(1)
        Vente_datagridview_auto_filling = True

        Vente.Focus()



        For r = 0 To actes.Rows.Count - 1
            Dim produit As String = ""

            If actes.Item(r).EAN13 <> "" Then
                produit = actes.Item(r).EAN13
            ElseIf actes.Item(r).CIP <> "" Then
                produit = actes.Item(r).CIP
            ElseIf actes.Item(r).Désignation <> "" Then
                produit = actes.Item(r).Désignation
            End If

            Dim p = BDD.ProduitsTableAdapter.Recherche_produit(produit).Rows.Count

            If InStr(produit, "Honoraire de Dispensation") <> 1 And InStr(produit, "Honoraire dispensation complexe") <> 1 Then

                If p = 1 Then


                    Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.Rows.Count - 1)
                    Dim quantité As Integer = actes.Item(r).Quantité
                    Dim typeacte As String = actes.Item(r).TypeActe

                    Dim combbx = CType(Vente.Item(VenteType.Index, Vente.CurrentRow.Index), DataGridViewComboBoxCell)
                    combbx.Value = combbx.Items(0)
                    'Vente.Item(VenteType.Index, 0).Value = typeacte
                    Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.CurrentRow.Index)
                    Valide_VenteCells = True
                    Vente_CellValidated(Nothing, Nothing)
                    Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value = produit
                    Vente.CurrentCell = Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index)
                    Valide_VenteCells = True
                    Vente_CellValidated(Nothing, Nothing)
                    'Vente.Item(VenteQuantité.Index, 0).Value = quantité

                    Vente.CurrentCell = Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index)
                    capslock_off()
                    Vente.BeginEdit(True)
                    SendKeys.Send(quantité.ToString)
                    SendKeys.Send("{ENTER}")
                    Application.DoEvents()

                ElseIf p = 0 Then
                    message_produits = message_produits & "Produit inconnu: " & actes.Item(r).Désignation & vbCrLf & vbCrLf
                ElseIf p > 1 Then
                    message_produits = message_produits & "Produit multiple: " & actes.Item(r).Désignation & vbCrLf & vbCrLf

                End If
            End If



        Next
        'apiBlockInput(0)
        Vente_datagridview_auto_filling = False
        Dim file = Dir(Config.LocalNetwork_ServerName & "\scor\doc\" & num_facture.ToString & "_*")
        Dim compteur = 0
        While file <> ""
            If InStr(file, "TKVT") = 0 Then

                Try
                    compteur = compteur + 1
                    Dim typepièce = Mid(file, InStrRev(file, " _") + 1)
                    typepièce = Mid(typepièce, 1, InStr(typepièce, ".pdf") - 1)
                    My.Computer.FileSystem.CopyFile(Config.LocalNetwork_ServerName & "\scor\doc\" & file, Config.LocalNetwork_ServerName & "\scor\doc\" & "Prescan" & Config.Idposte & Mid(file, InStr(file, "_")))
                    ScanOrdo.SCOR_PJTableAdapter.Insert("Prescan" & Config.Idposte & Mid(file, InStr(file, "_")), ScanOrdo.ID_PJ(compteur.ToString, typepièce), "A FINALISER", "PreScan" & Config.Idposte)

                Catch ex As Exception

                End Try

            End If
            file = Dir()
        End While
        Scor_Label_refresh()

        If message_produits <> "" Then
            MyMsg_Box.Presentation("Produits non ajoutés :", message_produits, False, "", False, "", True, "Ok")
            MyMsg_Box.ShowDialog()
        End If

    End Sub
    Private Sub Reprise_Devis(ByVal NumFactureVD)
        Dim actes = BDD.ActesTableAdapter.GetDataBy_NumFactureVenteDirecte(NumFactureVD.ToString)
        For r = 0 To actes.Rows.Count - 1
            Dim produit As String = ""

            If actes.Item(r).EAN13 <> "" Then
                produit = actes.Item(r).EAN13
            ElseIf actes.Item(r).CIP <> "" Then
                produit = actes.Item(r).CIP
            ElseIf actes.Item(r).Désignation <> "" Then
                produit = actes.Item(r).Désignation
            End If

            If InStr(produit, "Honoraire de Dispensation") <> 1 And InStr(produit, "Honoraire dispensation complexe") <> 1 Then
                Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.Rows.Count - 1)
                Dim quantité As Integer = actes.Item(r).Quantité
                Dim typeacte As String = actes.Item(r).TypeActe

                Dim combbx = CType(Vente.Item(VenteType.Index, Vente.CurrentRow.Index), DataGridViewComboBoxCell)
                combbx.Value = combbx.Items(0)
                'Vente.Item(VenteType.Index, 0).Value = typeacte
                Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.CurrentRow.Index)
                Valide_VenteCells = True
                Vente_CellValidated(Nothing, Nothing)
                Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value = produit
                Vente.CurrentCell = Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index)
                Valide_VenteCells = True
                Vente_CellValidated(Nothing, Nothing)
                'Vente.Item(VenteQuantité.Index, 0).Value = quantité

                Vente.CurrentCell = Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index)
                capslock_off()
                Vente.BeginEdit(True)
                SendKeys.Send(quantité.ToString)
                SendKeys.Send("{ENTER}")
                Application.DoEvents()


            End If


        Next
        Facture.Supprimer_VenteDirecte(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value, False, False, False)
        affiche_données_facturation(Val(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value))
        affiche_détail_facture(Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex)
        Dossier_Patient_LinkLabel_LinkClicked(Nothing, Nothing)

    End Sub
#Region "Liens utiles"



    Private Sub annuairegipcpsfrToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles annuairegipcpsfrToolStripMenuItem.Click
        Process.Start("http://annuaire.gip-cps.fr/")
    End Sub


    Private Sub EspaceproamelifrToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EspaceproamelifrToolStripMenuItem.Click
        Process.Start("https://espacepro.ameli.fr")
    End Sub
#End Region









    Private Sub Encaissement_attente_LinkLabel_Click(sender As Object, e As EventArgs) Handles Encaissement_attente_LinkLabel.Click
        If InStr(Encaissement_attente_LinkLabel.Text, "Reprise Fact ") = 1 Then
            Exit Sub
        End If
        Vente.CurrentCell = Vente.Item(0, 0) '<-- évite une errreur de revalidation de champs supprimmés lorsqu'on valide l'encaissement
        VenteForm.ShowDialog()
    End Sub

    Private Sub Vente_RowValidating(sender As Object, e As DataGridViewCellCancelEventArgs) Handles Vente.RowValidating
        If Vente.Item(VentePrix.Index, e.RowIndex).Value Is Nothing Then
            e.Cancel = False
        ElseIf Val(Vente.Item(VentePrix.Index, e.RowIndex).Value) = 0 Then
            e.Cancel = False
            'ElseIf Vente.Item(VenteQuantité.Index, e.RowIndex).Value Is Nothing Then
            '    e.Cancel = False
            'ElseIf Vente.Item(VenteQuantité.Index, e.RowIndex).Value = "" Then
            '    e.Cancel = False
        ElseIf Vente.Item(VenteTotal.Index, e.RowIndex).Value Is Nothing Then
            e.Cancel = False
        ElseIf Val(Vente.Item(VenteTotal.Index, e.RowIndex).Value) = 0 Then
            e.Cancel = False
        End If

        If String.IsNullOrEmpty(Vente.Item(VenteTotal.Index, e.RowIndex).Value) And e.RowIndex >= 0 And Not String.IsNullOrEmpty(Vente.Item(VenteDésignation.Index, e.RowIndex).Value) Then
            Vente.CurrentCell = Vente.Item(VenteQuantité.Index, e.RowIndex)

            Vente.BeginEdit(True)
            e.Cancel = True

        End If

    End Sub


#Region "AVANCES"

    Private Sub Avances_Button_Click(sender As Object, e As EventArgs) Handles Avances_Button.Click
        If CurrentBenéficiaire.G104C1 = "" Or CurrentBenéficiaire.G104C3 = "" Or CurrentBenéficiaire.G101C8 = "" Then
            MyMsg_Box.Presentation("Officine !", "Données de l'assuré insufisantes pour enregistrer une avance", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        For r = 0 To Vente.Rows.Count - 1
            If Vente.Item(VenteEAN13.Index, r).Value <> "" Or Vente.Item(Ventecab.Index, r).Value <> "" Then
                Me.Avances_ProduitTableAdapter.Insert((Me.Avances_ProduitTableAdapter.SELECT_max_num + 1), Now, current_User.ID, Vente.Item(Vente_produits.Index, r).Value, _
                                                      Vente.Item(VenteEAN13.Index, r).Value, Vente.Item(Ventecab.Index, r).Value, Val(Vente.Item(VenteQuantité.Index, r).Value), False, _
                 CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G104C1, CurrentBenéficiaire.G104C3, Now)
                If Vente.Item(Vente_Stock_Suivi.Index, r).Value = True Then
                    Me.ProduitsTableAdapter.UpdateStock_By_CIP_CAB((-1) * Val(Vente.Item(VenteQuantité.Index, r).Value), Vente.Item(VenteEAN13.Index, r).Value, Vente.Item(Ventecab.Index, r).Value)
                End If
            End If
        Next
        PictureBox2_Click(Nothing, Nothing)
    End Sub

    Public Sub affiche_Avances(ByVal show_message As Boolean)

        If Avances_DataGridView.Rows.Count > 0 Then
            For r = Avances_DataGridView.Rows.Count - 1 To 0 Step (-1)
                Avances_DataGridView.Rows.RemoveAt(r)
            Next
        End If
        If CurrentBenéficiaire.G101C8 = "" Then
            Exit Sub
        End If
        Dim avances = Me.Avances_ProduitTableAdapter.GetDataBy_Nir(CurrentBenéficiaire.G101C8)
        If avances.Rows.Count > 0 Then
            For r = 0 To avances.Rows.Count - 1
                If Avances_CheckBox.Checked = True Then
                    If avances.Item(r).Soldé = False Then
                        Avances_DataGridView.Rows.Add()
                    End If
                Else
                    Avances_DataGridView.Rows.Add()
                End If
            Next
            Dim row_index As Integer = 0
            For r = 0 To avances.Rows.Count - 1
                If Avances_CheckBox.Checked = True Then
                    If avances.Item(r).Soldé = False Then
                        Avances_DataGridView.Item(Avances_Date.Index, row_index).Value = avances.Item(r)._Date
                        Avances_DataGridView.Item(Avances_Poduit_designation.Index, row_index).Value = avances.Item(r).Poduit_designation
                        Avances_DataGridView.Item(Avances_Quantité.Index, row_index).Value = avances.Item(r).Quantité
                        Avances_DataGridView.Item(Avances_opérateur.Index, row_index).Value = avances.Item(r).opéprateur
                        Avances_DataGridView.Item(Avances_CIP.Index, row_index).Value = avances.Item(r).Produit_CIP
                        Avances_DataGridView.Item(Avances_CAB.Index, row_index).Value = avances.Item(r).Produit_CAB
                        Avances_DataGridView.Item(Avances_Nom.Index, row_index).Value = avances.Item(r).Nom
                        Avances_DataGridView.Item(Avances_Prénom.Index, row_index).Value = avances.Item(r).Prénom
                        Avances_DataGridView.Item(Avances_num.Index, row_index).Value = avances.Item(r).Num
                        row_index = row_index + 1
                    End If
                Else
                    Avances_DataGridView.Item(Avances_Date.Index, row_index).Value = avances.Item(r)._Date
                    Avances_DataGridView.Item(Avances_Poduit_designation.Index, row_index).Value = avances.Item(r).Poduit_designation
                    Avances_DataGridView.Item(Avances_Quantité.Index, row_index).Value = avances.Item(r).Quantité
                    Avances_DataGridView.Item(Avances_opérateur.Index, row_index).Value = avances.Item(r).opéprateur
                    Avances_DataGridView.Item(Avances_CIP.Index, row_index).Value = avances.Item(r).Produit_CIP
                    Avances_DataGridView.Item(Avances_CAB.Index, row_index).Value = avances.Item(r).Produit_CAB
                    Avances_DataGridView.Item(Avances_Nom.Index, row_index).Value = avances.Item(r).Nom
                    Avances_DataGridView.Item(Avances_Prénom.Index, row_index).Value = avances.Item(r).Prénom
                    Avances_DataGridView.Item(Avances_num.Index, row_index).Value = avances.Item(r).Num
                    If avances.Item(r).Soldé = True Then
                        Avances_DataGridView.Item(Avances_Soldé_date.Index, row_index).Value = avances.Item(r).Soldé_date
                    End If
                    row_index = row_index + 1
                End If
            Next




        End If

        If show_message = True Then
            For r = 0 To Avances_DataGridView.Rows.Count - 1
                Try
                    If Avances_DataGridView.Item(Avances_Soldé_date.Index, r).Value = "" Then
                        MyMsg_Box.Presentation("Officine !", "Produits avancés à régulariser", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        Exit For
                    End If
                Catch ex As Exception

                End Try
            Next
        End If

    End Sub


    Private Sub Avances_DataGridView_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles Avances_DataGridView.CellClick
        If Avances_DataGridView.Rows.Item(Avances_DataGridView.CurrentRow.Index).DefaultCellStyle.ForeColor <> Color.Green Then
            Avances_DataGridView.Rows.Item(Avances_DataGridView.CurrentRow.Index).DefaultCellStyle.ForeColor = Color.Green
        Else
            Avances_DataGridView.Rows.Item(Avances_DataGridView.CurrentRow.Index).DefaultCellStyle.ForeColor = System.Drawing.Color.Black
        End If
        Application.DoEvents()
    End Sub

    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
        Avances_Régulariser()
    End Sub


    Private Sub Avances_Régulariser()
        If Avances_DataGridView.Rows.Count = 0 Then Exit Sub

        apiBlockInput(1)
        Try



            Dossier_Patient_LinkLabel_LinkClicked(Nothing, Nothing)
            Application.DoEvents()
            If Vente.Item(Vente_produits.Index, Vente.Rows.Count - 1).Value <> "" Then
                MyMsg_Box.Presentation("Officine !", "Vous devez valider la dernière ligne de vente avant de regulariser des produits.", False, "", False, "", True, "OK")
            End If
            Vente_datagridview_auto_filling = True

            Vente.Focus()
            For r = 0 To Avances_DataGridView.Rows.Count - 1

                If Avances_DataGridView.Rows.Item(r).DefaultCellStyle.ForeColor = Color.Green Then
                    Me.ProduitsTableAdapter.UpdateStock_By_CIP_CAB(Val(Avances_DataGridView.Item(Avances_Quantité.Index, r).Value), _
                                                         Avances_DataGridView.Item(Avances_CIP.Index, r).Value, _
                                                         Avances_DataGridView.Item(Avances_CAB.Index, r).Value)
                    ''''''''''''''''''''''''''''''
                    Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.Rows.Count - 1)
                    Dim quantité As Integer = CInt(Avances_DataGridView.Item(Avances_Quantité.Index, r).Value)
                    'Dim typeacte As String = actes.Item(r).TypeActe

                    Dim combbx = CType(Vente.Item(VenteType.Index, Vente.CurrentRow.Index), DataGridViewComboBoxCell)
                    combbx.Value = combbx.Items(0)
                    'Vente.Item(VenteType.Index, 0).Value = typeacte
                    Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.CurrentRow.Index)
                    Valide_VenteCells = True
                    Vente_CellValidated(Nothing, Nothing)
                    Dim produit As String
                    If Avances_DataGridView.Item(Avances_CIP.Index, r).Value <> "" Then
                        produit = Avances_DataGridView.Item(Avances_CIP.Index, r).Value
                    ElseIf Avances_DataGridView.Item(Avances_CAB.Index, r).Value <> "" Then
                        produit = Avances_DataGridView.Item(Avances_CAB.Index, r).Value
                    Else
                        produit = Avances_DataGridView.Item(Avances_Poduit_designation.Index, r).Value
                    End If
                    Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value = produit
                    Vente.CurrentCell = Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index)
                    Valide_VenteCells = True
                    Vente_CellValidated(Nothing, Nothing)
                    'Vente.Item(VenteQuantité.Index, 0).Value = quantité

                    Vente.CurrentCell = Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index)
                    capslock_off()
                    Vente.BeginEdit(True)
                    SendKeys.Send(quantité.ToString)
                    SendKeys.Send("{ENTER}")
                    Application.DoEvents()
                    '''''''''''''''''''''''''''''''''''''''''''''''''''''''
                    'Dim vente_row = Vente.Rows.Count - 1
                    'Vente.CurrentCell = Vente.Item(Vente_produits.Index, vente_row)
                    'If Avances_DataGridView.Item(Avances_CIP.Index, r).Value <> "" Then
                    '    Vente.CurrentCell.Value = Avances_DataGridView.Item(Avances_CIP.Index, r).Value
                    'ElseIf Avances_DataGridView.Item(Avances_CAB.Index, r).Value <> "" Then
                    '    Vente.CurrentCell.Value = Avances_DataGridView.Item(Avances_CAB.Index, r).Value
                    'Else
                    '    Vente.CurrentCell.Value = Avances_DataGridView.Item(Avances_Poduit_designation.Index, r).Value
                    'End If

                    'Vente_CellValidated(Nothing, Nothing)

                    'Vente.Focus()
                    'SendKeys.Send("{HOME}")
                    'For c = 1 To VenteQuantité.Index
                    '    SendKeys.Send("{RIGHT}")
                    'Next
                    'capslock_off()
                    'Vente.BeginEdit(True)
                    'SendKeys.Send(Avances_DataGridView.Item(Avances_Quantité.Index, r).Value)
                    'Vente.Focus()
                    'SendKeys.Send("{ENTER}")
                    'Application.DoEvents()
                    'Vente.Focus()
                    'SendKeys.Send("{HOME}")
                    'SendKeys.Send("{RIGHT}")

                    Me.Avances_ProduitTableAdapter.Régularisation(Now, Avances_DataGridView.Item(Avances_num.Index, r).Value)

                End If
            Next

            affiche_Avances(False)
            Vente_datagridview_auto_filling = False
        Catch ex As Exception
            Dus_Avances_Warning_hide = False
            MyMsg_Box.Presentation("Officine", "Erreur chargement produit!", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            'Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
            'apiBlockInput(0)
        End Try
        Dus_Avances_Warning_hide = False
        'Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
        apiBlockInput(0)
    End Sub

    Private Sub Avances_CheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles Avances_CheckBox.CheckedChanged
        affiche_Avances(False)
    End Sub

#End Region





    Private Sub AMC_Enregistrer_LinkLabel_show(sender As Object, e As KeyEventArgs) Handles MUT_NumMutuelle_TextBox.KeyDown, AMC_NumAMC_TextBox.KeyDown, AMC_DateDebut_MaskedTextBox.KeyDown, _
        AMC_DateFin_MaskedTextBox.KeyDown, AMC_Numadhérent_TextBox.KeyDown
        AMC_Enregistrer_LinkLabel.Text = "Enregistrer les modifications"
        AMC_Enregistrer_LinkLabel.Visible = True
    End Sub



    'AMC type contrat
    Private Sub Button_AMC_choix_type_contrat_Click(sender As Object, e As EventArgs) Handles Button_AMC_choix_type_contrat.Click



        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim my_Choix_AMC_TypeContrat As New Choix_AMC_TypeContrat
        my_Choix_AMC_TypeContrat.Text = ComboBoxLECTURE_VITALE.Text
        my_Choix_AMC_TypeContrat.ShowDialog() 'dans ce formulaire je modifie la valeur de CurrentBenéficiaire.AMC_TypeContrat
        Dim mydatatable As DataTable = Me.AMC_Contrat_TypeTableAdapter.GetDataById(CurrentBenéficiaire.AMC_TypeContrat)
        If mydatatable.Rows.Count = 1 Then
            For c = 0 To mydatatable.Columns.Count - 1
                Select Case mydatatable.Columns.Item(c).ColumnName
                    Case "Intitulé"
                        AMC_Couverture_TextBox.Text = mydatatable(0).Item(c)
                End Select
            Next
        End If
    End Sub





    Private Sub RejetsToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles RejetsToolStripMenuItem1.Click
        Rejets_Paiements.Visible = True
    End Sub



    Private Sub Dossier_patient_Factures_Impression_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Dossier_patient_Factures_Impression_LinkLabel.LinkClicked
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value = "SV" Then
            VenteForm.impime_quittance_AMC(CInt(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value), 0)
        Else
            VenteForm.impime_quittance_AMC(0, CInt(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value))
        End If
    End Sub

    Private Sub RetrocessionToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RetrocessionToolStripMenuItem.Click
        If RetrocessionToolStripMenuItem.Checked = True Then
            InteractionToolStripMenuItem.Checked = False
        End If
    End Sub

    Private Sub reduce_PictureBox_MouseHover(sender As Object, e As EventArgs) Handles reduce_PictureBox.MouseHover
        ToolTip1.SetToolTip(reduce_PictureBox, "REDUIRE LE FORMULAUIRE DE VENTE")
    End Sub

    Private Sub RechercheProduits_KeyUp(sender As Object, e As KeyEventArgs) Handles RechercheProduits_Datagridview.KeyUp
        If e.KeyCode = Keys.Escape Then
            RechercheProduits_Panel.Visible = False
            Vente.Visible = True
            Vente.Focus()
        End If
    End Sub

    Private Sub Dossier_patient_Factures_EncaissementPartsRejetées_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Dossier_patient_Factures_EncaissementPartsRejetées_LinkLabel.LinkClicked
        Dim num_facture = CInt(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value)

        For Each rejet As PharmaDataSet.RSP_LIGNE_REJETRow In Teletransmission_MAIN.RSP_LIGNE_REJETTableAdapter.GetDataBy_numfactureAsInt_acquittement(num_facture, False)
            Dim facture_row = BDD.FacturesTableAdapter.GetFactureDataByNum1(CDec(rejet.NumFacture)).Item(0)
            Dim montant As Decimal
            Select Case rejet.PART_CONCERNE
                Case "AMO"
                    montant = CDec(facture_row.G1910C3) / 100
                Case "AMC"
                    montant = CDec(facture_row.G1910C6) / 100
            End Select
            MyMsg_Box.Presentation("Officine ?", "Voulez vous mettre la somme rejetée par l'organisme en crédit client?" & vbCrLf & vbCrLf & _
                                   "Facture num " & rejet.NumFacture & vbCrLf & "Part concernée : " & rejet.PART_CONCERNE & vbCrLf _
                                   & rejet.LIBELLE & vbCrLf & rejet.INFORMATION_COMPLEMENTAIRE & vbCrLf & vbCrLf & montant.ToString & "€", True, "OUI", True, "NON", True, "modif montant")
            Select Case MyMsg_Box.ShowDialog
                Case Windows.Forms.DialogResult.Yes
                    Dim bénéficiaire As String = ComboBoxLECTURE_VITALE.Text
                    Dim num_encaissement As Integer = BDD.EncaissementsTableAdapter.Select_Max_Num + 1
                    BDD.EncaissementsTableAdapter.Insert(num_encaissement, "Crédit", montant, num_facture, _
                                                    0, Now.ToString(), Now, "", bénéficiaire, 0, False, num_encaissement, "La somme rejetée par l'organisme a été mise en crédit client", False, 0)
                    Dim num_fact_strg = num_facture.ToString
                    While num_fact_strg.Length < 9
                        num_fact_strg = "0" & num_fact_strg
                    End While
                    BDD.RSP_LIGNE_REJETTableAdapter.Update_Acquitement(True, num_fact_strg, rejet.PART_CONCERNE)
                    affiche_histo_facture()

                Case Windows.Forms.DialogResult.Cancel
                    Try
                        montant = CDec(Replace(InputBox("Montant à metrre en crédit?", "Encaissement rejets"), ".", ","))
                        If montant = 0 Then
                            MyMsg_Box.Presentation("Officine !", "ABANDON DE L'OPERATION", False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                            Exit Sub
                        End If
                    Catch ex As Exception
                        MyMsg_Box.Presentation("Officine !", "Montant saisi erroné, ABANDON DE L'OPERATION", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                        Exit Sub
                    End Try
                    Dim bénéficiaire As String = ComboBoxLECTURE_VITALE.Text
                    Dim num_encaissement As Integer = BDD.EncaissementsTableAdapter.Select_Max_Num + 1
                    BDD.EncaissementsTableAdapter.Insert(num_encaissement, "Crédit", montant, num_facture, _
                                                    0, Now.ToString(), Now, "", bénéficiaire, 0, False, num_encaissement, montant.ToString & "€ mis en crédit client", False, 0)
                    Dim num_fact_strg = num_facture.ToString
                    While num_fact_strg.Length < 9
                        num_fact_strg = "0" & num_fact_strg
                    End While
                    BDD.RSP_LIGNE_REJETTableAdapter.Update_Acquitement(True, num_fact_strg, rejet.PART_CONCERNE)
                    If rejet.PART_CONCERNE = "AMO" Then
                        BDD.FacturesTableAdapter.Set_Part_AMO_payée(True, num_facture)
                    ElseIf rejet.PART_CONCERNE = "AMC" Then
                        BDD.FacturesTableAdapter.Set_Part_AMC_payée(True, num_facture)
                    End If
                    affiche_histo_facture()
            End Select
        Next
    End Sub

    Private Sub TransmissionsSansRetourToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles TransmissionsSansRetourToolStripMenuItem.Click
        Controle_Retours.Visible = True
        Controle_Retours.WindowState = FormWindowState.Maximized
        Controle_Retours.BringToFront()
    End Sub

    Private Sub Dossier_Patient_TabControl_DrawItem(sender As Object, e As DrawItemEventArgs) Handles Dossier_Patient_TabControl.DrawItem
        Dim drawBrush As New SolidBrush(Color.Black)
        Select Case e.Index Mod 2
            Case 0
                e.Graphics.FillRectangle(New SolidBrush(Color.White), e.Bounds)
            Case 1
                e.Graphics.FillRectangle(New SolidBrush(Color.MintCream), e.Bounds)
        End Select

        Dim paddedBounds As Rectangle = e.Bounds
        paddedBounds.Inflate(-2, -2)
        e.Graphics.DrawString(Dossier_Patient_TabControl.TabPages(e.Index).Text, New Font("Century Gothic", 12), drawBrush, paddedBounds)

        If e.Index + 1 = Dossier_Patient_TabControl.TabCount Then

            Dim rect As New System.Drawing.Rectangle(New Point(e.Bounds.X + e.Bounds.Width, e.Bounds.Y - 3), New System.Drawing.Size(Dossier_Patient_TabControl.Width - (e.Bounds.X + e.Bounds.Width), e.Bounds.Height + 3))
            e.Graphics.FillRectangle(New SolidBrush(Color.Linen), rect)

        End If
    End Sub



    Private Sub Dossier_patient_Factures_Détails_Encaissement_Note_RichTextBox_LostFocus(sender As Object, e As EventArgs) Handles Dossier_patient_Factures_Détails_Encaissement_Note_RichTextBox.LostFocus
        If Dossier_patient_Factures_DataGridView.CurrentCell Is Nothing Then Exit Sub
        If Dossier_patient_Factures_DataGridView.CurrentRow.Index < 0 Then Exit Sub
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value = "SV" Then
            Dim encaiss = BDD.EncaissementsTableAdapter.GetDataBy_NumFactureSV(CDec(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value))
            If encaiss.Rows.Count > 0 Then
                BDD.EncaissementsTableAdapter.Update_Note(Dossier_patient_Factures_Détails_Encaissement_Note_RichTextBox.Text, Dossier_patient_Factures_Détails_Encaissement_Note_CheckBox.Checked, encaiss(0).Num)
            End If
        Else
            Dim encaiss = BDD.EncaissementsTableAdapter.GetDataBy_NumFactureVenteDirecte(CDec(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value))
            If encaiss.Rows.Count > 0 Then
                BDD.EncaissementsTableAdapter.Update_Note(Dossier_patient_Factures_Détails_Encaissement_Note_RichTextBox.Text, Dossier_patient_Factures_Détails_Encaissement_Note_CheckBox.Checked, encaiss(0).Num)
            End If
        End If
    End Sub

    Private Sub Dossier_patient_Factures_Détails_Encaissement_Note_CheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles Dossier_patient_Factures_Détails_Encaissement_Note_CheckBox.CheckedChanged
        If Dossier_patient_Factures_DataGridView.CurrentCell Is Nothing Then Exit Sub
        If Dossier_patient_Factures_DataGridView.CurrentRow.Index < 0 Then Exit Sub
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value = "SV" Then
            Dim encaiss = BDD.EncaissementsTableAdapter.GetDataBy_NumFactureSV(CDec(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value))
            If encaiss.Rows.Count > 0 Then
                BDD.EncaissementsTableAdapter.Update_Note(Dossier_patient_Factures_Détails_Encaissement_Note_RichTextBox.Text, Dossier_patient_Factures_Détails_Encaissement_Note_CheckBox.Checked, encaiss(0).Num)
            End If
        Else
            Dim encaiss = BDD.EncaissementsTableAdapter.GetDataBy_NumFactureVenteDirecte(CDec(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value))
            If encaiss.Rows.Count > 0 Then
                BDD.EncaissementsTableAdapter.Update_Note(Dossier_patient_Factures_Détails_Encaissement_Note_RichTextBox.Text, Dossier_patient_Factures_Détails_Encaissement_Note_CheckBox.Checked, encaiss(0).Num)
            End If
        End If
    End Sub

    Private Sub Histo_Nbre_mois_TextBox_TextChanged(sender As Object, e As EventArgs) Handles Histo_Nbre_mois_TextBox.TextChanged
        If CurrentBenéficiaire.Num <> 0 Then
            Try
                CInt(Histo_Nbre_mois_TextBox.Text).ToString()
            Catch ex As Exception
                Histo_Nbre_mois_TextBox.Text = "4"
            End Try
            If Histo_Nbre_mois_TextBox.Text <> "0" Then
                If CurrentBenéficiaire.G101C8 <> "" Then
                    affiche_histo_facture()
                Else
                    affiche_histo_facture_NonSV()
                End If
            End If
        End If
    End Sub


    'Private Sub Histo_Nbre_mois_TextBox_KeyUp(sender As Object, e As KeyEventArgs) Handles Histo_Nbre_mois_TextBox.KeyUp
    '    If e.KeyCode = Keys.Enter Then

    '    End If
    'End Sub



    Public Sub FacilEpharm_Save(ByVal Id_Ordo As String, ByVal Etat As String)

        BDD.Ordo_Delivrance_Produits_LignesTableAdapter.Delete_By_Id_Ordo(Id_Ordo)
        Dim num_ligne_ordo = 0
        For r = 0 To Vente.Rows.Count - 2
            If InStr(Vente.Item(Vente_produits.Index, r).Value, "Honoraire de Dispensation ") <> 1 And InStr(Vente.Item(Vente_produits.Index, r).Value, "Honoraires de garde ") <> 1 Then
                num_ligne_ordo = num_ligne_ordo + 1
                Dim prod = BDD.ProduitsTableAdapter.GetDataByCIP_and_EAN13_and_CAB(Vente.Item(VenteCIP.Index, r).Value, Vente.Item(VenteEAN13.Index, r).Value, Vente.Item(Ventecab.Index, r).Value).Item(0)
                Dim Prod_Quantité_Unitées = 0
                If Not prod.Contenance Is Nothing Then
                    If Not prod.Contenance = "" Then
                        If IsNumeric(prod.Contenance) Then
                            Prod_Quantité_Unitées = CDec(prod.Contenance) * CDec(Vente.Item(VenteQuantité.Index, r).Value)
                        End If
                    End If
                End If
                facilEpharm.Delivrance_Produits_LignesTableAdapter.Insert(Id_Ordo, prod.Designation, CDec(Vente.Item(VenteQuantité.Index, r).Value), Prod_Quantité_Unitées, num_ligne_ordo, _
                                                                          prod.CAB, prod.CIP, prod.EAN13)
            End If
        Next
        facilEpharm.OrdoTableAdapter.Update_Etat(Etat, Id_Ordo)
        BDD.OrdoTableAdapter.Update_Prescr(TextBox_Prescripteur_NumID.Text, TextBox_Prescripteur_NumRPPS.Text, Id_Ordo)
        BDD.OrdoTableAdapter.Update_Notes_Pharma(Ordo_viewer.Notes_Pharma_RichTextBox.Text, Id_Ordo)
        EnregistreDonnéesClientversBDD()
        Ordo_Doc.Close()
        Ordo_viewer.Close()
        ResetForm()
    End Sub

    Public Sub Chargement_CurrentBenéficiaire_degradé(ByVal G101C8 As String, ByVal G104C12 As String, ByVal G104C13 As String, ByVal G104C14 As String)
        Bandeau_info_bas_show("Ouverture dossier patient...")
        LECTURE_VITALE.BackgroundImage = officine.My.Resources.carte_vitale
        DP_Carte_Vitale_lue = False
        If Not DP_list_Alrt_Prdt_deja_diffusées Is Nothing Then
            DP_list_Alrt_Prdt_deja_diffusées.Clear()
        End If
        DP_affichage_statut("Statut DP inconnu")

        ReDim tab_current_formule_STS(0)
        current_formule_STS.Clear()
        CurrentConvention.clear()

        SGD_LibererSession(NumeroSessionVitale)
        CurrentBenéficiaire.clear()
        CurrentBeneficiaireRichTextBox.Clear()
        ClearGroupBox(AssuréGroupBox, True)
        ClearTabPage(Dossier_Patient_AMC_TabPage, False)
        PrescripteurMyCombobox.Text = ""
        TextBox_Prescripteur_NumID.Clear()
        TextBox_Prescripteur_NumRPPS.Clear()
        Prescripteur_Spécialité_TextBox.Clear()
        Médecin_Traitant_Label.Text = ""
        DatePrecription.Enabled = True
        AMC_Piècejustificative_ComboBox.SelectedIndex = 0
        CurrentBenéficiaire.G101C8 = G101C8
        CurrentBenéficiaire.G104C12 = G104C12
        CurrentBenéficiaire.G104C13 = G104C13
        CurrentBenéficiaire.G104C14 = G104C14
        GetDataBénéficiaire()
        ModeSecur = "5"
        CheckBoxModeDegradé.Enabled = True
        CheckBoxModeDegradé.Checked = True
        ventetype_defaut = "assurance"
        afficheDonnéesAssuré()
        ''Assuré_détail_Button.Visible = True
        'Assuré_détail_Button.BackgroundImage = My.Resources.magnifying_glass2
        'Assuré_détail_Button.Tag = "D"
        DP_form = New DP
        DP_form.Affichage_histo_local()
        Affiche_dus()
        affiche_Avances(False)
        Dossier_Patient_Load()
        Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
    End Sub


    Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value = "SV" Then
            Choix_Papier.num_facture_SV = CInt(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value)
            Choix_Papier.ShowDialog()
        End If
    End Sub




    Public Sub Honoraires_garde_add_toolstripmenuitem()
        If Honoraires_garde Is Nothing Then
            Honoraires_garde = ""
        End If
        Dim honoraires = BDD.ProduitsTableAdapter.GetData_HonorairesDeGarde
        Dim items() As ToolStripMenuItem
        ReDim items(honoraires.Count - 1)
        For r = 0 To honoraires.Rows.Count - 1
            Dim item As New ToolStripMenuItem
            item.Text = honoraires(r).Designation
            item.CheckOnClick = True
            item.Tag = honoraires(r).CAB
            If item.Tag = Honoraires_garde Then
                item.Checked = True
            End If
            AddHandler item.Click, AddressOf Honoraires_garde_select
            items(r) = item
        Next
        HonorairesDeGardeToolStripMenuItem.DropDownItems.AddRange(items)

    End Sub

    Private Sub Honoraires_garde_select(sender As Object, e As EventArgs)
        If sender.checked = True Then
            Honoraires_garde = sender.Tag
        Else
            Honoraires_garde = ""
        End If
        For Each item As ToolStripMenuItem In HonorairesDeGardeToolStripMenuItem.DropDownItems
            If Not item Is sender Then
                item.Checked = False
            End If
        Next
        Honoraires_garde_apply()
    End Sub

    Private Sub Honoraires_garde_apply()
        If Honoraires_garde <> "" Then
            Vente.Rows.Add()
            Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.Rows.Count - 2)
            Dim quantité As Integer = 1
            Dim combbx = CType(Vente.Item(VenteType.Index, Vente.CurrentRow.Index), DataGridViewComboBoxCell)
            combbx.Value = combbx.Items(0)
            Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.CurrentRow.Index)
            Valide_VenteCells = True
            Vente_CellValidated(Nothing, Nothing)
            Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value = Honoraires_garde
            Vente.CurrentCell = Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index)
            Valide_VenteCells = True
            Vente_CellValidated(Nothing, Nothing)
            'Vente.Item(VenteQuantité.Index, 0).Value = quantité

            Vente.CurrentCell = Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index)
            capslock_off()
            Vente.BeginEdit(True)
            SendKeys.Send(quantité.ToString)
            SendKeys.Send("{ENTER}")
            Application.DoEvents()



        End If
    End Sub

#Region "CHRONNIQUE"
    Public Sub Chronique_Affichage()
        Dossier_Patient_Chronique_DataGridView.Rows.Clear()
        Plan_Poso_Perso_DataGridView.Rows.Clear()
        Dossier_Patient_Chronique_DataGridView.DefaultCellStyle.ForeColor = Color.Black
        Plan_Poso_Perso_DataGridView.DefaultCellStyle.ForeColor = Color.Black
        Try
            'If CurrentBenéficiaire.G101C8 = "" Then Exit Sub
            Dim datas = BDD.ChroniqueTableAdapter.GetData_Patient(CurrentBenéficiaire.Num)
            For r = 0 To datas.Rows.Count - 1
                Dossier_Patient_Chronique_DataGridView.Rows.Add()
                Plan_Poso_Perso_DataGridView.Rows.Add()
            Next
            For r = 0 To datas.Rows.Count - 1
                Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Produit_CIP.Index, r).Value = datas(r).Produit_CIP
                Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Produit_EAN13.Index, r).Value = datas(r).Produit_EAN13
                Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Produit_CAB.Index, r).Value = datas(r).Produit_CAB
                If datas(r).Commande_Produit = True Then
                    Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Produit_Commande_Produit.Index, r).Value = "Oui"
                Else
                    Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Produit_Commande_Produit.Index, r).Value = "Non"
                End If
                Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Produit_Date_Commande_Produit.Index, r).Value = datas(r).Date_Commande_Produit.ToLongDateString
                Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Produit_Date_dernière_delivrance.Index, r).Value = datas(r).Date_dernière_delivrance.ToLongDateString
                Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Produit_Date_Renouvellement.Index, r).Value = datas(r).Date_Renouvellement.ToLongDateString
                Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Produit_Désignation.Index, r).Value = datas(r).Produit_Désignation
                Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Modif.Index, r).Value = "modif"
                If datas(r).Avertissement_écart = True Then
                    Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Avertissement_écart.Index, r).Value = "Oui"
                Else
                    Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Avertissement_écart.Index, r).Value = "Non"
                End If
                Dossier_Patient_Chronique_DataGridView.Item(Dossier_Patient_Chronique_Avertissement_écart_jours.Index, r).Value = datas(r).Avertissement_écart_jours

                Plan_Poso_Perso_DataGridView.Item(Produit_Désignation.Index, r).Value = datas(r).Produit_Désignation
                Plan_Poso_Perso_DataGridView.Item(Produit_CIP.Index, r).Value = datas(r).Produit_CIP
                Plan_Poso_Perso_DataGridView.Item(Produit_EAN13.Index, r).Value = datas(r).Produit_EAN13
                Plan_Poso_Perso_DataGridView.Item(Produit_CAB.Index, r).Value = datas(r).Produit_CAB
                Plan_Poso_Perso_DataGridView.Item(Date_.Index, r).Value = datas(r).Date_Renouvellement
                If datas(r).chronique = True Then
                    Plan_Poso_Perso_DataGridView.Item(Statut.Index, r).Value = "chronique"
                ElseIf datas(r).Renouvelable = True Then
                    Plan_Poso_Perso_DataGridView.Item(Statut.Index, r).Value = "renouvelable"
                Else
                    Plan_Poso_Perso_DataGridView.Item(Statut.Index, r).Value = "traitement"
                End If

                Plan_Poso_Perso_DataGridView.Item(Poso_MATIN.Index, r).Value = datas(r).Poso_MATIN
                If datas(r).Poso_MATIN > 0 Then
                    Plan_Poso_Perso_DataGridView.Item(Poso_MATIN.Index, r).Style.BackColor = Color.LightGreen
                End If
                Plan_Poso_Perso_DataGridView.Item(Poso_MIDI.Index, r).Value = datas(r).Poso_MIDI
                If datas(r).Poso_MIDI > 0 Then
                    Plan_Poso_Perso_DataGridView.Item(Poso_MIDI.Index, r).Style.BackColor = Color.LightGreen
                End If
                Plan_Poso_Perso_DataGridView.Item(Poso_SOIR.Index, r).Value = datas(r).Poso_SOIR
                If datas(r).Poso_SOIR > 0 Then
                    Plan_Poso_Perso_DataGridView.Item(Poso_SOIR.Index, r).Style.BackColor = Color.LightGreen
                End If
                Plan_Poso_Perso_DataGridView.Item(Poso_COUCHER.Index, r).Value = datas(r).Poso_COUCHER
                If datas(r).Poso_COUCHER > 0 Then
                    Plan_Poso_Perso_DataGridView.Item(Poso_COUCHER.Index, r).Style.BackColor = Color.LightGreen
                End If
                Plan_Poso_Perso_DataGridView.Item(Poso_BESOIN.Index, r).Value = datas(r).Poso_BESOIN
                If datas(r).Poso_BESOIN > 0 Then
                    Plan_Poso_Perso_DataGridView.Item(Poso_BESOIN.Index, r).Style.BackColor = Color.LightGreen
                End If
                Plan_Poso_Perso_DataGridView.Item(Chronique_ALD.Index, r).Value = datas(r).ALD
                Plan_Poso_Perso_DataGridView.Item(Chronique_G1740C7.Index, r).Value = datas(r).G1740C7
                Plan_Poso_Perso_DataGridView.Item(pda.Index, r).Value = datas(r).pda
            Next
            ''''''''''''''''''''''''''''''''''''''''''''''''

            Dim index_debut = datas.Rows.Count
            Dim data_plan_perso = BDD.Plan_PosoTableAdapter.GetData_Patient(CurrentBenéficiaire.Num)
            For r = 0 To data_plan_perso.Rows.Count - 1
                Plan_Poso_Perso_DataGridView.Rows.Add()
            Next
            For r = 0 To data_plan_perso.Rows.Count - 1

                Plan_Poso_Perso_DataGridView.Item(Produit_Désignation.Index, r + index_debut).Value = data_plan_perso(r).Produit_Désignation
                Plan_Poso_Perso_DataGridView.Item(Date_.Index, r + index_debut).Value = data_plan_perso(r)._Date
                If data_plan_perso(r).heure = "0800" Then
                    Plan_Poso_Perso_DataGridView.Item(Poso_MATIN.Index, r + index_debut).Value = data_plan_perso(r).Poso
                ElseIf data_plan_perso(r).heure = "1000" Then
                    Plan_Poso_Perso_DataGridView.Item(Poso_BESOIN.Index, r + index_debut).Value = data_plan_perso(r).Poso
                ElseIf data_plan_perso(r).heure = "1200" Then
                    Plan_Poso_Perso_DataGridView.Item(Poso_MIDI.Index, r + index_debut).Value = data_plan_perso(r).Poso
                ElseIf data_plan_perso(r).heure = "1900" Then
                    Plan_Poso_Perso_DataGridView.Item(Poso_SOIR.Index, r + index_debut).Value = data_plan_perso(r).Poso
                ElseIf data_plan_perso(r).heure = "2100" Then
                    Plan_Poso_Perso_DataGridView.Item(Poso_COUCHER.Index, r + index_debut).Value = data_plan_perso(r).Poso
                End If
                Plan_Poso_Perso_DataGridView.Item(pda.Index, r + index_debut).Value = data_plan_perso(r).pda
                Plan_Poso_Perso_DataGridView.Item(Statut.Index, r + index_debut).Value = "poso personalisée"
            Next
            '''''''''''''''''''''''''''''''''''''''''''''''
        Catch ex As Exception

        End Try

    End Sub
    Private Sub Dossier_Patient_Chronique_DataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs)
        If e.RowIndex < 0 Then Exit Sub
        If e.ColumnIndex = Dossier_Patient_Chronique_Modif.Index Then
            Dim My_Chronique_Ligne As New Chronique_Ligne
            My_Chronique_Ligne.Chronique_item.Vitale_Num = CurrentBenéficiaire.Num
            My_Chronique_Ligne.Chronique_item.Produit_CAB = Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_CAB.Index, e.RowIndex).Value
            My_Chronique_Ligne.Chronique_item.Produit_CIP = Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_CIP.Index, e.RowIndex).Value
            My_Chronique_Ligne.Chronique_item.Produit_Désignation = Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_Désignation.Index, e.RowIndex).Value
            My_Chronique_Ligne.Chronique_item.Produit_EAN13 = Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_EAN13.Index, e.RowIndex).Value
            My_Chronique_Ligne.Text = CurrentBenéficiaire.G104C1 & " " & CurrentBenéficiaire.G104C3
            Dim datas = BDD.ChroniqueTableAdapter.GetDataBy_Datas(CurrentBenéficiaire.Num, _
                 Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_Désignation.Index, e.RowIndex).Value, Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_CIP.Index, e.RowIndex).Value, _
                Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_EAN13.Index, e.RowIndex).Value, Dossier_Patient_Chronique_DataGridView(Dossier_Patient_Chronique_Produit_CAB.Index, e.RowIndex).Value)
            If datas.Rows.Count > 0 Then
                My_Chronique_Ligne.Chronique_item.load_from_row(datas(0))
                'My_Chronique_Ligne.Chronique_item.Commande_Produit = datas(0).Commande_Produit
                'My_Chronique_Ligne.Chronique_item.Date_Commande_Produit = datas(0).Date_Commande_Produit
                'My_Chronique_Ligne.Chronique_item.Date_dernière_delivrance = datas(0).Date_dernière_delivrance
                'My_Chronique_Ligne.Chronique_item.Date_Renouvellement = datas(0).Date_Renouvellement
                'My_Chronique_Ligne.Chronique_item.Avertissement_écart = datas(0).Avertissement_écart
                'My_Chronique_Ligne.Chronique_item.Avertissement_écart_jours = datas(0).Avertissement_écart_jours
            Else
                My_Chronique_Ligne.Chronique_item.Commande_Produit = False
                My_Chronique_Ligne.Chronique_item.Date_Commande_Produit = Now
                My_Chronique_Ligne.Chronique_item.Date_dernière_delivrance = Now
                My_Chronique_Ligne.Chronique_item.Date_Renouvellement = Now
            End If
            My_Chronique_Ligne.ShowDialog()
            Chronique_Affichage()
            Première_Délivrance(True)
        End If
    End Sub
#End Region

#Region "PRODUITS RESERVES"
    Public Sub Produits_Reservés_affichage()

        Dossier_Patient_Produits_Reservés_DataGridView.Rows.Clear()
        Dossier_Patient_Produits_Reservés_DataGridView.DefaultCellStyle.ForeColor = Color.Black
        'If CurrentBenéficiaire.G101C8 = "" Then Exit Sub

        Dim datas = BDD.Produits_ReservésTableAdapter.GetData_Patient(CurrentBenéficiaire.Num)

        If datas.Rows.Count > 0 Then
            For r = 0 To datas.Rows.Count - 1
                Dossier_Patient_Produits_Reservés_DataGridView.Rows.Add()
            Next
            For r = 0 To datas.Rows.Count - 1
                Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CAB.Index, r).Value = datas(r).Produit_CAB
                Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CIP.Index, r).Value = datas(r).Produit_CIP
                Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_EAN13.Index, r).Value = datas(r).Produit_EAN13
                Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Désignation.Index, r).Value = datas(r).Produit_Désignation
                Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Quantité.Index, r).Value = datas(r).Quantité_Reservée
                Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Réservés_Date.Index, r).Value = datas(r).Date_reservation
                Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Réservés_Date_delivrance.Index, r).Value = datas(r).Date_delivrance_prévue.ToShortDateString
                Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Réservés_Modif.Index, r).Value = "modif"
                Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Réservés_Délivrer.Index, r).Value = "délivrer"
            Next

        End If
    End Sub




    Private Sub Dossier_Patient_Produits_Reservés_DataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Dossier_Patient_Produits_Reservés_DataGridView.CellContentClick
        If e.RowIndex < 0 Then Exit Sub
        Select Case e.ColumnIndex
            Case Produits_Réservés_Modif.Index
                Dim my_reserv As New Reservation_Produit
                my_reserv.Patien_Num_TextBox.Text = CurrentBenéficiaire.Num.ToString
                my_reserv.Patient_NIRTextBox.Text = CurrentBenéficiaire.G101C8
                my_reserv.Patient_DateNaissTextBox.Text = CurrentBenéficiaire.G104C12
                my_reserv.Patient_RangNaissTextBox.Text = CurrentBenéficiaire.G104C13
                my_reserv.Patient_QualitéTextBox.Text = CurrentBenéficiaire.G104C14
                my_reserv.Produit_DésignationTextBox.Text = Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Désignation.Index, e.RowIndex).Value
                my_reserv.Produit_CIPTextBox.Text = Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CIP.Index, e.RowIndex).Value
                my_reserv.Produit_EAN13TextBox.Text = Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_EAN13.Index, e.RowIndex).Value
                my_reserv.Produit_CABTextBox.Text = Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CAB.Index, e.RowIndex).Value
                my_reserv.Quantité_ReservéeTextBox.Text = Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Quantité.Index, e.RowIndex).Value
                my_reserv.Date_reservationDateTimePicker.Value = Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Réservés_Date.Index, e.RowIndex).Value
                my_reserv.Date_delivrance_prévueDateTimePicker.Value = CDate(Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Réservés_Date_delivrance.Index, e.RowIndex).Value)
                my_reserv.ShowDialog()
                Produits_Reservés_affichage()
            Case Produits_Réservés_Délivrer.Index
                delivrer_produit_réservé(e.RowIndex)
        End Select

    End Sub
#End Region

    Public Sub Vente_Ajout_Produit(ByVal CIP As String, ByVal EAN13 As String, ByVal CAB As String, ByVal Désignation As String, ByVal Quantité As Integer)
        Try
            apiBlockInput(1)

            Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.Rows.Count - 1)
            Dim combbx = CType(Vente.Item(VenteType.Index, Vente.CurrentRow.Index), DataGridViewComboBoxCell)
            combbx.Value = combbx.Items(0)
            If delivrer_produit_réservé_vente_type_defaut <> "" Then
                Vente.Item(VenteType.Index, Vente.CurrentRow.Index).Value = delivrer_produit_réservé_vente_type_defaut
            End If
            Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.CurrentRow.Index)
            Valide_VenteCells = True
            Vente_CellValidated(Nothing, Nothing)
            Dim produit As String
            If CAB <> "" Then
                produit = CAB
            ElseIf EAN13 <> "" Then
                produit = EAN13
            ElseIf CIP <> "" Then
                produit = CIP
            Else
                produit = Désignation
            End If

            Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value = produit
            Vente.CurrentCell = Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index)
            Valide_VenteCells = True
            Vente_CellValidated(Nothing, Nothing)
            Vente.CurrentCell = Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index)
            capslock_off()
            Vente.BeginEdit(True)
            SendKeys.Send(Quantité.ToString)
            SendKeys.Send("{ENTER}")
            Application.DoEvents()
            apiBlockInput(0)
        Catch ex As Exception
            apiBlockInput(0)
        End Try
    End Sub



    Private Sub PDA_Button_Click(sender As Object, e As EventArgs) Handles PDA_Button.Click
        Dim my_PDA_Main As New PDA_Main
        my_PDA_Main.Vitale_Num = CurrentBenéficiaire.Num
        my_PDA_Main.ShowDialog()
    End Sub

    Private Sub impr_plan_poso_Button_Click(sender As Object, e As EventArgs) Handles impr_plan_poso_Button.Click
        Dim parameters As String = "&Vital_Num_Unique=" & CurrentBenéficiaire.Num.ToString
        Web_browser.Visible = True
        Web_browser.BringToFront()
        Web_browser.WebBrowser1.Navigate("http://" & Replace(Config.LocalNetwork_ServerName, "\", "") & "/ReportServer_SQLEXPRESS/Pages/ReportViewer.aspx?%2fPLAN_POSO&rs:Command=Render" & parameters)

    End Sub

    Private Sub Reserver_Button_Click(sender As Object, e As EventArgs) Handles Reserver_Button.Click

        If CurrentBenéficiaire.Num = 0 Then
            MyMsg_Box.Presentation("Officine !", "Données de l'assuré insufisantes pour reserver.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        Dim index_prod_reservés As New List(Of Integer)
        Dim produits_reservés As Boolean = False
        For r = 0 To Vente.Rows.Count - 1
            If Vente.Item(VenteEAN13.Index, r).Value <> "" Or Vente.Item(Ventecab.Index, r).Value <> "" Then
                produits_reservés = True
                Dim ald = False
                If Vente.Item(Vente_produits.Index, r).Value.ToString = "ALD" Then
                    ald = True
                End If
                BDD.Produits_ReservésTableAdapter.Insert(Vente.Item(Vente_produits.Index, r).Value, Vente.Item(VenteCIP.Index, r).Value, Vente.Item(VenteEAN13.Index, r).Value, Vente.Item(Ventecab.Index, r).Value, Val(Vente.Item(VenteQuantité.Index, r).Value), Now, DateExecution.Value, Now, CurrentBenéficiaire.Num, ald)
                If Vente.Item(Vente_Stock_Suivi.Index, r).Value = True Then
                    Me.ProduitsTableAdapter.UpdateStock_By_CIP_CAB((-1) * Val(Vente.Item(VenteQuantité.Index, r).Value), Vente.Item(VenteEAN13.Index, r).Value, Vente.Item(Ventecab.Index, r).Value)
                End If
                index_prod_reservés.Add(r)
            End If
        Next
        If produits_reservés = True Then
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            'promis_drawString = ""
            'If Config.Ticket_du_lignes_blanches > 0 Then
            '    For i = 1 To Config.Ticket_du_lignes_blanches
            '        promis_drawString = Chr(10) & promis_drawString
            '    Next
            '    promis_drawString = promis_drawString & "TICKET DE PROMIS " & Now.ToShortDateString & " " & Now.ToShortTimeString & " " & ID_user & Chr(10) & Chr(10) & Chr(10) _
            '          & ComboBoxLECTURE_VITALE.Text & " " & NirTextBox.Text & Chr(10) & Chr(10)
            'End If
            'For Each index In index_prod_reservés
            '    Dim cip = ""
            '    If Vente.Item(VenteEAN13.Index, index).Value <> "" Then
            '        cip = Vente.Item(VenteEAN13.Index, index).Value
            '    ElseIf Vente.Item(Ventecab.Index, index).Value <> "" Then
            '        cip = Vente.Item(Ventecab.Index, index).Value
            '    ElseIf Vente.Item(VenteCIP.Index, index).Value <> "" Then
            '        cip = Vente.Item(VenteCIP.Index, index).Value
            '    End If
            '    promis_drawString = promis_drawString & cip & " " & Vente.Item(VenteDésignation.Index, index).Value & " *" & Vente.Item(VenteQuantité.Index, index).Value.ToString & Chr(10)
            'Next
            'Reserver_PrintDialog.Document = Reserver_PrintDocument


            'If Config.Ticket_du_default_printer <> "" Then
            '    MyMsg_Box.Presentation("Officine ?", "Impression Ticket de promis ?", True, "OUI", True, "NON", False, "")
            '    If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
            '        Reserver_PrintDocument.PrinterSettings.PrinterName = Config.Ticket_du_default_printer
            '        Reserver_PrintDocument.Print()
            '    End If
            '    MyMsg_Box.Presentation("Officine ?", "Impression deuxième Ticket de promis ?", True, "OUI", True, "NON", False, "")
            '    If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
            '        Reserver_PrintDocument.PrinterSettings.PrinterName = Config.Ticket_du_default_printer
            '        Reserver_PrintDocument.Print()
            '    End If
            'Else
            '    MyMsg_Box.Presentation("Officine ?", "Impression Ticket de promis ?", True, "OUI", True, "NON", False, "")
            '    If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
            '        If Reserver_PrintDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
            '            Reserver_PrintDocument.Print()
            '        End If
            '        MyMsg_Box.Presentation("Officine ?", "Impression deuxième Ticket de promis ?", True, "OUI", True, "NON", False, "")
            '        If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
            '            If Reserver_PrintDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
            '                Reserver_PrintDocument.Print()
            '            End If
            '        End If
            '    End If
            'End If
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            Try
                Dim liste_Produits_réservés_temp As New List(Of VenteForm.du)
                For Each index In index_prod_reservés
                    Dim Produits_réservés_temp As New VenteForm.du
                    Produits_réservés_temp.cip7 = Vente.Item(VenteCIP.Index, index).Value
                    Produits_réservés_temp.cip13 = Vente.Item(VenteEAN13.Index, index).Value
                    Produits_réservés_temp.désignation = Vente.Item(VenteDésignation.Index, index).Value
                    Produits_réservés_temp.Quantité_Du = Val(Vente.Item(VenteQuantité.Index, index).Value)
                    liste_Produits_réservés_temp.Add(Produits_réservés_temp)
                Next

                impression_Comptoir_Config.liste_produits_réservés = liste_Produits_réservés_temp
                impression_Comptoir_Config.Imprim_Ticket_Promis()
                PictureBox2_Click(Nothing, Nothing)
            Catch ex As Exception
            End Try

        End If

    End Sub
    Private Sub Reserver_PrintDocument_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles Reserver_PrintDocument.PrintPage

        If Trace_Appel_Fonctions = True Then
            Using sw As New StreamWriter(Application.StartupPath + "\traces\appels_fonctions.txt", True)
                sw.WriteLine(Me.Name + " / " + System.Reflection.MethodInfo.GetCurrentMethod.ToString + " (called by " + (New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name + ")")
            End Using
        End If

        Dim drawFont As New Font("Courier", 10)
        Dim drawBrush As New SolidBrush(Color.Black)

        e.Graphics.DrawString(promis_drawString, drawFont, drawBrush, 10, 10)
    End Sub

    Private Sub Plan_Poso_Perso_DataGridView_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles Plan_Poso_Perso_DataGridView.CellClick
        If e.RowIndex >= 0 Then
            Dim My_Chronique_Ligne As New Chronique_Ligne
            My_Chronique_Ligne.Chronique_item.Vitale_Num = CurrentBenéficiaire.Num
            My_Chronique_Ligne.Chronique_item.Produit_CAB = Plan_Poso_Perso_DataGridView(Produit_CAB.Index, e.RowIndex).Value
            My_Chronique_Ligne.Chronique_item.Produit_CIP = Plan_Poso_Perso_DataGridView(Produit_CIP.Index, e.RowIndex).Value
            My_Chronique_Ligne.Chronique_item.Produit_Désignation = Plan_Poso_Perso_DataGridView(Produit_Désignation.Index, e.RowIndex).Value
            My_Chronique_Ligne.Chronique_item.Produit_EAN13 = Plan_Poso_Perso_DataGridView(Produit_EAN13.Index, e.RowIndex).Value
            If Plan_Poso_Perso_DataGridView.Item(Statut.Index, e.RowIndex).Value <> "poso personalisée" Then
                Dim datas = BDD.ChroniqueTableAdapter.GetDataBy_Datas(CurrentBenéficiaire.Num, Plan_Poso_Perso_DataGridView(Produit_Désignation.Index, e.RowIndex).Value, _
                                                                      Plan_Poso_Perso_DataGridView(Produit_CIP.Index, e.RowIndex).Value, Plan_Poso_Perso_DataGridView(Produit_EAN13.Index, e.RowIndex).Value, _
                                                                     Plan_Poso_Perso_DataGridView(Produit_CAB.Index, e.RowIndex).Value)

                If datas.Rows.Count > 0 Then


                    My_Chronique_Ligne.Chronique_item.load_from_row(datas(0))
                    'My_Chronique_Ligne.Chronique_item.Commande_Produit = datas(0).Commande_Produit
                    'My_Chronique_Ligne.Chronique_item.Date_Commande_Produit = datas(0).Date_Commande_Produit

                    'If InStr(Vente.Item(Vente_premier.Index, Vente.CurrentRow.Index).Value, "/") = 3 And InStrRev(Vente.Item(Vente_premier.Index, Vente.CurrentRow.Index).Value, "/") = 6 Then
                    '    My_Chronique_Ligne.Chronique_item.Date_dernière_delivrance = CDate(Vente.Item(Vente_premier.Index, Vente.CurrentRow.Index).Value)
                    'Else
                    '    My_Chronique_Ligne.Chronique_item.Date_dernière_delivrance = Now
                    'End If
                    ''My_Chronique_Ligne.Chronique_item.Date_dernière_delivrance = datas(0).Date_dernière_delivrance
                    'My_Chronique_Ligne.Chronique_item.Date_Renouvellement = datas(0).Date_Renouvellement
                    'My_Chronique_Ligne.Chronique_item.Avertissement_écart = datas(0).Avertissement_écart
                    'My_Chronique_Ligne.Chronique_item.Avertissement_écart_jours = datas(0).Avertissement_écart_jours
                    'My_Chronique_Ligne.Chronique_item.Intervalle_renouvellement = datas(0).Intervalle_renouvellement
                    'My_Chronique_Ligne.Chronique_item.Intervalle_Commande_Produit = datas(0).Intervalle_Commande_Produit
                    'My_Chronique_Ligne.Chronique_item.Commande_Fournisseur = datas(0).Commande_Fournisseur
                    'My_Chronique_Ligne.Chronique_item.Commande_Quantité = datas(0).Commande_Quantité
                    'My_Chronique_Ligne.Chronique_item.Commande_Ref = datas(0).Commande_Ref
                    'My_Chronique_Ligne.Chronique_item.Renouvelable = datas(0).Renouvelable
                    'My_Chronique_Ligne.Chronique_item.Poso_MATIN = datas(0).Poso_MATIN
                    'My_Chronique_Ligne.Chronique_item.Poso_MIDI = datas(0).Poso_MIDI
                    'My_Chronique_Ligne.Chronique_item.Poso_SOIR = datas(0).Poso_SOIR
                    'My_Chronique_Ligne.Chronique_item.Poso_COUCHER = datas(0).Poso_COUCHER
                    'My_Chronique_Ligne.Chronique_item.Poso_BESOIN = datas(0).Poso_BESOIN
                    'My_Chronique_Ligne.Chronique_item.Poso_Jours_liste = datas(0).Poso_Jours_liste
                    'My_Chronique_Ligne.Chronique_item.Poso_Interval_jour = datas(0).Poso_Interval_jour
                    'My_Chronique_Ligne.Chronique_item.Poso_Interval_dénominateur = datas(0).Poso_Interval_dénominateur
                    'My_Chronique_Ligne.Chronique_item.pda = datas(0).pda
                    'My_Chronique_Ligne.Chronique_item.chronique = datas(0).chronique
                    'My_Chronique_Ligne.Chronique_item.Prescr_IDinterne = datas(0).Prescr_IDinterne
                    'My_Chronique_Ligne.Chronique_item.Notes = datas(0).Notes
                    'My_Chronique_Ligne.Chronique_item.Période_ID = datas(0).Période_ID
                    'My_Chronique_Ligne.Chronique_item.Période_récurence = datas(0).Période_récurence
                    'My_Chronique_Ligne.Chronique_item.ALD = datas(0).ALD
                    My_Chronique_Ligne.ShowDialog()
                End If
            End If
        Else
            'Dim datas = BDD.Plan_PosoTableAdapter.GetData_Patient(
        End If


    End Sub


    Private Sub Vente_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Vente.CellContentClick

    End Sub

    Private Sub RechercheProduits_Préférés_RadioButton_CheckedChanged(sender As Object, e As EventArgs) Handles RechercheProduits_Préférés_RadioButton.CheckedChanged

        If Not produits_string_searched Is Nothing Then
            If produits_string_searched.Length >= 3 Then
                If RechercheProduits_Préférés_RadioButton.Checked = True Then
                    RechercheProduits_Datagridview.DataSource = Me.PharmaDataSet.Produits
                    Me.ProduitsTableAdapter.selectproduit_préférés_stock(Me.PharmaDataSet.Produits, produits_string_searched, produits_string_searched, Replace(produits_string_searched, " ", "%"), produits_string_searched)
                ElseIf RechercheProduits_ROBOT_RadioButton.Checked = True Then
                    RechercheProduits_Datagridview.DataSource = Me.PharmaDataSet.Produits
                    Me.ProduitsTableAdapter.Select_Produits_Robot(Me.PharmaDataSet.Produits, produits_string_searched, produits_string_searched, Replace(produits_string_searched, " ", "%"), produits_string_searched)
                Else
                    RechercheProduits_Datagridview.DataSource = Me.PharmaDataSet.Produits
                    Me.ProduitsTableAdapter.selectproduit(Me.PharmaDataSet.Produits, produits_string_searched, produits_string_searched, Replace(produits_string_searched, " ", "%"), produits_string_searched)
                End If
            End If
        End If
    End Sub

    Private Sub Plan_Poso_Perso_DataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Plan_Poso_Perso_DataGridView.CellContentClick

    End Sub

    Public Sub Produits_résevés_tout_delivrer_Click(sender As Object, e As EventArgs) Handles Produits_résevés_tout_delivrer_Button.Click
        For r = Dossier_Patient_Produits_Reservés_DataGridView.RowCount - 1 To 0 Step -1
            Try
                delivrer_produit_réservé(r)
            Catch ex As Exception
            End Try
        Next
    End Sub

    Private Sub delivrer_produit_réservé(ByVal row_index As Integer)

        mettre_en_Dus = False

        Dim chronique_datas = BDD.ChroniqueTableAdapter.GetDataBy_Datas(CurrentBenéficiaire.Num, Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Désignation.Index, row_index).Value, _
        Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CIP.Index, row_index).Value, Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_EAN13.Index, row_index).Value, _
Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CAB.Index, row_index).Value)
        If chronique_datas.Rows.Count > 0 Then
            If chronique_datas.Item(0).ALD = True Then
                delivrer_produit_réservé_vente_type_defaut = "ALD"
            Else
                delivrer_produit_réservé_vente_type_defaut = "assurance"
            End If
            Vente.Item(Vente_G1740C7.Index, Vente.Rows.Count - 1).Value = chronique_datas.Item(0).G1740C7
        Else
            delivrer_produit_réservé_vente_type_defaut = "assurance"
            Vente.Item(Vente_G1740C7.Index, Vente.Rows.Count - 1).Value = ""
        End If


        Vente_Ajout_Produit(Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CIP.Index, row_index).Value, Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_EAN13.Index, row_index).Value, _
Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CAB.Index, row_index).Value, Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Désignation.Index, row_index).Value, _
       CInt(Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Quantité.Index, row_index).Value))

        BDD.Produits_ReservésTableAdapter.Delete_ligne(CurrentBenéficiaire.Num, Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Désignation.Index, row_index).Value, _
        Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CIP.Index, row_index).Value, _
        Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_EAN13.Index, row_index).Value, _
        Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CAB.Index, row_index).Value)

        If Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_EAN13.Index, row_index).Value <> "" Then
            BDD.ProduitsTableAdapter.UpdateStock_By_CIP_CAB(CInt(Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Quantité.Index, row_index).Value), Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_EAN13.Index, row_index).Value, Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CAB.Index, row_index).Value)
        ElseIf Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CIP.Index, row_index).Value <> "" Then
            BDD.ProduitsTableAdapter.UpdateStock_By_CIP_CAB(CInt(Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Quantité.Index, row_index).Value), Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CIP.Index, row_index).Value, Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_CAB.Index, row_index).Value)
        Else
            BDD.ProduitsTableAdapter.UpdateStock_by_Designation(CInt(Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Quantité.Index, row_index).Value), Dossier_Patient_Produits_Reservés_DataGridView.Item(Produits_Reservés_Désignation.Index, row_index).Value)
        End If
        Produits_Reservés_affichage()
        mettre_en_Dus = True

        delivrer_produit_réservé_vente_type_defaut = ""
    End Sub

    Private Sub Chronique_Periode_MyCombobox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Chronique_Periode_MyCombobox.SelectedIndexChanged
        Try
            If Chronique_Période_Changement_question = False Then Exit Sub



            CurrentBenéficiaire.Chronique_Periode = CInt(Chronique_Periode_MyCombobox.Text)
            BDD.VitaleTableAdapter.Update_Chronique_Periode(CurrentBenéficiaire.Chronique_Periode, CurrentBenéficiaire.Num)
            Dim prod_chroniques = BDD.ChroniqueTableAdapter.GetDataBy_Vitale_Num_List(CurrentBenéficiaire.Num)
            Dim prod_autre_periode = False
            Dim détail = ""
            For r = 0 To prod_chroniques.Rows.Count - 1
                If prod_chroniques(r).Période_ID <> CurrentBenéficiaire.Chronique_Periode Then
                    prod_autre_periode = True
                    détail = détail & "période " & prod_chroniques(r).Période_ID.ToString & ": " & prod_chroniques(r).Produit_Désignation & vbCrLf
                End If
            Next
            If prod_autre_periode = True Then
                MyMsg_Box.Presentation("Officine ?", "Des produits chroniques sont affectés à une autre période pour ce patient, souhaitez vous les affecter à la période " & CurrentBenéficiaire.Chronique_Periode.ToString _
                                       & " ?" & vbCrLf & "(Les cycles des produits seront réinitialisés)" & vbCrLf & vbCrLf & détail, True, "Oui", True, "Non", False, "")
                If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                    For r = 0 To prod_chroniques.Rows.Count - 1
                        BDD.ChroniqueTableAdapter.Update_Période_ID(CurrentBenéficiaire.Chronique_Periode, _
                                                                    DateAdd(DateInterval.Day, CurrentBenéficiaire.Chronique_Periode_decalage_jour, BDD.Chronique_PériodeTableAdapter.GetDataBy_Id(CurrentBenéficiaire.Chronique_Periode).Item(0).Date_prochaine_commande), _
                                                                    prod_chroniques(r).Vitale_Num, prod_chroniques(r).Produit_Désignation, prod_chroniques(r).Produit_CIP, _
                                                                     prod_chroniques(r).Produit_EAN13, prod_chroniques(r).Produit_CAB)
                    Next
                End If
            End If
            Chronique_Affichage()
        Catch ex As Exception
        End Try
    End Sub

  

    Private Sub Imprim_Dus_PictureBox_Click(sender As Object, e As EventArgs) Handles Imprim_Dus_PictureBox.Click
        Try
            If Dossier_Patient_Dus_DataGridView.RowCount = 0 Then Exit Sub
            Dim liste_du_temp As New List(Of VenteForm.du)
            For r = 0 To Dossier_Patient_Dus_DataGridView.RowCount - 1
                Dim du_temp As New VenteForm.du
                du_temp.cip7 = Dossier_Patient_Dus_DataGridView(Dossier_Patient_Dus_CIP7.Index, r).Value
                du_temp.cip13 = Dossier_Patient_Dus_DataGridView(Dossier_Patient_Dus_EAN13.Index, r).Value
                du_temp.désignation = Dossier_Patient_Dus_DataGridView(Dossier_Patient_Dus_Désignation.Index, r).Value
                du_temp.Quantité_Du = Val(Dossier_Patient_Dus_DataGridView(Dossier_Patient_Dus_Quantité_Du.Index, r).Value)
                liste_du_temp.Add(du_temp)
            Next
            impression_Comptoir_Config.liste_du = liste_du_temp
            impression_Comptoir_Config.Imprim_Ticket_Dus()
        Catch ex As Exception
        End Try
    End Sub



    Private Sub Imprim_Produits_réservés_PictureBox_Click(sender As Object, e As EventArgs) Handles Imprim_Produits_réservés_PictureBox.Click
        Try
            If Dossier_Patient_Produits_Reservés_DataGridView.RowCount = 0 Then Exit Sub
            Dim liste_prod_res_temp As New List(Of VenteForm.du)
            For r = 0 To Dossier_Patient_Produits_Reservés_DataGridView.RowCount - 1
                Dim prod_res_temp As New VenteForm.du
                prod_res_temp.cip7 = Dossier_Patient_Produits_Reservés_DataGridView(Produits_Reservés_CIP.Index, r).Value
                prod_res_temp.cip13 = Dossier_Patient_Produits_Reservés_DataGridView(Produits_Reservés_EAN13.Index, r).Value
                prod_res_temp.désignation = Dossier_Patient_Produits_Reservés_DataGridView(Produits_Reservés_Désignation.Index, r).Value
                prod_res_temp.Quantité_Du = Val(Dossier_Patient_Produits_Reservés_DataGridView(Produits_Reservés_Quantité.Index, r).Value)
                liste_prod_res_temp.Add(prod_res_temp)
            Next
            impression_Comptoir_Config.liste_produits_réservés = liste_prod_res_temp
            impression_Comptoir_Config.Imprim_Ticket_Promis()
        Catch ex As Exception
        End Try
    End Sub



    Private Sub Modifier_Dates_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Modifier_Dates_LinkLabel.LinkClicked
        MyMsg_Box.Presentation("Officine ?", "Si vous modifiez les dates de prescription ou de délivrance, il est nécessaire de faire une ré-acquisition des droits Vitale." & vbCrLf & vbCrLf & "Poursuivre ?", True, "Oui", True, "Non", False, "")
        If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
            DatePrecription.Enabled = True
            DateExecution.Enabled = True
        End If
    End Sub



   

    Private Sub Chronique_Periode_decalage_jour_TextBox_KeyDown(sender As Object, e As KeyEventArgs) Handles Chronique_Periode_decalage_jour_TextBox.KeyDown
        If e.KeyCode = Keys.Enter Then
            Chronique_Periode_decalage_jour_TextBox_Validated(Nothing, Nothing)
        End If
    End Sub

    Private Sub Chronique_Periode_decalage_jour_TextBox_Validated(sender As Object, e As EventArgs) Handles Chronique_Periode_decalage_jour_TextBox.Validated
        Try
            CInt(Chronique_Periode_decalage_jour_TextBox.Text).ToString()
            If CInt(Chronique_Periode_decalage_jour_TextBox.Text) <> CurrentBenéficiaire.Num Then
                BDD.VitaleTableAdapter.Update_Chronique_Periode_decalage_jour(CInt(Chronique_Periode_decalage_jour_TextBox.Text), CurrentBenéficiaire.Num)
                CurrentBenéficiaire.Chronique_Periode_decalage_jour = CInt(Chronique_Periode_decalage_jour_TextBox.Text)
                Dim prod_chroniques = BDD.ChroniqueTableAdapter.GetDataBy_Vitale_Num_List(CurrentBenéficiaire.Num)
                For r = 0 To prod_chroniques.Rows.Count - 1
                    If prod_chroniques(r).Période_ID = CurrentBenéficiaire.Chronique_Periode Then
                        BDD.ChroniqueTableAdapter.Update_DateCommande(DateAdd(DateInterval.Day, CurrentBenéficiaire.Chronique_Periode_decalage_jour, BDD.Chronique_PériodeTableAdapter.GetDataBy_Id(CurrentBenéficiaire.Chronique_Periode).Item(0).Date_prochaine_commande), _
                                                                          prod_chroniques(r).Vitale_Num, prod_chroniques(r).Produit_Désignation, prod_chroniques(r).Produit_CIP, _
                                                                     prod_chroniques(r).Produit_EAN13, prod_chroniques(r).Produit_CAB)
                    End If
                Next
            End If
           
        Catch ex As Exception
            Chronique_Periode_decalage_jour_TextBox.Text = CurrentBenéficiaire.Chronique_Periode_decalage_jour.ToString
            'CurrentBenéficiaire.Chronique_Periode_decalage_jour = 0
        End Try
        Chronique_Affichage()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Try
            For r = 0 To Avances_DataGridView.Rows.Count
                Avances_DataGridView.Rows.Item(r).DefaultCellStyle.ForeColor = Color.Green
        Next
        Catch ex As Exception
        End Try
    End Sub


    Private Sub Dossier_patient_Factures_suppr_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Dossier_patient_Factures_suppr_LinkLabel.LinkClicked
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value = "SV" Then
            MyMsg_Box.Presentation("Officine ?", "Voulez vous supprimer la FSE n° " & Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value & " definitivement ?", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                Facture.Supprimer_FSE(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value, True, True, True, True, False)
            End If
            affiche_histo_facture()
            'affiche_données_facturation(Val(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value))
            'affiche_détail_facture(Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex)
        Else
            MyMsg_Box.Presentation("Officine ?", "Voulez vous supprimer la Vente Directe n° " & Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value & " definitivement ?", True, "OUI", True, "NON", False, "")
            If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                Facture.Supprimer_VenteDirecte(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value, True, True, True)
            End If
            affiche_histo_facture()
            'affiche_données_facturation(Val(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value))
            'affiche_détail_facture(Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex)
        End If
    End Sub

    Private Sub Dossier_patient_Factures_Modification_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Dossier_patient_Factures_Modification_LinkLabel.LinkClicked

        'renouvellemnt de facture SV seulement
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value <> "SV" Then
            Try
                Dim NumFactureVD = CInt(Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value)
                If BDD.EncaissementsTableAdapter.GetDataBy_NumFactureVenteDirecte(NumFactureVD).Item(0).Type = "Devis" Then
                    Reprise_Devis(NumFactureVD)
                    Exit Sub
                End If
            Catch ex As Exception
            End Try
            Exit Sub
        End If


        Dossier_Patient_LinkLabel_LinkClicked(Nothing, Nothing)
        Application.DoEvents()

        'While Vente.Rows.Count > 0
        '    Vente.Rows.RemoveAt(0)
        'End While
        'Vente.Rows.Add()

        Dim num_facture = Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value
      
        If Me.FacturesTableAdapter.GetFactureDataByNum1(Val(num_facture)).Rows.Count = 0 Then
            MyMsg_Box.Presentation("Officine !", "Cette facture n'est plus dans la base de données.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
   
        Dim facture_item = Me.FacturesTableAdapter.GetFactureDataByNum1(Val(num_facture)).Item(0)
        If facture_item.Num_Lot_FSE <> "" Or facture_item.Num_Lot_DRE <> "" Then
            MyMsg_Box.Presentation("Officine !", "facture num " + num_facture.ToString + " mise en lot, modification impossible.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Dossier_Patient_LinkLabel_LinkClicked(Nothing, Nothing)
            Exit Sub
        End If
        Dim lignes_facture = Me.Facture_LigneFactureTableAdapter1.GetDataByNumFacture(num_facture)
        Dim actes = Me.ActesTableAdapter.GetDataByNumFacturesSV(num_facture)

        'prescripteur
        Dim num_prescr As String = ""
        Dim date_prescr As String = ""
        If facture_item.G1211C1 <> "" Then
            num_prescr = facture_item.G1211C1 & facture_item.G1211C2
            date_prescr = facture_item.G1211C3
        ElseIf facture_item.G1213C1 <> "" Then
            num_prescr = facture_item.G1213C1 & facture_item.G1213C2
            date_prescr = facture_item.G1213C4
        ElseIf facture_item.G1214C1 <> "" Then
            num_prescr = facture_item.G1214C1 & facture_item.G1214C2
            date_prescr = facture_item.G1214C4
        End If
        PrescripteurMyCombobox.Text = num_prescr
        PrescripteurMyCombobox_Validated(Nothing, Nothing)
        Dim parsedDate As Date
        DateTime.TryParseExact(Mid(date_prescr, 1, 8), "yyyyMMdd", Nothing, DateTimeStyles.None, parsedDate)
        DatePrecription.Value = parsedDate

        If lignes_facture.Item(0).G1850C2 <> "" Then
            Renouvellement_TextBox.Text = lignes_facture.Item(0).G1850C2
    
        End If
        Renouvellement_TextBox_Validated(Nothing, Nothing)


        'apiBlockInput(1)
        Vente_datagridview_auto_filling = True

        Dim message_produits As String = ""
        Vente.Focus()


        For r = 0 To actes.Rows.Count - 1
            Dim produit As String = ""

            If actes.Item(r).EAN13 <> "" Then
                produit = actes.Item(r).EAN13
            ElseIf actes.Item(r).CIP <> "" Then
                produit = actes.Item(r).CIP
            ElseIf actes.Item(r).Désignation <> "" Then
                produit = actes.Item(r).Désignation
            End If

            Dim p = BDD.ProduitsTableAdapter.Recherche_produit(produit).Rows.Count
            If InStr(produit, "Honoraire de Dispensation") <> 1 And InStr(produit, "Honoraire dispensation complexe") <> 1 Then
                If p = 1 Then


                    Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.Rows.Count - 1)
                    Dim quantité As Integer = actes.Item(r).Quantité
                    Dim typeacte As String = actes.Item(r).TypeActe

                    Dim combbx = CType(Vente.Item(VenteType.Index, Vente.CurrentRow.Index), DataGridViewComboBoxCell)
                    combbx.Value = combbx.Items(0)
                    'Vente.Item(VenteType.Index, 0).Value = typeacte
                    Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.CurrentRow.Index)
                    Valide_VenteCells = True
                    Vente_CellValidated(Nothing, Nothing)
                    Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value = produit
                    Vente.CurrentCell = Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index)
                    Valide_VenteCells = True
                    Vente_CellValidated(Nothing, Nothing)
                    'Vente.Item(VenteQuantité.Index, 0).Value = quantité

                    Vente.CurrentCell = Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index)
                    capslock_off()
                    Vente.BeginEdit(True)
                    SendKeys.Send(quantité.ToString)
                    SendKeys.Send("{ENTER}")
                    Application.DoEvents()
                ElseIf p = 0 Then
                    message_produits = message_produits & "Produit inconnu: " & actes.Item(r).Désignation & vbCrLf & vbCrLf
                ElseIf p > 1 Then
                    message_produits = message_produits & "Produit multiple: " & actes.Item(r).Désignation & vbCrLf & vbCrLf
                End If
            End If



        Next
        'apiBlockInput(0)
        Vente_datagridview_auto_filling = False
        Dim file = Dir(Config.LocalNetwork_ServerName & "\scor\doc\" & num_facture.ToString & "_*")
        While file <> ""
            If InStr(file, "TKVT") <> 0 Then
                Try
                    My.Computer.FileSystem.DeleteFile(Config.LocalNetwork_ServerName & "\scor\doc\" & file)
                    ScanOrdo.SCOR_PJTableAdapter.Delete_by_Fichier(file)
                Catch ex As Exception

                End Try
            Else
                Try
                    My.Computer.FileSystem.RenameFile(Config.LocalNetwork_ServerName & "\scor\doc\" & file, "Prescan" & Config.Idposte & Mid(file, InStr(file, "_")))
                    ScanOrdo.SCOR_PJTableAdapter.UpdatePresScan("Prescan" & Config.Idposte, "Prescan" & Config.Idposte & Mid(file, InStr(file, "_")), _
                                                                    ScanOrdo.SCOR_PJTableAdapter.GetDataBy_Fichier(file).Item(0).ID, file)

                Catch ex As Exception

                End Try

            End If
            file = Dir(Config.LocalNetwork_ServerName & "\scor\doc\" & num_facture.ToString & "_*")
        End While
        Facture.Supprimer_FSE(num_facture.ToString, False, False, False, False, True)
        affiche_histo_facture()
        Scor_Label_refresh()

        If message_produits <> "" Then
            MyMsg_Box.Presentation("Produits non ajoutés :", message_produits, False, "", False, "", True, "Ok")
            MyMsg_Box.ShowDialog()
        End If

    End Sub


    Public Sub Scor_Label_refresh()
        Dim nombre As Integer = ScanOrdo.SCOR_PJTableAdapter.GetDataBy_Num_Facture("Prescan" & Config.Idposte).Rows.Count
        If nombre <= 1 Then
            Scor_Label.Text = "SCOR:" & vbCrLf & nombre.ToString & " document scanné"
        Else
            Scor_Label.Text = "SCOR:" & vbCrLf & nombre.ToString & " documents scannés"
        End If
    End Sub

    Private Sub Scor_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Scor_LinkLabel.LinkClicked
        ScanOrdo.SCOR_PJTableAdapter.Delete_ny_Num_Facture("Prescan" & Config.Idposte)
        Dim file = Dir(Config.LocalNetwork_ServerName & "\scor\doc\" & "Prescan" & Config.Idposte & "*")
        While file <> ""
            Try
                My.Computer.FileSystem.DeleteFile(Config.LocalNetwork_ServerName & "\scor\doc\" & file)
            Catch ex As Exception

            End Try

            file = Dir(Config.LocalNetwork_ServerName & "\scor\doc\" & "Prescan" & Config.Idposte & "*")
        End While
        Scor_Label.Text = "SCOR:" & vbCrLf & "0 document scanné"
    End Sub

    Private Sub Dossier_patient_Factures_Reprise_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Dossier_patient_Factures_Reprise_LinkLabel.LinkClicked
        If Encaissement_attente_LinkLabel.Text <> "En Attente: 0€" Then
            MyMsg_Box.Presentation("Officine", "Pas de reprise tant que encaissement en attente", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If

        'reprise de facture SV seulement
        If Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Type.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value <> "SV" Then Exit Sub

        Dossier_Patient_LinkLabel_LinkClicked(Nothing, Nothing)
        Application.DoEvents()
        'While Vente.Rows.Count > 0
        '    Vente.Rows.RemoveAt(0)
        'End While
        'Vente.Rows.Add()

        Dim num_facture = Dossier_patient_Factures_DataGridView.Item(Dossier_patient_Factures_Column_Num.Index, Dossier_patient_Factures_DataGridView.CurrentCell.RowIndex).Value

        If Me.FacturesTableAdapter.GetFactureDataByNum1(Val(num_facture)).Rows.Count = 0 Then
            MyMsg_Box.Presentation("Officine", "Cette facture n'est plus dans la base de données.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        Dim facture = Me.FacturesTableAdapter.GetFactureDataByNum1(Val(num_facture)).Item(0)

        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'REMETTRE FACTURE EN TRANSMISSION SI PAS DE RETOUR
        Dim retourAMO = False
        Dim retourAMC = False
        For Each rejet As PharmaDataSet.RSP_LIGNE_REJETRow In Teletransmission_MAIN.RSP_LIGNE_REJETTableAdapter.GetDataBy_numfactureAsInt_acquittement(CInt(num_facture), False)
            If rejet.PART_CONCERNE = "AMO" Then
                retourAMO = True
            ElseIf rejet.PART_CONCERNE = "AMC" Then
                retourAMC = True
            End If
        Next
        For Each rejet As PharmaDataSet.RSP_LIGNE_REJETRow In Teletransmission_MAIN.RSP_LIGNE_REJETTableAdapter.GetDataBy_numfactureAsInt_acquittement(num_facture, True)
            If rejet.PART_CONCERNE = "AMO" Then
                retourAMO = True
            ElseIf rejet.PART_CONCERNE = "AMC" Then
                retourAMC = True
            End If
        Next
        Dim numfacture_String = num_facture.ToString
        While numfacture_String.Length < 9
            numfacture_String = "0" & numfacture_String
        End While
        For Each paiement As PharmaDataSet.RSP_PaiementsRow In Teletransmission_MAIN.RSP_PaiementsTableAdapter.GetDataBy_NumFacture(numfacture_String)
            If paiement.Part = "AMO" Then
                retourAMO = True
            ElseIf paiement.Part = "AMC" Then
                retourAMC = True
            End If
        Next
        If retourAMO = False And retourAMC = False Then
            If Dir(Config.Repertoires_RepertoireFactures & "Traitées\*@" & numfacture_String & "@*") <> "" Then
                MyMsg_Box.Presentation("Officine ?", "Cette facture n'a reçu aucun retour de transmission, souhaitez-vous la remettre en transmission?", True, "OUI", True, "NON", True, "Annuler")
                Select Case MyMsg_Box.ShowDialog
                    Case Windows.Forms.DialogResult.Yes
                        Dim Fichier = Dir(Config.Repertoires_RepertoireFactures & "Traitées\*@" & numfacture_String & "@*")
                        While Fichier <> ""
                            Try
                                My.Computer.FileSystem.MoveFile(Config.Repertoires_RepertoireFactures & "Traitées\" & Fichier, Config.Repertoires_RepertoireFactures & Fichier, True)
                                Fichier = Dir()
                            Catch ex As Exception
                            End Try
                        End While
                        Exit Sub
                    Case Windows.Forms.DialogResult.Cancel
                        Exit Sub
                End Select
            ElseIf Dir(Config.Repertoires_RepertoireFactures & "*@" & numfacture_String & "@*") <> "" Then
                MyMsg_Box.Presentation("Officine ?", "Cette facture est en attente de transmission, souhaitez-vous poursuivre la reprise?", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.No Then
                    Exit Sub
                End If
            End If
        End If
        'REMETTRE FACTURE EN TRANSMISSION SI PAS DE RETOUR
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        Dim lignes_facture = Me.Facture_LigneFactureTableAdapter1.GetDataByNumFacture(num_facture)
        Dim actes = Me.ActesTableAdapter.GetDataByNumFacturesSV(num_facture)

        Reprise_Facture_Num = facture.Num
        Encaissement_attente_LinkLabel.Text = "Reprise Fact " & Reprise_Facture_Num.ToString

        'prescripteur
        Dim num_prescr As String = ""
        Dim date_prescr As String = ""
        If facture.G1211C1 <> "" Then
            num_prescr = facture.G1211C1 & facture.G1211C2
            date_prescr = facture.G1211C3
        ElseIf facture.G1213C1 <> "" Then
            num_prescr = facture.G1213C1 & facture.G1213C2
            date_prescr = facture.G1213C4
        ElseIf facture.G1214C1 <> "" Then
            num_prescr = facture.G1214C1 & facture.G1214C2
            date_prescr = facture.G1214C4
        End If
        PrescripteurMyCombobox.Text = num_prescr
        PrescripteurMyCombobox_Validated(Nothing, Nothing)
        Dim parsedDate As Date
        DateTime.TryParseExact(Mid(date_prescr, 1, 8), "yyyyMMdd", Nothing, DateTimeStyles.None, parsedDate)
        DatePrecription.Value = parsedDate

        'Date exec
        DateTime.TryParseExact(Mid(actes.Item(0)._Date, 1, 8), "yyyyMMdd", Nothing, DateTimeStyles.None, parsedDate)
        DateExecution.Value = parsedDate


        Dim message_produits As String = ""

        'apiBlockInput(1)
        Vente_datagridview_auto_filling = True

        Vente.Focus()

        If lignes_facture.Rows.Count > 0 Then
            If Not lignes_facture(0).IsG1850C2Null Then
                Renouvellement_TextBox.Text = Val(lignes_facture(0).G1850C2).ToString
            End If
        End If

        For r = 0 To actes.Rows.Count - 1

            Dim produit As String = ""

            If actes.Item(r).EAN13 <> "" Then
                produit = actes.Item(r).EAN13
            ElseIf actes.Item(r).CIP <> "" Then
                produit = actes.Item(r).CIP
            ElseIf actes.Item(r).Désignation <> "" Then
                produit = actes.Item(r).Désignation
            End If

            Dim p = BDD.ProduitsTableAdapter.Recherche_produit(produit).Rows.Count

            If InStr(produit, "Honoraire de Dispensation") <> 1 And InStr(produit, "Honoraire dispensation complexe") <> 1 Then
                If p = 1 Then
                    Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.Rows.Count - 1)
                    Dim quantité As Integer = actes.Item(r).Quantité
                    Dim typeacte As String = actes.Item(r).TypeActe

                    Dim combbx = CType(Vente.Item(VenteType.Index, Vente.CurrentRow.Index), DataGridViewComboBoxCell)
                    combbx.Value = combbx.Items(0)
                    'Vente.Item(VenteType.Index, 0).Value = typeacte
                    Vente.CurrentCell = Vente.Item(VenteType.Index, Vente.CurrentRow.Index)
                    Valide_VenteCells = True
                    Vente_CellValidated(Nothing, Nothing)
                    Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index).Value = produit
                    Vente.CurrentCell = Vente.Item(Vente_produits.Index, Vente.CurrentRow.Index)
                    Valide_VenteCells = True
                    Vente_CellValidated(Nothing, Nothing)
                    'Vente.Item(VenteQuantité.Index, 0).Value = quantité

                    Vente.CurrentCell = Vente.Item(VenteQuantité.Index, Vente.CurrentRow.Index)
                    capslock_off()
                    Vente.BeginEdit(True)
                    SendKeys.Send(quantité.ToString)
                    SendKeys.Send("{ENTER}")
                    Application.DoEvents()
                ElseIf p = 0 Then
                    message_produits = message_produits & "Produit inconnu: " & actes.Item(r).Désignation & vbCrLf & vbCrLf
                ElseIf p > 1 Then
                    message_produits = message_produits & "Produit multiple: " & actes.Item(r).Désignation & vbCrLf & vbCrLf
                End If
            End If



        Next
        'apiBlockInput(0)
        Vente_datagridview_auto_filling = False

        DateExecution.Enabled = True
        If message_produits <> "" Then
            MyMsg_Box.Presentation("Produits non ajoutés :", message_produits, False, "", False, "", True, "Ok")
            MyMsg_Box.ShowDialog()
        End If

    End Sub


    Private Sub Vente_DefaultValuesNeeded(sender As Object, e As DataGridViewRowEventArgs) Handles Vente.DefaultValuesNeeded
        e.Row.Cells(Vente_Stock_Suivi.Index).Value = False
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        If Not CurrentBenéficiaire.G104C1 = "" Then
            Comptoir_AMC_famille.ShowDialog()
        End If

    End Sub

    Public Sub info_Enregistrer_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles info_Enregistrer_LinkLabel.LinkClicked
        Try
            EnregistreDonnéesClientversBDD()
            CurrentBenéficiaire.Num = Me.VitaleTableAdapter.GetDataBénéficiaire(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14).Item(0).Num
            Last_VitalNum = CurrentBenéficiaire.Num
        Catch ex As Exception
            MyMsg_Box.Presentation("Officine !", "Erreur enregistrement données patient.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End Try
        MyMsg_Box.Presentation("Officine !", "Données patient enregistrées.", False, "", False, "", True, "OK")
        MyMsg_Box.ShowDialog()
    End Sub

    Private Sub PDAROBOTToolStripMenuItem_CheckedChanged(sender As Object, e As EventArgs) Handles PDAROBOTToolStripMenuItem.CheckedChanged
        RechercheProduits_Tous_RadioButton.Checked = False
        RechercheProduits_Préférés_RadioButton.Checked = Not PDAROBOTToolStripMenuItem.Checked
        RechercheProduits_ROBOT_RadioButton.Checked = PDAROBOTToolStripMenuItem.Checked
    End Sub

    Private Sub Vente_CellEnter(sender As Object, e As DataGridViewCellEventArgs) Handles Vente.CellEnter
        Try
            If e.ColumnIndex = Vente_produits.Index And e.RowIndex = Vente.RowCount - 1 And Vente.RowCount > 1 And Vente.Item(Vente_produits.Index, e.RowIndex - 1).Value = "" Then

                SendKeys.Send("{UP}")

                
            End If
        Catch ex As Exception

        End Try
      
    End Sub



    Private Sub Age_Patient_Label_Click(sender As Object, e As EventArgs) Handles Age_Patient_Label.Click
        DP.imprim_Attestation_Création()
    End Sub

    Private Sub Delivrance_Lieu_MyCombobox_TextChanged(sender As Object, e As EventArgs) Handles Delivrance_Lieu_MyCombobox.TextChanged
        If CurrentBenéficiaire.G101C8 <> "" Or CurrentBenéficiaire.G104C12 <> "" Or CurrentBenéficiaire.G104C13 <> "" Or CurrentBenéficiaire.G104C14 <> "" Or CurrentBenéficiaire.G104C1 <> "" Or CurrentBenéficiaire.G104C3 <> "" Then
            If CurrentBenéficiaire.Delivrance_Lieu <> Delivrance_Lieu_MyCombobox.Text Then
                Try
                    CurrentBenéficiaire.Delivrance_Lieu = Delivrance_Lieu_MyCombobox.Text
                    EnregistreDonnéesClientversBDD()
                    CurrentBenéficiaire.Num = Me.VitaleTableAdapter.GetDataBénéficiaire(CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14).Item(0).Num
                    Last_VitalNum = CurrentBenéficiaire.Num
                Catch ex As Exception
                    MyMsg_Box.Presentation("Officine !", "Erreur enregistrement données patient.", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Exit Sub
                End Try
            End If
        End If
    End Sub



    Private Sub Set_DMP_Status(sender As Object, e As EventArgs) Handles DMP_Statut_MyCombobox.SelectedIndexChanged
        If CurrentBenéficiaire.Num > 0 Then
            If DMP_Statut_MyCombobox.SelectedItem <> CurrentBenéficiaire.DMP_Statut Then
                BDD.VitaleTableAdapter.Update_DMP_Statut(DMP_Statut_MyCombobox.Text, CurrentBenéficiaire.Num)
            End If

        End If
    End Sub


    Private Sub DMP_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles DMP_LinkLabel.LinkClicked
        System.Diagnostics.Process.Start("iexplore", "http://www.DMP.fr")
    End Sub

    Private Sub PrescripteurMyCombobox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles PrescripteurMyCombobox.SelectedIndexChanged

    End Sub

    Private Sub LinkLabel2_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel2.LinkClicked
        Histo_Nbre_mois_TextBox.Text = "24"
    End Sub

    Private Sub LinkLabel4_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel4.LinkClicked
        Histo_Nbre_mois_TextBox.Text = "60"
    End Sub

    Private Sub LinkLabel3_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel3.LinkClicked
        Histo_Nbre_mois_TextBox.Text = "1200"
    End Sub

    Private Sub Dossier_Patient_TabControl_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Dossier_Patient_TabControl.SelectedIndexChanged
        If Dossier_Patient_TabControl.SelectedTab Is Dossier_Patient_Historique_TabPage Then
            If Histo_Nbre_mois_TextBox.Text = "0" Then
                Histo_Nbre_mois_TextBox.Text = "4"
            End If
        End If

    End Sub

    Public Sub chargement_patient_VitaleNum(ByVal VitaleNum As Integer)
        Try
            'me.Histo_Nbre_mois_TextBox.Text = "0"
            Dim patient = BDD.VitaleTableAdapter.GetDataBy_Num(Vitalenum).Item(0)
            If Me.Visible = False Then
                Me.Visible = True
                Me.WindowState = FormWindowState.Maximized
                Me.affiche_user()
                Me.Select()
            Else
                Me.WindowState = FormWindowState.Maximized
                Me.affiche_user()
                Me.Select()

            End If
            Me.Chargement_CurrentBenéficiaire_degradé(patient.G101C8, patient.G104C12, patient.G104C13, patient.G104C14)
            
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub


    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        If Last_VitalNum <> 0 Then
            chargement_patient_VitaleNum(Last_VitalNum)
        End If
    End Sub

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        If CurrentBenéficiaire.Num = 0 Then Exit Sub
        Dim scor As New ScanOrdo
        scor.Alter_Mode_Fonctionement = "Chronique"
        If options_scanner_SCOR_CheckBox.Checked Then
            SCOR_show_scanner_interface = True
        Else
            SCOR_show_scanner_interface = False
        End If
        scor.ShowDialog()
        Dim Chroniques = BDD.ChroniqueTableAdapter.GetDataBy_Vitale_Num_List(CurrentBenéficiaire.Num)
    End Sub



   
 
    Private Sub Ordos_DataGridView_SelectionChanged(sender As Object, e As EventArgs) Handles Ordos_DataGridView.SelectionChanged
        Try
            Ordo_Modif_OK_Button.Visible = False
            Ordo_Modif_annul_Button.Visible = False
            If Ordos_DataGridView.CurrentRow.Index < 0 Then Exit Sub

            Id_OrdoTextBox.Text = Ordos_DataGridView.Item(IdOrdoDataGridViewTextBoxColumn.Index, Ordos_DataGridView.CurrentRow.Index).Value
            EtatTextBox.Text = Ordos_DataGridView.Item(EtatDataGridViewTextBoxColumn.Index, Ordos_DataGridView.CurrentRow.Index).Value

            Renouvellement_restantTextBox.Text = Ordos_DataGridView.Item(RenouvellementrestantDataGridViewTextBoxColumn.Index, Ordos_DataGridView.CurrentRow.Index).Value
            Notes_PrescripteurRichTextBox.Text = Ordos_DataGridView.Item(NotesPrescripteurDataGridViewTextBoxColumn.Index, Ordos_DataGridView.CurrentRow.Index).Value
            Notes_PharmaRichTextBox.Text = Ordos_DataGridView.Item(NotesPharmaDataGridViewTextBoxColumn.Index, Ordos_DataGridView.CurrentRow.Index).Value
            Ordo_Date_PrescrDateTimePicker.Value = Ordos_DataGridView.Item(Ordo_Date_Prescr.Index, Ordos_DataGridView.CurrentRow.Index).Value

        Catch ex As Exception

        End Try
    End Sub



    Private Sub Ordo_Modif_Button_Click_1(sender As Object, e As EventArgs) Handles Ordo_Modif_Button.Click
        Ordo_Date_PrescrDateTimePicker.Enabled = True
        Renouvellement_restantTextBox.Enabled = True
        Notes_PharmaRichTextBox.Enabled = True
        Ordo_Modif_OK_Button.Visible = True
        Ordo_Modif_annul_Button.Visible = True

    End Sub

    Private Sub Ordo_Modif_annul_Button_Click(sender As Object, e As EventArgs) Handles Ordo_Modif_annul_Button.Click
        Ordos_DataGridView_SelectionChanged(Nothing, Nothing)
    End Sub

    Private Sub Ordo_Modif_OK_Button_Click(sender As Object, e As EventArgs) Handles Ordo_Modif_OK_Button.Click
        BDD.OrdoTableAdapter.Update_Renouvellement_restant(CInt(Renouvellement_restantTextBox.Text), CInt(Id_OrdoTextBox.Text))
        BDD.OrdoTableAdapter.Update_Notes_Pharma(Notes_PharmaRichTextBox.Text, CInt(Id_OrdoTextBox.Text))
        BDD.OrdoTableAdapter.Update_Ordo_Date_Prescr(Ordo_Date_PrescrDateTimePicker.Value, CInt(Id_OrdoTextBox.Text))
        Ordos_DataGridView_SelectionChanged(Nothing, Nothing)
    End Sub

    Private Sub LinkLabel5_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel5.LinkClicked
        If CurrentBenéficiaire.Num <> 0 Then
            PDA_VItaleNum_InfoCompl.ShowDialog()
        End If
    End Sub


 

    Private Sub AMC_Enregistrer_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles AMC_Enregistrer_LinkLabel.LinkClicked

        Try
            AMC_Enregistrer_LinkLabel.Text = "Enregistrement"
            Application.DoEvents()
            If ClientConnu() = False Then
                AMC_Enregistrer_LinkLabel.Text = "Patient inconnu, les informaions seront enregistrées lors de la facturation"
            Else
                Me.VitaleTableAdapter.Update_AMC(AMC_NumAMC_TextBox.Text, DateString_To_DateVitale(AMC_DateDebut_MaskedTextBox.Text), DateString_To_DateVitale(AMC_DateFin_MaskedTextBox.Text), _
                                                 AMC_Numadhérent_TextBox.Text, CurrentBenéficiaire.AMC_TypeContrat, AMC_Piècejustificative_ComboBox.SelectedIndex.ToString, _
                CurrentBenéficiaire.G101C8, CurrentBenéficiaire.G101C9, CurrentBenéficiaire.G104C12, CurrentBenéficiaire.G104C13, CurrentBenéficiaire.G104C14)
                If NuméroDAMCAssociéeToolStripMenuItem.Checked = False Then
                    If CurrentBenéficiaire.AMC_NumMutuelle = "" Then
                        CurrentBenéficiaire.G107C1 = ""
                        Me.VitaleTableAdapter.Update_Mutuelle_G107_G108("", "", "", "", "", "", "", "", "", "", "", "", "", CurrentBenéficiaire.Num)
                    End If

                End If
                AMC_Enregistrer_LinkLabel.Text = "Informations enregistrées"
            End If

        Catch ex As Exception
            AMC_Enregistrer_LinkLabel.Text = "Erreur lors de l'enregistrement"
        End Try
    End Sub



    Private Sub Chronique_Selection_Ordo_LinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Chronique_Selection_Ordo_LinkLabel.LinkClicked
        If CurrentBenéficiaire.Num <> 0 Then
            Chronique_Selection_Ordo.ShowDialog()
        End If
    End Sub


End Class