Sist endret: 30. jun. 2025

Brukerstyrt signering

Slik setter du opp brukerstyrt signering i tjenesten din.

Hva betyr brukerstyrt signering?

Brukerstyrt signering krever versjon 8.6.0 av Altinn nugets, eller høyere.

Med brukerstyrt signering mener vi en app der de som skal signere får rettigheter til å signere mens de fyller ut skjemaet.

Appen kan for eksempel be skjemaeieren om å oppgi fødselsnummer og etternavn for personer som skal signere, eller organisasjonsnummer hvis det er noen som skal ha rett til å signere på vegne av en virksomhet.

Når skjemaet er ferdig fylt ut, klikker brukeren på Send til signering. Da vil appen delegere rettigheter og sende en melding til innboksen i Altinn. Det er også mulig å sette opp at de som skal signere får varsel på e-post og SMS.

Avhengigheter

Brukerstyrt signering avhenger av Meldingstjenesten (Correspondence) i Altinn. Den må du sette opp utenom.

Meldingstjenesten brukes for å gi beskjed til de som skal signere om at de må signere et skjema i Altinn, og for å sende en kvittering til innboksen deres når de har signert.

Slik kommer du i gang med meldingstjenesten.

Eksempel på konfigurasjon

I dette repoet ligger det et eksempel på en app som har brukerstyrt signering.

Flyten i appen er slik:

  1. Den som fyller ut skjemaet oppgir fødselsnummer og etternavn, eller eventuelt organisasjonsnummer hvis den som skal signere representerer en virksomhet.
  2. Når skjemaet er ferdig utfylt, klikker den som fyller ut på “Til signering”. Det beveger prosessen til neste steg, som er signeringssteget.
  3. Når signeringssteget blir startet, kaller appen opp en implementering av grensesnittet ISigneeProvider, som dere må implementere, for å finne ut hvem som må få tillatelse til å signere.
  4. De som skal signere får delegert de rettighetene de trenger, og de blir varslet om at de har en signeringsoppgave.
  5. Skjemaet de skal signere kommer i innboksen slik at de kan åpne det, se over informasjonen og signere.
  6. Innsenderen signerer også, hvis appen er satt opp til det, og deretter blir skjemaet sendt inn.

Merk: Vi støtter ikke automatisk innsending enda.

Følg trinnene under for å sette opp en slik app.

1. Legg til en signeringsoppgave i appens prosess, med tilhørende konfigurasjon

    Utvid app prossesen med signing task:

    Det må legges til et signeringssteg i appens prosess, som er definert i App/config/process/process.bpmn.

    Det anbefales å dra inn prosessteget via prosessdesigneren i Altinn Studio. Da får man generert BPMN-diagram som viser flyten i appen. Forløpig vil prosessdesigneren bare delvis konfigurere steget riktig, så det må suppleres med manuell konfigurasjon.

    Signering benytter to burkerhandlinger (user actions):

    • sign: Selve signeringshandlingen.
    • reject: Dersom det skal være mulig å avbryte signeringssteget, så må det også legges til en gateway for å styre hvor prosessen skal gå videre når det skjer.

    Dersom Altinn-brukergrensesnittet benyttes av appen, så vil handlingene ovenfor bli kalt ved knappetrykk i signeringssteget. Om kun API-et benyttes, så må disse kalles manuelt via /actions-endepunktet eller process next.

    Et signeringssteg kan se omtrent slik ut:

    <bpmn:task id="SigningTask" name="Signering">
        <bpmn:extensionElements>
            <altinn:taskExtension>
                <altinn:taskType>signing</altinn:taskType>
                <altinn:actions>
                <altinn:action>sign</altinn:action>
                <altinn:action>reject</altinn:action>
                </altinn:actions>
                <altinn:signatureConfig>
                    <!-- De faktiske dataene som skal signeres. Kan være vedlegg, skjemadata i xml, -->
                    <!-- eller PDF fra tidligere steg. -->
                    <altinn:dataTypesToSign>
                        <altinn:dataType>ref-data-as-pdf</altinn:dataType>
                    </altinn:dataTypesToSign>
    
                    <!-- Denne datatypen brukes for lagre signaturene. -->
                    <altinn:signatureDataType>signatures</altinn:signatureDataType>
    
                    <!-- Denne datatypen brukes for lagre signatarene og tilhørende informasjon. -->
                    <altinn:signeeStatesDataTypeId>signeeState</altinn:signeeStatesDataTypeId>
    
                    <!-- Denne ID-en angir hvilken implementasjon av C# interface-et -->
                    <!-- ISigneeProvider som skal benyttes for dette signeringssteget. -->
                    <altinn:signeeProviderId>signees</altinn:signeeProviderId>
    
                    <!-- Her oppgis en correspondence resource, som brukes for å si fra til signaterene -->
                    <!-- om at de må inn og signere, samt signeringskvittering. Påkrevd. -->
                    <altinn:correspondenceResource>app-correspondence-resource</altinn:correspondenceResource>
    
                    <!-- Dersom man ønsker at det skal bli generert en PDF av signeringssteget -->
                    <!-- så kan man oppgi en datatype her av type application/pdf. -->
                    <altinn:signingPdfDataType>signing-step-pdf</altinn:signingPdfDataType> <!-- optional -->
    
                    <!-- Vi har laget en standard validator som kan slås på her. Den validerer at -->
                    <!-- alle signatarer har signert og at minCount på signatur-datatypen er oppfylt. -->
                    <!-- Om denne ikke slås på, bør man skrive egen validering av signaturer. -->
                    <altinn:runDefaultValidator>true</altinn:runDefaultValidator
                </altinn:signatureConfig>
            </altinn:taskExtension>
        </bpmn:extensionElements>
        <bpmn:incoming>SequenceFlow_1oot28q</bpmn:incoming>
        <bpmn:outgoing>SequenceFlow_1if1sh9</bpmn:outgoing>
    </bpmn:task>
    

    Konfigurere miljø-spesifikke correspondence ressurser

    Hvis du ønsker å bruke miljø-spesifikke correspondence ressurser kan du konfigurere dem ved å bruke følgende syntaks:

    <altinn:signatureConfig>
        ...
      <altinn:correspondenceResource env="Development">app-correspondence-resource-1</altinn:correspondenceResource>
      <altinn:correspondenceResource env="Staging">app-correspondence-resource-2</altinn:correspondenceResource>
      <altinn:correspondenceResource env="Production">app-correspondence-resource</altinn:correspondenceResource>
        ...
    </altinn:signatureConfig>
    

    Altinn miljø-mapping:

    Development -> “development”, “dev”, “local”, “localtest”

    Staging -> “staging”, “test”, “at22”, “at23”, “at24”, “tt02”, “yt01”

    Production -> “production”, “prod”, “produksjon”

    Legg til datatyper for å lagre signeringsdata

    Disse datatypene legger til i dataTypes i App/config/applicationmetadata.json.

    Den første datatypen benyttes av signeringssteget til å lagre de faktiske signaturene som genereres når brukeren utfører signeringshandlingen.

    {
        "id": "signatures",
        "taskId": "SigningTask",
        "allowedContentTypes": [
            "application/json"
        ],
        "allowedContributors": [
            "app:owned"
        ],
        "minCount": 1
    }
    

    Denne datatypen benyttes for å lagre informasjon om signatarene som skal få deligert rettigheter til å signere og statusen deres.

    {
        "id": "signeeState",
        "taskId": "SigningTask",
        "allowedContentTypes": [
            "application/json"
        ],
        "allowedContributors": [
            "app:owned"
        ],
        "maxCount": 1,
        "minCount": 1
    }
    

    Det er viktig å sette allowedContributors til "app:owned". Det gjør at disse dataene ikke kan redigeres via appens API, men kun av appen selv. Før versjon 8.6 var denne konfigurasjonen feilstavet allowedContributers.

    Datatypenes ID-er kan settes til noe annet, men det må matche ID-ene som legges inn i signatureDataType og signeeStatesDataTypeId i prossessteget, som vist i punktet under.

    Tilgangsstyring

    Gi read, write og eventuelt sign til den som fyller ut skjemaet.

    For at appen skal kunne delegere rettigheter til de som skal signere så må appen få rettigheter til å delegere read og sign. Se eksempel nedenfor.

    • Bytt ut ttd med riktig org.
    • Bytt ut app_ttd_signering-brukerstyrt med tilsvarende app_{org}_{appnavn}.
    • Bytt ut signering-brukerstyrt med appnavn.
    
    <xacml:Rule RuleId="urn:altinn:org:ttd:signering-brukerstyrt:ruleid:7" Effect="Permit">
      <xacml:Description>
          A rule defining all instance delegation rights the App itself is allowed to perform for instances of the app ttd/signering-brukerstyrt. In this example the app can delegate the Read and Sign actions for task SingingTask.
      </xacml:Description>
      <xacml:Target>
          <xacml:AnyOf>
              <xacml:AllOf>
                  <xacml:Match
                      MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
                      <xacml:AttributeValue
                          DataType="http://www.w3.org/2001/XMLSchema#string">
                          app_ttd_signering-brukerstyrt
                      </xacml:AttributeValue>
                      <xacml:AttributeDesignator
                          AttributeId="urn:altinn:resource:delegation"
                          Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
                          DataType="http://www.w3.org/2001/XMLSchema#string"
                          MustBePresent="false"
                      />
                  </xacml:Match>
              </xacml:AllOf>
          </xacml:AnyOf>
          <xacml:AnyOf>
              <xacml:AllOf>
                  <xacml:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                      <xacml:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ttd</xacml:AttributeValue>
                      <xacml:AttributeDesignator
                          AttributeId="urn:altinn:org"
                          Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
                          DataType="http://www.w3.org/2001/XMLSchema#string"
                          MustBePresent="false"
                      />
                  </xacml:Match>
                  <xacml:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                      <xacml:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">signering-brukerstyrt</xacml:AttributeValue>
                      <xacml:AttributeDesignator
                          AttributeId="urn:altinn:app"
                          Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
                          DataType="http://www.w3.org/2001/XMLSchema#string"
                          MustBePresent="false"
                      />
                  </xacml:Match>
                  <xacml:Match
                      MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                      <xacml:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SingingTask</xacml:AttributeValue>
                      <xacml:AttributeDesignator
                          AttributeId="urn:altinn:task"
                          Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
                          DataType="http://www.w3.org/2001/XMLSchema#string"
                          MustBePresent="false"
                      />
                  </xacml:Match>
              </xacml:AllOf>
          <xacml:AnyOf>
              <xacml:AllOf>
                  <xacml:Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
                      <xacml:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</xacml:AttributeValue>
                      <xacml:AttributeDesignator
                          AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"
                          Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action"
                          DataType="http://www.w3.org/2001/XMLSchema#string"
                          MustBePresent="false"
                      />
                  </xacml:Match>
              </xacml:AllOf>
              <xacml:AllOf>
                  <xacml:Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
                      <xacml:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">sign</xacml:AttributeValue>
                      <xacml:AttributeDesignator
                          AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"
                          Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action"
                          DataType="http://www.w3.org/2001/XMLSchema#string"
                          MustBePresent="false"
                      />
                  </xacml:Match>
              </xacml:AllOf>
          </xacml:AnyOf>
      </xacml:Target>
    </xacml:Rule>
    

    Dette steget må gjøres manuelt. Støtte for konfigurasjon i Altinn Studio kommer senere. Se “Manuelt oppsett”-fanen for denne seksjonen for veiledning.

    2. Legg til layout-set for signering

      Legg til en ny mappe under App/ui for signeringsoppgaven din. Kall den f.eks. signing.

      Oppdater filen App/ui/layout-sets.json med ny sidegruppe, som har samme id som mappen du nettopp opprettet.

      Din oppdaterte layout-sets.json kan se slik ut:

      {
        "$schema": "https://altinncdn.no/toolkits/altinn-app-frontend/4/schemas/json/layout/layout-sets.schema.v1.json",
        "sets": [
          {
            "id": "form",
            "dataType": "model",
            "tasks": [
              "Task_1"
            ]
          },
          {
            "id": "signing",
            "dataType": "model",
            "tasks": [
              "SigningTask"
            ]
          }
        ]
      }
      

      I mappen du opprettet, legg til en ny fil kalt signing.json.

      Det finnes et sett med ferdige komponenter for å bygge opp layout for et signeringssteg. Vi anbefaler å bruke disse, men de er ikke obligatoriske.

      • SigneeList:
        • Lister ut signatarer og tilhørende signeringsstatus. Les mer her.
      • SigningDocumentList:
        • Lister ut dataene som blir signert på. Feks. vedlegg, xml-data eller PDF-oppsummering fra tidligere steg. Les mer her.
      • SigningActions:
        • Utleder status for signeringssteget og viser relevante knapper til sluttbruker, feks. “Signer”-knappen. Les mer her.

      Dersom du ikke benytter SigningActions for å vise “Signer”-knappen, så må du legge til en egen action button med action “sign”, for å la sluttbruker signere.

      Eksempel på bruk av komponentene:

      {
      "$schema": "https://altinncdn.no/schemas/json/layout/layout.schema.v1.json",
      "data": {
        "layout": [
          {
            "id": "headerSigningFounders",
            "type": "Header",
            "size": "M",
            "textResourceBindings": {
              "title": "Her kan man ha en overskrift"
            }
          },
          {
            "id": "signee-list",
            "type": "SigneeList",
            "textResourceBindings": {
              "title": "Personer som skal signere",
              "description": "Personer som skal signere beskrivelse",
              "help": "Dette er personer som skal signere"
            }
          },
          {
            "id": "signing-documents",
            "type": "SigningDocumentList",
            "textResourceBindings": {
              "title": "Dokumenter som skal signeres",
              "description": "Dokumenter som skal signeres beskrivelse"
            }
          },
          {
            "id": "signing-state",
            "type": "SigningActions"
          }
        ]
      }
      }
      

      Dette steget må gjøres manuelt. Støtte for konfigurasjon i Altinn Studio kommer senere. Se “Manuelt oppsett”-fanen for denne seksjonen for veiledning.

      3. Valgfritt - Egendefinert validering

      Du kan bruke standardvalidatoren som nevnt i punkt 2. Den verifiserer at antall signaturer er minst det som er satt til minCount på feltet i datamodellen. Egendefinert validering kan settes opp ved å implementere IValidator eller ITaskValidator, som beskrevet i Hvordan legge til egendefinert validering.

      Om appen er konfigurert slik at utførelsen av signeringshandlingen gjøres i prosessnavigasjonen, så vil handlingen utføres før valideringen.

      Et eksempel er en validator som verifiserer at en signatur er gjort på vegne av en organisasjon:

      public class SigningTaskValidator : IValidator
      {
          private readonly IProcessReader _processReader;
      
          public SigningTaskValidator(IProcessReader processReader)
          {
              _processReader = processReader;
          }
      
          /// <summary>
          /// Vi implementerer <see cref="ShouldRunForTask"/> i stedet.
          /// </summary>
          public string TaskId => "*";
      
          /// <summary>
          /// Kjører kun for steg med stegtype "signing".
          /// </summary>
          public bool ShouldRunForTask(string taskId)
          {
              AltinnTaskExtension? taskConfig;
              try
              {
                  taskConfig = _processReader.GetAltinnTaskExtension(taskId);
              }
              catch (Exception)
              {
                  return false;
              }
              
              return taskConfig?.TaskType == "signing";
          }
      
          public bool NoIncrementalValidation => true;
      
          /// <inheritdoc />
          public Task<bool> HasRelevantChanges(IInstanceDataAccessor dataAccessor, string taskId, DataElementChanges changes)
          {
              throw new UnreachableException(
                  "HasRelevantChanges should not be called because NoIncrementalValidation is true."
              );
          }
      
          /// <inheritdoc />
          /// <remarks>Validerer at minst en av signaturene er gjort på vegne av en organisasjon.</remarks>
          public async Task<List<ValidationIssue>> Validate(
              IInstanceDataAccessor instanceDataAccessor,
              string taskId,
              string? language
          )
          {
              AltinnSignatureConfiguration signatureConfiguration =
                  (_processReader.GetAltinnTaskExtension(taskId)?.SignatureConfiguration)
                  ?? throw new ApplicationConfigException("Signing configuration not found in AltinnTaskExtension");
      
              string signatureDataTypeId =
                  signatureConfiguration.SignatureDataType
                  ?? throw new ApplicationConfigException("SignatureDataType is not set in the signature configuration.");
      
              IEnumerable<DataElement> signatureDataElements = instanceDataAccessor.GetDataElementsForType(
                  signatureDataTypeId
              );
      
              SignDocument[] signDocuments = await Task.WhenAll(
                  signatureDataElements.Select(async signatureDataElement =>
                  {
                      ReadOnlyMemory<byte> data = await instanceDataAccessor.GetBinaryData(signatureDataElement);
                      string signDocumentSerialized = Encoding.UTF8.GetString(data.ToArray());
      
                      return JsonSerializer.Deserialize<SignDocument>(signDocumentSerialized)
                          ?? throw new JsonException("Could not deserialize signature document.");
                  })
              );
      
              var organisationHasSigned = signDocuments.Any(doc => doc?.SigneeInfo?.OrganisationNumber is not null);
      
              if (organisationHasSigned is false)
              {
                  return
                  [
                      new ValidationIssue
                      {
                          Code = "SignatureIssues",
                          Severity = ValidationIssueSeverity.Error,
                          Description = "An organisation must sign the document.",
                      },
                  ];
              }
              return [];
          }
      }
      

      4. Oppgi hvem som skal signere

        For at appen skal vite hvem som skal få tilganger for å lese og signere må C# interface-et ISigneeProvider implementeres.

        Den må returnere et sett med personer og/eller virksomheter som skal få rettighetene. Det kan for eksempel være basert på datamodellen, som vist nedenfor. Id-attributtet i denne implementasjonen må matche ID som ble angitt i <altinn:signeeProviderId>.

        Når en organisasjon er oppgitt som signatar så vil de som har en nøkkelrolle i organisasjonen få read og sign rettigheter til instansen.

        #nullable enable
        using System.Collections.Generic;
        using System.Linq;
        using System.Threading.Tasks;
        using Altinn.App.Core.Features;
        using Altinn.App.Core.Features.Signing;
        using Altinn.App.Models.Skjemadata;
        using Altinn.Platform.Storage.Interface.Models;
        
        namespace Altinn.App.logic;
        
        public class FounderSigneesProvider : ISigneeProvider
        {
            public string Id { get; init; } = "founders";
        
            public async Task<SigneeProviderResult> GetSignees(GetSigneesParameters parameters)
            {
                DataElement dataElement = parameters.InstanceDataAccessor
                    .GetDataElementsForType("Skjemadata")
                    .Single();
        
                var formData = await parameters.InstanceDataAccessor.GetFormData<Skjemadata>(dataElement);
        
                List<ProvidedSignee> providedSignees = [];
                foreach (StifterPerson stifterPerson in formData.StifterPerson)
                {
                    var personSignee = new ProvidedPerson
                    {
                        FullName = string.Join(
                            " ",
                            [stifterPerson.Fornavn, stifterPerson.Mellomnavn, stifterPerson.Etternavn]
                        ),
                        SocialSecurityNumber = stifterPerson.Foedselsnummer?.ToString() ?? string.Empty,
                        // CommunicationConfig er valgfritt, og beskrevet i punkt 6.
                    };
        
                    providedSignees.Add(personSignee);
                }
        
                foreach (StifterVirksomhet stifterVirksomhet in formData.StifterVirksomhet)
                {
                    var organisationSignee = new ProvidedOrganization
                    {
                        Name = stifterVirksomhet.Navn,
                        OrganizationNumber =
                            stifterVirksomhet.Organisasjonsnummer?.ToString() ?? string.Empty,
                        // CommunicationConfig er valgfritt, og beskrevet i punkt 6.
                    };
        
                    providedSignees.Add(organisationSignee);
                }
        
                return new SigneeProviderResult { Signees = providedSignees };
            }
        }
        

        Dette steget må gjøres manuelt. Støtte for konfigurasjon i Altinn Studio kommer senere. Se “Manuelt oppsett”-fanen for denne seksjonen for veiledning.

        5. Valgfritt - Legg til tekstressurser

        Denne seksjonen er kun relevant for deg dersom du ønsker å endre på standardtekstene i kommunikasjon med signatarer - de som skal signere.

        Standardverdiene som brukes dersom kommunikasjonstekstene ikke overstyres er som følger:

          TekstStandardVerdi
          Innboksmelding til signatar - tittel“{appName}: Oppgave til signering”
          Innboksmelding til signatar - undertittel“Din signatur ventes for {appName}.”
          Innboksmelding til signatar - innhold“Du har en oppgave som venter på din signatur. <a href="{instanceUrl}">Klikk her for å åpne applikasjonen.

          Hvis du lurer på noe, kan du kontakte {appOwner}.”
          Sms til signatar - innhold“Din signatur ventes for {appName}. Åpne Altinn-innboksen din for å fortsette.”
          E-post til signatar - emne“{appName}: Oppgave til signering”
          E-post til signatar - innhold“Din signatur ventes for {appName}. Åpne Altinn-innboksen din for å fortsette.

          Hvis du lurer på noe, kan du kontakte {appOwner}.”
          Kvittering til signatar - tittel“{appName}: Signeringen er bekreftet”
          Kvittering til signatar - undertittel“Du har signert for {appName}.”
          Kvittering til signatar - innhold“Dokumentene du har signert er vedlagt. Disse kan lastes ned om ønskelig.

          Hvis du lurer på noe, kan du kontakte {appOwner}.”
          TekstStandardVerdi
          Innboksmelding til signatar - tittel“{appName}: Oppgåve til signering”
          Innboksmelding til signatar - undertittel“Signaturen din vert venta for {appName}.”
          Innboksmelding til signatar - innhold“Du har ei oppgåve som ventar på signaturen din. <a href="{instanceUrl}">Klikk her for å opne applikasjonen.

          Om du lurer på noko, kan du kontakte {appOwner}.”
          Sms til signatar - innhold“Signaturen din vert venta for {appName}. Opne Altinn-innboksen din for å gå vidare.”
          E-post til signatar - emne“{appName}: Oppgåve til signering”
          E-post til signatar - innhold“Signaturen din vert venta for {appName}. Opne Altinn-innboksen din for å gå vidare.

          Om du lurer på noko, kan du kontakte {appOwner}.”
          Kvittering til signatar - tittel“{appName}: Signeringa er stadfesta”
          Kvittering til signatar - undertittel“Du har signert for {appName}.”
          Kvittering til signatar - innhold“Dokumenta du har signert er vedlagde. Dei kan lastast ned om ønskeleg.

          Om du lurer på noko, kan du kontakte {appOwner}.”
          TekstStandardVerdi
          Innboksmelding til signatar - tittel“{appName}: Task for signing”
          Innboksmelding til signatar - undertittel“Your signature is requested for {appName}.”
          Innboksmelding til signatar - innhold“You have a task waiting for your signature. <a href="{instanceUrl}">Click here to open the application.

          If you have any questions, you can contact {appOwner}.”
          Sms til signatar - innhold“Your signature is requested for {appName}. Open your Altinn inbox to proceed.”
          E-post til signatar - emne“{appName}: Task for signing”
          E-post til signatar - innhold“Your signature is requested for {appName}. Open your Altinn inbox to proceed.

          If you have any questions, you can contact {appOwner}.”
          Kvittering til signatar - tittel“{appName}: Signature confirmed”
          Kvittering til signatar - undertittel“Your signature has been registered for {appName}.”
          Kvittering til signatar - innhold“The signed documents are attached. They may be downloaded.

          If you have any questions, you can contact {appOwner}.”

            Dersom du ønsker å overstyre standardtekstene:

            Legg til en teksressurs-fil under ´App/config/texts´ for hvert språk du vil støtte.

            Med CommunicationConfig oppsettet for en oppgitt signatar i implementasjonen din av ISigneeProvider interfacet, kan du knytte opp tekstressurser for å overstyre innholdet i melding til innboksen i Altinn, samt sms og e-post som sendes for å varsle signatar om en signeringsoppgave. Disse kan du kalle hva du vil, og koble dem opp til CommunicationConfig i neste punkt (punkt 4.).

            Eksempel på tekstressurser for varsling med egne tekster for e-post, samt kvittering:

            Legg merke til at tekstressursene for innhold i Altinn innboksen har en $instanceUrl$ plassholder (placeholder). Det vil erstattes med en lenke til skjemaet. Hvis dette overstyres uten å bruke denne plassholderen, så vil IKKE mottaker kunne finne frem til skjemaet med signeringsoppgaven!
                {
                  "id": "signing.correspondence_title_common",
                  "value": "Oppgave - Signer stiftelsesdokumenter"
                },
                {
                  "id": "signing.correspondence_summary_stifter_person",
                  "value": "Du har blitt lagt til som signatar."
                },
                {
                  "id": "signing.correspondence_summary_stifter_organisasjon",
                  "value": "Organisjonen har blitt lagt til som signatar."
                },
                {
                  "id": "signing.correspondence_body_stifter_person",
                  "value": "Du har blitt lagt til som signatar for stiftelsesdokumenter. <br /> $instanceUrl$ <br /><br />Hvis du lurer på noe, ta kontakt med Brønnøysundregistrene på telefon 75 00 75 00."
                },
                {
                  "id": "signing.correspondence_body_stifter_organisasjon",
                  "value": "Organisjonen har blitt lagt til som signatar for stiftelsesdokumenter. <br /> $instanceUrl$ <br /><br />Ved spørsmål, ta kontakt med Brønnøysundregistrene på telefon 75 00 75 00."
                },
                {
                  "id": "signing.notification_content",
                  "value": "Hei $correspondenceRecipientName$,\n\nDu har mottatt stiftelsesdokumenter for signering i Altinn. Logg inn på Altinn for å signere dokumentene.\n\nMed vennlig hilsen\nBrønnøysundregistrene"
                },
                {
                  "id": "signing.email_subject",
                  "value": "Stiftelsesdokumenter mottatt for signering i Altinn. Gå til Altinn-innboks for å signere."
                },
            

            Overstyring av kvittering er ikke mulig å gjøre per signatar, det gjøres generelt for alle signatarer. Her må navnet på tekstressursene være de følgende nøklene for at overstyringen skal skje:

            signing.correspondence_receipt_title - tittel på kvitteringsmelding signing.correspondence_receipt_summary - undertittel på kvitteringsmelding signing.correspondence_receipt_body - innhold i kvitteringsmelding

            Eksempel:

            {
              "id": "signing.correspondence_receipt_title",
              "value": "Receipt: Signing of founding documents"
            },
            {
              "id": "signing.correspondence_receipt_summary",
              "value": "You have signed the founding documents"
            },
            {
              "id": "signing.correspondence_receipt_body",
              "value": "The documents you have signed are attached. These can be downloaded if desired. <br /><br />If you have any questions, contact the Brønnøysund Register Centre at phone 75 00 75 00."
            },
            

            Dette steget må gjøres manuelt. Støtte for konfigurasjon i Altinn Studio kommer senere. Se “Manuelt oppsett”-fanen for denne seksjonen for veiledning.

            6. Valgfritt - skreddersy hvordan signatarene varsles

            Legg merke til at CommunicationConfig er valgfritt. Her kan du overstyre standardtekster brukt i kommunikasjon med signatarene, som beskrevet i forrige punkt. Du kan også overstyre e-post adresse og telefonnummer for signatarene.

            Dersom ikke overstyrt, vil en melding sendes til signatarenes Altinn-innboks med en lenke til den relevante applikasjons­instansen, og en notifikasjon vil bli sendt via e-post.

            Om ikke overstyrt, vil e-postadressene og telefonnumrene populeres som beskrevet i Recipient lookup og Address lookup.

            Dette er de mulige overstyringskonfigurasjonene for kommunikasjon med signatarer:

            PropertyDescriptionType
            CommunicationConfigObjektet for kommunikasjonskonfigurasjonObject
            CommunicationConfig.InboxMessageObjektet for innboksmeldingskonfigurasjonObject
            CommunicationConfig.InboxMessage.TitleTextResourceKeyTekstressursnøkkelen for innboksmeldingstittelString
            CommunicationConfig.InboxMessage.SummaryTextResourceKeyTekstressursnøkkelen for innboksmeldingssammendragString
            CommunicationConfig.InboxMessage.BodyTextResourceKeyTekstressursnøkkelen for innboksmeldingsinnholdString
            CommunicationConfig.NotificationObjektet for varslingskonfigurasjonObject
            CommunicationConfig.Notification.EmailObjektet for e-postvarselingskonfigurasjonObject
            CommunicationConfig.Notification.Email.EmailAddressTekstressursnøkkelen for e-postadresseString
            CommunicationConfig.Notification.Email.SubjectTextResourceKeyTekstressursnøkkelen for e-postemneString
            CommunicationConfig.Notification.Email.BodyTextResourceKeyTekstressursnøkkelen for e-postinnholdString
            CommunicationConfig.Notification.SmsObjektet for SMS-varslingskonfigurasjonObject
            CommunicationConfig.Notification.Sms.MobileNumberTekstressursnøkkelen for mobilnummerString
            CommunicationConfig.Notification.Sms.BodyTextResourceKeyTekstressursnøkkelen for SMS-innholdString
            CommunicationConfig.Notification.NotificationChoiceVarslingspreferansevalgetNotificationChoice enum (String)

              Følgende er et eksempel på overstyring av kommunikasjon med en ProvidedPerson, det samme gjelder for ProvidedOrganization:

              var personSignee = new ProvidedPerson
              {
                  CommunicationConfig = new CommunicationConfig
                  {
                      InboxMessage = new InboxMessage
                      {
                          TitleTextResourceKey = "signing.correspondence_title_common",
                          SummaryTextResourceKey = "signing.correspondence_summary_stifter_organisasjon",
                          BodyTextResourceKey = "signing.correspondence_body_stifter_organisasjon"
                      },
                      Notification = new Notification
                      {
                          Email = new Email
                          {
                              EmailAddress = stifterVirksomhet.Epost,
                              SubjectTextResourceKey = "signing.email_subject",
                              BodyTextResourceKey = "signing.notification_content".Replace(
                                  "{0}",
                                  stifterVirksomhet.Navn
                              ),
                          },
                          Sms = new Sms
                          {
                              MobileNumber = stifterVirksomhet.Mobiltelefon,
                              BodyTextResourceKey = "signing.notification_content".Replace(
                                  "{0}",
                                  stifterVirksomhet.Navn
                              ),
                          }
                          NotificationChoice = NotificationChoice.EmailPreferred,
                      }
                  }
              }
              

              Dette steget må gjøres manuelt. Støtte for konfigurasjon i Altinn Studio kommer senere. Se “Manuelt oppsett”-fanen for denne seksjonen for veiledning.

              6. Test brukerstyrt signering

              Obs! Du kan foreløpig ikke teste i localtest, du må teste i TT02-miljøet.

              Det er en forsinkelse i autorisasjonslaget. Det gjør at det kan ta tid før brukere som har fått delegert tilgang til et skjema med brukerstyrt signering, får se selve skjemaet i Altinn-innboksen.

              Dette skjer bare for

              • de brukerne som er aktivt pålogget Altinn når et eksemplar (instans) blir delegert
              • de som ikke allerede har annen tilgang for InstanceOwner

              For at du skal slippe å oppleve problemer med dette mens du tester, kan du delegere til en person du ikke har brukt i testingen den siste timen.